diff options
Diffstat (limited to 'src')
25 files changed, 304 insertions, 83 deletions
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php index 3873d2d3..cc7c2c94 100644 --- a/src/Wallabag/CoreBundle/Command/InstallCommand.php +++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php | |||
@@ -2,6 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Command; | 3 | namespace Wallabag\CoreBundle\Command; |
4 | 4 | ||
5 | use FOS\UserBundle\Event\UserEvent; | ||
6 | use FOS\UserBundle\FOSUserEvents; | ||
5 | use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; | 7 | use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; |
6 | use Symfony\Component\Console\Helper\Table; | 8 | use Symfony\Component\Console\Helper\Table; |
7 | use Symfony\Component\Console\Input\ArrayInput; | 9 | use Symfony\Component\Console\Input\ArrayInput; |
@@ -236,14 +238,9 @@ class InstallCommand extends ContainerAwareCommand | |||
236 | 238 | ||
237 | $em->persist($user); | 239 | $em->persist($user); |
238 | 240 | ||
239 | $config = new Config($user); | 241 | // dispatch a created event so the associated config will be created |
240 | $config->setTheme($this->getContainer()->getParameter('wallabag_core.theme')); | 242 | $event = new UserEvent($user); |
241 | $config->setItemsPerPage($this->getContainer()->getParameter('wallabag_core.items_on_page')); | 243 | $this->getContainer()->get('event_dispatcher')->dispatch(FOSUserEvents::USER_CREATED, $event); |
242 | $config->setRssLimit($this->getContainer()->getParameter('wallabag_core.rss_limit')); | ||
243 | $config->setReadingSpeed($this->getContainer()->getParameter('wallabag_core.reading_speed')); | ||
244 | $config->setLanguage($this->getContainer()->getParameter('wallabag_core.language')); | ||
245 | |||
246 | $em->persist($config); | ||
247 | 244 | ||
248 | $this->defaultOutput->writeln(''); | 245 | $this->defaultOutput->writeln(''); |
249 | 246 | ||
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 4f75511b..f1e212d9 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -2,6 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Controller; | 3 | namespace Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use FOS\UserBundle\Event\UserEvent; | ||
6 | use FOS\UserBundle\FOSUserEvents; | ||
5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 7 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 8 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
7 | use Symfony\Component\HttpFoundation\JsonResponse; | 9 | use Symfony\Component\HttpFoundation\JsonResponse; |
@@ -106,7 +108,21 @@ class ConfigController extends Controller | |||
106 | 108 | ||
107 | // handle tagging rule | 109 | // handle tagging rule |
108 | $taggingRule = new TaggingRule(); | 110 | $taggingRule = new TaggingRule(); |
109 | $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $this->generateUrl('config').'#set5']); | 111 | $action = $this->generateUrl('config').'#set5'; |
112 | |||
113 | if ($request->query->has('tagging-rule')) { | ||
114 | $taggingRule = $this->getDoctrine() | ||
115 | ->getRepository('WallabagCoreBundle:TaggingRule') | ||
116 | ->find($request->query->get('tagging-rule')); | ||
117 | |||
118 | if ($this->getUser()->getId() !== $taggingRule->getConfig()->getUser()->getId()) { | ||
119 | return $this->redirect($action); | ||
120 | } | ||
121 | |||
122 | $action = $this->generateUrl('config').'?tagging-rule='.$taggingRule->getId().'#set5'; | ||
123 | } | ||
124 | |||
125 | $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $action]); | ||
110 | $newTaggingRule->handleRequest($request); | 126 | $newTaggingRule->handleRequest($request); |
111 | 127 | ||
112 | if ($newTaggingRule->isValid()) { | 128 | if ($newTaggingRule->isValid()) { |
@@ -133,18 +149,11 @@ class ConfigController extends Controller | |||
133 | $newUserForm->handleRequest($request); | 149 | $newUserForm->handleRequest($request); |
134 | 150 | ||
135 | if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) { | 151 | if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) { |
136 | $userManager->updateUser($newUser, true); | 152 | $userManager->updateUser($newUser); |
137 | |||
138 | $config = new Config($newUser); | ||
139 | $config->setTheme($this->getParameter('wallabag_core.theme')); | ||
140 | $config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page')); | ||
141 | $config->setRssLimit($this->getParameter('wallabag_core.rss_limit')); | ||
142 | $config->setLanguage($this->getParameter('wallabag_core.language')); | ||
143 | $config->setReadingSpeed($this->getParameter('wallabag_core.reading_speed')); | ||
144 | 153 | ||
145 | $em->persist($config); | 154 | // dispatch a created event so the associated config will be created |
146 | 155 | $event = new UserEvent($newUser, $request); | |
147 | $em->flush(); | 156 | $this->get('event_dispatcher')->dispatch(FOSUserEvents::USER_CREATED, $event); |
148 | 157 | ||
149 | $this->get('session')->getFlashBag()->add( | 158 | $this->get('session')->getFlashBag()->add( |
150 | 'notice', | 159 | 'notice', |
@@ -210,9 +219,7 @@ class ConfigController extends Controller | |||
210 | */ | 219 | */ |
211 | public function deleteTaggingRuleAction(TaggingRule $rule) | 220 | public function deleteTaggingRuleAction(TaggingRule $rule) |
212 | { | 221 | { |
213 | if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { | 222 | $this->validateRuleAction($rule); |
214 | throw $this->createAccessDeniedException('You can not access this tagging rule.'); | ||
215 | } | ||
216 | 223 | ||
217 | $em = $this->getDoctrine()->getManager(); | 224 | $em = $this->getDoctrine()->getManager(); |
218 | $em->remove($rule); | 225 | $em->remove($rule); |
@@ -227,6 +234,34 @@ class ConfigController extends Controller | |||
227 | } | 234 | } |
228 | 235 | ||
229 | /** | 236 | /** |
237 | * Edit a tagging rule. | ||
238 | * | ||
239 | * @param TaggingRule $rule | ||
240 | * | ||
241 | * @Route("/tagging-rule/edit/{id}", requirements={"id" = "\d+"}, name="edit_tagging_rule") | ||
242 | * | ||
243 | * @return RedirectResponse | ||
244 | */ | ||
245 | public function editTaggingRuleAction(TaggingRule $rule) | ||
246 | { | ||
247 | $this->validateRuleAction($rule); | ||
248 | |||
249 | return $this->redirect($this->generateUrl('config').'?tagging-rule='.$rule->getId().'#set5'); | ||
250 | } | ||
251 | |||
252 | /** | ||
253 | * Validate that a rule can be edited/deleted by the current user. | ||
254 | * | ||
255 | * @param TaggingRule $rule | ||
256 | */ | ||
257 | private function validateRuleAction(TaggingRule $rule) | ||
258 | { | ||
259 | if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { | ||
260 | throw $this->createAccessDeniedException('You can not access this tagging rule.'); | ||
261 | } | ||
262 | } | ||
263 | |||
264 | /** | ||
230 | * Retrieve config for the current user. | 265 | * Retrieve config for the current user. |
231 | * If no config were found, create a new one. | 266 | * If no config were found, create a new one. |
232 | * | 267 | * |
@@ -238,6 +273,7 @@ class ConfigController extends Controller | |||
238 | ->getRepository('WallabagCoreBundle:Config') | 273 | ->getRepository('WallabagCoreBundle:Config') |
239 | ->findOneByUser($this->getUser()); | 274 | ->findOneByUser($this->getUser()); |
240 | 275 | ||
276 | // should NEVER HAPPEN ... | ||
241 | if (!$config) { | 277 | if (!$config) { |
242 | $config = new Config($this->getUser()); | 278 | $config = new Config($this->getUser()); |
243 | } | 279 | } |
diff --git a/src/Wallabag/CoreBundle/Controller/ExceptionController.php b/src/Wallabag/CoreBundle/Controller/ExceptionController.php new file mode 100644 index 00000000..abfa9c2f --- /dev/null +++ b/src/Wallabag/CoreBundle/Controller/ExceptionController.php | |||
@@ -0,0 +1,40 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController; | ||
6 | use Symfony\Component\HttpFoundation\Request; | ||
7 | |||
8 | /** | ||
9 | * This controller allow us to customize the error template. | ||
10 | * The only modified line from the parent template is for "WallabagCoreBundle". | ||
11 | */ | ||
12 | class ExceptionController extends BaseExceptionController | ||
13 | { | ||
14 | protected function findTemplate(Request $request, $format, $code, $showException) | ||
15 | { | ||
16 | $name = $showException ? 'exception' : 'error'; | ||
17 | if ($showException && 'html' == $format) { | ||
18 | $name = 'exception_full'; | ||
19 | } | ||
20 | |||
21 | // For error pages, try to find a template for the specific HTTP status code and format | ||
22 | if (!$showException) { | ||
23 | $template = sprintf('WallabagCoreBundle:Exception:%s.%s.twig', $name, $format); | ||
24 | if ($this->templateExists($template)) { | ||
25 | return $template; | ||
26 | } | ||
27 | } | ||
28 | |||
29 | // try to find a template for the given format | ||
30 | $template = sprintf('@Twig/Exception/%s.%s.twig', $name, $format); | ||
31 | if ($this->templateExists($template)) { | ||
32 | return $template; | ||
33 | } | ||
34 | |||
35 | // default to a generic HTML exception | ||
36 | $request->setRequestFormat('html'); | ||
37 | |||
38 | return sprintf('@Twig/Exception/%s.html.twig', $showException ? 'exception_full' : $name); | ||
39 | } | ||
40 | } | ||
diff --git a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php index 6ea2a4f3..40b5673d 100644 --- a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php +++ b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php | |||
@@ -49,7 +49,7 @@ class UsernameRssTokenConverter implements ParamConverterInterface | |||
49 | $em = $this->registry->getManagerForClass($configuration->getClass()); | 49 | $em = $this->registry->getManagerForClass($configuration->getClass()); |
50 | 50 | ||
51 | // Check, if class name is what we need | 51 | // Check, if class name is what we need |
52 | if ('Wallabag\UserBundle\Entity\User' !== $em->getClassMetadata($configuration->getClass())->getName()) { | 52 | if (null !== $em && 'Wallabag\UserBundle\Entity\User' !== $em->getClassMetadata($configuration->getClass())->getName()) { |
53 | return false; | 53 | return false; |
54 | } | 54 | } |
55 | 55 | ||
@@ -69,9 +69,8 @@ class UsernameRssTokenConverter implements ParamConverterInterface | |||
69 | $username = $request->attributes->get('username'); | 69 | $username = $request->attributes->get('username'); |
70 | $rssToken = $request->attributes->get('token'); | 70 | $rssToken = $request->attributes->get('token'); |
71 | 71 | ||
72 | // Check, if route attributes exists | 72 | if (!$request->attributes->has('username') || !$request->attributes->has('token')) { |
73 | if (null === $username || null === $rssToken) { | 73 | return false; |
74 | throw new \InvalidArgumentException('Route attribute is missing'); | ||
75 | } | 74 | } |
76 | 75 | ||
77 | // Get actual entity manager for class | 76 | // Get actual entity manager for class |
diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index 23e6d3ca..d1139846 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml | |||
@@ -88,17 +88,6 @@ services: | |||
88 | arguments: | 88 | arguments: |
89 | - WallabagCoreBundle:Tag | 89 | - WallabagCoreBundle:Tag |
90 | 90 | ||
91 | wallabag_core.registration_confirmed: | ||
92 | class: Wallabag\CoreBundle\EventListener\RegistrationConfirmedListener | ||
93 | arguments: | ||
94 | - "@doctrine.orm.entity_manager" | ||
95 | - "%wallabag_core.theme%" | ||
96 | - "%wallabag_core.items_on_page%" | ||
97 | - "%wallabag_core.rss_limit%" | ||
98 | - "%wallabag_core.language%" | ||
99 | tags: | ||
100 | - { name: kernel.event_subscriber } | ||
101 | |||
102 | wallabag_core.helper.entries_export: | 91 | wallabag_core.helper.entries_export: |
103 | class: Wallabag\CoreBundle\Helper\EntriesExport | 92 | class: Wallabag\CoreBundle\Helper\EntriesExport |
104 | arguments: | 93 | arguments: |
@@ -133,3 +122,9 @@ services: | |||
133 | host: '%redis_host%' | 122 | host: '%redis_host%' |
134 | port: '%redis_port%' | 123 | port: '%redis_port%' |
135 | schema: tcp | 124 | schema: tcp |
125 | |||
126 | wallabag_core.exception_controller: | ||
127 | class: Wallabag\CoreBundle\Controller\ExceptionController | ||
128 | arguments: | ||
129 | - '@twig' | ||
130 | - '%kernel.debug%' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml index 16e4f063..da7e2652 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | # social: 'Social' | 45 | # social: 'Social' |
46 | # powered_by: 'powered by' | 46 | # powered_by: 'powered by' |
47 | about: 'Om' | 47 | about: 'Om' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Opsætning' | 51 | page_title: 'Opsætning' |
@@ -94,6 +95,7 @@ config: | |||
94 | # if_label: 'if' | 95 | # if_label: 'if' |
95 | # then_tag_as_label: 'then tag as' | 96 | # then_tag_as_label: 'then tag as' |
96 | # delete_rule_label: 'delete' | 97 | # delete_rule_label: 'delete' |
98 | # edit_rule_label: 'edit' | ||
97 | # rule_label: 'Rule' | 99 | # rule_label: 'Rule' |
98 | # tags_label: 'Tags' | 100 | # tags_label: 'Tags' |
99 | # faq: | 101 | # faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 360 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
359 | # firefox: | 361 | # firefox: |
360 | # page_title: 'Import > Firefox' | 362 | # page_title: 'Import > Firefox' |
361 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 363 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 364 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
363 | #chrome: | 365 | #chrome: |
364 | # page_title: 'Import > Chrome' | 366 | # page_title: 'Import > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml index 5db4b28e..eb82f13f 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Soziales' | 45 | social: 'Soziales' |
46 | powered_by: 'angetrieben von' | 46 | powered_by: 'angetrieben von' |
47 | about: 'Ãœber' | 47 | about: 'Ãœber' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Einstellungen' | 51 | page_title: 'Einstellungen' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'Wenn' | 95 | if_label: 'Wenn' |
95 | then_tag_as_label: 'dann tagge als' | 96 | then_tag_as_label: 'dann tagge als' |
96 | delete_rule_label: 'löschen' | 97 | delete_rule_label: 'löschen' |
98 | # edit_rule_label: 'edit' | ||
97 | rule_label: 'Regel' | 99 | rule_label: 'Regel' |
98 | tags_label: 'Tags' | 100 | tags_label: 'Tags' |
99 | faq: | 101 | faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 360 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
359 | firefox: | 361 | firefox: |
360 | page_title: 'Aus Firefox importieren' | 362 | page_title: 'Aus Firefox importieren' |
361 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 363 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 364 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
363 | chrome: | 365 | chrome: |
364 | page_title: 'Aus Chrome importieren' | 366 | page_title: 'Aus Chrome importieren' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml index f9f8e217..01d8053b 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Social' | 45 | social: 'Social' |
46 | powered_by: 'powered by' | 46 | powered_by: 'powered by' |
47 | about: 'About' | 47 | about: 'About' |
48 | stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Config' | 51 | page_title: 'Config' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'if' | 95 | if_label: 'if' |
95 | then_tag_as_label: 'then tag as' | 96 | then_tag_as_label: 'then tag as' |
96 | delete_rule_label: 'delete' | 97 | delete_rule_label: 'delete' |
98 | edit_rule_label: 'edit' | ||
97 | rule_label: 'Rule' | 99 | rule_label: 'Rule' |
98 | tags_label: 'Tags' | 100 | tags_label: 'Tags' |
99 | faq: | 101 | faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 360 | enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
359 | firefox: | 361 | firefox: |
360 | page_title: 'Import > Firefox' | 362 | page_title: 'Import > Firefox' |
361 | description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 363 | description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 364 | how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
363 | chrome: | 365 | chrome: |
364 | page_title: 'Import > Chrome' | 366 | page_title: 'Import > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml index db87cd96..5364e99a 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Social' | 45 | social: 'Social' |
46 | powered_by: 'funciona por' | 46 | powered_by: 'funciona por' |
47 | about: 'Acerca de' | 47 | about: 'Acerca de' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Configuración' | 51 | page_title: 'Configuración' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'si' | 95 | if_label: 'si' |
95 | then_tag_as_label: 'Etiquete como' | 96 | then_tag_as_label: 'Etiquete como' |
96 | delete_rule_label: 'Borre' | 97 | delete_rule_label: 'Borre' |
98 | # edit_rule_label: 'edit' | ||
97 | rule_label: 'Regla' | 99 | rule_label: 'Regla' |
98 | tags_label: 'Etiquetas' | 100 | tags_label: 'Etiquetas' |
99 | faq: | 101 | faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 360 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
359 | firefox: | 361 | firefox: |
360 | page_title: 'Importar > Firefox' | 362 | page_title: 'Importar > Firefox' |
361 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 363 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 364 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
363 | chrome: | 365 | chrome: |
364 | page_title: 'Importar > Chrome' | 366 | page_title: 'Importar > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml index f6943ae5..6f42b173 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'شبکه‌های اجتماعی' | 45 | social: 'شبکه‌های اجتماعی' |
46 | powered_by: 'توانمند با' | 46 | powered_by: 'توانمند با' |
47 | about: 'درباره' | 47 | about: 'درباره' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'پیکربندی' | 51 | page_title: 'پیکربندی' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'اگر' | 95 | if_label: 'اگر' |
95 | then_tag_as_label: 'این برچسب را بزن' | 96 | then_tag_as_label: 'این برچسب را بزن' |
96 | delete_rule_label: 'پاک کن' | 97 | delete_rule_label: 'پاک کن' |
98 | # edit_rule_label: 'edit' | ||
97 | rule_label: 'قانون' | 99 | rule_label: 'قانون' |
98 | tags_label: 'برچسب‌ها' | 100 | tags_label: 'برچسب‌ها' |
99 | faq: | 101 | faq: |
@@ -357,7 +359,7 @@ import: | |||
357 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 359 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
358 | firefox: | 360 | firefox: |
359 | page_title: 'درون‌ریزی > Firefox' | 361 | page_title: 'درون‌ریزی > Firefox' |
360 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 362 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
361 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 363 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
362 | chrome: | 364 | chrome: |
363 | page_title: 'درون‌ریزی > Chrome' | 365 | page_title: 'درون‌ریزی > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml index f2c92070..6984be83 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Social' | 45 | social: 'Social' |
46 | powered_by: 'propulsé par' | 46 | powered_by: 'propulsé par' |
47 | about: 'À propos' | 47 | about: 'À propos' |
48 | stats: Depuis le %user_creation% vous avez lu %nb_archives% articles. Ce qui fait %per_day% par jour ! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Configuration' | 51 | page_title: 'Configuration' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'si' | 95 | if_label: 'si' |
95 | then_tag_as_label: 'alors attribuer les tags' | 96 | then_tag_as_label: 'alors attribuer les tags' |
96 | delete_rule_label: 'supprimer' | 97 | delete_rule_label: 'supprimer' |
98 | edit_rule_label: 'éditer' | ||
97 | rule_label: 'Règle' | 99 | rule_label: 'Règle' |
98 | tags_label: 'Tags' | 100 | tags_label: 'Tags' |
99 | faq: | 101 | faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | enabled: "Les imports sont asynchrones. Une fois l'import commencé un worker externe traitera les messages un par un. Le service activé est :" | 360 | enabled: "Les imports sont asynchrones. Une fois l'import commencé un worker externe traitera les messages un par un. Le service activé est :" |
359 | firefox: | 361 | firefox: |
360 | page_title: 'Import > Firefox' | 362 | page_title: 'Import > Firefox' |
361 | description: "Cet outil va vous permettre d'importer tous vos marques-pages de Firefox. <p>Pour Firefox, ouvrez le panneau des marques-pages (Ctrl+Maj+O), puis dans « Importation et sauvegarde », choisissez « Sauvegarde... ». Vous allez récupérer un fichier .json. </p>" | 363 | description: "Cet outil va vous permettre d'importer tous vos marques-pages de Firefox. Ouvrez le panneau des marques-pages (Ctrl+Maj+O), puis dans « Importation et sauvegarde », choisissez « Sauvegarde... ». Vous allez récupérer un fichier .json. </p>" |
362 | how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne." | 364 | how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne." |
363 | chrome: | 365 | chrome: |
364 | page_title: 'Import > Chrome' | 366 | page_title: 'Import > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml index 32897b32..30b3287e 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Social' | 45 | social: 'Social' |
46 | powered_by: 'powered by' | 46 | powered_by: 'powered by' |
47 | about: 'About' | 47 | about: 'About' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Configurazione' | 51 | page_title: 'Configurazione' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'se' | 95 | if_label: 'se' |
95 | then_tag_as_label: 'allora tagga come' | 96 | then_tag_as_label: 'allora tagga come' |
96 | delete_rule_label: 'elimina' | 97 | delete_rule_label: 'elimina' |
98 | # edit_rule_label: 'edit' | ||
97 | rule_label: 'Regola' | 99 | rule_label: 'Regola' |
98 | tags_label: 'Tag' | 100 | tags_label: 'Tag' |
99 | faq: | 101 | faq: |
@@ -357,7 +359,7 @@ import: | |||
357 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 359 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
358 | firefox: | 360 | firefox: |
359 | page_title: 'Importa da > Firefox' | 361 | page_title: 'Importa da > Firefox' |
360 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 362 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
361 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 363 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
362 | chrome: | 364 | chrome: |
363 | page_title: 'Importa da > Chrome' | 365 | page_title: 'Importa da > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml index 8caf3c0c..a077f1bf 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml | |||
@@ -19,14 +19,14 @@ menu: | |||
19 | unread: 'Pas legits' | 19 | unread: 'Pas legits' |
20 | starred: 'Favorits' | 20 | starred: 'Favorits' |
21 | archive: 'Legits' | 21 | archive: 'Legits' |
22 | all_articles: 'Tots los articles' | 22 | all_articles: 'Totes los articles' |
23 | config: 'Configuracion' | 23 | config: 'Configuracion' |
24 | tags: 'Etiquetas' | 24 | tags: 'Etiquetas' |
25 | internal_settings: 'Configuracion interna' | 25 | internal_settings: 'Configuracion interna' |
26 | import: 'Importar' | 26 | import: 'Importar' |
27 | howto: 'Ajuda' | 27 | howto: 'Ajuda' |
28 | developer: 'Desvolopador' | 28 | developer: 'Desvolopador' |
29 | logout: 'Déconnexion' | 29 | logout: 'Desconnexion' |
30 | about: 'A prepaus' | 30 | about: 'A prepaus' |
31 | search: 'Cercar' | 31 | search: 'Cercar' |
32 | save_link: 'Enregistrar un novèl article' | 32 | save_link: 'Enregistrar un novèl article' |
@@ -45,9 +45,10 @@ footer: | |||
45 | social: 'Social' | 45 | social: 'Social' |
46 | powered_by: 'propulsat per' | 46 | powered_by: 'propulsat per' |
47 | about: 'A prepaus' | 47 | about: 'A prepaus' |
48 | page_title: 'Configuracion' | 48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! |
49 | 49 | ||
50 | config: | 50 | config: |
51 | page_title: 'Configuracion' | ||
51 | tab_menu: | 52 | tab_menu: |
52 | settings: 'Paramètres' | 53 | settings: 'Paramètres' |
53 | rss: 'RSS' | 54 | rss: 'RSS' |
@@ -72,8 +73,8 @@ config: | |||
72 | form_rss: | 73 | form_rss: |
73 | description: "Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton." | 74 | description: "Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton." |
74 | token_label: 'Geton RSS' | 75 | token_label: 'Geton RSS' |
75 | no_token: 'Aucun jeton généré' | 76 | no_token: 'Pas cap de geton generat' |
76 | token_create: 'Pas cap de geton generat' | 77 | token_create: 'Creatz vòstre geton' |
77 | token_reset: 'Reïnicializatz vòstre geton' | 78 | token_reset: 'Reïnicializatz vòstre geton' |
78 | rss_links: 'URL de vòstres fluxes RSS' | 79 | rss_links: 'URL de vòstres fluxes RSS' |
79 | rss_link: | 80 | rss_link: |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'se' | 95 | if_label: 'se' |
95 | then_tag_as_label: 'alara atribuir las etiquetas' | 96 | then_tag_as_label: 'alara atribuir las etiquetas' |
96 | delete_rule_label: 'suprimir' | 97 | delete_rule_label: 'suprimir' |
98 | # edit_rule_label: 'edit' | ||
97 | rule_label: 'Règla' | 99 | rule_label: 'Règla' |
98 | tags_label: 'Etiquetas' | 100 | tags_label: 'Etiquetas' |
99 | faq: | 101 | faq: |
@@ -187,7 +189,7 @@ entry: | |||
187 | re_fetch_content: 'Tornar cargar lo contengut' | 189 | re_fetch_content: 'Tornar cargar lo contengut' |
188 | delete: 'Suprimir' | 190 | delete: 'Suprimir' |
189 | add_a_tag: 'Ajustar una etiqueta' | 191 | add_a_tag: 'Ajustar una etiqueta' |
190 | share_content: 'Partatjar' | 192 | share_content: 'Partejar' |
191 | share_email_label: 'Corrièl' | 193 | share_email_label: 'Corrièl' |
192 | public_link: 'ligam public' | 194 | public_link: 'ligam public' |
193 | delete_public_link: 'suprimir lo ligam public' | 195 | delete_public_link: 'suprimir lo ligam public' |
@@ -224,7 +226,7 @@ about: | |||
224 | developped_by: 'Desvolopat per' | 226 | developped_by: 'Desvolopat per' |
225 | website: 'Site web' | 227 | website: 'Site web' |
226 | many_contributors: 'E un fum de contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>' | 228 | many_contributors: 'E un fum de contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>' |
227 | project_website: 'Site web del projète' | 229 | project_website: 'Site web del projècte' |
228 | license: 'Licéncia' | 230 | license: 'Licéncia' |
229 | version: 'Version' | 231 | version: 'Version' |
230 | getting_help: | 232 | getting_help: |
@@ -245,7 +247,7 @@ about: | |||
245 | 247 | ||
246 | howto: | 248 | howto: |
247 | page_title: 'Ajuda' | 249 | page_title: 'Ajuda' |
248 | page_description: "I a mai d'un biai d'enregistrar un article :" | 250 | page_description: "I a mai d'un biais d'enregistrar un article :" |
249 | top_menu: | 251 | top_menu: |
250 | browser_addons: 'Extensions de navigator' | 252 | browser_addons: 'Extensions de navigator' |
251 | mobile_apps: 'Aplicacions mobil' | 253 | mobile_apps: 'Aplicacions mobil' |
@@ -351,26 +353,26 @@ import: | |||
351 | page_title: 'Importar > Wallabag v2' | 353 | page_title: 'Importar > Wallabag v2' |
352 | description: "Aquesta aisina importarà totas vòstras donadas d'una instà ncia mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparatz un fichièr \"All articles.json\"" | 354 | description: "Aquesta aisina importarà totas vòstras donadas d'una instà ncia mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparatz un fichièr \"All articles.json\"" |
353 | readability: | 355 | readability: |
354 | page_title: 'Importer > Readability' | 356 | page_title: 'Importar > Readability' |
355 | description: "Aquesta aisina importarà totas vòstres articles de Readability. Sus la pagina de l'aisina (https://www.readability.com/tools/), clicatz sus \"Export your data\" dins la seccion \"Data Export\". Recebretz un corrièl per telecargar un json (qu'acaba pas amb un .json de fach)." | 357 | description: "Aquesta aisina importarà totas vòstres articles de Readability. Sus la pagina de l'aisina (https://www.readability.com/tools/), clicatz sus \"Export your data\" dins la seccion \"Data Export\". Recebretz un corrièl per telecargar un json (qu'acaba pas amb un .json de fach)." |
356 | how_to: "Mercés de seleccionar vòstre Readability fichièr e de clicar sul boton dejós per lo telecargar e l'importar." | 358 | how_to: "Mercés de seleccionar vòstre Readability fichièr e de clicar sul boton dejós per lo telecargar e l'importar." |
357 | worker: | 359 | worker: |
358 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 360 | enabled: "L'importacion se fa de manièra asincròna. Un còp l'importacion lançada, una aisina externa s'ocuparà dels messatges un per un. Lo servici actual es : " |
359 | firefox: | 361 | firefox: |
360 | page_title: 'Importer > Firefox' | 362 | page_title: 'Importar > Firefox' |
361 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 363 | description: "Aquesta aisina importarà totas vòstres favorits de Firefox. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 364 | how_to: "Mercés de causir lo fichièr de salvagarda e de clicar sul boton dejós per l'importar. Notatz que lo tractament pòt durar un moment ja que totes los articles an d'èsser recuperats." |
363 | chrome: | 365 | chrome: |
364 | page_title: 'Importer > Chrome' | 366 | page_title: 'Importar > Chrome' |
365 | # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" | 367 | description: "Aquesta aisina importarà totas vòstres favorits de Chrome. L'emplaçament del fichièr depend de vòstre sistèma operatiu : <ul><li>Sus Linux, anatz al dorsièr <code>~/.config/chromium/Default/</code></li><li>Sus Windows, deu èsser dins <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>sus OS X, deu èsser dins <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Un còp enlà , copiatz lo fichièr de favorits dins un endrech que volètz.<em><br>Notatz que s'avètz Chromium al lòc de Chrome, vos cal cambiar lo camin segon aquesta situacion.</em></p>" |
366 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 368 | how_to: "Mercés de causir lo fichièr de salvagarda e de clicar sul boton dejós per l'importar. Notatz que lo tractament pòt durar un moment ja que totes los articles an d'èsser recuperats." |
367 | instapaper: | 369 | instapaper: |
368 | page_title: 'Importer > Instapaper' | 370 | page_title: 'Importar > Instapaper' |
369 | # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").' | 371 | description: "Aquesta aisina importarà totas vòstres articles d'Instapaper. Sus la pagina de paramètres (https://www.instapaper.com/user), clicatz sus \"Download .CSV file\" dins la seccion \"Export\". Un fichièr CSV serà telecargat (aital \"instapaper-export.csv\")." |
370 | # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.' | 372 | how_to: "Mercés de causir vòstre fichièr Instapaper e de clicar sul boton dejós per lo telecargar e l'importar" |
371 | 373 | ||
372 | developer: | 374 | developer: |
373 | page_title: 'Desvolopador' | 375 | page_title: 'Desvolopaire' |
374 | welcome_message: "Benvenguda sus l'API de wallabag" | 376 | welcome_message: "Benvenguda sus l'API de wallabag" |
375 | documentation: 'Documentacion' | 377 | documentation: 'Documentacion' |
376 | how_to_first_app: 'Cossà crear vòstra primièra aplicacion' | 378 | how_to_first_app: 'Cossà crear vòstra primièra aplicacion' |
@@ -394,16 +396,18 @@ developer: | |||
394 | page_title: 'Desvlopador > Novèl client' | 396 | page_title: 'Desvlopador > Novèl client' |
395 | page_description: "Anatz crear un novèl client. Mercés de cumplir l'url de redireccion cap a vòstra aplicacion." | 397 | page_description: "Anatz crear un novèl client. Mercés de cumplir l'url de redireccion cap a vòstra aplicacion." |
396 | form: | 398 | form: |
399 | name_label: "Nom del client" | ||
397 | redirect_uris_label: 'URLs de redireccion' | 400 | redirect_uris_label: 'URLs de redireccion' |
398 | save_label: 'Crear un novèl client' | 401 | save_label: 'Crear un novèl client' |
399 | action_back: 'Retorn' | 402 | action_back: 'Retorn' |
400 | client_parameter: | 403 | client_parameter: |
401 | page_title: 'Desvolopador > Los paramètres de vòstre client' | 404 | page_title: 'Desvolopador > Los paramètres de vòstre client' |
402 | page_description: 'Vaquà los paramètres de vòstre client' | 405 | page_description: 'Vaquà los paramètres de vòstre client' |
406 | field_name: 'Nom del client' | ||
403 | field_id: 'ID Client' | 407 | field_id: 'ID Client' |
404 | field_secret: 'Clau secreta' | 408 | field_secret: 'Clau secreta' |
405 | back: 'Retour' | 409 | back: 'Retour' |
406 | read_howto: 'Legir \"cossà crear ma primièra aplicacion\"' | 410 | read_howto: 'Legir "cossà crear ma primièra aplicacion"' |
407 | howto: | 411 | howto: |
408 | page_title: 'Desvolopador > Cossà crear ma primièra aplicacion' | 412 | page_title: 'Desvolopador > Cossà crear ma primièra aplicacion' |
409 | description: | 413 | description: |
@@ -433,10 +437,10 @@ flashes: | |||
433 | notice: | 437 | notice: |
434 | entry_already_saved: 'Article ja salvargardat lo %date%' | 438 | entry_already_saved: 'Article ja salvargardat lo %date%' |
435 | entry_saved: 'Article enregistrat' | 439 | entry_saved: 'Article enregistrat' |
436 | # entry_saved_failed: 'Entry saved but fetching content failed' | 440 | entry_saved_failed: 'Article salvat mai fracàs de la recuperacion del contengut' |
437 | entry_updated: 'Article mes a jorn' | 441 | entry_updated: 'Article mes a jorn' |
438 | entry_reloaded: 'Article recargat' | 442 | entry_reloaded: 'Article recargat' |
439 | # entry_reload_failed: 'Entry reloaded but fetching content failed' | 443 | entry_reload_failed: "L'article es estat cargat de nòu mai la recuperacion del contengut a fracassat" |
440 | entry_archived: 'Article marcat coma legit' | 444 | entry_archived: 'Article marcat coma legit' |
441 | entry_unarchived: 'Article marcat coma pas legit' | 445 | entry_unarchived: 'Article marcat coma pas legit' |
442 | entry_starred: 'Article apondut dins los favorits' | 446 | entry_starred: 'Article apondut dins los favorits' |
@@ -450,10 +454,10 @@ flashes: | |||
450 | failed: "L'importacion a fracassat, mercés de tornar ensajar" | 454 | failed: "L'importacion a fracassat, mercés de tornar ensajar" |
451 | failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr." | 455 | failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr." |
452 | summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents." | 456 | summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents." |
453 | # summary_with_queue: 'Import summary: %queued% queued.' | 457 | summary_with_queue: "Rapòrt d'import : %queued% en espèra de tractament." |
454 | error: | 458 | error: |
455 | # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration. | 459 | redis_enabled_not_installed: "Redis es capable d'importar de manièra asincròna mai sembla que <u>podèm pas nos conectar amb el</u>. Mercés de verificar la configuracion de Redis." |
456 | # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration. | 460 | rabbit_enabled_not_installed: "RabbitMQ es capable d'importar de manièra asincròna mai sembla que <u>podèm pas nos conectar amb el</u>. Mercés de verificar la configuracion de RabbitMQ." |
457 | developer: | 461 | developer: |
458 | notice: | 462 | notice: |
459 | client_created: 'Novèl client creat' | 463 | client_created: 'Novèl client creat' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml index 8f0555b1..cad94dd5 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Społeczność' | 45 | social: 'Społeczność' |
46 | powered_by: 'Kontrolowany przez' | 46 | powered_by: 'Kontrolowany przez' |
47 | about: 'O nas' | 47 | about: 'O nas' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Konfiguracja' | 51 | page_title: 'Konfiguracja' |
@@ -94,6 +95,7 @@ config: | |||
94 | if_label: 'jeżeli' | 95 | if_label: 'jeżeli' |
95 | then_tag_as_label: 'wtedy otaguj jako' | 96 | then_tag_as_label: 'wtedy otaguj jako' |
96 | delete_rule_label: 'usuń' | 97 | delete_rule_label: 'usuń' |
98 | # edit_rule_label: 'edit' | ||
97 | rule_label: 'Reguła' | 99 | rule_label: 'Reguła' |
98 | tags_label: 'Tagi' | 100 | tags_label: 'Tagi' |
99 | faq: | 101 | faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | enabled: "Import jest wykonywany asynchronicznie. Od momentu rozpoczęcia importu, zewnętrzna usługa może zajmować się na raz tylko jednym zadaniem. Bieżącą usługą jest:" | 360 | enabled: "Import jest wykonywany asynchronicznie. Od momentu rozpoczęcia importu, zewnętrzna usługa może zajmować się na raz tylko jednym zadaniem. Bieżącą usługą jest:" |
359 | firefox: | 361 | firefox: |
360 | page_title: 'Import > Firefox' | 362 | page_title: 'Import > Firefox' |
361 | description: "Ten importer zaimportuje wszystkie twoje zakładki z Firefoksa. <p>Dla Firefoksa, idź do twoich zakładek (Ctrl+Shift+O), następnie w \"Import i kopie zapasowe\", wybierz \"Utwórz kopię zapasową...\". Uzyskasz plik .json." | 363 | description: "Ten importer zaimportuje wszystkie twoje zakładki z Firefoksa. Idź do twoich zakładek (Ctrl+Shift+O), następnie w \"Import i kopie zapasowe\", wybierz \"Utwórz kopię zapasową...\". Uzyskasz plik .json." |
362 | how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione." | 364 | how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione." |
363 | chrome: | 365 | chrome: |
364 | page_title: 'Import > Chrome' | 366 | page_title: 'Import > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml index ee56dd15..a271d6f3 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | # social: 'Social' | 45 | # social: 'Social' |
46 | # powered_by: 'powered by' | 46 | # powered_by: 'powered by' |
47 | about: 'Despre' | 47 | about: 'Despre' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Configurație' | 51 | page_title: 'Configurație' |
@@ -94,6 +95,7 @@ config: | |||
94 | # if_label: 'if' | 95 | # if_label: 'if' |
95 | # then_tag_as_label: 'then tag as' | 96 | # then_tag_as_label: 'then tag as' |
96 | # delete_rule_label: 'delete' | 97 | # delete_rule_label: 'delete' |
98 | # edit_rule_label: 'edit' | ||
97 | # rule_label: 'Rule' | 99 | # rule_label: 'Rule' |
98 | # tags_label: 'Tags' | 100 | # tags_label: 'Tags' |
99 | # faq: | 101 | # faq: |
@@ -358,7 +360,7 @@ import: | |||
358 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 360 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
359 | # firefox: | 361 | # firefox: |
360 | # page_title: 'Import > Firefox' | 362 | # page_title: 'Import > Firefox' |
361 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 363 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 364 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
363 | # chrome: | 365 | # chrome: |
364 | # page_title: 'Import > Chrome' | 366 | # page_title: 'Import > Chrome' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml index befd39ed..f2307e65 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml | |||
@@ -45,6 +45,7 @@ footer: | |||
45 | social: 'Sosyal' | 45 | social: 'Sosyal' |
46 | powered_by: 'powered by' | 46 | powered_by: 'powered by' |
47 | about: 'Hakkımızda' | 47 | about: 'Hakkımızda' |
48 | # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day! | ||
48 | 49 | ||
49 | config: | 50 | config: |
50 | page_title: 'Yapılandırma' | 51 | page_title: 'Yapılandırma' |
@@ -358,7 +359,7 @@ import: | |||
358 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" | 359 | # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" |
359 | firefox: | 360 | firefox: |
360 | page_title: 'İçe Aktar > Firefox' | 361 | page_title: 'İçe Aktar > Firefox' |
361 | # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." | 362 | # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." |
362 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." | 363 | # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." |
363 | chrome: | 364 | chrome: |
364 | page_title: 'İçe Aktar > Chrome' | 365 | page_title: 'İçe Aktar > Chrome' |
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 6446cf2c..dd4f7b00 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 | |||
@@ -191,6 +191,7 @@ | |||
191 | « {{ tagging_rule.rule }} » | 191 | « {{ tagging_rule.rule }} » |
192 | {{ 'config.form_rules.then_tag_as_label'|trans }} | 192 | {{ 'config.form_rules.then_tag_as_label'|trans }} |
193 | « {{ tagging_rule.tags|join(', ') }} » | 193 | « {{ tagging_rule.tags|join(', ') }} » |
194 | <a href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}" class="tool mode_edit">✎</a> | ||
194 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}" class="tool delete icon-trash icon"></a> | 195 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}" class="tool delete icon-trash icon"></a> |
195 | </li> | 196 | </li> |
196 | {% endfor %} | 197 | {% endfor %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig new file mode 100644 index 00000000..b52634fd --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig | |||
@@ -0,0 +1,24 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block title %}{{ 'error.page_title'|trans }}{% endblock %} | ||
4 | |||
5 | {% block body_class %}login{% endblock %} | ||
6 | |||
7 | {% block menu %}{% endblock %} | ||
8 | {% block messages %}{% endblock %} | ||
9 | {% block header %}{% endblock %} | ||
10 | |||
11 | {% block content %} | ||
12 | <main class="valign-wrapper"> | ||
13 | <div class="valign row"> | ||
14 | <div class="card sw"> | ||
15 | <div class="center"><img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-w.png') }}" alt="wallabag logo" /></div> | ||
16 | <h2>{{ status_code }}: {{ status_text }}</h2> | ||
17 | <p>{{ exception.message }}</p> | ||
18 | </div> | ||
19 | </div> | ||
20 | </main> | ||
21 | {% endblock %} | ||
22 | |||
23 | {% block footer %} | ||
24 | {% endblock %} | ||
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 5330c353..650a3ae2 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 | |||
@@ -218,6 +218,9 @@ | |||
218 | « {{ tagging_rule.rule }} » | 218 | « {{ tagging_rule.rule }} » |
219 | {{ 'config.form_rules.then_tag_as_label'|trans }} | 219 | {{ 'config.form_rules.then_tag_as_label'|trans }} |
220 | « {{ tagging_rule.tags|join(', ') }} » | 220 | « {{ tagging_rule.tags|join(', ') }} » |
221 | <a href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}"> | ||
222 | <i class="tool grey-text mode_edit material-icons">mode_edit</i> | ||
223 | </a> | ||
221 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}"> | 224 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}"> |
222 | <i class="tool grey-text delete material-icons">delete</i> | 225 | <i class="tool grey-text delete material-icons">delete</i> |
223 | </a> | 226 | </a> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig new file mode 100644 index 00000000..6be78edb --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig | |||
@@ -0,0 +1,30 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block title %}{{ 'error.page_title'|trans }}{% endblock %} | ||
4 | |||
5 | {% block body_class %}login{% endblock %} | ||
6 | |||
7 | {% block menu %}{% endblock %} | ||
8 | {% block messages %}{% endblock %} | ||
9 | |||
10 | {% block content %} | ||
11 | <main class="valign-wrapper"> | ||
12 | <div class="valign row"> | ||
13 | <div class="card sw"> | ||
14 | <div class="center"><img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-other_themes.png') }}" alt="wallabag logo" /></div> | ||
15 | <div class="card-content"> | ||
16 | <div class="row"> | ||
17 | <h5>{{ status_code }}: {{ status_text }}</h5> | ||
18 | <p>{{ exception.message }}</p> | ||
19 | {# {% for trace in exception.trace %} | ||
20 | <p>{{ trace.class }} - {{ trace.type }} - {{ trace.file }} - {{ trace.line }}</p> | ||
21 | {% endfor %} #} | ||
22 | </div> | ||
23 | </div> | ||
24 | </div> | ||
25 | </div> | ||
26 | </main> | ||
27 | {% endblock %} | ||
28 | |||
29 | {% block footer %} | ||
30 | {% endblock %} | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig index df05e2a4..b2d77c2e 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig | |||
@@ -122,8 +122,19 @@ | |||
122 | <footer class="page-footer cyan darken-2"> | 122 | <footer class="page-footer cyan darken-2"> |
123 | <div class="footer-copyright"> | 123 | <div class="footer-copyright"> |
124 | <div class="container"> | 124 | <div class="container"> |
125 | <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> | 125 | <div class="row"> |
126 | <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a> | 126 | <div class="col s8"> |
127 | <p> | ||
128 | {{ display_stats() }} | ||
129 | </p> | ||
130 | </div> | ||
131 | <div class="col s4"> | ||
132 | <p> | ||
133 | {{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a> – | ||
134 | <a class="grey-text text-lighten-4" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans|lower }}</a> | ||
135 | </p> | ||
136 | </div> | ||
137 | </div> | ||
127 | </div> | 138 | </div> |
128 | </div> | 139 | </div> |
129 | </footer> | 140 | </footer> |
diff --git a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php index fb4c7412..783cde3e 100644 --- a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php +++ b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php | |||
@@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Twig; | |||
5 | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; | 5 | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; |
6 | use Wallabag\CoreBundle\Repository\EntryRepository; | 6 | use Wallabag\CoreBundle\Repository\EntryRepository; |
7 | use Wallabag\CoreBundle\Repository\TagRepository; | 7 | use Wallabag\CoreBundle\Repository\TagRepository; |
8 | use Symfony\Component\Translation\TranslatorInterface; | ||
8 | 9 | ||
9 | class WallabagExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface | 10 | class WallabagExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface |
10 | { | 11 | { |
@@ -12,13 +13,15 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
12 | private $entryRepository; | 13 | private $entryRepository; |
13 | private $tagRepository; | 14 | private $tagRepository; |
14 | private $lifeTime; | 15 | private $lifeTime; |
16 | private $translator; | ||
15 | 17 | ||
16 | public function __construct(EntryRepository $entryRepository = null, TagRepository $tagRepository = null, TokenStorageInterface $tokenStorage = null, $lifeTime = 0) | 18 | public function __construct(EntryRepository $entryRepository, TagRepository $tagRepository, TokenStorageInterface $tokenStorage, $lifeTime, TranslatorInterface $translator) |
17 | { | 19 | { |
18 | $this->entryRepository = $entryRepository; | 20 | $this->entryRepository = $entryRepository; |
19 | $this->tagRepository = $tagRepository; | 21 | $this->tagRepository = $tagRepository; |
20 | $this->tokenStorage = $tokenStorage; | 22 | $this->tokenStorage = $tokenStorage; |
21 | $this->lifeTime = $lifeTime; | 23 | $this->lifeTime = $lifeTime; |
24 | $this->translator = $translator; | ||
22 | } | 25 | } |
23 | 26 | ||
24 | public function getFilters() | 27 | public function getFilters() |
@@ -33,6 +36,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
33 | return array( | 36 | return array( |
34 | new \Twig_SimpleFunction('count_entries', [$this, 'countEntries']), | 37 | new \Twig_SimpleFunction('count_entries', [$this, 'countEntries']), |
35 | new \Twig_SimpleFunction('count_tags', [$this, 'countTags']), | 38 | new \Twig_SimpleFunction('count_tags', [$this, 'countTags']), |
39 | new \Twig_SimpleFunction('display_stats', [$this, 'displayStats']), | ||
36 | ); | 40 | ); |
37 | } | 41 | } |
38 | 42 | ||
@@ -107,6 +111,40 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
107 | return $this->tagRepository->countAllTags($user->getId()); | 111 | return $this->tagRepository->countAllTags($user->getId()); |
108 | } | 112 | } |
109 | 113 | ||
114 | /** | ||
115 | * Display a single line about reading stats. | ||
116 | * | ||
117 | * @return string | ||
118 | */ | ||
119 | public function displayStats() | ||
120 | { | ||
121 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; | ||
122 | |||
123 | if (null === $user || !is_object($user)) { | ||
124 | return 0; | ||
125 | } | ||
126 | |||
127 | $query = $this->entryRepository->getBuilderForArchiveByUser($user->getId()) | ||
128 | ->select('e.id') | ||
129 | ->groupBy('e.id') | ||
130 | ->getQuery(); | ||
131 | |||
132 | $query->useQueryCache(true); | ||
133 | $query->useResultCache(true); | ||
134 | $query->setResultCacheLifetime($this->lifeTime); | ||
135 | |||
136 | $nbArchives = count($query->getArrayResult()); | ||
137 | |||
138 | $interval = $user->getCreatedAt()->diff(new \DateTime('now')); | ||
139 | $nbDays = (int) $interval->format('%a') ?: 1; | ||
140 | |||
141 | return $this->translator->trans('footer.stats', [ | ||
142 | '%user_creation%' => $user->getCreatedAt()->format('F jS, Y'), | ||
143 | '%nb_archives%' => $nbArchives, | ||
144 | '%per_day%' => round($nbArchives / $nbDays, 2), | ||
145 | ]); | ||
146 | } | ||
147 | |||
110 | public function getName() | 148 | public function getName() |
111 | { | 149 | { |
112 | return 'wallabag_extension'; | 150 | return 'wallabag_extension'; |
diff --git a/src/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListener.php b/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php index 10586126..15f4ac3d 100644 --- a/src/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListener.php +++ b/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php | |||
@@ -1,39 +1,49 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\EventListener; | 3 | namespace Wallabag\UserBundle\EventListener; |
4 | 4 | ||
5 | use Doctrine\ORM\EntityManager; | 5 | use Doctrine\ORM\EntityManager; |
6 | use FOS\UserBundle\Event\FilterUserResponseEvent; | 6 | use FOS\UserBundle\Event\UserEvent; |
7 | use FOS\UserBundle\FOSUserEvents; | 7 | use FOS\UserBundle\FOSUserEvents; |
8 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; | 8 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; |
9 | use Symfony\Component\EventDispatcher\EventSubscriberInterface; | 9 | use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
10 | use Wallabag\CoreBundle\Entity\Config; | 10 | use Wallabag\CoreBundle\Entity\Config; |
11 | 11 | ||
12 | class RegistrationConfirmedListener implements EventSubscriberInterface | 12 | /** |
13 | * This listener will create the associated configuration when a user register. | ||
14 | * This configuration will be created right after the registration (no matter if it needs an email validation). | ||
15 | */ | ||
16 | class CreateConfigListener implements EventSubscriberInterface | ||
13 | { | 17 | { |
14 | private $em; | 18 | private $em; |
15 | private $theme; | 19 | private $theme; |
16 | private $itemsOnPage; | 20 | private $itemsOnPage; |
17 | private $rssLimit; | 21 | private $rssLimit; |
18 | private $language; | 22 | private $language; |
23 | private $readingSpeed; | ||
19 | 24 | ||
20 | public function __construct(EntityManager $em, $theme, $itemsOnPage, $rssLimit, $language) | 25 | public function __construct(EntityManager $em, $theme, $itemsOnPage, $rssLimit, $language, $readingSpeed) |
21 | { | 26 | { |
22 | $this->em = $em; | 27 | $this->em = $em; |
23 | $this->theme = $theme; | 28 | $this->theme = $theme; |
24 | $this->itemsOnPage = $itemsOnPage; | 29 | $this->itemsOnPage = $itemsOnPage; |
25 | $this->rssLimit = $rssLimit; | 30 | $this->rssLimit = $rssLimit; |
26 | $this->language = $language; | 31 | $this->language = $language; |
32 | $this->readingSpeed = $readingSpeed; | ||
27 | } | 33 | } |
28 | 34 | ||
29 | public static function getSubscribedEvents() | 35 | public static function getSubscribedEvents() |
30 | { | 36 | { |
31 | return [ | 37 | return [ |
32 | FOSUserEvents::REGISTRATION_CONFIRMED => 'authenticate', | 38 | // when a user register using the normal form |
39 | FOSUserEvents::REGISTRATION_COMPLETED => 'createConfig', | ||
40 | // when we manually create a user using the command line | ||
41 | // OR when we create it from the config UI | ||
42 | FOSUserEvents::USER_CREATED => 'createConfig', | ||
33 | ]; | 43 | ]; |
34 | } | 44 | } |
35 | 45 | ||
36 | public function authenticate(FilterUserResponseEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null) | 46 | public function createConfig(UserEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null) |
37 | { | 47 | { |
38 | if (!$event->getUser()->isEnabled()) { | 48 | if (!$event->getUser()->isEnabled()) { |
39 | return; | 49 | return; |
@@ -44,6 +54,8 @@ class RegistrationConfirmedListener implements EventSubscriberInterface | |||
44 | $config->setItemsPerPage($this->itemsOnPage); | 54 | $config->setItemsPerPage($this->itemsOnPage); |
45 | $config->setRssLimit($this->rssLimit); | 55 | $config->setRssLimit($this->rssLimit); |
46 | $config->setLanguage($this->language); | 56 | $config->setLanguage($this->language); |
57 | $config->setReadingSpeed($this->readingSpeed); | ||
58 | |||
47 | $this->em->persist($config); | 59 | $this->em->persist($config); |
48 | $this->em->flush(); | 60 | $this->em->flush(); |
49 | } | 61 | } |
diff --git a/src/Wallabag/UserBundle/Resources/config/services.yml b/src/Wallabag/UserBundle/Resources/config/services.yml index 05830555..eb9c8e67 100644 --- a/src/Wallabag/UserBundle/Resources/config/services.yml +++ b/src/Wallabag/UserBundle/Resources/config/services.yml | |||
@@ -20,3 +20,15 @@ services: | |||
20 | factory: [ "@doctrine.orm.default_entity_manager", getRepository ] | 20 | factory: [ "@doctrine.orm.default_entity_manager", getRepository ] |
21 | arguments: | 21 | arguments: |
22 | - WallabagUserBundle:User | 22 | - WallabagUserBundle:User |
23 | |||
24 | wallabag_user.create_config: | ||
25 | class: Wallabag\UserBundle\EventListener\CreateConfigListener | ||
26 | arguments: | ||
27 | - "@doctrine.orm.entity_manager" | ||
28 | - "%wallabag_core.theme%" | ||
29 | - "%wallabag_core.items_on_page%" | ||
30 | - "%wallabag_core.rss_limit%" | ||
31 | - "%wallabag_core.language%" | ||
32 | - "%wallabag_core.reading_speed%" | ||
33 | tags: | ||
34 | - { name: kernel.event_subscriber } | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/check_email.html.twig index 50937276..50937276 100644 --- a/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Registration/check_email.html.twig | |||