From b6a6e262bebfdcea6b9523e63c287f94b4ffcff6 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 13 Jan 2010 23:59:02 +0300 Subject: [PATCH] rework OPML import to use popup dialog --- modules/opml_domdoc.php | 20 +++--- modules/opml_domxml.php | 147 +++++++++++++++++++-------------------- modules/popup-dialog.php | 61 ++++++++++++++++ modules/pref-feeds.php | 23 +++++- prefs.js | 27 +++++-- 5 files changed, 183 insertions(+), 95 deletions(-) diff --git a/modules/opml_domdoc.php b/modules/opml_domdoc.php index a29a1eb69..51b771337 100644 --- a/modules/opml_domdoc.php +++ b/modules/opml_domdoc.php @@ -22,8 +22,6 @@ $outlines = $xpath->query($query); - print ""; - foreach ($outlines as $outline) { $feed_title = db_escape_string($outline->attributes->getNamedItem('text')->nodeValue); @@ -51,7 +49,7 @@ if (db_num_rows($result) == 0) { - printf(__("Adding category %s...
"), $cat_title); + printf(__("
  • Adding category %s.
  • "), $cat_title); db_query($link, "INSERT INTO ttrss_feed_categories (title,owner_uid) @@ -96,11 +94,11 @@ feed_url = '$feed_url' AND owner_uid = '$owner_uid'"); - print ""; + print "
  • $feed_title + (rss) "; if (db_num_rows($result) > 0) { - print "
  • "; + print __('is already imported.'); } else { if ($cat_id) { @@ -120,22 +118,20 @@ //print $add_query; db_query($link, $add_query); - print ""; + print __('OK'); } - print ""; + print ""; db_query($link, "COMMIT"); } - print "
    $feed_title - (rss)".__('Already imported.')."".__('Done.')."
    "; - } else { - print "
    ".__('Error while parsing document.')."
    "; + print_error(__('Error while parsing document.')); } } else { - print "
    ".__('Error: please upload OPML file.')."
    "; + print_error(__('Error: please upload OPML file.')); } diff --git a/modules/opml_domxml.php b/modules/opml_domxml.php index 9364145b1..1cc1467a8 100644 --- a/modules/opml_domxml.php +++ b/modules/opml_domxml.php @@ -24,123 +24,118 @@ $outlines = $body->get_elements_by_tagname('outline'); - print ""; + foreach ($outlines as $outline) { - foreach ($outlines as $outline) { + $feed_title = db_escape_string($outline->get_attribute('text')); - $feed_title = db_escape_string($outline->get_attribute('text')); - - if (!$feed_title) { - $feed_title = db_escape_string($outline->get_attribute('title')); - } + if (!$feed_title) { + $feed_title = db_escape_string($outline->get_attribute('title')); + } - $cat_title = db_escape_string($outline->get_attribute('title')); + $cat_title = db_escape_string($outline->get_attribute('title')); - if (!$cat_title) { - $cat_title = db_escape_string($outline->get_attribute('text')); - } - - $feed_url = db_escape_string($outline->get_attribute('xmlUrl')); - $site_url = db_escape_string($outline->get_attribute('htmlUrl')); + if (!$cat_title) { + $cat_title = db_escape_string($outline->get_attribute('text')); + } - if ($cat_title && !$feed_url) { + $feed_url = db_escape_string($outline->get_attribute('xmlUrl')); + $site_url = db_escape_string($outline->get_attribute('htmlUrl')); - db_query($link, "BEGIN"); - - $result = db_query($link, "SELECT id FROM - ttrss_feed_categories WHERE title = '$cat_title' AND - owner_uid = '$owner_uid' LIMIT 1"); + if ($cat_title && !$feed_url) { - if (db_num_rows($result) == 0) { + db_query($link, "BEGIN"); + + $result = db_query($link, "SELECT id FROM + ttrss_feed_categories WHERE title = '$cat_title' AND + owner_uid = '$owner_uid' LIMIT 1"); - printf(__("Adding category %s."), $cat_title); - print "
    "; + if (db_num_rows($result) == 0) { - db_query($link, "INSERT INTO ttrss_feed_categories - (title,owner_uid) - VALUES ('$cat_title', '$owner_uid')"); - } + printf(__("
  • Adding category %s.
  • "), $cat_title); - db_query($link, "COMMIT"); + db_query($link, "INSERT INTO ttrss_feed_categories + (title,owner_uid) + VALUES ('$cat_title', '$owner_uid')"); } -// print "$active_category : $feed_title : $feed_url
    "; + db_query($link, "COMMIT"); + } - if (!$feed_title || !$feed_url) continue; +// print "$active_category : $feed_title : $feed_url
    "; - db_query($link, "BEGIN"); + if (!$feed_title || !$feed_url) continue; - $cat_id = null; + db_query($link, "BEGIN"); - $parent_node = $outline->parent_node(); + $cat_id = null; - if ($parent_node && $parent_node->node_name() == "outline") { - $element_category = $parent_node->get_attribute('title'); - if (!$element_category) $element_category = $parent_node->get_attribute('text'); + $parent_node = $outline->parent_node(); - } else { - $element_category = ''; - } + if ($parent_node && $parent_node->node_name() == "outline") { + $element_category = $parent_node->get_attribute('title'); + if (!$element_category) $element_category = $parent_node->get_attribute('text'); - if ($element_category) { + } else { + $element_category = ''; + } - $element_category = db_escape_string($element_category); + if ($element_category) { - $result = db_query($link, "SELECT id FROM - ttrss_feed_categories WHERE title = '$element_category' AND - owner_uid = '$owner_uid' LIMIT 1"); + $element_category = db_escape_string($element_category); - if (db_num_rows($result) == 1) { - $cat_id = db_fetch_result($result, 0, "id"); - } - } + $result = db_query($link, "SELECT id FROM + ttrss_feed_categories WHERE title = '$element_category' AND + owner_uid = '$owner_uid' LIMIT 1"); - $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE - feed_url = '$feed_url' - AND owner_uid = '$owner_uid'"); + if (db_num_rows($result) == 1) { + $cat_id = db_fetch_result($result, 0, "id"); + } + } - print ""; + $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE + feed_url = '$feed_url' + AND owner_uid = '$owner_uid'"); - if (db_num_rows($result) > 0) { - print ""; - } else { + print "
  • $feed_title + (rss) "; - if ($cat_id) { - $add_query = "INSERT INTO ttrss_feeds - (title, feed_url, owner_uid, cat_id, site_url) VALUES - ('$feed_title', '$feed_url', '$owner_uid', - '$cat_id', '$site_url')"; + if (db_num_rows($result) > 0) { + print __("is already imported."); + } else { - } else { - $add_query = "INSERT INTO ttrss_feeds - (title, feed_url, owner_uid, cat_id, site_url) VALUES - ('$feed_title', '$feed_url', '$owner_uid', '$default_cat_id', - '$site_url')"; + if ($cat_id) { + $add_query = "INSERT INTO ttrss_feeds + (title, feed_url, owner_uid, cat_id, site_url) VALUES + ('$feed_title', '$feed_url', '$owner_uid', + '$cat_id', '$site_url')"; - } + } else { + $add_query = "INSERT INTO ttrss_feeds + (title, feed_url, owner_uid, cat_id, site_url) VALUES + ('$feed_title', '$feed_url', '$owner_uid', '$default_cat_id', + '$site_url')"; - db_query($link, $add_query); - - print "
  • "; } - print ""; + db_query($link, $add_query); - db_query($link, "COMMIT"); + print __('OK'); } - print "
    $feed_title - (rss)".__("Already imported.")."".__('Done.')."
    "; + print ""; + + db_query($link, "COMMIT"); + } } else { - print "
    ".__("Error: can't find body element.")."
    "; + print_error(__("Error: can't find body element.")); } } else { - print "
    ".__("Error while parsing document.")."
    "; + print_error(__("Error while parsing document.")); } } else { - print "
    ".__("Error: please upload OPML file.")."
    "; + print_error(__("Error: please upload OPML file.")); } } diff --git a/modules/popup-dialog.php b/modules/popup-dialog.php index 7ba30a9f7..06a82ad57 100644 --- a/modules/popup-dialog.php +++ b/modules/popup-dialog.php @@ -3,6 +3,67 @@ $id = $_REQUEST["id"]; $param = db_escape_string($_REQUEST["param"]); + if ($id == "importOpml") { + print "
    ".__('OPML Import')."
    "; + print "
    "; + + print "
    "; + + $owner_uid = $_SESSION["uid"]; + + db_query($link, "BEGIN"); + + /* create Imported feeds category just in case */ + + $result = db_query($link, "SELECT id FROM + ttrss_feed_categories WHERE title = 'Imported feeds' AND + owner_uid = '$owner_uid' LIMIT 1"); + + if (db_num_rows($result) == 0) { + db_query($link, "INSERT INTO ttrss_feed_categories + (title,owner_uid) + VALUES ('Imported feeds', '$owner_uid')"); + } + + db_query($link, "COMMIT"); + + /* Handle OPML import by DOMXML/DOMDocument */ + + if (function_exists('domxml_open_file')) { + print "
      "; + print "
    • ".__("Importing using DOMXML.")."
    • "; + require_once "modules/opml_domxml.php"; + opml_import_domxml($link, $owner_uid); + print "
    "; + } else if (PHP_VERSION >= 5) { + print "
      "; + print "
    • ".__("Importing using DOMDocument.")."
    • "; + require_once "modules/opml_domdoc.php"; + opml_import_domdoc($link, $owner_uid); + print "
    "; + } else { + print_error(__("DOMXML extension is not found. It is required for PHP versions below 5.")); + } + + print "
    "; + + print "
    "; + + print ""; + + print "
    "; + + print ""; + + print "
    "; + + return; + } + if ($id == "editPrefProfiles") { print "
    ".__('Settings Profiles')."
    "; diff --git a/modules/pref-feeds.php b/modules/pref-feeds.php index 05c796bb3..e724125ec 100644 --- a/modules/pref-feeds.php +++ b/modules/pref-feeds.php @@ -719,6 +719,8 @@ foreach ($ids as $id) { remove_feed($link, $id, $_SESSION["uid"]); } + + return; } if ($subop == "clear") { @@ -1377,9 +1379,9 @@ } - print "

    ".__('OPML')."

    + print "

    ".__('OPML')."

    "; -
    +/* print "
    ".__('File:')."   @@ -1387,7 +1389,22 @@ type=\"submit\">".__('Import')."
    "; - print " "; + print " "; */ + + print ""; + + print "
    "; + print "
    +   + + + +
    "; + print "
     "; print ""; diff --git a/prefs.js b/prefs.js index 27a86c9d3..6c7f6f636 100644 --- a/prefs.js +++ b/prefs.js @@ -576,15 +576,17 @@ function removeSelectedFeeds() { if (ok) { - notify_progress("Unsubscribing from selected feeds..."); + notify_progress("Unsubscribing from selected feeds...", true); var query = "?op=pref-feeds&subop=remove&ids="+ param_escape(sel_rows.toString()); - + + debug(query); + new Ajax.Request("backend.php", { parameters: query, onComplete: function(transport) { - feedlist_callback2(transport); + updateFeedList(); } }); } @@ -996,7 +998,7 @@ function piggie(enable) { } } -function validateOpmlImport() { +function opmlImport() { var opml_file = $("opml_file"); @@ -1006,6 +1008,8 @@ function validateOpmlImport() { } else { return true; } + + notify_progress("Importing, please wait...", true); } function updateFilterList(sort_key) { @@ -2224,4 +2228,19 @@ function activatePrefProfile() { return false; } +function opmlImportDone() { + closeInfoBox(); + updateFeedList(); +} + +function opml_import_handler(iframe) { + try { + var tmp = new Object(); + tmp.responseText = iframe.document.body.innerHTML; + notify(''); + infobox_callback2(tmp); + } catch (e) { + exception_error("opml_import_handler", e); + } +}