]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Show untagged entries count on tag list (#3993)
authorThomas Citharel <github@tcit.fr>
Thu, 6 Jun 2019 12:09:23 +0000 (14:09 +0200)
committerGitHub <noreply@github.com>
Thu, 6 Jun 2019 12:09:23 +0000 (14:09 +0200)
Show untagged entries count on tag list

23 files changed:
app/DoctrineMigrations/Version20190511165128.php [new file with mode: 0644]
src/Wallabag/CoreBundle/Controller/ConfigController.php
src/Wallabag/CoreBundle/Entity/Tag.php
src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml
src/Wallabag/CoreBundle/Resources/translations/messages.th.yml
src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
tests/Wallabag/CoreBundle/Controller/TagControllerTest.php

diff --git a/app/DoctrineMigrations/Version20190511165128.php b/app/DoctrineMigrations/Version20190511165128.php
new file mode 100644 (file)
index 0000000..7b6b1be
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Application\Migrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Wallabag\CoreBundle\Doctrine\WallabagMigration;
+
+/**
+ * Convert tab label to utf8mb4_bin (MySQL only).
+ */
+final class Version20190511165128 extends WallabagMigration
+{
+    public function up(Schema $schema): void
+    {
+        $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
+
+        $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `label` `label` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;');
+        $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `slug` `slug` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;');
+    }
+
+    public function down(Schema $schema): void
+    {
+        $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
+
+        $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `slug` `slug` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
+        $this->addSql('ALTER TABLE ' . $this->getTable('tag') . ' CHANGE `label` `label` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
+    }
+}
index 3b281d488ececf68fd0362f1d9ab3a98862cf71f..cea4130317e7ebfea4afc1430534718f7b939642 100644 (file)
@@ -299,6 +299,34 @@ class ConfigController extends Controller
         return $this->redirect($this->generateUrl('config') . '#set2');
     }
 
+    /**
+     * @param Request $request
+     *
+     * @Route("/revoke-token", name="revoke_token")
+     *
+     * @return RedirectResponse|JsonResponse
+     */
+    public function revokeTokenAction(Request $request)
+    {
+        $config = $this->getConfig();
+        $config->setFeedToken(null);
+
+        $em = $this->getDoctrine()->getManager();
+        $em->persist($config);
+        $em->flush();
+
+        if ($request->isXmlHttpRequest()) {
+            return new JsonResponse();
+        }
+
+        $this->addFlash(
+            'notice',
+            'flashes.config.notice.feed_token_revoked'
+        );
+
+        return $this->redirect($this->generateUrl('config') . '#set2');
+    }
+
     /**
      * Deletes a tagging rule and redirect to the config homepage.
      *
index a6dc8c50902ed26f3acb89a65b5dca8d4af073db..95c47bbd08a379aa2f95d1ec61f2102c221909b8 100644 (file)
@@ -13,7 +13,10 @@ use JMS\Serializer\Annotation\XmlRoot;
  * Tag.
  *
  * @XmlRoot("tag")
- * @ORM\Table(name="`tag`")
+ * @ORM\Table(
+ *     name="`tag`",
+ *     options={"collate"="utf8mb4_bin", "charset"="utf8mb4"},
+ * )
  * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TagRepository")
  * @ExclusionPolicy("all")
  */
index a01c7688e09f257b17dc8a85b80d80c70d8fb676..b6e067ccef2652d815f10c95ab2d3eee4dc705b6 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Tilbage til de ulæste artikler'
         # users_management: 'Users management'
         # site_credentials: 'Site credentials'
+        # quickstart: "Quickstart"
     top:
         add_new_entry: 'Tilføj ny artikel'
         search: 'Søg'
@@ -91,6 +92,7 @@ config:
         no_token: 'Intet token'
         token_create: 'Opret token'
         token_reset: 'Nulstil token'
+        # token_revoke: 'Revoke the token'
         feed_links: 'RSS-Links'
         feed_link:
             unread: 'Ulæst'
@@ -594,6 +596,7 @@ flashes:
             # tagging_rules_updated: 'Tagging rules updated'
             # tagging_rules_deleted: 'Tagging rule deleted'
             # feed_token_updated: 'RSS token updated'
+            # feed_token_revoked: 'RSS token revoked'
             # annotations_reset: Annotations reset
             # tags_reset: Tags reset
             # entries_reset: Entries reset
index a1b41855610e7405b0d26cc5f0aa49457bb88066..072cac0aa3c007581c9d96f0093cd500b02dbb74 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Zurück zu ungelesenen Artikeln'
         users_management: 'Benutzerverwaltung'
         site_credentials: 'Zugangsdaten'
+        quickstart: "Schnelleinstieg"
     top:
         add_new_entry: 'Neuen Artikel hinzufügen'
         search: 'Suche'
@@ -91,6 +92,7 @@ config:
         no_token: 'Kein Token'
         token_create: 'Token erstellen'
         token_reset: 'Token zurücksetzen'
+        # token_revoke: 'Revoke the token'
         feed_links: 'RSS-Links'
         feed_link:
             unread: 'Ungelesene'
@@ -585,6 +587,7 @@ flashes:
             tagging_rules_updated: 'Tagging-Regeln aktualisiert'
             tagging_rules_deleted: 'Tagging-Regel gelöscht'
             feed_token_updated: 'RSS-Token aktualisiert'
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: Anmerkungen zurücksetzen
             tags_reset: Tags zurücksetzen
             entries_reset: Einträge zurücksetzen
index 020cd08a63d1c291cea31912356a2dfe658bd1e6..e1631d1098c48caaf3ddd26c488a5bfa6921f5d7 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Back to unread articles'
         users_management: 'Users management'
         site_credentials: 'Site credentials'
+        quickstart: "Quickstart"
     top:
         add_new_entry: 'Add a new entry'
         search: 'Search'
@@ -91,6 +92,7 @@ config:
         no_token: 'No token'
         token_create: 'Create your token'
         token_reset: 'Regenerate your token'
+        token_revoke: 'Revoke the token'
         feed_links: 'Feed links'
         feed_link:
             unread: 'Unread'
@@ -594,6 +596,7 @@ flashes:
             tagging_rules_updated: 'Tagging rules updated'
             tagging_rules_deleted: 'Tagging rule deleted'
             feed_token_updated: 'Feed token updated'
+            feed_token_revoked: 'RSS token revoked'
             annotations_reset: Annotations reset
             tags_reset: Tags reset
             entries_reset: Entries reset
index 130c12f3e380e9eb4d8d9e9bf4c26688e9688336..ebd4477a5a900fbff94af9d1944e764f7fd534da 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Volver a los artículos sin leer'
         users_management: 'Configuración de usuarios'
         # site_credentials: 'Site credentials'
+        quickstart: "Inicio rápido"
     top:
         add_new_entry: 'Añadir un nuevo artículo'
         search: 'Buscar'
@@ -91,6 +92,7 @@ config:
         no_token: 'Sin token'
         token_create: 'Crear token'
         token_reset: 'Reiniciar token'
+        # token_revoke: 'Revoke the token'
         feed_links: 'URLs de feeds RSS'
         feed_link:
             unread: 'sin leer'
@@ -594,6 +596,7 @@ flashes:
             tagging_rules_updated: 'Regla de etiquetado actualizada'
             tagging_rules_deleted: 'Regla de etiquetado eliminada'
             feed_token_updated: 'Token RSS actualizado'
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: Anotaciones reiniciadas
             tags_reset: Etiquetas reiniciadas
             entries_reset: Artículos reiniciados
index 31db51fa1bfac2ea23b4ff67e96d76cffbdfd670..e3857e244e0b05254365952bf03c2af664f97f89 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'بازگشت به خوانده‌نشده‌ها'
         # users_management: 'Users management'
         # site_credentials: 'Site credentials'
+        quickstart: "Quickstart"
     top:
         add_new_entry: 'افزودن مقالهٔ تازه'
         search: 'جستجو'
@@ -91,6 +92,7 @@ config:
         no_token: 'بدون کد'
         token_create: 'کد خود را بسازید'
         token_reset: 'بازنشانی کد'
+        # token_revoke: 'Revoke the token'
         feed_links: 'پیوند آر-اس-اس'
         feed_link:
             unread: 'خوانده‌نشده'
@@ -594,6 +596,7 @@ flashes:
             tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد'
             tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد'
             feed_token_updated: 'کد آر-اس-اس به‌روز شد'
+            # feed_token_revoked: 'RSS token revoked'
             # annotations_reset: Annotations reset
             # tags_reset: Tags reset
             # entries_reset: Entries reset
index df3692dc8008706775ca5871714ec85ce279116a..97cb3272338a36bfd9ae0fd37c10eeb83f3d1296 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: "Retour aux articles non lus"
         users_management: "Gestion des utilisateurs"
         site_credentials: 'Accès aux sites'
+        quickstart: "Pour bien débuter"
     top:
         add_new_entry: "Sauvegarder un nouvel article"
         search: "Rechercher"
@@ -91,6 +92,7 @@ config:
         no_token: "Aucun jeton généré"
         token_create: "Créez votre jeton"
         token_reset: "Réinitialisez votre jeton"
+        token_revoke: 'Supprimer le jeton'
         feed_links: "Adresses de vos flux"
         feed_link:
             unread: "Non lus"
@@ -595,6 +597,7 @@ flashes:
             tagging_rules_updated: "Règles mises à jour"
             tagging_rules_deleted: "Règle supprimée"
             feed_token_updated: "Jeton des flux mis à jour"
+            feed_token_revoked: 'Jeton des flux supprimé'
             annotations_reset: "Annotations supprimées"
             tags_reset: "Tags supprimés"
             entries_reset: "Articles supprimés"
index 337a1bfae8f091aa1904ec3f2d081044cb72bacc..7c0110a42b9f2664cb0b2b16a9ff7eb765ae8e4e 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Torna ai contenuti non letti'
         users_management: 'Gestione utenti'
         site_credentials: 'Credenziali sito'
+        quickstart: "Introduzione"
     top:
         add_new_entry: 'Aggiungi un nuovo contenuto'
         search: 'Cerca'
@@ -91,6 +92,7 @@ config:
         no_token: 'Nessun token'
         token_create: 'Crea il tuo token'
         token_reset: 'Rigenera il tuo token'
+        # token_revoke: 'Revoke the token'
         feed_links: 'Collegamenti RSS'
         feed_link:
             unread: 'Non letti'
@@ -593,6 +595,7 @@ flashes:
             tagging_rules_updated: 'Regole di etichettatura aggiornate'
             tagging_rules_deleted: 'Regola di etichettatura eliminate'
             feed_token_updated: 'RSS token aggiornato'
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: Reset annotazioni
             tags_reset: Reset etichette
             entries_reset: Reset articoli
index fc0a03b55d74e5a89e17a0a5e0f8a14e40e283b6..e74d1a20132a9decb3f63147a5b70ae375947f83 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Tornar als articles pas legits'
         users_management: 'Gestion dels utilizaires'
         site_credentials: 'Identificants del site'
+        quickstart: "Per ben començar"
     top:
         add_new_entry: 'Enregistrar un novèl article'
         search: 'Cercar'
@@ -91,6 +92,7 @@ config:
         no_token: 'Pas cap de geton generat'
         token_create: 'Creatz vòstre geton'
         token_reset: 'Reïnicializatz vòstre geton'
+        # token_revoke: 'Revoke the token'
         feed_links: 'URLs de vòstres fluxes RSS'
         feed_link:
             unread: 'Pas legits'
@@ -593,6 +595,7 @@ flashes:
             tagging_rules_updated: 'Règlas misa a jorn'
             tagging_rules_deleted: 'Règla suprimida'
             feed_token_updated: 'Geton RSS mes a jorn'
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: Anotacions levadas
             tags_reset: Etiquetas levadas
             entries_reset: Articles levats
index f9609ea2c90ba8b60f852a5d1c84697d6c332ee7..f4da2b1868f0eea04e7b3eb6c84fd374ec6bb174 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Powrót do nieprzeczytanych artykułów'
         users_management: 'Zarządzanie użytkownikami'
         site_credentials: 'Poświadczenia strony'
+        quickstart: "Szybki start"
     top:
         add_new_entry: 'Dodaj nowy wpis'
         search: 'Szukaj'
@@ -91,6 +92,7 @@ config:
         no_token: 'Brak tokena'
         token_create: 'Stwórz tokena'
         token_reset: 'Zresetuj swojego tokena'
+        # token_revoke: 'Revoke the token'
         feed_links: 'RSS links'
         feed_link:
             unread: 'Nieprzeczytane'
@@ -593,6 +595,7 @@ flashes:
             tagging_rules_updated: 'Reguły tagowania zaktualizowane'
             tagging_rules_deleted: 'Reguła tagowania usunięta'
             feed_token_updated: 'Token kanału RSS zaktualizowany'
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: Zresetuj adnotacje
             tags_reset: Zresetuj tagi
             entries_reset: Zresetuj wpisy
index e9d3a6cf0b9978ced6a789d8c01559e765168d25..76d2bebe7330b730ffad7defd64dfded0fa83d2d 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Voltar para os artigos não lidos'
         users_management: 'Gestão de Usuários'
         # site_credentials: 'Site credentials'
+        quickstart: "Começo Rápido"
     top:
         add_new_entry: 'Adicionar uma nova entrada'
         search: 'Pesquisa'
@@ -91,6 +92,7 @@ config:
         no_token: 'Nenhum Token'
         token_create: 'Criar seu token'
         token_reset: 'Gerar novamente seu token'
+        # token_revoke: 'Revoke the token'
         feed_links: 'Links RSS'
         feed_link:
             unread: 'Não lido'
@@ -593,6 +595,7 @@ flashes:
             tagging_rules_updated: 'Regras de tags atualizadas'
             tagging_rules_deleted: 'Regra de tag apagada'
             feed_token_updated: 'Token RSS atualizado'
+            # feed_token_revoked: 'RSS token revoked'
             # annotations_reset: Annotations reset
             # tags_reset: Tags reset
             # entries_reset: Entries reset
index dde0c9a107cf3993b729e6310152c0b48b54a3cd..c10df5fe882708b0dde5d4ce5c97ed0af69353f2 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Înapoi la articolele necitite'
         # users_management: 'Users management'
         # site_credentials: 'Site credentials'
+        # quickstart: "Quickstart"
     top:
         add_new_entry: 'Introdu un nou articol'
         search: 'Căutare'
@@ -91,6 +92,7 @@ config:
         no_token: 'Fără token'
         token_create: 'Crează-ți token'
         token_reset: 'Resetează-ți token-ul'
+        # token_revoke: 'Revoke the token'
         feed_links: 'Link-uri RSS'
         feed_link:
             unread: 'Unread'
@@ -593,6 +595,7 @@ flashes:
             # tagging_rules_updated: 'Tagging rules updated'
             # tagging_rules_deleted: 'Tagging rule deleted'
             # feed_token_updated: 'RSS token updated'
+            # feed_token_revoked: 'RSS token revoked'
             # annotations_reset: Annotations reset
             # tags_reset: Tags reset
             # entries_reset: Entries reset
index 8dcba74b2e0bd1860f3d73c89234571b99ed2921..48695b3fd47e3b75ed6bfe91068a5b687a58ea1b 100644 (file)
@@ -32,6 +32,8 @@ menu:
         save_link: 'Сохранить ссылку'
         back_to_unread: 'Назад к непрочитанным записям'
         users_management: 'Управление пользователями'
+        site_credentials: 'Site credentials'
+        quickstart: "Быстрый старт"
     top:
         add_new_entry: 'Добавить новую запись'
         search: 'Поиск'
@@ -89,6 +91,7 @@ config:
         no_token: 'Ключ не задан'
         token_create: 'Создать ключ'
         token_reset: 'Пересоздать ключ'
+        # token_revoke: 'Revoke the token'
         feed_links: 'ссылка на RSS'
         feed_link:
             unread: 'непрочитанные'
@@ -559,6 +562,7 @@ flashes:
             tagging_rules_updated: 'Правила тегировния обновлены'
             tagging_rules_deleted: 'Правила тегировния удалены'
             feed_token_updated: 'RSS ключ обновлен'
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: "Аннотации сброшены"
             tags_reset: "Теги сброшены"
             entries_reset: "Записи сброшены"
index 8dc65dd63dbeccb1cfae7730f0c924d6bb71c95b..da5bbecd835650323b9351ed91bab960dce31157 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'กลับไปยังรายการที่ไม่ได้อ่าน'
         users_management: 'การจัดการผู้ใช้'
         site_credentials: 'การรับรองไซต์'
+        quickstart: "เริ่มแบบด่วน"
     top:
         add_new_entry: 'เพิ่มรายการใหม่'
         search: 'ค้นหา'
@@ -91,6 +92,7 @@ config:
         no_token: 'ไม่มีเครื่องหมาย'
         token_create: 'สร้างเครื่องหมาย'
         token_reset: 'ทำเครื่องหมาย'
+        # token_revoke: 'Revoke the token'
         feed_links: 'ลิงค์ RSS'
         feed_link:
             unread: 'ยังไมได้่อ่าน'
@@ -591,6 +593,7 @@ flashes:
             tagging_rules_updated: 'อัปเดตการแท็กข้อบังคับ'
             tagging_rules_deleted: 'การลบข้อบังคับของแท็ก'
             feed_token_updated: 'อัปเดตเครื่องหมาย RSS '
+            # feed_token_revoked: 'RSS token revoked'
             annotations_reset: รีเซ็ตหมายเหตุ
             tags_reset: รีเซ็ตแท็ก
             entries_reset: รีเซ็ตรายการ
index 49ebe79f1e4b970c9d0b7f05a2fc3248c4683f23..8f42d3813c5e2dcebb62e35784b99d0c35d85313 100644 (file)
@@ -33,6 +33,7 @@ menu:
         back_to_unread: 'Okunmayan makalelere geri dön'
         # users_management: 'Users management'
         # site_credentials: 'Site credentials'
+        quickstart: "Hızlı başlangıç"
     top:
         add_new_entry: 'Yeni bir makale ekle'
         search: 'Ara'
@@ -91,6 +92,7 @@ config:
         no_token: 'Belirteç (token) yok'
         token_create: 'Yeni belirteç (token) oluştur'
         token_reset: 'Belirteci (token) sıfırla'
+        # token_revoke: 'Revoke the token'
         feed_links: 'RSS akış bağlantıları'
         feed_link:
             unread: 'Okunmayan'
index 4ef6ab3cca296b8e9e4254326017241306385275..a1caf242211b0eb1353e59a1b70491c2b67bf8d3 100644 (file)
                 {% else %}
                     <em>{{ 'config.form_feed.no_token'|trans }}</em>
                 {% endif %}
-                –
-                <a href="{{ path('generate_token') }}">
-                    {% if feed.token %}
-                        {{ 'config.form_feed.token_reset'|trans }}
-                    {% else %}
-                        {{ 'config.form_feed.token_create'|trans }}
-                    {% endif %}
-                </a>
+
+                {% if feed.token %}
+                    – <a href="{{ path('generate_token') }}">{{ 'config.form_feed.token_reset'|trans }}</a>
+                    – <a href="{{ path('revoke_token') }}">{{ 'config.form_feed.token_revoke'|trans }}</a>
+                {% else %}
+                    – <a href="{{ path('generate_token') }}">{{ 'config.form_feed.token_create'|trans }}</a>
+                {% endif %}
+
             </div>
         </fieldset>
 
index 35a54daf246a8be13584f5bb773fe2ade2b5a3fa..6b1e2bd794679d2162b06d906562cdf601fa289d 100644 (file)
@@ -50,6 +50,7 @@
         <li class="menu howto"><a href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a></li>
         <li class="menu developer"><a href="{{ path('developer') }}">{{ 'menu.left.developer'|trans }}</a></li>
         <li class="menu about"><a href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a></li>
+        <li class="menu quickstart"><a href="{{ path('quickstart') }}">{{ 'menu.left.quickstart'|trans }}</a></li>
         <li class="menu logout"><a class="icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a></li>
     </ul>
 {% endblock %}
index 818fc4e718d0af40edc30612a55ecf94708506d6..a48c9e28af12b38a32a2119f10a1ce695b7592db 100644 (file)
                                         {% else %}
                                             <em>{{ 'config.form_feed.no_token'|trans }}</em>
                                         {% endif %}
-                                        – <a href="{{ path('generate_token') }}">
+
                                         {% if feed.token %}
-                                            {{ 'config.form_feed.token_reset'|trans }}
+                                            – <a href="{{ path('generate_token') }}">{{ 'config.form_feed.token_reset'|trans }}</a>
+                                            – <a href="{{ path('revoke_token') }}">{{ 'config.form_feed.token_revoke'|trans }}</a>
                                         {% else %}
-                                            {{ 'config.form_feed.token_create'|trans }}
-                                        {% endif %}</a>
+                                            – <a href="{{ path('generate_token') }}">{{ 'config.form_feed.token_create'|trans }}</a>
+                                        {% endif %}
                                     </div>
                                 </div>
                             </div>
index b9c45567aa76c1971407b96302a28b8a5702c0ae..c51d07fc2a64f8e121f34a0b05f743eb9b5f54a3 100644 (file)
@@ -91,6 +91,9 @@
             <li class="bold {% if currentRoute == 'howto' %}active{% endif %}">
                 <a class="waves-effect" href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a>
             </li>
+            <li class="bold {% if currentRoute == 'quickstart' %}active{% endif %}">
+                <a class="waves-effect" href="{{ path('quickstart') }}">{{ 'menu.left.quickstart'|trans }}</a>
+            </li>
             <li class="bold">
                 <a class="waves-effect icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a>
             </li>
index d8478ce3e13ea17ef27fb8fe9ea955df48893e81..b9e0bed25118c27faaddcd223617fe572f4132f4 100644 (file)
@@ -330,7 +330,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
         $crawler = $client->followRedirect();
 
         $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
-        $this->assertNotContains('config.form_feed.no_token', $body[0]);
+        $this->assertContains('config.form_feed.token_reset', $body[0]);
     }
 
     public function testGenerateTokenAjax()
