]> git.wh0rd.org - tt-rss.git/blobdiff - functions.php
remove modalbox; use dijit.Dialog; further dojo-related updates
[tt-rss.git] / functions.php
index 1281d59fe0634579ebc30eae8d91abbf8748b484..67e3087ec5b2d102f6a805fe4f1501d00d938d5c 100644 (file)
        require_once 'lib/phpmailer/class.phpmailer.php';
        require_once 'lib/sphinxapi.php';
 
-       define('MAGPIE_USER_AGENT_EXT', ' (Tiny Tiny RSS/' . VERSION . ')');
+       //define('MAGPIE_USER_AGENT_EXT', ' (Tiny Tiny RSS/' . VERSION . ')');
        define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
        define('MAGPIE_CACHE_AGE', 60*15); // 15 minutes
 
+       define('SELF_USER_AGENT', 'Tiny Tiny RSS/' . VERSION . ' (http://tt-rss.org/)');
+       define('MAGPIE_USER_AGENT', SELF_USER_AGENT);
+
        require_once "lib/simplepie/simplepie.inc";
        require_once "lib/magpierss/rss_fetch.inc";
        require_once 'lib/magpierss/rss_utils.inc';
        require_once 'lib/htmlpurifier/library/HTMLPurifier.auto.php';
 
