]> git.wh0rd.org - tt-rss.git/blobdiff - functions.php
make storeInitParam actually work (move back to cookies)
[tt-rss.git] / functions.php
index 10b45d29977274eb0ae65bf138c67148d285ee0c..05ac12dd304b044a3eaeff8f98246a647ed9750e 100644 (file)
@@ -6,7 +6,28 @@
                define('DEFAULT_ERROR_LEVEL', E_ERROR | E_WARNING | E_PARSE);
        } */
 
+       require_once "accept-to-gettext.php";
+       require_once "gettext/gettext.inc";
+
        require_once 'config.php';
+
+       function startup_gettext() {
+
+               # Get locale from Accept-Language header
+               $lang = al2gt(array("en_US", "ru_RU"), "text/html");
+
+               if ($lang) {
+                       _setlocale(LC_MESSAGES, $lang);
+                       _bindtextdomain("messages", "locale");
+                       _textdomain("messages");
+                       _bind_textdomain_codeset("messages", "UTF-8");
+               }
+       }
+
+       if (ENABLE_TRANSLATIONS == true) { 
+               startup_gettext();
+       }
+
        require_once 'db-prefs.php';
        require_once 'compat.php';
        require_once 'errors.php';
        require_once "magpierss/rss_fetch.inc";
        require_once 'magpierss/rss_utils.inc';
 
+       function _debug($msg) {
+               $ts = strftime("%H:%M:%S", time());
+               print "[$ts] $msg\n";
+       }
+
        function purge_feed($link, $feed_id, $purge_interval, $debug = false) {
 
                $rows = -1;
@@ -69,7 +95,7 @@
                }
 
                if ($debug) {
-                       print "Purged feed $feed_id ($purge_interval): deleted $rows articles\n";
+                       _debug("Purged feed $feed_id ($purge_interval): deleted $rows articles");
                }
        }
 
 
                        if ($fp) {
                                curl_setopt($ch, CURLOPT_FILE, $fp);
+                               curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
+                               curl_setopt($ch, CURLOPT_TIMEOUT, 45);
                                curl_exec($ch);
                                curl_close($ch);
                                fclose($fp);                                    
                        return;                 
                }
 
+               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                       _debug("update_rss_feed: start");
+               }
+
                $result = db_query($link, "SELECT update_interval,auth_login,auth_pass  
                        FROM ttrss_feeds WHERE id = '$feed'");
 
 
                }
 
-               error_reporting(0);
+               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                       _debug("update_rss_feed: fetching...");
+               }
+
+               if (!defined('DAEMON_EXTENDED_DEBUG')) {
+                       error_reporting(0);
+               }
+
                $rss = fetch_rss($fetch_url);
-               error_reporting (DEFAULT_ERROR_LEVEL);
-               
+
+               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                       _debug("update_rss_feed: fetch done, parsing...");
+               } else {
+                       error_reporting (DEFAULT_ERROR_LEVEL);
+               }
+
                $feed = db_escape_string($feed);
 
                if ($rss) {
-                       
+
+                       if (defined('DAEMON_EXTENDED_DEBUG')) {
+                               _debug("update_rss_feed: processing feed data...");
+                       }
+
 //                     db_query($link, "BEGIN");
 
                        $result = db_query($link, "SELECT title,icon_url,site_url,owner_uid
                        $owner_uid = db_fetch_result($result, 0, "owner_uid");
 
                        if (get_pref($link, 'ENABLE_FEED_ICONS', $owner_uid, false)) {  
+                               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                       _debug("update_rss_feed: checking favicon...");
+                               }
                                check_feed_favicon($rss->channel["link"], $feed, $link);
                        }
 
                                db_query($link, "UPDATE ttrss_feeds SET icon_url = '$icon_url' WHERE id = '$feed'");
                        }
 
+                       if (defined('DAEMON_EXTENDED_DEBUG')) {
+                               _debug("update_rss_feed: loading filters...");
+                       }
 
                        $filters = array();
 
                                return; // WTF?
                        }
 
