X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;ds=sidebyside;f=functions.php;h=6169f93a8cd4b827e3c4f3537e3460d842e0922d;hb=d9fa39f1d444fbd5a909aabe19dfc50aa8601131;hp=2dbe127b6d89d91e478ee3c4116b315fdd0ce783;hpb=9cd7c995e70be458e0843caacd492b59099f121d;p=tt-rss.git diff --git a/functions.php b/functions.php index 2dbe127b..6169f93a 100644 --- a/functions.php +++ b/functions.php @@ -12,15 +12,12 @@ require_once 'errors.php'; require_once 'version.php'; - if (RSS_BACKEND_TYPE == "magpie") { - require_once "magpierss/rss_fetch.inc"; - require_once 'magpierss/rss_utils.inc'; - } else if (RSS_BACKEND_TYPE == "simplepie") { - require_once 'simplepie/simplepie.inc'; - } - + define('MAGPIE_USER_AGENT_EXT', ' (Tiny Tiny RSS/' . VERSION . ')'); define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); + require_once "magpierss/rss_fetch.inc"; + require_once 'magpierss/rss_utils.inc'; + function purge_feed($link, $feed_id, $purge_interval, $debug = false) { $rows = -1; @@ -178,7 +175,7 @@ $upd_intl = $line["update_interval"]; if (!$upd_intl || $upd_intl == 0) { - $upd_intl = get_pref($link, 'DEFAULT_UPDATE_INTERVAL', $user_id); + $upd_intl = get_pref($link, 'DEFAULT_UPDATE_INTERVAL', $user_id, false); } if ($upd_intl < 0) { @@ -205,69 +202,136 @@ } - function check_feed_favicon($feed_url, $feed, $link) { - $feed_url = str_replace("http://", "", $feed_url); - $feed_url = preg_replace("/\/.*$/", "", $feed_url); - - $icon_url = "http://$feed_url/favicon.ico"; - $icon_file = ICONS_DIR . "/$feed.ico"; + function fetch_file_contents($url) { + if (USE_CURL_FOR_ICONS) { + $tmpfile = tempnam(TMP_DIRECTORY, "ttrss-tmp"); - if (!file_exists($icon_file)) { + $ch = curl_init($url); + $fp = fopen($tmpfile, "w"); - if (USE_CURL_FOR_ICONS) { - error_reporting(0); + if ($fp) { + curl_setopt($ch, CURLOPT_FILE, $fp); + curl_exec($ch); + curl_close($ch); + fclose($fp); + } - $ch = curl_init($icon_url); - $fp = fopen($icon_file, "w"); + $contents = file_get_contents($tmpfile); + unlink($tmpfile); - if ($fp) { - curl_setopt($ch, CURLOPT_FILE, $fp); - curl_setopt($ch, CURLOPT_FILE, $fp); + return $contents; - curl_exec($ch); - curl_close($ch); - fclose($fp); - } + } else { + return file_get_contents($url); + } + + } + + // adapted from wordpress favicon plugin by Jeff Minard (http://thecodepro.com/) + // http://dev.wp-plugins.org/file/favatars/trunk/favatars.php - error_reporting (DEFAULT_ERROR_LEVEL); + function get_favicon_url($url) { + + if ($html = @fetch_file_contents($url)) { + + if ( preg_match('/]+rel="(?:shortcut )?icon"[^>]+?href="([^"]+?)"/si', $html, $matches)) { + // Attempt to grab a favicon link from their webpage url + $linkUrl = html_entity_decode($matches[1]); + + if (substr($linkUrl, 0, 1) == '/') { + $urlParts = parse_url($url); + $faviconURL = $urlParts['scheme'].'://'.$urlParts['host'].$linkUrl; + } else if (substr($linkUrl, 0, 7) == 'http://') { + $faviconURL = $linkUrl; + } else if (substr($url, -1, 1) == '/') { + $faviconURL = $url.$linkUrl; + } else { + $faviconURL = $url.'/'.$linkUrl; + } } else { + // If unsuccessful, attempt to "guess" the favicon location + $urlParts = parse_url($url); + $faviconURL = $urlParts['scheme'].'://'.$urlParts['host'].'/favicon.ico'; + } + } - error_reporting(0); - $r = fopen($icon_url, "r"); - error_reporting (DEFAULT_ERROR_LEVEL); - - if ($r) { - $tmpfname = tempnam(TMP_DIRECTORY, "ttrssicon"); + // Run a test to see if what we have attempted to get actually exists. + if(USE_CURL_FOR_ICONS || url_validate($faviconURL)) { + return $faviconURL; + } else { + return false; + } + } + + function url_validate($link) { + + $url_parts = @parse_url($link); + + if ( empty( $url_parts["host"] ) ) + return false; + + if ( !empty( $url_parts["path"] ) ) { + $documentpath = $url_parts["path"]; + } else { + $documentpath = "/"; + } + + if ( !empty( $url_parts["query"] ) ) + $documentpath .= "?" . $url_parts["query"]; + + $host = $url_parts["host"]; + $port = $url_parts["port"]; + + if ( empty($port) ) + $port = "80"; + + $socket = @fsockopen( $host, $port, $errno, $errstr, 30 ); + + if ( !$socket ) + return false; - $t = fopen($tmpfname, "w"); - - while (!feof($r)) { - $buf = fread($r, 16384); - fwrite($t, $buf); - } - - fclose($r); - fclose($t); - - error_reporting(0); - if (!rename($tmpfname, $icon_file)) { - unlink($tmpfname); - } - - chmod($icon_file, 0644); - - error_reporting (DEFAULT_ERROR_LEVEL); - } + fwrite ($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n"); + + $http_response = fgets( $socket, 22 ); + + $responses = "/(200 OK)|(30[0-9] Moved)/"; + if ( preg_match($responses, $http_response) ) { + fclose($socket); + return true; + } else { + return false; + } + + } + + function check_feed_favicon($site_url, $feed, $link) { + $favicon_url = get_favicon_url($site_url); + +# print "FAVICON [$site_url]: $favicon_url\n"; + + error_reporting(0); + + $icon_file = ICONS_DIR . "/$feed.ico"; - } + if ($favicon_url && !file_exists($icon_file)) { + $contents = fetch_file_contents($favicon_url); + + $fp = fopen($icon_file, "w"); + + if ($fp) { + fwrite($fp, $contents); + fclose($fp); + chmod($icon_file, 0644); + } } + + error_reporting(DEFAULT_ERROR_LEVEL); + } function update_rss_feed($link, $feed_url, $feed, $ignore_daemon = false) { - if (WEB_DEMO_MODE) return; - if (DAEMON_REFRESH_ONLY && !$_GET["daemon"] && !$ignore_daemon) { return; } @@ -296,31 +360,13 @@ } - if (RSS_BACKEND_TYPE == "magpie") { - error_reporting(0); - $rss = fetch_rss($fetch_url); - error_reporting (DEFAULT_ERROR_LEVEL); - } else if (RSS_BACKEND_TYPE == "simplepie") { - - if (!file_exists(SIMPLEPIE_CACHE_DIR)) { - mkdir(SIMPLEPIE_CACHE_DIR); - } - - $rss = new SimplePie(); - $rss->feed_url($fetch_url); - $rss->cache_location(SIMPLEPIE_CACHE_DIR); - $rss->init(); - } + error_reporting(0); + $rss = fetch_rss($fetch_url); + error_reporting (DEFAULT_ERROR_LEVEL); $feed = db_escape_string($feed); - $rss_check = $rss; - - if (RSS_BACKEND_TYPE == "simplepie") { - $rss_check = $rss->data; - } - - if ($rss_check) { + if ($rss) { // db_query($link, "BEGIN"); @@ -334,28 +380,20 @@ $owner_uid = db_fetch_result($result, 0, "owner_uid"); if (get_pref($link, 'ENABLE_FEED_ICONS', $owner_uid, false)) { - check_feed_favicon($feed_url, $feed, $link); + check_feed_favicon($rss->channel["link"], $feed, $link); } if (!$registered_title || $registered_title == "[Unknown]") { - if (RSS_BACKEND_TYPE == "magpie") { - $feed_title = db_escape_string($rss->channel["title"]); - } else { - $feed_title = $rss->get_feed_title(); - } + $feed_title = db_escape_string($rss->channel["title"]); db_query($link, "UPDATE ttrss_feeds SET title = '$feed_title' WHERE id = '$feed'"); } - if (RSS_BACKEND_TYPE == "magpie") { - $site_url = $rss->channel["link"]; - // weird, weird Magpie - if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]); - } else { - $site_url = $rss->get_feed_link(); - } + $site_url = $rss->channel["link"]; + // weird, weird Magpie + if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]); if ($site_url && $orig_site_url != db_escape_string($site_url)) { db_query($link, "UPDATE ttrss_feeds SET @@ -364,11 +402,7 @@ // print "I: " . $rss->channel["image"]["url"]; - if (RSS_BACKEND_TYPE == "magpie") { - $icon_url = $rss->image["url"]; - } else { - $icon_url = $rss->get_image_url(); # FIXME - } + $icon_url = $rss->image["url"]; if ($icon_url && !$orig_icon_url != db_escape_string($icon_url)) { $icon_url = db_escape_string($icon_url); @@ -380,7 +414,8 @@ $result = db_query($link, "SELECT reg_exp, ttrss_filter_types.name AS name, - ttrss_filter_actions.name AS action + ttrss_filter_actions.name AS action, + action_param FROM ttrss_filters,ttrss_filter_types,ttrss_filter_actions WHERE enabled = true AND owner_uid = $owner_uid AND @@ -393,19 +428,15 @@ $filter["reg_exp"] = $line["reg_exp"]; $filter["action"] = $line["action"]; - + $filter["action_param"] = $line["action_param"]; + array_push($filters[$line["name"]], $filter); } - if (RSS_BACKEND_TYPE == "magpie") { - $iterator = $rss->items; - - if (!$iterator || !is_array($iterator)) $iterator = $rss->entries; - if (!$iterator || !is_array($iterator)) $iterator = $rss; + $iterator = $rss->items; - } else { - $iterator = $rss->get_items(); - } + if (!$iterator || !is_array($iterator)) $iterator = $rss->entries; + if (!$iterator || !is_array($iterator)) $iterator = $rss; if (!is_array($iterator)) { /* db_query($link, "UPDATE ttrss_feeds @@ -416,148 +447,115 @@ foreach ($iterator as $item) { - if (RSS_BACKEND_TYPE == "magpie") { - - $entry_guid = $item["id"]; - - if (!$entry_guid) $entry_guid = $item["guid"]; - if (!$entry_guid) $entry_guid = $item["link"]; + $entry_guid = $item["id"]; - if (!$entry_guid) continue; - - $entry_timestamp = ""; - - $rss_2_date = $item['pubdate']; - $rss_1_date = $item['dc']['date']; - $atom_date = $item['issued']; - if (!$atom_date) $atom_date = $item['updated']; + if (!$entry_guid) $entry_guid = $item["guid"]; + if (!$entry_guid) $entry_guid = $item["link"]; + if (!$entry_guid) $entry_guid = make_guid_from_title($item["title"]); + + if (!$entry_guid) continue; + + $entry_timestamp = ""; + + $rss_2_date = $item['pubdate']; + $rss_1_date = $item['dc']['date']; + $atom_date = $item['issued']; + if (!$atom_date) $atom_date = $item['updated']; + + if ($atom_date != "") $entry_timestamp = parse_w3cdtf($atom_date); + if ($rss_1_date != "") $entry_timestamp = parse_w3cdtf($rss_1_date); + if ($rss_2_date != "") $entry_timestamp = strtotime($rss_2_date); - if ($atom_date != "") $entry_timestamp = parse_w3cdtf($atom_date); - if ($rss_1_date != "") $entry_timestamp = parse_w3cdtf($rss_1_date); - if ($rss_2_date != "") $entry_timestamp = strtotime($rss_2_date); - - if ($entry_timestamp == "") { - $entry_timestamp = time(); - $no_orig_date = 'true'; - } else { - $no_orig_date = 'false'; - } - - $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp); - - $entry_title = $item["title"]; - - // strange Magpie workaround - $entry_link = $item["link_"]; - if (!$entry_link) $entry_link = $item["link"]; - - if (!$entry_title) continue; - if (!$entry_link) continue; - - $entry_content = $item["content:escaped"]; - - if (!$entry_content) $entry_content = $item["content:encoded"]; - if (!$entry_content) $entry_content = $item["content"]; - if (!$entry_content) $entry_content = $item["atom_content"]; - if (!$entry_content) $entry_content = $item["summary"]; - if (!$entry_content) $entry_content = $item["description"]; - - // if (!$entry_content) continue; - - // WTF - if (is_array($entry_content)) { - $entry_content = $entry_content["encoded"]; - if (!$entry_content) $entry_content = $entry_content["escaped"]; - } - - // print_r($item); - // print_r(htmlspecialchars($entry_content)); - // print "
"; - - $entry_content_unescaped = $entry_content; - $content_hash = "SHA1:" . sha1(strip_tags($entry_content)); - - $entry_comments = $item["comments"]; - - $entry_author = db_escape_string($item['dc']['creator']); - - $entry_guid = db_escape_string($entry_guid); - - $result = db_query($link, "SELECT id FROM ttrss_entries - WHERE guid = '$entry_guid'"); - - $entry_content = db_escape_string($entry_content); - $entry_title = db_escape_string($entry_title); - $entry_link = db_escape_string($entry_link); - $entry_comments = db_escape_string($entry_comments); - - $num_comments = db_escape_string($item["slash"]["comments"]); - - if (!$num_comments) $num_comments = 0; + if ($entry_timestamp == "") { + $entry_timestamp = time(); + $no_orig_date = 'true'; + } else { + $no_orig_date = 'false'; + } + + $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp); + + $entry_title = trim(strip_tags($item["title"])); + + // strange Magpie workaround + $entry_link = $item["link_"]; + if (!$entry_link) $entry_link = $item["link"]; + + if (!$entry_title) continue; +# if (!$entry_link) continue; - } else if (RSS_BACKEND_TYPE == "simplepie") { + $entry_link = strip_tags($entry_link); + + $entry_content = $item["content:escaped"]; + + if (!$entry_content) $entry_content = $item["content:encoded"]; + if (!$entry_content) $entry_content = $item["content"]; + if (!$entry_content) $entry_content = $item["atom_content"]; + if (!$entry_content) $entry_content = $item["summary"]; + if (!$entry_content) $entry_content = $item["description"]; + +// if (!$entry_content) continue; + + // WTF + if (is_array($entry_content)) { + $entry_content = $entry_content["encoded"]; + if (!$entry_content) $entry_content = $entry_content["escaped"]; + } + +// print_r($item); +// print_r(htmlspecialchars($entry_content)); +// print "
"; - $entry_guid = $item->get_id(); + $entry_content_unescaped = $entry_content; + $content_hash = "SHA1:" . sha1(strip_tags($entry_content)); - if (!$entry_guid) { - $entry_guid = $item->get_permalink(); + $entry_comments = strip_tags($item["comments"]); + + $entry_author = db_escape_string(strip_tags($item['dc']['creator'])); + + if ($item['author']) { + if (!$entry_author) { + $entry_author = db_escape_string(strip_tags($item['author']['name'])); } - - if (!$entry_guid) continue; - - $entry_timestamp = $item->get_date("U"); - - if ($entry_timestamp == "") { - $entry_timestamp = time(); - $no_orig_date = 'true'; - } else { - $no_orig_date = 'false'; + + if (!$entry_author) { + $entry_author = db_escape_string(strip_tags($item['author']['email'])); } - - $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp); - - $entry_title = $item->get_title(); - $entry_link = $item->get_permalink(); - - if (!$entry_title) continue; - if (!$entry_link) continue; - $entry_content = $item->get_description(); - -// print_r(htmlspecialchars($entry_content)); -// print "
"; - - $entry_content_unescaped = $entry_content; - $content_hash = "SHA1:" . sha1(strip_tags($entry_content)); - - $entry_comments = ""; # FIXME - - $entry_author = $item->get_author(0); + if (!$entry_author) { + $entry_author = db_escape_string(strip_tags($item['author'])); + } + } - $entry_author = db_escape_string($entry_author->name); - - $entry_guid = db_escape_string($entry_guid); + if (preg_match('/^[\t\n\r ]*$/', $entry_author)) $entry_author = ''; - $result = db_query($link, "SELECT id FROM ttrss_entries - WHERE guid = '$entry_guid'"); - - $entry_content = db_escape_string($entry_content); - $entry_title = db_escape_string($entry_title); - $entry_link = db_escape_string($entry_link); - $entry_comments = db_escape_string($entry_comments); - - $num_comments = 0; # FIXME - - if (!$num_comments) $num_comments = 0; + $entry_guid = db_escape_string(strip_tags($entry_guid)); + + $result = db_query($link, "SELECT id FROM ttrss_entries + WHERE guid = '$entry_guid'"); + $entry_content = db_escape_string($entry_content); + $entry_title = db_escape_string($entry_title); + $entry_link = db_escape_string($entry_link); + $entry_comments = db_escape_string($entry_comments); + + $num_comments = db_escape_string($item["slash"]["comments"]); + + if (!$num_comments) $num_comments = 0; + + $dc_subject = $item['dc']['subject']; + + $subject_tags = false; + + if (is_array($dc_subject)) { + $subject_tags = $dc_subject; + } else if ($dc_subject) { + $subject_tags = array($dc_subject); } # sanitize content $entry_content = sanitize_rss($entry_content); - $entry_title = sanitize_rss($entry_title); - $entry_link = sanitize_rss($entry_link); - $entry_comments = sanitize_rss($entry_comments); db_query($link, "BEGIN"); @@ -635,9 +633,12 @@ // error_reporting(0); - $filter_name = get_filter_name($entry_title, $entry_content, + $tuple = get_filter_name($entry_title, $entry_content, $entry_link, $filters); + $filter_name = $tuple[0]; + $filter_param = $tuple[1]; + if ($filter_name == "filter") { continue; } @@ -732,6 +733,27 @@ $entry_tags = $entry_tags[1]; + # check for manual tags + + if ($filter_name == "tag") { + + $manual_tags = trim_array(split(",", $filter_param)); + + foreach ($manual_tags as $tag) { + if (tag_is_valid($tag)) { + array_push($entry_tags, $tag); + } + } + } + + if ($subject_tags) { + foreach ($subject_tags as $tag) { + if (tag_is_valid($tag)) { + array_push($entry_tags, $tag); + } + } + } + if (count($entry_tags) > 0) { db_query($link, "BEGIN"); @@ -820,7 +842,7 @@ foreach ($filters["title"] as $filter) { $reg_exp = $filter["reg_exp"]; if (preg_match("/$reg_exp/i", $title)) { - return $filter["action"]; + return array($filter["action"], $filter["action_param"]); } } } @@ -829,7 +851,7 @@ foreach ($filters["content"] as $filter) { $reg_exp = $filter["reg_exp"]; if (preg_match("/$reg_exp/i", $content)) { - return $filter["action"]; + return array($filter["action"], $filter["action_param"]); } } } @@ -839,7 +861,7 @@ $reg_exp = $filter["reg_exp"]; if (preg_match("/$reg_exp/i", $title) || preg_match("/$reg_exp/i", $content)) { - return $filter["action"]; + return array($filter["action"], $filter["action_param"]); } } } @@ -849,7 +871,7 @@ foreach ($filters["link"] as $filter) { $reg_exp = $filter["reg_exp"]; if (preg_match("/$reg_exp/i", $link)) { - return $filter["action"]; + return array($filter["action"], $filter["action_param"]); } } } @@ -857,6 +879,51 @@ return false; } + function get_filter_matches($title, $content, $link, $filters) { + + $matches = array(); + + if ($filters["title"]) { + foreach ($filters["title"] as $filter) { + $reg_exp = $filter["reg_exp"]; + if (preg_match("/$reg_exp/i", $title)) { + array_push($matches, array($filter["action"], $filter["action_param"])); + } + } + } + + if ($filters["content"]) { + foreach ($filters["content"] as $filter) { + $reg_exp = $filter["reg_exp"]; + if (preg_match("/$reg_exp/i", $content)) { + array_push($matches, array($filter["action"], $filter["action_param"])); + } + } + } + + if ($filters["both"]) { + foreach ($filters["both"] as $filter) { + $reg_exp = $filter["reg_exp"]; + if (preg_match("/$reg_exp/i", $title) || + preg_match("/$reg_exp/i", $content)) { + array_push($matches, array($filter["action"], $filter["action_param"])); + } + } + } + + if ($filters["link"]) { + $reg_exp = $filter["reg_exp"]; + foreach ($filters["link"] as $filter) { + $reg_exp = $filter["reg_exp"]; + if (preg_match("/$reg_exp/i", $link)) { + array_push($matches, array($filter["action"], $filter["action_param"])); + } + } + } + + return $matches; + } + function printFeedEntry($feed_id, $class, $feed_title, $unread, $icon_file, $link, $rtl_content = false, $last_updated = false, $last_error = false) { @@ -881,7 +948,8 @@ $link_title = "Updated: $last_updated"; } - $feed = "$feed_title"; + $feed = "$feed_title"; print "
  • "; if (get_pref($link, 'ENABLE_FEED_ICONS')) { @@ -999,14 +1067,23 @@ return true; } - function authenticate_user($link, $login, $password) { + function authenticate_user($link, $login, $password, $force_auth = false) { if (!SINGLE_USER_MODE) { $pwd_hash = 'SHA1:' . sha1($password); - - $result = db_query($link, "SELECT id,login,access_level FROM ttrss_users WHERE - login = '$login' AND pwd_hash = '$pwd_hash'"); + + if ($force_auth && defined('_DEBUG_USER_SWITCH')) { + $query = "SELECT id,login,access_level + FROM ttrss_users WHERE + login = '$login'"; + } else { + $query = "SELECT id,login,access_level + FROM ttrss_users WHERE + login = '$login' AND pwd_hash = '$pwd_hash'"; + } + + $result = db_query($link, $query); if (db_num_rows($result) == 1) { $_SESSION["uid"] = db_fetch_result($result, 0, "id"); @@ -1133,6 +1210,14 @@ function login_sequence($link) { if (!SINGLE_USER_MODE) { + if (defined('_DEBUG_USER_SWITCH') && $_SESSION["uid"]) { + $swu = db_escape_string($_REQUEST["swu"]); + if ($swu) { + $_SESSION["prefs_cache"] = false; + return authenticate_user($link, $swu, null, true); + } + } + if (!validate_session($link)) { logout_user(); $redirect_uri = get_login_redirect(); @@ -1263,7 +1348,7 @@ return false; } else { return true; - } + } } function file_is_locked($filename) { @@ -1444,13 +1529,26 @@ } } - function getAllCounters($link) { - getLabelCounters($link); + function getAllCounters($link, $omode = "tflc") { +/* getLabelCounters($link); getFeedCounters($link); getTagCounters($link); getGlobalCounters($link); if (get_pref($link, 'ENABLE_FEED_CATS')) { getCategoryCounters($link); + } */ + + if (!$omode) $omode = "tflc"; + + getGlobalCounters($link); + + if (strchr($omode, "l")) getLabelCounters($link); + if (strchr($omode, "f")) getFeedCounters($link); + if (strchr($omode, "t")) getTagCounters($link); + if (strchr($omode, "c")) { + if (get_pref($link, 'ENABLE_FEED_CATS')) { + getCategoryCounters($link); + } } } @@ -1513,7 +1611,8 @@ $match_part = "marked = true"; } else if ($n_feed > 0) { - $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE parent_feed = '$n_feed' + $result = db_query($link, "SELECT id FROM ttrss_feeds + WHERE parent_feed = '$n_feed' AND hidden = false AND owner_uid = " . $_SESSION["uid"]); @@ -1523,12 +1622,15 @@ while ($line = db_fetch_assoc($result)) { array_push($linked_feeds, "feed_id = " . $line["id"]); } + + array_push($linked_feeds, "feed_id = $n_feed"); $match_part = implode(" OR ", $linked_feeds); $result = db_query($link, "SELECT COUNT(int_id) AS unread FROM ttrss_user_entries - WHERE unread = true AND ($match_part) AND owner_uid = " . $_SESSION["uid"]); + WHERE unread = true AND ($match_part) + AND owner_uid = " . $_SESSION["uid"]); $unread = 0; @@ -1633,7 +1735,7 @@ $result = db_query($link, "SELECT tag_name,SUM((SELECT COUNT(int_id) FROM ttrss_user_entries WHERE int_id = post_int_id AND unread = true)) AS count FROM ttrss_tags - WHERE owner_uid = 2 GROUP BY tag_name ORDER BY tag_name"); + WHERE owner_uid = ".$_SESSION['uid']." GROUP BY tag_name ORDER BY tag_name"); $tags = array(); @@ -1847,7 +1949,11 @@ } function subscribe_to_feed($link, $feed_link, $cat_id = 0) { - + + $feed_link = trim(preg_replace("/^feed:/", "", $feed_link)); + + if ($feed_link == "") return; + if ($cat_id == "0" || !$cat_id) { $cat_qpart = "NULL"; } else { @@ -1915,7 +2021,7 @@ print "