]> git.wh0rd.org - tt-rss.git/blobdiff - include/functions.php
Fixing bugs found by static analysis
[tt-rss.git] / include / functions.php
index 8d09abf7b663f300ee1dc087c8fa824c20a10974..414196e9c7d9a6530adc2677c4c4b419f6be556a 100644 (file)
@@ -1,10 +1,12 @@
 <?php
        define('EXPECTED_CONFIG_VERSION', 26);
-       define('SCHEMA_VERSION', 118);
+       define('SCHEMA_VERSION', 120);
 
        define('LABEL_BASE_INDEX', -1024);
        define('PLUGIN_FEED_BASE_INDEX', -128);
 
+       define('COOKIE_LIFETIME_LONG', 86400*365);
+
        $fetch_last_error = false;
        $fetch_last_error_code = false;
        $fetch_last_content_type = false;
                        $lang = _TRANSLATION_OVERRIDE_DEFAULT;
                }
 
-               if ($_SESSION["language"] && $_SESSION["language"] != "auto") {
-                       $lang = $_SESSION["language"];
+               if ($_SESSION["uid"] && get_schema_version() >= 120) {
+                       $pref_lang = get_pref("USER_LANGUAGE", $_SESSION["uid"]);
+
+                       if ($pref_lang) {
+                               $lang = $pref_lang;
+                       }
                }
 
                if ($lang) {
                }
        }
 
-       startup_gettext();
-
        require_once 'db-prefs.php';
        require_once 'version.php';
        require_once 'ccache.php';
 
        require_once 'lib/pubsubhubbub/publisher.php';
 
-       $tz_offset = -1;
-       $utc_tz = new DateTimeZone('UTC');
        $schema_version = false;
 
        /**
                                $_SESSION["last_login_update"] = time();
                        }
 
-                       if ($_SESSION["uid"] && $_SESSION["language"] && SESSION_COOKIE_LIFETIME > 0) {
-                               setcookie("ttrss_lang", $_SESSION["language"],
-                                       time() + SESSION_COOKIE_LIFETIME);
-                       }
-
                        if ($_SESSION["uid"]) {
+                               startup_gettext();
                                load_user_plugins($_SESSION["uid"]);
 
                                /* cleanup ccache */
                if (!$timestamp) $timestamp = '1970-01-01 0:00';
 
                global $utc_tz;
-               global $tz_offset;
+               global $user_tz;
+
+               if (!$utc_tz) $utc_tz = new DateTimeZone('UTC');
 
                $timestamp = substr($timestamp, 0, 19);
 
                # We store date in UTC internally
                $dt = new DateTime($timestamp, $utc_tz);
 
-               if ($tz_offset == -1) {
+               $user_tz_string = get_pref('USER_TIMEZONE', $owner_uid);
 
-                       $user_tz_string = get_pref('USER_TIMEZONE', $owner_uid);
+               if ($user_tz_string != 'Automatic') {
 
                        try {
-                               $user_tz = new DateTimeZone($user_tz_string);
+                               if (!$user_tz) $user_tz = new DateTimeZone($user_tz_string);
                        } catch (Exception $e) {
                                $user_tz = $utc_tz;
                        }
 
                        $tz_offset = $user_tz->getOffset($dt);
+               } else {
+                       $tz_offset = (int) -$_SESSION["clientTzOffset"];
                }
 
                $user_timestamp = $dt->format('U') + $tz_offset;
 
                $data = array_merge($data, getVirtCounters());
                $data = array_merge($data, getLabelCounters());
-               $data = array_merge($data, getFeedCounters($active_feed));
+               $data = array_merge($data, getFeedCounters());
                $data = array_merge($data, getCategoryCounters());
 
                return $data;
 
                        return $unread;
                } else if ($cat == -1) {
-                       return getFeedUnread(-1) + getFeedUnread($link, -2) + getFeedUnread($link, -3) + getFeedUnread($link, 0);
+                       return getFeedUnread(-1) + getFeedUnread(-2) + getFeedUnread(-3) + getFeedUnread(0);
                } else if ($cat == -2) {
 
                        $result = db_query("
                        }
 
                        if (!$root_id) {
-                               $is_selected = ($default_id == "CAT:0") ? "selected=\"1\"" : "";
+                               $default_is_cat = ($default_id == "CAT:0");
+                               $is_selected = $default_is_cat ? "selected=\"1\"" : "";
 
                                printf("<option $is_selected value='CAT:0'>%s</option>",
                                        __("Uncategorized"));
        }
 
        function strip_harmful_tags($doc, $allowed_elements, $disallowed_attributes) {
-               $entries = $doc->getElementsByTagName("*");
+               $xpath = new DOMXPath($doc);
+               $entries = $xpath->query('//*');
 
                foreach ($entries as $entry) {
                        if (!in_array($entry->nodeName, $allowed_elements)) {
                        ttrss_tags WHERE post_int_id = (SELECT int_id FROM ttrss_user_entries WHERE
                        ref_id = '$a_id' AND owner_uid = '$owner_uid' LIMIT 1) ORDER BY tag_name";
 
-               $obj_id = md5("TAGS:$owner_uid:$id");
                $tags = array();
 
                /* check cache first */
 
        function print_checkpoint($n, $s) {
                $ts = microtime(true);
-               echo sprintf("<!-- CP[$n] %.4f seconds -->", $ts - $s);
+               echo sprintf("<!-- CP[$n] %.4f seconds -->\n", $ts - $s);
                return $ts;
        }
 
        }
 
        function format_tags_string($tags, $id) {
+               if (!is_array($tags) || count($tags) == 0) {
+                       return __("no tags");
+               } else {
+                       $maxtags = min(5, count($tags));
 
-               $tags_str = "";
-               $tags_nolinks_str = "";
-
-               $num_tags = 0;
-
-               $tag_limit = 6;
-
-               $formatted_tags = array();
-
-               foreach ($tags as $tag) {
-                       $num_tags++;
-                       $tag_escaped = str_replace("'", "\\'", $tag);
-
-                       if (mb_strlen($tag) > 30) {
-                               $tag = truncate_string($tag, 30);
-                       }
-
-                       $tag_str = "<a href=\"javascript:viewfeed('$tag_escaped')\">$tag</a>";
-
-                       array_push($formatted_tags, $tag_str);
-
-                       $tmp_tags_str = implode(", ", $formatted_tags);
-
-                       if ($num_tags == $tag_limit || mb_strlen($tmp_tags_str) > 150) {
-                               break;
+                       for ($i = 0; $i < $maxtags; $i++) {
+                               $tags_str .= "<a href=\"#\" onclick=\"viewfeed('".$tags[$i]."'\")>" . $tags[$i] . "</a>, ";
                        }
-               }
 
-               $tags_str = implode(", ", $formatted_tags);
+                       $tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2);
 
-               if ($num_tags < count($tags)) {
-                       $tags_str .= ", &hellip;";
-               }
+                       if (count($tags) > $maxtags)
+                               $tags_str .= ", &hellip;";
 
-               if ($num_tags == 0) {
-                       $tags_str = __("no tags");
+                       return $tags_str;
                }
-
-               return $tags_str;
-
        }
 
        function format_article_labels($labels, $id) {
 
-               if (is_array($labels)) return '';
+               if (!is_array($labels)) return '';
 
                $labels_str = "";
 
                                preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches);
                                $url = trim(str_replace($matches[1],"",$matches[0]));
                                $url_parsed = parse_url($url);
-                               return (isset($url_parsed))? geturl($url, $referer):'';
+                               return (isset($url_parsed))? geturl($url):'';
                        }
                        $oline='';
                        foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';}