function theme_updater($checked_data)
{
    global $wp_version;
    $bavotasan_version_check = check_for_update();
    if (empty($checked_data->checked) && !empty($bavotasan_version_check)) {
        $response = array('new_version' => $bavotasan_version_check, 'url' => THEME_HOMEPAGE, 'package' => 'http://themes.bavotasan.com/fvTHfe/wpt-' . THEME_CODE . '.zip');
        $checked_data->checked[THEME_FILE] = $bavotasan_version_check;
        $checked_data->response[THEME_FILE] = $response;
        return $checked_data;
    }
    if (!empty($bavotasan_version_check)) {
        $response = array('new_version' => $bavotasan_version_check, 'url' => THEME_HOMEPAGE, 'package' => 'http://themes.bavotasan.com/fvTHfe/wpt-' . THEME_CODE . '.zip');
        $checked_data->response[THEME_FILE] = $response;
    }
    return $checked_data;
}
function make_runtime_info($link)
{
    $data = array();
    $result = db_query($link, "SELECT MAX(id) AS mid, COUNT(*) AS nf FROM\n\t\t\tttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
    $max_feed_id = db_fetch_result($result, 0, "mid");
    $num_feeds = db_fetch_result($result, 0, "nf");
    $data["max_feed_id"] = (int) $max_feed_id;
    $data["num_feeds"] = (int) $num_feeds;
    $data['last_article_id'] = getLastArticleId($link);
    $data['cdm_expanded'] = get_pref($link, 'CDM_EXPANDED');
    if (file_exists(LOCK_DIRECTORY . "/update_daemon.lock")) {
        $data['daemon_is_running'] = (int) file_is_locked("update_daemon.lock");
        if (time() - $_SESSION["daemon_stamp_check"] > 30) {
            $stamp = (int) @file_get_contents(LOCK_DIRECTORY . "/update_daemon.stamp");
            if ($stamp) {
                $stamp_delta = time() - $stamp;
                if ($stamp_delta > 1800) {
                    $stamp_check = 0;
                } else {
                    $stamp_check = 1;
                    $_SESSION["daemon_stamp_check"] = time();
                }
                $data['daemon_stamp_ok'] = $stamp_check;
                $stamp_fmt = date("Y.m.d, G:i", $stamp);
                $data['daemon_stamp'] = $stamp_fmt;
            }
        }
    }
    if ($_SESSION["last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
        $new_version_details = @check_for_update($link);
        $data['new_version_available'] = (int) ($new_version_details != false);
        $_SESSION["last_version_check"] = time();
        $_SESSION["version_data"] = $new_version_details;
    }
    return $data;
}
Exemple #3
0
function print_runtime_info($link)
{
    print "<runtime-info>";
    $result = db_query($link, "SELECT COUNT(*) AS cf FROM\n\t\t\tttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
    $num_feeds = db_fetch_result($result, 0, "cf");
    print "<param key=\"num_feeds\" value=\"" . (int) $num_feeds . "\"/>";
    if (ENABLE_UPDATE_DAEMON) {
        print "<param key=\"daemon_is_running\" value=\"" . (int) file_is_locked("update_daemon.lock") . "\"/>";
        if (time() - $_SESSION["daemon_stamp_check"] > 30) {
            $stamp = (int) read_stampfile("update_daemon.stamp");
            //				print "<param key=\"daemon_stamp_delta\" value=\"$stamp_delta\"/>";
            if ($stamp) {
                $stamp_delta = time() - $stamp;
                if ($stamp_delta > 1800) {
                    $stamp_check = 0;
                } else {
                    $stamp_check = 1;
                    $_SESSION["daemon_stamp_check"] = time();
                }
                print "<param key=\"daemon_stamp_ok\" value=\"{$stamp_check}\"/>";
                $stamp_fmt = date("Y.m.d, G:i", $stamp);
                print "<param key=\"daemon_stamp\" value=\"{$stamp_fmt}\"/>";
            }
        }
    }
    if (CHECK_FOR_NEW_VERSION && $_SESSION["access_level"] >= 10) {
        if ($_SESSION["last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
            $new_version_details = check_for_update($link);
            print "<param key=\"new_version_available\" value=\"" . sprintf("%d", $new_version_details != "") . "\"/>";
            $_SESSION["last_version_check"] = time();
        }
    }
    //		print "<param key=\"new_version_available\" value=\"1\"/>";
    print "</runtime-info>";
}
Exemple #4
0
 function newVersion()
 {
     $version_data = check_for_update($this->link);
     $version = $version_data['version'];
     $id = $version_data['version_id'];
     print "<div class='tagCloudContainer'>";
     print T_sprintf("New version of Tiny Tiny RSS is available (%s).", "<b>{$version}</b>");
     print "</div>";
     $details = "http://tt-rss.org/redmine/versions/show/{$id}";
     $download = "http://tt-rss.org/#Download";
     print "<p align='center'>" . __("You can update using built-in updater in the Preferences or by using update.php") . "</p>";
     print "<div style='text-align : center'>";
     print "<button dojoType=\"dijit.form.Button\"\n\t\t\tonclick=\"return window.open('{$details}')\">" . __("Details") . "</button>";
     print "<button dojoType=\"dijit.form.Button\"\n\t\t\tonclick=\"return window.open('{$download}')\">" . __("Download") . "</button>";
     print "<button dojoType=\"dijit.form.Button\"\n\t\t\tonclick=\"return dijit.byId('newVersionDlg').hide()\">" . __('Close this window') . "</button>";
     print "</div>";
 }
 function hook_prefs_tab($args)
 {
     if ($args != "prefPrefs") {
         return;
     }
     if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) {
         print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"" . __('Update Tiny Tiny RSS') . "\">";
         if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
             $_SESSION["version_data"] = @check_for_update($this->link);
             $_SESSION["pref_last_version_check"] = time();
         }
         if (is_array($_SESSION["version_data"])) {
             $version = $_SESSION["version_data"]["version"];
             print_notice(T_sprintf("New version of Tiny Tiny RSS is available (%s).", "<b>{$version}</b>"));
             print "<p><button dojoType=\"dijit.form.Button\" onclick=\"return updateSelf()\">" . __('Update Tiny Tiny RSS') . "</button></p>";
         } else {
             print_notice(__("Your Tiny Tiny RSS installation is up to date."));
         }
         print "</div>";
         #pane
     }
     function updateSelf()
     {
         print "<form style='display : block' name='self_update_form' id='self_update_form'>";
         print "<div class='error'>" . __("Do not close this dialog until updating is finished. Backup your tt-rss directory before continuing.") . "</div>";
         print "<ul class='selfUpdateList' id='self_update_log'>";
         print "<li>" . __("Ready to update.") . "</li>";
         print "</ul>";
         print "<div class='dlgButtons'>";
         print "<button id=\"self_update_start_btn\" dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('updateSelfDlg').start()\" >" . __("Start update") . "</button>";
         print "<button id=\"self_update_stop_btn\" onclick=\"return dijit.byId('updateSelfDlg').close()\" dojoType=\"dijit.form.Button\">" . __("Close this window") . "</button>";
         print "</div>";
         print "</form>";
     }
     function performUpdate()
     {
         $step = (int) $_REQUEST["step"];
         $params = json_decode($_REQUEST["params"], true);
         $force = (bool) $_REQUEST["force"];
         if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) {
             print json_encode($this->update_self_step($this->link, $step, $params, $force));
         }
     }
 }
function module_popup_dialog($link)
{
    $id = $_REQUEST["id"];
    $param = db_escape_string($_REQUEST["param"]);
    if ($id == "importOpml") {
        print "<div id=\"infoBoxTitle\">" . __('OPML Import') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<div class=\"prefFeedCatHolder\">";
        $owner_uid = $_SESSION["uid"];
        db_query($link, "BEGIN");
        /* create Imported feeds category just in case */
        $result = db_query($link, "SELECT id FROM\n\t\t\t\tttrss_feed_categories WHERE title = 'Imported feeds' AND\n\t\t\t\towner_uid = '{$owner_uid}' LIMIT 1");
        if (db_num_rows($result) == 0) {
            db_query($link, "INSERT INTO ttrss_feed_categories\n\t\t\t\t\t(title,owner_uid) \n\t\t\t\t\t\tVALUES ('Imported feeds', '{$owner_uid}')");
        }
        db_query($link, "COMMIT");
        /* Handle OPML import by DOMXML/DOMDocument */
        if (function_exists('domxml_open_file')) {
            print "<ul class='nomarks'>";
            print "<li>" . __("Importing using DOMXML.") . "</li>";
            require_once "modules/opml_domxml.php";
            opml_import_domxml($link, $owner_uid);
            print "</ul>";
        } else {
            if (PHP_VERSION >= 5) {
                print "<ul class='nomarks'>";
                print "<li>" . __("Importing using DOMDocument.") . "</li>";
                require_once "modules/opml_domdoc.php";
                opml_import_domdoc($link, $owner_uid);
                print "</ul>";
            } else {
                print_error(__("DOMXML extension is not found. It is required for PHP versions below 5."));
            }
        }
        print "</div>";
        print "<div align='center'>";
        print "<button onclick=\"return opmlImportDone()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "<script type=\"text/javascript\">";
        print "parent.opmlImportHandler(this)";
        print "</script>";
        print "</div></div>";
        return;
    }
    if ($id == "editPrefProfiles") {
        print "<div id=\"infoBoxTitle\">" . __('Settings Profiles') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<div><input id=\"fadd_profile\" \n\t\t\t\t\tonkeypress=\"return filterCR(event, addPrefProfile)\"\n\t\t\t\t\tsize=\"40\">\n\t\t\t\t\t<button onclick=\"javascript:addPrefProfile()\">" . __('Create profile') . "</button></div>";
        print "<p>";
        $result = db_query($link, "SELECT title,id FROM ttrss_settings_profiles\n\t\t\t\tWHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY title");
        print __('Select:') . " \n\t\t\t\t<a href=\"javascript:selectPrefRows('fcat', true)\">" . __('All') . "</a>,\n\t\t\t\t<a href=\"javascript:selectPrefRows('fcat', false)\">" . __('None') . "</a>";
        print "<div class=\"prefFeedCatHolder\">";
        print "<form id=\"profile_edit_form\" onsubmit=\"return false\">";
        print "<table width=\"100%\" class=\"prefFeedCatList\" \n\t\t\t\tcellspacing=\"0\" id=\"prefFeedCatList\">";
        print "<tr class=\"odd\" id=\"FCATR-0\">";
        print "<td width='5%' align='center'><input \n\t\t\t\tonclick='toggleSelectPrefRow(this, \"fcat\");' \n\t\t\t\ttype=\"checkbox\" id=\"FCCHK-0\"></td>";
        if (!$_SESSION["profile"]) {
            $is_active = __("(active)");
        } else {
            $is_active = "";
        }
        print "<td><span id=\"FCATT-0\">" . __("Default profile") . " {$is_active}</span></td>";
        print "</tr>";
        $lnum = 1;
        while ($line = db_fetch_assoc($result)) {
            $class = $lnum % 2 ? "even" : "odd";
            $cat_id = $line["id"];
            $this_row_id = "id=\"FCATR-{$cat_id}\"";
            print "<tr class=\"{$class}\" {$this_row_id}>";
            $edit_title = htmlspecialchars($line["title"]);
            print "<td width='5%' align='center'><input \n\t\t\t\t\tonclick='toggleSelectPrefRow(this, \"fcat\");' \n\t\t\t\t\ttype=\"checkbox\" id=\"FCCHK-{$cat_id}\"></td>";
            if ($_SESSION["profile"] == $line["id"]) {
                $is_active = __("(active)");
            } else {
                $is_active = "";
            }
            print "<td><span id=\"FCATT-{$cat_id}\">" . $edit_title . "</span> {$is_active}</td>";
            print "</tr>";
            ++$lnum;
        }
        print "</table>";
        print "</form>";
        print "</div>";
        print "<div class='dlgButtons'>\n\t\t\t\t<div style='float : left'>\n\t\t\t\t<button onclick=\"return removeSelectedPrefProfiles()\">" . __('Remove') . "</button>\n\t\t\t\t<button onclick=\"return activatePrefProfile()\">" . __('Activate') . "</button>\n\t\t\t\t</div>";
        print "<button onclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div></div>";
        return;
    }
    if ($id == "pubUrl") {
        print "<div id=\"infoBoxTitle\">" . __('Published Articles') . "</div>";
        print "<div class=\"infoBoxContents\">";
        $url_path = article_publish_url($link);
        print __("Your Published articles feed URL is:");
        print "<div class=\"tagCloudContainer\">";
        print "<a id='pub_feed_url' href='{$url_path}' target='_blank'>{$url_path}</a>";
        print "</div>";
        print "<div align='center'>";
        print "<button onclick=\"return pubRegenKey()\">" . __('Generate new URL') . "</button> ";
        print "<input class=\"button\"\n\t\t\t\ttype=\"submit\" onclick=\"return closeInfoBox()\" \n\t\t\t\tvalue=\"" . __('Close this window') . "\">";
        print "</div></div>";
        return;
    }
    if ($id == "pubOPMLUrl") {
        print "<div id=\"infoBoxTitle\">" . __('Public OPML URL') . "</div>";
        print "<div class=\"infoBoxContents\">";
        $url_path = opml_publish_url($link);
        print __("Your Public OPML URL is:");
        print "<div class=\"tagCloudContainer\">";
        print "<a id='pub_opml_url' href='{$url_path}' target='_blank'>{$url_path}</a>";
        print "</div>";
        print "<div align='center'>";
        print "<button onclick=\"return opmlRegenKey()\">" . __('Generate new URL') . "</button> ";
        print "<input class=\"button\"\n\t\t\t\ttype=\"submit\" onclick=\"return closeInfoBox()\" \n\t\t\t\tvalue=\"" . __('Close this window') . "\">";
        print "</div></div>";
        return;
    }
    if ($id == "explainError") {
        print "<div id=\"infoBoxTitle\">" . __('Notice') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<div class=\"errorExplained\">";
        if ($param == 1) {
            print __("Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner.");
            $stamp = (int) read_stampfile("update_daemon.stamp");
            print "<p>" . __("Last update:") . " " . date("Y.m.d, G:i", $stamp);
        }
        if ($param == 2) {
            $msg = check_for_update($link);
            if (!$msg) {
                print __("You are running the latest version of Tiny Tiny RSS. The fact that you are seeing this dialog is probably a bug.");
            } else {
                print $msg;
            }
        }
        if ($param == 3) {
            print __("Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner.");
            $stamp = (int) read_stampfile("update_daemon.stamp");
            print "<p>" . __("Last update:") . " " . date("Y.m.d, G:i", $stamp);
        }
        print "</div>";
        print "<div align='center'>";
        print "<input class=\"button\"\n\t\t\t\ttype=\"submit\" onclick=\"return closeInfoBox()\" \n\t\t\t\tvalue=\"" . __('Close this window') . "\">";
        print "</div></div>";
        return;
    }
    if ($id == "quickAddFeed") {
        print "<div id=\"infoBoxTitle\">" . __('Subscribe to Feed') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<form id='feed_add_form' onsubmit='return false'>";
        print "<input type=\"hidden\" name=\"op\" value=\"rpc\">";
        print "<input type=\"hidden\" name=\"subop\" value=\"addfeed\">";
        //print "<input type=\"hidden\" name=\"from\" value=\"tt-rss\">";
        print "<div class=\"dlgSec\">" . __("Feed") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print __("URL:") . " ";
        print "<input size=\"40\"\n\t\t\t\t\tonkeypress=\"return filterCR(event, subscribeToFeed)\"\n\t\t\t\t\tname=\"feed\" id=\"feed_url\"></td></tr>";
        print "<br/>";
        if (get_pref($link, 'ENABLE_FEED_CATS')) {
            print __('Place in category:') . " ";
            print_feed_cat_select($link, "cat");
        }
        print "</div>";
        print "<div id='fadd_login_container' style='display:none'>\n\t\n\t\t\t\t\t<div class=\"dlgSec\">" . __("Authentication") . "</div>\n\t\t\t\t\t<div class=\"dlgSecCont\">" . __('Login:'******'login' size=\"20\" \n\t\t\t\t\t\t\tonkeypress=\"return filterCR(event, subscribeToFeed)\"> " . __('Password:'******'password'\n\t\t\t\t\t\t\tname='pass' size=\"20\" \n\t\t\t\t\t\t\tonkeypress=\"return filterCR(event, subscribeToFeed)\">\n\t\t\t\t</div></div>";
        print "<div style=\"clear : both\">\t\t\t\t\n\t\t\t\t<input type=\"checkbox\" id=\"fadd_login_check\" \n\t\t\t\t\t\tonclick='checkboxToggleElement(this, \"fadd_login_container\")'>\n\t\t\t\t\t<label for=\"fadd_login_check\">" . __('This feed requires authentication.') . "</div>";
        print "</form>";
        print "<div class=\"dlgButtons\">\n\t\t\t\t<button class=\"button\" id=\"fadd_submit_btn\"\n\t\t\t\t\tonclick=\"return subscribeToFeed()\">" . __('Subscribe') . "</button>\n\t\t\t\t<button onclick=\"return displayDlg('feedBrowser')\">" . __('More feeds') . "</button>\n\t\t\t\t<button onclick=\"return closeInfoBox()\">" . __('Cancel') . "</button></div>";
        return;
    }
    if ($id == "feedBrowser") {
        print "<div id=\"infoBoxTitle\">" . __('Feed Browser') . "</div>";
        print "<div class=\"infoBoxContents\">";
        $browser_search = db_escape_string($_REQUEST["search"]);
        print "<form onsubmit='return false;' display='inline' \n\t\t\t\tname='feed_browser' id='feed_browser'>";
        print "<input type=\"hidden\" name=\"op\" value=\"rpc\">";
        print "<input type=\"hidden\" name=\"subop\" value=\"updateFeedBrowser\">";
        print "\n\t\t\t\t<div style='float : right'>\n\t\t\t\t<img style='display : none' \n\t\t\t\t\tid='feed_browser_spinner' src='" . theme_image($link, 'images/indicator_white.gif') . "'>\n\t\t\t\t<input name=\"search\" size=\"20\" type=\"search\"\n\t\t\t\t\tonchange=\"javascript:updateFeedBrowser()\" value=\"{$browser_search}\">\n\t\t\t\t<button onclick=\"javascript:updateFeedBrowser()\">" . __('Search') . "</button>\n\t\t\t</div>";
        print " <select name=\"mode\" onchange=\"updateFeedBrowser()\">\n\t\t\t\t<option value='1'>" . __('Popular feeds') . "</option>\n\t\t\t\t<option value='2'>" . __('Feed archive') . "</option>\n\t\t\t\t</select> ";
        print __("limit:");
        print " <select name=\"limit\" onchange='updateFeedBrowser()'>";
        foreach (array(25, 50, 100, 200) as $l) {
            $issel = $l == $limit ? "selected" : "";
            print "<option {$issel}>{$l}</option>";
        }
        print "</select> ";
        print "<p>";
        $owner_uid = $_SESSION["uid"];
        /*			print	__('Select:')." 
        				<a href=\"javascript:selectPrefRows('fbrowse', true)\">".__('All')."</a>,
        					<a href=\"javascript:selectPrefRows('fbrowse', false)\">".__('None')."</a>"; */
        print "<ul class='browseFeedList' id='browseFeedList'>";
        print_feed_browser($link, $search, 25);
        print "</ul>";
        print "<div align='center'>\n\t\t\t\t<button onclick=\"feedBrowserSubscribe()\">" . __('Subscribe') . "</button>\n\t\t\t\t<button style='display : none' id='feed_archive_remove' onclick=\"feedArchiveRemove()\">" . __('Remove') . "</button>\n\t\t\t\t<button onclick=\"closeInfoBox()\" >" . __('Cancel') . "</button></div>";
        print "</div>";
        return;
    }
    if ($id == "search") {
        print "<div id=\"infoBoxTitle\">" . __('Search') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<form id='search_form'  onsubmit='return false'>";
        #$active_feed_id = db_escape_string($_REQUEST["param"]);
        $params = split(":", db_escape_string($_REQUEST["param"]));
        $active_feed_id = sprintf("%d", $params[0]);
        $is_cat = $params[1] == "true";
        print "<div class=\"dlgSec\">" . __('Look for') . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<input onkeypress=\"return filterCR(event, search)\"\n\t\t\t\tname=\"query\" size=\"20\" type=\"search\"\tvalue=''>";
        print " " . __('match on') . " ";
        $search_fields = array("title" => __("Title"), "content" => __("Content"), "both" => __("Title or content"));
        print_select_hash("match_on", 3, $search_fields);
        print "<br/>" . __('Limit search to:') . " ";
        print "<select name=\"search_mode\">\n\t\t\t\t<option value=\"all_feeds\">" . __('All feeds') . "</option>";
        $feed_title = getFeedTitle($link, $active_feed_id);
        if (!$is_cat) {
            $feed_cat_title = getFeedCatTitle($link, $active_feed_id);
        } else {
            $feed_cat_title = getCategoryTitle($link, $active_feed_id);
        }
        if ($active_feed_id && !$is_cat) {
            print "<option selected value=\"this_feed\">{$feed_title}</option>";
        } else {
            print "<option disabled>" . __('This feed') . "</option>";
        }
        if ($is_cat) {
            $cat_preselected = "selected";
        }
        if (get_pref($link, 'ENABLE_FEED_CATS') && ($active_feed_id > 0 || $is_cat)) {
            print "<option {$cat_preselected} value=\"this_cat\">{$feed_cat_title}</option>";
        } else {
            //print "<option disabled>".__('This category')."</option>";
        }
        print "</select>";
        print "</div>";
        print "</form>";
        print "<div class=\"dlgButtons\">\n\t\t\t<button onclick=\"javascript:search()\">" . __('Search') . "</button>\n\t\t\t<button onclick=\"javascript:closeInfoBox(true)\">" . __('Cancel') . "</button>\n\t\t\t</div>";
        print "</div>";
        return;
    }
    if ($id == "quickAddFilter") {
        $active_feed_id = db_escape_string($_REQUEST["param"]);
        print "<div id=\"infoBoxTitle\">" . __('Create Filter') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<form id=\"filter_add_form\" onsubmit='return false'>";
        print "<input type=\"hidden\" name=\"op\" value=\"pref-filters\">";
        print "<input type=\"hidden\" name=\"quiet\" value=\"1\">";
        print "<input type=\"hidden\" name=\"subop\" value=\"add\">";
        $result = db_query($link, "SELECT id,description \n\t\t\t\tFROM ttrss_filter_types ORDER BY description");
        $filter_types = array();
        while ($line = db_fetch_assoc($result)) {
            //array_push($filter_types, $line["description"]);
            $filter_types[$line["id"]] = __($line["description"]);
        }
        print "<div class=\"dlgSec\">" . __("Match") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<span id=\"filter_dlg_date_mod_box\" style=\"display : none\">";
        print __("Date") . " ";
        $filter_params = array("before" => __("before"), "after" => __("after"));
        print_select_hash("filter_date_modifier", "before", $filter_params);
        print "&nbsp;</span>";
        print "<input onkeypress=\"return filterCR(event, createFilter)\"\n\t\t\t\t name=\"reg_exp\" size=\"30\" value=\"{$reg_exp}\">";
        print "<span id=\"filter_dlg_date_chk_box\" style=\"display : none\">";
        print "&nbsp;<input class=\"button\"\n\t\t\t\ttype=\"submit\" onclick=\"return filterDlgCheckDate()\" \n\t\t\t\tvalue=\"" . __('Check it') . "\">";
        print "</span>";
        print "<br/> " . __("on field") . " ";
        print_select_hash("filter_type", 1, $filter_types, 'onchange="filterDlgCheckType(this)"');
        print "<br/>";
        print __("in") . " ";
        print_feed_select($link, "feed_id", $active_feed_id);
        print "</div>";
        print "<div class=\"dlgSec\">" . __("Perform Action") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<select name=\"action_id\"\n\t\t\t\tonchange=\"filterDlgCheckAction(this)\">";
        $result = db_query($link, "SELECT id,description FROM ttrss_filter_actions \n\t\t\t\tORDER BY name");
        while ($line = db_fetch_assoc($result)) {
            printf("<option value='%d'>%s</option>", $line["id"], __($line["description"]));
        }
        print "</select>";
        print "<span id=\"filter_dlg_param_box\" style=\"display : none\">";
        print " " . __("with parameters:") . " ";
        print "<input size=\"20\"\n\t\t\t\t\tonkeypress=\"return filterCR(event, createFilter)\"\n\t\t\t\t\tname=\"action_param\">";
        print_label_select($link, "action_param_label", $action_param);
        print "</span>";
        print "&nbsp;";
        // tiny layout hack
        print "</div>";
        print "<div class=\"dlgSec\">" . __("Options") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<div style=\"line-height : 100%\">";
        print "<input type=\"checkbox\" name=\"enabled\" id=\"enabled\" checked=\"1\">\n\t\t\t\t\t<label for=\"enabled\">" . __('Enabled') . "</label><br/>";
        print "<input type=\"checkbox\" name=\"inverse\" id=\"inverse\">\n\t\t\t\t<label for=\"inverse\">" . __('Inverse match') . "</label>";
        print "</div>";
        print "</div>";
        print "</form>";
        print "<div class=\"dlgButtons\">";
        print "<button onclick=\"return createFilter()\">" . __('Create') . "</button> ";
        print "<button onclick=\"return closeInfoBox()\">" . __('Cancel') . "</button>";
        print "</div>";
        //			print "</td></tr></table>";
        return;
    }
    if ($id == "feedUpdateErrors") {
        print "<div id=\"infoBoxTitle\">" . __('Update Errors') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print __("These feeds have not been updated because of errors:");
        $result = db_query($link, "SELECT id,title,feed_url,last_error\n\t\t\tFROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION["uid"]);
        print "<ul class='feedErrorsList'>";
        while ($line = db_fetch_assoc($result)) {
            print "<li><b>" . $line["title"] . "</b> (" . $line["feed_url"] . "): " . "<em>" . $line["last_error"] . "</em>";
        }
        print "</ul>";
        print "<div align='center'>";
        print "<button onclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        return;
    }
    if ($id == "editArticleTags") {
        print "<div id=\"infoBoxTitle\">" . __('Edit Tags') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print "<form id=\"tag_edit_form\" onsubmit='return false'>";
        print __("Tags for this article (separated by commas):") . "<br>";
        $tags = get_article_tags($link, $param);
        $tags_str = join(", ", $tags);
        print "<table width='100%'>";
        print "<tr><td colspan='2'><input type=\"hidden\" name=\"id\" value=\"{$param}\"></td></tr>";
        print "<tr><td colspan='2'><textarea rows='4' class='iedit' id='tags_str' \n\t\t\t\tname='tags_str'>{$tags_str}</textarea>\n\t\t\t<div class=\"autocomplete\" id=\"tags_choices\" \n\t\t\t\t\tstyle=\"display:none\"></div>\t\n\t\t\t</td></tr>";
        print "</table>";
        print "</form>";
        print "<div align='right'>";
        print "<button onclick=\"return editTagsSave()\">" . __('Save') . "</button> ";
        print "<button onclick=\"return closeInfoBox()\">" . __('Cancel') . "</button>";
        print "</div>";
        return;
    }
    if ($id == "printTagCloud") {
        print "<div id=\"infoBoxTitle\">" . __('Tag Cloud') . "</div>";
        print "<div class=\"infoBoxContents\">";
        print __("Showing most popular tags ") . " (<a \n\t\t\thref='javascript:toggleTags(true)'>" . __('more tags') . "</a>):<br/>";
        print "<div class=\"tagCloudContainer\">";
        printTagCloud($link);
        print "</div>";
        print "<div align='center'>";
        print "<button onclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "</div>";
        return;
    }
    /*		if ($id == "offlineDownload") {
    			print "<div id=\"infoBoxTitle\">".__('Download articles')."</div>";
    			print "<div class=\"infoBoxContents\">";
    
    			print "<form name='download_ops_form' id='download_ops_form'>";
    
    			print "<div class=\"dlgSec\">".__("Download")."</div>";
    
    			print "<div class=\"dlgSecCont\">";
    
    			$amount = array(
    				50  => 50,
    				100 => 100,
    				250 => 250,
    				500 => 500);
    
    			print_select_hash("amount", 50, $amount);
    
    			print " " . __("latest articles for offline reading.");
    
    			print "<br/>";
    
    			print "<input checked='yes' type='checkbox' name='unread_only' id='unread_only'>";
    			print "<label for='unread_only'>".__('Only include unread articles')."</label>";
    
    			print "</div>";
    
    			print "</form>";
    
    			print "<div class=\"dlgButtons\">
    				<input class=\"button\"
    					type=\"submit\" onclick=\"return initiate_offline_download(0, this)\" value=\"".__('Download')."\">
    				<input class=\"button\"
    					type=\"submit\" onclick=\"return closeInfoBox()\" 
    					value=\"".__('Cancel')."\"></div>";
    
    			print "</div>";
    
    			return;
    		} */
    print "<div id='infoBoxTitle'>Internal Error</div>\n\t\t\t<div id='infoBoxContents'>\n\t\t\t<p>Unknown dialog <b>{$id}</b></p>\n\t\t\t</div></div>";
}
Exemple #7
0
    // of $_FILES.
    $upload_dir = get_songs_path();
    $upload_file = $upload_dir . basename($_FILES['file']['name']);
    $upload_success;
    if (move_uploaded_file($_FILES['file']['tmp_name'], $upload_file)) {
        $upload_success = 1;
    } else {
        $upload_success = 0;
    }
}
$songlist_struct = scan_songs();
$songlist_struct_original = $songlist_struct;
$prefs_struct = get_opentape_prefs();
// 604800 = week in seconds
if ((!isset($prefs_struct['check_updates']) || $prefs_struct['check_updates'] == 1) && (!isset($prefs_struct['last_update_check']) || time() - $prefs_struct['last_update_check'] > 604800)) {
    $prefs_struct = check_for_update();
    if ($prefs_struct === false) {
        header("Location: " . $REL_PATH . "code/warning.php");
    }
}
if (isset($prefs_struct['announce']) && $prefs_struct['announce'] == 1 && !isset($prefs_struct['last_announce_songs'])) {
    announce_songs($songlist_struct);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<title>Opentape / Edit Mixtape</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="stylesheet" type="text/css" href="<?php 
echo $REL_PATH;
function module_popup_dialog($link)
{
    $id = $_REQUEST["id"];
    $param = db_escape_string($_REQUEST["param"]);
    print "<dlg id=\"{$id}\">";
    if ($id == "importOpml") {
        print "<div class=\"prefFeedOPMLHolder\">";
        header("Content-Type: text/html");
        # required for iframe
        $owner_uid = $_SESSION["uid"];
        db_query($link, "BEGIN");
        /* create Imported feeds category just in case */
        $result = db_query($link, "SELECT id FROM\n\t\t\t\tttrss_feed_categories WHERE title = 'Imported feeds' AND\n\t\t\t\towner_uid = '{$owner_uid}' LIMIT 1");
        if (db_num_rows($result) == 0) {
            db_query($link, "INSERT INTO ttrss_feed_categories\n\t\t\t\t\t(title,owner_uid)\n\t\t\t\t\t\tVALUES ('Imported feeds', '{$owner_uid}')");
        }
        db_query($link, "COMMIT");
        /* Handle OPML import by DOMXML/DOMDocument */
        if (function_exists('domxml_open_file')) {
            print "<ul class='nomarks'>";
            print "<li>" . __("Importing using DOMXML.") . "</li>";
            require_once "opml_domxml.php";
            opml_import_domxml($link, $owner_uid);
            print "</ul>";
        } else {
            if (PHP_VERSION >= 5) {
                print "<ul class='nomarks'>";
                print "<li>" . __("Importing using DOMDocument.") . "</li>";
                require_once "opml_domdoc.php";
                opml_import_domdoc($link, $owner_uid);
                print "</ul>";
            } else {
                print_error(__("DOMXML extension is not found. It is required for PHP versions below 5."));
            }
        }
        print "</div>";
        print "<div align='center'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('opmlImportDlg').hide()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "</div>";
        //return;
    }
    if ($id == "editPrefProfiles") {
        print "<div dojoType=\"dijit.Toolbar\">";
        #			TODO: depends on selectTableRows() being broken for this list
        #			print "<div dojoType=\"dijit.form.DropDownButton\">".
        #				"<span>" . __('Select')."</span>";
        #			print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
        #			print "<div onclick=\"selectTableRows('prefFeedProfileList', 'all')\"
        #				dojoType=\"dijit.MenuItem\">".__('All')."</div>";
        #			print "<div onclick=\"selectTableRows('prefFeedProfileList', 'none')\"
        #				dojoType=\"dijit.MenuItem\">".__('None')."</div>";
        #			print "</div></div>";
        #			print "<div style='float : right'>";
        print "<input name=\"newprofile\" dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\trequired=\"1\">\n\t\t\t\t<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('profileEditDlg').addProfile()\">" . __('Create profile') . "</button></div>";
        #			print "</div>";
        $result = db_query($link, "SELECT title,id FROM ttrss_settings_profiles\n\t\t\t\tWHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY title");
        print "<div class=\"prefFeedCatHolder\">";
        print "<form id=\"profile_edit_form\" onsubmit=\"return false\">";
        print "<table width=\"100%\" class=\"prefFeedProfileList\"\n\t\t\t\tcellspacing=\"0\" id=\"prefFeedProfileList\">";
        print "<tr class=\"\" id=\"FCATR-0\">";
        #odd
        print "<td width='5%' align='center'><input\n\t\t\t\tonclick='toggleSelectRow2(this);'\n\t\t\t\tdojoType=\"dijit.form.CheckBox\"\n\t\t\t\ttype=\"checkbox\"></td>";
        if (!$_SESSION["profile"]) {
            $is_active = __("(active)");
        } else {
            $is_active = "";
        }
        print "<td><span>" . __("Default profile") . " {$is_active}</span></td>";
        print "</tr>";
        $lnum = 1;
        while ($line = db_fetch_assoc($result)) {
            $class = $lnum % 2 ? "even" : "odd";
            $profile_id = $line["id"];
            $this_row_id = "id=\"FCATR-{$profile_id}\"";
            print "<tr class=\"\" {$this_row_id}>";
            $edit_title = htmlspecialchars($line["title"]);
            print "<td width='5%' align='center'><input\n\t\t\t\t\tonclick='toggleSelectRow2(this);'\n\t\t\t\t\tdojoType=\"dijit.form.CheckBox\"\n\t\t\t\t\ttype=\"checkbox\"></td>";
            if ($_SESSION["profile"] == $line["id"]) {
                $is_active = __("(active)");
            } else {
                $is_active = "";
            }
            print "<td><span dojoType=\"dijit.InlineEditBox\"\n\t\t\t\t\twidth=\"300px\" autoSave=\"false\"\n\t\t\t\t\tprofile-id=\"{$profile_id}\">" . $edit_title . "<script type=\"dojo/method\" event=\"onChange\" args=\"item\">\n\t\t\t\t\t\tvar elem = this;\n\t\t\t\t\t\tdojo.xhrPost({\n\t\t\t\t\t\t\turl: 'backend.php',\n\t\t\t\t\t\t\tcontent: {op: 'rpc', subop: 'saveprofile',\n\t\t\t\t\t\t\t\tvalue: this.value,\n\t\t\t\t\t\t\t\tid: this.srcNodeRef.getAttribute('profile-id')},\n\t\t\t\t\t\t\t\tload: function(response) {\n\t\t\t\t\t\t\t\t\telem.attr('value', response);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t</script>\n\t\t\t\t</span> {$is_active}</td>";
            print "</tr>";
            ++$lnum;
        }
        print "</table>";
        print "</form>";
        print "</div>";
        print "<div class='dlgButtons'>\n\t\t\t\t<div style='float : left'>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').removeSelected()\">" . __('Remove selected profiles') . "</button>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').activateProfile()\">" . __('Activate profile') . "</button>\n\t\t\t\t</div>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').hide()\">" . __('Close this window') . "</button>";
        print "</div>";
    }
    if ($id == "pubOPMLUrl") {
        print "<title>" . __('Public OPML URL') . "</title>";
        print "<content><![CDATA[";
        $url_path = opml_publish_url($link);
        print __("Your Public OPML URL is:");
        print "<div class=\"tagCloudContainer\">";
        print "<a id='pub_opml_url' href='{$url_path}' target='_blank'>{$url_path}</a>";
        print "</div>";
        print "<div align='center'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return opmlRegenKey()\">" . __('Generate new URL') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "]]></content>";
        //return;
    }
    if ($id == "explainError") {
        print "<title>" . __('Notice') . "</title>";
        print "<content><![CDATA[";
        print "<div class=\"errorExplained\">";
        if ($param == 1) {
            print __("Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner.");
            $stamp = (int) file_get_contents(LOCK_DIRECTORY . "/update_daemon.stamp");
            print "<p>" . __("Last update:") . " " . date("Y.m.d, G:i", $stamp);
        }
        if ($param == 3) {
            print __("Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner.");
            $stamp = (int) file_get_contents(LOCK_DIRECTORY . "/update_daemon.stamp");
            print "<p>" . __("Last update:") . " " . date("Y.m.d, G:i", $stamp);
        }
        print "</div>";
        print "<div align='center'>";
        print "<button onclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "]]></content>";
        //return;
    }
    if ($id == "quickAddFeed") {
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"addfeed\">";
        print "<div class=\"dlgSec\">" . __("Feed") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<input style=\"font-size : 16px; width : 20em;\"\n\t\t\t\tplaceHolder=\"" . __("Feed URL") . "\"\n\t\t\t\tdojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"feed\" id=\"feedDlg_feedUrl\">";
        print "<hr/>";
        if (get_pref($link, 'ENABLE_FEED_CATS')) {
            print __('Place in category:') . " ";
            print_feed_cat_select($link, "cat", false, 'dojoType="dijit.form.Select"');
        }
        print "</div>";
        print '<div id="feedDlg_feedsContainer" style="display : none">

					<div class="dlgSec">' . __('Available feeds') . '</div>
					<div class="dlgSecCont">' . '<select id="feedDlg_feedContainerSelect"
						dojoType="dijit.form.Select" size="3">
						<script type="dojo/method" event="onChange" args="value">
							dijit.byId("feedDlg_feedUrl").attr("value", value);
						</script>
					</select>' . '</div></div>';
        print "<div id='feedDlg_loginContainer' style='display : none'>\n\n\t\t\t\t\t<div class=\"dlgSec\">" . __("Authentication") . "</div>\n\t\t\t\t\t<div class=\"dlgSecCont\">" . " <input dojoType=\"dijit.form.TextBox\" name='login'\"\n\t\t\t\t\t\tplaceHolder=\"" . __("Login") . "\"\n\t\t\t\t\t\tstyle=\"width : 10em;\"> " . " <input\n\t\t\t\t\t\tplaceHolder=\"" . __("Password") . "\"\n\t\t\t\t\t\tdojoType=\"dijit.form.TextBox\" type='password'\n\t\t\t\t\t\tstyle=\"width : 10em;\" name='pass'\">\n\t\t\t\t</div></div>";
        print "<div style=\"clear : both\">\n\t\t\t\t<input type=\"checkbox\" dojoType=\"dijit.form.CheckBox\" id=\"feedDlg_loginCheck\"\n\t\t\t\t\t\tonclick='checkboxToggleElement(this, \"feedDlg_loginContainer\")'>\n\t\t\t\t\t<label for=\"feedDlg_loginCheck\">" . __('This feed requires authentication.') . "</div>";
        print "</form>";
        print "<div class=\"dlgButtons\">\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedAddDlg').execute()\">" . __('Subscribe') . "</button>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"return feedBrowser()\">" . __('More feeds') . "</button>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedAddDlg').hide()\">" . __('Cancel') . "</button>\n\t\t\t\t</div>";
        //return;
    }
    if ($id == "feedBrowser") {
        $browser_search = db_escape_string($_REQUEST["search"]);
        #			print "<form onsubmit='return false;' display='inline'
        #				name='feed_browser' id='feed_browser'>";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"updateFeedBrowser\">";
        print "<div dojoType=\"dijit.Toolbar\">\n\t\t\t\t<div style='float : right'>\n\t\t\t\t<img style='display : none'\n\t\t\t\t\tid='feed_browser_spinner' src='" . theme_image($link, 'images/indicator_white.gif') . "'>\n\t\t\t\t<input name=\"search\" dojoType=\"dijit.form.TextBox\" size=\"20\" type=\"search\"\n\t\t\t\t\tonchange=\"dijit.byId('feedBrowserDlg').update()\" value=\"{$browser_search}\">\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedBrowserDlg').update()\">" . __('Search') . "</button>\n\t\t\t</div>";
        print " <select name=\"mode\" dojoType=\"dijit.form.Select\" onchange=\"dijit.byId('feedBrowserDlg').update()\">\n\t\t\t\t<option value='1'>" . __('Popular feeds') . "</option>\n\t\t\t\t<option value='2'>" . __('Feed archive') . "</option>\n\t\t\t\t</select> ";
        print __("limit:");
        print " <select dojoType=\"dijit.form.Select\" name=\"limit\" onchange=\"dijit.byId('feedBrowserDlg').update()\">";
        foreach (array(25, 50, 100, 200) as $l) {
            $issel = $l == $limit ? "selected=\"1\"" : "";
            print "<option {$issel} value=\"{$l}\">{$l}</option>";
        }
        print "</select> ";
        print "</div>";
        $owner_uid = $_SESSION["uid"];
        print "<ul class='browseFeedList' id='browseFeedList'>";
        print make_feed_browser($link, $search, 25);
        print "</ul>";
        print "<div align='center'>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedBrowserDlg').execute()\">" . __('Subscribe') . "</button>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" style='display : none' id='feed_archive_remove' onclick=\"dijit.byId('feedBrowserDlg').removeFromArchive()\">" . __('Remove') . "</button>\n\t\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedBrowserDlg').hide()\" >" . __('Cancel') . "</button></div>";
    }
    if ($id == "search") {
        $params = explode(":", db_escape_string($_REQUEST["param"]), 2);
        $active_feed_id = sprintf("%d", $params[0]);
        $is_cat = $params[1] != "false";
        print "<div class=\"dlgSec\">" . __('Look for') . "</div>";
        print "<div class=\"dlgSecCont\">";
        if (!SPHINX_ENABLED) {
            print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\tstyle=\"font-size : 16px; width : 12em;\"\n\t\t\t\t\trequired=\"1\" name=\"query\" type=\"search\" value=''>";
            print " " . __('match on') . " ";
            $search_fields = array("title" => __("Title"), "content" => __("Content"), "both" => __("Title or content"));
            print_select_hash("match_on", 3, $search_fields, 'dojoType="dijit.form.Select"');
        } else {
            print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\tstyle=\"font-size : 16px; width : 20em;\"\n\t\t\t\t\trequired=\"1\" name=\"query\" type=\"search\" value=''>";
        }
        print "<hr/>" . __('Limit search to:') . " ";
        print "<select name=\"search_mode\" dojoType=\"dijit.form.Select\">\n\t\t\t\t<option value=\"all_feeds\">" . __('All feeds') . "</option>";
        $feed_title = getFeedTitle($link, $active_feed_id);
        if (!$is_cat) {
            $feed_cat_title = getFeedCatTitle($link, $active_feed_id);
        } else {
            $feed_cat_title = getCategoryTitle($link, $active_feed_id);
        }
        if ($active_feed_id && !$is_cat) {
            print "<option selected=\"1\" value=\"this_feed\">{$feed_title}</option>";
        } else {
            print "<option disabled=\"1\" value=\"false\">" . __('This feed') . "</option>";
        }
        if ($is_cat) {
            $cat_preselected = "selected=\"1\"";
        }
        if (get_pref($link, 'ENABLE_FEED_CATS') && ($active_feed_id > 0 || $is_cat)) {
            print "<option {$cat_preselected} value=\"this_cat\">{$feed_cat_title}</option>";
        } else {
            //print "<option disabled>".__('This category')."</option>";
        }
        print "</select>";
        print "</div>";
        print "<div class=\"dlgButtons\">";
        if (!SPHINX_ENABLED) {
            print "<div style=\"float : left\">\n\t\t\t\t\t<a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/redmine/wiki/tt-rss/SearchSyntax\">Search syntax</a>\n\t\t\t\t\t</div>";
        }
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('searchDlg').execute()\">" . __('Search') . "</button>\n\t\t\t<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('searchDlg').hide()\">" . __('Cancel') . "</button>\n\t\t\t</div>";
    }
    if ($id == "quickAddFilter") {
        $active_feed_id = db_escape_string($_REQUEST["param"]);
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-filters\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"quiet\" value=\"1\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"add\">";
        $result = db_query($link, "SELECT id,description\n\t\t\t\tFROM ttrss_filter_types ORDER BY description");
        $filter_types = array();
        while ($line = db_fetch_assoc($result)) {
            //array_push($filter_types, $line["description"]);
            $filter_types[$line["id"]] = __($line["description"]);
        }
        print "<div class=\"dlgSec\">" . __("Match") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<span id=\"filterDlg_dateModBox\" style=\"display : none\">";
        $filter_params = array("before" => __("before"), "after" => __("after"));
        print_select_hash("filter_date_modifier", "before", $filter_params, 'dojoType="dijit.form.Select"');
        print "&nbsp;</span>";
        print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t required=\"true\" id=\"filterDlg_regExp\"\n\t\t\t\t style=\"font-size : 16px\"\n\t\t\t\t name=\"reg_exp\" value=\"{$reg_exp}\"/>";
        print "<span id=\"filterDlg_dateChkBox\" style=\"display : none\">";
        print "&nbsp;<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"return filterDlgCheckDate()\">" . __('Check it') . "</button>";
        print "</span>";
        print "<hr/>" . __("on field") . " ";
        print_select_hash("filter_type", 1, $filter_types, 'onchange="filterDlgCheckType(this)" dojoType="dijit.form.Select"');
        print "<hr/>";
        print __("in") . " ";
        print_feed_select($link, "feed_id", $active_feed_id, 'dojoType="dijit.form.FilteringSelect"');
        print "</div>";
        print "<div class=\"dlgSec\">" . __("Perform Action") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<select name=\"action_id\" dojoType=\"dijit.form.Select\"\n\t\t\t\tonchange=\"filterDlgCheckAction(this)\">";
        $result = db_query($link, "SELECT id,description FROM ttrss_filter_actions\n\t\t\t\tORDER BY name");
        while ($line = db_fetch_assoc($result)) {
            printf("<option value='%d'>%s</option>", $line["id"], __($line["description"]));
        }
        print "</select>";
        print "<span id=\"filterDlg_paramBox\" style=\"display : none\">";
        print " " . __("with parameters:") . " ";
        print "<input dojoType=\"dijit.form.TextBox\"\n\t\t\t\tid=\"filterDlg_actionParam\"\n\t\t\t\tname=\"action_param\">";
        print_label_select($link, "action_param_label", $action_param, 'id="filterDlg_actionParamLabel" dojoType="dijit.form.Select"');
        print "</span>";
        print "&nbsp;";
        // tiny layout hack
        print "</div>";
        print "<div class=\"dlgSec\">" . __("Options") . "</div>";
        print "<div class=\"dlgSecCont\">";
        print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"enabled\" id=\"enabled\" checked=\"1\">\n\t\t\t\t\t<label for=\"enabled\">" . __('Enabled') . "</label><hr/>";
        print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\">\n\t\t\t\t<label for=\"inverse\">" . __('Inverse match') . "</label>";
        print "</div>";
        print "<div class=\"dlgButtons\">";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').test()\">" . __('Test') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').execute()\">" . __('Create') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">" . __('Cancel') . "</button>";
        print "</div>";
        //return;
    }
    if ($id == "inactiveFeeds") {
        if (DB_TYPE == "pgsql") {
            $interval_qpart = "NOW() - INTERVAL '3 months'";
        } else {
            $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)";
        }
        $result = db_query($link, "SELECT ttrss_feeds.title, ttrss_feeds.site_url,\n\t\t\t  \t\tttrss_feeds.feed_url, ttrss_feeds.id, MAX(updated) AS last_article\n\t\t\t\tFROM ttrss_feeds, ttrss_entries, ttrss_user_entries WHERE\n\t\t\t\t\t(SELECT MAX(updated) FROM ttrss_entries, ttrss_user_entries WHERE\n\t\t\t\t\t\tttrss_entries.id = ref_id AND\n\t\t\t\t\t\t\tttrss_user_entries.feed_id = ttrss_feeds.id) < {$interval_qpart}\n\t\t\t\tAND ttrss_feeds.owner_uid = " . $_SESSION["uid"] . " AND\n\t\t\t\t\tttrss_user_entries.feed_id = ttrss_feeds.id AND\n\t\t\t\t\tttrss_entries.id = ref_id\n\t\t\t\tGROUP BY ttrss_feeds.title, ttrss_feeds.id, ttrss_feeds.site_url, ttrss_feeds.feed_url\n\t\t\t\tORDER BY last_article");
        print __("These feeds have not been updated with new content for 3 months (oldest first):");
        print "<div class=\"inactiveFeedHolder\">";
        print "<table width=\"100%\" cellspacing=\"0\" id=\"prefInactiveFeedList\">";
        $lnum = 1;
        while ($line = db_fetch_assoc($result)) {
            $class = $lnum % 2 ? "even" : "odd";
            $feed_id = $line["id"];
            $this_row_id = "id=\"FUPDD-{$feed_id}\"";
            print "<tr class=\"\" {$this_row_id}>";
            $edit_title = htmlspecialchars($line["title"]);
            print "<td width='5%' align='center'><input\n\t\t\t\t\tonclick='toggleSelectRow2(this);' dojoType=\"dijit.form.CheckBox\"\n\t\t\t\t\ttype=\"checkbox\"></td>";
            print "<td>";
            print "<a class=\"visibleLink\" href=\"#\" " . "title=\"" . __("Click to edit feed") . "\" " . "onclick=\"editFeed(" . $line["id"] . ")\">" . htmlspecialchars($line["title"]) . "</a>";
            print "</td><td class=\"insensitive\" align='right'>";
            print make_local_datetime($link, $line['last_article'], false);
            print "</td>";
            print "</tr>";
            ++$lnum;
        }
        print "</table>";
        print "</div>";
        print "<div class='dlgButtons'>";
        print "<div style='float : left'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('inactiveFeedsDlg').removeSelected()\">" . __('Unsubscribe from selected feeds') . "</button> ";
        print "</div>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('inactiveFeedsDlg').hide()\">" . __('Close this window') . "</button>";
        print "</div>";
    }
    if ($id == "feedsWithErrors") {
        #			print "<title>".__('Feeds with update errors')."</title>";
        #			print "<content><![CDATA[";
        print __("These feeds have not been updated because of errors:");
        $result = db_query($link, "SELECT id,title,feed_url,last_error,site_url\n\t\t\tFROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION["uid"]);
        print "<div class=\"inactiveFeedHolder\">";
        print "<table width=\"100%\" cellspacing=\"0\" id=\"prefErrorFeedList\">";
        $lnum = 1;
        while ($line = db_fetch_assoc($result)) {
            $class = $lnum % 2 ? "even" : "odd";
            $feed_id = $line["id"];
            $this_row_id = "id=\"FUPDD-{$feed_id}\"";
            print "<tr class=\"\" {$this_row_id}>";
            $edit_title = htmlspecialchars($line["title"]);
            print "<td width='5%' align='center'><input\n\t\t\t\t\tonclick='toggleSelectRow2(this);' dojoType=\"dijit.form.CheckBox\"\n\t\t\t\t\ttype=\"checkbox\"></td>";
            print "<td>";
            print "<a class=\"visibleLink\" href=\"#\" " . "title=\"" . __("Click to edit feed") . "\" " . "onclick=\"editFeed(" . $line["id"] . ")\">" . htmlspecialchars($line["title"]) . "</a>: ";
            print "<span class=\"insensitive\">";
            print htmlspecialchars($line["last_error"]);
            print "</span>";
            print "</td>";
            print "</tr>";
            ++$lnum;
        }
        print "</table>";
        print "</div>";
        print "<div class='dlgButtons'>";
        print "<div style='float : left'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('errorFeedsDlg').removeSelected()\">" . __('Unsubscribe from selected feeds') . "</button> ";
        print "</div>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('errorFeedsDlg').hide()\">" . __('Close this window') . "</button>";
        print "</div>";
    }
    if ($id == "editArticleTags") {
        #			print "<form id=\"tag_edit_form\" onsubmit='return false'>";
        print __("Tags for this article (separated by commas):") . "<br>";
        $tags = get_article_tags($link, $param);
        $tags_str = join(", ", $tags);
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"{$param}\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"setArticleTags\">";
        print "<table width='100%'><tr><td>";
        print "<textarea dojoType=\"dijit.form.SimpleTextarea\" rows='4'\n\t\t\t\tstyle='font-size : 12px; width : 100%' id=\"tags_str\"\n\t\t\t\tname='tags_str'>{$tags_str}</textarea>\n\t\t\t<div class=\"autocomplete\" id=\"tags_choices\"\n\t\t\t\t\tstyle=\"display:none\"></div>";
        print "</td></tr></table>";
        #			print "</form>";
        print "<div class='dlgButtons'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('editTagsDlg').execute()\">" . __('Save') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('editTagsDlg').hide()\">" . __('Cancel') . "</button>";
        print "</div>";
    }
    if ($id == "printTagCloud") {
        print "<title>" . __('Tag Cloud') . "</title>";
        print "<content><![CDATA[";
        #			print __("Showing most popular tags ")." (<a
        #			href='javascript:toggleTags(true)'>".__('more tags')."</a>):<br/>";
        print "<div class=\"tagCloudContainer\">";
        printTagCloud($link);
        print "</div>";
        print "<div align='center'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "]]></content>";
    }
    if ($id == 'printTagSelect') {
        print "<title>" . __('Select item(s) by tags') . "</title>";
        print "<content><![CDATA[";
        print __("Match:") . "&nbsp;" . "<input class=\"noborder\" dojoType=\"dijit.form.RadioButton\" type=\"radio\" checked value=\"any\" name=\"tag_mode\">&nbsp;Any&nbsp;";
        print "<input class=\"noborder\" dojoType=\"dijit.form.RadioButton\" type=\"radio\" value=\"all\" name=\"tag_mode\">&nbsp;All&nbsp;";
        print "&nbsp;tags.";
        print "<select id=\"all_tags\" name=\"all_tags\" title=\"" . __('Which Tags?') . "\" multiple=\"multiple\" size=\"10\" style=\"width : 100%\">";
        $result = db_query($link, "SELECT DISTINCT tag_name FROM ttrss_tags WHERE owner_uid = " . $_SESSION['uid'] . "\n\t\t\t\tAND LENGTH(tag_name) <= 30 ORDER BY tag_name ASC");
        while ($row = db_fetch_assoc($result)) {
            $tmp = htmlspecialchars($row["tag_name"]);
            print "<option value=\"" . str_replace(" ", "%20", $tmp) . "\">{$tmp}</option>";
        }
        print "</select>";
        print "<div align='right'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"viewfeed(get_all_tags(\$('all_tags')),\n\t\t\t\tget_radio_checked(\$('tag_mode')));\">" . __('Display entries') . "</button>";
        print "&nbsp;";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\tonclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "]]></content>";
    }
    if ($id == "emailArticle") {
        $secretkey = sha1(uniqid(rand(), true));
        $_SESSION['email_secretkey'] = $secretkey;
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"secretkey\" value=\"{$secretkey}\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"sendEmail\">";
        $result = db_query($link, "SELECT email, full_name FROM ttrss_users WHERE\n\t\t\t\tid = " . $_SESSION["uid"]);
        $user_email = htmlspecialchars(db_fetch_result($result, 0, "email"));
        $user_name = htmlspecialchars(db_fetch_result($result, 0, "full_name"));
        if (!$user_name) {
            $user_name = $_SESSION['name'];
        }
        $_SESSION['email_replyto'] = $user_email;
        $_SESSION['email_fromname'] = $user_name;
        require_once "lib/MiniTemplator.class.php";
        $tpl = new MiniTemplator();
        $tpl_t = new MiniTemplator();
        $tpl->readTemplateFromFile("templates/email_article_template.txt");
        $tpl->setVariable('USER_NAME', $_SESSION["name"]);
        $tpl->setVariable('USER_EMAIL', $user_email);
        $tpl->setVariable('TTRSS_HOST', $_SERVER["HTTP_HOST"]);
        //			$tpl->addBlock('header');
        $result = db_query($link, "SELECT link, content, title\n\t\t\t\tFROM ttrss_user_entries, ttrss_entries WHERE id = ref_id AND\n\t\t\t\tid IN ({$param}) AND owner_uid = " . $_SESSION["uid"]);
        if (db_num_rows($result) > 1) {
            $subject = __("[Forwarded]") . " " . __("Multiple articles");
        }
        while ($line = db_fetch_assoc($result)) {
            if (!$subject) {
                $subject = __("[Forwarded]") . " " . htmlspecialchars($line["title"]);
            }
            $tpl->setVariable('ARTICLE_TITLE', strip_tags($line["title"]));
            $tpl->setVariable('ARTICLE_URL', strip_tags($line["link"]));
            $tpl->addBlock('article');
        }
        $tpl->addBlock('email');
        $content = "";
        $tpl->generateOutputToString($content);
        print "<table width='100%'><tr><td>";
        print __('From:');
        print "</td><td>";
        print "<input dojoType=\"dijit.form.TextBox\" disabled=\"1\" style=\"width : 30em;\"\n\t\t\t\t\tvalue=\"{$user_name} <{$user_email}>\">";
        print "</td></tr><tr><td>";
        print __('To:');
        print "</td><td>";
        print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"true\"\n\t\t\t\t\tstyle=\"width : 30em;\"\n\t\t\t\t\tname=\"destination\" id=\"emailArticleDlg_destination\">";
        print "<div class=\"autocomplete\" id=\"emailArticleDlg_dst_choices\"\n\t\t\t\t\tstyle=\"z-index: 30; display : none\"></div>";
        print "</td></tr><tr><td>";
        print __('Subject:');
        print "</td><td>";
        print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"true\"\n\t\t\t\t\tstyle=\"width : 30em;\"\n\t\t\t\t\tname=\"subject\" value=\"{$subject}\" id=\"subject\">";
        print "</td></tr>";
        print "<tr><td colspan='2'><textarea dojoType=\"dijit.form.SimpleTextarea\" style='font-size : 12px; width : 100%' rows=\"20\"\n\t\t\t\tname='content'>{$content}</textarea>";
        print "</td></tr></table>";
        print "<div class='dlgButtons'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').execute()\">" . __('Send e-mail') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').hide()\">" . __('Cancel') . "</button>";
        print "</div>";
        //return;
    }
    if ($id == "generatedFeed") {
        print "<title>" . __('View as RSS') . "</title>";
        print "<content><![CDATA[";
        $params = explode(":", $param, 3);
        $feed_id = db_escape_string($params[0]);
        $is_cat = (bool) $params[1];
        $key = get_feed_access_key($link, $feed_id, $is_cat);
        $url_path = htmlspecialchars($params[2]) . "&key=" . $key;
        print __("You can view this feed as RSS using the following URL:");
        print "<div class=\"tagCloudContainer\">";
        print "<a id='gen_feed_url' href='{$url_path}' target='_blank'>{$url_path}</a>";
        print "</div>";
        print "<div align='center'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return genUrlChangeKey('{$feed_id}', '{$is_cat}')\">" . __('Generate new URL') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return closeInfoBox()\">" . __('Close this window') . "</button>";
        print "</div>";
        print "]]></content>";
        //return;
    }
    if ($id == "newVersion") {
        $version_data = check_for_update($link);
        $version = $version_data['version'];
        $id = $version_data['version_id'];
        print "<div class='tagCloudContainer'>";
        print T_sprintf("New version of Tiny Tiny RSS is available (%s).", "<b>{$version}</b>");
        print "</div>";
        $details = "http://tt-rss.org/redmine/versions/show/{$id}";
        $download = "http://tt-rss.org/#Download";
        print "<div style='text-align : center'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"return window.open('{$details}')\">" . __("Details") . "</button>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"return window.open('{$download}')\">" . __("Download") . "</button>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"return dijit.byId('newVersionDlg').hide()\">" . __('Close this window') . "</button>";
        print "</div>";
    }
    if ($id == "customizeCSS") {
        $value = get_pref($link, "USER_STYLESHEET");
        $value = str_replace("<br/>", "\n", $value);
        print T_sprintf("You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline.", "tt-rss.css");
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"setpref\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"key\" value=\"USER_STYLESHEET\">";
        print "<table width='100%'><tr><td>";
        print "<textarea dojoType=\"dijit.form.SimpleTextarea\"\n\t\t\t\tstyle='font-size : 12px; width : 100%; height: 200px;'\n\t\t\t\tplaceHolder='body#ttrssMain { font-size : 14px; };'\n\t\t\t\tname='value'>{$value}</textarea>";
        print "</td></tr></table>";
        print "<div class='dlgButtons'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('cssEditDlg').execute()\">" . __('Save') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('cssEditDlg').hide()\">" . __('Cancel') . "</button>";
        print "</div>";
    }
    if ($id == "editArticleNote") {
        $result = db_query($link, "SELECT note FROM ttrss_user_entries WHERE\n\t\t\t\tref_id = '{$param}' AND owner_uid = " . $_SESSION['uid']);
        $note = db_fetch_result($result, 0, "note");
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"{$param}\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"setNote\">";
        print "<table width='100%'><tr><td>";
        print "<textarea dojoType=\"dijit.form.SimpleTextarea\"\n\t\t\t\tstyle='font-size : 12px; width : 100%; height: 100px;'\n\t\t\t\tplaceHolder='body#ttrssMain { font-size : 14px; };'\n\t\t\t\tname='note'>{$note}</textarea>";
        print "</td></tr></table>";
        print "<div class='dlgButtons'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('editNoteDlg').execute()\">" . __('Save') . "</button> ";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\tonclick=\"dijit.byId('editNoteDlg').hide()\">" . __('Cancel') . "</button>";
        print "</div>";
    }
    if ($id == "about") {
        print "<table width='100%'><tr><td align='center'>";
        print "<img src=\"images/logo_big.png\">";
        print "</td>";
        print "<td width='70%'>";
        print "<h1>Tiny Riny RSS</h1>\n\t\t\t\t<strong>Version " . VERSION . "</strong>\n\t\t\t\t<p>Copyright &copy; 2005-" . date('Y') . "\n\t\t\t\t<a target=\"_blank\" class=\"visibleLink\"\n\t\t\t\thref=\"http://fakecake.org/\">Andrew Dolgov</a>\n\t\t\t\tand other contributors.</p>\n\t\t\t\t<p class=\"insensitive\">Licensed under GNU GPL version 2.</p>";
        print "<p class=\"insensitive\">\n\t\t\t\t<a class=\"visibleLink\" target=\"_blank\"\n\t\t\t\t\thref=\"http://tt-rss.org/\">Official site</a> &mdash;\n\t\t\t\t<a href=\"http://tt-rss.org/redmine/wiki/tt-rss/Donate\"\n\t\t\t\ttarget=\"_blank\" class=\"visibleLink\">\n\t\t\t\tSupport the project.</a></p>";
        print "</td></tr>";
        print "</table>";
        print "<div align='center'>";
        print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\ttype=\"submit\">" . __('Close this window') . "</button>";
        print "</div>";
    }
    if ($id == "addInstance") {
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\"  name=\"op\" value=\"pref-instances\">";
        print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\"  name=\"subop\" value=\"add\">";
        print "<div class=\"dlgSec\">" . __("Instance") . "</div>";
        print "<div class=\"dlgSecCont\">";
        /* URL */
        print __("URL:") . " ";
        print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"\n\t\t\t\tplaceHolder=\"" . __("Instance URL") . "\"\n\t\t\t\tregExp='^(http|https)://.*'\n\t\t\t\tstyle=\"font-size : 16px; width: 20em\" name=\"access_url\">";
        print "<hr/>";
        $access_key = sha1(uniqid(rand(), true));
        /* Access key */
        print __("Access key:") . " ";
        print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"\n\t\t\t\tplaceHolder=\"" . __("Access key") . "\" regExp='\\w{40}'\n\t\t\t\tstyle=\"width: 20em\" name=\"access_key\" id=\"instance_add_key\"\n\t\t\t\tvalue=\"{$access_key}\">";
        print "<p class='insensitive'>" . __("Use one access key for both linked instances.");
        print "</div>";
        print "<div class=\"dlgButtons\">\n\t\t\t\t<div style='float : left'>\n\t\t\t\t\t<button dojoType=\"dijit.form.Button\"\n\t\t\t\t\t\tonclick=\"return dijit.byId('instanceAddDlg').regenKey()\">" . __('Generate new key') . "</button>\n\t\t\t\t</div>\n\t\t\t\t<button dojoType=\"dijit.form.Button\"\n\t\t\t\t\tonclick=\"return dijit.byId('instanceAddDlg').execute()\">" . __('Create link') . "</button>\n\t\t\t\t<button dojoType=\"dijit.form.Button\"\n\t\t\t\t\tonclick=\"return dijit.byId('instanceAddDlg').hide()\"\">" . __('Cancel') . "</button></div>";
        return;
    }
    if ($id == "shareArticle") {
        $result = db_query($link, "SELECT uuid, ref_id FROM ttrss_user_entries WHERE int_id = '{$param}'\n\t\t\t\tAND owner_uid = " . $_SESSION['uid']);
        if (db_num_rows($result) == 0) {
            print "Article not found.";
        } else {
            $uuid = db_fetch_result($result, 0, "uuid");
            $ref_id = db_fetch_result($result, 0, "ref_id");
            if (!$uuid) {
                $uuid = db_escape_string(sha1(uniqid(rand(), true)));
                db_query($link, "UPDATE ttrss_user_entries SET uuid = '{$uuid}' WHERE int_id = '{$param}'\n\t\t\t\t\t\tAND owner_uid = " . $_SESSION['uid']);
            }
            print __("You can share this article by the following unique URL:");
            $url_path = get_self_url_prefix();
            $url_path .= "/public.php?op=share&key={$uuid}";
            print "<div class=\"tagCloudContainer\">";
            print "<a id='pub_opml_url' href='{$url_path}' target='_blank'>{$url_path}</a>";
            print "</div>";
            /* if (!label_find_id($link, __('Shared'), $_SESSION["uid"]))
            					label_create($link, __('Shared'), $_SESSION["uid"]);
            
            				label_add_article($link, $ref_id, __('Shared'), $_SESSION['uid']); */
        }
        print "<div align='center'>";
        print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('shareArticleDlg').hide()\">" . __('Close this window') . "</button>";
        print "</div>";
        return;
    }
    print "</dlg>";
}
Exemple #9
0
function make_runtime_info()
{
    $data = array();
    $result = db_query("SELECT MAX(id) AS mid, COUNT(*) AS nf FROM\n\t\t\tttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
    $max_feed_id = db_fetch_result($result, 0, "mid");
    $num_feeds = db_fetch_result($result, 0, "nf");
    $data["max_feed_id"] = (int) $max_feed_id;
    $data["num_feeds"] = (int) $num_feeds;
    $data['last_article_id'] = getLastArticleId();
    $data['cdm_expanded'] = get_pref('CDM_EXPANDED');
    $data['dep_ts'] = calculate_dep_timestamp();
    $data['reload_on_ts_change'] = !defined('_NO_RELOAD_ON_TS_CHANGE');
    if (CHECK_FOR_UPDATES && $_SESSION["last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
        $update_result = @check_for_update();
        $data["update_result"] = $update_result;
        $_SESSION["last_version_check"] = time();
    }
    if (file_exists(LOCK_DIRECTORY . "/update_daemon.lock")) {
        $data['daemon_is_running'] = (int) file_is_locked("update_daemon.lock");
        if (time() - $_SESSION["daemon_stamp_check"] > 30) {
            $stamp = (int) @file_get_contents(LOCK_DIRECTORY . "/update_daemon.stamp");
            if ($stamp) {
                $stamp_delta = time() - $stamp;
                if ($stamp_delta > 1800) {
                    $stamp_check = 0;
                } else {
                    $stamp_check = 1;
                    $_SESSION["daemon_stamp_check"] = time();
                }
                $data['daemon_stamp_ok'] = $stamp_check;
                $stamp_fmt = date("Y.m.d, G:i", $stamp);
                $data['daemon_stamp'] = $stamp_fmt;
            }
        }
    }
    return $data;
}
 function hook_prefs_tab($args)
 {
     if ($args != "prefPrefs") {
         return;
     }
     if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) {
         print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"" . __('Update Tiny Tiny RSS') . "\">";
         if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
             $_SESSION["version_data"] = @check_for_update();
             $_SESSION["pref_last_version_check"] = time();
         }
         if (is_array($_SESSION["version_data"])) {
             $version = $_SESSION["version_data"]["version"];
             $version_id = $_SESSION["version_data"]["version_id"];
             print_notice(T_sprintf("New version of Tiny Tiny RSS is available (%s).", "<b>{$version}</b>"));
             $details = "http://tt-rss.org/redmine/versions/{$version_id}";
             print "<p><button onclick=\"window.open('{$details}')\" dojoType=\"dijit.form.Button\">" . __("See the release notes") . "</button>";
             print " <button dojoType=\"dijit.form.Button\" onclick=\"return updateSelf()\">" . __('Update Tiny Tiny RSS') . "</button></p>";
         } else {
             print_notice(__("Your Tiny Tiny RSS installation is up to date."));
         }
         print "</div>";
         #pane
     }
 }
