]> git.wh0rd.org - tt-rss.git/commitdiff
OPML import
authorAndrew Dolgov <fox@bah.spb.su>
Fri, 2 Sep 2005 11:49:47 +0000 (12:49 +0100)
committerAndrew Dolgov <fox@bah.spb.su>
Fri, 2 Sep 2005 11:49:47 +0000 (12:49 +0100)
backend.php
opml.php
prefs.js
prefs.php
tt-rss.css

index 94ddb22ff24c4b220652b6f8f4e5650771caea39..56dd6441d4273b73fe4346adbe83da29f682884c 100644 (file)
                                <a class=\"button\" 
                                href=\"javascript:updateFeedList()\">Refresh</a>&nbsp;
                        OPML: 
-                               <a class=\"button\" 
-                               href=\"opml.php?op=import\">Import</a>&nbsp;
-                               <a class=\"button\" 
-                               href=\"opml.php?op=export\">Export</a>";
+                               <a class=\"button\" href=\"opml.php?op=Export\">Export</a>
+                               ";
                
                        }
 
index 05ad1943c558f407c2de5b6b8e1ee05b7633f99a..f29b19023758597f8d888e56bf17fc870aa66fc1 100644 (file)
--- 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");
        }
 
        require_once "functions.php";
 
        $link = pg_connect(DB_CONN);
-       
+
        pg_query($link, "set client_encoding = 'utf-8'");
 
-       if ($op == "export") {
+       if ($op == "Export") {
                print "<?xml version=\"1.0\"?>";
                print "<opml version=\"1.0\">";
                print "<head><dateCreated>" . date("r", time()) . "</dateCreated></head>"; 
                print "</body></opml>";
        }
 
+       function startElement($parser, $name, $attrs) {
+               if ($name == "OUTLINE") {
+                       $title = pg_escape_string($attrs['TEXT']);
+                       $url = pg_escape_string($attrs['XMLURL']);
+
+                       print "Feed <b>$title</b> ($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.<br>";
+
+                       } else {
+
+                               $result = pg_query("INSERT INTO ttrss_feeds (title, feed_url) VALUES
+                                       ('$title', '$url')");
+
+                               print "<b>Done.</b><br>";
+
+                       }
+
+               }
+       }
+
+       function endElement($parser, $name) {
+
+
+       }
+
+       if ($op == "Import") {
+               print "<html>
+                       <head>
+                               <link rel=\"stylesheet\" href=\"opml.css\" type=\"text/css\">
+                       </head>
+                       <body><h1>Importing OPML...</h1>
+                       <div>";
+
+                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 "<p><a class=\"button\" href=\"prefs.php\">
+                                                       Return to preferences</a>";
+
+                                               return;
+
+                                       }
+                               }
+
+                               xml_parser_free($xml_parser);
+                               fclose($fp);
+
+                       } else {
+                               print("Error: Could not open OPML input.");
+                       }
+
+               } else {        
+                       print "Error: please upload OPML file.";
+               }
+
+               print "<p><a class=\"button\" href=\"prefs.php\">
+                       Return to preferences</a>";
+
+               print "</div></body></html>";
+
+       }
+
+       pg_close($link);
+
 ?>
index b468a362ad33d73d733623fc96578ae352a4722f..e9a0e49dfb8bb0241d93ddfd69aaa7e322e837d6 100644 (file)
--- a/prefs.js
+++ b/prefs.js
@@ -297,6 +297,18 @@ function localPiggieFunction(enable) {
        }
 }
 
+function validateOpmlImport() {
+       
+       var opml_file = document.getElementById("opml_file");
+
+       if (opml_file.value.length == 0) {
+               notify("Please select OPML file to upload.");
+               return false;
+       } else {
+               return true;
+       }
+}
+
 function init() {
 
        // IE kludge
index e0494c224f7519986709c8cbc8a0c13c801d9e2f..1d47d539a4ed8bb920f869f0566eef9afe754d53 100644 (file)
--- a/prefs.php
+++ b/prefs.php
@@ -32,7 +32,7 @@
 
                <div id="piggie">&nbsp;</div>
 
-               <table class="prefAddFeed">
+               <table class="prefAddFeed"><tr>
                        <td><input id="fadd_link"></td>
                        <td colspan="4" align="right">
                                <a class="button" href="javascript:addFeed()">Add feed</a></td></tr>
                
                <div id="feeds">&nbsp;</div>
 
+               <hr>
+
+               <h2>Import OPML</h2>
+
+               <form   enctype="multipart/form-data" method="POST" action="opml.php">
+                       <input type="hidden" name="MAX_FILE_SIZE" value="30000">
+                       File: <input id="opml_file" name="opml_file" type="file">&nbsp;
+                       <input class="button" name="op" onclick="return validateOpmlImport();"
+                               type="submit" value="Import">
+                       </form>
        </td>
 </tr>
 <tr>
index b8c0b6c2cfc30b67ba4ad64f138c6b9b7ded27fc..a714ca5cbe9f1edb1ec0bc4997b65076154c9670 100644 (file)
@@ -218,6 +218,17 @@ table.prefAddFeed input {
        width : 250px;
 }
 
+form.prefForm {
+       border : 1px solid #c0c0c0;
+       padding : 10px;
+       -moz-border-radius : 5px;
+       background-color : #f0f0f0;
+       background-image : url("images/form.png");
+       background-position : bottom left;
+       background-repeat : repeat-x;
+       width : 500px;
+}
+
 table.prefAddFeed {
        border : 1px solid #c0c0c0;
        padding : 10px;
@@ -269,7 +280,7 @@ a.disabledButton:hover {
        color : #909090;
 }
 
-a.button {
+.button {
        font-family : tahoma, sans-serif;
        border : 1px solid #d0d0d0;
        background-image : url("images/button.png");
@@ -281,13 +292,13 @@ a.button {
        font-size : small;
 }
 
-a.button:hover {
+.button:hover {
        background : white;
        text-decoration : none;
        color : black;
 }
 
-a.buttonWarn {
+.buttonWarn {
        font-family : tahoma, sans-serif;
        border : 1px solid #d0d0d0;
        background-image : url("images/button.png");
@@ -299,7 +310,7 @@ a.buttonWarn {
        font-size : small;
 }
 
-a.buttonWarn:hover {
+.buttonWarn:hover {
        background : #fff0f0;
        text-decoration : none;
        color : black;