X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=functions.php;h=7fc5aa7ea41d2fe0b1051e15fbdfb79bdd7a93d3;hb=c90a028cdc9548a4ef1f6359b53b2c9d96c3a7a8;hp=31d6486506581a29cf218d4273a80f3c8f5b16cb;hpb=1f0113280236928da3c1d57da7781dc8ec977772;p=tt-rss.git diff --git a/functions.php b/functions.php index 31d64865..7fc5aa7e 100644 --- a/functions.php +++ b/functions.php @@ -1,10 +1,8 @@ set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT); -# $rss->set_timeout(10); - $rss->set_feed_url($fetch_url); - $rss->set_output_encoding('UTF-8'); - - if (SIMPLEPIE_CACHE_IMAGES && $cache_images) { - if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) { - _debug("enabling image cache"); - } + $obj_id = md5("FDATA:$use_simplepie:$fetch_url"); - $rss->set_image_handler('./image.php', 'i'); - } + if ($memcache && $obj = $memcache->get($obj_id)) { if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) { - _debug("feed update interval (sec): " . - get_feed_update_interval($link, $feed)*60); + _debug("update_rss_feed: data found in memcache."); } - if (is_dir(SIMPLEPIE_CACHE_DIR)) { - $rss->set_cache_location(SIMPLEPIE_CACHE_DIR); - $rss->set_cache_duration(get_feed_update_interval($link, $feed) * 60); + $rss = $obj; + + } else { + + if (!$use_simplepie) { + $rss = fetch_rss($fetch_url); + } else { + if (!is_dir(SIMPLEPIE_CACHE_DIR)) { + mkdir(SIMPLEPIE_CACHE_DIR); + } + + $rss = new SimplePie(); + $rss->set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT); + # $rss->set_timeout(10); + $rss->set_feed_url($fetch_url); + $rss->set_output_encoding('UTF-8'); + + if (SIMPLEPIE_CACHE_IMAGES && $cache_images) { + if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) { + _debug("enabling image cache"); + } + + $rss->set_image_handler('./image.php', 'i'); + } + + if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) { + _debug("feed update interval (sec): " . + get_feed_update_interval($link, $feed)*60); + } + + if (is_dir(SIMPLEPIE_CACHE_DIR)) { + $rss->set_cache_location(SIMPLEPIE_CACHE_DIR); + $rss->set_cache_duration(get_feed_update_interval($link, $feed) * 60); + } + + $rss->init(); } - $rss->init(); + if ($memcache && $rss) $memcache->add($obj_id, $rss, 0, 300); } // print_r($rss); @@ -791,10 +820,11 @@ $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 ($entry_timestamp == "" || $entry_timestamp == -1 || !$entry_timestamp) { @@ -1146,7 +1176,7 @@ // error_reporting(0); $article_filters = get_article_filters($filters, $entry_title, - $entry_content, $entry_link, $entry_timestamp); + $entry_content, $entry_link, $entry_timestamp, $entry_author); if (defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug']) { _debug("update_rss_feed: article filters: "); @@ -1336,15 +1366,15 @@ # check for manual tags - $tag_filter = find_article_filter($article_filters, "tag"); - - if ($tag_filter) { + foreach ($article_filters as $f) { + if ($f[0] == "tag") { - $manual_tags = trim_array(split(",", $tag_filter[1])); + $manual_tags = trim_array(split(",", $f[1])); - foreach ($manual_tags as $tag) { - if (tag_is_valid($tag)) { - array_push($entry_tags, $tag); + foreach ($manual_tags as $tag) { + if (tag_is_valid($tag)) { + array_push($entry_tags, $tag); + } } } } @@ -1470,7 +1500,7 @@ print ""; } - function get_article_filters($filters, $title, $content, $link, $timestamp) { + function get_article_filters($filters, $title, $content, $link, $timestamp, $author) { $matches = array(); if ($filters["title"]) { @@ -1555,6 +1585,18 @@ } } + if ($filters["author"]) { + foreach ($filters["author"] as $filter) { + $reg_exp = $filter["reg_exp"]; + $inverse = $filter["inverse"]; + if ((!$inverse && preg_match("/$reg_exp/i", $author)) || + ($inverse && !preg_match("/$reg_exp/i", $author))) { + + array_push($matches, array($filter["action"], $filter["action_param"])); + } + } + } + return $matches; } @@ -1622,8 +1664,8 @@ $link_title = "Updated: $last_updated"; } - $feed = "$feed_title"; + $feed = "$feed_title"; /* if ($feed_id < -10) { $bg_color = "#00ccff"; @@ -2012,7 +2054,7 @@ function get_user_theme($link) { - if (get_schema_version($link) >= 63) { + if (get_schema_version($link) >= 63 && $_SESSION["uid"]) { $theme_name = get_pref($link, "_THEME_ID"); if (is_dir("themes/$theme_name")) { return $theme_name; @@ -2027,7 +2069,7 @@ function get_user_theme_path($link) { - if (get_schema_version($link) >= 63) { + if (get_schema_version($link) >= 63 && $_SESSION["uid"]) { $theme_name = get_pref($link, "_THEME_ID"); if ($theme_name && is_dir("themes/$theme_name")) { @@ -2200,7 +2242,10 @@ function make_lockfile($filename) { $fp = fopen(LOCK_DIRECTORY . "/$filename", "w"); - if (flock($fp, LOCK_EX | LOCK_NB)) { + if (flock($fp, LOCK_EX | LOCK_NB)) { + if (function_exists('posix_getpid')) { + fwrite($fp, posix_getpid() . "\n"); + } return $fp; } else { return false; @@ -2395,20 +2440,16 @@ $cat_qpart = "cat_id IS NULL"; } - $tmp_result = db_query($link, "SELECT id,feed_url FROM ttrss_feeds + $tmp_result = db_query($link, "SELECT id FROM ttrss_feeds WHERE $cat_qpart AND owner_uid = " . $_SESSION["uid"]); while ($tmp_line = db_fetch_assoc($tmp_result)) { - $feed_url = $tmp_line["feed_url"]; $feed_id = $tmp_line["id"]; - update_rss_feed($link, $feed_url, $feed_id, $force_update); + update_rss_feed($link, $feed_id, $force_update); } } else { - $tmp_result = db_query($link, "SELECT feed_url FROM ttrss_feeds - WHERE id = '$feed'"); - $feed_url = db_fetch_result($tmp_result, 0, "feed_url"); - update_rss_feed($link, $feed_url, $feed, $force_update); + update_rss_feed($link, $feed, $force_update); } } @@ -2928,7 +2969,7 @@ $feed_id = db_fetch_result($result, 0, "id"); if ($feed_id) { - update_rss_feed($link, $url, $feed_id, true); + update_rss_feed($link, $feed_id, true); } return 1; @@ -3626,7 +3667,11 @@ $rfc822_date = date('r', strtotime($line["updated"])); - print "$rfc822_date"; + print "$rfc822_date"; + + if ($line["author"]) { + print "" . htmlspecialchars($line["author"]) . ""; + } print "" . htmlspecialchars($line["title"]) . ""; @@ -3720,7 +3765,7 @@ $res = preg_replace('/]+>/is', '', $res); } - if (get_pref($link, 'OPEN_LINKS_IN_NEW_WINDOW')) { + if (get_pref($link, 'OPEN_LINKS_IN_NEW_WINDOW', $owner)) { $res = preg_replace("/href=/i", "target=\"_blank\" href=", $res); } @@ -3916,7 +3961,7 @@ } error_reporting(0); - if (ENABLE_SIMPLEPIE) { + if (DEFAULT_UPDATE_INTERVAL == "1") { $rss = new SimplePie(); $rss->set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT); // $rss->set_timeout(MAGPIE_FETCH_TIME_OUT); @@ -3930,7 +3975,7 @@ if ($rss) { - if (ENABLE_SIMPLEPIE) { + if (DEFAULT_UPDATE_METHOD == "1") { $items = $rss->get_items(); } else { $items = $rss->items; @@ -3945,7 +3990,7 @@ $latest_item = $items[0]; - if (ENABLE_SIMPLEPIE) { + if (DEFAULT_UPDATE_METHOD == "1") { $last_title = $latest_item->get_title(); } else { $last_title = $latest_item["title"]; @@ -3953,7 +3998,7 @@ $latest_version = trim(preg_replace("/(Milestone)|(completed)/", "", $last_title)); - if (ENABLE_SIMPLEPIE) { + if (DEFAULT_UPDATE_METHOD == "1") { $release_url = sanitize_rss($link, $latest_item->get_link()); $content = sanitize_rss($link, $latest_item->get_description()); } else { @@ -4023,6 +4068,7 @@ function catchupArticlesById($link, $ids, $cmode, $owner_uid = false) { if (!$owner_uid) $owner_uid = $_SESSION["uid"]; + if (count($ids) == 0) return; $tmp_ids = array(); @@ -4889,19 +4935,22 @@ print "
"; if (!get_pref($link, "STRIP_IMAGES")) { - if ($always_display_enclosures || !preg_match("/\"".htmlspecialchars($entry["filename"])."\"

