aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexis Degrugillier <aledeg@users.noreply.github.com> 2020-07-23 11:31:38 +0200
committerGravatar GitHub <noreply@github.com> 2020-07-23 11:31:38 +0200
commit909fdaca3172c0e825c7e6268950e16bc5d3e4f3 (patch)
tree1d71aaf56ec7d4e39b46ed669d0fb57df60eecd3
parent12d2baf64d3d6a1b95376460c7128a079dd1bac6 (diff)
Add tag management page (#3121)
The new page allows to create, delete and rename tags. See #3058
-rw-r--r--app/Controllers/tagController.php40
-rw-r--r--app/Models/TagDAO.php22
-rw-r--r--app/i18n/cz/gen.php1
-rw-r--r--app/i18n/cz/sub.php9
-rw-r--r--app/i18n/de/gen.php1
-rw-r--r--app/i18n/de/sub.php9
-rw-r--r--app/i18n/en-us/gen.php1
-rw-r--r--app/i18n/en-us/sub.php9
-rw-r--r--app/i18n/en/gen.php1
-rw-r--r--app/i18n/en/sub.php9
-rwxr-xr-xapp/i18n/es/gen.php1
-rwxr-xr-xapp/i18n/es/sub.php9
-rw-r--r--app/i18n/fr/gen.php1
-rw-r--r--app/i18n/fr/sub.php9
-rw-r--r--app/i18n/he/gen.php1
-rw-r--r--app/i18n/he/sub.php9
-rw-r--r--app/i18n/it/gen.php1
-rw-r--r--app/i18n/it/sub.php9
-rw-r--r--app/i18n/kr/gen.php1
-rw-r--r--app/i18n/kr/sub.php9
-rw-r--r--app/i18n/nl/gen.php1
-rw-r--r--app/i18n/nl/sub.php9
-rw-r--r--app/i18n/oc/gen.php1
-rw-r--r--app/i18n/oc/sub.php9
-rw-r--r--app/i18n/pt-br/gen.php1
-rw-r--r--app/i18n/pt-br/sub.php9
-rw-r--r--app/i18n/ru/gen.php1
-rw-r--r--app/i18n/ru/sub.php9
-rw-r--r--app/i18n/sk/gen.php1
-rw-r--r--app/i18n/sk/sub.php9
-rw-r--r--app/i18n/tr/gen.php1
-rw-r--r--app/i18n/tr/sub.php9
-rw-r--r--app/i18n/zh-cn/gen.php1
-rw-r--r--app/i18n/zh-cn/sub.php9
-rw-r--r--app/layout/aside_subscription.phtml4
-rw-r--r--app/views/tag/index.phtml70
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>