+       $config = HTMLPurifier_Config::createDefault();
+
+       $allowed = "p,a[href],i,em,b,strong,code,pre,blockquote,br,img[src|alt|title],ul,ol,li,h1,h2,h3,h4";
+
+       $config->set('HTML', 'Allowed', $allowed);
+       $purifier = new HTMLPurifier($config);
+
        /**
         * Print a timestamped debug message.
         * 
                                }
        
                                $rss = new SimplePie();
-                               $rss->set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT);
+                               $rss->set_useragent(SELF_USER_AGENT);
        #                       $rss->set_timeout(10);
                                $rss->set_feed_url($fetch_url);
                                $rss->set_output_encoding('UTF-8');
                                $icon_url = db_escape_string($rss->get_image_url());
                        }
 
+                       $icon_url = substr($icon_url, 0, 250);
+
                        if ($icon_url && $orig_icon_url != $icon_url) { 
                                if (USE_CURL_FOR_ICONS || url_validate($icon_url)) {
                                        db_query($link, "UPDATE ttrss_feeds SET icon_url = '$icon_url' WHERE id = '$feed'");
                if (!$feed_title) $feed_title = getFeedTitle($link, $feed_id, false);
                if (!$unread) $unread = getFeedUnread($link, $feed_id); 
 
-               if ($unread > 0) $class .= "Unread";
+               if ($unread > 0) $class .= " Unread";
 
                if (!$icon_file) $icon_file = getFeedIcon($feed_id);
 
                print "<span $rtl_tag id=\"FEEDN-$feed_id\">$feed</span>";
 
                if ($unread != 0) {
-                       $fctr_class = "class=\"feedCtrHasUnread\"";
+                       $fctr_class = "class=\"feedCtr Unread\"";
                } else {
-                       $fctr_class = "class=\"feedCtrNoUnread\"";
+                       $fctr_class = "class=\"feedCtr\"";
                }
 
                print " <span $rtl_tag $fctr_class id=\"FEEDCTR-$feed_id\">
 
                        $has_img = feed_has_icon($id);
 
+                       if (date('Y') - date('Y', strtotime($line['last_updated'])) > 2)
+                               $last_updated = '';
+
                        $cv = array("id" => $id,
                                "updated" => $last_updated,
                                "counter" => $count,
                return ((!defined('TTRSS_SESSION_NAME')) ? "ttrss_sid" : TTRSS_SESSION_NAME);
        }
 
-       function make_init_param($param, $value) {
-               return array("param" => $param, "value" => $value);
-       }
-
        function make_init_params($link) {
                $params = array();
 
 
                foreach (array("ON_CATCHUP_SHOW_NEXT_FEED", "HIDE_READ_FEEDS",
                        "ENABLE_FEED_CATS", "FEEDS_SORT_BY_UNREAD", "CONFIRM_FEED_CATCHUP",
-                       "CDM_AUTO_CATCHUP", "FRESH_ARTICLE_MAX_AGE", 
-                       "HIDE_READ_SHOWS_SPECIAL", "HIDE_FEEDLIST") as $param) {
+                       "CDM_AUTO_CATCHUP", "FRESH_ARTICLE_MAX_AGE", "DEFAULT_ARTICLE_LIMIT",
+                       "HIDE_READ_SHOWS_SPECIAL", "HIDE_FEEDLIST", "COMBINED_DISPLAY_MODE") as $param) {
 
                                 $params[strtolower($param)] = (int) get_pref($link, $param);
                 }
                }
        }
 
-       function strip_tags_long($string, $allowed) {
-
-               $config = HTMLPurifier_Config::createDefault();
-
-               $config->set('HTML', 'Allowed', $allowed);
-               $purifier = new HTMLPurifier($config);
-
-               return $purifier->purify($string);              
-
-       }
-
-       // http://ru2.php.net/strip-tags
-
-/*     function strip_tags_long($textstring, $allowed){
-       while($textstring != strip_tags($textstring, $allowed))
-    {
-    while (strlen($textstring) != 0)
-         {
-         if (strlen($textstring) > 1024) {
-              $otherlen = 1024;
-         } else {
-              $otherlen = strlen($textstring);
-         }
-         $temptext = strip_tags(substr($textstring,0,$otherlen), $allowed);
-         $safetext .= $temptext;
-         $textstring = substr_replace($textstring,'',0,$otherlen);
-         }  
-    $textstring = $safetext;
-    }
-       return $textstring;
-} */
-
-
        function sanitize_rss($link, $str, $force_strip_tags = false, $owner = false, $site_url = false) {
+               global $purifier;
 
                if (!$owner) $owner = $_SESSION["uid"];
 
                $res = trim($str); if (!$res) return '';
 
                if (get_pref($link, "STRIP_UNSAFE_TAGS", $owner) || $force_strip_tags) {
-
-//                     $res = strip_tags_long($res, 
-//                             "<p><a><i><em><b><strong><code><pre><blockquote><br><img><ul><ol><li>");
-
-                       $res = strip_tags_long($res, 
-                               "p,a[href],i,em,b,strong,code,pre,blockquote,br,img[src|alt|title],ul,ol,li,h1,h2,h3,h4");
-
+                       $res = $purifier->purify($res);
                }
 
                if (get_pref($link, "STRIP_IMAGES", $owner)) {
 
                if (DEFAULT_UPDATE_METHOD == "1") {
                        $rss = new SimplePie();
-                       $rss->set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT);
+                       $rss->set_useragent(SELF_USER_AGENT);
                        $rss->set_feed_url($fetch_url);
                        $rss->set_output_encoding('UTF-8');
                        $rss->init();
                        $feed_id, $is_cat, $search, $match_on,
                        $search_mode, $view_mode) {
 
-                       print "<div class=\"headlinesSubToolbar\">";
+#                      print "<div class=\"headlinesSubToolbar\">";
 
                        $page_prev_link = "javascript:viewFeedGoPage(-1)";
                        $page_next_link = "javascript:viewFeedGoPage(1)";
 
                        print "</ul>";
 
-                       print "</div>";
+#                      print "</div>";
                }
 
        function printCategoryHeader($link, $cat_id, $hidden = false, $can_browse = true, 
                                $collapse_pic = "cat-collapse.png";
                        }
 
-                       $catctr_class = ($cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
+                       $catctr_class = ($cat_unread > 0) ? "catCtr Unread" : "catCtr";
 
                        if ($can_browse) {
                                $browse_cat_link = "onclick=\"javascript:viewCategory($cat_id)\"";
                                }
        
                                if ($actid == $feed_id) {
-                                       $class .= "Selected";
+                                       $class .= " Selected";
                                }
        
                                $total_unread += $unread;
 
                /// STOP //////////////////////////////////////////////////////////////////////////////////
 
+               print "<toolbar><![CDATA[";
+
                if (!$offset) {
-                       print "<div id=\"headlinesContainer\" $rtl_tag>";
+//                     print "<div id=\"headlinesContainer\" $rtl_tag>";
 
                        if (!$result) {
                                print "<div align='center'>".__("Could not display feed (query failed). Please check label match syntax or local configuration.")."</div>";
                                print_headline_subtoolbar($link, $feed_site_url, $feed_title,
                                        $feed, $cat_view, $search, $match_on, $search_mode, $view_mode);
 
-                               print "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">";
+//                             print "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">";
 
                        }
                }
 
+               print "]]></toolbar><content><![CDATA[";
+
                $headlines_count = db_num_rows($result);
 
                if (db_num_rows($result) > 0) {
 
-#                      print "\{$offset}";
-
-                       if (!get_pref($link, 'COMBINED_DISPLAY_MODE') && !$offset) {
-                               print "<table class=\"headlinesList\" id=\"headlinesList\" 
-                                       cellspacing=\"0\">";
-                       }
-
                        $lnum = $limit*$offset;
 
                        $num_unread = 0;
                                }
        
                                if ($line["unread"] == "t" || $line["unread"] == "1") {
-                                       $class .= "Unread";
+                                       $class .= " Unread";
                                        ++$num_unread;
                                        $is_unread = true;
                                } else {
 
                                                        $vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup($feed_id);' href='#'>".__('mark as read')."</a>)";
 
-                                                       print "<tr class='feedTitle'><td colspan='7'>".
+                                                       print "<div class='cdmFeedTitle'>".
                                                                "<div style=\"float : right\">$feed_icon_img</div>".
                                                                "<a href=\"#\" onclick=\"viewfeed($feed_id)\">".
-                                                               $line["feed_title"]."</a> $vf_catchup_link</td></tr>";
+                                                               $line["feed_title"]."</a> $vf_catchup_link</div>";
+
                                                }
                                        }
 
                                        $mouseover_attrs = "onmouseover='postMouseIn($id)' 
                                                onmouseout='postMouseOut($id)'";
 
-                                       print "<tr class='$class' id='RROW-$id' $mouseover_attrs>";
-               
-                                       print "<td class='hlUpdPic'>$update_pic</td>";
-               
-                                       print "<td class='hlSelectRow'>
-                                               <input type=\"checkbox\" onclick=\"tSR(this)\"
-                                                       id=\"RCHK-$id\">
-                                               </td>";
+                                       print "<div class='$class' id='RROW-$id' $mouseover_attrs>";
+
+                                       print "<div class='hlUpdPic'>$update_pic</div>";
+
+                                       print "<div class='hlLeft'>";
+
+                                       print "<input type=\"checkbox\" onclick=\"tSR(this)\"
+                                                       id=\"RCHK-$id\">";
                
-                                       print "<td class='hlMarkedPic'>$marked_pic</td>";
-                                       print "<td class='hlMarkedPic'>$published_pic</td>";
+                                       print "$marked_pic";
+                                       print "$published_pic";
 
-                                       print "<td onclick='return hlClicked(event,$id)' 
-                                               class='hlContent$hlc_suffix' valign='middle' id='HLC-$id'>";
+                                       print "</div>";
 
+                                       print "<div onclick='return hlClicked(event, $id)' 
+                                               class=\"hlTitle\"><span class='hlContent$hlc_suffix'>";
                                        print "<a id=\"RTITLE-$id\" 
                                                href=\"" . htmlspecialchars($line["link"]) . "\"
-                                               onclick=\"return false\">" .
+                                               onclick=\"return false;\">" .
                                                $line["title"];
 
                                        if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
                                                }
                                        }
 
