summaryrefslogtreecommitdiff
path: root/classes/opml.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-09-02 13:45:52 +0400
committerAndrew Dolgov <[email protected]>2012-09-02 13:45:52 +0400
commit3b003f63969b72ddccdc249d89b2b537af8132b9 (patch)
tree1e77de041f86a14f381e83be39eef2ac607bfcf9 /classes/opml.php
parentfd994f1a488783003ede5fdb9cf2f68ef91696bb (diff)
implement OPML filter import
Diffstat (limited to 'classes/opml.php')
-rw-r--r--classes/opml.php108
1 files changed, 52 insertions, 56 deletions
diff --git a/classes/opml.php b/classes/opml.php
index 1940250d3..e76f16bbe 100644
--- a/classes/opml.php
+++ b/classes/opml.php
@@ -310,75 +310,71 @@ class Opml extends Handler_Protected {
}
}
- /* private function opml_import_filter($doc, $node, $owner_uid) {
+ private function opml_import_filter($doc, $node, $owner_uid) {
$attrs = $node->attributes;
- $filter_name = db_escape_string($attrs->getNamedItem('filter-name')->nodeValue);
+ $filter_type = db_escape_string($attrs->getNamedItem('filter-type')->nodeValue);
- if ($filter_name) {
-
- $filter = json_decode($node->nodeValue, true);
+ if ($filter_type == '2') {
+ $filter = json_decode($node->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($this->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($this->link, "SELECT id FROM ttrss_feeds WHERE
- feed_url = '$feed_url' AND owner_uid = $owner_uid");
-
- if (db_num_rows($result) != 0) {
- $feed_id = db_fetch_result($result, 0, "id");
- } else {
- $feed_id = "NULL";
- }
+ $match_any_rule = bool_to_sql_bool($filter["match_any_rule"]);
+ $enabled = bool_to_sql_bool($filter["enabled"]);
- $result = db_query($this->link, "SELECT id FROM ttrss_feed_categories WHERE
- title = '$cat_title' AND owner_uid = $owner_uid");
+ db_query($this->link, "BEGIN");
- if (db_num_rows($result) != 0) {
- $cat_id = db_fetch_result($result, 0, "id");
- } else {
+ db_query($this->link, "INSERT INTO ttrss_filters2 (match_any_rule,enabled,owner_uid)
+ VALUES ($match_any_rule, $enabled,".$_SESSION["uid"].")");
+
+ $result = db_query($this->link, "SELECT MAX(id) AS id FROM ttrss_filters2 WHERE
+ owner_uid = ".$_SESSION["uid"]);
+ $filter_id = db_fetch_result($result, 0, "id");
+
+ if ($filter_id) {
+ $this->opml_notice(T_sprintf("Adding filter..."));
+
+ foreach ($filter["rules"] as $rule) {
+ $feed_id = "NULL";
$cat_id = "NULL";
- }
- $this->opml_notice(T_sprintf("Adding filter %s", htmlspecialchars($reg_exp)));
+ if (!$rule["cat_filter"]) {
+ $tmp_result = db_query($this->link, "SELECT id FROM ttrss_feeds
+ WHERE title = '".db_escape_string($rule["feed"])."' AND owner_uid = ".$_SESSION["uid"]);
+ if (db_num_rows($tmp_result) > 0) {
+ $feed_id = db_fetch_result($tmp_result, 0, "id");
+ }
+ } else {
+ $tmp_result = db_query($this->link, "SELECT id FROM ttrss_feed_categories
+ WHERE title = '".db_escape_string($rule["feed"])."' AND owner_uid = ".$_SESSION["uid"]);
+
+ if (db_num_rows($tmp_result) > 0) {
+ $cat_id = db_fetch_result($tmp_result, 0, "id");
+ }
+ }
+
+ $cat_filter = bool_to_sql_bool($rule["cat_filter"]);
+ $reg_exp = db_escape_string($rule["reg_exp"]);
+ $filter_type = (int)$rule["filter_type"];
+
+ db_query($this->link, "INSERT INTO ttrss_filters2_rules (feed_id,cat_id,filter_id,filter_type,reg_exp,cat_filter)
+ VALUES ($feed_id, $cat_id, $filter_id, $filter_type, '$reg_exp', $cat_filter)");
+ }
- $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'].")";
+ foreach ($filter["actions"] as $action) {
- db_query($this->link, $query);
+ $action_id = (int)$action["action_id"];
+ $action_param = db_escape_string($action["action_param"]);
- } else {
- $this->opml_notice(T_sprintf("Duplicate filter %s", htmlspecialchars($reg_exp)));
+ db_query($this->link, "INSERT INTO ttrss_filters2_actions (filter_id,action_id,action_param)
+ VALUES ($filter_id, $action_id, '$action_param')");
+ }
}
+
+ db_query($this->link, "COMMIT");
}
}
- } */
+ }
private function opml_import_category($doc, $root_node, $owner_uid, $parent_id) {
$body = $doc->getElementsByTagName('body');
@@ -436,7 +432,7 @@ class Opml extends Handler_Protected {
$this->opml_import_label($doc, $node, $owner_uid);
break;
case "tt-rss-filters":
- //$this->opml_import_filter($doc, $node, $owner_uid);
+ $this->opml_import_filter($doc, $node, $owner_uid);
break;
default:
$this->opml_import_feed($doc, $node, $dst_cat_id, $owner_uid);
@@ -452,7 +448,7 @@ class Opml extends Handler_Protected {
$debug = isset($_REQUEST["debug"]);
$doc = false;
- #if ($debug) $doc = DOMDocument::load("/tmp/test.opml");
+ if ($debug) $doc = DOMDocument::load("/tmp/test.opml");
if (is_file($_FILES['opml_file']['tmp_name'])) {
$doc = DOMDocument::load($_FILES['opml_file']['tmp_name']);