labels.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. function label_find_id($label, $owner_uid) {
  3. $result = db_query(
  4. "SELECT id FROM ttrss_labels2 WHERE caption = '$label'
  5. AND owner_uid = '$owner_uid' LIMIT 1");
  6. if (db_num_rows($result) == 1) {
  7. return db_fetch_result($result, 0, "id");
  8. } else {
  9. return 0;
  10. }
  11. }
  12. function get_article_labels($id, $owner_uid = false) {
  13. $rv = array();
  14. if (!$owner_uid) $owner_uid = $_SESSION["uid"];
  15. $result = db_query("SELECT label_cache FROM
  16. ttrss_user_entries WHERE ref_id = '$id' AND owner_uid = " .
  17. $owner_uid);
  18. if (db_num_rows($result) > 0) {
  19. $label_cache = db_fetch_result($result, 0, "label_cache");
  20. if ($label_cache) {
  21. $label_cache = json_decode($label_cache, true);
  22. if ($label_cache["no-labels"] == 1)
  23. return $rv;
  24. else
  25. return $label_cache;
  26. }
  27. }
  28. $result = db_query(
  29. "SELECT DISTINCT label_id,caption,fg_color,bg_color
  30. FROM ttrss_labels2, ttrss_user_labels2
  31. WHERE id = label_id
  32. AND article_id = '$id'
  33. AND owner_uid = ". $owner_uid . "
  34. ORDER BY caption");
  35. while ($line = db_fetch_assoc($result)) {
  36. $rk = array(label_to_feed_id($line["label_id"]),
  37. $line["caption"], $line["fg_color"],
  38. $line["bg_color"]);
  39. array_push($rv, $rk);
  40. }
  41. if (count($rv) > 0)
  42. label_update_cache($owner_uid, $id, $rv);
  43. else
  44. label_update_cache($owner_uid, $id, array("no-labels" => 1));
  45. return $rv;
  46. }
  47. function label_find_caption($label, $owner_uid) {
  48. $result = db_query(
  49. "SELECT caption FROM ttrss_labels2 WHERE id = '$label'
  50. AND owner_uid = '$owner_uid' LIMIT 1");
  51. if (db_num_rows($result) == 1) {
  52. return db_fetch_result($result, 0, "caption");
  53. } else {
  54. return "";
  55. }
  56. }
  57. function get_all_labels($owner_uid) {
  58. $rv = array();
  59. $result = db_query("SELECT fg_color, bg_color, caption FROM ttrss_labels2 WHERE owner_uid = " . $owner_uid);
  60. while ($line = db_fetch_assoc($result)) {
  61. array_push($rv, $line);
  62. }
  63. return $rv;
  64. }
  65. function label_update_cache($owner_uid, $id, $labels = false, $force = false) {
  66. if ($force)
  67. label_clear_cache($id);
  68. if (!$labels)
  69. $labels = get_article_labels($id);
  70. $labels = db_escape_string(json_encode($labels));
  71. db_query("UPDATE ttrss_user_entries SET
  72. label_cache = '$labels' WHERE ref_id = '$id' AND owner_uid = '$owner_uid'");
  73. }
  74. function label_clear_cache($id) {
  75. db_query("UPDATE ttrss_user_entries SET
  76. label_cache = '' WHERE ref_id = '$id'");
  77. }
  78. function label_remove_article($id, $label, $owner_uid) {
  79. $label_id = label_find_id($label, $owner_uid);
  80. if (!$label_id) return;
  81. db_query(
  82. "DELETE FROM ttrss_user_labels2
  83. WHERE
  84. label_id = '$label_id' AND
  85. article_id = '$id'");
  86. label_clear_cache($id);
  87. }
  88. function label_add_article($id, $label, $owner_uid) {
  89. $label_id = label_find_id($label, $owner_uid);
  90. if (!$label_id) return;
  91. $result = db_query(
  92. "SELECT
  93. article_id FROM ttrss_labels2, ttrss_user_labels2
  94. WHERE
  95. label_id = id AND
  96. label_id = '$label_id' AND
  97. article_id = '$id' AND owner_uid = '$owner_uid'
  98. LIMIT 1");
  99. if (db_num_rows($result) == 0) {
  100. db_query("INSERT INTO ttrss_user_labels2
  101. (label_id, article_id) VALUES ('$label_id', '$id')");
  102. }
  103. label_clear_cache($id);
  104. }
  105. function label_remove($id, $owner_uid) {
  106. if (!$owner_uid) $owner_uid = $_SESSION["uid"];
  107. db_query("BEGIN");
  108. $result = db_query("SELECT caption FROM ttrss_labels2
  109. WHERE id = '$id'");
  110. $caption = db_fetch_result($result, 0, "caption");
  111. $result = db_query("DELETE FROM ttrss_labels2 WHERE id = '$id'
  112. AND owner_uid = " . $owner_uid);
  113. if (db_affected_rows($result) != 0 && $caption) {
  114. /* Remove access key for the label */
  115. $ext_id = LABEL_BASE_INDEX - 1 - $id;
  116. db_query("DELETE FROM ttrss_access_keys WHERE
  117. feed_id = '$ext_id' AND owner_uid = $owner_uid");
  118. /* Remove cached data */
  119. db_query("UPDATE ttrss_user_entries SET label_cache = ''
  120. WHERE label_cache LIKE '%$caption%' AND owner_uid = " . $owner_uid);
  121. }
  122. db_query("COMMIT");
  123. }
  124. function label_create($caption, $fg_color = '', $bg_color = '', $owner_uid = false) {
  125. if (!$owner_uid) $owner_uid = $_SESSION['uid'];
  126. db_query("BEGIN");
  127. $result = false;
  128. $result = db_query("SELECT id FROM ttrss_labels2
  129. WHERE caption = '$caption' AND owner_uid = $owner_uid");
  130. if (db_num_rows($result) == 0) {
  131. $result = db_query(
  132. "INSERT INTO ttrss_labels2 (caption,owner_uid,fg_color,bg_color)
  133. VALUES ('$caption', '$owner_uid', '$fg_color', '$bg_color')");
  134. $result = db_affected_rows($result) != 0;
  135. }
  136. db_query("COMMIT");
  137. return $result;
  138. }