diff options
| author | 2020-07-23 11:31:38 +0200 | |
|---|---|---|
| committer | 2020-07-23 11:31:38 +0200 | |
| commit | 909fdaca3172c0e825c7e6268950e16bc5d3e4f3 (patch) | |
| tree | 1d71aaf56ec7d4e39b46ed669d0fb57df60eecd3 | |
| parent | 12d2baf64d3d6a1b95376460c7128a079dd1bac6 (diff) | |
Add tag management page (#3121)
The new page allows to create, delete and rename tags.
See #3058
36 files changed, 295 insertions, 1 deletions
diff --git a/app/Controllers/tagController.php b/app/Controllers/tagController.php index ba9efe2fc..c49a3fcc4 100644 --- a/app/Controllers/tagController.php +++ b/app/Controllers/tagController.php @@ -63,7 +63,7 @@ class FreshRSS_tag_Controller extends Minz_ActionController { } if (!$this->ajax) { Minz_Request::forward(array( - 'c' => 'index', + 'c' => 'tag', 'a' => 'index', ), true); } @@ -77,4 +77,42 @@ class FreshRSS_tag_Controller extends Minz_ActionController { $tagDAO = FreshRSS_Factory::createTagDao(); $this->view->tags = $tagDAO->getTagsForEntry($id_entry); } + + public function addAction() { + if (!Minz_Request::isPost()) { + Minz_Error::error(405); + } + + $name = Minz_Request::param('name'); + $tagDAO = FreshRSS_Factory::createTagDao(); + if (null === $tagDAO->searchByName($name)) { + $tagDAO->addTag(['name' => $name]); + Minz_Request::good('feedback.tag.created', ['c' => 'tag', 'a' => 'index'], true); + } + + Minz_Request::bad('feedback.tag.name_exists', ['c' => 'tag', 'a' => 'index'], true); + } + + public function renameAction() { + if (!Minz_Request::isPost()) { + Minz_Error::error(405); + } + + $name = Minz_Request::param('name'); + $tagDAO = FreshRSS_Factory::createTagDao(); + $newTag = $tagDAO->searchByName($name); + if (null === $newTag) { + $tagDAO->updateTag(Minz_Request::param('id_tag'), ['name' => $name]); + } else { + $tagDAO->updateEntryTag(Minz_Request::param('id_tag'), $newTag->id()); + $tagDAO->deleteTag(Minz_Request::param('id_tag')); + } + + Minz_Request::good('feedback.tag.renamed', ['c' => 'tag', 'a' => 'index'], true); + } + + public function indexAction() { + $tagDAO = FreshRSS_Factory::createTagDao(); + $this->view->tags = $tagDAO->listTags(); + } } diff --git a/app/Models/TagDAO.php b/app/Models/TagDAO.php index 05a88b182..854dc07f2 100644 --- a/app/Models/TagDAO.php +++ b/app/Models/TagDAO.php @@ -148,6 +148,28 @@ class FreshRSS_TagDAO extends Minz_ModelPdo implements FreshRSS_Searchable { } } + public function updateEntryTag($oldTagId, $newTagId) { + $sql = 'DELETE FROM `_entrytag` WHERE EXISTS (SELECT 1 FROM `_entrytag` AS e WHERE e.id_entry = `_entrytag`.id_entry AND e.id_tag = ? AND `_entrytag`.id_tag = ?)'; + $stm = $this->pdo->prepare($sql); + + if (!($stm && $stm->execute([$newTagId, $oldTagId]))) { + $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo(); + Minz_Log::error('SQL error moveTag: ' . $info[2]); + return false; + } + + $sql = 'UPDATE `_entrytag` SET id_tag = ? WHERE id_tag = ?'; + $stm = $this->pdo->prepare($sql); + + if ($stm && $stm->execute([$newTagId, $oldTagId])) { + return $stm->rowCount(); + } else { + $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo(); + Minz_Log::error('SQL error moveTag: ' . $info[2]); + return false; + } + } + public function searchById($id) { $sql = 'SELECT * FROM `_tag` WHERE id=?'; $stm = $this->pdo->prepare($sql); diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 842fadf56..33de7dd0f 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Odstranit', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Navštívit WWW stránku', 'submit' => 'Odeslat', 'truncate' => 'Smazat všechny články', diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index e3125e260..4bcff9dec 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Import / export', // TODO - Translation 'subscription_management' => 'Správa subskripcí', 'subscription_tools' => 'Subscription tools', // TODO - Translation + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Správa subskripcí', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Správa RSS kanálů', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation ), ); diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 75304e446..cfc3eafdb 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Entfernen', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Webseite ansehen', 'submit' => 'Abschicken', 'truncate' => 'Alle Artikel löschen', diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index a84394f36..4205d74df 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importieren / Exportieren', 'subscription_management' => 'Abonnementverwaltung', 'subscription_tools' => 'Abonnement-Tools', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Abonnementverwaltung', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Verwaltung der RSS-Feeds', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Abonnement-Tools', ), ); diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 846735161..80dae042b 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', 'purge' => 'Purge', 'remove' => 'Remove', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'See website', 'submit' => 'Submit', 'truncate' => 'Delete all articles', diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php index 08ec8bbbc..c4f33c105 100644 --- a/app/i18n/en-us/sub.php +++ b/app/i18n/en-us/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Import / export', 'subscription_management' => 'Subscription management', 'subscription_tools' => 'Subscription tools', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Subscription management', 'add' => 'Add a feed or category', 'add_category' => 'Add a category', 'add_feed' => 'Add a feed', + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'RSS feeds management', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index cad78fbda..25cb0a977 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', 'purge' => 'Purge', 'remove' => 'Remove', + 'rename' => 'Rename', 'see_website' => 'See website', 'submit' => 'Submit', 'truncate' => 'Delete all articles', diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 06b6b6f1e..a36b5f306 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Import / export', 'subscription_management' => 'Subscriptions management', 'subscription_tools' => 'Subscription tools', + 'tag_management' => 'Tags management', + ), + 'tag' => array( + 'name' => 'Name', + 'new_name' => 'New name', + 'old_name' => 'Old name', ), 'title' => array( '_' => 'Subscriptions management', 'add' => 'Add a feed/a category', 'add_category' => 'Add a category', 'add_feed' => 'Add a feed', + 'add_tag' => 'Add a tag', + 'delete_tag' => 'Delete a tag', 'feed_management' => 'RSS feeds management', + 'rename_tag' => 'Rename a tag', 'subscription_tools' => 'Subscription tools', ), ); diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 1602e0a5b..f87fd23fb 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promover', 'purge' => 'Eliminar', 'remove' => 'Borrar', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Ver web', 'submit' => 'Enviar', 'truncate' => 'Borrar todos los artículos', diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index 701dff809..c8cbcc698 100755 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importar / exportar', 'subscription_management' => 'Administración de suscripciones', 'subscription_tools' => 'Subscription tools', // TODO - Translation + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Administración de suscripciones', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Administración de fuentes RSS', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation ), ); diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 19d28f301..07526b90a 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promouvoir', 'purge' => 'Purger', 'remove' => 'Supprimer', + 'rename' => 'Renommer', 'see_website' => 'Voir le site', 'submit' => 'Valider', 'truncate' => 'Supprimer tous les articles', diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index b0e01e3b1..25f668f68 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importer / exporter', 'subscription_management' => 'Gestion des abonnements', 'subscription_tools' => 'Outils d’abonnement', + 'tag_management' => 'Gestion des étiquettes', + ), + 'tag' => array( + 'name' => 'Nom', + 'new_name' => 'Ancien nom', + 'old_name' => 'Nouveau nom', ), 'title' => array( '_' => 'Gestion des abonnements', 'add' => 'Ajouter un flux/une catégorie', 'add_category' => 'Ajouter une catégorie', 'add_feed' => 'Ajouter un flux', + 'add_tag' => 'Ajouter une étiquette', + 'delete_tag' => 'Supprimer une étiquette', 'feed_management' => 'Gestion des flux RSS', + 'rename_tag' => 'Renommer une étiquette', 'subscription_tools' => 'Outils d’abonnement', ), ); diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 9134c23c3..bfa345b06 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Remove', // TODO - Translation + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'ראו אתר', 'submit' => 'אישור', 'truncate' => 'מחיקת כל המאמרים', diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php index b1814adc6..3c4c4faad 100644 --- a/app/i18n/he/sub.php +++ b/app/i18n/he/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'יבוא / יצוא ', 'subscription_management' => 'ניהול הרשמות', 'subscription_tools' => 'Subscription tools', // TODO - Translation + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'ניהול הרשמות', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'ניהול הזנות RSS', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation ), ); diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 3de8d1972..99eb2ac55 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Rimuovi', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Vai al sito', 'submit' => 'Conferma', 'truncate' => 'Cancella tutti gli articoli', diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index 09a9bdd48..dfef244a1 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importa / esporta', 'subscription_management' => 'Gestione sottoscrizioni', 'subscription_tools' => 'Subscription tools', // TODO - Translation + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Gestione sottoscrizioni', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Gestione RSS feeds', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation ), ); diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 63e6d837e..923426113 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => '삭제', + 'rename' => 'Rename', // TODO - Translation 'see_website' => '웹사이트 열기', 'submit' => '설정 저장', 'truncate' => '모든 글 삭제', diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 8c1c481f8..53337390b 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => '불러오기 / 내보내기', 'subscription_management' => '구독 관리', 'subscription_tools' => '구독 도구', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => '구독 관리', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'RSS 피드 관리', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => '구독 도구', ), ); diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index dc30b8fa3..2d826ed98 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Bevorderen', 'purge' => 'Zuiveren', 'remove' => 'Verwijderen', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Bekijk website', 'submit' => 'Opslaan', 'truncate' => 'Verwijder alle artikelen', diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index ad464b97c..35ee0f45f 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importeer / exporteer', 'subscription_management' => 'Abonnementenbeheer', 'subscription_tools' => 'Hulpmiddelen voor abonnementen', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Abonnementenbeheer', 'add' => 'Feed of categorie toevoegen', 'add_category' => 'Categorie toevoegen', 'add_feed' => 'Feed toevoegen', + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'RSS-feedbeheer', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Hulpmiddelen voor abonnementen', ), ); diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index a46b7d4ef..7203f74fa 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promòure', 'purge' => 'Purgar', 'remove' => 'Levar', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Veire lo site', 'submit' => 'Mandar', 'truncate' => 'Suprimir totes los articles', diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index ea077da1a..486953af6 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importar / Exportar', 'subscription_management' => 'Gestion dels abonaments', 'subscription_tools' => 'Aisinas d’abonament', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Gestion dels abonaments', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Gestion dels fluxes RSS', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Aisinas d’abonament', ), ); diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 531d84095..75e2b5035 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promover', 'purge' => 'Limpar', 'remove' => 'Remover', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Ver o site', 'submit' => 'Enviar', 'truncate' => 'Deletar todos os artigos', diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index 1ecf05169..358162a9d 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Importar / exportar', 'subscription_management' => 'Gerenciamento de inscrições', 'subscription_tools' => 'Ferramentas de inscrição', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Gerenciamento de inscrições', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Gerenciamento dos RSS feeds', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Ferramentas de inscrição', ), ); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 2149e7264..c2aeaf454 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Remove', // TODO - Translation + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'See website', // TODO - Translation 'submit' => 'Submit', // TODO - Translation 'truncate' => 'Delete all articles', // TODO - Translation diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index 4dc72e6a4..009f1b975 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Import / export', // TODO - Translation 'subscription_management' => 'Subscriptions management', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Subscriptions management', // TODO - Translation 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'RSS feeds management', // TODO - Translation + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation ), ); diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 9f824d447..e5c31fe56 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Odstrániť', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Zobraziť webovú stránku', 'submit' => 'Poslať', 'truncate' => 'Vymazať všetky články', diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index ef5cfd42a..c39962326 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'Import / export', 'subscription_management' => 'Správa odoberaných kanálov', 'subscription_tools' => 'Nástroje na odoberanie kanálov', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Správa odoberaných kanálov', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'Správa RSS kanálov', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Nástroje na odoberanie kanálov', ), ); diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 84c741908..64f6eca77 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Sil', + 'rename' => 'Rename', // TODO - Translation 'see_website' => 'Siteyi gör', 'submit' => 'Onayla', 'truncate' => 'Tüm makaleleri sil', diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index c17cf57cc..bed94842a 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => 'İçe / dışa aktar', 'subscription_management' => 'Abonelik yönetimi', 'subscription_tools' => 'Subscription tools', // TODO - Translation + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => 'Abonelik yönetimi', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => 'RSS akış yönetimi', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => 'Subscription tools', // TODO - Translation ), ); diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 3bc274fa1..3cabf9303 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -22,6 +22,7 @@ return array( 'promote' => '设为管理员', 'purge' => '清理', 'remove' => '删除', + 'rename' => 'Rename', // TODO - Translation 'see_website' => '网站中查看', 'submit' => '提交', 'truncate' => '删除所有文章', diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index c1cf0eed6..cfb9d08ee 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -108,13 +108,22 @@ return array( 'import_export' => '导入/导出', 'subscription_management' => '订阅管理', 'subscription_tools' => '订阅工具', + 'tag_management' => 'Tags management', // TODO - Translation + ), + 'tag' => array( + 'name' => 'Name', // TODO - Translation + 'new_name' => 'New name', // TODO - Translation + 'old_name' => 'Old name', // TODO - Translation ), 'title' => array( '_' => '订阅管理', 'add' => 'Add a feed/a category', // TODO - Translation 'add_category' => 'Add a category', // TODO - Translation 'add_feed' => 'Add a feed', // TODO - Translation + 'add_tag' => 'Add a tag', // TODO - Translation + 'delete_tag' => 'Delete a tag', // TODO - Translation 'feed_management' => '订阅源管理', + 'rename_tag' => 'Rename a tag', // TODO - Translation 'subscription_tools' => '订阅工具', ), ); diff --git a/app/layout/aside_subscription.phtml b/app/layout/aside_subscription.phtml index a0be99d25..43c60db72 100644 --- a/app/layout/aside_subscription.phtml +++ b/app/layout/aside_subscription.phtml @@ -16,4 +16,8 @@ <li class="item<?= Minz_Request::controllerName() === 'subscription' && Minz_Request::actionName() === 'bookmarklet' ? ' active' : '' ?>"> <a href="<?= _url('subscription', 'bookmarklet') ?>"><?= _t('sub.menu.subscription_tools') ?></a> </li> + + <li class="item<?= Minz_Request::controllerName() === 'tag' ? ' active' : '' ?>"> + <a href="<?= _url('tag', 'index') ?>"><?= _t('sub.menu.tag_management') ?></a> + </li> </ul> diff --git a/app/views/tag/index.phtml b/app/views/tag/index.phtml new file mode 100644 index 000000000..3287506f7 --- /dev/null +++ b/app/views/tag/index.phtml @@ -0,0 +1,70 @@ +<?php $this->partial('aside_subscription'); ?> + +<div class="post"> + <a href="<?= _url('index', 'index') ?>"><?= _t('gen.action.back_to_rss_feeds') ?></a> + + <h2><?= _t('sub.title.add_tag') ?></h2> + <form id="add_tag" method="post" action="<?= _url('tag', 'add') ?>" autocomplete="off"> + <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" /> + <div class="form-group"> + <label class="group-name" for="category"><?= _t('sub.tag.name') ?></label> + <div class="group-controls"> + <input id="name" name="name" type="text" autocomplete="off"/> + </div> + </div> + + <div class="form-group form-actions"> + <div class="group-controls"> + <button type="submit" class="btn btn-important"><?= _t('gen.action.add') ?></button> + </div> + </div> + </form> + + <h2><?= _t('sub.title.rename_tag') ?></h2> + <form id="rename_tag" method="post" action="<?= _url('tag', 'rename') ?>" autocomplete="off"> + <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" /> + <div class="form-group"> + <label class="group-name" for="category"><?= _t('sub.tag.old_name') ?></label> + <div class="group-controls"> + <select name="id_tag" id="id_tag"> + <?php foreach ($this->tags as $tag): ?> + <option value="<?= $tag->id() ?>"><?= $tag->name() ?></option> + <?php endforeach; ?> + </select> + </div> + </div> + <div class="form-group"> + <label class="group-name" for="category"><?= _t('sub.tag.new_name') ?></label> + <div class="group-controls"> + <input id="name" name="name" type="text" autocomplete="off"/> + </div> + </div> + + <div class="form-group form-actions"> + <div class="group-controls"> + <button type="submit" class="btn btn-attention confirm"><?= _t('gen.action.rename') ?></button> + </div> + </div> + </form> + + <h2><?= _t('sub.title.delete_tag') ?></h2> + <form id="delete_tag" method="post" action="<?= _url('tag', 'delete') ?>" autocomplete="off"> + <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" /> + <div class="form-group"> + <label class="group-name" for="category"><?= _t('sub.tag.name') ?></label> + <div class="group-controls"> + <select name="id_tag" id="id_tag"> + <?php foreach ($this->tags as $tag): ?> + <option value="<?= $tag->id() ?>"><?= $tag->name() ?></option> + <?php endforeach; ?> + </select> + </div> + </div> + + <div class="form-group form-actions"> + <div class="group-controls"> + <button type="submit" class="btn btn-attention confirm"><?= _t('gen.action.remove') ?></button> + </div> + </div> + </form> +</div> |
