mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-10-22 19:24:34 -04:00
Fix labels in anonymous mode (#5650)
* Fix labels in anonymous mode
fix https://github.com/FreshRSS/FreshRSS/issues/4305
* Show all tags
* Revert "Show all tags"
This reverts commit 24dfba5017.
* Add message when no labels
* fixed no label style
* i18n de translation
* Fix in non-anomymous mode
* No class in anonymous mode
---------
Co-authored-by: maTh <1645099+math-GH@users.noreply.github.com>
Co-authored-by: math-gh <>
This commit is contained in:
31 files changed
+123
-31
No files matched your search
@@ -17,9 +17,6 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
* underlying framework.
|
||||
*/
|
||||
public function firstAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess()) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
// If ajax request, we do not print layout
|
||||
$this->ajax = Minz_Request::paramBoolean('ajax');
|
||||
if ($this->ajax) {
|
||||
@@ -32,6 +29,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
* This action adds (checked=true) or removes (checked=false) a tag to an entry.
|
||||
*/
|
||||
public function tagEntryAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess()) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
if (Minz_Request::isPost()) {
|
||||
$id_tag = Minz_Request::paramInt('id_tag');
|
||||
$name_tag = Minz_Request::paramString('name_tag');
|
||||
@@ -64,6 +64,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
}
|
||||
|
||||
public function deleteAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess()) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
if (Minz_Request::isPost()) {
|
||||
$id_tag = Minz_Request::paramInt('id_tag');
|
||||
if ($id_tag !== 0) {
|
||||
@@ -82,6 +85,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
}
|
||||
|
||||
public function getTagsForEntryAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess() && !FreshRSS_Context::$system_conf->allow_anonymous) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
$this->view->_layout(null);
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
header('Cache-Control: private, no-cache, no-store, must-revalidate');
|
||||
@@ -91,6 +97,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
}
|
||||
|
||||
public function addAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess()) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
if (!Minz_Request::isPost()) {
|
||||
Minz_Error::error(405);
|
||||
}
|
||||
@@ -110,6 +119,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
* @throws Minz_PDOConnectionException|JsonException
|
||||
*/
|
||||
public function renameAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess()) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
if (!Minz_Request::isPost()) {
|
||||
Minz_Error::error(405);
|
||||
}
|
||||
@@ -139,6 +151,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
|
||||
}
|
||||
|
||||
public function indexAction(): void {
|
||||
if (!FreshRSS_Auth::hasAccess()) {
|
||||
Minz_Error::error(403);
|
||||
}
|
||||
$tagDAO = FreshRSS_Factory::createTagDao();
|
||||
$this->view->tags = $tagDAO->listTags() ?: [];
|
||||
}
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Požadavek selhal, to může být způsobeno problémy s připojení k internetu.',
|
||||
'title_new_articles' => 'FreshRSS: nové články!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Jsou dostupné nové články, klikněte pro obnovení stránky.',
|
||||
'should_be_activated' => 'JavaScript musí být povolen',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Eine Anfrage ist fehlgeschlagen, dies könnte durch Probleme mit der Internetverbindung verursacht worden sein.',
|
||||
'title_new_articles' => 'FreshRSS: neue Artikel!',
|
||||
),
|
||||
'labels_empty' => 'Keine Labels',
|
||||
'new_article' => 'Es gibt neue verfügbare Artikel. Klicken Sie, um die Seite zu aktualisieren.',
|
||||
'should_be_activated' => 'JavaScript muss aktiviert sein',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // TODO
|
||||
'title_new_articles' => 'FreshRSS: new articles!', // TODO
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'There are new articles available, click to refresh the page.', // TODO
|
||||
'should_be_activated' => 'JavaScript must be enabled', // TODO
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // IGNORE
|
||||
'title_new_articles' => 'FreshRSS: new articles!', // IGNORE
|
||||
),
|
||||
'labels_empty' => 'No labels', // IGNORE
|
||||
'new_article' => 'There are new articles available, click to refresh the page.', // IGNORE
|
||||
'should_be_activated' => 'JavaScript must be enabled', // IGNORE
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'A request has failed, it may have been caused by internet connection problems.',
|
||||
'title_new_articles' => 'FreshRSS: new articles!',
|
||||
),
|
||||
'labels_empty' => 'No labels',
|
||||
'new_article' => 'There are new articles available, click to refresh the page.',
|
||||
'should_be_activated' => 'JavaScript must be enabled',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'La petición ha fallado. Puede ser debido a problemas de conexión a internet.',
|
||||
'title_new_articles' => 'FreshRSS: ¡Nuevos artículos!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Hay nuevos artículos disponibles. Pincha para refrescar la página.',
|
||||
'should_be_activated' => 'JavaScript debe estar activado',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => ' یک درخواست شکست خورده است',
|
||||
'title_new_articles' => ' FreshRSS: مقالات جدید!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'مقالات جدیدی موجود است',
|
||||
'should_be_activated' => ' جاوا اسکریپت باید فعال باشد',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Une requête a échoué, cela peut être dû à des problèmes de connexion à Internet.',
|
||||
'title_new_articles' => 'FreshRSS : nouveaux articles !',
|
||||
),
|
||||
'labels_empty' => 'Pas d’étiquettes', // DIRTY
|
||||
'new_article' => 'Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.',
|
||||
'should_be_activated' => 'Le JavaScript doit être activé.',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // TODO
|
||||
'title_new_articles' => 'FreshRSS: מאמרים חדשים!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'מאמרים חדשים זמינים, לחצו לרענון העמוד.',
|
||||
'should_be_activated' => 'חובה להפעיל JavaScript',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Egy művelet nem sikerült, lehetséges hogy az internet kapcsolattal vannak problémák.',
|
||||
'title_new_articles' => 'FreshRSS: új cikkek!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Új cikkek elérhetőek, kattints a lap frissítéséhez.',
|
||||
'should_be_activated' => 'A JavaScript futtatásának engedélyezve kell lennie',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // TODO
|
||||
'title_new_articles' => 'FreshRSS: new articles!', // TODO
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'There are new articles available, click to refresh the page.', // TODO
|
||||
'should_be_activated' => 'JavaScript must be enabled', // TODO
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione',
|
||||
'title_new_articles' => 'Feed RSS Reader: nuovi articoli!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Sono disponibili nuovi articoli, clicca qui per caricarli.',
|
||||
'should_be_activated' => 'JavaScript deve essere abilitato',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'おそらくインターネット接続に問題があるため、リクエストは失敗しました。',
|
||||
'title_new_articles' => 'FreshRSS: 新規記事!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => '新しい記事があるのでクリックしてページをリフレッシュしてください。',
|
||||
'should_be_activated' => 'JavaScriptは有効になっている必要があります。',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => '요청한 작업을 수행할 수 없습니다. 인터넷 연결에 문제가 발생한 것 같습니다.',
|
||||
'title_new_articles' => 'FreshRSS: 새 글이 있습니다!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => '새 글이 있습니다. 여기를 클릭하면 페이지를 다시 불러옵니다.',
|
||||
'should_be_activated' => '자바스크립트를 사용하도록 설정해야합니다',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Pieprasījums nav izdevies, iespējams, to izraisījušas interneta savienojuma problēmas.',
|
||||
'title_new_articles' => 'FreshRSS: jauni raksti!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Ir pieejami jauni raksti, noklikšķiniet, lai atsvaidzinātu lapu..',
|
||||
'should_be_activated' => 'JavaScript jābūt ieslēgtam',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.',
|
||||
'title_new_articles' => 'FreshRSS: nieuwe artikelen!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Er zijn nieuwe artikelen beschikbaar. Klik om de pagina te vernieuwen.',
|
||||
'should_be_activated' => 'JavaScript moet aanstaan',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Una requèsta a fach meuca, aquò pòt venir d’un problèma de connexion Internet.',
|
||||
'title_new_articles' => 'FreshRSS : nòus articles !',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'I a d’articles nòus disponibles, clicatz per actualizar la pagina.',
|
||||
'should_be_activated' => 'JavaScript deu èsser activat',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Zapytanie nie powiodło się. Może to być spowodowane problemami z łącznością z internetem.',
|
||||
'title_new_articles' => 'FreshRSS: nowe wiadomości!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Dostępne są nowe wiadomości. Kliknij, aby odświeżyć stronę.',
|
||||
'should_be_activated' => 'JavaScript musi być włączony',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.',
|
||||
'title_new_articles' => 'FreshRSS: novos artigos!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Há novos artigos disponíveis, clique para atualizar a página.',
|
||||
'should_be_activated' => 'O JavaScript precisa estar ativo',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Запрос не удался. Возможно, это вызвано проблемами с подключением к Интернет.',
|
||||
'title_new_articles' => 'FreshRSS: новые статьи!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Появились новые статьи. Нажмите, чтобы обновить страницу.',
|
||||
'should_be_activated' => 'JavaScript должен быть включён',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Nepodarilo sa spracovať váš dopyt, pravdepodobne kvôli problému s pripojením do internetu.',
|
||||
'title_new_articles' => 'FreshRSS: nové články!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Našli sa nové články. Kliknite na obnovenie stránky.',
|
||||
'should_be_activated' => 'Musíte povoliť JavaScript',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => 'Hata. İnternet bağlantınızı kontrol edin.',
|
||||
'title_new_articles' => 'FreshRSS: yeni makaleler!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => 'Yeni makaleler mevcut. Sayfayı yenilemek için tıklayın.',
|
||||
'should_be_activated' => 'JavaScript aktif olmalıdır.',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => '请求失败,这可能是因为网络连接问题。',
|
||||
'title_new_articles' => 'FreshRSS: 新文章!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => '发现新文章,点击刷新页面。',
|
||||
'should_be_activated' => '必须启用 JavaScript',
|
||||
),
|
||||
|
||||
@@ -134,6 +134,7 @@ return array(
|
||||
'request_failed' => '請求失敗,這可能是因為網絡連接問題。',
|
||||
'title_new_articles' => 'FreshRSS: 新文章!',
|
||||
),
|
||||
'labels_empty' => 'No labels', // TODO
|
||||
'new_article' => '發現新文章,點擊刷新頁面。',
|
||||
'should_be_activated' => '必須啟用 JavaScript',
|
||||
),
|
||||
|
||||
@@ -65,6 +65,7 @@ echo htmlspecialchars(json_encode(array(
|
||||
'notif_body_unread_articles' => _t('gen.js.feedback.body_unread_articles'),
|
||||
'notif_request_failed' => _t('gen.js.feedback.request_failed'),
|
||||
'category_empty' => _t('gen.js.category_empty'),
|
||||
'labels_empty' => _t('gen.js.labels_empty'),
|
||||
'language' => FreshRSS_Context::$user_conf->language,
|
||||
),
|
||||
'icons' => array(
|
||||
|
||||
+44
-28
@@ -1300,47 +1300,63 @@ function loadDynamicTags(div) {
|
||||
return req.onerror(e);
|
||||
}
|
||||
|
||||
const li_item0 = document.createElement('li');
|
||||
li_item0.setAttribute('class', 'item addItem');
|
||||
if (!context.anonymous) {
|
||||
const li_item0 = document.createElement('li');
|
||||
li_item0.setAttribute('class', 'item addItem');
|
||||
|
||||
const label = document.createElement('label');
|
||||
label.setAttribute('class', 'noHover');
|
||||
const label = document.createElement('label');
|
||||
label.setAttribute('class', 'noHover');
|
||||
|
||||
const input_checkboxTag = document.createElement('input');
|
||||
input_checkboxTag.setAttribute('class', 'checkboxTag checkboxNewTag');
|
||||
input_checkboxTag.setAttribute('name', 't_0');
|
||||
input_checkboxTag.setAttribute('type', 'checkbox');
|
||||
const input_checkboxTag = document.createElement('input');
|
||||
input_checkboxTag.setAttribute('class', 'checkboxTag checkboxNewTag');
|
||||
input_checkboxTag.setAttribute('name', 't_0');
|
||||
input_checkboxTag.setAttribute('type', 'checkbox');
|
||||
|
||||
const input_newTag = document.createElement('input');
|
||||
input_newTag.setAttribute('type', 'text');
|
||||
input_newTag.setAttribute('name', 'newTag');
|
||||
input_newTag.addEventListener('keydown', function (ev) { if (ev.key.toUpperCase() == 'ENTER') { this.parentNode.previousSibling.click(); } });
|
||||
const input_newTag = document.createElement('input');
|
||||
input_newTag.setAttribute('type', 'text');
|
||||
input_newTag.setAttribute('name', 'newTag');
|
||||
input_newTag.addEventListener('keydown', function (ev) { if (ev.key.toUpperCase() == 'ENTER') { this.parentNode.previousSibling.click(); } });
|
||||
|
||||
const button_btn = document.createElement('button');
|
||||
button_btn.setAttribute('type', 'button');
|
||||
button_btn.setAttribute('class', 'btn');
|
||||
button_btn.addEventListener('click', function () { this.parentNode.parentNode.click(); });
|
||||
const button_btn = document.createElement('button');
|
||||
button_btn.setAttribute('type', 'button');
|
||||
button_btn.setAttribute('class', 'btn');
|
||||
button_btn.addEventListener('click', function () { this.parentNode.parentNode.click(); });
|
||||
|
||||
const text_plus = document.createTextNode('+');
|
||||
const text_plus = document.createTextNode('+');
|
||||
|
||||
const div_stick = document.createElement('div');
|
||||
div_stick.setAttribute('class', 'stick');
|
||||
const div_stick = document.createElement('div');
|
||||
div_stick.setAttribute('class', 'stick');
|
||||
|
||||
button_btn.appendChild(text_plus);
|
||||
div_stick.appendChild(input_newTag);
|
||||
div_stick.appendChild(button_btn);
|
||||
label.appendChild(input_checkboxTag);
|
||||
label.appendChild(div_stick);
|
||||
li_item0.appendChild(label);
|
||||
button_btn.appendChild(text_plus);
|
||||
div_stick.appendChild(input_newTag);
|
||||
div_stick.appendChild(button_btn);
|
||||
label.appendChild(input_checkboxTag);
|
||||
label.appendChild(div_stick);
|
||||
li_item0.appendChild(label);
|
||||
|
||||
div.querySelector('.dropdown-menu').appendChild(li_item0);
|
||||
div.querySelector('.dropdown-menu').appendChild(li_item0);
|
||||
}
|
||||
|
||||
let html = '';
|
||||
if (json && json.length) {
|
||||
let nbLabelsChecked = 0;
|
||||
for (let i = 0; i < json.length; i++) {
|
||||
const tag = json[i];
|
||||
html += '<li class="item"><label><input class="checkboxTag" name="t_' + tag.id + '" type="checkbox"' +
|
||||
(tag.checked ? ' checked="checked"' : '') + '> ' + tag.name + '</label></li>';
|
||||
if (context.anonymous && !tag.checked) {
|
||||
// In anomymous mode, show only the used tags
|
||||
continue;
|
||||
}
|
||||
if (tag.checked) {
|
||||
nbLabelsChecked++;
|
||||
}
|
||||
html += '<li class="item"><label><input ' +
|
||||
(context.anonymous ? '' : 'class="checkboxTag" ') +
|
||||
'name="t_' + tag.id + '"type="checkbox" ' +
|
||||
(context.anonymous ? 'disabled="disabled" ' : '') +
|
||||
(tag.checked ? 'checked="checked" ' : '') + '/> ' + tag.name + '</label></li>';
|
||||
}
|
||||
if (context.anonymous && nbLabelsChecked === 0) {
|
||||
html += '<li class="item"><span class="emptyLabels">' + context.i18n.labels_empty + '</span></li>';
|
||||
}
|
||||
}
|
||||
div.querySelector('.dropdown-menu').insertAdjacentHTML('beforeend', html);
|
||||
|
||||
@@ -378,6 +378,15 @@ form th {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.dropdown-menu input[type="checkbox"] {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.dropdown-menu .item .emptyLabels {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
|
||||
.item ~ .dropdown-header,
|
||||
.dropdown-section ~ .dropdown-section,
|
||||
.item.separator {
|
||||
|
||||
@@ -378,6 +378,15 @@ form th {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.dropdown-menu input[type="checkbox"] {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.dropdown-menu .item .emptyLabels {
|
||||
padding-right: 1rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
.item ~ .dropdown-header,
|
||||
.dropdown-section ~ .dropdown-section,
|
||||
.item.separator {
|
||||
|
||||
@@ -496,6 +496,15 @@ a:hover .icon {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.dropdown-menu input[type="checkbox"] {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.dropdown-menu .item .emptyLabels {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
|
||||
.item ~ .dropdown-header,
|
||||
.dropdown-section ~ .dropdown-section,
|
||||
.item.separator {
|
||||
|
||||
@@ -496,6 +496,15 @@ a:hover .icon {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.dropdown-menu input[type="checkbox"] {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.dropdown-menu .item .emptyLabels {
|
||||
padding-right: 1rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
.item ~ .dropdown-header,
|
||||
.dropdown-section ~ .dropdown-section,
|
||||
.item.separator {
|
||||
|
||||
Reference in new issue
Block a user