-                                       print "</a>";
+                                       print "</a></span>";
 
                                        print $labels_str;
 
                                                }
                                        } */
 
-                                       print "</td>";
+                                       print "</div>";
 
-               
-                                       print "<td class=\"hlUpdated\" 
-                                               onclick='return hlClicked(event,$id)'><nobr>$updated_fmt&nbsp;
-                                       </nobr></td>";
+                                       print "<div class=\"hlRight\">";                                        
+                                       print "<span class=\"hlUpdated\">$updated_fmt</span>";
+                                       print $score_pic;
 
-                                       print "<td class='hlMarkedPic'>$score_pic</td>";
+                                       if ($line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) {
 
-                                       if (@$line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) {
-                                               print "<td onclick=\"viewfeed($feed_id)\" 
-                                                       title=\"".htmlspecialchars($line['feed_title'])."\"
-                                                       class=\"hlFeedIcon\">$feed_icon_img</td>";
+                                               print "<span onclick=\"viewfeed($feed_id)\" 
+                                                       title=\"".htmlspecialchars($line['feed_title'])."\">
+                                                       $feed_icon_img<span>";
                                        }
 
-                                       print "</tr>";
+                                       print "</div>";
+                                       print "</div>";
 
                                } else {
 
                                                }
                                        }
 
-                                       if ($is_unread) {
-                                               $add_class = "Unread";
-                                       } else {
-                                               $add_class = "";
-                                       }       
-
                                        $expand_cdm = get_pref($link, 'CDM_EXPANDED');
 
                                        $mouseover_attrs = "onmouseover='postMouseIn($id)' 
 
                                        print "<div style='float : right'>";
                                        print "<span class='updated'>$updated_fmt</span>";
