From 9f311df6262c206a56f47a593244336e6ba1f54c Mon Sep 17 00:00:00 2001
From: Andrew Dolgov 
Date: Fri, 2 Sep 2005 12:49:47 +0100
Subject: [PATCH] OPML import
---
 backend.php |  6 ++--
 opml.php    | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 prefs.js    | 12 +++++++
 prefs.php   | 12 ++++++-
 tt-rss.css  | 19 ++++++++---
 5 files changed, 129 insertions(+), 13 deletions(-)
diff --git a/backend.php b/backend.php
index 94ddb22f..56dd6441 100644
--- a/backend.php
+++ b/backend.php
@@ -571,10 +571,8 @@
 				Refresh 
 			OPML: 
-				Import 
-				Export";
+				Export
+				";
 		
 			}
 
diff --git a/opml.php b/opml.php
index 05ad1943..f29b1902 100644
--- a/opml.php
+++ b/opml.php
@@ -1,8 +1,8 @@
 
 	// FIXME there are some brackets issues here
 
-	$op = $_GET["op"];
-	if ($op == "export") {
+	$op = $_REQUEST["op"];
+	if ($op == "Export") {
 		header("Content-type: application/xml");
 	}
 
@@ -10,10 +10,10 @@
 	require_once "functions.php";
 
 	$link = pg_connect(DB_CONN);
-	
+
 	pg_query($link, "set client_encoding = 'utf-8'");
 
-	if ($op == "export") {
+	if ($op == "Export") {
 		print "";
 		print "";
 		print "" . date("r", time()) . ""; 
@@ -31,4 +31,89 @@
 		print "
Importing OPML...
+			";
+
+		 if (is_file($_FILES['opml_file']['tmp_name'])) {
+		 
+			$xml_parser = xml_parser_create();
+
+			xml_set_element_handler($xml_parser, "startElement", "endElement");
+
+			$fp = fopen($_FILES['opml_file']['tmp_name'], "r");
+
+			if ($fp) {
+
+				while ($data = fread($fp, 4096)) {
+
+					if (!xml_parse($xml_parser, $data, feof($fp))) {
+						
+						print sprintf("Unable to parse OPML file, XML error: %s at line %d",
+							xml_error_string(xml_get_error_code($xml_parser)),
+							xml_get_current_line_number($xml_parser));
+
+						print "
+							Return to preferences";
+
+						return;
+
+					}
+				}
+
+				xml_parser_free($xml_parser);
+				fclose($fp);
+
+			} else {
+				print("Error: Could not open OPML input.");
+			}
+
+		} else {	
+			print "Error: please upload OPML file.";
+		}
+
+		print "
+			Return to preferences";
+
+		print "
";
 	}
 
+	function startElement($parser, $name, $attrs) {
+		if ($name == "OUTLINE") {
+			$title = pg_escape_string($attrs['TEXT']);
+			$url = pg_escape_string($attrs['XMLURL']);
+
+			print "Feed $title ($url)... ";
+
+			$result = pg_query("SELECT id FROM ttrss_feeds WHERE
+				title = '$title' OR feed_url = '$url'");
+
+			if (pg_num_rows($result) > 0) {
+				
+				print " Already imported.
";
+
+			} else {
+
+				$result = pg_query("INSERT INTO ttrss_feeds (title, feed_url) VALUES
+					('$title', '$url')");
+
+				print "Done.
";
+
+			}
+
+		}
+	}
+
+	function endElement($parser, $name) {
+
+
+	}
+
+	if ($op == "Import") {
+		print "
+