"; + src=\"" .htmlspecialchars($entry["url"]) . "\"/>

"; } } } } - print "
"; - if (db_num_rows($result) == 1) { print __("Attachment:") . " "; } else { @@ -5470,9 +5519,12 @@ $always_display_enclosures = db_fetch_result($tmp_result, 0, "always_display_enclosures"); if (!get_pref($link, "STRIP_IMAGES")) { - if ($always_display_enclosures || !preg_match("/img/i", $article_content)) { + if ($always_display_enclosures || + !preg_match("/img/i", $article_content)) { + foreach ($entries as $entry) { - if (preg_match("/image/", $entry["type"])) { + if (preg_match("/image/", $entry["type"]) || + preg_match("/\.(jpg|png|gif|bmp)/i", $entry["filename"])) { print "

\"".htmlspecialchars($entry["filename"])."\"

"; @@ -5681,6 +5733,22 @@ return $url_path; } + function opml_publish_url($link){ + $url_path = ""; + + + if ($_SERVER['HTTPS'] != "on") { + $url_path = "http://"; + } else { + $url_path = "https://"; + } + + $url_path .= $_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); + $url_path .= "/opml.php?op=publish&key=" . + get_pref($link, "_PREFS_PUBLISH_KEY", $_SESSION["uid"]); + + return $url_path; + } /** * Purge a feed contents, marked articles excepted. @@ -5827,13 +5895,6 @@ if($debug) _debug("Feed: " . $line["feed_url"] . ", " . $line["last_updated"]); - // We setup a alarm to alert if the feed take more than 300s to update. - // => HANG alarm. - if(!$from_http && function_exists('pcntl_alarm')) pcntl_alarm(300); - update_rss_feed($link, $line["feed_url"], $line["id"], true); - // Cancel the alarm (the update went well) - if(!$from_http && function_exists('pcntl_alarm')) pcntl_alarm(0); - sleep(1); // prevent flood (FIXME make this an option?) } @@ -5860,8 +5921,6 @@ if ($memcache && $obj = $memcache->get($obj_id)) { - print_r($obj); - return $obj; } else {