From 19b3992b7855518c6fe05a380b6471902f5be5b7 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 24 Dec 2012 13:45:34 +0400 Subject: remove magpie, fix article filter plugins --- include/functions.php | 10 +- include/localized_schema.php | 2 +- include/rssfuncs.php | 471 ++++++++----------------------------------- include/sanity_config.php | 4 +- 4 files changed, 94 insertions(+), 393 deletions(-) (limited to 'include') diff --git a/include/functions.php b/include/functions.php index b338bde5b..6d82d803c 100644 --- a/include/functions.php +++ b/include/functions.php @@ -3,6 +3,7 @@ define('SCHEMA_VERSION', 99); $fetch_last_error = false; + $pluginhost = false; function __autoload($class) { $class_file = str_replace("_", "/", strtolower(basename($class))); @@ -101,11 +102,6 @@ require_once 'db-prefs.php'; require_once 'version.php'; - define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); - - define('SELF_USER_AGENT', 'Tiny Tiny RSS/' . VERSION . ' (http://tt-rss.org/)'); - define('MAGPIE_USER_AGENT', SELF_USER_AGENT); - ini_set('user_agent', SELF_USER_AGENT); require_once 'lib/pubsubhubbub/publisher.php'; @@ -1629,8 +1625,6 @@ if (!$url || !validate_feed_url($url)) return array("code" => 2); - $update_method = 0; - $contents = @fetch_file_contents($url, false, $auth_login, $auth_pass); if (!$contents) { @@ -1664,7 +1658,7 @@ "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id, auth_login,auth_pass,update_method) VALUES ('".$_SESSION["uid"]."', '$url', - '[Unknown]', $cat_qpart, '$auth_login', '$auth_pass', '$update_method')"); + '[Unknown]', $cat_qpart, '$auth_login', '$auth_pass', 0)"); $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE feed_url = '$url' diff --git a/include/localized_schema.php b/include/localized_schema.php index 985c1f7fc..11b5470c6 100644 --- a/include/localized_schema.php +++ b/include/localized_schema.php @@ -1,4 +1,4 @@ -set_useragent(SELF_USER_AGENT); - $rss->set_timeout($no_cache ? 15 : 60); - $rss->set_feed_url($fetch_url); - $rss->set_output_encoding('UTF-8'); - //$rss->force_feed(true); + $rss = new SimplePie(); + $rss->set_useragent(SELF_USER_AGENT); + $rss->set_timeout($no_cache ? 15 : 60); + $rss->set_feed_url($fetch_url); + $rss->set_output_encoding('UTF-8'); + //$rss->force_feed(true); - if ($debug_enabled) { - _debug("feed update interval (sec): " . - get_feed_update_interval($link, $feed)*60); - } - - $rss->enable_cache(!$no_cache); + if ($debug_enabled) { + _debug("feed update interval (sec): " . + get_feed_update_interval($link, $feed)*60); + } - if (!$no_cache) { - $rss->set_cache_location($simplepie_cache_dir); - $rss->set_cache_duration($cache_age); - } + $rss->enable_cache(!$no_cache); - $rss->init(); + if (!$no_cache) { + $rss->set_cache_location($simplepie_cache_dir); + $rss->set_cache_duration($cache_age); } + $rss->init(); + // print_r($rss); if ($debug_enabled) { @@ -293,13 +259,7 @@ $feed = db_escape_string($feed); - if ($update_method == 2) { - $fetch_ok = !$rss->error(); - } else { - $fetch_ok = !!$rss; - } - - if ($fetch_ok) { + if (!$rss->error()) { if ($debug_enabled) { _debug("update_rss_feed: processing feed data..."); @@ -326,19 +286,7 @@ $owner_uid = db_fetch_result($result, 0, "owner_uid"); - if ($use_simplepie) { - $site_url = db_escape_string(trim($rss->get_link())); - } else { - $site_url = db_escape_string(trim($rss->channel["link"])); - } - - // weird, weird Magpie - if (!$use_simplepie) { - if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]); - } - - $site_url = rewrite_relative_url($fetch_url, $site_url); - $site_url = substr($site_url, 0, 250); + $site_url = db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 250)); if ($debug_enabled) { _debug("update_rss_feed: checking favicon..."); @@ -353,11 +301,7 @@ if (!$registered_title || $registered_title == "[Unknown]") { - if ($use_simplepie) { - $feed_title = db_escape_string($rss->get_title()); - } else { - $feed_title = db_escape_string($rss->channel["title"]); - } + $feed_title = db_escape_string($rss->get_title()); if ($debug_enabled) { _debug("update_rss_feed: registering title: $feed_title"); @@ -372,16 +316,8 @@ site_url = '$site_url' WHERE id = '$feed'"); } -// print "I: " . $rss->channel["image"]["url"]; - - if (!$use_simplepie) { - $icon_url = db_escape_string(trim($rss->image["url"])); - } else { - $icon_url = db_escape_string(trim($rss->get_image_url())); - } - - $icon_url = rewrite_relative_url($fetch_url, $icon_url); - $icon_url = substr($icon_url, 0, 250); + $icon_url = db_escape_string(mb_substr( + rewrite_relative_url($fetch_url, $rss->get_image_url()), 0, 250)); if ($icon_url && $orig_icon_url != $icon_url) { db_query($link, "UPDATE ttrss_feeds SET icon_url = '$icon_url' WHERE id = '$feed'"); @@ -399,24 +335,11 @@ _debug("update_rss_feed: " . count($filters) . " filters loaded."); } - if ($use_simplepie) { - $iterator = $rss->get_items(); - } else { - $iterator = $rss->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 - SET last_error = 'Parse error: can\'t find any articles.' - WHERE id = '$feed'"); */ - - // clear any errors and mark feed as updated if fetched okay - // even if it's blank + $items = $rss->get_items(); + if (!is_array($items)) { if ($debug_enabled) { - _debug("update_rss_feed: entry iterator is not an array, no articles?"); + _debug("update_rss_feed: no articles found."); } db_query($link, "UPDATE ttrss_feeds @@ -430,34 +353,13 @@ if ($debug_enabled) _debug("update_rss_feed: checking for PUSH hub..."); $feed_hub_url = false; - if ($use_simplepie) { - $links = $rss->get_links('hub'); - - if ($links && is_array($links)) { - foreach ($links as $l) { - $feed_hub_url = $l; - break; - } - } - - } else { - $atom = $rss->channel['atom']; - if ($atom) { - if ($atom['link@rel'] == 'hub') { - $feed_hub_url = $atom['link@href']; - } + $links = $rss->get_links('hub'); - if (!$feed_hub_url && $atom['link#'] > 1) { - for ($i = 2; $i <= $atom['link#']; $i++) { - if ($atom["link#$i@rel"] == 'hub') { - $feed_hub_url = $atom["link#$i@href"]; - break; - } - } - } - } else { - $feed_hub_url = $rss->channel['link_hub']; + if ($links && is_array($links)) { + foreach ($links as $l) { + $feed_hub_url = $l; + break; } } @@ -487,25 +389,14 @@ _debug("update_rss_feed: processing articles..."); } - foreach ($iterator as $item) { + foreach ($items as $item) { if ($_REQUEST['xdebug'] == 2) { print_r($item); } - if ($use_simplepie) { - $entry_guid = $item->get_id(); - if (!$entry_guid) $entry_guid = $item->get_link(); - if (!$entry_guid) $entry_guid = make_guid_from_title($item->get_title()); - - } else { - - $entry_guid = $item["id"]; - - if (!$entry_guid) $entry_guid = $item["guid"]; - if (!$entry_guid) $entry_guid = $item["about"]; - if (!$entry_guid) $entry_guid = $item["link"]; - if (!$entry_guid) $entry_guid = make_guid_from_title($item["title"]); - } + $entry_guid = $item->get_id(); + if (!$entry_guid) $entry_guid = $item->get_link(); + if (!$entry_guid) $entry_guid = make_guid_from_title($item->get_title()); if ($cache_content) { $entry_guid = "ccache:$entry_guid"; @@ -523,21 +414,9 @@ $entry_timestamp = ""; - if ($use_simplepie) { - $entry_timestamp = strtotime($item->get_date()); - } else { - $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); + $entry_timestamp = strtotime($item->get_date()); - } - - if ($entry_timestamp == "" || $entry_timestamp == -1 || !$entry_timestamp) { + if ($entry_timestamp == -1 || !$entry_timestamp) { $entry_timestamp = time(); $no_orig_date = 'true'; } else { @@ -550,21 +429,8 @@ _debug("update_rss_feed: date $entry_timestamp [$entry_timestamp_fmt]"); } - if ($use_simplepie) { - $entry_title = $item->get_title(); - } else { - $entry_title = trim(strip_tags($item["title"])); - } - - if ($use_simplepie) { - $entry_link = $item->get_link(); - } else { - // strange Magpie workaround - $entry_link = $item["link_"]; - if (!$entry_link) $entry_link = $item["link"]; - } - - $entry_link = rewrite_relative_url($site_url, $entry_link); + $entry_title = $item->get_title(); + $entry_link = rewrite_relative_url($site_url, $item->get_link()); if ($debug_enabled) { _debug("update_rss_feed: title $entry_title"); @@ -573,37 +439,8 @@ if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp);; - $entry_link = strip_tags($entry_link); - - if ($use_simplepie) { - $entry_content = $item->get_content(); - if (!$entry_content) $entry_content = $item->get_description(); - } else { - $entry_content = $item["content:escaped"]; - - if (!$entry_content) $entry_content = $item["content:encoded"]; - if (!$entry_content && is_array($entry_content)) $entry_content = $item["content"]["encoded"]; - if (!$entry_content) $entry_content = $item["content"]; - - if (is_array($entry_content)) $entry_content = $entry_content[0]; - - // Magpie bugs are getting ridiculous - if (trim($entry_content) == "Array") $entry_content = false; - - if (!$entry_content) $entry_content = $item["atom_content"]; - if (!$entry_content) $entry_content = $item["summary"]; - - if (!$entry_content || - strlen($entry_content) < strlen($item["description"])) { - $entry_content = $item["description"]; - }; - - // WTF - if (is_array($entry_content)) { - $entry_content = $entry_content["encoded"]; - if (!$entry_content) $entry_content = $entry_content["escaped"]; - } - } + $entry_content = $item->get_content(); + if (!$entry_content) $entry_content = $item->get_description(); if ($cache_images && is_writable(CACHE_DIR . '/images')) $entry_content = cache_images($entry_content, $site_url, $debug_enabled); @@ -616,60 +453,30 @@ $entry_cached_content = ""; - if ($use_simplepie) { - $entry_comments = strip_tags($item->data["comments"]); - if ($item->get_author()) { - $entry_author_item = $item->get_author(); - $entry_author = $entry_author_item->get_name(); - if (!$entry_author) $entry_author = $entry_author_item->get_email(); + $entry_comments = $item->data["comments"]; - $entry_author = db_escape_string($entry_author); - } - } else { - $entry_comments = strip_tags($item["comments"]); - - $entry_author = db_escape_string(strip_tags($item['dc']['creator'])); - - if ($item['author']) { - - if (is_array($item['author'])) { - - if (!$entry_author) { - $entry_author = db_escape_string(strip_tags($item['author']['name'])); - } + if ($item->get_author()) { + $entry_author_item = $item->get_author(); + $entry_author = $entry_author_item->get_name(); + if (!$entry_author) $entry_author = $entry_author_item->get_email(); - if (!$entry_author) { - $entry_author = db_escape_string(strip_tags($item['author']['email'])); - } - } - - if (!$entry_author) { - $entry_author = db_escape_string(strip_tags($item['author'])); - } - } + $entry_author = db_escape_string($entry_author); } - if (preg_match('/^[\t\n\r ]*$/', $entry_author)) $entry_author = ''; - - $entry_guid = db_escape_string(strip_tags($entry_guid)); - $entry_guid = mb_substr($entry_guid, 0, 250); + $entry_guid = db_escape_string(mb_substr($entry_guid, 0, 250)); $result = db_query($link, "SELECT id FROM ttrss_entries WHERE guid = '$entry_guid'"); - $entry_comments = mb_substr(db_escape_string($entry_comments), 0, 250); - $entry_author = mb_substr($entry_author, 0, 250); + $entry_comments = db_escape_string(mb_substr($entry_comments, 0, 250)); + $entry_author = db_escape_string(mb_substr($entry_author, 0, 250)); - if ($use_simplepie) { - $num_comments = $item->get_item_tags('http://purl.org/rss/1.0/modules/slash/', 'comments'); + $num_comments = $item->get_item_tags('http://purl.org/rss/1.0/modules/slash/', 'comments'); - if (is_array($num_comments) && is_array($num_comments[0])) { - $num_comments = (int) $num_comments[0]["data"]; - } else { - $num_comments = 0; - } + if (is_array($num_comments) && is_array($num_comments[0])) { + $num_comments = (int) $num_comments[0]["data"]; } else { - $num_comments = (int) $item["slash"]["comments"]; + $num_comments = 0; } if ($debug_enabled) { @@ -681,58 +488,17 @@ $additional_tags = array(); - if ($use_simplepie) { - - $additional_tags_src = $item->get_categories(); + $additional_tags_src = $item->get_categories(); - if (is_array($additional_tags_src)) { - foreach ($additional_tags_src as $tobj) { - array_push($additional_tags, $tobj->get_term()); - } - } - - if ($debug_enabled) { - _debug("update_rss_feed: category tags:"); - print_r($additional_tags); + if (is_array($additional_tags_src)) { + foreach ($additional_tags_src as $tobj) { + array_push($additional_tags, $tobj->get_term()); } + } - } else { - - $t_ctr = $item['category#']; - - if ($t_ctr == 0) { - $additional_tags = array(); - } else if ($t_ctr > 0) { - $additional_tags = array($item['category']); - - if ($item['category@term']) { - array_push($additional_tags, $item['category@term']); - } - - for ($i = 0; $i <= $t_ctr; $i++ ) { - if ($item["category#$i"]) { - array_push($additional_tags, $item["category#$i"]); - } - - if ($item["category#$i@term"]) { - array_push($additional_tags, $item["category#$i@term"]); - } - } - } - - // parse elements - - $t_ctr = $item['dc']['subject#']; - - if ($t_ctr > 0) { - array_push($additional_tags, $item['dc']['subject']); - - for ($i = 0; $i <= $t_ctr; $i++ ) { - if ($item['dc']["subject#$i"]) { - array_push($additional_tags, $item['dc']["subject#$i"]); - } - } - } + if ($debug_enabled) { + _debug("update_rss_feed: category tags:"); + print_r($additional_tags); } if ($debug_enabled) { @@ -767,28 +533,26 @@ // TODO: less memory-hungry implementation global $pluginhost; - foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_FILTER) as $p) { - if ($debug_enabled) { - _debug("update_rss_feed: applying plugin filters..."); - } - - $article = array("owner_uid" => $owner_uid, - "title" => $entry_title, - "content" => $entry_content, - "link" => $entry_link, - "tags" => $entry_tags, - "author" => $entry_author); + if ($debug_enabled) { + _debug("update_rss_feed: applying plugin filters.."); + } - foreach ($filter_plugins as $plugin) { - $article = $plugin->hook_article_filter($article); - } + $article = array("owner_uid" => $owner_uid, + "title" => $entry_title, + "content" => $entry_content, + "link" => $entry_link, + "tags" => $entry_tags, + "author" => $entry_author); - $entry_title = $article["title"]; - $entry_content = $article["content"]; - $entry_tags = $article["tags"]; - $entry_author = $article["author"]; + foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_FILTER) as $plugin) { + $article = $plugin->hook_article_filter($article); } + $entry_title = $article["title"]; + $entry_content = $article["content"]; + $entry_tags = $article["tags"]; + $entry_author = $article["author"]; + $entry_content = db_escape_string($entry_content, false); $entry_title = db_escape_string($entry_title); $entry_author = db_escape_string($entry_author); @@ -1111,67 +875,16 @@ $enclosures = array(); - if ($use_simplepie) { - $encs = $item->get_enclosures(); - - if (is_array($encs)) { - foreach ($encs as $e) { - $e_item = array( - $e->link, $e->type, $e->length); - - array_push($enclosures, $e_item); - } - } - - } else { - // - - $e_ctr = $item['enclosure#']; - - if ($e_ctr > 0) { - $e_item = array($item['enclosure@url'], - $item['enclosure@type'], - $item['enclosure@length']); - - array_push($enclosures, $e_item); - - for ($i = 0; $i <= $e_ctr; $i++ ) { - - if ($item["enclosure#$i@url"]) { - $e_item = array($item["enclosure#$i@url"], - $item["enclosure#$i@type"], - $item["enclosure#$i@length"]); - array_push($enclosures, $e_item); - } - } - } - - // - // can there be many of those? yes -fox - - $m_ctr = $item['media']['content#']; - - if ($m_ctr > 0) { - $e_item = array($item['media']['content@url'], - $item['media']['content@medium'], - $item['media']['content@length']); + $encs = $item->get_enclosures(); + if (is_array($encs)) { + foreach ($encs as $e) { + $e_item = array( + $e->link, $e->type, $e->length); array_push($enclosures, $e_item); - - for ($i = 0; $i <= $m_ctr; $i++ ) { - - if ($item["media"]["content#$i@url"]) { - $e_item = array($item["media"]["content#$i@url"], - $item["media"]["content#$i@medium"], - $item["media"]["content#$i@length"]); - array_push($enclosures, $e_item); - } - } - } } - if ($debug_enabled) { _debug("update_rss_feed: article enclosures:"); print_r($enclosures); @@ -1315,11 +1028,7 @@ } else { - if ($use_simplepie) { - $error_msg = mb_substr($rss->error(), 0, 250); - } else { - $error_msg = mb_substr(magpie_error(), 0, 250); - } + $error_msg = mb_substr($rss->error(), 0, 250); if ($debug_enabled) { _debug("update_rss_feed: error fetching feed: $error_msg"); @@ -1332,9 +1041,7 @@ last_updated = NOW() WHERE id = '$feed'"); } - if ($use_simplepie) { - unset($rss); - } + unset($rss); if ($debug_enabled) { _debug("update_rss_feed: done"); @@ -1407,7 +1114,7 @@ } function expire_cached_files($debug) { - foreach (array("magpie", "simplepie", "images", "export") as $dir) { + foreach (array("simplepie", "images", "export") as $dir) { $cache_dir = CACHE_DIR . "/$dir"; if ($debug) _debug("Expiring $cache_dir"); diff --git a/include/sanity_config.php b/include/sanity_config.php index ba7a8bb4f..f5436b6b0 100644 --- a/include/sanity_config.php +++ b/include/sanity_config.php @@ -1,3 +1,3 @@ - +$requred_defines = array( 'DB_TYPE', 'DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASS', 'MYSQL_CHARSET', 'SELF_URL_PATH', 'SINGLE_USER_MODE', 'PHP_EXECUTABLE', 'LOCK_DIRECTORY', 'CACHE_DIR', 'ICONS_DIR', 'ICONS_URL', 'AUTH_MODULES', 'AUTH_AUTO_CREATE', 'AUTH_AUTO_LOGIN', 'FORCE_ARTICLE_PURGE', 'PUBSUBHUBBUB_HUB', 'PUBSUBHUBBUB_ENABLED', 'SPHINX_ENABLED', 'SPHINX_INDEX', 'ENABLE_REGISTRATION', 'REG_NOTIFY_ADDRESS', 'REG_MAX_USERS', 'SESSION_COOKIE_LIFETIME', 'SESSION_EXPIRE_TIME', 'SESSION_CHECK_ADDRESS', 'SMTP_FROM_NAME', 'SMTP_FROM_ADDRESS', 'DIGEST_SUBJECT', 'SMTP_HOST', 'SMTP_LOGIN', 'SMTP_PASSWORD', 'CHECK_FOR_NEW_VERSION', 'ENABLE_GZIP_OUTPUT', 'PLUGINS', 'FEEDBACK_URL', 'CONFIG_VERSION'); ?> -- cgit v1.2.3