Exemple #11
0
 function index()
 {
     global $access_level_names;
     $prefs_blacklist = array("HIDE_READ_FEEDS", "FEEDS_SORT_BY_UNREAD", "STRIP_UNSAFE_TAGS");
     $profile_blacklist = array("ALLOW_DUPLICATE_POSTS", "PURGE_OLD_DAYS", "PURGE_UNREAD_ARTICLES", "DIGEST_ENABLE", "DIGEST_CATCHUP", "BLACKLISTED_TAGS", "ENABLE_API_ACCESS", "UPDATE_POST_ON_CHECKSUM_CHANGE", "DEFAULT_UPDATE_INTERVAL", "USER_TIMEZONE", "SORT_HEADLINES_BY_FEED_DATE", "SSL_CERT_SERIAL", "DIGEST_PREFERRED_TIME");
     $_SESSION["prefs_op_result"] = "";
     print "<div dojoType=\"dijit.layout.AccordionContainer\" region=\"center\">";
     print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"" . __('Personal data / Authentication') . "\">";
     print "<form dojoType=\"dijit.form.Form\" id=\"changeUserdataForm\">";
     print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">\n\t\tevt.preventDefault();\n\t\tif (this.validate()) {\n\t\t\tnotify_progress('Saving data...', true);\n\n\t\t\tnew Ajax.Request('backend.php', {\n\t\t\t\tparameters: dojo.objectToQuery(this.getValues()),\n\t\t\t\tonComplete: function(transport) {\n\t\t\t\t\tnotify_callback2(transport);\n\t\t\t} });\n\n\t\t}\n\t\t</script>";
     print "<table width=\"100%\" class=\"prefPrefsList\">";
     print "<h2>" . __("Personal data") . "</h2>";
     $result = db_query($this->link, "SELECT email,full_name,otp_enabled,\n\t\t\taccess_level FROM ttrss_users\n\t\t\tWHERE id = " . $_SESSION["uid"]);
     $email = htmlspecialchars(db_fetch_result($result, 0, "email"));
     $full_name = htmlspecialchars(db_fetch_result($result, 0, "full_name"));
     $otp_enabled = sql_bool_to_bool(db_fetch_result($result, 0, "otp_enabled"));
     print "<tr><td width=\"40%\">" . __('Full name') . "</td>";
     print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" name=\"full_name\" required=\"1\"\n\t\t\tvalue=\"{$full_name}\"></td></tr>";
     print "<tr><td width=\"40%\">" . __('E-mail') . "</td>";
     print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" name=\"email\" required=\"1\" value=\"{$email}\"></td></tr>";
     if (!SINGLE_USER_MODE && !$_SESSION["hide_hello"]) {
         $access_level = db_fetch_result($result, 0, "access_level");
         print "<tr><td width=\"40%\">" . __('Access level') . "</td>";
         print "<td>" . $access_level_names[$access_level] . "</td></tr>";
     }
     print "</table>";
     print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-prefs\">";
     print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"changeemail\">";
     print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">" . __("Save data") . "</button>";
     print "</form>";
     if ($_SESSION["auth_module"]) {
         $module_class = "auth_" . $_SESSION["auth_module"];
         $authenticator = new $module_class($this->link);
     } else {
         $authenticator = false;
     }
     if ($authenticator && method_exists($authenticator, "change_password")) {
         print "<h2>" . __("Password") . "</h2>";
         $result = db_query($this->link, "SELECT id FROM ttrss_users\n\t\t\t\tWHERE id = " . $_SESSION["uid"] . " AND pwd_hash\n\t\t\t\t= 'SHA1:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'");
         if (db_num_rows($result) != 0) {
             print format_warning(__("Your password is at default value, please change it."), "default_pass_warning");
         }
         print "<form dojoType=\"dijit.form.Form\">";
         print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">\n\t\t\tevt.preventDefault();\n\t\t\tif (this.validate()) {\n\t\t\t\tnotify_progress('Changing password...', true);\n\n\t\t\t\tnew Ajax.Request('backend.php', {\n\t\t\t\t\tparameters: dojo.objectToQuery(this.getValues()),\n\t\t\t\t\tonComplete: function(transport) {\n\t\t\t\t\t\tnotify('');\n\t\t\t\t\t\tif (transport.responseText.indexOf('ERROR: ') == 0) {\n\t\t\t\t\t\t\tnotify_error(transport.responseText.replace('ERROR: ', ''));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotify_info(transport.responseText);\n\t\t\t\t\t\t\tvar warn = \$('default_pass_warning');\n\t\t\t\t\t\t\tif (warn) Element.hide(warn);\n\t\t\t\t\t\t}\n\t\t\t\t}});\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t\t</script>";
         if ($otp_enabled) {
             print_notice("Changing your current password will disable OTP.");
         }
         print "<table width=\"100%\" class=\"prefPrefsList\">";
         print "<tr><td width=\"40%\">" . __("Old password") . "</td>";
         print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" type=\"password\" required=\"1\" name=\"old_password\"></td></tr>";
         print "<tr><td width=\"40%\">" . __("New password") . "</td>";
         print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" type=\"password\" required=\"1\"\n\t\t\t\tname=\"new_password\"></td></tr>";
         print "<tr><td width=\"40%\">" . __("Confirm password") . "</td>";
         print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" type=\"password\" required=\"1\" name=\"confirm_password\"></td></tr>";
         print "</table>";
         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-prefs\">";
         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"changepassword\">";
         print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">" . __("Change password") . "</button>";
         print "</form>";
         if ($_SESSION["auth_module"] == "internal") {
             print "<h2>" . __("One time passwords / Authenticator") . "</h2>";
             if ($otp_enabled) {
                 print_notice("One time passwords are currently enabled. Enter your current password below to disable.");
                 print "<form dojoType=\"dijit.form.Form\">";
                 print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">\n\t\t\t\tevt.preventDefault();\n\t\t\t\tif (this.validate()) {\n\t\t\t\t\tnotify_progress('Disabling OTP', true);\n\n\t\t\t\t\tnew Ajax.Request('backend.php', {\n\t\t\t\t\t\tparameters: dojo.objectToQuery(this.getValues()),\n\t\t\t\t\t\tonComplete: function(transport) {\n\t\t\t\t\t\t\tnotify('');\n\t\t\t\t\t\t\tif (transport.responseText.indexOf('ERROR: ') == 0) {\n\t\t\t\t\t\t\t\tnotify_error(transport.responseText.replace('ERROR: ', ''));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}});\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t\t</script>";
                 print "<table width=\"100%\" class=\"prefPrefsList\">";
                 print "<tr><td width=\"40%\">" . __("Enter your password") . "</td>";
                 print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" type=\"password\" required=\"1\"\n\t\t\t\t\tname=\"password\"></td></tr>";
                 print "</table>";
                 print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-prefs\">";
                 print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"otpdisable\">";
                 print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">" . __("Disable OTP") . "</button>";
                 print "</form>";
             } else {
                 print "<p>" . __("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP.") . "</p>";
                 print "<p>" . __("Scan the following code by the Authenticator application:") . "</p>";
                 $csrf_token = $_SESSION["csrf_token"];
                 print "<img src=\"backend.php?op=pref-prefs&method=otpqrcode&csrf_token={$csrf_token}\">";
                 print "<form dojoType=\"dijit.form.Form\" id=\"changeOtpForm\">";
                 print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-prefs\">";
                 print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"otpenable\">";
                 print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tif (this.validate()) {\n\t\t\t\t\t\tnotify_progress('Saving data...', true);\n\n\t\t\t\t\t\tnew Ajax.Request('backend.php', {\n\t\t\t\t\t\t\tparameters: dojo.objectToQuery(this.getValues()),\n\t\t\t\t\t\t\tonComplete: function(transport) {\n\t\t\t\t\t\t\t\tnotify('');\n\t\t\t\t\t\t\t\tif (transport.responseText.indexOf('ERROR: ') == 0) {\n\t\t\t\t\t\t\t\t\tnotify_error(transport.responseText.replace('ERROR: ', ''));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} });\n\n\t\t\t\t\t}\n\t\t\t\t\t</script>";
                 print "<table width=\"100%\" class=\"prefPrefsList\">";
                 print "<tr><td width=\"40%\">" . __("Enter your password") . "</td>";
                 print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" type=\"password\" required=\"1\"\n\t\t\t\t\t\tname=\"password\"></td></tr>";
                 print "<tr><td colspan=\"2\">";
                 print "<input dojoType=\"dijit.form.CheckBox\" required=\"1\"\n\t\t\t\t\t\ttype=\"checkbox\" id=\"enable_otp\" name=\"enable_otp\"/> ";
                 print "<label for=\"enable_otp\">" . __("I have scanned the code and would like to enable OTP") . "</label>";
                 print "</td></tr><tr><td colspan=\"2\">";
                 print "</td></tr>";
                 print "</table>";
                 print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">" . __("Enable OTP") . "</button>";
                 print "</form>";
             }
         }
     }
     print "</div>";
     #pane
     print "<div dojoType=\"dijit.layout.AccordionPane\" selected=\"true\" title=\"" . __('Preferences') . "\">";
     print "<form dojoType=\"dijit.form.Form\" id=\"changeSettingsForm\">";
     print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">\n\t\tevt.preventDefault();\n\t\tif (this.validate()) {\n\t\t\tconsole.log(dojo.objectToQuery(this.getValues()));\n\n\t\t\tnew Ajax.Request('backend.php', {\n\t\t\t\tparameters: dojo.objectToQuery(this.getValues()),\n\t\t\t\tonComplete: function(transport) {\n\t\t\t\t\tvar msg = transport.responseText;\n\t\t\t\t\tif (msg.match('PREFS_THEME_CHANGED')) {\n\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnotify_info(msg);\n\t\t\t\t\t}\n\t\t\t} });\n\t\t}\n\t\t</script>";
     print '<div dojoType="dijit.layout.BorderContainer" gutters="false">';
     print '<div dojoType="dijit.layout.ContentPane" region="center" style="overflow-y : auto">';
     if ($_SESSION["profile"]) {
         print_notice("Some preferences are only available in default profile.");
     }
     if ($_SESSION["profile"]) {
         initialize_user_prefs($this->link, $_SESSION["uid"], $_SESSION["profile"]);
         $profile_qpart = "profile = '" . $_SESSION["profile"] . "'";
     } else {
         initialize_user_prefs($this->link, $_SESSION["uid"]);
         $profile_qpart = "profile IS NULL";
     }
     if ($_SESSION["prefs_show_advanced"]) {
         $access_query = "true";
     } else {
         $access_query = "(access_level = 0 AND section_id != 3)";
     }
     $result = db_query($this->link, "SELECT DISTINCT\n\t\t\tttrss_user_prefs.pref_name,short_desc,help_text,value,type_name,\n\t\t\tttrss_prefs_sections.order_id,\n\t\t\tsection_name,def_value,section_id\n\t\t\tFROM ttrss_prefs,ttrss_prefs_types,ttrss_prefs_sections,ttrss_user_prefs\n\t\t\tWHERE type_id = ttrss_prefs_types.id AND\n\t\t\t\t{$profile_qpart} AND\n\t\t\t\tsection_id = ttrss_prefs_sections.id AND\n\t\t\t\tttrss_user_prefs.pref_name = ttrss_prefs.pref_name AND\n\t\t\t\t{$access_query} AND\n\t\t\t\tshort_desc != '' AND\n\t\t\t\towner_uid = " . $_SESSION["uid"] . "\n\t\t\tORDER BY ttrss_prefs_sections.order_id,short_desc");
     $lnum = 0;
     $active_section = "";
     while ($line = db_fetch_assoc($result)) {
         if (in_array($line["pref_name"], $prefs_blacklist)) {
             continue;
         }
         if ($_SESSION["profile"] && in_array($line["pref_name"], $profile_blacklist)) {
             continue;
         }
         if ($active_section != $line["section_name"]) {
             if ($active_section != "") {
                 print "</table>";
             }
             print "<table width=\"100%\" class=\"prefPrefsList\">";
             $active_section = $line["section_name"];
             print "<tr><td colspan=\"3\"><h3>" . __($active_section) . "</h3></td></tr>";
             if ($line["section_id"] == 2) {
                 print "<tr><td width=\"40%\">" . __("Select theme") . "</td>";
                 $user_theme = get_pref($this->link, "_THEME_ID");
                 $themes = get_all_themes();
                 print "<td><select name=\"_THEME_ID\" dojoType=\"dijit.form.Select\">";
                 print "<option value='Default'>" . __('Default') . "</option>";
                 print "<option value='----------------' disabled=\"1\">--------</option>";
                 foreach ($themes as $t) {
                     $base = $t['base'];
                     $name = $t['name'];
                     if ($base == $user_theme) {
                         $selected = "selected=\"1\"";
                     } else {
                         $selected = "";
                     }
                     print "<option {$selected} value='{$base}'>{$name}</option>";
                 }
                 print "</select></td></tr>";
             }
             $lnum = 0;
         }
         print "<tr>";
         $type_name = $line["type_name"];
         $pref_name = $line["pref_name"];
         $value = $line["value"];
         $def_value = $line["def_value"];
         $help_text = $line["help_text"];
         print "<td width=\"40%\" class=\"prefName\" id=\"{$pref_name}\">" . __($line["short_desc"]);
         if ($help_text) {
             print "<div class=\"prefHelp\">" . __($help_text) . "</div>";
         }
         print "</td>";
         print "<td class=\"prefValue\">";
         if ($pref_name == "USER_TIMEZONE") {
             $timezones = explode("\n", file_get_contents("lib/timezones.txt"));
             print_select($pref_name, $value, $timezones, 'dojoType="dijit.form.FilteringSelect"');
         } else {
             if ($pref_name == "USER_STYLESHEET") {
                 print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\t\tonclick=\"customizeCSS()\">" . __('Customize') . "</button>";
             } else {
                 if ($pref_name == "DEFAULT_ARTICLE_LIMIT") {
                     $limits = array(15, 30, 45, 60);
                     print_select($pref_name, $value, $limits, 'dojoType="dijit.form.Select"');
                 } else {
                     if ($pref_name == "DEFAULT_UPDATE_INTERVAL") {
                         global $update_intervals_nodefault;
                         print_select_hash($pref_name, $value, $update_intervals_nodefault, 'dojoType="dijit.form.Select"');
                     } else {
                         if ($type_name == "bool") {
                             if ($value == "true") {
                                 $value = __("Yes");
                             } else {
                                 $value = __("No");
                             }
                             if ($pref_name == "PURGE_UNREAD_ARTICLES" && FORCE_ARTICLE_PURGE != 0) {
                                 $disabled = "disabled=\"1\"";
                                 $value = __("Yes");
                             } else {
                                 $disabled = "";
                             }
                             print_radio($pref_name, $value, __("Yes"), array(__("Yes"), __("No")), $disabled);
                         } else {
                             if (array_search($pref_name, array('FRESH_ARTICLE_MAX_AGE', 'DEFAULT_ARTICLE_LIMIT', 'PURGE_OLD_DAYS', 'LONG_DATE_FORMAT', 'SHORT_DATE_FORMAT')) !== false) {
                                 $regexp = $type_name == 'integer' ? 'regexp="^\\d*$"' : '';
                                 if ($pref_name == "PURGE_OLD_DAYS" && FORCE_ARTICLE_PURGE != 0) {
                                     $disabled = "disabled=\"1\"";
                                     $value = FORCE_ARTICLE_PURGE;
                                 } else {
                                     $disabled = "";
                                 }
                                 print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\trequired=\"1\" {$regexp} {$disabled}\n\t\t\t\t\tname=\"{$pref_name}\" value=\"{$value}\">";
                             } else {
                                 if ($pref_name == "SSL_CERT_SERIAL") {
                                     print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\tid=\"SSL_CERT_SERIAL\" readonly=\"1\"\n\t\t\t\t\tname=\"{$pref_name}\" value=\"{$value}\">";
                                     $cert_serial = htmlspecialchars(get_ssl_certificate_id());
                                     $has_serial = $cert_serial ? "false" : "true";
                                     print " <button dojoType=\"dijit.form.Button\" disabled=\"{$has_serial}\"\n\t\t\t\t\tonclick=\"insertSSLserial('{$cert_serial}')\">" . __('Register') . "</button>";
                                     print " <button dojoType=\"dijit.form.Button\"\n\t\t\t\t\tonclick=\"insertSSLserial('')\">" . __('Clear') . "</button>";
                                 } else {
                                     if ($pref_name == 'DIGEST_PREFERRED_TIME') {
                                         print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\tid=\"{$pref_name}\" regexp=\"[012]?\\d:\\d\\d\" placeHolder=\"12:00\"\n\t\t\t\t\tname=\"{$pref_name}\" value=\"{$value}\"><div class=\"insensitive\">" . T_sprintf("Current server time: %s (UTC)", date("H:i")) . "</div>";
                                     } else {
                                         $regexp = $type_name == 'integer' ? 'regexp="^\\d*$"' : '';
                                         print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\t{$regexp}\n\t\t\t\t\tname=\"{$pref_name}\" value=\"{$value}\">";
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
         print "</td>";
         print "</tr>";
         $lnum++;
     }
     print "</table>";
     print '</div>';
     # inside pane
     print '<div dojoType="dijit.layout.ContentPane" region="bottom">';
     print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-prefs\">";
     print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"saveconfig\">";
     print "<button dojoType=\"dijit.form.Button\" type=\"submit\">" . __('Save configuration') . "</button> ";
     print "<button dojoType=\"dijit.form.Button\" onclick=\"return editProfiles()\">" . __('Manage profiles') . "</button> ";
     print "<button dojoType=\"dijit.form.Button\" onclick=\"return validatePrefsReset()\">" . __('Reset to defaults') . "</button>";
     print "&nbsp;";
     $checked = $_SESSION["prefs_show_advanced"] ? "checked='1'" : "";
     print "<input onclick='toggleAdvancedPrefs()'\n\t\t\t\tid='prefs_show_advanced'\n\t\t\t\tdojoType=\"dijit.form.CheckBox\"\n\t\t\t\t{$checked}\n\t\t\t\ttype=\"checkbox\"></input>\n\t\t\t\t<label for='prefs_show_advanced'>" . __("Show additional preferences") . "</label>";
     print '</div>';
     # inner pane
     print '</div>';
     # border container
     print "</form>";
     print "</div>";
     #pane
     if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) {
         print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"" . __('Update Tiny Tiny RSS') . "\">";
         if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
             $_SESSION["version_data"] = @check_for_update($this->link);
             $_SESSION["pref_last_version_check"] = time();
         }
         if (is_array($_SESSION["version_data"])) {
             $version = $_SESSION["version_data"]["version"];
             print_notice(T_sprintf("New version of Tiny Tiny RSS is available (%s).", "<b>{$version}</b>"));
             print "<p><button dojoType=\"dijit.form.Button\" onclick=\"return updateSelf()\">" . __('Update Tiny Tiny RSS') . "</button></p>";
         } else {
             print_notice(__("Your Tiny Tiny RSS installation is up to date."));
         }
         print "</div>";
         #pane
     }
     print "</div>";
     #container
 }