From 34aa9e20c7ff7d80094bef88b16299cd277a5c07 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov
Date: Tue, 27 Dec 2011 18:37:07 +0400
Subject: [PATCH] implement filter import
---
classes/dlg.php | 5 ++--
js/prefs.js | 8 ++++++
opml.php | 65 +++++++++++++++++++++++++++++++++++++++++++++----
3 files changed, 71 insertions(+), 7 deletions(-)
diff --git a/classes/dlg.php b/classes/dlg.php
index 9565dff8..bd18f54d 100644
--- a/classes/dlg.php
+++ b/classes/dlg.php
@@ -19,6 +19,8 @@ class Dlg extends Protected_Handler {
function importOpml() {
header("Content-Type: text/html"); # required for iframe
+ print __("If you have imported labels and/or filters, you might need to reload preferences to see your new data.") . "
";
+
print "";
$owner_uid = $_SESSION["uid"];
@@ -41,7 +43,6 @@ class Dlg extends Protected_Handler {
/* Handle OPML import by DOMXML/DOMDocument */
print "
";
- print "- ".__("Importing using DOMDocument.")."
";
require_once "opml.php";
opml_import_domdoc($this->link, $owner_uid);
print "
";
@@ -49,7 +50,7 @@ class Dlg extends Protected_Handler {
print "
";
print "";
print "
";
diff --git a/js/prefs.js b/js/prefs.js
index bd386699..27598285 100644
--- a/js/prefs.js
+++ b/js/prefs.js
@@ -767,6 +767,14 @@ function opmlImportComplete(iframe) {
style: "width: 600px",
onCancel: function() {
updateFeedList();
+ updateFilterList();
+ updateLabelList();
+ },
+ execute: function() {
+ updateFeedList();
+ updateFilterList();
+ updateLabelList();
+ this.hide();
},
content: content});
diff --git a/opml.php b/opml.php
index 2190b565..9f4fd97a 100644
--- a/opml.php
+++ b/opml.php
@@ -109,10 +109,11 @@
$bg_color = db_escape_string($attributes->getNamedItem('label-bg-color')->nodeValue);
if (!label_find_id($link, $label_name, $_SESSION['uid'])) {
- printf("
".__("Adding label %s")."", $label_name);
+ printf("
".__("Adding label %s")."", htmlspecialchars($label_name));
label_create($link, $label_name, $fg_color, $bg_color);
} else {
- printf("
".__("Duplicate label: %s")."", $label_name);
+ printf("
".__("Duplicate label: %s")."",
+ htmlspecialchars($label_name));
}
}
}
@@ -127,9 +128,63 @@
$filter = json_decode($outline->nodeValue, true);
if ($filter) {
- /////
-
-
+ $reg_exp = db_escape_string($filter['reg_exp']);
+ $filter_type = (int)$filter['filter_type'];
+ $action_id = (int)$filter['action_id'];
+
+ $result = db_query($link, "SELECT id FROM ttrss_filters WHERE
+ reg_exp = '$reg_exp' AND
+ filter_type = '$filter_type' AND
+ action_id = '$action_id' AND
+ owner_uid = " .$_SESSION['uid']);
+
+ if (db_num_rows($result) == 0) {
+ $enabled = bool_to_sql_bool($filter['enabled']);
+ $action_param = db_escape_string($filter['action_param']);
+ $inverse = bool_to_sql_bool($filter['inverse']);
+ $filter_param = db_escape_string($filter['filter_param']);
+ $cat_filter = bool_to_sql_bool($filter['cat_filter']);
+
+ $feed_url = db_escape_string($filter['feed_url']);
+ $cat_title = db_escape_string($filter['cat_title']);
+
+ $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
+ feed_url = '$feed_url' AND owner_uid = ".$_SESSION['uid']);
+
+ if (db_num_rows($result) != 0) {
+ $feed_id = db_fetch_result($result, 0, "id");
+ } else {
+ $feed_id = "NULL";
+ }
+
+ $result = db_query($link, "SELECT id FROM ttrss_feed_categories WHERE
+ title = '$cat_title' AND owner_uid = ".$_SESSION['uid']);
+
+ if (db_num_rows($result) != 0) {
+ $cat_id = db_fetch_result($result, 0, "id");
+ } else {
+ $cat_id = "NULL";
+ }
+
+ printf("
".__("Adding filter %s")."", htmlspecialchars($reg_exp));
+
+ $query = "INSERT INTO ttrss_filters (filter_type, action_id,
+ enabled, inverse, action_param, filter_param,
+ cat_filter, feed_id,
+ cat_id, reg_exp,
+ owner_uid)
+ VALUES ($filter_type, $action_id,
+ $enabled, $inverse, '$action_param', '$filter_param',
+ $cat_filter, $feed_id,
+ $cat_id, '$reg_exp', ".
+ $_SESSION['uid'].")";
+
+ db_query($link, $query);
+
+ } else {
+ printf("
".__("Duplicate filter %s")."", htmlspecialchars($reg_exp));
+
+ }
}
}
}
--
2.39.5