function edit() { $filter_id = db_escape_string($_REQUEST["id"]); $result = db_query($this->link, "SELECT * FROM ttrss_filters WHERE id = '{$filter_id}' AND owner_uid = " . $_SESSION["uid"]); $reg_exp = htmlspecialchars(db_fetch_result($result, 0, "reg_exp")); $filter_type = db_fetch_result($result, 0, "filter_type"); $feed_id = db_fetch_result($result, 0, "feed_id"); $cat_id = db_fetch_result($result, 0, "cat_id"); $action_id = db_fetch_result($result, 0, "action_id"); $action_param = db_fetch_result($result, 0, "action_param"); $filter_param = db_fetch_result($result, 0, "filter_param"); $enabled = sql_bool_to_bool(db_fetch_result($result, 0, "enabled")); $inverse = sql_bool_to_bool(db_fetch_result($result, 0, "inverse")); $cat_filter = sql_bool_to_bool(db_fetch_result($result, 0, "cat_filter")); print "<form id=\"filter_edit_form\" onsubmit='return false'>"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-filters\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"{$filter_id}\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"editSave\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"csrf_token\" value=\"" . $_SESSION['csrf_token'] . "\">"; $result = db_query($this->link, "SELECT id,description\n\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\">"; if ($filter_type != 5) { $date_ops_invisible = 'style="display : none"'; } print "<span id=\"filterDlg_dateModBox\" {$date_ops_invisible}>"; print __("Date") . " "; $filter_params = array("before" => __("before"), "after" => __("after")); print_select_hash("filter_date_modifier", $filter_param, $filter_params, 'dojoType="dijit.form.Select"'); print " </span>"; print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t required=\"1\"\n\t\t\t\t name=\"reg_exp\" style=\"font-size : 16px;\" value=\"{$reg_exp}\">"; print "<span id=\"filterDlg_dateChkBox\" {$date_ops_invisible}>"; print " <button dojoType=\"dijit.form.Button\" onclick=\"return filterDlgCheckDate()\">" . __('Check it') . "</button>"; print "</span>"; print "<hr/> " . __("on field") . " "; print_select_hash("filter_type", $filter_type, $filter_types, 'onchange="filterDlgCheckType(this)" dojoType="dijit.form.Select"'); print "<hr/>"; print __("in") . " "; $hidden = $cat_filter ? "style='display:none'" : ""; print "<span id='filterDlg_feeds' {$hidden}>"; print_feed_select($this->link, "feed_id", $feed_id, 'dojoType="dijit.form.FilteringSelect"'); print "</span>"; $hidden = $cat_filter ? "" : "style='display:none'"; print "<span id='filterDlg_cats' {$hidden}>"; print_feed_cat_select($this->link, "cat_id", $cat_id, 'dojoType="dijit.form.FilteringSelect"'); print "</span>"; 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\tonchange=\"filterDlgCheckAction(this)\">"; $result = db_query($this->link, "SELECT id,description FROM ttrss_filter_actions\n\t\t\tORDER BY name"); while ($line = db_fetch_assoc($result)) { $is_sel = $line["id"] == $action_id ? "selected=\"1\"" : ""; printf("<option value='%d' {$is_sel}>%s</option>", $line["id"], __($line["description"])); } print "</select>"; $param_hidden = $action_id == 4 || $action_id == 6 || $action_id == 7 ? "" : "display : none"; print "<span id=\"filterDlg_paramBox\" style=\"{$param_hidden}\">"; print " " . __("with parameters:") . " "; $param_int_hidden = $action_id != 7 ? "" : "display : none"; print "<input style=\"{$param_int_hidden}\"\n\t\t\t\tdojoType=\"dijit.form.TextBox\" id=\"filterDlg_actionParam\"\n\t\t\t\tname=\"action_param\" value=\"{$action_param}\">"; $param_int_hidden = $action_id == 7 ? "" : "display : none"; print_label_select($this->link, "action_param_label", $action_param, "style=\"{$param_int_hidden}\"" . 'id="filterDlg_actionParamLabel" dojoType="dijit.form.Select"'); print "</span>"; print " "; // tiny layout hack print "</div>"; print "<div class=\"dlgSec\">" . __("Options") . "</div>"; print "<div class=\"dlgSecCont\">"; print "<div style=\"line-height : 100%\">"; if ($enabled) { $checked = "checked=\"1\""; } else { $checked = ""; } print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"enabled\" id=\"enabled\" {$checked}>\n\t\t\t\t<label for=\"enabled\">" . __('Enabled') . "</label><hr/>"; if ($inverse) { $checked = "checked=\"1\""; } else { $checked = ""; } print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\" {$checked}>\n\t\t\t<label for=\"inverse\">" . __('Inverse match') . "</label><hr/>"; if ($cat_filter) { $checked = "checked=\"1\""; } else { $checked = ""; } print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"cat_filter\" id=\"cat_filter\" onchange=\"filterDlgCheckCat(this)\" {$checked}>\n\t\t\t\t<label for=\"cat_filter\">" . __('Apply to category') . "</label><hr/>"; print "</div>"; print "</div>"; print "<div class=\"dlgButtons\">"; print "<div style=\"float : left\">"; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').removeFilter()\">" . __('Remove') . "</button>"; print "</div>"; 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()\">" . __('Save') . "</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">" . __('Cancel') . "</button>"; print "</div>"; }
function add() { $caption = db_escape_string($_REQUEST["caption"]); $output = db_escape_string($_REQUEST["output"]); if ($caption) { if (label_create($this->link, $caption)) { if (!$output) { print T_sprintf("Created label <b>%s</b>", htmlspecialchars($caption)); } } if ($output == "select") { header("Content-Type: text/xml"); print "<rpc-reply><payload>"; print_label_select($this->link, "select_label", $caption, ""); print "</payload></rpc-reply>"; } } return; }
function newaction() { $action = json_decode($_REQUEST["action"], true); if ($action) { $action_param = db_escape_string($action["action_param"]); $action_id = (int) $action["action_id"]; } else { $action_param = ""; $action_id = 0; } print "<form name='filter_new_action_form' id='filter_new_action_form'>"; print "<div class=\"dlgSec\">" . __("Perform Action") . "</div>"; print "<div class=\"dlgSecCont\">"; print "<select name=\"action_id\" dojoType=\"dijit.form.Select\"\n\t\t\tonchange=\"filterDlgCheckAction(this)\">"; $result = db_query($this->link, "SELECT id,description FROM ttrss_filter_actions\n\t\t\tORDER BY name"); while ($line = db_fetch_assoc($result)) { $is_selected = $line["id"] == $action_id ? "selected='1'" : ""; printf("<option {$is_selected} value='%d'>%s</option>", $line["id"], __($line["description"])); } print "</select>"; $param_box_hidden = $action_id == 7 || $action_id == 4 || $action_id == 6 ? "" : "display : none"; $param_hidden = $action_id == 4 || $action_id == 6 ? "" : "display : none"; $label_param_hidden = $action_id == 7 ? "" : "display : none"; print "<span id=\"filterDlg_paramBox\" style=\"{$param_box_hidden}\">"; print " " . __("with parameters:") . " "; print "<input dojoType=\"dijit.form.TextBox\"\n\t\t\tid=\"filterDlg_actionParam\" style=\"{$param_hidden}\"\n\t\t\tname=\"action_param\" value=\"{$action_param}\">"; print_label_select($this->link, "action_param_label", $action_param, "id=\"filterDlg_actionParamLabel\" style=\"{$label_param_hidden}\"\n\t\t\tdojoType=\"dijit.form.Select\""); print "</span>"; print " "; // tiny layout hack print "</div>"; print "<div class=\"dlgButtons\">"; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterNewActionDlg').execute()\">" . ($action ? __("Save action") : __('Add action')) . "</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterNewActionDlg').hide()\">" . __('Cancel') . "</button>"; print "</div>"; print "</form>"; }
function newaction() { $action = json_decode($_REQUEST["action"], true); if ($action) { $action_param = $this->dbh->escape_string($action["action_param"]); $action_id = (int) $action["action_id"]; } else { $action_param = ""; $action_id = 0; } print "<form name='filter_new_action_form' id='filter_new_action_form'>"; print "<div class=\"dlgSec\">" . __("Perform Action") . "</div>"; print "<div class=\"dlgSecCont\">"; print "<select name=\"action_id\" dojoType=\"dijit.form.Select\"\n\t\t\tonchange=\"filterDlgCheckAction(this)\">"; $result = $this->dbh->query("SELECT id,description FROM ttrss_filter_actions\n\t\t\tORDER BY name"); while ($line = $this->dbh->fetch_assoc($result)) { $is_selected = $line["id"] == $action_id ? "selected='1'" : ""; printf("<option {$is_selected} value='%d'>%s</option>", $line["id"], __($line["description"])); } print "</select>"; $param_box_hidden = $action_id == 7 || $action_id == 4 || $action_id == 6 || $action_id == 9 ? "" : "display : none"; $param_hidden = $action_id == 4 || $action_id == 6 ? "" : "display : none"; $label_param_hidden = $action_id == 7 ? "" : "display : none"; $plugin_param_hidden = $action_id == 9 ? "" : "display : none"; print "<span id=\"filterDlg_paramBox\" style=\"{$param_box_hidden}\">"; print " "; //print " " . __("with parameters:") . " "; print "<input dojoType=\"dijit.form.TextBox\"\n\t\t\tid=\"filterDlg_actionParam\" style=\"{$param_hidden}\"\n\t\t\tname=\"action_param\" value=\"{$action_param}\">"; print_label_select("action_param_label", $action_param, "id=\"filterDlg_actionParamLabel\" style=\"{$label_param_hidden}\"\n\t\t\tdojoType=\"dijit.form.Select\""); $filter_actions = PluginHost::getInstance()->get_filter_actions(); $filter_action_hash = array(); foreach ($filter_actions as $fclass => $factions) { foreach ($factions as $faction) { $filter_action_hash[$fclass . ":" . $faction["action"]] = $fclass . ": " . $faction["description"]; } } if (count($filter_action_hash) == 0) { $filter_plugin_disabled = "disabled"; $filter_action_hash["no-data"] = __("No actions available"); } else { $filter_plugin_disabled = ""; } print_select_hash("filterDlg_actionParamPlugin", $action_param, $filter_action_hash, "style=\"{$plugin_param_hidden}\" dojoType=\"dijit.form.Select\" {$filter_plugin_disabled}", "action_param_plugin"); print "</span>"; print " "; // tiny layout hack print "</div>"; print "<div class=\"dlgButtons\">"; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterNewActionDlg').execute()\">" . ($action ? __("Save action") : __('Add action')) . "</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterNewActionDlg').hide()\">" . __('Cancel') . "</button>"; print "</div>"; print "</form>"; }
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 " </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 " <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 " "; // 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>"; }
function module_pref_labels($link) { $subop = $_REQUEST["subop"]; if ($subop == "edit") { $label_id = db_escape_string($_REQUEST['id']); $result = db_query($link, "SELECT * FROM ttrss_labels2 WHERE\n\t\t\t\tid = '{$label_id}' AND owner_uid = " . $_SESSION["uid"]); $line = db_fetch_assoc($result); # print "<form id=\"label_edit_form\" name=\"label_edit_form\" # onsubmit=\"return false;\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"{$label_id}\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-labels\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"save\">"; print "<div class=\"dlgSec\">" . __("Caption") . "</div>"; print "<div class=\"dlgSecCont\">"; $fg_color = $line['fg_color']; $bg_color = $line['bg_color']; print "<span class=\"labelColorIndicator\" id=\"label-editor-indicator\" style='color : {$fg_color}; background-color : {$bg_color}; margin-bottom : 4px; margin-right : 4px'>α</span>"; print "<input style=\"font-size : 16px\" name=\"caption\" \n\t\t\t\tdojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\trequired=\"true\"\n\t\t\t\tvalue=\"" . htmlspecialchars($line['caption']) . "\">"; print "</div>"; print "<div class=\"dlgSec\">" . __("Colors") . "</div>"; print "<div class=\"dlgSecCont\">"; print "<table cellspacing=\"0\">"; print "<tr><td>" . __("Foreground:") . "</td><td>" . __("Background:") . "</td></tr>"; print "<tr><td style='padding-right : 10px'>"; print "<input dojoType=\"dijit.form.TextBox\" \n\t\t\t\tstyle=\"display : none\" id=\"labelEdit_fgColor\"\n\t\t\t\tname=\"fg_color\" value=\"{$fg_color}\">"; print "<input dojoType=\"dijit.form.TextBox\" \n\t\t\t\tstyle=\"display : none\" id=\"labelEdit_bgColor\"\n\t\t\t\tname=\"bg_color\" value=\"{$bg_color}\">"; print "<div dojoType=\"dijit.ColorPalette\">\n\t\t\t\t<script type=\"dojo/method\" event=\"onChange\" args=\"fg_color\">\n\t\t\t\t\tdijit.byId(\"labelEdit_fgColor\").attr('value', fg_color);\n\t\t\t\t\t\$('label-editor-indicator').setStyle({color: fg_color});\n\t\t\t\t</script>\n\t\t\t</div>"; print "</div>"; print "</td><td>"; print "<div dojoType=\"dijit.ColorPalette\">\n\t\t\t\t<script type=\"dojo/method\" event=\"onChange\" args=\"bg_color\">\n\t\t\t\t\tdijit.byId(\"labelEdit_bgColor\").attr('value', bg_color);\n\t\t\t\t\t\$('label-editor-indicator').setStyle({backgroundColor: bg_color});\n\t\t\t\t</script>\n\t\t\t</div>"; print "</div>"; print "</td></tr></table>"; print "</div>"; # print "</form>"; print "<div class=\"dlgButtons\">"; print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('labelEditDlg').execute()\">" . __('Save') . "</button>"; print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('labelEditDlg').hide()\">" . __('Cancel') . "</button>"; print "</div>"; return; } if ($subop == "getlabeltree") { $root = array(); $root['id'] = 'root'; $root['name'] = __('Labels'); $root['items'] = array(); $result = db_query($link, "SELECT *\n\t\t\t\tFROM ttrss_labels2\n\t\t\t\tWHERE owner_uid = " . $_SESSION["uid"] . "\n\t\t\t\tORDER BY caption"); while ($line = db_fetch_assoc($result)) { $label = array(); $label['id'] = 'LABEL:' . $line['id']; $label['bare_id'] = $line['id']; $label['name'] = $line['caption']; $label['fg_color'] = $line['fg_color']; $label['bg_color'] = $line['bg_color']; $label['type'] = 'label'; $label['checkbox'] = false; array_push($root['items'], $label); } $fl = array(); $fl['identifier'] = 'id'; $fl['label'] = 'name'; $fl['items'] = array($root); print json_encode($fl); return; } if ($subop == "color-set") { $kind = db_escape_string($_REQUEST["kind"]); $ids = split(',', db_escape_string($_REQUEST["ids"])); $color = db_escape_string($_REQUEST["color"]); $fg = db_escape_string($_REQUEST["fg"]); $bg = db_escape_string($_REQUEST["bg"]); foreach ($ids as $id) { if ($kind == "fg" || $kind == "bg") { db_query($link, "UPDATE ttrss_labels2 SET\n\t\t\t\t\t\t{$kind}_color = '{$color}' WHERE id = '{$id}'\n\t\t\t\t\t\tAND owner_uid = " . $_SESSION["uid"]); } else { db_query($link, "UPDATE ttrss_labels2 SET\n\t\t\t\t\t\tfg_color = '{$fg}', bg_color = '{$bg}' WHERE id = '{$id}'\n\t\t\t\t\t\tAND owner_uid = " . $_SESSION["uid"]); } $caption = db_escape_string(label_find_caption($link, $id, $_SESSION["uid"])); /* Remove cached data */ db_query($link, "UPDATE ttrss_user_entries SET label_cache = ''\n\t\t\t\t\tWHERE label_cache LIKE '%{$caption}%' AND owner_uid = " . $_SESSION["uid"]); } return; } if ($subop == "color-reset") { $ids = split(',', db_escape_string($_REQUEST["ids"])); foreach ($ids as $id) { db_query($link, "UPDATE ttrss_labels2 SET\n\t\t\t\t\tfg_color = '', bg_color = '' WHERE id = '{$id}'\n\t\t\t\t\tAND owner_uid = " . $_SESSION["uid"]); $caption = db_escape_string(label_find_caption($link, $id, $_SESSION["uid"])); /* Remove cached data */ db_query($link, "UPDATE ttrss_user_entries SET label_cache = ''\n\t\t\t\t\tWHERE label_cache LIKE '%{$caption}%' AND owner_uid = " . $_SESSION["uid"]); } } if ($subop == "save") { $id = db_escape_string($_REQUEST["id"]); $caption = db_escape_string(trim($_REQUEST["caption"])); db_query($link, "BEGIN"); $result = db_query($link, "SELECT caption FROM ttrss_labels2\n\t\t\t\tWHERE id = '{$id}' AND owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) != 0) { $old_caption = db_fetch_result($result, 0, "caption"); $result = db_query($link, "SELECT id FROM ttrss_labels2\n\t\t\t\t\tWHERE caption = '{$caption}' AND owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) == 0) { if ($caption) { $result = db_query($link, "UPDATE ttrss_labels2 SET\n\t\t\t\t\t\t\tcaption = '{$caption}' WHERE id = '{$id}' AND\n\t\t\t\t\t\t\towner_uid = " . $_SESSION["uid"]); /* Update filters that reference label being renamed */ $old_caption = db_escape_string($old_caption); db_query($link, "UPDATE ttrss_filters SET\n\t\t\t\t\t\t\taction_param = '{$caption}' WHERE action_param = '{$old_caption}'\n\t\t\t\t\t\t\tAND action_id = 7\n\t\t\t\t\t\t\tAND owner_uid = " . $_SESSION["uid"]); print $_REQUEST["value"]; } else { print $old_caption; } } else { print $old_caption; } } db_query($link, "COMMIT"); return; } if ($subop == "remove") { $ids = split(",", db_escape_string($_REQUEST["ids"])); foreach ($ids as $id) { label_remove($link, $id, $_SESSION["uid"]); } } if ($subop == "add") { $caption = db_escape_string($_REQUEST["caption"]); $output = db_escape_string($_REQUEST["output"]); if ($caption) { if (label_create($link, $caption)) { if (!$output) { print T_sprintf("Created label <b>%s</b>", htmlspecialchars($caption)); } } if ($output == "select") { header("Content-Type: text/xml"); print "<rpc-reply><payload>"; print_label_select($link, "select_label", $caption, ""); print "</payload></rpc-reply>"; } } return; } $sort = db_escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "caption"; } $label_search = db_escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_label_search"] = $label_search; } else { $label_search = $_SESSION["prefs_label_search"]; } print "<div id=\"pref-label-wrap\" dojoType=\"dijit.layout.BorderContainer\" gutters=\"false\">"; print "<div id=\"pref-label-header\" dojoType=\"dijit.layout.ContentPane\" region=\"top\">"; print "<div id=\"pref-label-toolbar\" dojoType=\"dijit.Toolbar\">"; print "<div dojoType=\"dijit.form.DropDownButton\">" . "<span>" . __('Select') . "</span>"; print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">"; print "<div onclick=\"dijit.byId('labelTree').model.setAllChecked(true)\" \n\t\t\tdojoType=\"dijit.MenuItem\">" . __('All') . "</div>"; print "<div onclick=\"dijit.byId('labelTree').model.setAllChecked(false)\" \n\t\t\tdojoType=\"dijit.MenuItem\">" . __('None') . "</div>"; print "</div></div>"; print "<button dojoType=\"dijit.form.Button\" onclick=\"return addLabel()\">" . __('Create label') . "</button dojoType=\"dijit.form.Button\"> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"removeSelectedLabels()\">" . __('Remove') . "</button dojoType=\"dijit.form.Button\"> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"labelColorReset()\">" . __('Clear colors') . "</button dojoType=\"dijit.form.Button\">"; print "</div>"; #toolbar print "</div>"; #pane print "<div id=\"pref-label-content\" dojoType=\"dijit.layout.ContentPane\" region=\"center\">"; print "<div id=\"labellistLoading\">\n\t\t<img src='images/indicator_tiny.gif'>" . __("Loading, please wait...") . "</div>"; print "<div dojoType=\"dojo.data.ItemFileWriteStore\" jsId=\"labelStore\" \n\t\t\turl=\"backend.php?op=pref-labels&subop=getlabeltree\">\n\t\t</div>\n\t\t<div dojoType=\"lib.CheckBoxStoreModel\" jsId=\"labelModel\" store=\"labelStore\"\n\t\tquery=\"{id:'root'}\" rootId=\"root\"\n\t\t\tchildrenAttrs=\"items\" checkboxStrict=\"false\" checkboxAll=\"false\">\n\t\t</div>\n\t\t<div dojoType=\"fox.PrefLabelTree\" id=\"labelTree\" \n\t\t\tmodel=\"labelModel\" openOnClick=\"true\">\n\t\t<script type=\"dojo/method\" event=\"onLoad\" args=\"item\">\n\t\t\tElement.hide(\"labellistLoading\");\n\t\t</script>\n\t\t<script type=\"dojo/method\" event=\"onClick\" args=\"item\">\n\t\t\tvar id = String(item.id);\n\t\t\tvar bare_id = id.substr(id.indexOf(':')+1);\n\n\t\t\tif (id.match('LABEL:')) {\n\t\t\t\teditLabel(bare_id);\n\t\t\t}\t\t\t\n\t\t</script>\n\t\t</div>"; print "</div>"; #pane print "</div>"; #container }
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 " </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 " <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 " "; // 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:") . " " . "<input class=\"noborder\" dojoType=\"dijit.form.RadioButton\" type=\"radio\" checked value=\"any\" name=\"tag_mode\"> Any "; print "<input class=\"noborder\" dojoType=\"dijit.form.RadioButton\" type=\"radio\" value=\"all\" name=\"tag_mode\"> All "; print " 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 " "; 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 © 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> —\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>"; }
function module_pref_filters($link) { $subop = $_REQUEST["subop"]; $quiet = $_REQUEST["quiet"]; if ($subop == "getfiltertree") { $root = array(); $root['id'] = 'root'; $root['name'] = __('Filters'); $root['items'] = array(); $result = db_query($link, "SELECT\n\t\t\t\t\tttrss_filters.id AS id,reg_exp,\n\t\t\t\t\tttrss_filter_types.name AS filter_type_name,\n\t\t\t\t\tttrss_filter_types.description AS filter_type_descr,\n\t\t\t\t\tenabled,\n\t\t\t\t\tinverse,\n\t\t\t\t\tfeed_id,\n\t\t\t\t\taction_id,\n\t\t\t\t\tfilter_param,\n\t\t\t\t\tfilter_type,\n\t\t\t\t\tttrss_filter_actions.description AS action_description,\n\t\t\t\t\tttrss_feeds.title AS feed_title,\n\t\t\t\t\tttrss_filter_actions.name AS action_name,\n\t\t\t\t\tttrss_filters.action_param AS action_param\n\t\t\t\tFROM\n\t\t\t\t\tttrss_filter_types,ttrss_filter_actions,ttrss_filters LEFT JOIN\n\t\t\t\t\t\tttrss_feeds ON (ttrss_filters.feed_id = ttrss_feeds.id)\n\t\t\t\tWHERE\n\t\t\t\t\tfilter_type = ttrss_filter_types.id AND\n\t\t\t\t\tttrss_filter_actions.id = action_id AND\n\t\t\t\t\tttrss_filters.owner_uid = " . $_SESSION["uid"] . "\n\t\t\t\tORDER by action_description, reg_exp"); $cat = false; $cur_action_description = ""; if (db_num_rows($result) > 0) { while ($line = db_fetch_assoc($result)) { if ($cur_action_description != $line['action_description']) { if ($cat) { array_push($root['items'], $cat); } $cat = array(); $cat['id'] = 'ACTION:' . $line['action_id']; $cat['name'] = $line['action_description']; $cat['items'] = array(); $cur_action_description = $line['action_description']; } if (array_search($line["action_name"], array("score", "tag", "label")) === false) { $line["action_param"] = ''; } else { if ($line['action_name'] == 'label') { $tmp_result = db_query($link, "SELECT fg_color, bg_color\n\t\t\t\t\t\t\t\tFROM ttrss_labels2 WHERE caption = '" . db_escape_string($line["action_param"]) . "' AND\n\t\t\t\t\t\t\t\t\towner_uid = " . $_SESSION["uid"]); if (db_num_rows($tmp_result) != 0) { $fg_color = db_fetch_result($tmp_result, 0, "fg_color"); $bg_color = db_fetch_result($tmp_result, 0, "bg_color"); $tmp = "<span class=\"labelColorIndicator\" style='color : {$fg_color}; background-color : {$bg_color}'>α</span> " . $line['action_param']; $line['action_param'] = $tmp; } } } $filter = array(); $filter['id'] = 'FILTER:' . $line['id']; $filter['bare_id'] = $line['id']; $filter['name'] = $line['reg_exp']; $filter['type'] = $line['filter_type']; $filter['enabled'] = sql_bool_to_bool($line['enabled']); $filter['param'] = $line['action_param']; $filter['inverse'] = sql_bool_to_bool($line['inverse']); $filter['checkbox'] = false; if ($line['feed_id']) { $filter['feed'] = $line['feed_title']; } array_push($cat['items'], $filter); } array_push($root['items'], $cat); } $fl = array(); $fl['identifier'] = 'id'; $fl['label'] = 'name'; $fl['items'] = array($root); print json_encode($fl); return; } if ($subop == "edit") { $filter_id = db_escape_string($_REQUEST["id"]); $result = db_query($link, "SELECT * FROM ttrss_filters WHERE id = '{$filter_id}' AND owner_uid = " . $_SESSION["uid"]); $reg_exp = htmlspecialchars(db_fetch_result($result, 0, "reg_exp")); $filter_type = db_fetch_result($result, 0, "filter_type"); $feed_id = db_fetch_result($result, 0, "feed_id"); $action_id = db_fetch_result($result, 0, "action_id"); $action_param = db_fetch_result($result, 0, "action_param"); $filter_param = db_fetch_result($result, 0, "filter_param"); $enabled = sql_bool_to_bool(db_fetch_result($result, 0, "enabled")); $inverse = sql_bool_to_bool(db_fetch_result($result, 0, "inverse")); print "<form id=\"filter_edit_form\" onsubmit='return false'>"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-filters\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"{$filter_id}\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"editSave\">"; $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\">"; if ($filter_type != 5) { $date_ops_invisible = 'style="display : none"'; } print "<span id=\"filterDlg_dateModBox\" {$date_ops_invisible}>"; print __("Date") . " "; $filter_params = array("before" => __("before"), "after" => __("after")); print_select_hash("filter_date_modifier", $filter_param, $filter_params, 'dojoType="dijit.form.Select"'); print " </span>"; print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t\t\t required=\"1\"\n\t\t\t\t\t name=\"reg_exp\" style=\"font-size : 16px;\" value=\"{$reg_exp}\">"; print "<span id=\"filterDlg_dateChkBox\" {$date_ops_invisible}>"; print " <button dojoType=\"dijit.form.Button\" onclick=\"return filterDlgCheckDate()\">" . __('Check it') . "</button>"; print "</span>"; print "<hr/> " . __("on field") . " "; print_select_hash("filter_type", $filter_type, $filter_types, 'onchange="filterDlgCheckType(this)" dojoType="dijit.form.Select"'); print "<hr/>"; print __("in") . " "; print_feed_select($link, "feed_id", $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)) { $is_sel = $line["id"] == $action_id ? "selected=\"1\"" : ""; printf("<option value='%d' {$is_sel}>%s</option>", $line["id"], __($line["description"])); } print "</select>"; $param_hidden = $action_id == 4 || $action_id == 6 || $action_id == 7 ? "" : "display : none"; print "<span id=\"filterDlg_paramBox\" style=\"{$param_hidden}\">"; print " " . __("with parameters:") . " "; $param_int_hidden = $action_id != 7 ? "" : "display : none"; print "<input style=\"{$param_int_hidden}\"\n\t\t\t\t\tdojoType=\"dijit.form.TextBox\" id=\"filterDlg_actionParam\"\n\t\t\t\t\tname=\"action_param\" value=\"{$action_param}\">"; $param_int_hidden = $action_id == 7 ? "" : "display : none"; print_label_select($link, "action_param_label", $action_param, "style=\"{$param_int_hidden}\"" . 'id="filterDlg_actionParamLabel" dojoType="dijit.form.Select"'); print "</span>"; print " "; // tiny layout hack print "</div>"; print "<div class=\"dlgSec\">" . __("Options") . "</div>"; print "<div class=\"dlgSecCont\">"; print "<div style=\"line-height : 100%\">"; if ($enabled) { $checked = "checked=\"1\""; } else { $checked = ""; } print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"enabled\" id=\"enabled\" {$checked}>\n\t\t\t\t\t<label for=\"enabled\">" . __('Enabled') . "</label><hr/>"; if ($inverse) { $checked = "checked=\"1\""; } else { $checked = ""; } print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\" {$checked}>\n\t\t\t\t<label for=\"inverse\">" . __('Inverse match') . "</label>"; print "</div>"; print "</div>"; print "<div class=\"dlgButtons\">"; print "<div style=\"float : left\">"; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').removeFilter()\">" . __('Remove') . "</button>"; print "</div>"; 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()\">" . __('Save') . "</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">" . __('Cancel') . "</button>"; print "</div>"; return; } if ($subop == "editSave") { global $memcache; if ($memcache) { $memcache->flush(); } $savemode = db_escape_string($_REQUEST["savemode"]); $reg_exp = db_escape_string(trim($_REQUEST["reg_exp"])); $filter_type = db_escape_string(trim($_REQUEST["filter_type"])); $filter_id = db_escape_string($_REQUEST["id"]); $feed_id = db_escape_string($_REQUEST["feed_id"]); $action_id = db_escape_string($_REQUEST["action_id"]); $action_param = db_escape_string($_REQUEST["action_param"]); $action_param_label = db_escape_string($_REQUEST["action_param_label"]); $enabled = checkbox_to_sql_bool(db_escape_string($_REQUEST["enabled"])); $inverse = checkbox_to_sql_bool(db_escape_string($_REQUEST["inverse"])); # for the time being, no other filters use params anyway... $filter_param = db_escape_string($_REQUEST["filter_date_modifier"]); if (!$feed_id) { $feed_id = 'NULL'; } else { $feed_id = sprintf("'%s'", db_escape_string($feed_id)); } /* When processing 'assign label' filters, action_param_label dropbox * overrides action_param */ if ($action_id == 7) { $action_param = $action_param_label; } if ($action_id == 6) { $action_param = (int) str_replace("+", "", $action_param); } if ($savemode != "test") { $result = db_query($link, "UPDATE ttrss_filters SET\n\t\t\t\t\treg_exp = '{$reg_exp}',\n\t\t\t\t\tfeed_id = {$feed_id},\n\t\t\t\t\taction_id = '{$action_id}',\n\t\t\t\t\tfilter_type = '{$filter_type}',\n\t\t\t\t\tenabled = {$enabled},\n\t\t\t\t\tinverse = {$inverse},\n\t\t\t\t\taction_param = '{$action_param}',\n\t\t\t\t\tfilter_param = '{$filter_param}'\n\t\t\t\t\tWHERE id = '{$filter_id}' AND owner_uid = " . $_SESSION["uid"]); } else { filter_test($link, $filter_type, $reg_exp, $action_id, $action_param, $filter_param, sql_bool_to_bool($inverse), (int) $_REQUEST["feed_id"]); print "<div align='center'>"; print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\t\tonclick=\"return dijit.byId('filterTestDlg').hide()\">" . __('Close this window') . "</button>"; print "</div>"; } return; } if ($subop == "remove") { if ($memcache) { $memcache->flush(); } $ids = split(",", db_escape_string($_REQUEST["ids"])); foreach ($ids as $id) { db_query($link, "DELETE FROM ttrss_filters WHERE id = '{$id}' AND owner_uid = " . $_SESSION["uid"]); } return; } if ($subop == "add") { if ($memcache) { $memcache->flush(); } $savemode = db_escape_string($_REQUEST["savemode"]); $regexp = db_escape_string(trim($_REQUEST["reg_exp"])); $filter_type = db_escape_string(trim($_REQUEST["filter_type"])); $feed_id = db_escape_string($_REQUEST["feed_id"]); $action_id = db_escape_string($_REQUEST["action_id"]); $action_param = db_escape_string($_REQUEST["action_param"]); $action_param_label = db_escape_string($_REQUEST["action_param_label"]); $inverse = checkbox_to_sql_bool(db_escape_string($_REQUEST["inverse"])); # for the time being, no other filters use params anyway... $filter_param = db_escape_string($_REQUEST["filter_date_modifier"]); if (!$regexp) { return; } if (!$feed_id) { $feed_id = 'NULL'; } else { $feed_id = sprintf("'%s'", db_escape_string($feed_id)); } /* When processing 'assign label' filters, action_param_label dropbox * overrides action_param */ if ($action_id == 7) { $action_param = $action_param_label; } if ($action_id == 6) { $action_param = (int) str_replace("+", "", $action_param); } if ($savemode != "test") { $result = db_query($link, "INSERT INTO ttrss_filters (reg_exp,filter_type,owner_uid,feed_id,\n\t\t\t\t\t\taction_id, action_param, inverse, filter_param)\n\t\t\t\t\tVALUES\n\t\t\t\t\t\t('{$regexp}', '{$filter_type}','" . $_SESSION["uid"] . "',\n\t\t\t\t\t\t{$feed_id}, '{$action_id}', '{$action_param}', {$inverse},\n\t\t\t\t\t\t'{$filter_param}')"); if (db_affected_rows($link, $result) != 0) { print T_sprintf("Created filter <b>%s</b>", htmlspecialchars($regexp)); } } else { filter_test($link, $filter_type, $regexp, $action_id, $action_param, $filter_param, sql_bool_to_bool($inverse), (int) $_REQUEST["feed_id"]); print "<div align='center'>"; print "<button dojoType=\"dijit.form.Button\"\n\t\t\t\t\tonclick=\"return dijit.byId('filterTestDlg').hide()\">" . __('Close this window') . "</button>"; print "</div>"; } return; } if ($quiet) { return; } $sort = db_escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "reg_exp"; } $result = db_query($link, "SELECT id,description\n\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"]; } $filter_search = db_escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_filter_search"] = $filter_search; } else { $filter_search = $_SESSION["prefs_filter_search"]; } print "<div id=\"pref-filter-wrap\" dojoType=\"dijit.layout.BorderContainer\" gutters=\"false\">"; print "<div id=\"pref-filter-header\" dojoType=\"dijit.layout.ContentPane\" region=\"top\">"; print "<div id=\"pref-filter-toolbar\" dojoType=\"dijit.Toolbar\">"; print "<div dojoType=\"dijit.form.DropDownButton\">" . "<span>" . __('Select') . "</span>"; print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">"; print "<div onclick=\"dijit.byId('filterTree').model.setAllChecked(true)\"\n\t\t\tdojoType=\"dijit.MenuItem\">" . __('All') . "</div>"; print "<div onclick=\"dijit.byId('filterTree').model.setAllChecked(false)\"\n\t\t\tdojoType=\"dijit.MenuItem\">" . __('None') . "</div>"; print "</div></div>"; print "<button dojoType=\"dijit.form.Button\" onclick=\"return quickAddFilter()\">" . __('Create filter') . "</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return editSelectedFilter()\">" . __('Edit') . "</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return removeSelectedFilters()\">" . __('Remove') . "</button> "; if (defined('_ENABLE_FEED_DEBUGGING')) { print "<button dojoType=\"dijit.form.Button\" onclick=\"rescore_all_feeds()\">" . __('Rescore articles') . "</button> "; } print "</div>"; # toolbar print "</div>"; # toolbar-frame print "<div id=\"pref-filter-content\" dojoType=\"dijit.layout.ContentPane\" region=\"center\">"; print "<div id=\"filterlistLoading\">\n\t\t<img src='images/indicator_tiny.gif'>" . __("Loading, please wait...") . "</div>"; print "<div dojoType=\"dojo.data.ItemFileWriteStore\" jsId=\"filterStore\"\n\t\t\turl=\"backend.php?op=pref-filters&subop=getfiltertree\">\n\t\t</div>\n\t\t<div dojoType=\"lib.CheckBoxStoreModel\" jsId=\"filterModel\" store=\"filterStore\"\n\t\tquery=\"{id:'root'}\" rootId=\"root\" rootLabel=\"Feeds\"\n\t\t\tchildrenAttrs=\"items\" checkboxStrict=\"false\" checkboxAll=\"false\">\n\t\t</div>\n\t\t<div dojoType=\"fox.PrefFilterTree\" id=\"filterTree\"\n\t\t\tmodel=\"filterModel\" openOnClick=\"true\">\n\t\t<script type=\"dojo/method\" event=\"onLoad\" args=\"item\">\n\t\t\tElement.hide(\"filterlistLoading\");\n\t\t</script>\n\t\t<script type=\"dojo/method\" event=\"onClick\" args=\"item\">\n\t\t\tvar id = String(item.id);\n\t\t\tvar bare_id = id.substr(id.indexOf(':')+1);\n\n\t\t\tif (id.match('FILTER:')) {\n\t\t\t\teditFilter(bare_id);\n\t\t\t}\n\t\t</script>\n\n\t\t</div>"; print "</div>"; #pane print "</div>"; #container }
function module_pref_filters($link) { $subop = $_REQUEST["subop"]; $quiet = $_REQUEST["quiet"]; if ($subop == "edit") { $filter_id = db_escape_string($_REQUEST["id"]); $result = db_query($link, "SELECT * FROM ttrss_filters WHERE id = '{$filter_id}' AND owner_uid = " . $_SESSION["uid"]); $reg_exp = htmlspecialchars(db_fetch_result($result, 0, "reg_exp")); $filter_type = db_fetch_result($result, 0, "filter_type"); $feed_id = db_fetch_result($result, 0, "feed_id"); $action_id = db_fetch_result($result, 0, "action_id"); $action_param = db_fetch_result($result, 0, "action_param"); $filter_param = db_fetch_result($result, 0, "filter_param"); $enabled = sql_bool_to_bool(db_fetch_result($result, 0, "enabled")); $inverse = sql_bool_to_bool(db_fetch_result($result, 0, "inverse")); print "<div id=\"infoBoxTitle\">" . __('Filter Editor') . "</div>"; print "<div class=\"infoBoxContents\">"; print "<form id=\"filter_edit_form\" onsubmit='return false'>"; print "<input type=\"hidden\" name=\"op\" value=\"pref-filters\">"; print "<input type=\"hidden\" name=\"id\" value=\"{$filter_id}\">"; print "<input type=\"hidden\" name=\"subop\" value=\"editSave\">"; $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\">"; if ($filter_type != 5) { $date_ops_invisible = 'style="display : none"'; } print "<span id=\"filter_dlg_date_mod_box\" {$date_ops_invisible}>"; print __("Date") . " "; $filter_params = array("before" => __("before"), "after" => __("after")); print_select_hash("filter_date_modifier", $filter_param, $filter_params); print " </span>"; print "<input onkeypress=\"return filterCR(event, filterEditSave)\"\n\t\t\t\t\t name=\"reg_exp\" size=\"30\" value=\"{$reg_exp}\">"; print "<span id=\"filter_dlg_date_chk_box\" {$date_ops_invisible}>"; print " <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", $filter_type, $filter_types, 'onchange="filterDlgCheckType(this)"'); print "<br/>"; print __("in") . " "; print_feed_select($link, "feed_id", $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)) { $is_sel = $line["id"] == $action_id ? "selected" : ""; printf("<option value='%d' {$is_sel}>%s</option>", $line["id"], __($line["description"])); } print "</select>"; $param_hidden = $action_id == 4 || $action_id == 6 || $action_id == 7 ? "" : "display : none"; print "<span id=\"filter_dlg_param_box\" style=\"{$param_hidden}\">"; print " " . __("with parameters:") . " "; $param_int_hidden = $action_id != 7 ? "" : "display : none"; print "<input size=\"20\" style=\"{$param_int_hidden}\"\n\t\t\t\t\tonkeypress=\"return filterCR(event, filterEditSave)\"\t\t\n\t\t\t\t\tname=\"action_param\" value=\"{$action_param}\">"; $param_int_hidden = $action_id == 7 ? "" : "display : none"; print_label_select($link, "action_param_label", $action_param, $param_int_hidden); print "</span>"; print " "; // tiny layout hack print "</div>"; print "<div class=\"dlgSec\">" . __("Options") . "</div>"; print "<div class=\"dlgSecCont\">"; print "<div style=\"line-height : 100%\">"; if ($enabled) { $checked = "checked"; } else { $checked = ""; } print "<input type=\"checkbox\" name=\"enabled\" id=\"enabled\" {$checked}>\n\t\t\t\t\t<label for=\"enabled\">" . __('Enabled') . "</label><br/>"; if ($inverse) { $checked = "checked"; } else { $checked = ""; } print "<input type=\"checkbox\" name=\"inverse\" id=\"inverse\" {$checked}>\n\t\t\t\t<label for=\"inverse\">" . __('Inverse match') . "</label>"; print "</div>"; print "</div>"; print "<div class=\"dlgButtons\">"; $reg_exp = htmlspecialchars($reg_exp, ENT_QUOTES); // second escaping seems to be needed for javascript print "<div style=\"float : left\">"; print "<button onclick='return removeFilter({$filter_id}, \"{$reg_exp}\")'>" . __('Remove') . "</button>"; print "</div>"; print "<button onclick=\"return filterEditSave()\">" . __('Save') . "</button> "; print "<button onclick=\"return filterEditCancel()\">" . __('Cancel') . "</button>"; print "</div>"; return; } if ($subop == "editSave") { global $memcache; if ($memcache) { $memcache->flush(); } $reg_exp = db_escape_string(trim($_REQUEST["reg_exp"])); $filter_type = db_escape_string(trim($_REQUEST["filter_type"])); $filter_id = db_escape_string($_REQUEST["id"]); $feed_id = db_escape_string($_REQUEST["feed_id"]); $action_id = db_escape_string($_REQUEST["action_id"]); $action_param = db_escape_string($_REQUEST["action_param"]); $action_param_label = db_escape_string($_REQUEST["action_param_label"]); $enabled = checkbox_to_sql_bool(db_escape_string($_REQUEST["enabled"])); $inverse = checkbox_to_sql_bool(db_escape_string($_REQUEST["inverse"])); # for the time being, no other filters use params anyway... $filter_param = db_escape_string($_REQUEST["filter_date_modifier"]); if (!$feed_id) { $feed_id = 'NULL'; } else { $feed_id = sprintf("'%s'", db_escape_string($feed_id)); } /* When processing 'assign label' filters, action_param_label dropbox * overrides action_param */ if ($action_id == 7) { $action_param = $action_param_label; } $result = db_query($link, "UPDATE ttrss_filters SET \n\t\t\t\t\treg_exp = '{$reg_exp}', \n\t\t\t\t\tfeed_id = {$feed_id},\n\t\t\t\t\taction_id = '{$action_id}',\n\t\t\t\t\tfilter_type = '{$filter_type}',\n\t\t\t\t\tenabled = {$enabled},\n\t\t\t\t\tinverse = {$inverse},\n\t\t\t\t\taction_param = '{$action_param}',\n\t\t\t\t\tfilter_param = '{$filter_param}'\n\t\t\t\t\tWHERE id = '{$filter_id}' AND owner_uid = " . $_SESSION["uid"]); if (db_affected_rows($link, $result) != 0) { print_notice(T_sprintf("Saved filter <b>%s</b>", htmlspecialchars($reg_exp))); } } if ($subop == "remove") { if ($memcache) { $memcache->flush(); } $ids = split(",", db_escape_string($_REQUEST["ids"])); foreach ($ids as $id) { db_query($link, "DELETE FROM ttrss_filters WHERE id = '{$id}' AND owner_uid = " . $_SESSION["uid"]); } } if ($subop == "add") { if ($memcache) { $memcache->flush(); } $regexp = db_escape_string(trim($_REQUEST["reg_exp"])); $filter_type = db_escape_string(trim($_REQUEST["filter_type"])); $feed_id = db_escape_string($_REQUEST["feed_id"]); $action_id = db_escape_string($_REQUEST["action_id"]); $action_param = db_escape_string($_REQUEST["action_param"]); $action_param_label = db_escape_string($_REQUEST["action_param_label"]); $inverse = checkbox_to_sql_bool(db_escape_string($_REQUEST["inverse"])); # for the time being, no other filters use params anyway... $filter_param = db_escape_string($_REQUEST["filter_date_modifier"]); if (!$regexp) { return; } if (!$feed_id) { $feed_id = 'NULL'; } else { $feed_id = sprintf("'%s'", db_escape_string($feed_id)); } /* When processing 'assign label' filters, action_param_label dropbox * overrides action_param */ if ($action_id == 7) { $action_param = $action_param_label; } $result = db_query($link, "INSERT INTO ttrss_filters (reg_exp,filter_type,owner_uid,feed_id,\n\t\t\t\t\taction_id, action_param, inverse, filter_param) \n\t\t\t\tVALUES \n\t\t\t\t\t('{$regexp}', '{$filter_type}','" . $_SESSION["uid"] . "', \n\t\t\t\t\t\t{$feed_id}, '{$action_id}', '{$action_param}', {$inverse}, '{$filter_param}')"); if (db_affected_rows($link, $result) != 0) { print T_sprintf("Created filter <b>%s</b>", htmlspecialchars($regexp)); } return; } if ($quiet) { return; } set_pref($link, "_PREFS_ACTIVE_TAB", "filterConfig"); $sort = db_escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "reg_exp"; } // print "<div id=\"infoBoxShadow\"><div id=\"infoBox\">PLACEHOLDER</div></div>"; $result = db_query($link, "SELECT id,description \n\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"]; } $filter_search = db_escape_string($_REQUEST["search"]); if (array_key_exists("search", $_REQUEST)) { $_SESSION["prefs_filter_search"] = $filter_search; } else { $filter_search = $_SESSION["prefs_filter_search"]; } print "<div style='float : right'>\n\t\t\t<input id=\"filter_search\" size=\"20\" type=\"search\"\n\t\t\t\tonfocus=\"javascript:disableHotkeys();\" \n\t\t\t\tonblur=\"javascript:enableHotkeys();\"\n\t\t\t\tonchange=\"javascript:updateFilterList()\" value=\"{$filter_search}\">\n\t\t\t<button onclick=\"javascript:updateFilterList()\">" . __('Search') . "</button>\n\t\t\t \n\t\t\t<a class='helpLinkPic' href=\"javascript:displayHelpInfobox(2)\">\n\t\t\t<img style='vertical-align : top;' src='" . theme_image($link, "images/sign_quest.png") . "'></a>\n\t\t</div>"; print "<button onclick=\"return quickAddFilter()\">" . __('Create filter') . "</button> "; print "<button onclick=\"return editSelectedFilter()\">" . __('Edit') . "</button> "; print "<button onclick=\"return removeSelectedFilters()\">" . __('Remove') . "</button> "; print "<button onclick=\"rescore_all_feeds()\">" . __('Rescore articles') . "</button> "; if ($filter_search) { $filter_search = split(' ', db_escape_string($filter_search)); $tokens = array(); foreach ($filter_search as $token) { $token = trim($token); array_push($tokens, "(\n\t\t\t\t\tUPPER(ttrss_filter_actions.description) LIKE UPPER('%{$token}%') OR \n\t\t\t\t\tUPPER(reg_exp) LIKE UPPER('%{$token}%') OR \n\t\t\t\t\tUPPER(action_param) LIKE UPPER('%{$token}%') OR \n\t\t\t\t\tUPPER(ttrss_feeds.title) LIKE UPPER('%{$token}%') OR\n\t\t\t\t\tUPPER(ttrss_filter_types.description) LIKE UPPER('%{$token}%'))"); } $filter_search_query = "(" . join($tokens, " AND ") . ") AND "; } else { $filter_search_query = ""; } $result = db_query($link, "SELECT \n\t\t\t\tttrss_filters.id AS id,reg_exp,\n\t\t\t\tttrss_filter_types.name AS filter_type_name,\n\t\t\t\tttrss_filter_types.description AS filter_type_descr,\n\t\t\t\tenabled,\n\t\t\t\tinverse,\n\t\t\t\tfeed_id,\n\t\t\t\tfilter_param,\n\t\t\t\tfilter_type,\n\t\t\t\tttrss_filter_actions.description AS action_description,\n\t\t\t\tttrss_feeds.title AS feed_title,\n\t\t\t\tttrss_filter_actions.name AS action_name,\n\t\t\t\tttrss_filters.action_param AS action_param\n\t\t\tFROM \n\t\t\t\tttrss_filter_types,ttrss_filter_actions,ttrss_filters LEFT JOIN\n\t\t\t\t\tttrss_feeds ON (ttrss_filters.feed_id = ttrss_feeds.id)\n\t\t\tWHERE\n\t\t\t\tfilter_type = ttrss_filter_types.id AND\n\t\t\t\t{$filter_search_query}\n\t\t\t\tttrss_filter_actions.id = action_id AND\n\t\t\t\tttrss_filters.owner_uid = " . $_SESSION["uid"] . "\n\t\t\tORDER by action_description, {$sort}"); if (db_num_rows($result) != 0) { print "<p><table width=\"100%\" cellspacing=\"0\" class=\"prefFilterList\" \n\t\t\t\tid=\"prefFilterList\">"; print "<tr><td class=\"selectPrompt\" colspan=\"8\">\n\t\t\t\t" . __('Select:') . " \n\t\t\t\t\t<a href=\"javascript:selectPrefRows('filter', true)\">" . __('All') . "</a>,\n\t\t\t\t\t<a href=\"javascript:selectPrefRows('filter', false)\">" . __('None') . "</a>\n\t\t\t\t</td</tr>"; $lnum = 0; $cur_action_description = ""; while ($line = db_fetch_assoc($result)) { $filter_id = $line["id"]; $edit_filter_id = $_REQUEST["id"]; $enabled = sql_bool_to_bool($line["enabled"]); $inverse = sql_bool_to_bool($line["inverse"]); $this_row_id = "id=\"FILRR-{$filter_id}\""; $line["filter_type_descr"] = __($line["filter_type_descr"]); $line["action_description"] = __($line["action_description"]); if ($line["action_description"] != $cur_action_description) { $cur_action_description = $line["action_description"]; print "<tr><td class='filterEditCat' colspan='6'>{$cur_action_description}</td></tr>"; print "<tr class=\"title\">\n\t\t\t\t\t\t<td align='center' width=\"5%\"> </td>\n\t\t\t\t\t\t<td width=\"20%\"><a href=\"javascript:updateFilterList('reg_exp')\">" . __('Match') . "</a></td>\n\t\t\t\t\t\t<td width=\"\"><a href=\"javascript:updateFilterList('feed_title')\">" . __('Feed') . "</a></td>\n\t\t\t\t\t\t<td width=\"20%\"><a href=\"javascript:updateFilterList('filter_type')\">" . __('Field') . "</a></td>\n\t\t\t\t\t\t<td width=\"20%\"><a href=\"javascript:updateFilterList('action_param')\">" . __('Params') . "</a></td>"; $lnum = 0; } $class = $lnum % 2 ? "even" : "odd"; print "<tr class=\"{$class}\" {$this_row_id}>"; $line["reg_exp"] = htmlspecialchars($line["reg_exp"]); if (!$line["feed_title"]) { $line["feed_title"] = __("All feeds"); } if (!$line["action_param"]) { $line["action_param"] = "—"; } else { if ($line["action_name"] == "score") { $score_pic = theme_image($link, "images/" . get_score_pic($line["action_param"])); $score_pic = "<img class='hlScorePic' src=\"{$score_pic}\">"; $line["action_param"] = "{$score_pic} " . $line["action_param"]; } } $line["feed_title"] = htmlspecialchars($line["feed_title"]); print "<td align='center'><input onclick='toggleSelectPrefRow(this, \"filter\");' \n\t\t\t\t\ttype=\"checkbox\" id=\"FICHK-" . $line["id"] . "\"></td>"; $filter_params = array("before" => __("before"), "after" => __("after")); if ($line["action_name"] == 'label') { $tmp_result = db_query($link, "SELECT fg_color, bg_color\n\t\t\t\t\t\tFROM ttrss_labels2 WHERE caption = '" . db_escape_string($line["action_param"]) . "' AND\n\t\t\t\t\t\t\towner_uid = " . $_SESSION["uid"]); $fg_color = db_fetch_result($tmp_result, 0, "fg_color"); $bg_color = db_fetch_result($tmp_result, 0, "bg_color"); $tmp = "<div class='labelColorIndicator' id='LICID-{$id}' \n\t\t\t\t\t\tstyle='color : {$fg_color}; background-color : {$bg_color}'>\n\t\t\t\t\t\tα"; $tmp .= "</div>"; $line["action_param"] = "{$tmp} " . $line["action_param"]; } if ($line["filter_type"] == 5) { if (!strtotime($line["reg_exp"])) { $line["reg_exp"] = "<span class=\"filterDateError\">" . $line["reg_exp"] . "</span>"; } $line["reg_exp"] = __("Date") . " " . $filter_params[$line['filter_param']] . " " . $line["reg_exp"]; } if (!$enabled) { $line["reg_exp"] = "<span class=\"insensitive\">" . $line["reg_exp"] . " " . __("(Disabled)") . "</span>"; $line["feed_title"] = "<span class=\"insensitive\">" . $line["feed_title"] . "</span>"; $line["filter_type_descr"] = "<span class=\"insensitive\">" . $line["filter_type_descr"] . "</span>"; $line["action_description"] = "<span class=\"insensitive\">" . $line["action_description"] . "</span>"; $line["action_param"] = "<span class=\"insensitive\">" . $line["action_param"] . "</span>"; } $onclick = "onclick='editFilter({$filter_id})' title='" . __('Click to edit') . "'"; $inverse_label = ""; if ($inverse) { $inverse_label = " <span class='insensitive'>" . __('(Inverse)') . "</span>"; } print "<td {$onclick}>" . $line["reg_exp"] . "{$inverse_label}</td>"; print "<td {$onclick}>" . $line["feed_title"] . "</td>"; print "<td {$onclick}>" . $line["filter_type_descr"] . "</td>"; print "<td {$onclick}>" . $line["action_param"] . "</td>"; print "</tr>"; ++$lnum; } print "</table>"; } else { print "<p>"; if (!$filter_search) { print_warning(__('No filters defined.')); } else { print_warning(__('No matching filters found.')); } print "</p>"; } }
function 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=\"method\" value=\"add\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"csrf_token\" value=\"" . $_SESSION['csrf_token'] . "\">"; $result = db_query($this->link, "SELECT id,description\n\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 " </span>"; print "<input dojoType=\"dijit.form.ValidationTextBox\"\n\t\t\t required=\"true\" id=\"filterDlg_regExp\"\n\t\t\t style=\"font-size : 16px\"\n\t\t\t name=\"reg_exp\" value=\"{$reg_exp}\"/>"; print "<span id=\"filterDlg_dateChkBox\" style=\"display : none\">"; print " <button dojoType=\"dijit.form.Button\"\n\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 "<span id='filterDlg_feeds'>"; print_feed_select($this->link, "feed_id", $active_feed_id, 'dojoType="dijit.form.FilteringSelect"'); print "</span>"; print "<span id='filterDlg_cats' style='display : none'>"; print_feed_cat_select($this->link, "cat_id", $active_cat_id, 'dojoType="dijit.form.FilteringSelect"'); print "</span>"; 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\tonchange=\"filterDlgCheckAction(this)\">"; $result = db_query($this->link, "SELECT id,description FROM ttrss_filter_actions\n\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\tid=\"filterDlg_actionParam\"\n\t\t\tname=\"action_param\">"; print_label_select($this->link, "action_param_label", $action_param, 'id="filterDlg_actionParamLabel" dojoType="dijit.form.Select"'); print "</span>"; print " "; // 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<label for=\"enabled\">" . __('Enabled') . "</label><hr/>"; print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\">\n\t\t\t<label for=\"inverse\">" . __('Inverse match') . "</label><hr/>"; print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"cat_filter\" id=\"cat_filter\" onchange=\"filterDlgCheckCat(this)\">\n\t\t\t\t<label for=\"cat_filter\">" . __('Apply to category') . "</label><hr/>"; 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>"; }