@@ -351,6 +351,22 @@ class ConfigControllerTest extends WallabagCoreTestCase
         $this->assertArrayHasKey('token', $content);
     }
 
+    public function testRevokeTokenAjax()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $client->request(
+            'GET',
+            '/revoke-token',
+            [],
+            [],
+            ['HTTP_X-Requested-With' => 'XMLHttpRequest']
+        );
+
+        $this->assertSame(200, $client->getResponse()->getStatusCode());
+    }
+
     public function testFeedUpdate()
     {
         $this->logInAs('admin');
index be17dcf51030f767802b2a44912d7576059d6a82..47c83a7ba922582a8cef770f60cc1e155ec5f9a0 100644 (file)
@@ -221,4 +221,50 @@ class TagControllerTest extends WallabagCoreTestCase
         $this->assertInstanceOf(Tag::class, $newTag, 'Tag "specific label" exists.');
         $this->assertTrue($newTag->hasEntry($freshEntry), 'Tag "specific label" is assigned to the entry.');
     }
+
+    public function testAddUnicodeTagLabel()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $entry = new Entry($this->getLoggedInUser());
+        $entry->setUrl('http://0.0.0.0/tag-caché');
+        $this->getEntityManager()->persist($entry);
+        $this->getEntityManager()->flush();
+        $this->getEntityManager()->clear();
+
+        $crawler = $client->request('GET', '/view/' . $entry->getId());
+
+        $form = $crawler->filter('form[name=tag]')->form();
+
+        $data = [
+            'tag[label]' => 'cache',
+        ];
+
+        $client->submit($form, $data);
+
+        $crawler = $client->request('GET', '/view/' . $entry->getId());
+
+        $form = $crawler->filter('form[name=tag]')->form();
+
+        $data = [
+            'tag[label]' => 'caché',
+        ];
+
+        $client->submit($form, $data);
+
+        $newEntry = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:Entry')
+            ->find($entry->getId());
+
+        $tags = $newEntry->getTags()->toArray();
+        foreach ($tags as $key => $tag) {
+            $tags[$key] = $tag->getLabel();
+        }
+
+        $this->assertGreaterThanOrEqual(2, \count($tags));
+        $this->assertNotFalse(array_search('cache', $tags, true), 'Tag cache is assigned to the entry');
+        $this->assertNotFalse(array_search('caché', $tags, true), 'Tag caché is assigned to the entry');
+    }
 }