diff options
Diffstat (limited to 'classes')
-rw-r--r-- | classes/api.php | 12 | ||||
-rw-r--r-- | classes/article.php | 16 | ||||
-rwxr-xr-x | classes/feeds.php | 10 | ||||
-rw-r--r-- | classes/labels.php | 162 | ||||
-rw-r--r-- | classes/opml.php | 4 | ||||
-rwxr-xr-x | classes/pref/feeds.php | 4 | ||||
-rw-r--r-- | classes/pref/labels.php | 8 |
7 files changed, 189 insertions, 27 deletions
diff --git a/classes/api.php b/classes/api.php index cb035c86b..bffa2bf07 100644 --- a/classes/api.php +++ b/classes/api.php @@ -458,14 +458,14 @@ class API extends Handler { $checked = false; foreach ($article_labels as $al) { - if (feed_to_label_id($al[0]) == $line['id']) { + if (Labels::feed_to_label_id($al[0]) == $line['id']) { $checked = true; break; } } array_push($rv, array( - "id" => (int)label_to_feed_id($line['id']), + "id" => (int)Labels::label_to_feed_id($line['id']), "caption" => $line['caption'], "fg_color" => $line['fg_color'], "bg_color" => $line['bg_color'], @@ -481,8 +481,8 @@ class API extends Handler { $label_id = (int) $this->dbh->escape_string($_REQUEST['label_id']); $assign = (bool) ($this->dbh->escape_string($_REQUEST['assign']) == "true"); - $label = $this->dbh->escape_string(label_find_caption( - feed_to_label_id($label_id), $_SESSION["uid"])); + $label = $this->dbh->escape_string(Labels::find_caption( + Labels::feed_to_label_id($label_id), $_SESSION["uid"])); $num_updated = 0; @@ -491,9 +491,9 @@ class API extends Handler { foreach ($article_ids as $id) { if ($assign) - label_add_article($id, $label, $_SESSION["uid"]); + Labels::add_article($id, $label, $_SESSION["uid"]); else - label_remove_article($id, $label, $_SESSION["uid"]); + Labels::remove_article($id, $label, $_SESSION["uid"]); ++$num_updated; diff --git a/classes/article.php b/classes/article.php index 95f1704c9..45974a23c 100644 --- a/classes/article.php +++ b/classes/article.php @@ -154,7 +154,7 @@ class Article extends Handler_Protected { if (count($labels) != 0) { foreach ($labels as $label) { - label_add_article($ref_id, trim($label), $owner_uid); + Labels::add_article($ref_id, trim($label), $owner_uid); } } @@ -179,7 +179,7 @@ class Article extends Handler_Protected { if (count($labels) != 0) { foreach ($labels as $label) { - label_add_article($ref_id, trim($label), $owner_uid); + Labels::add_article($ref_id, trim($label), $owner_uid); } } @@ -344,7 +344,7 @@ class Article extends Handler_Protected { $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); $label_id = $this->dbh->escape_string($_REQUEST["lid"]); - $label = $this->dbh->escape_string(label_find_caption($label_id, + $label = $this->dbh->escape_string(Labels::find_caption($label_id, $_SESSION["uid"])); $reply["info-for-headlines"] = array(); @@ -354,9 +354,9 @@ class Article extends Handler_Protected { foreach ($ids as $id) { if ($assign) - label_add_article($id, $label, $_SESSION["uid"]); + Labels::add_article($id, $label, $_SESSION["uid"]); else - label_remove_article($id, $label, $_SESSION["uid"]); + Labels::remove_article($id, $label, $_SESSION["uid"]); $labels = $this->get_article_labels($id, $_SESSION["uid"]); @@ -955,16 +955,16 @@ class Article extends Handler_Protected { ORDER BY caption"); while ($line = db_fetch_assoc($result)) { - $rk = array(label_to_feed_id($line["label_id"]), + $rk = array(Labels::label_to_feed_id($line["label_id"]), $line["caption"], $line["fg_color"], $line["bg_color"]); array_push($rv, $rk); } if (count($rv) > 0) - label_update_cache($owner_uid, $id, $rv); + Labels::update_cache($owner_uid, $id, $rv); else - label_update_cache($owner_uid, $id, array("no-labels" => 1)); + Labels::update_cache($owner_uid, $id, array("no-labels" => 1)); return $rv; } diff --git a/classes/feeds.php b/classes/feeds.php index 740c7df43..6c85bbf31 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -870,7 +870,7 @@ class Feeds extends Handler_Protected { $result = false; if ($feed < LABEL_BASE_INDEX) { - $label_feed = feed_to_label_id($feed); + $label_feed = Labels::feed_to_label_id($feed); $result = $this->dbh->query("SELECT id FROM ttrss_labels2 WHERE id = '$label_feed' AND owner_uid = " . $_SESSION['uid']); } else if (!$cat_view && is_numeric($feed) && $feed > 0) { @@ -1354,7 +1354,7 @@ class Feeds extends Handler_Protected { } else if ($feed < LABEL_BASE_INDEX) { // label - $label_id = feed_to_label_id($feed); + $label_id = Labels::feed_to_label_id($feed); db_query("UPDATE ttrss_user_entries SET unread = false, last_read = NOW() WHERE ref_id IN @@ -1435,7 +1435,7 @@ class Feeds extends Handler_Protected { } else if ($feed < LABEL_BASE_INDEX) { - $label_id = feed_to_label_id($feed); + $label_id = Labels::feed_to_label_id($feed); return Feeds::getLabelUnread($label_id, $owner_uid); @@ -1608,7 +1608,7 @@ class Feeds extends Handler_Protected { } else if ($id == -6) { return __("Recently read"); } else if ($id < LABEL_BASE_INDEX) { - $label_id = feed_to_label_id($id); + $label_id = Labels::feed_to_label_id($id); $result = db_query("SELECT caption FROM ttrss_labels2 WHERE id = '$label_id'"); if (db_num_rows($result) == 1) { return db_fetch_result($result, 0, "caption"); @@ -1931,7 +1931,7 @@ class Feeds extends Handler_Protected { $query_strategy_part = "true"; $vfeed_query_part = "ttrss_feeds.title AS feed_title,"; } else if ($feed <= LABEL_BASE_INDEX) { // labels - $label_id = feed_to_label_id($feed); + $label_id = Labels::feed_to_label_id($feed); $query_strategy_part = "label_id = '$label_id' AND ttrss_labels2.id = ttrss_user_labels2.label_id AND diff --git a/classes/labels.php b/classes/labels.php new file mode 100644 index 000000000..2ca623a32 --- /dev/null +++ b/classes/labels.php @@ -0,0 +1,162 @@ +<?php +class Labels +{ + static function label_to_feed_id($label) { + return LABEL_BASE_INDEX - 1 - abs($label); + } + + static function feed_to_label_id($feed) { + return LABEL_BASE_INDEX - 1 + abs($feed); + } + + static function find_id($label, $owner_uid) { + $result = db_query( + "SELECT id FROM ttrss_labels2 WHERE caption = '$label' + AND owner_uid = '$owner_uid' LIMIT 1"); + + if (db_num_rows($result) == 1) { + return db_fetch_result($result, 0, "id"); + } else { + return 0; + } + } + + static function find_caption($label, $owner_uid) { + $result = db_query( + "SELECT caption FROM ttrss_labels2 WHERE id = '$label' + AND owner_uid = '$owner_uid' LIMIT 1"); + + if (db_num_rows($result) == 1) { + return db_fetch_result($result, 0, "caption"); + } else { + return ""; + } + } + + static function get_all_labels($owner_uid) { + $rv = array(); + + $result = db_query("SELECT fg_color, bg_color, caption FROM ttrss_labels2 WHERE owner_uid = " . $owner_uid); + + while ($line = db_fetch_assoc($result)) { + array_push($rv, $line); + } + + return $rv; + } + + static function update_cache($owner_uid, $id, $labels = false, $force = false) { + + if ($force) + Labels::clear_cache($id); + + if (!$labels) + $labels = Article::get_article_labels($id); + + $labels = db_escape_string(json_encode($labels)); + + db_query("UPDATE ttrss_user_entries SET + label_cache = '$labels' WHERE ref_id = '$id' AND owner_uid = '$owner_uid'"); + + } + + static function clear_cache($id) { + + db_query("UPDATE ttrss_user_entries SET + label_cache = '' WHERE ref_id = '$id'"); + + } + + static function remove_article($id, $label, $owner_uid) { + + $label_id = Labels::find_id($label, $owner_uid); + + if (!$label_id) return; + + db_query( + "DELETE FROM ttrss_user_labels2 + WHERE + label_id = '$label_id' AND + article_id = '$id'"); + + Labels::clear_cache($id); + } + + static function add_article($id, $label, $owner_uid) { + + $label_id = Labels::find_id($label, $owner_uid); + + if (!$label_id) return; + + $result = db_query( + "SELECT + article_id FROM ttrss_labels2, ttrss_user_labels2 + WHERE + label_id = id AND + label_id = '$label_id' AND + article_id = '$id' AND owner_uid = '$owner_uid' + LIMIT 1"); + + if (db_num_rows($result) == 0) { + db_query("INSERT INTO ttrss_user_labels2 + (label_id, article_id) VALUES ('$label_id', '$id')"); + } + + Labels::clear_cache($id); + + } + + static function remove($id, $owner_uid) { + if (!$owner_uid) $owner_uid = $_SESSION["uid"]; + + db_query("BEGIN"); + + $result = db_query("SELECT caption FROM ttrss_labels2 + WHERE id = '$id'"); + + $caption = db_fetch_result($result, 0, "caption"); + + $result = db_query("DELETE FROM ttrss_labels2 WHERE id = '$id' + AND owner_uid = " . $owner_uid); + + if (db_affected_rows($result) != 0 && $caption) { + + /* Remove access key for the label */ + + $ext_id = LABEL_BASE_INDEX - 1 - $id; + + db_query("DELETE FROM ttrss_access_keys WHERE + feed_id = '$ext_id' AND owner_uid = $owner_uid"); + + /* Remove cached data */ + + db_query("UPDATE ttrss_user_entries SET label_cache = '' + WHERE label_cache LIKE '%$caption%' AND owner_uid = " . $owner_uid); + + } + + db_query("COMMIT"); + } + + static function create($caption, $fg_color = '', $bg_color = '', $owner_uid = false) { + + if (!$owner_uid) $owner_uid = $_SESSION['uid']; + + db_query("BEGIN"); + + $result = db_query("SELECT id FROM ttrss_labels2 + WHERE caption = '$caption' AND owner_uid = $owner_uid"); + + if (db_num_rows($result) == 0) { + $result = db_query( + "INSERT INTO ttrss_labels2 (caption,owner_uid,fg_color,bg_color) + VALUES ('$caption', '$owner_uid', '$fg_color', '$bg_color')"); + + $result = db_affected_rows($result) != 0; + } + + db_query("COMMIT"); + + return $result; + } +}
\ No newline at end of file diff --git a/classes/opml.php b/classes/opml.php index a3381cc74..0671053c8 100644 --- a/classes/opml.php +++ b/classes/opml.php @@ -292,9 +292,9 @@ class Opml extends Handler_Protected { $fg_color = $this->dbh->escape_string($attrs->getNamedItem('label-fg-color')->nodeValue); $bg_color = $this->dbh->escape_string($attrs->getNamedItem('label-bg-color')->nodeValue); - if (!label_find_id($label_name, $_SESSION['uid'])) { + if (!Labels::find_id($label_name, $_SESSION['uid'])) { $this->opml_notice(T_sprintf("Adding label %s", htmlspecialchars($label_name))); - label_create($label_name, $fg_color, $bg_color, $owner_uid); + Labels::create($label_name, $fg_color, $bg_color, $owner_uid); } else { $this->opml_notice(T_sprintf("Duplicate label: %s", htmlspecialchars($label_name))); } diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index c12e76f6b..f1eea93f7 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -171,7 +171,7 @@ class Pref_Feeds extends Handler_Protected { while ($line = $this->dbh->fetch_assoc($result)) { - $label_id = label_to_feed_id($line['id']); + $label_id = Labels::label_to_feed_id($line['id']); $feed = $this->feedlist_init_feed($label_id, false, 0); @@ -1806,7 +1806,7 @@ class Pref_Feeds extends Handler_Protected { CCache::remove($id, $owner_uid); } else { - label_remove(feed_to_label_id($id), $owner_uid); + Labels::remove(Labels::feed_to_label_id($id), $owner_uid); //CCache::remove($id, $owner_uid); don't think labels are cached } } diff --git a/classes/pref/labels.php b/classes/pref/labels.php index 26fbb02b1..5720a1f4b 100644 --- a/classes/pref/labels.php +++ b/classes/pref/labels.php @@ -136,7 +136,7 @@ class Pref_Labels extends Handler_Protected { AND owner_uid = " . $_SESSION["uid"]); } - $caption = $this->dbh->escape_string(label_find_caption($id, $_SESSION["uid"])); + $caption = $this->dbh->escape_string(Labels::find_caption($id, $_SESSION["uid"])); /* Remove cached data */ @@ -156,7 +156,7 @@ class Pref_Labels extends Handler_Protected { fg_color = '', bg_color = '' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); - $caption = $this->dbh->escape_string(label_find_caption($id, $_SESSION["uid"])); + $caption = $this->dbh->escape_string(Labels::find_caption($id, $_SESSION["uid"])); /* Remove cached data */ @@ -216,7 +216,7 @@ class Pref_Labels extends Handler_Protected { $ids = explode(",", $this->dbh->escape_string($_REQUEST["ids"])); foreach ($ids as $id) { - label_remove($id, $_SESSION["uid"]); + Labels::remove($id, $_SESSION["uid"]); } } @@ -227,7 +227,7 @@ class Pref_Labels extends Handler_Protected { if ($caption) { - if (label_create($caption)) { + if (Labels::create($caption)) { if (!$output) { print T_sprintf("Created label <b>%s</b>", htmlspecialchars($caption)); } |