$this->pref_help = array(
"ALLOW_DUPLICATE_POSTS" => array(__("Allow duplicate articles"), ""),
- "AUTO_ASSIGN_LABELS" => array(__("Assign articles to labels automatically"), ""),
"BLACKLISTED_TAGS" => array(__("Blacklisted tags"), __("When auto-detecting tags in articles these tags will not be applied (comma-separated list).")),
"CDM_AUTO_CATCHUP" => array(__("Automatically mark articles as read"), __("This option enables marking articles as read automatically while you scroll article list.")),
"CDM_EXPANDED" => array(__("Automatically expand articles in combined mode"), ""),
"FRESH_ARTICLE_MAX_AGE" => array(__("Maximum age of fresh articles (in hours)"), ""),
"HIDE_READ_FEEDS" => array(__("Hide feeds with no unread articles"), ""),
"HIDE_READ_SHOWS_SPECIAL" => array(__("Show special feeds when hiding read feeds"), ""),
- "LONG_DATE_FORMAT" => array(__("Long date format"), ""),
+ "LONG_DATE_FORMAT" => array(__("Long date format"), __("The syntax used is identical to the PHP <a href='http://php.net/manual/function.date.php'>date()</a> function.")),
"ON_CATCHUP_SHOW_NEXT_FEED" => array(__("On catchup show next feed"), __("Automatically open next feed with unread articles after marking one as read")),
"PURGE_OLD_DAYS" => array(__("Purge articles after this number of days (0 - disables)"), ""),
"PURGE_UNREAD_ARTICLES" => array(__("Purge unread articles"), ""),
$con_pw = $_POST["confirm_password"];
if ($old_pw == "") {
- print "ERROR: ".__("Old password cannot be blank.");
+ print "ERROR: ".format_error("Old password cannot be blank.");
return;
}
if ($new_pw == "") {
- print "ERROR: ".__("New password cannot be blank.");
+ print "ERROR: ".format_error("New password cannot be blank.");
return;
}
if ($new_pw != $con_pw) {
- print "ERROR: ".__("Entered passwords do not match.");
+ print "ERROR: ".format_error("Entered passwords do not match.");
return;
}
$authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]);
if (method_exists($authenticator, "change_password")) {
- print $authenticator->change_password($_SESSION["uid"], $old_pw, $new_pw);
+ print format_notice($authenticator->change_password($_SESSION["uid"], $old_pw, $new_pw));
} else {
- print "ERROR: ".__("Function not supported by authentication module.");
+ print "ERROR: ".format_error("Function not supported by authentication module.");
}
}
}
}
- function getHelp() {
-
- $pref_name = $this->dbh->escape_string($_REQUEST["pn"]);
-
- $result = $this->dbh->query("SELECT help_text FROM ttrss_prefs
- WHERE pref_name = '$pref_name'");
-
- if ($this->dbh->num_rows($result) > 0) {
- $help_text = $this->dbh->fetch_result($result, 0, "help_text");
- print $help_text;
- } else {
- printf(__("Unknown option: %s"), $pref_name);
- }
- }
-
function changeemail() {
$email = $this->dbh->escape_string($_POST["email"]);
global $access_level_names;
- $prefs_blacklist = array("STRIP_UNSAFE_TAGS", "REVERSE_HEADLINES",
- "SORT_HEADLINES_BY_FEED_DATE", "DEFAULT_ARTICLE_LIMIT");
+ $prefs_blacklist = array("ALLOW_DUPLICATE_POSTS", "STRIP_UNSAFE_TAGS", "REVERSE_HEADLINES",
+ "SORT_HEADLINES_BY_FEED_DATE", "DEFAULT_ARTICLE_LIMIT",
+ "FEEDS_SORT_BY_UNREAD");
/* "FEEDS_SORT_BY_UNREAD", "HIDE_READ_FEEDS", "REVERSE_HEADLINES" */
print "<h2>" . __("Password") . "</h2>";
+ print "<div style='display : none' id='pwd_change_infobox'></div>";
+
$result = $this->dbh->query("SELECT id FROM ttrss_users
WHERE id = ".$_SESSION["uid"]." AND pwd_hash
= 'SHA1:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'");
onComplete: function(transport) {
notify('');
if (transport.responseText.indexOf('ERROR: ') == 0) {
- notify_error(transport.responseText.replace('ERROR: ', ''));
+
+ $('pwd_change_infobox').innerHTML =
+ transport.responseText.replace('ERROR: ', '');
+
} else {
- notify_info(transport.responseText);
+ $('pwd_change_infobox').innerHTML =
+ transport.responseText.replace('ERROR: ', '');
+
var warn = $('default_pass_warning');
if (warn) Element.hide(warn);
}
+
+ new Effect.Appear('pwd_change_infobox');
+
}});
this.reset();
}
} else if (function_exists("imagecreatefromstring")) {
- print "<p>".__("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP.") . "</p>";
+ print_warning(__("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP."));
print "<p>".__("Scan the following code by the Authenticator application:")."</p>";
} else if ($pref_name == "USER_CSS_THEME") {
- $themes = array_map("basename", glob("themes/*.css"));
+ $themes = array_merge(glob("themes/*.css"), glob("themes.local/*.css"));
+ $themes = array_map("basename", $themes);
+ $themes = array_filter($themes, "theme_valid");
+ asort($themes);
print_select($pref_name, $value, $themes,
'dojoType="dijit.form.Select"');
$cert_serial = htmlspecialchars(get_ssl_certificate_id());
$has_serial = ($cert_serial) ? "false" : "true";
+ print "<br/>";
+
print " <button dojoType=\"dijit.form.Button\" disabled=\"$has_serial\"
onclick=\"insertSSLserial('$cert_serial')\">" .
__('Register') . "</button>";
print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Plugins')."\">";
- print "<h2>".__("Plugins")."</h2>";
-
print "<p>" . __("You will need to reload Tiny Tiny RSS for plugin changes to take effect.") . "</p>";
print_notice(__("Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>."));
$system_enabled = array_map("trim", explode(",", PLUGINS));
$user_enabled = array_map("trim", explode(",", get_pref("_ENABLED_PLUGINS")));
- $tmppluginhost = new PluginHost(Db::get());
- $tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"]);
+ $tmppluginhost = new PluginHost();
+ $tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"], true);
$tmppluginhost->load_data(true);
foreach ($tmppluginhost->get_plugins() as $name => $plugin) {
$about = $plugin->about();
- if ($about[3] && strpos($name, "example") === FALSE) {
+ if ($about[3]) {
if (in_array($name, $system_enabled)) {
$checked = "checked='1'";
} else {
dojoType=\"dijit.form.CheckBox\" $checked
type=\"checkbox\"></td>";
- print "<td>$name</td>";
+ $plugin_icon = $checked ? "plugin.png" : "plugin_disabled.png";
+
+ print "<td><label><img src='images/$plugin_icon' alt=''> $name</label></td>";
print "<td>" . htmlspecialchars($about[1]);
if (@$about[4]) {
print " — <a target=\"_blank\" class=\"visibleLink\"
foreach ($tmppluginhost->get_plugins() as $name => $plugin) {
$about = $plugin->about();
- if (!$about[3] && strpos($name, "example") === FALSE) {
+ if (!$about[3]) {
if (in_array($name, $system_enabled)) {
$checked = "checked='1'";
print "<tr class='$rowclass'>";
+ $plugin_icon = $checked ? "plugin.png" : "plugin_disabled.png";
+
print "<td align='center'><input id='FPCHK-$name' name='plugins[]' value='$name' onclick='toggleSelectRow2(this);'
dojoType=\"dijit.form.CheckBox\" $checked $disabled
type=\"checkbox\"></td>";
- print "<td><label for='FPCHK-$name'>$name</label></td>";
+ print "<td><label for='FPCHK-$name'><img src='images/$plugin_icon' alt=''> $name</label></td>";
print "<td><label for='FPCHK-$name'>" . htmlspecialchars($about[1]) . "</label>";
if (@$about[4]) {
print " — <a target=\"_blank\" class=\"visibleLink\"
if (!$otp_enabled) {
$secret = $base32->encode(sha1($this->dbh->fetch_result($result, 0, "salt")));
- $topt = new \OTPHP\TOTP($secret);
- print QRcode::png($topt->provisioning_uri($login));
+ print QRcode::png("otpauth://totp/".urlencode($login).
+ "?secret=$secret&issuer=".urlencode("Tiny Tiny RSS"));
+
}
}
$value = str_replace("<br/>", "\n", $value);
- print_notice(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_notice(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.", "css/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=\"method\" value=\"setpref\">";
print "<table width='100%'><tr><td>";
print "<textarea dojoType=\"dijit.form.SimpleTextarea\"
- style='font-size : 12px; width : 100%; height: 200px;'
+ style='font-size : 12px; width : 98%; height: 200px;'
placeHolder='body#ttrssMain { font-size : 14px; };'
name='value'>$value</textarea>";
print "</td></tr></table>";
while ($line = $this->dbh->fetch_assoc($result)) {
- $class = ($lnum % 2) ? "even" : "odd";
-
$profile_id = $line["id"];
$this_row_id = "id=\"FCATR-$profile_id\"";