+                       if (defined('DAEMON_EXTENDED_DEBUG')) {
+                               _debug("update_rss_feed: processing articles...");
+                       }
+
                        foreach ($iterator as $item) {
 
                                $entry_guid = $item["id"];
-       
+
                                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 (defined('DAEMON_EXTENDED_DEBUG')) {
+                                       _debug("update_rss_feed: guid $entry_guid");
+                               }
+
                                if (!$entry_guid) continue;
 
                                $entry_timestamp = "";
                                
                                $entry_content = sanitize_rss($entry_content);
 
+                               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                       _debug("update_rss_feed: done collecting data [TITLE:$entry_title]");
+                               }
+
                                db_query($link, "BEGIN");
 
                                if (db_num_rows($result) == 0) {
 
+                                       if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                               _debug("update_rss_feed: base guid not found");
+                                       }
+
                                        // base post entry does not exist, create it
 
                                        $result = db_query($link,
 
                                if (db_num_rows($result) == 1) {
 
+                                       if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                               _debug("update_rss_feed: base guid found, checking for user record");
+                                       }
+
                                        // this will be used below in update handler
                                        $orig_content_hash = db_fetch_result($result, 0, "content_hash");
                                        $orig_title = db_fetch_result($result, 0, "title");
                                        $article_filters = get_article_filters($filters, $entry_title, 
                                                        $entry_content, $entry_link);
 
+                                       if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                               _debug("update_rss_feed: article filters: ");
+                                               if (count($article_filters) != 0) {
+                                                       print_r($article_filters);
+                                               }
+                                       }
+
                                        if (find_article_filter($article_filters, "filter")) {
                                                continue;
                                        }
                                                "SELECT ref_id FROM ttrss_user_entries WHERE
                                                        ref_id = '$ref_id' AND owner_uid = '$owner_uid'
                                                        $dupcheck_qpart");
-                                                       
+
                                        // okay it doesn't exist - create user entry
                                        if (db_num_rows($result) == 0) {
 
+                                               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                                       _debug("update_rss_feed: user record not found, creating...");
+                                               }
+
                                                if (!find_article_filter($article_filters, 'catchup')) {
                                                        $unread = 'true';
                                                        $last_read_qpart = 'NULL';
                                        // linking to this post as updated                                      
                                        if ($post_needs_update) {
 
+                                               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                                       _debug("update_rss_feed: post $entry_guid needs update...");
+                                               }
+
 //                                             print "<!-- post $orig_title needs update : $post_needs_update -->";
 
                                                db_query($link, "UPDATE ttrss_entries 
 
                                db_query($link, "COMMIT");
 
+                               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                                       _debug("update_rss_feed: looking for tags...");
+                               }
+
                                /* taaaags */
                                // <a href="http://technorati.com/tag/Xorg" rel="tag">Xorg</a>, //
 
                                        last_updated = NOW() WHERE id = '$feed'");
                }
 
+               if (defined('DAEMON_EXTENDED_DEBUG')) {
+                       _debug("update_rss_feed: done");
+               }
+
        }
 
        function print_select($id, $default, $values, $attributes = "") {
                return true;
        }
 
