aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJeremy Benoist <jeremy.benoist@gmail.com>2019-06-26 22:31:47 +0200
committerJeremy Benoist <jeremy.benoist@gmail.com>2019-07-08 09:38:32 +0200
commit34be2d5de44ade2a78be73decc0b90a2c1bca720 (patch)
treed635438784c4b02e1d182cfbc3d47b62e5032f1d
parent92cd51aa2c29e23f137cde9b9732ced33ff38e59 (diff)
downloadwallabag-34be2d5de44ade2a78be73decc0b90a2c1bca720.tar.gz
wallabag-34be2d5de44ade2a78be73decc0b90a2c1bca720.tar.zst
wallabag-34be2d5de44ade2a78be73decc0b90a2c1bca720.zip
Add ability to import/export tagging rules
- Add missing translations - Add some tests - Add `/api/taggingrule/export` API endpoint - Add baggy theme - Add error message when importing tagging rules failed - Also fix all translations (I think we are good now)
-rw-r--r--.gitignore1
-rw-r--r--src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php39
-rw-r--r--src/Wallabag/ApiBundle/Resources/config/routing_rest.yml5
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php62
-rw-r--r--src/Wallabag/CoreBundle/Entity/TaggingRule.php10
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php29
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.da.yml12
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.de.yml21
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.en.yml11
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.es.yml12
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml12
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml11
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.it.yml13
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml13
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml13
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml13
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml19
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml60
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.th.yml15
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml48
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig28
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig89
-rw-r--r--tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php15
-rw-r--r--tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php64
-rw-r--r--tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json4
25 files changed, 586 insertions, 33 deletions
diff --git a/.gitignore b/.gitignore
index 49ff72c6..553b0e94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,6 +32,7 @@ web/uploads/
32# Build 32# Build
33/app/build 33/app/build
34/build 34/build
35/coverage
35 36
36# Composer PHAR 37# Composer PHAR
37/composer.phar 38/composer.phar
diff --git a/src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php b/src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php
new file mode 100644
index 00000000..2496298a
--- /dev/null
+++ b/src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php
@@ -0,0 +1,39 @@
1<?php
2
3namespace Wallabag\ApiBundle\Controller;
4
5use JMS\Serializer\SerializationContext;
6use JMS\Serializer\SerializerBuilder;
7use Nelmio\ApiDocBundle\Annotation\ApiDoc;
8use Symfony\Component\HttpFoundation\Response;
9
10class TaggingRuleRestController extends WallabagRestController
11{
12 /**
13 * Export all tagging rules as a json file.
14 *
15 * @ApiDoc()
16 *
17 * @return Response
18 */
19 public function getTaggingruleExportAction()
20 {
21 $this->validateAuthentication();
22
23 $data = SerializerBuilder::create()->build()->serialize(
24 $this->getUser()->getConfig()->getTaggingRules(),
25 'json',
26 SerializationContext::create()->setGroups(['export_tagging_rule'])
27 );
28
29 return Response::create(
30 $data,
31 200,
32 [
33 'Content-type' => 'application/json',
34 'Content-Disposition' => 'attachment; filename="tagging_rules_' . $this->getUser()->getUsername() . '.json"',
35 'Content-Transfer-Encoding' => 'UTF-8',
36 ]
37 );
38 }
39}
diff --git a/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml b/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml
index 06e62c37..98efeeb1 100644
--- a/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml
+++ b/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml
@@ -13,6 +13,11 @@ tag:
13 resource: "WallabagApiBundle:TagRest" 13 resource: "WallabagApiBundle:TagRest"
14 name_prefix: api_ 14 name_prefix: api_
15 15
16tagging_rule:
17 type: rest
18 resource: "WallabagApiBundle:TaggingRuleRest"
19 name_prefix: api_
20
16annotation: 21annotation:
17 type: rest 22 type: rest
18 resource: "WallabagApiBundle:AnnotationRest" 23 resource: "WallabagApiBundle:AnnotationRest"
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index cea41303..0db90ba4 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -2,11 +2,14 @@
2 2
3namespace Wallabag\CoreBundle\Controller; 3namespace Wallabag\CoreBundle\Controller;
4 4
5use JMS\Serializer\SerializationContext;
6use JMS\Serializer\SerializerBuilder;
5use PragmaRX\Recovery\Recovery as BackupCodes; 7use PragmaRX\Recovery\Recovery as BackupCodes;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpFoundation\JsonResponse; 9use Symfony\Component\HttpFoundation\JsonResponse;
8use Symfony\Component\HttpFoundation\RedirectResponse; 10use Symfony\Component\HttpFoundation\RedirectResponse;
9use Symfony\Component\HttpFoundation\Request; 11use Symfony\Component\HttpFoundation\Request;
12use Symfony\Component\HttpFoundation\Response;
10use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; 13use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
11use Symfony\Component\Routing\Annotation\Route; 14use Symfony\Component\Routing\Annotation\Route;
12use Symfony\Component\Validator\Constraints\Locale as LocaleConstraint; 15use Symfony\Component\Validator\Constraints\Locale as LocaleConstraint;
@@ -15,6 +18,7 @@ use Wallabag\CoreBundle\Entity\TaggingRule;
15use Wallabag\CoreBundle\Form\Type\ChangePasswordType; 18use Wallabag\CoreBundle\Form\Type\ChangePasswordType;
16use Wallabag\CoreBundle\Form\Type\ConfigType; 19use Wallabag\CoreBundle\Form\Type\ConfigType;
17use Wallabag\CoreBundle\Form\Type\FeedType; 20use Wallabag\CoreBundle\Form\Type\FeedType;
21use Wallabag\CoreBundle\Form\Type\TaggingRuleImportType;
18use Wallabag\CoreBundle\Form\Type\TaggingRuleType; 22use Wallabag\CoreBundle\Form\Type\TaggingRuleType;
19use Wallabag\CoreBundle\Form\Type\UserInformationType; 23use Wallabag\CoreBundle\Form\Type\UserInformationType;
20use Wallabag\CoreBundle\Tools\Utils; 24use Wallabag\CoreBundle\Tools\Utils;
@@ -140,6 +144,37 @@ class ConfigController extends Controller
140 return $this->redirect($this->generateUrl('config') . '#set5'); 144 return $this->redirect($this->generateUrl('config') . '#set5');
141 } 145 }
142 146
147 // handle tagging rules import
148 $taggingRulesImportform = $this->createForm(TaggingRuleImportType::class);
149 $taggingRulesImportform->handleRequest($request);
150
151 if ($taggingRulesImportform->isSubmitted() && $taggingRulesImportform->isValid()) {
152 $message = 'flashes.config.notice.tagging_rules_not_imported';
153 $file = $taggingRulesImportform->get('file')->getData();
154
155 if (null !== $file && $file->isValid() && \in_array($file->getClientMimeType(), ['application/json', 'application/octet-stream'], true)) {
156 $content = json_decode(file_get_contents($file->getPathname()), true);
157
158 if (\is_array($content)) {
159 foreach ($content as $rule) {
160 $taggingRule = new TaggingRule();
161 $taggingRule->setRule($rule['rule']);
162 $taggingRule->setTags($rule['tags']);
163 $taggingRule->setConfig($config);
164 $em->persist($taggingRule);
165 }
166
167 $em->flush();
168
169 $message = 'flashes.config.notice.tagging_rules_imported';
170 }
171 }
172
173 $this->addFlash('notice', $message);
174
175 return $this->redirect($this->generateUrl('config') . '#set5');
176 }
177
143 return $this->render('WallabagCoreBundle:Config:index.html.twig', [ 178 return $this->render('WallabagCoreBundle:Config:index.html.twig', [
144 'form' => [ 179 'form' => [
145 'config' => $configForm->createView(), 180 'config' => $configForm->createView(),
@@ -147,6 +182,7 @@ class ConfigController extends Controller
147 'pwd' => $pwdForm->createView(), 182 'pwd' => $pwdForm->createView(),
148 'user' => $userForm->createView(), 183 'user' => $userForm->createView(),
149 'new_tagging_rule' => $newTaggingRule->createView(), 184 'new_tagging_rule' => $newTaggingRule->createView(),
185 'import_tagging_rule' => $taggingRulesImportform->createView(),
150 ], 186 ],
151 'feed' => [ 187 'feed' => [
152 'username' => $user->getUsername(), 188 'username' => $user->getUsername(),
@@ -493,6 +529,32 @@ class ConfigController extends Controller
493 } 529 }
494 530
495 /** 531 /**
532 * Export tagging rules for the logged in user.
533 *
534 * @Route("/tagging-rule/export", name="export_tagging_rule")
535 *
536 * @return Response
537 */
538 public function exportTaggingRulesAction()
539 {
540 $data = SerializerBuilder::create()->build()->serialize(
541 $this->getUser()->getConfig()->getTaggingRules(),
542 'json',
543 SerializationContext::create()->setGroups(['export_tagging_rule'])
544 );
545
546 return Response::create(
547 $data,
548 200,
549 [
550 'Content-type' => 'application/json',
551 'Content-Disposition' => 'attachment; filename="tagging_rules_' . $this->getUser()->getUsername() . '.json"',
552 'Content-Transfer-Encoding' => 'UTF-8',
553 ]
554 );
555 }
556
557 /**
496 * Remove all tags for given tags and a given user and cleanup orphan tags. 558 * Remove all tags for given tags and a given user and cleanup orphan tags.
497 * 559 *
498 * @param array $tags 560 * @param array $tags
diff --git a/src/Wallabag/CoreBundle/Entity/TaggingRule.php b/src/Wallabag/CoreBundle/Entity/TaggingRule.php
index c1be3165..eac53fa3 100644
--- a/src/Wallabag/CoreBundle/Entity/TaggingRule.php
+++ b/src/Wallabag/CoreBundle/Entity/TaggingRule.php
@@ -3,12 +3,16 @@
3namespace Wallabag\CoreBundle\Entity; 3namespace Wallabag\CoreBundle\Entity;
4 4
5use Doctrine\ORM\Mapping as ORM; 5use Doctrine\ORM\Mapping as ORM;
6use JMS\Serializer\Annotation\Exclude;
7use JMS\Serializer\Annotation\Groups;
8use JMS\Serializer\Annotation\XmlRoot;
6use Symfony\Bridge\RulerZ\Validator\Constraints as RulerZAssert; 9use Symfony\Bridge\RulerZ\Validator\Constraints as RulerZAssert;
7use Symfony\Component\Validator\Constraints as Assert; 10use Symfony\Component\Validator\Constraints as Assert;
8 11
9/** 12/**
10 * Tagging rule. 13 * Tagging rule.
11 * 14 *
15 * @XmlRoot("tagging_rule")
12 * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TaggingRuleRepository") 16 * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TaggingRuleRepository")
13 * @ORM\Table(name="`tagging_rule`") 17 * @ORM\Table(name="`tagging_rule`")
14 * @ORM\Entity 18 * @ORM\Entity
@@ -34,6 +38,8 @@ class TaggingRule
34 * allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or", "matches", "notmatches"} 38 * allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or", "matches", "notmatches"}
35 * ) 39 * )
36 * @ORM\Column(name="rule", type="string", nullable=false) 40 * @ORM\Column(name="rule", type="string", nullable=false)
41 *
42 * @Groups({"export_tagging_rule"})
37 */ 43 */
38 private $rule; 44 private $rule;
39 45
@@ -42,10 +48,14 @@ class TaggingRule
42 * 48 *
43 * @Assert\NotBlank() 49 * @Assert\NotBlank()
44 * @ORM\Column(name="tags", type="simple_array", nullable=false) 50 * @ORM\Column(name="tags", type="simple_array", nullable=false)
51 *
52 * @Groups({"export_tagging_rule"})
45 */ 53 */
46 private $tags = []; 54 private $tags = [];
47 55
48 /** 56 /**
57 * @Exclude
58 *
49 * @ORM\ManyToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", inversedBy="taggingRules") 59 * @ORM\ManyToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", inversedBy="taggingRules")
50 */ 60 */
51 private $config; 61 private $config;
diff --git a/src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php
new file mode 100644
index 00000000..c6a8c0b8
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php
@@ -0,0 +1,29 @@
1<?php
2
3namespace Wallabag\CoreBundle\Form\Type;
4
5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\Extension\Core\Type\FileType;
7use Symfony\Component\Form\Extension\Core\Type\SubmitType;
8use Symfony\Component\Form\FormBuilderInterface;
9
10class TaggingRuleImportType extends AbstractType
11{
12 public function buildForm(FormBuilderInterface $builder, array $options)
13 {
14 $builder
15 ->add('file', FileType::class, [
16 'label' => 'config.form_rules.file_label',
17 'required' => true,
18 ])
19 ->add('import', SubmitType::class, [
20 'label' => 'config.form_rules.import_submit',
21 ])
22 ;
23 }
24
25 public function getBlockPrefix()
26 {
27 return 'upload_tagging_rule_file';
28 }
29}
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
index 5c4ca29c..fab05835 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
@@ -140,6 +140,15 @@ config:
140 # edit_rule_label: 'edit' 140 # edit_rule_label: 'edit'
141 # rule_label: 'Rule' 141 # rule_label: 'Rule'
142 # tags_label: 'Tags' 142 # tags_label: 'Tags'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
143 # faq: 152 # faq:
144 # title: 'FAQ' 153 # title: 'FAQ'
145 # tagging_rules_definition_title: 'What does « tagging rules » mean?' 154 # tagging_rules_definition_title: 'What does « tagging rules » mean?'
@@ -602,6 +611,9 @@ flashes:
602 # tags_reset: Tags reset 611 # tags_reset: Tags reset
603 # entries_reset: Entries reset 612 # entries_reset: Entries reset
604 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
605 entry: 617 entry:
606 notice: 618 notice:
607 # entry_already_saved: 'Entry already saved on %date%' 619 # entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
index a21bd0f1..6ba464d0 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
@@ -140,6 +140,15 @@ config:
140 edit_rule_label: 'bearbeiten' 140 edit_rule_label: 'bearbeiten'
141 rule_label: 'Regel' 141 rule_label: 'Regel'
142 tags_label: 'Tags' 142 tags_label: 'Tags'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
143 faq: 152 faq:
144 title: 'FAQ' 153 title: 'FAQ'
145 tagging_rules_definition_title: 'Was bedeuten die "Tagging-Regeln"?' 154 tagging_rules_definition_title: 'Was bedeuten die "Tagging-Regeln"?'
@@ -172,6 +181,15 @@ config:
172 and: 'Eine Regel UND eine andere' 181 and: 'Eine Regel UND eine andere'
173 matches: 'Testet, ob eine <i>Variable</i> auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title matches "Fußball"</code>' 182 matches: 'Testet, ob eine <i>Variable</i> auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title matches "Fußball"</code>'
174 notmatches: 'Testet, ob ein <i>Titel</i> nicht auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title notmatches "Fußball"</code>' 183 notmatches: 'Testet, ob ein <i>Titel</i> nicht auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title notmatches "Fußball"</code>'
184 otp:
185 # page_title: Two-factor authentication
186 # app:
187 # two_factor_code_description_1: You just enabled the OTP two factor authentication, open your OTP app and use that code to get a one time password. It'll disapear after a page reload.
188 # two_factor_code_description_2: 'You can scan that QR Code with your app:'
189 # two_factor_code_description_3: 'Also, save these backup codes in a safe place, you can use them in case you lose access to your OTP app:'
190 # two_factor_code_description_4: 'Test an OTP code from your configured app:'
191 # cancel: Cancel
192 # enable: Enable
175 193
176entry: 194entry:
177 default_title: 'Titel des Eintrags' 195 default_title: 'Titel des Eintrags'
@@ -593,6 +611,9 @@ flashes:
593 tags_reset: Tags zurücksetzen 611 tags_reset: Tags zurücksetzen
594 entries_reset: Einträge zurücksetzen 612 entries_reset: Einträge zurücksetzen
595 archived_reset: Archiverte Einträge zurücksetzen 613 archived_reset: Archiverte Einträge zurücksetzen
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
596 entry: 617 entry:
597 notice: 618 notice:
598 entry_already_saved: 'Eintrag bereits am %date% gespeichert' 619 entry_already_saved: 'Eintrag bereits am %date% gespeichert'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
index 2f310246..a7c32f11 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
@@ -140,6 +140,15 @@ config:
140 edit_rule_label: 'edit' 140 edit_rule_label: 'edit'
141 rule_label: 'Rule' 141 rule_label: 'Rule'
142 tags_label: 'Tags' 142 tags_label: 'Tags'
143 card:
144 new_tagging_rule: Create a tagging rule
145 import_tagging_rules: Import tagging rules
146 import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 export_tagging_rules: Export tagging rules
148 export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 file_label: JSON file
150 import_submit: Import
151 export: Export
143 faq: 152 faq:
144 title: 'FAQ' 153 title: 'FAQ'
145 tagging_rules_definition_title: 'What does « tagging rules » mean?' 154 tagging_rules_definition_title: 'What does « tagging rules » mean?'
@@ -603,6 +612,8 @@ flashes:
603 entries_reset: Entries reset 612 entries_reset: Entries reset
604 archived_reset: Archived entries deleted 613 archived_reset: Archived entries deleted
605 otp_enabled: Two-factor authentication enabled 614 otp_enabled: Two-factor authentication enabled
615 tagging_rules_imported: Tagging rules imported
616 tagging_rules_not_imported: Error while importing tagging rules
606 entry: 617 entry:
607 notice: 618 notice:
608 entry_already_saved: 'Entry already saved on %date%' 619 entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
index c194041a..093c5857 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
@@ -140,6 +140,15 @@ config:
140 edit_rule_label: 'editar' 140 edit_rule_label: 'editar'
141 rule_label: 'Regla' 141 rule_label: 'Regla'
142 tags_label: 'Etiquetas' 142 tags_label: 'Etiquetas'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
143 faq: 152 faq:
144 title: 'Preguntas frecuentes' 153 title: 'Preguntas frecuentes'
145 tagging_rules_definition_title: '¿Qué significa « reglas de etiquetado automático »?' 154 tagging_rules_definition_title: '¿Qué significa « reglas de etiquetado automático »?'
@@ -602,6 +611,9 @@ flashes:
602 tags_reset: Etiquetas reiniciadas 611 tags_reset: Etiquetas reiniciadas
603 entries_reset: Artículos reiniciados 612 entries_reset: Artículos reiniciados
604 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
605 entry: 617 entry:
606 notice: 618 notice:
607 entry_already_saved: 'Artículo ya guardado el %fecha%' 619 entry_already_saved: 'Artículo ya guardado el %fecha%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
index 9aef7dde..00caa0ac 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
@@ -140,6 +140,15 @@ config:
140 # edit_rule_label: 'edit' 140 # edit_rule_label: 'edit'
141 rule_label: 'قانون' 141 rule_label: 'قانون'
142 tags_label: 'برچسب‌ها' 142 tags_label: 'برچسب‌ها'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
143 faq: 152 faq:
144 title: 'پرسش‌های متداول' 153 title: 'پرسش‌های متداول'
145 tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟' 154 tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟'
@@ -602,6 +611,9 @@ flashes:
602 # tags_reset: Tags reset 611 # tags_reset: Tags reset
603 # entries_reset: Entries reset 612 # entries_reset: Entries reset
604 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
605 entry: 617 entry:
606 notice: 618 notice:
607 entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' 619 entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
index 9848ed9a..ca66acde 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
@@ -140,6 +140,15 @@ config:
140 edit_rule_label: "éditer" 140 edit_rule_label: "éditer"
141 rule_label: "Règle" 141 rule_label: "Règle"
142 tags_label: "Tags" 142 tags_label: "Tags"
143 card:
144 new_tagging_rule: Créer une règle
145 import_tagging_rules: Importer des règles
146 import_tagging_rules_detail: Vous devez sélectionné un fichier JSON que vous avez précédemment exporté.
147 export_tagging_rules: Exporter les règles
148 export_tagging_rules_detail: Un fichier JSON sera téléchargé et vous pourrez l'utiliser pour ré-importer les règles ou comme sauvegarde.
149 file_label: Fichier JSON
150 import_submit: Importer
151 export: Export
143 faq: 152 faq:
144 title: "FAQ" 153 title: "FAQ"
145 tagging_rules_definition_title: "Que signifient les règles de tag automatiques ?" 154 tagging_rules_definition_title: "Que signifient les règles de tag automatiques ?"
@@ -604,6 +613,8 @@ flashes:
604 entries_reset: "Articles supprimés" 613 entries_reset: "Articles supprimés"
605 archived_reset: "Articles archivés supprimés" 614 archived_reset: "Articles archivés supprimés"
606 otp_enabled: "Authentification à double-facteur activée" 615 otp_enabled: "Authentification à double-facteur activée"
616 tagging_rules_imported: Règles bien importées
617 tagging_rules_not_imported: Impossible d'importer les règles
607 entry: 618 entry:
608 notice: 619 notice:
609 entry_already_saved: "Article déjà sauvegardé le %date%" 620 entry_already_saved: "Article déjà sauvegardé le %date%"
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
index efbf062b..85720ef8 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'Nome' 106 name_label: 'Nome'
107 email_label: 'E-mail' 107 email_label: 'E-mail'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 edit_rule_label: 'modifica' 140 edit_rule_label: 'modifica'
140 rule_label: 'Regola' 141 rule_label: 'Regola'
141 tags_label: 'Etichetta' 142 tags_label: 'Etichetta'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 faq: 152 faq:
143 title: 'FAQ' 153 title: 'FAQ'
144 tagging_rules_definition_title: 'Cosa significa « regole di etichettatura » ?' 154 tagging_rules_definition_title: 'Cosa significa « regole di etichettatura » ?'
@@ -601,6 +611,9 @@ flashes:
601 tags_reset: Reset etichette 611 tags_reset: Reset etichette
602 entries_reset: Reset articoli 612 entries_reset: Reset articoli
603 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
604 entry: 617 entry:
605 notice: 618 notice:
606 entry_already_saved: 'Contenuto già salvato in data %date%' 619 entry_already_saved: 'Contenuto già salvato in data %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
index 86ce4644..18d1173b 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'Nom' 106 name_label: 'Nom'
107 email_label: 'Adreça de corrièl' 107 email_label: 'Adreça de corrièl'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 edit_rule_label: 'modificar' 140 edit_rule_label: 'modificar'
140 rule_label: 'Règla' 141 rule_label: 'Règla'
141 tags_label: 'Etiquetas' 142 tags_label: 'Etiquetas'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 faq: 152 faq:
143 title: 'FAQ' 153 title: 'FAQ'
144 tagging_rules_definition_title: "Qué significa las règlas d'etiquetas automaticas ?" 154 tagging_rules_definition_title: "Qué significa las règlas d'etiquetas automaticas ?"
@@ -601,6 +611,9 @@ flashes:
601 tags_reset: Etiquetas levadas 611 tags_reset: Etiquetas levadas
602 entries_reset: Articles levats 612 entries_reset: Articles levats
603 archived_reset: Articles archivat suprimits 613 archived_reset: Articles archivat suprimits
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
604 entry: 617 entry:
605 notice: 618 notice:
606 entry_already_saved: 'Article ja salvagardat lo %date%' 619 entry_already_saved: 'Article ja salvagardat lo %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
index 9ebe0236..6528a562 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'Nazwa' 106 name_label: 'Nazwa'
107 email_label: 'Adres email' 107 email_label: 'Adres email'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 edit_rule_label: 'edytuj' 140 edit_rule_label: 'edytuj'
140 rule_label: 'Reguła' 141 rule_label: 'Reguła'
141 tags_label: 'Tagi' 142 tags_label: 'Tagi'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 faq: 152 faq:
143 title: 'FAQ' 153 title: 'FAQ'
144 tagging_rules_definition_title: 'Co oznaczają « reguły tagowania » ?' 154 tagging_rules_definition_title: 'Co oznaczają « reguły tagowania » ?'
@@ -601,6 +611,9 @@ flashes:
601 tags_reset: Zresetuj tagi 611 tags_reset: Zresetuj tagi
602 entries_reset: Zresetuj wpisy 612 entries_reset: Zresetuj wpisy
603 archived_reset: Zarchiwizowane wpisy usunięte 613 archived_reset: Zarchiwizowane wpisy usunięte
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
604 entry: 617 entry:
605 notice: 618 notice:
606 entry_already_saved: 'Wpis już został dodany %date%' 619 entry_already_saved: 'Wpis już został dodany %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
index d310e016..3f1c7a68 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'Nome' 106 name_label: 'Nome'
107 email_label: 'E-mail' 107 email_label: 'E-mail'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 edit_rule_label: 'editar' 140 edit_rule_label: 'editar'
140 rule_label: 'Regras' 141 rule_label: 'Regras'
141 tags_label: 'Tags' 142 tags_label: 'Tags'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 faq: 152 faq:
143 title: 'FAQ' 153 title: 'FAQ'
144 tagging_rules_definition_title: 'O que as « regras de tags » significam?' 154 tagging_rules_definition_title: 'O que as « regras de tags » significam?'
@@ -601,6 +611,9 @@ flashes:
601 # tags_reset: Tags reset 611 # tags_reset: Tags reset
602 # entries_reset: Entries reset 612 # entries_reset: Entries reset
603 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
604 entry: 617 entry:
605 notice: 618 notice:
606 entry_already_saved: 'Entrada já foi salva em %date%' 619 entry_already_saved: 'Entrada já foi salva em %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
index c11ff0b8..d82e9377 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'Nume' 106 name_label: 'Nume'
107 email_label: 'E-mail' 107 email_label: 'E-mail'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 # edit_rule_label: 'edit' 140 # edit_rule_label: 'edit'
140 # rule_label: 'Rule' 141 # rule_label: 'Rule'
141 # tags_label: 'Tags' 142 # tags_label: 'Tags'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 # faq: 152 # faq:
143 # title: 'FAQ' 153 # title: 'FAQ'
144 # tagging_rules_definition_title: 'What does « tagging rules » mean?' 154 # tagging_rules_definition_title: 'What does « tagging rules » mean?'
@@ -429,9 +439,9 @@ tag:
429 rename: 439 rename:
430 # placeholder: 'You can update tag name.' 440 # placeholder: 'You can update tag name.'
431 441
432# export: 442export:
433# footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' 443 # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>'
434# unknown: 'Unknown' 444 # unknown: 'Unknown'
435 445
436import: 446import:
437 # page_title: 'Import' 447 # page_title: 'Import'
@@ -601,6 +611,9 @@ flashes:
601 # tags_reset: Tags reset 611 # tags_reset: Tags reset
602 # entries_reset: Entries reset 612 # entries_reset: Entries reset
603 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
604 entry: 617 entry:
605 notice: 618 notice:
606 # entry_already_saved: 'Entry already saved on %date%' 619 # entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml
index 9fe75369..23d31333 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml
@@ -80,6 +80,7 @@ config:
80 redirect_current_page: 'На текущую страницу' 80 redirect_current_page: 'На текущую страницу'
81 pocket_consumer_key_label: "Ключ от Pocket для импорта контента" 81 pocket_consumer_key_label: "Ключ от Pocket для импорта контента"
82 android_configuration: "Настройте Ваше Android приложение" 82 android_configuration: "Настройте Ваше Android приложение"
83 # android_instruction: "Touch here to prefill your Android application"
83 help_theme: "wallabag настраиваемый, здесь Вы можете выбрать тему." 84 help_theme: "wallabag настраиваемый, здесь Вы можете выбрать тему."
84 help_items_per_page: "Вы можете выбрать количество отображаемых записей на странице." 85 help_items_per_page: "Вы можете выбрать количество отображаемых записей на странице."
85 help_reading_speed: "wallabag посчитает сколько времени занимает чтение каждой записи. Вы можете определить здесь, как быстро вы читаете. wallabag пересчитает время чтения для каждой записи." 86 help_reading_speed: "wallabag посчитает сколько времени занимает чтение каждой записи. Вы можете определить здесь, как быстро вы читаете. wallabag пересчитает время чтения для каждой записи."
@@ -97,12 +98,14 @@ config:
97 unread: 'непрочитанные' 98 unread: 'непрочитанные'
98 starred: 'помеченные' 99 starred: 'помеченные'
99 archive: 'архивные' 100 archive: 'архивные'
101 # all: 'All'
100 feed_limit: 'Количество записей в фиде' 102 feed_limit: 'Количество записей в фиде'
101 form_user: 103 form_user:
102 # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code OR need to use an OTP app (like Google Authenticator, Authy or FreeOTP) to get a one time code on every new untrusted connection. You can't choose both option." 104 # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code OR need to use an OTP app (like Google Authenticator, Authy or FreeOTP) to get a one time code on every new untrusted connection. You can't choose both option."
103 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
104 name_label: 'Имя' 106 name_label: 'Имя'
105 email_label: 'Email' 107 email_label: 'Email'
108 two_factor:
106 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
107 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
108 # table_method: Method 111 # table_method: Method
@@ -123,6 +126,7 @@ config:
123 annotations: "Удалить все аннотации" 126 annotations: "Удалить все аннотации"
124 tags: "Удалить все теги" 127 tags: "Удалить все теги"
125 entries: "Удалить все записи" 128 entries: "Удалить все записи"
129 # archived: Remove ALL archived entries
126 confirm: "Вы уверены? (Данные будут БЕЗВОЗВРАТНО удалены, эти действия необратимы)" 130 confirm: "Вы уверены? (Данные будут БЕЗВОЗВРАТНО удалены, эти действия необратимы)"
127 form_password: 131 form_password:
128 description: "Здесь Вы можете поменять своя пароль. Ваш пароль должен быть длиннее 8 символов." 132 description: "Здесь Вы можете поменять своя пароль. Ваш пароль должен быть длиннее 8 символов."
@@ -136,6 +140,15 @@ config:
136 edit_rule_label: 'изменить' 140 edit_rule_label: 'изменить'
137 rule_label: 'Правило' 141 rule_label: 'Правило'
138 tags_label: 'теги' 142 tags_label: 'теги'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
139 faq: 152 faq:
140 title: 'FAQ' 153 title: 'FAQ'
141 tagging_rules_definition_title: 'Что значит "правило тегирования"?' 154 tagging_rules_definition_title: 'Что значит "правило тегирования"?'
@@ -167,6 +180,7 @@ config:
167 or: 'Одно правило ИЛИ другое' 180 or: 'Одно правило ИЛИ другое'
168 and: 'Одно правило И другое' 181 and: 'Одно правило И другое'
169 matches: 'Тесты, в которых <i> тема </i> соответствует <i> поиску </i> (без учета регистра). Пример: <code> title matches "футбол" </code>' 182 matches: 'Тесты, в которых <i> тема </i> соответствует <i> поиску </i> (без учета регистра). Пример: <code> title matches "футбол" </code>'
183 # notmatches: 'Tests that a <i>subject</i> doesn''t match match a <i>search</i> (case-insensitive).<br />Example: <code>title notmatches "football"</code>'
170 otp: 184 otp:
171 # page_title: Two-factor authentication 185 # page_title: Two-factor authentication
172 # app: 186 # app:
@@ -187,6 +201,7 @@ entry:
187 filtered_tags: 'Отфильтрованные по тегу:' 201 filtered_tags: 'Отфильтрованные по тегу:'
188 filtered_search: 'Отфильтрованные по поиску:' 202 filtered_search: 'Отфильтрованные по поиску:'
189 untagged: 'Записи без тегов' 203 untagged: 'Записи без тегов'
204 # all: 'All entries'
190 list: 205 list:
191 number_on_the_page: '{0} Записей не обнаружено.|{1} Одна запись.|]1,Inf[ Найдено %count% записей.' 206 number_on_the_page: '{0} Записей не обнаружено.|{1} Одна запись.|]1,Inf[ Найдено %count% записей.'
192 reading_time: 'расчетное время чтения' 207 reading_time: 'расчетное время чтения'
@@ -208,6 +223,8 @@ entry:
208 unread_label: 'Непрочитанная' 223 unread_label: 'Непрочитанная'
209 preview_picture_label: 'Есть картинка предварительного просмотра' 224 preview_picture_label: 'Есть картинка предварительного просмотра'
210 preview_picture_help: 'Картинка предварительного просмотра' 225 preview_picture_help: 'Картинка предварительного просмотра'
226 # is_public_label: 'Has a public link'
227 # is_public_help: 'Public link'
211 language_label: 'Язык' 228 language_label: 'Язык'
212 http_status_label: 'статус HTTP' 229 http_status_label: 'статус HTTP'
213 reading_time: 230 reading_time:
@@ -246,6 +263,8 @@ entry:
246 original_article: 'оригинал' 263 original_article: 'оригинал'
247 annotations_on_the_entry: '{0} Нет аннотации|{1} Одна аннотация|]1,Inf[ %count% аннотаций' 264 annotations_on_the_entry: '{0} Нет аннотации|{1} Одна аннотация|]1,Inf[ %count% аннотаций'
248 created_at: 'Дата создания' 265 created_at: 'Дата создания'
266 # published_at: 'Publication date'
267 # published_by: 'Published by'
249 # provided_by: 'Provided by' 268 # provided_by: 'Provided by'
250 new: 269 new:
251 page_title: 'Сохранить новую запись' 270 page_title: 'Сохранить новую запись'
@@ -259,10 +278,12 @@ entry:
259 title_label: 'Название' 278 title_label: 'Название'
260 url_label: 'Ссылка' 279 url_label: 'Ссылка'
261 # origin_url_label: 'Origin url (from where you found that entry)' 280 # origin_url_label: 'Origin url (from where you found that entry)'
262 is_public_label: 'Публичная'
263 save_label: 'Сохранить' 281 save_label: 'Сохранить'
264 public: 282 public:
265 shared_by_wallabag: "Запись была опубликована <a href='%wallabag_instance%'>wallabag</a>" 283 shared_by_wallabag: "Запись была опубликована <a href='%wallabag_instance%'>wallabag</a>"
284 confirm:
285 # delete: "Are you sure you want to remove that article?"
286 # delete_tag: "Are you sure you want to remove that tag from that article?"
266 metadata: 287 metadata:
267 # reading_time: "Estimated reading time" 288 # reading_time: "Estimated reading time"
268 # reading_time_minutes_short: "%readingTime% min" 289 # reading_time_minutes_short: "%readingTime% min"
@@ -418,9 +439,9 @@ tag:
418 rename: 439 rename:
419 # placeholder: 'You can update tag name.' 440 # placeholder: 'You can update tag name.'
420 441
421# export: 442export:
422# footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' 443 # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>'
423# unknown: 'Unknown' 444 # unknown: 'Unknown'
424 445
425import: 446import:
426 page_title: 'Импорт' 447 page_title: 'Импорт'
@@ -548,6 +569,28 @@ user:
548 delete: "Удалить" 569 delete: "Удалить"
549 delete_confirm: "Вы уверены?" 570 delete_confirm: "Вы уверены?"
550 back_to_list: "Назад к списку" 571 back_to_list: "Назад к списку"
572 search:
573 # placeholder: Filter by login or email
574
575site_credential:
576 # page_title: Site credentials management
577 # new_site_credential: Create a credential
578 # edit_site_credential: Edit an existing credential
579 # description: "Here you can manage all credentials for sites which required them (create, edit and delete), like a paywall, an authentication, etc."
580 # list:
581 # actions: Actions
582 # edit_action: Edit
583 # yes: Yes
584 # no: No
585 # create_new_one: Create a new credential
586 # form:
587 # username_label: 'Login'
588 # host_label: 'Host (subdomain.example.org, .example.org, etc.)'
589 # password_label: 'Password'
590 # save: Save
591 # delete: Delete
592 # delete_confirm: Are you sure?
593 # back_to_list: Back to list
551 594
552error: 595error:
553 page_title: "Произошла ошибка" 596 page_title: "Произошла ошибка"
@@ -567,6 +610,10 @@ flashes:
567 annotations_reset: "Аннотации сброшены" 610 annotations_reset: "Аннотации сброшены"
568 tags_reset: "Теги сброшены" 611 tags_reset: "Теги сброшены"
569 entries_reset: "Записи сброшены" 612 entries_reset: "Записи сброшены"
613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
570 entry: 617 entry:
571 notice: 618 notice:
572 entry_already_saved: 'Запись была сохранена ранее %date%' 619 entry_already_saved: 'Запись была сохранена ранее %date%'
@@ -603,3 +650,8 @@ flashes:
603 added: 'Пользователь "%username%" добавлен' 650 added: 'Пользователь "%username%" добавлен'
604 updated: 'Пользователь "%username%" обновлен' 651 updated: 'Пользователь "%username%" обновлен'
605 deleted: 'Пользователь "%username%" удален' 652 deleted: 'Пользователь "%username%" удален'
653 site_credential:
654 notice:
655 # added: 'Site credential for "%host%" added'
656 # updated: 'Site credential for "%host%" updated'
657 # deleted: 'Site credential for "%host%" deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml
index 672dcbf0..d7f47904 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'ชื่อ' 106 name_label: 'ชื่อ'
107 email_label: 'อีเมล' 107 email_label: 'อีเมล'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 edit_rule_label: 'ปรับแก้' 140 edit_rule_label: 'ปรับแก้'
140 rule_label: 'ข้อบังคับ' 141 rule_label: 'ข้อบังคับ'
141 tags_label: 'แท็ก' 142 tags_label: 'แท็ก'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 faq: 152 faq:
143 title: 'FAQ' 153 title: 'FAQ'
144 tagging_rules_definition_title: 'ข้อบังคับการแท็กคืออะไร?' 154 tagging_rules_definition_title: 'ข้อบังคับการแท็กคืออะไร?'
@@ -255,6 +265,7 @@ entry:
255 created_at: 'วันที่สร้าง' 265 created_at: 'วันที่สร้าง'
256 published_at: 'วันที่ประกาศ' 266 published_at: 'วันที่ประกาศ'
257 published_by: 'ประกาศโดย' 267 published_by: 'ประกาศโดย'
268 # provided_by: 'Provided by'
258 new: 269 new:
259 page_title: 'บันทึกรายการใหม่' 270 page_title: 'บันทึกรายการใหม่'
260 placeholder: 'http://website.com' 271 placeholder: 'http://website.com'
@@ -266,6 +277,7 @@ entry:
266 page_title: 'แก้ไขรายการ' 277 page_title: 'แก้ไขรายการ'
267 title_label: 'หัวข้อ' 278 title_label: 'หัวข้อ'
268 url_label: 'Url' 279 url_label: 'Url'
280 # origin_url_label: 'Origin url (from where you found that entry)'
269 save_label: 'บันทึก' 281 save_label: 'บันทึก'
270 public: 282 public:
271 shared_by_wallabag: "บทความนี้จะมีการแชร์โดย %username% กับ <a href='%wallabag_instance%'>wallabag</a>" 283 shared_by_wallabag: "บทความนี้จะมีการแชร์โดย %username% กับ <a href='%wallabag_instance%'>wallabag</a>"
@@ -599,6 +611,9 @@ flashes:
599 tags_reset: รีเซ็ตแท็ก 611 tags_reset: รีเซ็ตแท็ก
600 entries_reset: รีเซ็ตรายการ 612 entries_reset: รีเซ็ตรายการ
601 archived_reset: การลบเอกสารของรายการ 613 archived_reset: การลบเอกสารของรายการ
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
602 entry: 617 entry:
603 notice: 618 notice:
604 entry_already_saved: 'รายการพร้อมบันทึกที่ %date%' 619 entry_already_saved: 'รายการพร้อมบันทึกที่ %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
index c2ad854d..a444cadb 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
@@ -105,6 +105,7 @@ config:
105 # login_label: 'Login (can not be changed)' 105 # login_label: 'Login (can not be changed)'
106 name_label: 'İsim' 106 name_label: 'İsim'
107 email_label: 'E-posta' 107 email_label: 'E-posta'
108 two_factor:
108 # emailTwoFactor_label: 'Using email (receive a code by email)' 109 # emailTwoFactor_label: 'Using email (receive a code by email)'
109 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' 110 # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)'
110 # table_method: Method 111 # table_method: Method
@@ -139,6 +140,15 @@ config:
139 # edit_rule_label: 'edit' 140 # edit_rule_label: 'edit'
140 rule_label: 'Kural' 141 rule_label: 'Kural'
141 tags_label: 'Etiketler' 142 tags_label: 'Etiketler'
143 # card:
144 # new_tagging_rule: Create a tagging rule
145 # import_tagging_rules: Import tagging rules
146 # import_tagging_rules_detail: You have to select the JSON file you previously exported.
147 # export_tagging_rules: Export tagging rules
148 # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them.
149 # file_label: JSON file
150 # import_submit: Import
151 # export: Export
142 faq: 152 faq:
143 title: 'S.S.S.' 153 title: 'S.S.S.'
144 tagging_rules_definition_title: '« etiketleme kuralları » ne anlama geliyor?' 154 tagging_rules_definition_title: '« etiketleme kuralları » ne anlama geliyor?'
@@ -213,6 +223,8 @@ entry:
213 unread_label: 'Okunmayan' 223 unread_label: 'Okunmayan'
214 preview_picture_label: 'Resim önizlemesi varsa' 224 preview_picture_label: 'Resim önizlemesi varsa'
215 preview_picture_help: 'Resim önizlemesi' 225 preview_picture_help: 'Resim önizlemesi'
226 # is_public_label: 'Has a public link'
227 # is_public_help: 'Public link'
216 language_label: 'Dil' 228 language_label: 'Dil'
217 # http_status_label: 'HTTP status' 229 # http_status_label: 'HTTP status'
218 reading_time: 230 reading_time:
@@ -427,9 +439,9 @@ tag:
427 rename: 439 rename:
428 # placeholder: 'You can update tag name.' 440 # placeholder: 'You can update tag name.'
429 441
430# export: 442export:
431# footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' 443 # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>'
432# unknown: 'Unknown' 444 # unknown: 'Unknown'
433 445
434import: 446import:
435 page_title: 'İçe Aktar' 447 page_title: 'İçe Aktar'
@@ -560,6 +572,26 @@ user:
560 search: 572 search:
561 # placeholder: Filter by username or email 573 # placeholder: Filter by username or email
562 574
575site_credential:
576 # page_title: Site credentials management
577 # new_site_credential: Create a credential
578 # edit_site_credential: Edit an existing credential
579 # description: "Here you can manage all credentials for sites which required them (create, edit and delete), like a paywall, an authentication, etc."
580 # list:
581 # actions: Actions
582 # edit_action: Edit
583 # yes: Yes
584 # no: No
585 # create_new_one: Create a new credential
586 # form:
587 # username_label: 'Login'
588 # host_label: 'Host (subdomain.example.org, .example.org, etc.)'
589 # password_label: 'Password'
590 # save: Save
591 # delete: Delete
592 # delete_confirm: Are you sure?
593 # back_to_list: Back to list
594
563error: 595error:
564 # page_title: An error occurred 596 # page_title: An error occurred
565 597
@@ -571,13 +603,17 @@ flashes:
571 password_not_updated_demo: "In demonstration mode, you can't change password for this user." 603 password_not_updated_demo: "In demonstration mode, you can't change password for this user."
572 user_updated: 'Bilgiler güncellendi' 604 user_updated: 'Bilgiler güncellendi'
573 feed_updated: 'RSS bilgiler güncellendi' 605 feed_updated: 'RSS bilgiler güncellendi'
574 tagging_rules_updated: 'Tagging rules updated' 606 # tagging_rules_updated: 'Tagging rules updated'
575 tagging_rules_deleted: 'Tagging rule deleted' 607 # tagging_rules_deleted: 'Tagging rule deleted'
576 feed_token_updated: 'RSS token updated' 608 # feed_token_updated: 'RSS token updated'
609 # feed_token_revoked: 'RSS token revoked'
577 # annotations_reset: Annotations reset 610 # annotations_reset: Annotations reset
578 # tags_reset: Tags reset 611 # tags_reset: Tags reset
579 # entries_reset: Entries reset 612 # entries_reset: Entries reset
580 # archived_reset: Archived entries deleted 613 # archived_reset: Archived entries deleted
614 # otp_enabled: Two-factor authentication enabled
615 # tagging_rules_imported: Tagging rules imported
616 # tagging_rules_not_imported: Error while importing tagging rules
581 entry: 617 entry:
582 notice: 618 notice:
583 entry_already_saved: 'Entry already saved on %date%' 619 entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
index eba4539f..f719bea2 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
@@ -291,6 +291,34 @@
291 291
292 {{ form_rest(form.new_tagging_rule) }} 292 {{ form_rest(form.new_tagging_rule) }}
293 </form> 293 </form>
294
295 <div class="row">
296 <h3>{{ 'config.form_rules.card.import_tagging_rules'|trans }}</h3>
297 <p>{{ 'config.form_rules.card.import_tagging_rules_detail'|trans }}</p>
298 </div>
299
300 {{ form_start(form.import_tagging_rule) }}
301 {{ form_errors(form.import_tagging_rule) }}
302
303 <fieldset class="w500p inline">
304 <div class="row">
305 {{ form_label(form.import_tagging_rule.file) }}
306 {{ form_errors(form.import_tagging_rule.file) }}
307 {{ form_widget(form.import_tagging_rule.file) }}
308 </div>
309 </fieldset>
310
311 {{ form_rest(form.import_tagging_rule) }}
312 </form>
313
314 {% if app.user.config.taggingRules is not empty %}
315 <div class="row">
316 <h3>{{ 'config.form_rules.card.export_tagging_rules'|trans }}</h3>
317 <p>{{ 'config.form_rules.card.export_tagging_rules_detail'|trans }}</p>
318 <p><a href="{{ path('export_tagging_rule') }}" class="waves-effect waves-light btn">{{ 'config.form_rules.export'|trans }}</a></p>
319 </div>
320 {% endif %}
321
294 <div class="row"> 322 <div class="row">
295 <div class="input-field col s12"> 323 <div class="input-field col s12">
296 <h3>{{ 'config.form_rules.faq.title'|trans }}</h3> 324 <h3>{{ 'config.form_rules.faq.title'|trans }}</h3>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
index 990546e8..d8e9694d 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
@@ -307,28 +307,77 @@
307 </div> 307 </div>
308 {% endif %} 308 {% endif %}
309 309
310 {{ form_start(form.new_tagging_rule) }} 310 <ul class="row">
311 {{ form_errors(form.new_tagging_rule) }} 311 <li class="col l6 m6 s12">
312 312 <div class="card">
313 <div class="row"> 313 <div class="card-content">
314 <div class="input-field col s12"> 314 <span class="card-title">{{ 'config.form_rules.card.new_tagging_rule'|trans }}</span>
315 {{ form_label(form.new_tagging_rule.rule) }} 315
316 {{ form_errors(form.new_tagging_rule.rule) }} 316 {{ form_start(form.new_tagging_rule) }}
317 {{ form_widget(form.new_tagging_rule.rule) }} 317 {{ form_errors(form.new_tagging_rule) }}
318
319 <div class="row">
320 <div class="input-field col s12">
321 {{ form_label(form.new_tagging_rule.rule) }}
322 {{ form_errors(form.new_tagging_rule.rule) }}
323 {{ form_widget(form.new_tagging_rule.rule) }}
324 </div>
325 </div>
326
327 <div class="row">
328 <div class="input-field col s12">
329 {{ form_label(form.new_tagging_rule.tags) }}
330 {{ form_errors(form.new_tagging_rule.tags) }}
331 {{ form_widget(form.new_tagging_rule.tags) }}
332 </div>
333 </div>
334
335 {{ form_widget(form.new_tagging_rule.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
336 {{ form_rest(form.new_tagging_rule) }}
337 </form>
338 </div>
318 </div> 339 </div>
319 </div> 340 </li>
320 341 <li class="col l6 m6 s12">
321 <div class="row"> 342 <div class="card z-depth-1">
322 <div class="input-field col s12"> 343 <div class="card-content">
323 {{ form_label(form.new_tagging_rule.tags) }} 344 <span class="card-title">{{ 'config.form_rules.card.import_tagging_rules'|trans }}</span>
324 {{ form_errors(form.new_tagging_rule.tags) }} 345 <p>{{ 'config.form_rules.card.import_tagging_rules_detail'|trans }}</p>
325 {{ form_widget(form.new_tagging_rule.tags) }} 346 {{ form_start(form.import_tagging_rule) }}
347 {{ form_errors(form.import_tagging_rule) }}
348 <div class="row">
349 <div class="file-field input-field col s12">
350 {{ form_errors(form.import_tagging_rule.file) }}
351 <div class="btn">
352 <span>{{ form.import_tagging_rule.file.vars.label|trans }}</span>
353 {{ form_widget(form.import_tagging_rule.file) }}
354 </div>
355 <div class="file-path-wrapper">
356 <input class="file-path validate" type="text">
357 </div>
358 </div>
359 </div>
360
361 {{ form_widget(form.import_tagging_rule.import, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
362
363 {{ form_rest(form.import_tagging_rule) }}
364 </form>
365 </div>
326 </div> 366 </div>
327 </div> 367 </li>
328 368 {% if app.user.config.taggingRules is not empty %}
329 {{ form_widget(form.new_tagging_rule.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} 369 <li class="col l6 m6 s12">
330 {{ form_rest(form.new_tagging_rule) }} 370 <div class="card z-depth-1">
331 </form> 371 <div class="card-content">
372 <span class="card-title">{{ 'config.form_rules.card.export_tagging_rules'|trans }}</span>
373 <p>{{ 'config.form_rules.card.export_tagging_rules_detail'|trans }}</p>
374 <br/>
375 <p><a href="{{ path('export_tagging_rule') }}" class="waves-effect waves-light btn">{{ 'config.form_rules.export'|trans }}</a></p>
376 </div>
377 </div>
378 </li>
379 {% endif %}
380 </ul>
332 381
333 <div class="row"> 382 <div class="row">
334 <div class="input-field col s12"> 383 <div class="input-field col s12">
diff --git a/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php
new file mode 100644
index 00000000..b6477256
--- /dev/null
+++ b/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php
@@ -0,0 +1,15 @@
1<?php
2
3namespace Tests\Wallabag\ApiBundle\Controller;
4
5use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
6
7class TaggingRuleRestControllerTest extends WallabagApiTestCase
8{
9 public function testExportEntry()
10 {
11 $this->client->request('GET', '/api/taggingrule/export');
12 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
13 $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
14 }
15}
diff --git a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
index b9e0bed2..d8b5f383 100644
--- a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
@@ -2,6 +2,7 @@
2 2
3namespace Tests\Wallabag\CoreBundle\Controller; 3namespace Tests\Wallabag\CoreBundle\Controller;
4 4
5use Symfony\Component\HttpFoundation\File\UploadedFile;
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; 6use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Wallabag\AnnotationBundle\Entity\Annotation; 7use Wallabag\AnnotationBundle\Entity\Annotation;
7use Wallabag\CoreBundle\Entity\Config; 8use Wallabag\CoreBundle\Entity\Config;
@@ -1097,4 +1098,67 @@ class ConfigControllerTest extends WallabagCoreTestCase
1097 $this->assertFalse($user->isGoogleTwoFactor()); 1098 $this->assertFalse($user->isGoogleTwoFactor());
1098 $this->assertEmpty($user->getBackupCodes()); 1099 $this->assertEmpty($user->getBackupCodes());
1099 } 1100 }
1101
1102 public function testExportTaggingRule()
1103 {
1104 $this->logInAs('admin');
1105 $client = $this->getClient();
1106
1107 ob_start();
1108 $crawler = $client->request('GET', '/tagging-rule/export');
1109 ob_end_clean();
1110
1111 $this->assertSame(200, $client->getResponse()->getStatusCode());
1112
1113 $headers = $client->getResponse()->headers;
1114 $this->assertSame('application/json', $headers->get('content-type'));
1115 $this->assertSame('attachment; filename="tagging_rules_admin.json"', $headers->get('content-disposition'));
1116 $this->assertSame('UTF-8', $headers->get('content-transfer-encoding'));
1117
1118 $content = json_decode($client->getResponse()->getContent(), true);
1119
1120 $this->assertCount(4, $content);
1121 $this->assertSame('content matches "spurs"', $content[0]['rule']);
1122 $this->assertSame('sport', $content[0]['tags'][0]);
1123 }
1124
1125 public function testImportTagginfRuleBadFile()
1126 {
1127 $this->logInAs('admin');
1128 $client = $this->getClient();
1129
1130 $crawler = $client->request('GET', '/config');
1131 $form = $crawler->filter('form[name=upload_tagging_rule_file] > button[type=submit]')->form();
1132
1133 $data = [
1134 'upload_tagging_rule_file[file]' => '',
1135 ];
1136
1137 $client->submit($form, $data);
1138
1139 $this->assertSame(302, $client->getResponse()->getStatusCode());
1140 }
1141
1142 public function testImportTagginfRuleFile()
1143 {
1144 $this->logInAs('admin');
1145 $client = $this->getClient();
1146
1147 $crawler = $client->request('GET', '/config');
1148 $form = $crawler->filter('form[name=upload_tagging_rule_file] > button[type=submit]')->form();
1149
1150 $file = new UploadedFile(__DIR__ . '/../fixtures/tagging_rules_admin.json', 'tagging_rules_admin.json');
1151
1152 $data = [
1153 'upload_tagging_rule_file[file]' => $file,
1154 ];
1155
1156 $client->submit($form, $data);
1157 $this->assertSame(302, $client->getResponse()->getStatusCode());
1158
1159 $user = $client->getContainer()->get('fos_user.user_manager.test')->findUserBy(['username' => 'admin']);
1160 $taggingRules = $user->getConfig()->getTaggingRules()->toArray();
1161 $this->assertCount(5, $taggingRules);
1162 $this->assertSame('title matches "football"', $taggingRules[4]->getRule());
1163 }
1100} 1164}
diff --git a/tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json b/tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json
new file mode 100644
index 00000000..a54824e2
--- /dev/null
+++ b/tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json
@@ -0,0 +1,4 @@
1[{
2 "rule": "title matches \"football\"",
3 "tags": ["football"]
4}]