summaryrefslogtreecommitdiff
path: root/classes/pref
diff options
context:
space:
mode:
Diffstat (limited to 'classes/pref')
-rwxr-xr-xclasses/pref/feeds.php392
-rwxr-xr-xclasses/pref/filters.php178
-rw-r--r--classes/pref/labels.php54
-rw-r--r--classes/pref/prefs.php192
-rw-r--r--classes/pref/users.php147
5 files changed, 420 insertions, 543 deletions
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index a033bf04f..6cbf15a58 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -66,9 +66,9 @@ class Pref_Feeds extends Handler_Protected {
$cat['items'] = array();
$cat['checkbox'] = false;
$cat['type'] = 'category';
- $cat['unread'] = 0;
- $cat['child_unread'] = 0;
- $cat['auxcounter'] = 0;
+ $cat['unread'] = -1;
+ $cat['child_unread'] = -1;
+ $cat['auxcounter'] = -1;
$cat['parent_id'] = $cat_id;
$cat['items'] = $this->get_category_items($line['id']);
@@ -95,10 +95,10 @@ class Pref_Feeds extends Handler_Protected {
$feed = array();
$feed['id'] = 'FEED:' . $feed_line['id'];
$feed['bare_id'] = (int)$feed_line['id'];
- $feed['auxcounter'] = 0;
+ $feed['auxcounter'] = -1;
$feed['name'] = $feed_line['title'];
$feed['checkbox'] = false;
- $feed['unread'] = 0;
+ $feed['unread'] = -1;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = Feeds::getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime(
@@ -153,14 +153,14 @@ class Pref_Feeds extends Handler_Protected {
$item = array();
$item['id'] = 'FEED:' . $feed_id;
$item['bare_id'] = (int)$feed_id;
- $item['auxcounter'] = 0;
+ $item['auxcounter'] = -1;
$item['name'] = $feed['title'];
$item['checkbox'] = false;
$item['error'] = '';
$item['icon'] = $feed['icon'];
$item['param'] = '';
- $item['unread'] = 0; //$feed['sender']->get_unread($feed['id']);
+ $item['unread'] = -1;
$item['type'] = 'feed';
array_push($cat['items'], $item);
@@ -218,13 +218,13 @@ class Pref_Feeds extends Handler_Protected {
$cat = array();
$cat['id'] = 'CAT:' . $line['id'];
$cat['bare_id'] = (int)$line['id'];
- $cat['auxcounter'] = 0;
+ $cat['auxcounter'] = -1;
$cat['name'] = $line['title'];
$cat['items'] = array();
$cat['checkbox'] = false;
$cat['type'] = 'category';
- $cat['unread'] = 0;
- $cat['child_unread'] = 0;
+ $cat['unread'] = -1;
+ $cat['child_unread'] = -1;
$cat['items'] = $this->get_category_items($line['id']);
@@ -242,13 +242,13 @@ class Pref_Feeds extends Handler_Protected {
$cat = array();
$cat['id'] = 'CAT:0';
$cat['bare_id'] = 0;
- $cat['auxcounter'] = 0;
+ $cat['auxcounter'] = -1;
$cat['name'] = __("Uncategorized");
$cat['items'] = array();
$cat['type'] = 'category';
$cat['checkbox'] = false;
- $cat['unread'] = 0;
- $cat['child_unread'] = 0;
+ $cat['unread'] = -1;
+ $cat['child_unread'] = -1;
$fsth = $this->pdo->prepare("SELECT id, title,last_error,
".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated, update_interval
@@ -263,14 +263,14 @@ class Pref_Feeds extends Handler_Protected {
$feed = array();
$feed['id'] = 'FEED:' . $feed_line['id'];
$feed['bare_id'] = (int)$feed_line['id'];
- $feed['auxcounter'] = 0;
+ $feed['auxcounter'] = -1;
$feed['name'] = $feed_line['title'];
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = Feeds::getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime(
$feed_line['last_updated'], true);
- $feed['unread'] = 0;
+ $feed['unread'] = -1;
$feed['type'] = 'feed';
$feed['updates_disabled'] = (int)($feed_line['update_interval'] < 0);
@@ -298,14 +298,14 @@ class Pref_Feeds extends Handler_Protected {
$feed = array();
$feed['id'] = 'FEED:' . $feed_line['id'];
$feed['bare_id'] = (int)$feed_line['id'];
- $feed['auxcounter'] = 0;
+ $feed['auxcounter'] = -1;
$feed['name'] = $feed_line['title'];
$feed['checkbox'] = false;
$feed['error'] = $feed_line['last_error'];
$feed['icon'] = Feeds::getFeedIcon($feed_line['id']);
$feed['param'] = make_local_datetime(
$feed_line['last_updated'], true);
- $feed['unread'] = 0;
+ $feed['unread'] = -1;
$feed['type'] = 'feed';
$feed['updates_disabled'] = (int)($feed_line['update_interval'] < 0);
@@ -473,6 +473,7 @@ class Pref_Feeds extends Handler_Protected {
$icon_file = $tmp_file;
$feed_id = clean($_REQUEST["feed_id"]);
+ $rc = 2; // failed
if (is_file($icon_file) && $feed_id) {
if (filesize($icon_file) < 65535) {
@@ -492,21 +493,15 @@ class Pref_Feeds extends Handler_Protected {
$rc = 0;
}
- } else {
- $rc = 2;
}
} else {
$rc = 1;
}
- } else {
- $rc = 2;
}
- @unlink($icon_file);
+ if (is_file($icon_file)) @unlink($icon_file);
- print "<script type=\"text/javascript\">";
- print "parent.CommonDialogs.uploadIconHandler($rc);";
- print "</script>";
+ print $rc;
return;
}
@@ -531,16 +526,16 @@ class Pref_Feeds extends Handler_Protected {
print_hidden("op", "pref-feeds");
print_hidden("method", "editSave");
- print "<div class=\"dlgSec\">".__("Feed")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Feed")."</header>";
+ print "<section>";
/* Title */
print "<fieldset>";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+ print "<input dojoType='dijit.form.ValidationTextBox' required='1'
placeHolder=\"".__("Feed Title")."\"
- style=\"font-size : 16px; width: 500px\" name=\"title\" value=\"$title\">";
+ style='font-size : 16px; width: 500px' name='title' value=\"$title\">";
print "</fieldset>";
@@ -551,10 +546,10 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset>";
print "<label>" . __('URL:') . "</label> ";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+ print "<input dojoType='dijit.form.ValidationTextBox' required='1'
placeHolder=\"".__("Feed URL")."\"
- regExp='^(http|https)://.*' style=\"width : 300px\"
- name=\"feed_url\" value=\"$feed_url\">";
+ regExp='^(http|https)://.*' style='width : 300px'
+ name='feed_url' value=\"$feed_url\">";
$last_error = $row["last_error"];
@@ -576,7 +571,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Place in category:') . "</label> ";
print_feed_cat_select("cat_id", $cat_id,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "</fieldset>";
}
@@ -588,10 +583,10 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset>";
print "<label>" . __('Site URL:') . "</label> ";
- print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+ print "<input dojoType='dijit.form.ValidationTextBox' required='1'
placeHolder=\"".__("Site URL")."\"
- regExp='^(http|https)://.*' style=\"width : 300px\"
- name=\"site_url\" value=\"$site_url\">";
+ regExp='^(http|https)://.*' style='width : 300px'
+ name='site_url' value=\"$site_url\">";
print "</fieldset>";
@@ -600,19 +595,22 @@ class Pref_Feeds extends Handler_Protected {
if (DB_TYPE == "pgsql") {
$feed_language = $row["feed_language"];
+ if (!$feed_language)
+ $feed_language = get_pref('DEFAULT_SEARCH_LANGUAGE');
+
print "<fieldset>";
print "<label>" . __('Language:') . "</label> ";
print_select("feed_language", $feed_language, $this::get_ts_languages(),
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "</fieldset>";
}
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Update")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Update")."</header>";
+ print "<section>";
/* Update Interval */
@@ -623,7 +621,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>".__("Interval:")."</label> ";
print_select_hash("update_interval", $update_interval, $update_intervals,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "</fieldset>";
@@ -636,12 +634,12 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Article purging:') . "</label> ";
print_select_hash("purge_interval", $purge_interval, $purge_intervals,
- 'dojoType="dijit.form.Select" ' .
+ 'dojoType="fox.form.Select" ' .
((FORCE_ARTICLE_PURGE == 0) ? "" : 'disabled="1"'));
print "</fieldset>";
- print "</div>";
+ print "</section>";
$auth_login = htmlspecialchars($row["auth_login"]);
$auth_pass = htmlspecialchars($row["auth_pass"]);
@@ -650,58 +648,40 @@ class Pref_Feeds extends Handler_Protected {
$auth_style = $auth_enabled ? '' : 'display: none';
print "<div id='feedEditDlg_loginContainer' style='$auth_style'>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Authentication")."</header>";
+ print "<section>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\" id=\"feedEditDlg_login\"
- placeHolder=\"".__("Login")."\"
- autocomplete=\"new-password\"
- name=\"auth_login\" value=\"$auth_login\">";
+ print "<input dojoType='dijit.form.TextBox' id='feedEditDlg_login'
+ placeHolder='".__("Login")."'
+ autocomplete='new-password'
+ name='auth_login' value=\"$auth_login\">";
- print "</fieldset>";
- print "<fieldset>";
+ print "</fieldset><fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\"
- autocomplete=\"new-password\"
- placeHolder=\"".__("Password")."\"
+ print "<input dojoType='dijit.form.TextBox' type='password' name='auth_pass'
+ autocomplete='new-password'
+ placeHolder='".__("Password")."'
value=\"$auth_pass\">";
- print "<div dojoType=\"dijit.Tooltip\" connectId=\"feedEditDlg_login\" position=\"below\">
+ print "<div dojoType='dijit.Tooltip' connectId='feedEditDlg_login' position='below'>
".__('<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds.')."
</div>";
print "</fieldset>";
- print "</div></div>";
+ print "</section></div>";
$auth_checked = $auth_enabled ? 'checked' : '';
- print "<div style=\"clear : both\">
- <input type=\"checkbox\" $auth_checked name=\"need_auth\" dojoType=\"dijit.form.CheckBox\" id=\"feedEditDlg_loginCheck\"
+ print "<label class='checkbox'>
+ <input type='checkbox' $auth_checked name='need_auth' dojoType='dijit.form.CheckBox' id='feedEditDlg_loginCheck'
onclick='displayIfChecked(this, \"feedEditDlg_loginContainer\")'>
- <label for=\"feedEditDlg_loginCheck\">".
- __('This feed requires authentication.')."</div>";
+ ".__('This feed requires authentication.')."</label>";
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Options').'">';
- //print "<div class=\"dlgSec\">".__("Options")."</div>";
- print "<div class=\"dlgSecSimple\">";
-
- $private = $row["private"];
-
- if ($private) {
- $checked = "checked=\"1\"";
- } else {
- $checked = "";
- }
-
- print "<fieldset class='narrow'>";
-
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"private\" id=\"private\"
- $checked> ".__('Hide from Popular feeds')."</label>";
-
- print "</fieldset>";
+ print "<section class='narrow'>";
$include_in_digest = $row["include_in_digest"];
@@ -745,9 +725,8 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"hide_images\"
- name=\"hide_images\"
- $checked> ".__('Do not embed media')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='hide_images'
+ name='hide_images' $checked> ".__('Do not embed media')."</label>";
print "</fieldset>";
@@ -761,9 +740,8 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"cache_images\"
- name=\"cache_images\"
- $checked> ". __('Cache media')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='cache_images'
+ name='cache_images' $checked> ". __('Cache media')."</label>";
print "</fieldset>";
@@ -777,41 +755,32 @@ class Pref_Feeds extends Handler_Protected {
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"mark_unread_on_update\"
- name=\"mark_unread_on_update\"
- $checked> ".__('Mark updated articles as unread')."</label>";
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='mark_unread_on_update'
+ name='mark_unread_on_update' $checked> ".__('Mark updated articles as unread')."</label>";
print "</fieldset>";
- print "</div>";
-
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Icon').'">';
/* Icon */
- print "<div class=\"dlgSecSimple\">";
-
- print "<img class=\"feedIcon\" src=\"".Feeds::getFeedIcon($feed_id)."\">";
+ print "<img class='feedIcon feed-editor-icon' src=\"".Feeds::getFeedIcon($feed_id)."\">";
- print "<iframe name=\"icon_upload_iframe\"
- style=\"width: 400px; height: 100px; display: none;\"></iframe>";
-
- print "<form style='display : block' target=\"icon_upload_iframe\"
- enctype=\"multipart/form-data\" method=\"POST\"
- action=\"backend.php\">
- <label class=\"dijitButton\">".__("Choose file...")."
- <input style=\"display: none\" id=\"icon_file\" size=\"10\" name=\"icon_file\" type=\"file\">
+ print "<form onsubmit='return false;' id='feed_icon_upload_form'
+ enctype='multipart/form-data' method='POST'>
+ <label class='dijitButton'>".__("Choose file...")."
+ <input style='display: none' id='icon_file' size='10' name='icon_file' type='file'>
</label>
- <input type=\"hidden\" name=\"op\" value=\"pref-feeds\">
- <input type=\"hidden\" name=\"feed_id\" value=\"$feed_id\">
- <input type=\"hidden\" name=\"method\" value=\"uploadicon\">
- <button class=\"\" dojoType=\"dijit.form.Button\" onclick=\"return CommonDialogs.uploadFeedIcon();\"
- type=\"submit\">".__('Replace')."</button>
- <button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"return CommonDialogs.removeFeedIcon($feed_id);\"
- type=\"submit\">".__('Remove')."</button>
+ <input type='hidden' name='op' value='pref-feeds'>
+ <input type='hidden' name='feed_id' value='$feed_id'>
+ <input type='hidden' name='method' value='uploadicon'>
+ <button dojoType='dijit.form.Button' onclick=\"return CommonDialogs.uploadFeedIcon();\"
+ type='submit'>".__('Replace')."</button>
+ <button class='alt-danger' dojoType='dijit.form.Button' onclick=\"return CommonDialogs.removeFeedIcon($feed_id);\"
+ type='submit'>".__('Remove')."</button>
</form>";
- print "</div>";
+ print "</section>";
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Plugins').'">';
@@ -822,16 +791,12 @@ class Pref_Feeds extends Handler_Protected {
$title = htmlspecialchars($title, ENT_QUOTES);
- print "<div class='dlgButtons'>
- <div style=\"float : left\">
- <button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick='return CommonDialogs.unsubscribeFeed($feed_id, \"$title\")'>".
- __('Unsubscribe')."</button>";
-
- print "</div>";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').execute()\">".__('Save')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').hide()\">".__('Cancel')."</button>
- </div>";
+ print "<footer>
+ <button style='float : left' class='alt-danger' dojoType='dijit.form.Button' onclick='return CommonDialogs.unsubscribeFeed($feed_id, \"$title\")'>".
+ __('Unsubscribe')."</button>
+ <button dojoType='dijit.form.Button' class='alt-primary' onclick=\"return dijit.byId('feedEditDlg').execute()\">".__('Save')."</button>
+ <button dojoType='dijit.form.Button' onclick=\"return dijit.byId('feedEditDlg').hide()\">".__('Cancel')."</button>
+ </footer>";
}
}
@@ -849,8 +814,8 @@ class Pref_Feeds extends Handler_Protected {
print_hidden("op", "pref-feeds");
print_hidden("method", "batchEditSave");
- print "<div class=\"dlgSec\">".__("Feed")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Feed")."</header>";
+ print "<section>";
/* Category */
@@ -861,7 +826,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Place in category:') . "</label> ";
print_feed_cat_select("cat_id", false,
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("cat_id");
@@ -875,17 +840,17 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Language:') . "</label> ";
print_select("feed_language", "", $this::get_ts_languages(),
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("feed_language");
print "</fieldset>";
}
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Update")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Update")."</header>";
+ print "<section>";
/* Update Interval */
@@ -894,7 +859,7 @@ class Pref_Feeds extends Handler_Protected {
print "<label>".__("Interval:")."</label> ";
print_select_hash("update_interval", "", $update_intervals,
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("update_interval");
@@ -909,100 +874,85 @@ class Pref_Feeds extends Handler_Protected {
print "<label>" . __('Article purging:') . "</label> ";
print_select_hash("purge_interval", "", $purge_intervals,
- 'disabled="1" dojoType="dijit.form.Select"');
+ 'disabled="1" dojoType="fox.form.Select"');
$this->batch_edit_cbox("purge_interval");
print "</fieldset>";
}
- print "</div>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "</section>";
+ print "<header>".__("Authentication")."</header>";
+ print "<section>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\"
- placeHolder=\"".__("Login")."\" disabled=\"1\"
- autocomplete=\"new-password\"
- name=\"auth_login\" value=\"\">";
+ print "<input dojoType='dijit.form.TextBox'
+ placeHolder=\"".__("Login")."\" disabled='1'
+ autocomplete='new-password'
+ name='auth_login' value=''>";
$this->batch_edit_cbox("auth_login");
- print "</fieldset>";
- print "<fieldset>";
-
- print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\"
- autocomplete=\"new-password\"
- placeHolder=\"".__("Password")."\" disabled=\"1\"
- value=\"\">";
+ print "<input dojoType='dijit.form.TextBox' type='password' name='auth_pass'
+ autocomplete='new-password'
+ placeHolder=\"".__("Password")."\" disabled='1'
+ value=''>";
$this->batch_edit_cbox("auth_pass");
print "</fieldset>";
- print "</div>";
- print "<div class=\"dlgSec\">".__("Options")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "</section>";
+ print "<header>".__("Options")."</header>";
+ print "<section>";
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" name=\"private\" id=\"private\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Hide from Popular feeds')."</label>";
-
- print "&nbsp;"; $this->batch_edit_cbox("private", "private_l");
-
- print "</fieldset><fieldset class='narrow'>";
-
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"include_in_digest\"
- name=\"include_in_digest\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Include in e-mail digest')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='include_in_digest'
+ name='include_in_digest' dojoType='dijit.form.CheckBox'>&nbsp;".__('Include in e-mail digest')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("include_in_digest", "include_in_digest_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"always_display_enclosures\"
- name=\"always_display_enclosures\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Always display image attachments')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='always_display_enclosures'
+ name='always_display_enclosures' dojoType='dijit.form.CheckBox'>&nbsp;".__('Always display image attachments')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("always_display_enclosures", "always_display_enclosures_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"hide_images\"
- name=\"hide_images\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;". __('Do not embed media')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='hide_images'
+ name='hide_images' dojoType='dijit.form.CheckBox'>&nbsp;". __('Do not embed media')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("hide_images", "hide_images_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"cache_images\"
- name=\"cache_images\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Cache media')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='cache_images'
+ name='cache_images' dojoType='dijit.form.CheckBox'>&nbsp;".__('Cache media')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("cache_images", "cache_images_l");
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input disabled=\"1\" type=\"checkbox\" id=\"mark_unread_on_update\"
- name=\"mark_unread_on_update\"
- dojoType=\"dijit.form.CheckBox\">&nbsp;".__('Mark updated articles as unread')."</label>";
+ print "<label class='checkbox'><input disabled='1' type='checkbox' id='mark_unread_on_update'
+ name='mark_unread_on_update' dojoType='dijit.form.CheckBox'>&nbsp;".__('Mark updated articles as unread')."</label>";
print "&nbsp;"; $this->batch_edit_cbox("mark_unread_on_update", "mark_unread_on_update_l");
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgButtons'>
- <button dojoType=\"dijit.form.Button\" type='submit' class='alt-primary'
+ print "<footer>
+ <button dojoType='dijit.form.Button' type='submit' class='alt-primary'
onclick=\"return dijit.byId('feedEditDlg').execute()\">".
__('Save')."</button>
- <button dojoType=\"dijit.form.Button\"
+ <button dojoType='dijit.form.Button'
onclick=\"return dijit.byId('feedEditDlg').hide()\">".
__('Cancel')."</button>
- </div>";
+ </footer>";
return;
}
@@ -1258,7 +1208,7 @@ class Pref_Feeds extends Handler_Protected {
print '<div dojoType="dijit.layout.BorderContainer" gutters="false">';
- print "<div region='top' dojoType=\"dijit.Toolbar\">"; #toolbar
+ print "<div region='top' dojoType=\"fox.Toolbar\">"; #toolbar
print "<div style='float : right; padding-right : 4px;'>
<input dojoType=\"dijit.form.TextBox\" id=\"feed_search\" size=\"20\" type=\"search\"
@@ -1267,7 +1217,7 @@ class Pref_Feeds extends Handler_Protected {
__('Search')."</button>
</div>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('feedTree').model.setAllChecked(true)\"
@@ -1276,7 +1226,7 @@ class Pref_Feeds extends Handler_Protected {
dojoType=\"dijit.MenuItem\">".__('None')."</div>";
print "</div></div>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Feeds')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"CommonDialogs.quickAddFeed()\"
@@ -1292,7 +1242,7 @@ class Pref_Feeds extends Handler_Protected {
print "</div></div>";
if (get_pref('ENABLE_FEED_CATS')) {
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Categories')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('feedTree').createCategory()\"
@@ -1499,16 +1449,14 @@ class Pref_Feeds extends Handler_Protected {
ORDER BY last_article");
$sth->execute([$_SESSION['uid']]);
- print "<p" .__("These feeds have not been updated with new content for 3 months (oldest first):") . "</p>";
-
- print "<div dojoType=\"dijit.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.Toolbar'>";
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"Tables.select('inactive-feeds-list', true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"Tables.select('inactive-feeds-list', false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
print "</div>"; #toolbar
@@ -1524,16 +1472,16 @@ class Pref_Feeds extends Handler_Protected {
print "<tr data-row-id='$feed_id'>";
print "<td width='5%' align='center'><input
- onclick='Tables.onRowChecked(this);' dojoType=\"dijit.form.CheckBox\"
- type=\"checkbox\"></td>";
+ onclick='Tables.onRowChecked(this);' dojoType='dijit.form.CheckBox'
+ type='checkbox'></td>";
print "<td>";
- print "<a class=\"visibleLink\" href=\"#\" ".
+ print "<a href='#' ".
"title=\"".__("Click to edit feed")."\" ".
"onclick=\"CommonDialogs.editFeed(".$line["id"].")\">".
htmlspecialchars($line["title"])."</a>";
- print "</td><td class=\"insensitive\" align='right'>";
+ print "</td><td class='text-muted' align='right'>";
print make_local_datetime($line['last_article'], false);
print "</td>";
print "</tr>";
@@ -1544,16 +1492,12 @@ class Pref_Feeds extends Handler_Protected {
print "</table>";
print "</div>";
- print "<div class='dlgButtons'>";
- print "<div style='float : left'>";
- print "<button class=\"alt-danger\" 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>";
+ print "<footer>
+ <button style='float : left' class=\"alt-danger\" dojoType='dijit.form.Button' onclick=\"dijit.byId('inactiveFeedsDlg').removeSelected()\">"
+ .__('Unsubscribe from selected feeds')."</button>
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('inactiveFeedsDlg').hide()\">"
+ .__('Close this window')."</button>
+ </footer>";
}
@@ -1562,8 +1506,8 @@ class Pref_Feeds extends Handler_Protected {
FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ?");
$sth->execute([$_SESSION['uid']]);
- print "<div dojoType=\"dijit.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.Toolbar\">";
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"Tables.select('error-feeds-list', true)\"
@@ -1594,7 +1538,7 @@ class Pref_Feeds extends Handler_Protected {
"onclick=\"CommonDialogs.editFeed(".$line["id"].")\">".
htmlspecialchars($line["title"])."</a>: ";
- print "<span class=\"insensitive\">";
+ print "<span class=\"text-muted\">";
print htmlspecialchars($line["last_error"]);
print "</span>";
@@ -1607,16 +1551,14 @@ class Pref_Feeds extends Handler_Protected {
print "</table>";
print "</div>";
- print "<div class='dlgButtons'>";
- print "<div style='float : left'>";
- print "<button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('errorFeedsDlg').removeSelected()\">"
+ print "<footer>";
+ print "<button style='float : left' class=\"alt-danger\" 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>";
+ print "</footer>";
}
private function remove_feed_category($id, $owner_uid) {
@@ -1665,8 +1607,8 @@ class Pref_Feeds extends Handler_Protected {
$new_feed_id = (int)$row['id'] + 1;
$sth = $pdo->prepare("INSERT INTO ttrss_archived_feeds
- (id, owner_uid, title, feed_url, site_url)
- SELECT ?, owner_uid, title, feed_url, site_url from ttrss_feeds
+ (id, owner_uid, title, feed_url, site_url, created)
+ SELECT ?, owner_uid, title, feed_url, site_url, NOW() from ttrss_feeds
WHERE id = ?");
$sth->execute([$new_feed_id, $id]);
@@ -1710,9 +1652,8 @@ class Pref_Feeds extends Handler_Protected {
print_hidden("op", "pref-feeds");
print_hidden("method", "batchaddfeeds");
- print "<div class='dlgSecHoriz'>".__("One valid feed per line (no detection is done)")."</div>";
-
- print "<div class='dlgSecCont'>";
+ print "<header class='horizontal'>".__("One valid feed per line (no detection is done)")."</header>";
+ print "<section>";
print "<textarea
style='font-size : 12px; width : 98%; height: 200px;'
@@ -1721,20 +1662,22 @@ class Pref_Feeds extends Handler_Protected {
if (get_pref('ENABLE_FEED_CATS')) {
print "<fieldset>";
print "<label>" . __('Place in category:') . "</label> ";
- print_feed_cat_select("cat", false, 'dojoType="dijit.form.Select"');
+ print_feed_cat_select("cat", false, 'dojoType="fox.form.Select"');
print "</fieldset>";
}
+ print "</section>";
+
print "<div id='feedDlg_loginContainer' style='display : none'>";
- print "<div class='dlgSec'>" . __("Authentication") . "</div>";
- print "<div class='dlgSecCont'>";
+ print "<header>" . __("Authentication") . "</header>";
+ print "<section>";
print "<input dojoType='dijit.form.TextBox' name='login' placeHolder=\"".__("Login")."\">
<input placeHolder=\"".__("Password")."\" dojoType=\"dijit.form.TextBox\" type='password'
autocomplete='new-password' name='pass''></div>";
- print "</div>";
+ print "</section>";
print "</div>";
print "<fieldset class='narrow'>
@@ -1743,10 +1686,10 @@ class Pref_Feeds extends Handler_Protected {
__('Feeds require authentication.')."</label></div>";
print "</fieldset>";
- print "<div class='dlgButtons'>
- <button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"return dijit.byId('batchSubDlg').execute()\">".__('Subscribe')."</button>
+ print "<footer>
+ <button dojoType='dijit.form.Button' type='submit' class='alt-primary'>".__('Subscribe')."</button>
<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('batchSubDlg').hide()\">".__('Cancel')."</button>
- </div>";
+ </footer>";
}
function batchAddFeeds() {
@@ -1755,6 +1698,13 @@ class Pref_Feeds extends Handler_Protected {
$login = clean($_REQUEST['login']);
$pass = trim(clean($_REQUEST['pass']));
+ $csth = $this->pdo->prepare("SELECT id FROM ttrss_feeds
+ WHERE feed_url = ? AND owner_uid = ?");
+
+ $isth = $this->pdo->prepare("INSERT INTO ttrss_feeds
+ (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method,auth_pass_encrypted)
+ VALUES (?, ?, '[Unknown]', ?, ?, ?, 0, false)");
+
foreach ($feeds as $feed) {
$feed = trim($feed);
@@ -1762,16 +1712,10 @@ class Pref_Feeds extends Handler_Protected {
$this->pdo->beginTransaction();
- $sth = $this->pdo->prepare("SELECT id FROM ttrss_feeds
- WHERE feed_url = ? AND owner_uid = ?");
- $sth->execute([$feed, $_SESSION['uid']]);
-
- if (!$sth->fetch()) {
- $sth = $this->pdo->prepare("INSERT INTO ttrss_feeds
- (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method,auth_pass_encrypted)
- VALUES (?, ?, '[Unknown]', ?, ?, ?, 0, false)");
+ $csth->execute([$feed, $_SESSION['uid']]);
- $sth->execute([$_SESSION['uid'], $feed, $cat_id ? $cat_id : null, $login, $pass]);
+ if (!$csth->fetch()) {
+ $isth->execute([$_SESSION['uid'], $feed, $cat_id ? $cat_id : null, $login, $pass]);
}
$this->pdo->commit();
diff --git a/classes/pref/filters.php b/classes/pref/filters.php
index 99bb885cf..041951b35 100755
--- a/classes/pref/filters.php
+++ b/classes/pref/filters.php
@@ -148,7 +148,7 @@ class Pref_Filters extends Handler_Protected {
$tmp = "<li><span class='title'>" . $line["title"] . "</span><br/>" .
"<span class='feed'>" . $line['feed_title'] . "</span>, <span class='date'>" . mb_substr($line["date_entered"], 0, 16) . "</span>" .
- "<div class='preview insensitive'>" . $content_preview . "</div>" .
+ "<div class='preview text-muted'>" . $content_preview . "</div>" .
"</li>";
array_push($rv, $tmp);
@@ -170,10 +170,10 @@ class Pref_Filters extends Handler_Protected {
print "<ul class='panel panel-scrollable list list-unstyled' id='prefFilterTestResultList'>";
print "</ul>";
- print "<div style='text-align : center'>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('filterTestDlg').hide()\">".
+ print "<footer class='text-center'>";
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('filterTestDlg').hide()\">".
__('Close this window')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -346,19 +346,17 @@ class Pref_Filters extends Handler_Protected {
print_hidden("method", "editSave");
print_hidden("csrf_token", $_SESSION['csrf_token']);
- print "<div class='dlgSec'>".__("Caption")."</div>";
- print "<div class='dlgSecCont'>";
-
+ print "<header>".__("Caption")."</header>";
+ print "<section>";
print "<input required=\"true\" dojoType=\"dijit.form.ValidationTextBox\" style=\"width : 20em;\" name=\"title\" value=\"$title\">";
+ print "</section>";
- print "</div>";
-
- print "<div class='dlgSecHoriz'>".__("Match")."</div>";
- print "<div class='dlgSecCont'>";
+ print "<header class='horizontal'>".__("Match")."</header>";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType=\"fox.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(true)\"
@@ -410,15 +408,15 @@ class Pref_Filters extends Handler_Protected {
print "</ul>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgSecHoriz'>".__("Apply actions")."</div>";
+ print "<header class='horizontal'>".__("Apply actions")."</header>";
- print "<div class='dlgSecCont'>";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType=\"fox.Toolbar\">";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(true)\"
@@ -456,10 +454,10 @@ class Pref_Filters extends Handler_Protected {
print "</ul>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgSec'>".__("Options")."</div>";
- print "<div class='dlgSecCont'>";
+ print "<header>".__("Options")."</header>";
+ print "<section>";
if ($enabled) {
$checked = "checked=\"1\"";
@@ -495,9 +493,9 @@ class Pref_Filters extends Handler_Protected {
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
print "<div style=\"float : left\">";
print "<button dojoType=\"dijit.form.Button\" class=\"alt-danger\" onclick=\"return dijit.byId('filterEditDlg').removeFilter()\">".
@@ -513,7 +511,7 @@ class Pref_Filters extends Handler_Protected {
print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -759,7 +757,7 @@ class Pref_Filters extends Handler_Protected {
print "<div dojoType='dijit.layout.BorderContainer' gutters='false'>";
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
- print "<div dojoType='dijit.Toolbar'>";
+ print "<div dojoType='fox.Toolbar'>";
if (array_key_exists("search", $_REQUEST)) {
$_SESSION["prefs_filter_search"] = $filter_search;
@@ -774,7 +772,7 @@ class Pref_Filters extends Handler_Protected {
__('Search')."</button>
</div>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType=\"fox.form.DropDownButton\">".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('filterTree').model.setAllChecked(true)\"
@@ -849,31 +847,30 @@ class Pref_Filters extends Handler_Protected {
print_hidden("method", "add");
print_hidden("csrf_token", $_SESSION['csrf_token']);
- print "<div class='dlgSec'>".__("Caption")."</div>";
+ print "<header>".__("Caption")."</header>";
- print "<div class='dlgSecCont'>";
- print "<input required=\"true\" dojoType=\"dijit.form.ValidationTextBox\" style=\"width : 20em;\" name=\"title\" value=\"\">";
- print "</div>";
-
- print "<div class='dlgSecHoriz'>".__("Match")."</div>";
+ print "<section>";
+ print "<input required='true' dojoType='dijit.form.ValidationTextBox' style='width : 20em;' name='title' value=''>";
+ print "</section>";
- print "<div class='dlgSecCont'>";
+ print "<header class='horizontal'>".__("Match")."</header >";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').addRule()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').addRule()\">".
__('Add')."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').deleteRule()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').deleteRule()\">".
__('Delete')."</button> ";
print "</div>";
@@ -882,74 +879,69 @@ class Pref_Filters extends Handler_Protected {
# print "<li>No rules</li>";
print "</ul>";
- print "</div>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgSecHoriz'>".__("Apply actions")."</div>";
+ print "<header class='horizontal'>".__("Apply actions")."</header>";
- print "<div class='dlgSecCont'>";
+ print "<section>";
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').addAction()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').addAction()\">".
__('Add')."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').deleteAction()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').deleteAction()\">".
__('Delete')."</button> ";
print "</div>";
-
print "<ul id='filterDlg_Actions'>";
# print "<li>No actions</li>";
print "</ul>";
- print "</div>";
- print "<div class='dlgSec'>".__("Options")."</div>";
+ print "</section>";
- print "<div class='dlgSecCont'>";
+ print "<header>".__("Options")."</header>";
+
+ print "<section>";
print "<fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"enabled\" id=\"enabled\" checked=\"1\">
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='enabled' id='enabled' checked='1'>
".__('Enabled')."</label>";
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"match_any_rule\" id=\"match_any_rule\">
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='match_any_rule' id='match_any_rule'>
".__('Match any rule')."</label>";
print "</fieldset><fieldset class='narrow'>";
- print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\">
+ print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='inverse' id='inverse'>
".__('Inverse matching')."</label>";
print "</fieldset>";
- print "</div>";
-
-// print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
- print "<button dojoType=\"dijit.form.Button\" class=\"alt-info\" onclick=\"return dijit.byId('filterEditDlg').test()\">".
+ print "<button dojoType='dijit.form.Button' class='alt-info' onclick=\"return dijit.byId('filterEditDlg').test()\">".
__('Test')."</button> ";
-
- print "<button dojoType=\"dijit.form.Button\" type=\"submit\" class=\"alt-primary\" onclick=\"return dijit.byId('filterEditDlg').execute()\">".
+ print "<button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"return dijit.byId('filterEditDlg').execute()\">".
__('Create')."</button> ";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterEditDlg').hide()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
}
@@ -979,9 +971,9 @@ class Pref_Filters extends Handler_Protected {
$filter_types[$line["id"]] = __($line["description"]);
}
- print "<div class=\"dlgSec\">".__("Match")."</div>";
+ print "<header>".__("Match")."</header>";
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
print "<input dojoType=\"dijit.form.ValidationTextBox\"
required=\"true\" id=\"filterDlg_regExp\"
@@ -1001,7 +993,7 @@ class Pref_Filters extends Handler_Protected {
print "<fieldset>";
print "<label style='display : inline'>". __("on field") . "</label> ";
print_select_hash("filter_type", $filter_type, $filter_types,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
print "<label style='padding-left : 10px; display : inline'>" . __("in") . "</label> ";
print "</fieldset>";
@@ -1015,9 +1007,9 @@ class Pref_Filters extends Handler_Protected {
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class='dlgButtons'>";
+ print "<footer>";
print "<button dojoType='dijit.form.Button' style='float : left' class='alt-info' onclick='window.open(\"https://tt-rss.org/wiki/ContentFilters\")'>
<i class='material-icons'>help</i> ".__("More info...")."</button>";
@@ -1028,7 +1020,7 @@ class Pref_Filters extends Handler_Protected {
print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterNewRuleDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -1046,12 +1038,12 @@ class Pref_Filters extends Handler_Protected {
print "<form name='filter_new_action_form' id='filter_new_action_form' onsubmit='return false;'>";
- print "<div class=\"dlgSec\">".__("Perform Action")."</div>";
+ print "<header>".__("Perform Action")."</header>";
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
- print "<select name=\"action_id\" dojoType=\"dijit.form.Select\"
- onchange=\"Filters.filterDlgCheckAction(this)\">";
+ print "<select name='action_id' dojoType='fox.form.Select'
+ onchange='Filters.filterDlgCheckAction(this)'>";
$res = $this->pdo->query("SELECT id,description FROM ttrss_filter_actions
ORDER BY name");
@@ -1072,16 +1064,16 @@ class Pref_Filters extends Handler_Protected {
$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 "<span id='filterDlg_paramBox' style=\"$param_box_hidden\">";
print " ";
//print " " . __("with parameters:") . " ";
- print "<input dojoType=\"dijit.form.TextBox\"
- id=\"filterDlg_actionParam\" style=\"$param_hidden\"
- name=\"action_param\" value=\"$action_param\">";
+ print "<input dojoType='dijit.form.TextBox'
+ id='filterDlg_actionParam' style=\"$param_hidden\"
+ name='action_param' value=\"$action_param\">";
print_label_select("action_param_label", $action_param,
- "id=\"filterDlg_actionParamLabel\" style=\"$label_param_hidden\"
- dojoType=\"dijit.form.Select\"");
+ "id='filterDlg_actionParamLabel' style=\"$label_param_hidden\"
+ dojoType='fox.form.Select'");
$filter_actions = PluginHost::getInstance()->get_filter_actions();
$filter_action_hash = array();
@@ -1104,24 +1096,24 @@ class Pref_Filters extends Handler_Protected {
}
print_select_hash("filterDlg_actionParamPlugin", $action_param, $filter_action_hash,
- "style=\"$plugin_param_hidden\" dojoType=\"dijit.form.Select\" $filter_plugin_disabled",
+ "style=\"$plugin_param_hidden\" dojoType='fox.form.Select' $filter_plugin_disabled",
"action_param_plugin");
print "</span>";
print "&nbsp;"; // tiny layout hack
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
+ print "<footer>";
- print "<button dojoType=\"dijit.form.Button\" class=\"alt-primary\" type=\"submit\" onclick=\"return dijit.byId('filterNewActionDlg').execute()\">".
+ print "<button dojoType='dijit.form.Button' class='alt-primary' type='submit' onclick=\"return dijit.byId('filterNewActionDlg').execute()\">".
($action ? __("Save action") : __('Add action'))."</button> ";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterNewActionDlg').hide()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterNewActionDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -1129,11 +1121,11 @@ class Pref_Filters extends Handler_Protected {
private function getFilterName($id) {
$sth = $this->pdo->prepare(
- "SELECT title,match_any_rule,COUNT(DISTINCT r.id) AS num_rules,COUNT(DISTINCT a.id) AS num_actions
+ "SELECT title,match_any_rule,f.inverse AS inverse,COUNT(DISTINCT r.id) AS num_rules,COUNT(DISTINCT a.id) AS num_actions
FROM ttrss_filters2 AS f LEFT JOIN ttrss_filters2_rules AS r
ON (r.filter_id = f.id)
LEFT JOIN ttrss_filters2_actions AS a
- ON (a.filter_id = f.id) WHERE f.id = ? GROUP BY f.title, f.match_any_rule");
+ ON (a.filter_id = f.id) WHERE f.id = ? GROUP BY f.title, f.match_any_rule, f.inverse");
$sth->execute([$id]);
if ($row = $sth->fetch()) {
@@ -1142,6 +1134,7 @@ class Pref_Filters extends Handler_Protected {
$num_rules = $row["num_rules"];
$num_actions = $row["num_actions"];
$match_any_rule = $row["match_any_rule"];
+ $inverse = $row["inverse"];
if (!$title) $title = __("[No caption]");
@@ -1160,6 +1153,7 @@ class Pref_Filters extends Handler_Protected {
}
if ($match_any_rule) $title .= " (" . __("matches any rule") . ")";
+ if ($inverse) $title .= " (" . __("inverse") . ")";
if ($num_actions > 0)
$actions = sprintf(_ngettext("%s (+%d action)", "%s (+%d actions)", (int) $num_actions), $actions, $num_actions);
diff --git a/classes/pref/labels.php b/classes/pref/labels.php
index 28befe42b..ec9667441 100644
--- a/classes/pref/labels.php
+++ b/classes/pref/labels.php
@@ -22,9 +22,9 @@ class Pref_Labels extends Handler_Protected {
print "<form onsubmit='return false;'>";
- print "<div class=\"dlgSec\">".__("Caption")."</div>";
+ print "<header>".__("Caption")."</header>";
- print "<div class=\"dlgSecCont\">";
+ print "<section>";
$fg_color = $line['fg_color'];
$bg_color = $line['bg_color'] ? $line['bg_color'] : '#fff7d5';
@@ -33,53 +33,47 @@ class Pref_Labels extends Handler_Protected {
id='labelEdit_caption' name='caption' dojoType='dijit.form.ValidationTextBox'
required='true' value=\"".htmlspecialchars($line['caption'])."\">";
- print "</div>";
- print "<div class=\"dlgSec\">" . __("Colors") . "</div>";
- print "<div class=\"dlgSecCont\">";
+ print "</section>";
- print "<table cellspacing=\"0\">";
-
- print "<tr><th style='text-align : left'>".__("Foreground:")."</th><th style='text-align : left'>".__("Background:").
- "</td></tr>";
+ print "<header>" . __("Colors") . "</header>";
+ print "<section>";
+ print "<table>";
+ print "<tr><th style='text-align : left'>".__("Foreground:")."</th><th style='text-align : left'>".__("Background:")."</th></tr>";
print "<tr><td style='padding-right : 10px'>";
- print "<input dojoType=\"dijit.form.TextBox\"
- style=\"display : none\" id=\"labelEdit_fgColor\"
- name=\"fg_color\" value=\"$fg_color\">";
- print "<input dojoType=\"dijit.form.TextBox\"
- style=\"display : none\" id=\"labelEdit_bgColor\"
- name=\"bg_color\" value=\"$bg_color\">";
+ print "<input dojoType='dijit.form.TextBox'
+ style='display : none' id='labelEdit_fgColor'
+ name='fg_color' value='$fg_color'>";
+ print "<input dojoType='dijit.form.TextBox'
+ style='display : none' id='labelEdit_bgColor'
+ name='bg_color' value='$bg_color'>";
- print "<div dojoType=\"dijit.ColorPalette\">
- <script type=\"dojo/method\" event=\"onChange\" args=\"fg_color\">
+ print "<div dojoType='dijit.ColorPalette'>
+ <script type='dojo/method' event='onChange' args='fg_color'>
dijit.byId('labelEdit_fgColor').attr('value', fg_color);
dijit.byId('labelEdit_caption').domNode.setStyle({color: fg_color});
</script>
</div>";
- print "</div>";
print "</td><td>";
- print "<div dojoType=\"dijit.ColorPalette\">
- <script type=\"dojo/method\" event=\"onChange\" args=\"bg_color\">
+ print "<div dojoType='dijit.ColorPalette'>
+ <script type='dojo/method' event='onChange' args='bg_color'>
dijit.byId('labelEdit_bgColor').attr('value', bg_color);
dijit.byId('labelEdit_caption').domNode.setStyle({backgroundColor: bg_color});
</script>
</div>";
- print "</div>";
print "</td></tr></table>";
- print "</div>";
-
-# print "</form>";
+ print "</section>";
- print "<div class=\"dlgButtons\">";
- print "<button dojoType=\"dijit.form.Button\" type=\"submit\" class=\"alt-primary\" onclick=\"dijit.byId('labelEditDlg').execute()\">".
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"dijit.byId('labelEditDlg').execute()\">".
__('Save')."</button>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('labelEditDlg').hide()\">".
+ print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('labelEditDlg').hide()\">".
__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
print "</form>";
}
@@ -257,9 +251,9 @@ class Pref_Labels extends Handler_Protected {
print "<div dojoType='dijit.layout.BorderContainer' gutters='false'>";
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
- print "<div dojoType='dijit.Toolbar'>";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType='dijit.form.DropDownButton'>".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
print "<div onclick=\"dijit.byId('labelTree').model.setAllChecked(true)\"
diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index fb1c1db06..cb19998ce 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -28,6 +28,7 @@ class Pref_Prefs extends Handler_Protected {
__('Feeds') => [
'DEFAULT_UPDATE_INTERVAL',
'FRESH_ARTICLE_MAX_AGE',
+ 'DEFAULT_SEARCH_LANGUAGE',
'BLOCK_SEPARATOR',
'ENABLE_FEED_CATS',
'BLOCK_SEPARATOR',
@@ -68,6 +69,7 @@ class Pref_Prefs extends Handler_Protected {
$this->pref_help = [
"ALLOW_DUPLICATE_POSTS" => array(__("Allow duplicate articles"), ""),
"BLACKLISTED_TAGS" => array(__("Blacklisted tags"), __("Never apply these tags automatically (comma-separated list).")),
+ "DEFAULT_SEARCH_LANGUAGE" => array(__("Default language"), __("Used for full-text search")),
"CDM_AUTO_CATCHUP" => array(__("Mark read on scroll"), __("Mark articles as read as you scroll past them")),
"CDM_EXPANDED" => array(__("Always expand articles")),
"COMBINED_DISPLAY_MODE" => array(__("Combined mode"), __("Show flat list of articles instead of separate panels")),
@@ -560,11 +562,15 @@ class Pref_Prefs extends Handler_Protected {
continue;
}
+ if ($pref_name == "DEFAULT_SEARCH_LANGUAGE" && DB_TYPE != "pgsql") {
+ continue;
+ }
+
if ($item = $prefs_available[$pref_name]) {
- print "<fieldset class='prefs-set'>";
+ print "<fieldset class='prefs'>";
- print "<label for='CB_$pref_name' style='width : 300px'>";
+ print "<label for='CB_$pref_name'>";
print $item['short_desc'] . ":";
print "</label>";
@@ -573,7 +579,7 @@ class Pref_Prefs extends Handler_Protected {
if ($pref_name == "USER_LANGUAGE") {
print_select_hash($pref_name, $value, get_translations(),
- "style='width : 220px; margin : 0px' dojoType='dijit.form.Select'");
+ "style='width : 220px; margin : 0px' dojoType='fox.form.Select'");
} else if ($pref_name == "USER_TIMEZONE") {
@@ -589,7 +595,7 @@ class Pref_Prefs extends Handler_Protected {
if (!theme_exists($value)) $value = "default.php";
- print "<select name='$pref_name' id='$pref_name' dojoType='dijit.form.Select'>";
+ print "<select name='$pref_name' id='$pref_name' dojoType='fox.form.Select'>";
$issel = $value == "default.php" ? "selected='selected'" : "";
print "<option $issel value='default.php'>".__("default")."</option>";
@@ -612,7 +618,11 @@ class Pref_Prefs extends Handler_Protected {
global $update_intervals_nodefault;
print_select_hash($pref_name, $value, $update_intervals_nodefault,
- 'dojoType="dijit.form.Select"');
+ 'dojoType="fox.form.Select"');
+ } else if ($pref_name == "DEFAULT_SEARCH_LANGUAGE") {
+
+ print_select($pref_name, $value, Pref_Feeds::get_ts_languages(),
+ 'dojoType="fox.form.Select"');
} else if ($type_name == "bool") {
@@ -685,7 +695,7 @@ class Pref_Prefs extends Handler_Protected {
}
if ($item['help_text'])
- print "<div class='help-text insensitive'><label for='CB_$pref_name'>".$item['help_text']."</label></div>";
+ print "<div class='help-text text-muted'><label for='CB_$pref_name'>".$item['help_text']."</label></div>";
print "</fieldset>";
}
@@ -705,7 +715,7 @@ class Pref_Prefs extends Handler_Protected {
print_hidden("op", "pref-prefs");
print_hidden("method", "saveconfig");
- print "<div dojoType=\"dijit.form.ComboButton\" type=\"submit\" class=\"alt-primary\">
+ print "<div dojoType=\"fox.form.ComboButton\" type=\"submit\" class=\"alt-primary\">
<span>".__('Save configuration')."</span>
<div dojoType=\"dijit.DropDownMenu\">
<div dojoType=\"dijit.MenuItem\"
@@ -763,18 +773,8 @@ class Pref_Prefs extends Handler_Protected {
print_warning("Your PHP configuration has open_basedir restrictions enabled. Some plugins relying on CURL for functionality may not work correctly.");
}
- print "<table width='100%' class='prefPluginsList'>";
-
- print "<tr><td colspan='5'><h2>".__("System plugins")."</h2>".
- format_notice(__("System plugins are enabled in <strong>config.php</strong> for all users.")).
- "</td></tr>";
-
- print "<tr>
- <th width=\"5%\">&nbsp;</th>
- <th width='10%'>".__('Plugin')."</th>
- <th width=''>".__('Description')."</th>
- <th width='5%'>".__('Version')."</th>
- <th width='10%'>".__('Author')."</th></tr>";
+ print "<h2>".__("System plugins")."</h2>";
+ print_notice("System plugins are enabled in <strong>config.php</strong> for all users.");
$system_enabled = array_map("trim", explode(",", PLUGINS));
$user_enabled = array_map("trim", explode(",", get_pref("_ENABLED_PLUGINS")));
@@ -793,102 +793,73 @@ class Pref_Prefs extends Handler_Protected {
$checked = "";
}
- print "<tr>";
-
- print "<td align='center'><input disabled='1'
- dojoType=\"dijit.form.CheckBox\" $checked
- type=\"checkbox\"></td>";
-
- $icon_class = $checked ? "plugin-enabled" : "plugin-disabled";
+ print "<fieldset class='prefs plugin'>
+ <label>$name:</label>
+ <label class='checkbox description text-muted' id='PLABEL-$name'>
+ <input disabled='1'
+ dojoType='dijit.form.CheckBox' $checked type='checkbox'>
+ ".htmlspecialchars($about[1]). "</label>";
- print "<td><label><i class='material-icons $icon_class'>extension</i> $name</label></td>";
- print "<td>" . htmlspecialchars($about[1]);
- if (@$about[4]) {
- print " &mdash; <a target=\"_blank\" rel=\"noopener noreferrer\" class=\"visibleLink\"
- href=\"".htmlspecialchars($about[4])."\">".__("more info")."</a>";
- }
- print "</td>";
- print "<td>" . htmlspecialchars(sprintf("%.2f", $about[0])) . "</td>";
- print "<td>" . htmlspecialchars($about[2]) . "</td>";
-
- if (count($tmppluginhost->get_all($plugin)) > 0) {
- if (in_array($name, $system_enabled)) {
- print "<td><a href='#' onclick=\"Helpers.clearPluginData('$name')\"
- class='visibleLink'>".__("Clear data")."</a></td>";
+ if (@$about[4]) {
+ print "<button dojoType='dijit.form.Button' class='alt-info'
+ onclick='window.open(\"".htmlspecialchars($about[4])."\")'>
+ <i class='material-icons'>open_in_new</i> ".__("More info...")."</button>";
}
- }
- print "</tr>";
+ print "<div dojoType='dijit.Tooltip' connectId='PLABEL-$name' position='after'>".
+ htmlspecialchars(T_sprintf("v%.2f, by %s", $about[0], $about[2])).
+ "</div>";
+
+ print "</fieldset>";
}
}
- print "<tr><td colspan='4'><br/><h2>".__("User plugins")."</h2></td></tr>";
-
- print "<tr>
- <th width=\"5%\">&nbsp;</th>
- <th width='10%'>".__('Plugin')."</th>
- <th width=''>".__('Description')."</th>
- <th width='5%'>".__('Version')."</th>
- <th width='10%'>".__('Author')."</th></tr>";
-
+ print "<h2>".__("User plugins")."</h2>";
foreach ($tmppluginhost->get_plugins() as $name => $plugin) {
$about = $plugin->about();
if (!$about[3]) {
+ $checked = "";
+ $disabled = "";
+
if (in_array($name, $system_enabled)) {
$checked = "checked='1'";
$disabled = "disabled='1'";
- $rowclass = '';
} else if (in_array($name, $user_enabled)) {
$checked = "checked='1'";
- $disabled = "";
- $rowclass = "Selected";
- } else {
- $checked = "";
- $disabled = "";
- $rowclass = '';
- }
-
- print "<tr class='$rowclass'>";
-
- $icon_class = $checked ? "plugin-enabled" : "plugin-disabled";
-
- print "<td align='center'><input id='FPCHK-$name' name='plugins[]' value='$name' onclick='Tables.onRowChecked(this);'
- dojoType=\"dijit.form.CheckBox\" $checked $disabled
- type=\"checkbox\"></td>";
-
- print "<td><label for='FPCHK-$name'><i class='material-icons $icon_class'>extension</i> $name</label></td>";
- print "<td><label for='FPCHK-$name'>" . htmlspecialchars($about[1]) . "</label>";
- if (@$about[4]) {
- print " &mdash; <a target=\"_blank\" rel=\"noopener noreferrer\" class=\"visibleLink\"
- href=\"".htmlspecialchars($about[4])."\">".__("more info")."</a>";
}
- print "</td>";
- print "<td>" . htmlspecialchars(sprintf("%.2f", $about[0])) . "</td>";
- print "<td>" . htmlspecialchars($about[2]) . "</td>";
+ print "<fieldset class='prefs plugin'>
+ <label>$name:</label>
+ <label class='checkbox description text-muted' id='PLABEL-$name'>
+ <input name='plugins[]' value='$name' dojoType='dijit.form.CheckBox' $checked $disabled type='checkbox'>
+ ".htmlspecialchars($about[1])."</label>";
if (count($tmppluginhost->get_all($plugin)) > 0) {
if (in_array($name, $system_enabled) || in_array($name, $user_enabled)) {
- print "<td><a href='#' onclick=\"Helpers.clearPluginData('$name')\" class='visibleLink'>".__("Clear data")."</a></td>";
+ print " <button dojoType='dijit.form.Button'
+ onclick=\"Helpers.clearPluginData('$name')\">
+ <i class='material-icons'>clear</i> ".__("Clear data")."</button>";
}
}
- print "</tr>";
-
+ if (@$about[4]) {
+ print " <button dojoType='dijit.form.Button' class='alt-info'
+ onclick='window.open(\"".htmlspecialchars($about[4])."\")'>
+ <i class='material-icons'>open_in_new</i> ".__("More info...")."</button>";
+ }
+ print "<div dojoType='dijit.Tooltip' connectId='PLABEL-$name' position='after'>".
+ htmlspecialchars(T_sprintf("v%.2f, by %s", $about[0], $about[2])).
+ "</div>";
+ print "</fieldset>";
}
-
}
- print "</table>";
-
- //print "<p>" . __("You will need to reload Tiny Tiny RSS for plugin changes to take effect.") . "</p>";
-
print "</div>"; #content-pane
print '<div dojoType="dijit.layout.ContentPane" region="bottom">';
@@ -904,7 +875,6 @@ class Pref_Prefs extends Handler_Protected {
print "</form>";
-
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
"hook_prefs_tab", "prefPrefs");
@@ -1039,35 +1009,34 @@ class Pref_Prefs extends Handler_Protected {
print_hidden("key", "USER_STYLESHEET");
print "<textarea class='panel user-css-editor' dojoType='dijit.form.SimpleTextarea'
- style='font-size : 12px;'
- name='value'>$value</textarea>";
+ style='font-size : 12px;' name='value'>$value</textarea>";
- print "<div class='dlgButtons'>";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<footer>";
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('cssEditDlg').execute()\">".__('Save')."</button> ";
- print "<button dojoType=\"dijit.form.Button\"
+ print "<button dojoType='dijit.form.Button'
onclick=\"dijit.byId('cssEditDlg').hide()\">".__('Cancel')."</button>";
- print "</div>";
+ print "</footer>";
}
function editPrefProfiles() {
- print "<div dojoType=\"dijit.Toolbar\">";
+ print "<div dojoType='fox.Toolbar'>";
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"Tables.select('pref-profiles-list', true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"Tables.select('pref-profiles-list', false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<div style=\"float : right\">";
+ print "<div style='float : right'>";
- print "<input name=\"newprofile\" dojoType=\"dijit.form.ValidationTextBox\"
- required=\"1\">
- <button dojoType=\"dijit.form.Button\"
+ print "<input name='newprofile' dojoType='dijit.form.ValidationTextBox'
+ required='1'>
+ <button dojoType='dijit.form.Button'
onclick=\"dijit.byId('profileEditDlg').addProfile()\">".
__('Create profile')."</button></div>";
@@ -1113,10 +1082,10 @@ class Pref_Prefs extends Handler_Protected {
$is_active = "";
}
- print "<td><span dojoType=\"dijit.InlineEditBox\"
- width=\"300px\" autoSave=\"false\"
- profile-id=\"$profile_id\">" . $edit_title .
- "<script type=\"dojo/method\" event=\"onChange\" args=\"item\">
+ print "<td><span dojoType='dijit.InlineEditBox'
+ width='300px' autoSave='false'
+ profile-id='$profile_id'>" . $edit_title .
+ "<script type='dojo/method' event='onChange' args='item'>
var elem = this;
dojo.xhrPost({
url: 'backend.php',
@@ -1137,17 +1106,14 @@ class Pref_Prefs extends Handler_Protected {
print "</form>";
print "</div>";
- print "<div class='dlgButtons'>
- <div style='float : left'>
- <button class=\"alt-danger\" dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').removeSelected()\">".
+ print "<footer>
+ <button style='float : left' class='alt-danger' dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').removeSelected()\">".
__('Remove selected profiles')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').activateProfile()\">".
+ <button dojoType='dijit.form.Button' class='alt-primary' type='submit' onclick=\"dijit.byId('profileEditDlg').activateProfile()\">".
__('Activate profile')."</button>
- </div>";
-
- print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('profileEditDlg').hide()\">".
- __('Close this window')."</button>";
- print "</div>";
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('profileEditDlg').hide()\">".
+ __('Cancel')."</button>";
+ print "</footer>";
}
diff --git a/classes/pref/users.php b/classes/pref/users.php
index 86dd8aac1..680290b74 100644
--- a/classes/pref/users.php
+++ b/classes/pref/users.php
@@ -20,7 +20,7 @@ class Pref_Users extends Handler_Protected {
function edit() {
global $access_level_names;
- print "<form id=\"user_edit_form\" onsubmit='return false' dojoType=\"dijit.form.Form\">";
+ print "<form id='user_edit_form' onsubmit='return false' dojoType='dijit.form.Form'>";
print '<div dojoType="dijit.layout.TabContainer" style="height : 400px">
<div dojoType="dijit.layout.ContentPane" title="'.__('Edit user').'">';
@@ -44,53 +44,59 @@ class Pref_Users extends Handler_Protected {
$sel_disabled = ($id == $_SESSION["uid"] || $login == "admin") ? "disabled" : "";
- print "<div class=\"dlgSec\">".__("User")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("User")."</header>";
+ print "<section>";
if ($sel_disabled) {
print_hidden("login", "$login");
}
- print "<input size=\"30\" style=\"font-size : 16px\"
- dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
- $sel_disabled
- name=\"login\" value=\"$login\">";
+ print "<fieldset>";
+ print "<label>" . __("Login:") . "</label>";
+ print "<input style='font-size : 16px'
+ dojoType='dijit.form.ValidationTextBox' required='1'
+ $sel_disabled name='login' value=\"$login\">";
+ print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Authentication")."</header>";
+ print "<section>";
print "<fieldset>";
- print __('Access level: ') . " ";
+ print "<label>" . __('Access level: ') . "</label> ";
if (!$sel_disabled) {
print_select_hash("access_level", $access_level, $access_level_names,
- "dojoType=\"dijit.form.Select\" $sel_disabled");
+ "dojoType=\"fox.form.Select\" $sel_disabled");
} else {
print_select_hash("", $access_level, $access_level_names,
- "dojoType=\"dijit.form.Select\" $sel_disabled");
+ "dojoType=\"fox.form.Select\" $sel_disabled");
print_hidden("access_level", "$access_level");
}
print "</fieldset>";
print "<fieldset>";
- print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" size=\"20\" placeholder=\"Change password\"
- name=\"password\">";
+ print "<label>" . __("New password:") . "</label> ";
+ print "<input dojoType='dijit.form.TextBox' type='password' size='20' placeholder='Change password'
+ name='password'>";
print "</fieldset>";
- print "</div>";
+ print "</section>";
- print "<div class=\"dlgSec\">".__("Options")."</div>";
- print "<div class=\"dlgSecCont\">";
+ print "<header>".__("Options")."</header>";
+ print "<section>";
- print "<input dojoType=\"dijit.form.TextBox\" size=\"30\" name=\"email\" placeholder=\"E-mail\"
- value=\"$email\">";
+ print "<fieldset>";
+ print "<label>" . __("E-mail:") . "</label> ";
+ print "<input dojoType='dijit.form.TextBox' size='30' name='email'
+ value=\"$email\">";
+ print "</fieldset>";
- print "</div>";
+ print "</section>";
print "</table>";
@@ -103,11 +109,12 @@ class Pref_Users extends Handler_Protected {
print '</div>';
print '</div>';
- print "<div class=\"dlgButtons\">
- <button dojoType=\"dijit.form.Button\" class=\"alt-primary\" type=\"submit\" onclick=\"dijit.byId('userEditDlg').execute()\">".
+ print "<footer>
+ <button dojoType='dijit.form.Button' class='alt-primary' type='submit' onclick=\"dijit.byId('userEditDlg').execute()\">".
__('Save')."</button>
- <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('userEditDlg').hide()\">".
- __('Cancel')."</button></div>";
+ <button dojoType='dijit.form.Button' onclick=\"dijit.byId('userEditDlg').hide()\">".
+ __('Cancel')."</button>
+ </footer>";
print "</form>";
@@ -224,7 +231,7 @@ class Pref_Users extends Handler_Protected {
function add() {
$login = trim(clean($_REQUEST["login"]));
- $tmp_user_pwd = make_password(8);
+ $tmp_user_pwd = make_password();
$salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
$pwd_hash = encrypt_password($tmp_user_pwd, $salt, true);
@@ -264,21 +271,19 @@ class Pref_Users extends Handler_Protected {
}
}
- static function resetUserPassword($uid, $show_password) {
+ static function resetUserPassword($uid, $format_output = false) {
$pdo = Db::pdo();
- $sth = $pdo->prepare("SELECT login, email
- FROM ttrss_users WHERE id = ?");
+ $sth = $pdo->prepare("SELECT login FROM ttrss_users WHERE id = ?");
$sth->execute([$uid]);
if ($row = $sth->fetch()) {
$login = $row["login"];
- $email = $row["email"];
$new_salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
- $tmp_user_pwd = make_password(8);
+ $tmp_user_pwd = make_password();
$pwd_hash = encrypt_password($tmp_user_pwd, $new_salt, true);
@@ -287,44 +292,19 @@ class Pref_Users extends Handler_Protected {
WHERE id = ?");
$sth->execute([$pwd_hash, $new_salt, $uid]);
- if ($show_password) {
- print_notice(T_sprintf("Changed password of user %s to %s", $login, $tmp_user_pwd));
- } else {
- print_notice(T_sprintf("Sending new password of user %s to %s", $login, $email));
-
- if ($email) {
- require_once "lib/MiniTemplator.class.php";
-
- $tpl = new MiniTemplator;
-
- $tpl->readTemplateFromFile("templates/resetpass_template.txt");
+ $message = T_sprintf("Changed password of user %s to %s", "<strong>$login</strong>", "<strong>$tmp_user_pwd</strong>");
- $tpl->setVariable('LOGIN', $login);
- $tpl->setVariable('NEWPASS', $tmp_user_pwd);
-
- $tpl->addBlock('message');
-
- $message = "";
-
- $tpl->generateOutputToString($message);
-
- $mailer = new Mailer();
-
- $rc = $mailer->mail(["to_name" => $login,
- "to_address" => $email,
- "subject" => __("[tt-rss] Password change notification"),
- "message" => $message]);
-
- if (!$rc) print_error($mailer->error());
- }
- }
+ if ($format_output)
+ print_notice($message);
+ else
+ print $message;
}
}
function resetPass() {
$uid = clean($_REQUEST["id"]);
- Pref_Users::resetUserPassword($uid, true);
+ Pref_Users::resetUserPassword($uid);
}
function index() {
@@ -333,7 +313,7 @@ class Pref_Users extends Handler_Protected {
print "<div dojoType='dijit.layout.BorderContainer' gutters='false'>";
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
- print "<div dojoType='dijit.Toolbar'>";
+ print "<div dojoType='fox.Toolbar'>";
$user_search = trim(clean($_REQUEST["search"]));
@@ -344,9 +324,9 @@ class Pref_Users extends Handler_Protected {
}
print "<div style='float : right; padding-right : 4px;'>
- <input dojoType=\"dijit.form.TextBox\" id=\"user_search\" size=\"20\" type=\"search\"
+ <input dojoType='dijit.form.TextBox' id='user_search' size='20' type='search'
value=\"$user_search\">
- <button dojoType=\"dijit.form.Button\" oncl1ick=\"Users.reload()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.reload()'>".
__('Search')."</button>
</div>";
@@ -356,23 +336,23 @@ class Pref_Users extends Handler_Protected {
$sort = "login";
}
- print "<div dojoType=\"dijit.form.DropDownButton\">".
+ print "<div dojoType='fox.form.DropDownButton'>".
"<span>" . __('Select')."</span>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+ print "<div dojoType='dijit.Menu' style='display: none'>";
print "<div onclick=\"Tables.select('prefUserList', true)\"
- dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+ dojoType='dijit.MenuItem'>".__('All')."</div>";
print "<div onclick=\"Tables.select('prefUserList', false)\"
- dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+ dojoType='dijit.MenuItem'>".__('None')."</div>";
print "</div></div>";
- print "<button dojoType=\"dijit.form.Button\" onclick=\"Users.add()\">".__('Create user')."</button>";
+ print "<button dojoType='dijit.form.Button' onclick='Users.add()'>".__('Create user')."</button>";
print "
- <button dojoType=\"dijit.form.Button\" onclick=\"Users.editSelected()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.editSelected()'>".
__('Edit')."</button dojoType=\"dijit.form.Button\">
- <button dojoType=\"dijit.form.Button\" onclick=\"Users.removeSelected()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.removeSelected()'>".
__('Remove')."</button dojoType=\"dijit.form.Button\">
- <button dojoType=\"dijit.form.Button\" onclick=\"Users.resetSelected()\">".
+ <button dojoType='dijit.form.Button' onclick='Users.resetSelected()'>".
__('Reset password')."</button dojoType=\"dijit.form.Button\">";
PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
@@ -400,16 +380,15 @@ class Pref_Users extends Handler_Protected {
ORDER BY $sort");
$sth->execute([":search" => $user_search ? "%$user_search%" : ""]);
- print "<p><table width=\"100%\" cellspacing=\"0\"
- class=\"prefUserList\" id=\"prefUserList\">";
+ print "<p><table width='100%' cellspacing='0' class='prefUserList' id='prefUserList'>";
- print "<tr class=\"title\">
- <td align='center' width=\"5%\">&nbsp;</td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('login')\">".__('Login')."</a></td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('access_level')\">".__('Access Level')."</a></td>
- <td width='10%'><a href=\"#\" onclick=\"Users.reload('num_feeds')\">".__('Subscribed feeds')."</a></td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('created')\">".__('Registered')."</a></td>
- <td width='20%'><a href=\"#\" onclick=\"Users.reload('last_login')\">".__('Last login')."</a></td></tr>";
+ print "<tr class='title'>
+ <td align='center' width='5%'>&nbsp;</td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('login')\">".__('Login')."</a></td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('access_level')\">".__('Access Level')."</a></td>
+ <td width='10%'><a href='#' onclick=\"Users.reload('num_feeds')\">".__('Subscribed feeds')."</a></td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('created')\">".__('Registered')."</a></td>
+ <td width='20%'><a href='#' onclick=\"Users.reload('last_login')\">".__('Last login')."</a></td></tr>";
$lnum = 0;
@@ -417,14 +396,14 @@ class Pref_Users extends Handler_Protected {
$uid = $line["id"];
- print "<tr data-row-id=\"$uid\" onclick='Users.edit($uid)'>";
+ print "<tr data-row-id='$uid' onclick='Users.edit($uid)'>";
$line["login"] = htmlspecialchars($line["login"]);
$line["created"] = make_local_datetime($line["created"], false);
$line["last_login"] = make_local_datetime($line["last_login"], false);
print "<td align='center'><input onclick='Tables.onRowChecked(this); event.stopPropagation();'
- dojoType=\"dijit.form.CheckBox\" type=\"checkbox\"></td>";
+ dojoType='dijit.form.CheckBox' type='checkbox'></td>";
print "<td title='".__('Click to edit')."'><i class='material-icons'>person</i> " . $line["login"] . "</td>";