-       function login_sequence($link) {
+       function login_sequence($link, $mobile = false) {
                if (!SINGLE_USER_MODE) {
 
                        if (defined('_DEBUG_USER_SWITCH') && $_SESSION["uid"]) {
 //                     print_r($_SESSION);
 
                        if (!$_SESSION["uid"] || !validate_session($link)) {
-                               render_login_form($link);
+                               render_login_form($link, $mobile);
                                exit;
                        }
 
        }
 
        function get_script_dt_add() {
-               if (strpos(VERSION, "99") === false) {
+               if (strpos(VERSION, ".99") === false) {
                        return VERSION;
                } else {
                        return time();
                print "<select id=\"$id\" name=\"$id\" $attributes>";
 
                if ($include_all_cats) {
-                       print "<option value=\"0\">"._('Uncategorized')."</option>";
+                       print "<option value=\"0\">".__('Uncategorized')."</option>";
                }
 
                $result = db_query($link, "SELECT id,title FROM ttrss_feed_categories
 
        function getFeedCatTitle($link, $id) {
                if ($id == -1) {
-                       return _("Special");
+                       return __("Special");
                } else if ($id < -10) {
-                       return _("Labels");
+                       return __("Labels");
                } else if ($id > 0) {
                        $result = db_query($link, "SELECT ttrss_feed_categories.title 
                                FROM ttrss_feeds, ttrss_feed_categories WHERE ttrss_feeds.id = '$id' AND
                        if (db_num_rows($result) == 1) {
                                return db_fetch_result($result, 0, "title");
                        } else {
-                               return _("Uncategorized");
+                               return __("Uncategorized");
                        }
                } else {
                        return "getFeedCatTitle($id) failed";
 
        function getFeedTitle($link, $id) {
                if ($id == -1) {
-                       return _("Starred articles");
+                       return __("Starred articles");
                } else if ($id < -10) {
                        $label_id = -10 - $id;
                        $result = db_query($link, "SELECT description FROM ttrss_labels WHERE id = '$label_id'");
                print "<param key=\"confirm_feed_catchup\" value=\"" . 
                        sprintf("%d", get_pref($link, "CONFIRM_FEED_CATCHUP")) . "\"/>";
 
+               print "<param key=\"cdm_auto_catchup\" value=\"" . 
+                       sprintf("%d", get_pref($link, "CDM_AUTO_CATCHUP")) . "\"/>";
+
+               print "<param key=\"icons_url\" value=\"" . ICONS_URL . "\"/>";
+
+               print "<param key=\"cookie_lifetime\" value=\"" . SESSION_COOKIE_LIFETIME . "\"/>";
+
                print "</init-params>";
        }
 
                        $feed_title = "";
 
                        if ($search && $search_mode == "all_feeds") {
-                               $feed_title = _("Global search results")." ($search)";
+                               $feed_title = __("Global search results")." ($search)";
                        } else if ($search && preg_match('/^-?[0-9][0-9]*$/', $feed) == false) {
-                               $feed_title = _("Tag search results")." ($search, $feed)";
+                               $feed_title = __("Tag search results")." ($search, $feed)";
                        } else if (preg_match('/^-?[0-9][0-9]*$/', $feed) == false) {
                                $feed_title = $feed;
                        } else if (preg_match('/^-?[0-9][0-9]*$/', $feed) != false && $feed >= 0) {
                                                        WHERE id = '$feed' AND owner_uid = " . $_SESSION["uid"]);
                                                $feed_title = db_fetch_result($result, 0, "title");
                                        } else {
-                                               $feed_title = _("Uncategorized");
+                                               $feed_title = __("Uncategorized");
                                        }
 
                                        if ($search) {
-                                               $feed_title = _("Category search results")." ($search, $feed_title)";
+                                               $feed_title = __("Category search results")." ($search, $feed_title)";
                                        }
 
                                } else {
                                        $last_error = db_fetch_result($result, 0, "last_error");
 
                                        if ($search) {
-                                               $feed_title = _("Feed search results") . " ($search, $feed_title)";
+                                               $feed_title = __("Feed search results") . " ($search, $feed_title)";
                                        }
                                }
        
                        } else if ($feed == -1) {
-                               $feed_title = _("Starred articles");
+                               $feed_title = __("Starred articles");
                        } else if ($feed < -10) {
                                $label_id = -$feed - 11;
                                $result = db_query($link, "SELECT description FROM ttrss_labels
                                $feed_title = db_fetch_result($result, 0, "description");
 
                                if ($search) {
-                                       $feed_title = _("Label search results") . " ($search, $feed_title)";
+                                       $feed_title = __("Label search results") . " ($search, $feed_title)";
                                }
                        } else {
                                $feed_title = "?";
        }
 
        function prepare_headlines_digest($link, $user_id, $days = 1, $limit = 100) {
-               $tmp =  _("New headlines for last 24 hours, as of ") . date("Y/m/d H:m") . "\n";        
+               $tmp =  __("New headlines for last 24 hours, as of ") . date("Y/m/d H:m") . "\n";       
                $tmp .= "=======================================================\n\n";
 
                if (DB_TYPE == "pgsql") {
                }
 
                $tmp .= "--- \n";
-               $tmp .= _("You have been sent this email because you have enabled daily digests in Tiny Tiny RSS at ") . 
+               $tmp .= __("You have been sent this email because you have enabled daily digests in Tiny Tiny RSS at ") . 
                        DIGEST_HOSTNAME . "\n".
-                       _("To unsubscribe, visit your configuration options or contact instance owner.\n");
+                       __("To unsubscribe, visit your configuration options or contact instance owner.\n");
                        
 
                return array($tmp, $headlines_count);
 
                        if (version_compare(VERSION, $latest_version) == -1) {
                                if ($brief_fmt) {
-                                       return "<div class=\"notice\"><a href=\"javascript:showBlockElement('milestoneDetails')\">      
+                                       return format_notice("<a href=\"javascript:showBlockElement('milestoneDetails')\">      
                                                New version of Tiny-Tiny RSS ($latest_version) is available (click for details)</a>
-                                               <div id=\"milestoneDetails\">$content</div></div>";
+                                               <div id=\"milestoneDetails\">$content</div>");
                                } else {
                                        return "New version of Tiny-Tiny RSS ($latest_version) is available:
                                                <div class='milestoneDetails'>$content</div>
                                print "<td class=\"headlineActions$rtl_cpart\">
                                        <ul class=\"headlineDropdownMenu\">
                                        <li class=\"top2\">
-                                       Select:
-                                               <a href=\"$sel_all_link\">All</a>,
-                                               <a href=\"$sel_unread_link\">Unread</a>,
-                                               <a href=\"$sel_none_link\">None</a></li>
+                                       ".__('Select:')."
+                                               <a href=\"$sel_all_link\">".__('All')."</a>,
+                                               <a href=\"$sel_unread_link\">".__('Unread')."</a>,
+                                               <a href=\"$sel_none_link\">".__('None')."</a></li>
                                        <li class=\"vsep\">&nbsp;</li>
                                        <li class=\"top\">Selection<ul>
-                                               <li onclick=\"$tog_unread_link\">Toggle unread</li>
-                                               <li onclick=\"$tog_marked_link\">Toggle starred</li></ul></li>
+                                               <li onclick=\"$tog_unread_link\">".__('Toggle unread')."</li>
+                                               <li onclick=\"$tog_marked_link\">".__('Toggle starred')."</li></ul></li>
                                        <li class=\"vsep\">&nbsp;</li>
-                                       <li class=\"top\"><a href=\"$catchup_page_link\">Mark as read</a><ul>
-                                               <li onclick=\"$catchup_page_link\">This page</li>
-                                               <li onclick=\"$catchup_feed_link\">Entire feed</li></ul></li>
-                                       <li class=\"vsep\">&nbsp;</li>
-                                       <!-- <li class=\"top2\">
-                                       Page:
-                                               <a href=\"$page_prev_link\">Previous</a>,
-                                               <a href=\"$page_next_link\">Next</a></li> -->";
+                                       <li class=\"top\"><a href=\"$catchup_page_link\">".__('Mark as read')."</a><ul>
+                                               <li onclick=\"$catchup_page_link\">".__('This page')."</li>
+                                               <li onclick=\"$catchup_feed_link\">".__('Entire feed')."</li></ul></li>
+                                       <li class=\"vsep\">&nbsp;</li>";
 
                                        if ($limit != 0) {
                                                print "
-                                               <li class=\"top\"><a href=\"$page_next_link\">Next page</a><ul>
-                                                       <li onclick=\"$page_prev_link\">Previous page</li>
-                                                       <li onclick=\"$page_first_link\">First page</li></ul></li>
+                                               <li class=\"top\"><a href=\"$page_next_link\">".__('Next page')."</a><ul>
+                                                       <li onclick=\"$page_prev_link\">".__('Previous page')."</li>
+                                                       <li onclick=\"$page_first_link\">".__('First page')."</li></ul></li>
                                                        </ul>";
                                        }
 
                        // old style subtoolbar:
 
                                print "<td class=\"headlineActions$rtl_cpart\">".
-                                       _('Select:')."
-                                                               <a href=\"$sel_all_link\">All</a>,
-                                                               <a href=\"$sel_unread_link\">Unread</a>,
-                                                               <a href=\"$sel_none_link\">None</a>
+                                       __('Select:')."
+                                                               <a href=\"$sel_all_link\">".__('All')."</a>,
+                                                               <a href=\"$sel_unread_link\">".__('Unread')."</a>,
+                                                               <a href=\"$sel_none_link\">".__('None')."</a>
                                                &nbsp;&nbsp;".
-                                               _('Toggle:')." <a href=\"$tog_unread_link\">Unread</a>,
-                                                       <a href=\"$tog_marked_link\">Starred</a>
+                                               __('Toggle:')." <a href=\"$tog_unread_link\">".__('Unread')."</a>,
+                                                       <a href=\"$tog_marked_link\">".__('Starred')."</a>
                                                &nbsp;&nbsp;".
-                                               _('Mark as read:')."
-                                                       <a href=\"#\" onclick=\"$catchup_page_link\">Page</a>,
-                                                       <a href=\"#\" onclick=\"$catchup_feed_link\">Feed</a>";
+                                               __('Mark as read:')."
+                                                       <a href=\"#\" onclick=\"$catchup_page_link\">".__('Page')."</a>,
+                                                       <a href=\"#\" onclick=\"$catchup_feed_link\">".__('Feed')."</a>";
                                print "</td>";  
 
                        }
                                print "<td class=\"headlineActions$rtl_cpart\">
                                        <a href=\"javascript:labelFromSearch('$search', '$search_mode',
                                                        '$match_on', '$feed_id', '$is_cat');\">
-                                               "._('Convert to Label')."</a></td>";
+                                               ".__('Convert to Label')."</a></td>";
                        }
 
                        print "<td class=\"headlineTitle$rtl_cpart\">";
                                        <a target=\"_new\" 
                                                href=\"backend.php?op=rss&id=$feed_id&is_cat=$is_cat$search_q\">
                                                <img class=\"noborder\" 
-                                                       alt=\"Generated feed\" src=\"images/feed-icon-12x12.png\">
+                                                       alt=\"".__('Generated feed')."\" src=\"images/feed-icon-12x12.png\">
                                        </a>";
                        }
                                
                /* virtual feeds */
 
                if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                       print "<li class=\"feedCat\">"._('Special')."</li>";
+                       print "<li class=\"feedCat\">".__('Special')."</li>";
                        print "<li id=\"feedCatHolder\"><ul class=\"feedCatList\">";
                }
 
 
                if ($num_starred > 0) $class .= "Unread";
 
-               printFeedEntry(-1, $class, _("Starred articles"), $num_starred, 
+               printFeedEntry(-1, $class, __("Starred articles"), $num_starred, 
                        "images/mark_set.png", $link);
 
                if (get_pref($link, 'ENABLE_FEED_CATS')) {
                
                                if (db_num_rows($result) > 0) {
                                        if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                                               print "<li class=\"feedCat\">"._('Labels')."</li>";
+                                               print "<li class=\"feedCat\">".__('Labels')."</li>";
                                                print "<li id=\"feedCatHolder\"><ul class=\"feedCatList\">";
                                        } else {
                                                print "<li><hr></li>";
                                $tmp_category = $line["category"];
 
                                if (!$tmp_category) {
-                                       $tmp_category = _("Uncategorized");
+                                       $tmp_category = __("Uncategorized");
                                }
                                
        //                      $class = ($lnum % 2) ? "even" : "odd";
                                        $collapsed = $line["collapsed"];
 
                                        // workaround for NULL category
-                                       if ($category == _("Uncategorized")) {
+                                       if ($category == __("Uncategorized")) {
                                                if ($_COOKIE["ttrss_vf_uclps"] == 1) {
                                                        $collapsed = "t";
                                                }
                                        $catctr_class = ($cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
 
                                        print "<li class=\"feedCat\" id=\"FCAT-$cat_id\">
-                                               <a id=\"FCATN-$cat_id\" href=\"#\"onclick=\"javascript:toggleCollapseCat($cat_id)\">$tmp_category</a>
+                                               <a id=\"FCATN-$cat_id\" href=\"javascript:toggleCollapseCat($cat_id)\">$tmp_category</a>
                                                        <a href=\"#\" onclick=\"javascript:viewCategory($cat_id)\" id=\"FCAP-$cat_id\">
                                                        <span id=\"FCATCTR-$cat_id\" title=\"Click to browse category\" 
                                                        class=\"$catctr_class\">($cat_unread)</span> $ellipsis
                                }
        
                                printFeedEntry($feed_id, $class, $feed, $unread, 
-                                       "icons/$feed_id.ico", $link, $rtl_content, 
+                                       ICONS_DIR."/$feed_id.ico", $link, $rtl_content, 
                                        $last_updated, $line["last_error"]);
        
                                ++$lnum;
                        }
 
                        if (db_num_rows($result) == 0) {
-                               print "<li>"._('No feeds to display.')."</li>";
+                               print "<li>".__('No feeds to display.')."</li>";
                        }
 
                } else {
                        ORDER BY tag_name"); */
 
                        if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               print "<li class=\"feedCat\">"._('Tags')."</li>";
+                               print "<li class=\"feedCat\">".__('Tags')."</li>";
                                print "<li id=\"feedCatHolder\"><ul class=\"feedCatList\">";
                        }
 
                return true;
        }
 
-       function render_login_form($link) {
-               require_once "login_form.php";
+       function render_login_form($link, $mobile = false) {
+               if (!$mobile) {
+                       require_once "login_form.php";
+               } else {
+                       require_once "mobile/login_form.php";
+               }
        }
 
        // from http://developer.apple.com/internet/safari/faq.html
                header("Pragma: no-cache"); // HTTP/1.0
        }
 
+       function format_warning($msg, $id = "") {
+               return "<div class=\"warning\" id=\"$id\"> 
+                       <img src=\"images/sign_excl.png\">$msg</div>";
+       }
+
+       function format_notice($msg) {
+               return "<div class=\"notice\"> 
+                       <img src=\"images/sign_info.png\">$msg</div>";
+       }
+
+       function print_notice($msg) {
+               return print format_notice($msg);
+       }
+
+       function print_warning($msg) {
+               return print format_warning($msg);
+       }
+
+       function T_sprintf() {
+               $args = func_get_args();
+               return vsprintf(__(array_shift($args)), $args);
+       }
+
 ?>