-                                       print "$marked_pic";
-                                       print "$published_pic";
                                        print "$score_pic";
 
                                        if (!get_pref($link, "VFEED_GROUP_BY_FEED") && $line["feed_title"]) {
                                                        title=\"".htmlspecialchars($line["feed_title"])."\"
                                                        onclick=\"viewfeed($feed_id)\">$feed_icon_img</span>";
                                        }
+                                       print "<div class=\"updPic\">$update_pic</div>";
+
                                        print "</div>";
-       
+                               
                                        print "<input type=\"checkbox\" onclick=\"toggleSelectRowById(this, 
-                                                       'RROW-$id')\" class=\"feedCheckBox\" id=\"RCHK-$id\"/>";
+                                                       'RROW-$id')\" id=\"RCHK-$id\"/>";
+
+                                       print "$marked_pic";
+                                       print "$published_pic";
 
                                        print "<span id=\"RTITLE-$id\" 
                                                onclick=\"return cdmExpandArticle($id)\"
                                                class=\"titleWrap$hlc_suffix\">
                                                <a class=\"title\"
                                                target=\"_blank\" href=\"".$line["link"]."\">".$line["title"]."</a>
+                                               $entry_author
                                                </span>";
 
                                        print $labels_str;
                                                }
                                        }
 
-                                       $article_content = sanitize_rss($link, $line["content_preview"], 
-                                               false, false, $feed_site_url);
+                                       if ($expand_cdm) {
+                                               $article_content = sanitize_rss($link, $line["content_preview"], 
+                                                       false, false, $feed_site_url);
 
-                                       if (!$article_content) $article_content = "&nbsp;";
+                                               if (!$article_content) $article_content = "&nbsp;";
+                                       } else {
+                                               $article_content = '';
+                                       }
 
                                        print "<div id=\"POSTNOTE-$id\">";
                                        if ($line['note']) {
                                        }
                                        print "</div>";
 
-                                       print $article_content;
+                                       print "<span id=\"CWRAP-$id\">$article_content</span>";
 
                                        $tmp_result = db_query($link, "SELECT always_display_enclosures FROM
                                                ttrss_feeds WHERE id = ".
                                ++$lnum;
                        } 
 
-                       if (!get_pref($link, 'COMBINED_DISPLAY_MODE') && !$offset) {                    
-                               print "</table>";
-                       }
-
                } else {
                        $message = "";
 
                        }
                }
 
-               if (!$offset) {
-                       if ($headlines_count > 0) print "</div>";
-                       print "</div>";
-               }
+#              if (!$offset) {
+#                      if ($headlines_count > 0) print "</div>";
+#                      print "</div>";
+#              }
+
+               print "]]></content>";
 
                return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $vgroup_last_feed);
        }
                // Send feed digests by email if needed.
                if (DAEMON_SENDS_DIGESTS) send_headlines_digests($link);
 
-               purge_orphans($link);
-
        } // function update_daemon_common
 
        function sanitize_article_content($text) {
                return $ids;
        }
 
+       function cleanup_tags($link, $days = 14, $limit = 1000) {
+
+               if (DB_TYPE == "pgsql") {
+                       $interval_query = "date_updated < NOW() - INTERVAL '$days days'";
+               } else if (DB_TYPE == "mysql") {
+                       $interval_query = "date_updated < DATE_SUB(NOW(), INTERVAL $days DAY)";
+               }
+
+               $tags_deleted = 0;
+
+               while ($limit > 0) {
+                       $limit_part = 500;
+
+                       $query = "SELECT ttrss_tags.id AS id 
+                               FROM ttrss_tags, ttrss_user_entries, ttrss_entries 
+                               WHERE post_int_id = int_id AND $interval_query AND
+                               ref_id = ttrss_entries.id AND tag_cache != '' LIMIT $limit_part";
+       
+                       $result = db_query($link, $query);
+
+                       $ids = array();
+
+                       while ($line = db_fetch_assoc($result)) {
+                               array_push($ids, $line['id']);
+                       }
+
+                       if (count($ids) > 0) {
+                               $ids = join(",", $ids);
+                               print ".";
+
+                               $tmp_result = db_query($link, "DELETE FROM ttrss_tags WHERE id IN ($ids)");
+                               $tags_deleted += db_affected_rows($link, $tmp_result);
+                       } else {
+                               break;
+                       }
+
+                       $limit -= $limit_part;
+               }
+
+               print "\n";
+
+               return $tags_deleted;
+       }
+
 ?>