]> Raphaël G. Git Repositories - blogbundle/commitdiff
New context layout master 0.0.1
authorRaphaël Gertz <git@rapsys.eu>
Tue, 14 Oct 2025 15:08:09 +0000 (17:08 +0200)
committerRaphaël Gertz <git@rapsys.eu>
Tue, 14 Oct 2025 15:08:09 +0000 (17:08 +0200)
90 files changed:
.gitignore
Controller/AbstractController.php
Controller/ArticleController.php
Controller/DefaultController.php
Controller/KeywordController.php
Controller/UserController.php
DependencyInjection/Configuration.php
DependencyInjection/RapsysBlogExtension.php
Fixture/BlogFixture.php
Form/ArticleType.php
Form/AuthorType.php
Form/ContactType.php [deleted file]
Form/EditType.php
Form/KeywordType.php
Form/LanguageType.php
Form/RegisterType.php
Form/SiteType.php
RapsysBlogBundle.php
Repository/ArticleRepository.php
Repository/KeywordRepository.php
Repository/UserRepository.php
Resources/config/parameters.yml.dist [deleted file]
Resources/config/routing.yml [deleted file]
Resources/config/services.yml [deleted file]
Resources/views/_base.html.twig [deleted file]
Resources/views/article/index.html.twig [deleted file]
Resources/views/form/contact.html.twig [deleted file]
Resources/views/form/recover.html.twig [deleted file]
Resources/views/index.html.twig [deleted file]
Resources/views/keyword/index.html.twig [deleted file]
Resources/views/mail/_base.html.twig [deleted file]
config/doctrine/Article.orm.yml [moved from Resources/config/doctrine/Article.orm.yml with 100% similarity]
config/doctrine/ArticleTranslation.orm.yml [moved from Resources/config/doctrine/ArticleTranslation.orm.yml with 100% similarity]
config/doctrine/Civility.orm.yml [moved from Resources/config/doctrine/Civility.orm.yml with 100% similarity]
config/doctrine/Group.orm.yml [moved from Resources/config/doctrine/Group.orm.yml with 100% similarity]
config/doctrine/Keyword.orm.yml [moved from Resources/config/doctrine/Keyword.orm.yml with 100% similarity]
config/doctrine/KeywordTranslation.orm.yml [moved from Resources/config/doctrine/KeywordTranslation.orm.yml with 100% similarity]
config/doctrine/User.orm.yml [moved from Resources/config/doctrine/User.orm.yml with 100% similarity]
config/doctrine/UserTranslation.orm.yml [moved from Resources/config/doctrine/UserTranslation.orm.yml with 100% similarity]
config/packages/rapsysblog.yaml [moved from Resources/config/packages/rapsys_blog.yaml with 70% similarity]
config/routes/rapsysblog.yaml [moved from Resources/config/routes/rapsys_blog.yaml with 90% similarity]
public/css/base.css [moved from Resources/public/css/base.css with 100% similarity]
public/css/reset.css [moved from Resources/public/css/reset.css with 100% similarity]
public/css/screen.css [moved from Resources/public/css/screen.css with 99% similarity]
public/ico/icon.ico [moved from Resources/public/ico/icon.ico with 100% similarity]
public/js/example.js [moved from Resources/public/js/example.js with 100% similarity]
public/png/icon.120.png [moved from Resources/public/png/icon.120.png with 100% similarity]
public/png/icon.128.png [moved from Resources/public/png/icon.128.png with 100% similarity]
public/png/icon.150.png [moved from Resources/public/png/icon.150.png with 100% similarity]
public/png/icon.152.png [moved from Resources/public/png/icon.152.png with 100% similarity]
public/png/icon.167.png [moved from Resources/public/png/icon.167.png with 100% similarity]
public/png/icon.180.png [moved from Resources/public/png/icon.180.png with 100% similarity]
public/png/icon.192.png [moved from Resources/public/png/icon.192.png with 100% similarity]
public/png/icon.196.png [moved from Resources/public/png/icon.196.png with 100% similarity]
public/png/icon.256.png [moved from Resources/public/png/icon.256.png with 100% similarity]
public/png/icon.310.png [moved from Resources/public/png/icon.310.png with 100% similarity]
public/png/icon.32.png [moved from Resources/public/png/icon.32.png with 100% similarity]
public/png/icon.70.png [moved from Resources/public/png/icon.70.png with 100% similarity]
public/png/logo.png [moved from Resources/public/png/logo.png with 100% similarity]
public/svg/icon.svg [moved from Resources/public/svg/icon.svg with 100% similarity]
public/svg/logo.svg [moved from Resources/public/svg/logo.svg with 100% similarity]
templates/_base.html.twig [new file with mode: 0644]
templates/about.html.twig [moved from Resources/views/about.html.twig with 84% similarity]
templates/article/index.html.twig [new file with mode: 0644]
templates/article/view.html.twig [moved from Resources/views/article/view.html.twig with 75% similarity]
templates/form/contact.html.twig [new file with mode: 0644]
templates/form/edit.html.twig [moved from Resources/views/form/edit.html.twig with 55% similarity]
templates/form/form_div_layout.html.twig [moved from Resources/views/form/form_div_layout.html.twig with 100% similarity]
templates/form/login.html.twig [moved from Resources/views/form/login.html.twig with 82% similarity]
templates/form/recover.html.twig [new file with mode: 0644]
templates/form/register.html.twig [moved from Resources/views/form/register.html.twig with 95% similarity]
templates/index.html.twig [new file with mode: 0644]
templates/keyword/index.html.twig [new file with mode: 0644]
templates/keyword/view.html.twig [moved from Resources/views/keyword/view.html.twig with 67% similarity]
templates/mail/_base.html.twig [new file with mode: 0644]
templates/mail/contact.html.twig [moved from Resources/views/mail/contact.html.twig with 100% similarity]
templates/mail/contact.text.twig [moved from Resources/views/mail/contact.text.twig with 100% similarity]
templates/mail/recover.html.twig [moved from Resources/views/mail/recover.html.twig with 75% similarity]
templates/mail/recover.text.twig [moved from Resources/views/mail/recover.text.twig with 64% similarity]
templates/mail/register.html.twig [moved from Resources/views/mail/register.html.twig with 75% similarity]
templates/mail/register.text.twig [moved from Resources/views/mail/register.text.twig with 65% similarity]
templates/page/about.html.twig [moved from Resources/views/page/about.html.twig with 100% similarity]
templates/user/index.html.twig [moved from Resources/views/user/index.html.twig with 80% similarity]
templates/user/view.html.twig [moved from Resources/views/user/view.html.twig with 100% similarity]
translations/messages.en_gb.yml [moved from Resources/translations/messages.en_gb.yml with 90% similarity]
translations/messages.fr_fr.yml [moved from Resources/translations/messages.fr_fr.yml with 91% similarity]
translations/rapsyspack.en_gb.yml [new file with mode: 0644]
translations/rapsyspack.fr_fr.yml [new file with mode: 0644]
translations/validators.en_gb.yml [moved from Resources/translations/validators.en_gb.yml with 100% similarity]
translations/validators.fr_fr.yml [moved from Resources/translations/validators.fr_fr.yml with 100% similarity]

index 1c176490eaa16fd3ee6d771ee1cbe5899851da81..8282441593c116d4b6432035134c2d94537a1123 100644 (file)
@@ -1,2 +1,4 @@
 .*.un~
 *~
 .*.un~
 *~
+*.deadcode
+*.orig
index 10353cbf421db5281fb3189231f89e4745624b03..fca2be926746fc610f97fe6d657fcdd72474f7db 100644 (file)
@@ -294,36 +294,8 @@ abstract class AbstractController extends BaseAbstractController implements Serv
 
                //Set the context
                $this->context = [
 
                //Set the context
                $this->context = [
-                       'head' => [
-                               'alternates' => $alternates,
-                               'canonical' => $canonical,
-                               'icon' => $this->config['icon'],
-                               'keywords' => null,
-                               'locale' => str_replace('_', '-', $this->locale),
-                               'logo' => [
-                                       'png' => $this->config['logo']['png'],
-                                       'svg' => $this->config['logo']['svg'],
-                                       'alt' => $this->translator->trans($this->config['logo']['alt'])
-                               ],
-                               'root' => $this->config['root'],
-                               'site' => $this->translator->trans($this->config['title']),
-                               'title' => null,
-                               'facebook' => [
-                                               'og:type' => 'article',
-                                               'og:site_name' => $this->translator->trans($this->config['title']),
-                                               'og:url' => $canonical,
-                                               //TODO: review this value
-                                               'fb:app_id' => $this->config['facebook']['apps']
-                               ],
-                               'fbimage' => [
-                                       'texts' => [
-                                               $this->translator->trans($this->config['title']) => [
-                                                       'font' => 'irishgrover',
-                                                       'size' => 110
-                                               ]
-                                       ]
-                               ]
-                       ],
+                       'alternates' => $alternates,
+                       'canonical' => $canonical,
                        'contact' => [
                                'address' => $this->config['contact']['address'],
                                'name' => $this->translator->trans($this->config['contact']['name'])
                        'contact' => [
                                'address' => $this->config['contact']['address'],
                                'name' => $this->translator->trans($this->config['contact']['name'])
@@ -335,10 +307,42 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                'short' => $this->translator->trans($this->config['copy']['short']),
                                'title' => $this->config['copy']['title']
                        ],
                                'short' => $this->translator->trans($this->config['copy']['short']),
                                'title' => $this->config['copy']['title']
                        ],
-                       'forms' => [],
                        'description' => null,
                        'description' => null,
-                       'section' => null,
-                       'title' => null
+                       'donate' => $this->config['donate'],
+                       'facebook' => [
+                               'og:type' => 'article',
+                               'og:site_name' => $title = $this->translator->trans($this->config['title']),
+                               'og:url' => $canonical,
+                               #'fb:admins' => $this->config['facebook']['admins'],
+                               'fb:app_id' => $this->config['facebook']['apps']
+                       ],
+                       //XXX: TODO: only generate it when fb robot request the url ???
+                       'fbimage' => [
+                               'texts' => [
+                                       $title => [
+                                               //'font' => 'irishgrover',
+                                               //'size' => 110
+                                       ]
+                               ]
+                       ],
+                       'forms' => [],
+                       'icon' => $this->config['icon'],
+                       'keywords' => null,
+                       'locale' => str_replace('_', '-', $this->locale),
+                       #'logo' => [
+                       #       'png' => $this->config['logo']['png'],
+                       #       'svg' => $this->config['logo']['svg'],
+                       #       'alt' => $this->translator->trans($this->config['logo']['alt'])
+                       #],
+                       'logo' => $this->config['logo'],
+                       'next' => null,
+                       'prev' => null,
+                       'root' => $this->config['root'],
+                       'title' => [
+                               'page' => null,
+                               'section' => null,
+                               'site' => $title
+                       ]
                ];
        }
 
                ];
        }
 
@@ -352,7 +356,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                $response ??= new Response();
 
                //Without alternates
                $response ??= new Response();
 
                //Without alternates
-               if (empty($parameters['head']['alternates'])) {
+               if (count($parameters['alternates']) <= 1) {
                        //Iterate on locales excluding current one
                        foreach($this->config['locales'] as $locale) {
                                //Set routeParams
                        //Iterate on locales excluding current one
                        foreach($this->config['locales'] as $locale) {
                                //Set routeParams
@@ -377,7 +381,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                        }
 
                                        //Set locale locales context
                                        }
 
                                        //Set locale locales context
-                                       $parameters['head']['alternates'][str_replace('_', '-', $locale)] = [
+                                       $parameters['alternates'][str_replace('_', '-', $locale)] = [
                                                'absolute' => $this->router->generate($this->route, $routeParams, UrlGeneratorInterface::ABSOLUTE_URL),
                                                'relative' => $this->router->generate($this->route, $routeParams),
                                                'title' => implode('/', $titles),
                                                'absolute' => $this->router->generate($this->route, $routeParams, UrlGeneratorInterface::ABSOLUTE_URL),
                                                'relative' => $this->router->generate($this->route, $routeParams),
                                                'title' => implode('/', $titles),
@@ -385,12 +389,12 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                        ];
 
                                        //Add shorter locale
                                        ];
 
                                        //Add shorter locale
-                                       if (empty($parameters['head']['alternates'][$shortCurrent = substr($locale, 0, 2)])) {
+                                       if (empty($parameters['alternates'][$shortCurrent = substr($locale, 0, 2)])) {
                                                //Set locale locales context
                                                //Set locale locales context
-                                               $parameters['head']['alternates'][$shortCurrent] = $parameters['head']['alternates'][str_replace('_', '-', $locale)];
+                                               $parameters['alternates'][$shortCurrent] = $parameters['alternates'][str_replace('_', '-', $locale)];
                                        }
                                //Add shorter locale
                                        }
                                //Add shorter locale
-                               } elseif (empty($parameters['head']['alternates'][$shortCurrent = substr($locale, 0, 2)])) {
+                               } elseif (empty($parameters['alternates'][$shortCurrent = substr($locale, 0, 2)])) {
                                        //Set titles
                                        $titles = [];
 
                                        //Set titles
                                        $titles = [];
 
@@ -404,7 +408,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                                        }
 
                                        //Set locale locales context
                                        }
 
                                        //Set locale locales context
-                                       $parameters['head']['alternates'][$shortCurrent] = [
+                                       $parameters['alternates'][$shortCurrent] = [
                                                'absolute' => $this->router->generate($this->route, $routeParams, UrlGeneratorInterface::ABSOLUTE_URL),
                                                'relative' => $this->router->generate($this->route, $routeParams),
                                                'title' => implode('/', $titles),
                                                'absolute' => $this->router->generate($this->route, $routeParams, UrlGeneratorInterface::ABSOLUTE_URL),
                                                'relative' => $this->router->generate($this->route, $routeParams),
                                                'title' => implode('/', $titles),
@@ -414,74 +418,65 @@ abstract class AbstractController extends BaseAbstractController implements Serv
                        }
                }
 
                        }
                }
 
-               //With empty head title and section
-               if (empty($parameters['head']['title']) && !empty($parameters['section'])) {
-                       //Set head title
-                       $parameters['head']['title'] = implode(' - ', [$parameters['title'], $parameters['section'], $parameters['head']['site']]);
-               //With empty head title
-               } elseif (empty($parameters['head']['title'])) {
-                       //Set head title
-                       $parameters['head']['title'] = implode(' - ', [$parameters['title'], $parameters['head']['site']]);
-               }
-
-               //With empty head description and description
-               if (empty($parameters['head']['description']) && !empty($parameters['description'])) {
-                       //Set head description
-                       $parameters['head']['description'] = $parameters['description'];
+               //With canonical
+               if (!empty($parameters['canonical'])) {
+                       //Set facebook url
+                       $parameters['facebook']['og:url'] = $parameters['canonical'];
                }
 
                //With empty facebook title and title
                }
 
                //With empty facebook title and title
-               if (empty($parameters['head']['facebook']['og:title']) && !empty($parameters['title'])) {
+               if (empty($parameters['facebook']['og:title']) && !empty($parameters['title']['page'])) {
                        //Set facebook title
                        //Set facebook title
-                       $parameters['head']['facebook']['og:title'] = $parameters['title'];
+                       $parameters['facebook']['og:title'] = $parameters['title']['page'];
                }
 
                //With empty facebook description and description
                }
 
                //With empty facebook description and description
-               if (empty($parameters['head']['facebook']['og:description']) && !empty($parameters['description'])) {
+               if (empty($parameters['facebook']['og:description']) && !empty($parameters['description'])) {
                        //Set facebook description
                        //Set facebook description
-                       $parameters['head']['facebook']['og:description'] = $parameters['description'];
+                       $parameters['facebook']['og:description'] = $parameters['description'];
                }
 
                //With locale
                if (!empty($this->locale)) {
                        //Set facebook locale
                }
 
                //With locale
                if (!empty($this->locale)) {
                        //Set facebook locale
-                       $parameters['head']['facebook']['og:locale'] = $this->locale;
+                       $parameters['facebook']['og:locale'] = $this->locale;
 
                        //With alternates
                        //XXX: locale change when fb_locale=xx_xx is provided is done in FacebookSubscriber
                        //XXX: see https://stackoverflow.com/questions/20827882/in-open-graph-markup-whats-the-use-of-oglocalealternate-without-the-locati
 
                        //With alternates
                        //XXX: locale change when fb_locale=xx_xx is provided is done in FacebookSubscriber
                        //XXX: see https://stackoverflow.com/questions/20827882/in-open-graph-markup-whats-the-use-of-oglocalealternate-without-the-locati
-                       if (!empty($parameters['head']['alternates'])) {
+                       if (!empty($parameters['alternates'])) {
                                //Iterate on alternates
                                //Iterate on alternates
-                               foreach($parameters['head']['alternates'] as $lang => $alternate) {
+                               foreach($parameters['alternates'] as $lang => $alternate) {
                                        if (strlen($lang) == 5) {
                                                //Set facebook locale alternate
                                        if (strlen($lang) == 5) {
                                                //Set facebook locale alternate
-                                               $parameters['head']['facebook']['og:locale:alternate'] = str_replace('-', '_', $lang);
+                                               $parameters['facebook']['og:locale:alternate'] = str_replace('-', '_', $lang);
                                        }
                                }
                        }
                }
 
                                        }
                                }
                        }
                }
 
+               //Without facebook image defined and texts
+               if (empty($parameters['facebook']['og:image']) && !empty($this->request) && !empty($parameters['fbimage']['texts']) && !empty($this->modified)) {
+                       //Get facebook image
+                       //XXX: decode getPathInfo (see https://github.com/symfony/symfony/issues/2579)
+                       $parameters['facebook'] += $this->image->getFacebook(urldecode($this->request->getPathInfo()), $parameters['fbimage']['texts'], $this->modified->getTimestamp());
+               }
+
                //With count
                if (!empty($this->count)) {
                        //With prev link
                        if ($this->page > 0) {
                                //Set head prev
                //With count
                if (!empty($this->count)) {
                        //With prev link
                        if ($this->page > 0) {
                                //Set head prev
-                               $parameters['head']['prev'] = $this->generateUrl($this->request->get('_route'), ['page' => $this->page - 1]+$this->request->get('_route_params'));
+                               $parameters['prev'] = $this->generateUrl($this->request->get('_route'), ['page' => $this->page - 1]+$this->request->get('_route_params'));
                        }
 
                        //With next link
                        if ($this->count > ($this->page + 1) * $this->limit) {
                                //Set head next
                        }
 
                        //With next link
                        if ($this->count > ($this->page + 1) * $this->limit) {
                                //Set head next
-                               $parameters['head']['next'] = $this->generateUrl($this->request->get('_route'), ['page' => $this->page + 1]+$this->request->get('_route_params'));
+                               $parameters['next'] = $this->generateUrl($this->request->get('_route'), ['page' => $this->page + 1]+$this->request->get('_route_params'));
                        }
                }
 
                        }
                }
 
-               //Without facebook image defined and texts
-               if (empty($parameters['head']['facebook']['og:image']) && !empty($this->request) && !empty($parameters['head']['fbimage']['texts']) && !empty($this->modified)) {
-                       //Get facebook image
-                       $parameters['head']['facebook'] += $this->facebook->getImage($this->request->getPathInfo(), $parameters['head']['fbimage']['texts'], $this->modified->getTimestamp());
-               }
-
                //Call twig render method
                $content = $this->twig->render($view, $parameters);
 
                //Call twig render method
                $content = $this->twig->render($view, $parameters);
 
index 9cdb2479ad8275584431bc1205c1ffb8b5f1a9f4..68e3216757142532e9ad5b982e17cbdbaa044a6e 100644 (file)
@@ -104,7 +104,7 @@ class ArticleController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->translator->trans('Articles list');
+               $this->context['title']['page'] = $this->translator->trans('Articles list');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary article listing');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary article listing');
@@ -133,7 +133,7 @@ class ArticleController extends AbstractController {
                //With invalid slug
                if ($slug !== $this->context['article']['slug']) {
                        //Redirect on correctly spelled article
                //With invalid slug
                if ($slug !== $this->context['article']['slug']) {
                        //Redirect on correctly spelled article
-                       return $this->redirectToRoute('rapsys_blog_article_view', ['id' => $this->context['article']['id'], 'slug' => $this->context['article']['slug']], Response::HTTP_MOVED_PERMANENTLY);
+                       return $this->redirectToRoute('rapsysblog_article_view', ['id' => $this->context['article']['id'], 'slug' => $this->context['article']['slug']], Response::HTTP_MOVED_PERMANENTLY);
                }
 
                //Set modified
                }
 
                //Set modified
@@ -194,7 +194,7 @@ class ArticleController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->context['article']['title'];
+               $this->context['title']['page'] = $this->context['article']['title'];
 
                //Set description
                $this->context['description'] = $this->context['article']['description'];
 
                //Set description
                $this->context['description'] = $this->context['article']['description'];
index 6333b45e75f5a35670d8697d787c97b86566de21..962c0b8636c279198844bf2ec6f76440a2a28f22 100644 (file)
@@ -33,7 +33,7 @@ class DefaultController extends AbstractController {
         */
        public function about(Request $request): Response {
                //Set page
         */
        public function about(Request $request): Response {
                //Set page
-               $this->context['title'] = $this->translator->trans('About');
+               $this->context['title']['page'] = $this->translator->trans('About');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary about page');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary about page');
@@ -74,7 +74,7 @@ class DefaultController extends AbstractController {
         */
        public function contact(Request $request): Response {
                //Set title
         */
        public function contact(Request $request): Response {
                //Set title
-               $this->context['title'] = $this->translator->trans('Contact');
+               $this->context['title']['page'] = $this->translator->trans('Contact');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary contact page');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary contact page');
@@ -99,8 +99,8 @@ class DefaultController extends AbstractController {
 
                //Create the form according to the FormType created previously.
                //And give the proper parameters
 
                //Create the form according to the FormType created previously.
                //And give the proper parameters
-               $form = $this->createForm('Rapsys\BlogBundle\Form\ContactType', $data, [
-                       'action' => $this->generateUrl('rapsys_blog_contact'),
+               $form = $this->createForm('Rapsys\PackBundle\Form\ContactType', $data, [
+                       'action' => $this->generateUrl('rapsysblog_contact'),
                        'method' => 'POST'
                ]);
 
                        'method' => 'POST'
                ]);
 
@@ -140,8 +140,11 @@ class DefaultController extends AbstractController {
                                        //Send message
                                        $this->mailer->send($message);
 
                                        //Send message
                                        $this->mailer->send($message);
 
+                                       //Add verification notice
+                                       $this->addFlash('notice', $this->translator->trans('Your message has been sent'));
+
                                        //Redirect on the same route with sent=1 to cleanup form
                                        //Redirect on the same route with sent=1 to cleanup form
-                                       return $this->redirectToRoute($request->get('_route'), ['sent' => 1]+$request->get('_route_params'));
+                                       return $this->redirectToRoute($request->get('_route'), $request->get('_route_params'));
                                //Catch obvious transport exception
                                } catch(TransportExceptionInterface $e) {
                                        //Add error message mail unreachable
                                //Catch obvious transport exception
                                } catch(TransportExceptionInterface $e) {
                                        //Add error message mail unreachable
@@ -175,7 +178,7 @@ class DefaultController extends AbstractController {
                }
 
                //Render template
                }
 
                //Render template
-               return $this->render('@RapsysBlog/form/contact.html.twig', ['contact' => $form->createView(), 'sent' => $request->query->get('sent', 0)]+$this->context, $response);
+               return $this->render('@RapsysBlog/form/contact.html.twig', ['contact' => $form->createView()]+$this->context, $response);
        }
 
        /**
        }
 
        /**
@@ -261,7 +264,7 @@ class DefaultController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->translator->trans('Home');
+               $this->context['title']['page'] = $this->translator->trans('Home');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary');
index d4649a04e0f8e33428e2130938bdb20c579ac4d0..b0c9eb2e594fa4e07a8efe9c27c3625669b5870c 100644 (file)
@@ -98,7 +98,7 @@ class KeywordController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->translator->trans('Keywords list');
+               $this->context['title']['page'] = $this->translator->trans('Keywords list');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary keyword listing');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary keyword listing');
@@ -127,7 +127,7 @@ class KeywordController extends AbstractController {
                //With invalid slug
                if ($slug !== $this->context['keyword']['slug']) {
                        //Redirect on correctly spelled keyword
                //With invalid slug
                if ($slug !== $this->context['keyword']['slug']) {
                        //Redirect on correctly spelled keyword
-                       return $this->redirectToRoute('rapsys_blog_keyword_view', ['id' => $this->context['keyword']['id'], 'slug' => $this->context['keyword']['slug']], Response::HTTP_MOVED_PERMANENTLY);
+                       return $this->redirectToRoute('rapsysblog_keyword_view', ['id' => $this->context['keyword']['id'], 'slug' => $this->context['keyword']['slug']], Response::HTTP_MOVED_PERMANENTLY);
                }
 
                //Set modified
                }
 
                //Set modified
@@ -191,7 +191,7 @@ class KeywordController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->context['keyword']['title'];
+               $this->context['title']['page'] = $this->context['keyword']['title'];
 
                //Set description
                $this->context['description'] = $this->context['keyword']['description'];
 
                //Set description
                $this->context['description'] = $this->context['keyword']['description'];
index ed6109cde2a0cf83e9982e517c2de5405a4de9f6..a4e2e575c32779b7c29f9348a51b0c8cf0d64f7f 100644 (file)
@@ -111,7 +111,7 @@ class UserController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->translator->trans('Users list');
+               $this->context['title']['page'] = $this->translator->trans('Users list');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary user listing');
 
                //Set description
                $this->context['description'] = $this->translator->trans('Welcome to raphaël\'s developer diary user listing');
@@ -140,7 +140,7 @@ class UserController extends AbstractController {
                //With invalid slug
                if ($slug !== $this->context['user']['slug']) {
                        //Redirect on correctly spelled user
                //With invalid slug
                if ($slug !== $this->context['user']['slug']) {
                        //Redirect on correctly spelled user
-                       return $this->redirectToRoute('rapsys_blog_user_view', ['id' => $this->context['user']['id'], 'slug' => $this->context['user']['slug']], Response::HTTP_MOVED_PERMANENTLY);
+                       return $this->redirectToRoute('rapsysblog_user_view', ['id' => $this->context['user']['id'], 'slug' => $this->context['user']['slug']], Response::HTTP_MOVED_PERMANENTLY);
                }
 
                //Set modified
                }
 
                //Set modified
@@ -207,7 +207,7 @@ class UserController extends AbstractController {
                );
 
                //Set title
                );
 
                //Set title
-               $this->context['title'] = $this->context['user']['pseudonym'];
+               $this->context['title']['page'] = $this->context['user']['pseudonym'];
 
                //Set description
                //TODO: Add user creation ? Add a description field ?
 
                //Set description
                //TODO: Add user creation ? Add a description field ?
index d66631aaa5299c8a1e7837435bba929fa9206c9e..dd9c35ceea499d299b9a7142b6d66cbfe07c4a50 100644 (file)
@@ -103,12 +103,12 @@ class Configuration implements ConfigurationInterface {
                        //TODO: copy to '%kernel.translator.fallbacks%'
                        'locales' => [ 'en_gb' ],
                        'logo' => [
                        //TODO: copy to '%kernel.translator.fallbacks%'
                        'locales' => [ 'en_gb' ],
                        'logo' => [
+                               'alt' => 'John Doe\'s blog logo',
                                'png' => '@RapsysBlog/png/logo.png',
                                'png' => '@RapsysBlog/png/logo.png',
-                               'svg' => '@RapsysBlog/svg/logo.svg',
-                               'alt' => 'John Doe\'s blog logo'
+                               'svg' => '@RapsysBlog/svg/logo.svg'
                        ],
                        'path' => is_link(($prefix = is_dir('public') ? './public/' : './').($link = 'bundles/'.str_replace('_', '', $alias))) && is_dir(realpath($prefix.$link)) || is_dir($prefix.$link) ? $link : dirname(__DIR__).'/Resources/public',
                        ],
                        'path' => is_link(($prefix = is_dir('public') ? './public/' : './').($link = 'bundles/'.str_replace('_', '', $alias))) && is_dir(realpath($prefix.$link)) || is_dir($prefix.$link) ? $link : dirname(__DIR__).'/Resources/public',
-                       'root' => 'rapsys_blog',
+                       'root' => 'rapsysblog',
                        'title' => 'John Doe\'s blog',
                ];
 
                        'title' => 'John Doe\'s blog',
                ];
 
@@ -182,9 +182,9 @@ class Configuration implements ConfigurationInterface {
                                        ->arrayNode('logo')
                                                ->addDefaultsIfNotSet()
                                                ->children()
                                        ->arrayNode('logo')
                                                ->addDefaultsIfNotSet()
                                                ->children()
+                                                       ->scalarNode('alt')->defaultValue($defaults['logo']['alt'])->end()
                                                        ->scalarNode('png')->defaultValue($defaults['logo']['png'])->end()
                                                        ->scalarNode('svg')->defaultValue($defaults['logo']['svg'])->end()
                                                        ->scalarNode('png')->defaultValue($defaults['logo']['png'])->end()
                                                        ->scalarNode('svg')->defaultValue($defaults['logo']['svg'])->end()
-                                                       ->scalarNode('alt')->defaultValue($defaults['logo']['alt'])->end()
                                                ->end()
                                        ->end()
                                        ->scalarNode('path')->defaultValue($defaults['path'])->end()
                                                ->end()
                                        ->end()
                                        ->scalarNode('path')->defaultValue($defaults['path'])->end()
index 26330bf97c236e2afad0318acebb6529f9ec8f9b..1510f4db5b9e6d349c33ec2e4b24812ae3beead4 100644 (file)
@@ -33,7 +33,7 @@ class RapsysBlogExtension extends Extension implements PrependExtensionInterface
         */
        public function prepend(ContainerBuilder $container): void {
                //Process the configuration
         */
        public function prepend(ContainerBuilder $container): void {
                //Process the configuration
-               $configs = $container->getExtensionConfig($this->getAlias());
+               $configs = $container->getExtensionConfig($alias = $this->getAlias());
 
                //Load configuration
                $configuration = $this->getConfiguration($configs, $container);
 
                //Load configuration
                $configuration = $this->getConfiguration($configs, $container);
@@ -44,17 +44,23 @@ class RapsysBlogExtension extends Extension implements PrependExtensionInterface
                //Detect when no user configuration is provided
                if ($configs === [[]]) {
                        //Prepend default config
                //Detect when no user configuration is provided
                if ($configs === [[]]) {
                        //Prepend default config
-                       $container->prependExtensionConfig($this->getAlias(), $config);
+                       $container->prependExtensionConfig($alias, $config);
                }
 
                //Save configuration in parameters
                }
 
                //Save configuration in parameters
-               $container->setParameter($this->getAlias(), $config);
+               $container->setParameter($alias, $config);
 
                //Store flattened array in parameters
 
                //Store flattened array in parameters
-               //XXX: don't flatten rapsys_blog.icon.png key which is required to be an array
-               foreach($this->flatten($config, $this->getAlias(), 10, '.', ['rapsys_blog.contact', 'rapsys_blog.copy', 'rapsys_blog.icon', 'rapsys_blog.icon.png', 'rapsys_blog.logo', 'rapsys_blog.facebook.apps', 'rapsys_blog.locales', 'rapsys_blog.languages']) as $k => $v) {
+               //XXX: don't flatten rapsysblog.icon.png key which is required to be an array
+               foreach($this->flatten($config, $alias, 10, '.', ['rapsysblog.contact', 'rapsysblog.copy', 'rapsysblog.icon', 'rapsysblog.icon.png', 'rapsysblog.logo', 'rapsysblog.facebook.apps', 'rapsysblog.locales', 'rapsysblog.languages']) as $k => $v) {
                        $container->setParameter($k, $v);
                }
                        $container->setParameter($k, $v);
                }
+
+               //Set rapsysair.alias key
+               $container->setParameter($alias.'.alias', $alias);
+
+               //Set rapsysair.version key
+               $container->setParameter($alias.'.version', RapsysBlogBundle::getVersion());
        }
 
        /**
        }
 
        /**
index 48429e499fadd0162b07c16d2d85eeb700baef7f..4b70dcd25f135f6d57d41d3291bf92b1d14f66af 100644 (file)
@@ -45,7 +45,7 @@ class BlogFixture extends Fixture {
        /**
         * {@inheritDoc}
         */
        /**
         * {@inheritDoc}
         */
-       public function load(ObjectManager $manager) {
+       public function load(ObjectManager $manager): void {
                //Civility tree
                $civilityTree = [
                        'Mister',
                //Civility tree
                $civilityTree = [
                        'Mister',
index 346ae887a2592a8226114dad831f2a7ef6fbb481..afed7cb7b5a372fba14c9f0ff085d6f09385904b 100644 (file)
@@ -6,31 +6,25 @@ use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
-class ArticleType extends AbstractType
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function buildForm(FormBuilderInterface $builder, array $options)
-    {
-        $builder->add('created')->add('updated')->add('site')->add('author')->add('keywords');
-    }
-    
-    /**
-     * {@inheritdoc}
-     */
-    public function configureOptions(OptionsResolver $resolver)
-    {
-        $resolver->setDefaults(array(
-            'data_class' => 'Rapsys\BlogBundle\Entity\Article'
-        ));
-    }
+class ArticleType extends AbstractType {
+       /**
+        * {@inheritdoc}
+        */
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
+               $builder->add('created')->add('updated')->add('site')->add('author')->add('keywords');
+       }
 
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getBlockPrefix()
-    {
-        return 'rapsys_blogbundle_article';
-    }
+       /**
+        * {@inheritdoc}
+        */
+       public function configureOptions(OptionsResolver $resolver): void {
+               $resolver->setDefaults(['data_class' => 'Rapsys\BlogBundle\Entity\Article']);
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getName(): string {
+               return 'rapsysblog_article';
+       }
 }
 }
index 9a908a4abd5b58168411c503a1897e7592cd53d9..57eb128c914f7566e82c7944f8f9076738f34900 100644 (file)
@@ -6,31 +6,25 @@ use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
-class AuthorType extends AbstractType
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function buildForm(FormBuilderInterface $builder, array $options)
-    {
-        $builder->add('name')->add('slug')->add('created')->add('updated');
-    }
-    
-    /**
-     * {@inheritdoc}
-     */
-    public function configureOptions(OptionsResolver $resolver)
-    {
-        $resolver->setDefaults(array(
-            'data_class' => 'Rapsys\BlogBundle\Entity\Author'
-        ));
-    }
+class AuthorType extends AbstractType {
+       /**
+        * {@inheritdoc}
+        */
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
+               $builder->add('name')->add('slug')->add('created')->add('updated');
+       }
 
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getBlockPrefix()
-    {
-        return 'rapsys_blogbundle_author';
-    }
+       /**
+        * {@inheritdoc}
+        */
+       public function configureOptions(OptionsResolver $resolver): void {
+               $resolver->setDefaults(['data_class' => 'Rapsys\BlogBundle\Entity\Author']);
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getName(): string {
+               return 'rapsysblog_author';
+       }
 }
 }
diff --git a/Form/ContactType.php b/Form/ContactType.php
deleted file mode 100644 (file)
index f727b44..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php declare(strict_types=1);
-
-/*
- * This file is part of the Rapsys BlogBundle package.
- *
- * (c) Raphaël Gertz <symfony@rapsys.eu>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Rapsys\BlogBundle\Form;
-
-use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\OptionsResolver\OptionsResolver;
-use Symfony\Component\Form\Extension\Core\Type\TextType;
-use Symfony\Component\Form\Extension\Core\Type\TextareaType;
-use Symfony\Component\Form\Extension\Core\Type\EmailType;
-use Symfony\Component\Form\Extension\Core\Type\SubmitType;
-use Symfony\Component\Validator\Constraints\Email;
-use Symfony\Component\Validator\Constraints\NotBlank;
-
-use Rapsys\PackBundle\Form\CaptchaType;
-
-class ContactType extends CaptchaType {
-       /**
-        * {@inheritdoc}
-        */
-       public function buildForm(FormBuilderInterface $builder, array $options): void {
-               //Add fields
-               $builder
-                       ->add('name', TextType::class, ['attr' => ['placeholder' => 'Your name'], 'constraints' => [new NotBlank(['message' => 'Please provide your name'])]])
-                       ->add('subject', TextType::class, ['attr' => ['placeholder' => 'Subject'], 'constraints' => [new NotBlank(['message' => 'Please provide your subject'])]])
-                       ->add('mail', EmailType::class, ['attr' => ['placeholder' => 'Your mail'], 'constraints' => [new NotBlank(['message' => 'Please provide a valid mail']), new Email(['message' => 'Your mail doesn\'t seems to be valid'])]])
-                       ->add('message', TextareaType::class, ['attr' => ['placeholder' => 'Your message', 'cols' => 50, 'rows' => 15], 'constraints' => [new NotBlank(['message' => 'Please provide your message'])]])
-                       ->add('submit', SubmitType::class, ['label' => 'Send', 'attr' => ['class' => 'submit']]);
-
-               //Call parent
-               parent::buildForm($builder, $options);
-       }
-
-       /**
-        * {@inheritdoc}
-        */
-       public function configureOptions(OptionsResolver $resolver): void {
-               //Set defaults
-               $resolver->setDefaults(['error_bubbling' => true]);
-       }
-
-       /**
-        * {@inheritdoc}
-        */
-       public function getName() {
-               return 'contact_form';
-       }
-}
index 8e0a543b62483b2e8df7b734743b7cb1ffd234ba..6046f59edd0be82d4af89cba0a90489455a3d1ec 100644 (file)
@@ -21,22 +21,19 @@ class EditType extends BaseEditType {
        /**
         * {@inheritdoc}
         */
        /**
         * {@inheritdoc}
         */
-       public function buildForm(FormBuilderInterface $builder, array $options): FormBuilderInterface {
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
                //Call parent build form
                //Call parent build form
-               $form = parent::buildForm($builder, $options);
+               parent::buildForm($builder, $options);
 
                //Add extra pseudonym field
                if (!empty($options['pseudonym'])) {
 
                //Add extra pseudonym field
                if (!empty($options['pseudonym'])) {
-                       $form->add('pseudonym', TextType::class, ['attr' => ['placeholder' => 'Your pseudonym'], 'required' => false]);
+                       $builder->add('pseudonym', TextType::class, ['attr' => ['placeholder' => 'Your pseudonym'], 'required' => false]);
                }
 
                //Add extra slug field
                if (!empty($options['slug'])) {
                }
 
                //Add extra slug field
                if (!empty($options['slug'])) {
-                       $form->add('slug', TextType::class, ['attr' => ['placeholder' => 'Your slug'], 'required' => false]);
+                       $builder->add('slug', TextType::class, ['attr' => ['placeholder' => 'Your slug'], 'required' => false]);
                }
                }
-
-               //Return form
-               return $form;
        }
 
        /**
        }
 
        /**
@@ -60,6 +57,6 @@ class EditType extends BaseEditType {
         * {@inheritdoc}
         */
        public function getName(): string {
         * {@inheritdoc}
         */
        public function getName(): string {
-               return 'rapsys_blog_edit';
+               return 'rapsysuser_edit';
        }
 }
        }
 }
index 895842b4186e69bec9f1473f8ea2c00557b6c3e5..bd41d72a56019ec9664e860a9f5185d1cdb2c7ed 100644 (file)
@@ -6,31 +6,25 @@ use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
-class KeywordType extends AbstractType
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function buildForm(FormBuilderInterface $builder, array $options)
-    {
-        $builder->add('created')->add('updated')->add('articles');
-    }
-    
-    /**
-     * {@inheritdoc}
-     */
-    public function configureOptions(OptionsResolver $resolver)
-    {
-        $resolver->setDefaults(array(
-            'data_class' => 'Rapsys\BlogBundle\Entity\Keyword'
-        ));
-    }
+class KeywordType extends AbstractType {
+       /**
+        * {@inheritdoc}
+        */
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
+               $builder->add('created')->add('updated')->add('articles');
+       }
 
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getBlockPrefix()
-    {
-        return 'rapsys_blogbundle_keyword';
-    }
+       /**
+        * {@inheritdoc}
+        */
+       public function configureOptions(OptionsResolver $resolver): void {
+               $resolver->setDefaults(['data_class' => 'Rapsys\BlogBundle\Entity\Keyword']);
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getBlockPrefix() {
+               return 'rapsysblog_keyword';
+       }
 }
 }
index 5b4d1534177068f08043f281d58ac5c4c0d719f6..7946d83c8abbf5963ebdc567c091a4170d1e3152 100644 (file)
@@ -6,31 +6,25 @@ use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
-class LanguageType extends AbstractType
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function buildForm(FormBuilderInterface $builder, array $options)
-    {
-        $builder->add('iso6391')->add('iso6393')->add('created')->add('updated');
-    }
-    
-    /**
-     * {@inheritdoc}
-     */
-    public function configureOptions(OptionsResolver $resolver)
-    {
-        $resolver->setDefaults(array(
-            'data_class' => 'Rapsys\BlogBundle\Entity\Language'
-        ));
-    }
+class LanguageType extends AbstractType {
+       /**
+        * {@inheritdoc}
+        */
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
+               $builder->add('iso6391')->add('iso6393')->add('created')->add('updated');
+       }
 
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getBlockPrefix()
-    {
-        return 'rapsys_blogbundle_language';
-    }
+       /**
+        * {@inheritdoc}
+        */
+       public function configureOptions(OptionsResolver $resolver): void {
+               $resolver->setDefaults(['data_class' => 'Rapsys\BlogBundle\Entity\Language']);
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getBlockPrefix() {
+               return 'rapsysblog_language';
+       }
 }
 }
index 690fefb02be9537ad7084d673613383f1c9abb95..42059422c76e43d599e4a45928dc653c7cf2ca6a 100644 (file)
@@ -25,22 +25,19 @@ class RegisterType extends BaseRegisterType {
        /**
         * {@inheritdoc}
         */
        /**
         * {@inheritdoc}
         */
-       public function buildForm(FormBuilderInterface $builder, array $options): FormBuilderInterface {
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
                //Call parent build form
                //Call parent build form
-               $form = parent::buildForm($builder, $options);
+               parent::buildForm($builder, $options);
 
                //Add extra pseudonym field
                if (!empty($options['pseudonym'])) {
 
                //Add extra pseudonym field
                if (!empty($options['pseudonym'])) {
-                       $form->add('pseudonym', TextType::class, ['attr' => ['placeholder' => 'Your pseudonym'], 'required' => false]);
+                       $builder->add('pseudonym', TextType::class, ['attr' => ['placeholder' => 'Your pseudonym'], 'required' => false]);
                }
 
                //Add extra slug field
                if (!empty($options['slug'])) {
                }
 
                //Add extra slug field
                if (!empty($options['slug'])) {
-                       $form->add('slug', TextType::class, ['attr' => ['placeholder' => 'Your slug'], 'required' => false]);
+                       $builder->add('slug', TextType::class, ['attr' => ['placeholder' => 'Your slug'], 'required' => false]);
                }
                }
-
-               //Return form
-               return $form;
        }
 
        /**
        }
 
        /**
@@ -64,6 +61,6 @@ class RegisterType extends BaseRegisterType {
         * {@inheritdoc}
         */
        public function getName(): string {
         * {@inheritdoc}
         */
        public function getName(): string {
-               return 'rapsys_blog_register';
+               return 'rapsysuser_register';
        }
 }
        }
 }
index 5e7cc1b22b3e72015330ee5e61544bea7f8547a7..78a86c9edacd357c43ff9f890b08470890df3122 100644 (file)
@@ -6,31 +6,25 @@ use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
-class SiteType extends AbstractType
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function buildForm(FormBuilderInterface $builder, array $options)
-    {
-        $builder->add('domain')->add('created')->add('updated');
-    }
-    
-    /**
-     * {@inheritdoc}
-     */
-    public function configureOptions(OptionsResolver $resolver)
-    {
-        $resolver->setDefaults(array(
-            'data_class' => 'Rapsys\BlogBundle\Entity\Site'
-        ));
-    }
+class SiteType extends AbstractType {
+       /**
+        * {@inheritdoc}
+        */
+       public function buildForm(FormBuilderInterface $builder, array $options): void {
+               $builder->add('domain')->add('created')->add('updated');
+       }
 
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getBlockPrefix()
-    {
-        return 'rapsys_blogbundle_site';
-    }
+       /**
+        * {@inheritdoc}
+        */
+       public function configureOptions(OptionsResolver $resolver): void {
+               $resolver->setDefaults(['data_class' => 'Rapsys\BlogBundle\Entity\Site']);
+       }
+
+       /**
+        * {@inheritdoc}
+        */
+       public function getName(): string {
+               return 'rapsysblog_site';
+       }
 }
 }
index 2e19b5010b158e2e368e1a9708fe993691c5f9d8..bea72239516a4b17cf6916eac5f2c1cbac2fabe8 100644 (file)
 
 namespace Rapsys\BlogBundle;
 
 
 namespace Rapsys\BlogBundle;
 
-use Symfony\Component\DependencyInjection\Container;
+use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
 use Symfony\Component\HttpKernel\Bundle\Bundle;
 
 class RapsysBlogBundle extends Bundle {
 use Symfony\Component\HttpKernel\Bundle\Bundle;
 
 class RapsysBlogBundle extends Bundle {
+       /**
+        * {@inheritdoc}
+        */
+       public function getContainerExtension(): ?ExtensionInterface {
+               //Return created container extension
+               return $this->createContainerExtension();
+       }
+
        /**
         * Return bundle alias
         *
         * @return string The bundle alias
         */
        /**
         * Return bundle alias
         *
         * @return string The bundle alias
         */
-    public static function getAlias(): string {
+       public static function getAlias(): string {
                //With namespace
                if ($npos = strrpos(static::class, '\\')) {
                        //Set name pos
                //With namespace
                if ($npos = strrpos(static::class, '\\')) {
                        //Set name pos
@@ -40,7 +48,17 @@ class RapsysBlogBundle extends Bundle {
                        $bpos = strlen(static::class) - $npos;
                }
 
                        $bpos = strlen(static::class) - $npos;
                }
 
-               //Return underscored lowercase bundle alias
-               return Container::underscore(substr(static::class, $npos, $bpos));
-    }
+               //Return lowercase bundle alias
+               return strtolower(substr(static::class, $npos, $bpos));
+       }
+
+       /**
+        * Return bundle version
+        *
+        * @return string The bundle version
+        */
+       public static function getVersion(): string {
+               //Return version
+               return '0.0.1';
+       }
 }
 }
index a2e1a5eb3576e9168eb0ea60755eb7544d14f38b..9708751067d9b5005e80b699ec3366cfb5b46278 100644 (file)
@@ -128,7 +128,7 @@ SQL;
                                'created' => $data['created'],
                                'updated' => $data['updated'],
                                'modified' => $data['modified'],
                                'created' => $data['created'],
                                'updated' => $data['updated'],
                                'modified' => $data['modified'],
-                               'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $id, 'slug' => $slug]),
+                               'link' => $this->router->generate('rapsysblog_article_view', ['id' => $id, 'slug' => $slug]),
                                'keywords' => []
                        ];
 
                                'keywords' => []
                        ];
 
@@ -146,7 +146,7 @@ SQL;
                                        'id' => $id,
                                        'slug' => $slug = $data['k_slugs'][$k],
                                        'title' => $data['k_titles'][$k],
                                        'id' => $id,
                                        'slug' => $slug = $data['k_slugs'][$k],
                                        'title' => $data['k_titles'][$k],
-                                       'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $id, 'slug' => $slug]),
+                                       'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $id, 'slug' => $slug]),
                                ];
                        }
                }
                                ];
                        }
                }
@@ -246,7 +246,7 @@ SQL;
                        'created' => $data['created'],
                        'updated' => $data['updated'],
                        'modified' => $data['modified'],
                        'created' => $data['created'],
                        'updated' => $data['updated'],
                        'modified' => $data['modified'],
-                       'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $id, 'slug' => $slug]),
+                       'link' => $this->router->generate('rapsysblog_article_view', ['id' => $id, 'slug' => $slug]),
                        'alternates' => [],
                        'keywords' => []
                ];
                        'alternates' => [],
                        'keywords' => []
                ];
@@ -265,7 +265,7 @@ SQL;
                                'id' => $kid,
                                'slug' => $slug = $data['k_slugs'][$k],
                                'title' => $data['k_titles'][$k],
                                'id' => $kid,
                                'slug' => $slug = $data['k_slugs'][$k],
                                'title' => $data['k_titles'][$k],
-                               'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $kid, 'slug' => $slug]),
+                               'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $kid, 'slug' => $slug]),
                        ];
                }
 
                        ];
                }
 
@@ -283,7 +283,7 @@ SQL;
                                'locale' => $locale,
                                'slug' => $slug = $data['kat_slugs'][$k],
                                'title' => $data['kat_titles'][$k],
                                'locale' => $locale,
                                'slug' => $slug = $data['kat_slugs'][$k],
                                'title' => $data['kat_titles'][$k],
-                               'link' => $this->router->generate('rapsys_blog_article_view', ['_locale' => $locale, 'id' => $id, 'slug' => $slug]),
+                               'link' => $this->router->generate('rapsysblog_article_view', ['_locale' => $locale, 'id' => $id, 'slug' => $slug]),
                        ];
                }
 
                        ];
                }
 
index 4bd8aa833f00abd99a3a4ee348c415924d0ad657..555f1070f5ad48222f8c99a48c19d11816dd3905 100644 (file)
@@ -116,7 +116,7 @@ SQL;
                                'created' => $data['created'],
                                'updated' => $data['updated'],
                                'modified' => $data['modified'],
                                'created' => $data['created'],
                                'updated' => $data['updated'],
                                'modified' => $data['modified'],
-                               'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $id, 'slug' => $slug])
+                               'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $id, 'slug' => $slug])
                        ];
                }
 
                        ];
                }
 
@@ -249,7 +249,7 @@ SQL;
                        'created' => $data['created'],
                        'updated' => $data['updated'],
                        'modified' => $data['modified'],
                        'created' => $data['created'],
                        'updated' => $data['updated'],
                        'modified' => $data['modified'],
-                       'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $id, 'slug' => $slug]),
+                       'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $id, 'slug' => $slug]),
                        'alternates' => [],
                        'articles' => []
                ];
                        'alternates' => [],
                        'articles' => []
                ];
@@ -273,7 +273,7 @@ SQL;
                                'description' => $data['a_descriptions'][$k],
                                'slug' => $slug = $data['a_slugs'][$k],
                                'title' => $data['a_titles'][$k],
                                'description' => $data['a_descriptions'][$k],
                                'slug' => $slug = $data['a_slugs'][$k],
                                'title' => $data['a_titles'][$k],
-                               'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $aid, 'slug' => $slug]),
+                               'link' => $this->router->generate('rapsysblog_article_view', ['id' => $aid, 'slug' => $slug]),
                                'keywords' => []
                        ];
                }
                                'keywords' => []
                        ];
                }
@@ -296,7 +296,7 @@ SQL;
                                'id' => $data['ak_kids'][$k],
                                'slug' => $slug = $data['ak_slugs'][$k],
                                'title' => $data['ak_titles'][$k],
                                'id' => $data['ak_kids'][$k],
                                'slug' => $slug = $data['ak_slugs'][$k],
                                'title' => $data['ak_titles'][$k],
-                               'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $data['ak_kids'][$k], 'slug' => $slug]),
+                               'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $data['ak_kids'][$k], 'slug' => $slug]),
                        ];
                }
 
                        ];
                }
 
@@ -314,7 +314,7 @@ SQL;
                                'locale' => $locale,
                                'slug' => $slug = $data['ckt_slugs'][$k],
                                'title' => $data['ckt_titles'][$k],
                                'locale' => $locale,
                                'slug' => $slug = $data['ckt_slugs'][$k],
                                'title' => $data['ckt_titles'][$k],
-                               'link' => $this->router->generate('rapsys_blog_keyword_view', ['_locale' => $locale, 'id' => $id, 'slug' => $slug]),
+                               'link' => $this->router->generate('rapsysblog_keyword_view', ['_locale' => $locale, 'id' => $id, 'slug' => $slug]),
                        ];
                }
 
                        ];
                }
 
index befe69528cd941e3e2cd0bf2909d2c0271893ceb..71b6cd1f9f2c9b08d24d2bce73c2f1ae72c6b169 100644 (file)
@@ -197,8 +197,8 @@ SQL;
                                'modified' => $data['modified'],
                                'civility' => $data['civility'],
                                #'slug' => $data['slug'],
                                'modified' => $data['modified'],
                                'civility' => $data['civility'],
                                #'slug' => $data['slug'],
-                               'link' => $this->router->generate('rapsys_blog_user_view', ['id' => $data['id'], 'slug' => $data['slug']]),
-                               'edit' => $this->router->generate('rapsys_user_edit', ['mail' => $short = $this->slugger->short($data['mail']), 'hash' => $this->slugger->hash($short)]),
+                               'link' => $this->router->generate('rapsysblog_user_view', ['id' => $data['id'], 'slug' => $data['slug']]),
+                               'edit' => $this->router->generate('rapsysuser_edit', ['mail' => $short = $this->slugger->short($data['mail']), 'hash' => $this->slugger->hash($short)]),
                                'articles' => [],
                                'groups' => []
                        ];
                                'articles' => [],
                                'groups' => []
                        ];
@@ -214,7 +214,7 @@ SQL;
                                        $ret[$data['id']]['groups'][$id] = [
                                                'title' => /*$group = */$this->translator->trans($titles[$k]),
                                                #'slug' => $this->slugger->slug($group)
                                        $ret[$data['id']]['groups'][$id] = [
                                                'title' => /*$group = */$this->translator->trans($titles[$k]),
                                                #'slug' => $this->slugger->slug($group)
-                                               #'link' => $this->router->generate('rapsys_user_group_view', ['id' => $id, 'slug' => $this->slugger->short($group)])
+                                               #'link' => $this->router->generate('rapsysuser_group_view', ['id' => $id, 'slug' => $this->slugger->short($group)])
                                        ];
                                }
                        }
                                        ];
                                }
                        }
@@ -246,7 +246,7 @@ SQL;
                                                        'description' => $descriptions[$k],
                                                        #'slug' => $slugs[$k],
                                                        'title' => $titles[$k],
                                                        'description' => $descriptions[$k],
                                                        #'slug' => $slugs[$k],
                                                        'title' => $titles[$k],
-                                                       'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $id, 'slug' => $slugs[$k]]),
+                                                       'link' => $this->router->generate('rapsysblog_article_view', ['id' => $id, 'slug' => $slugs[$k]]),
                                                        //TODO: replace with keywords !!!
                                                        'keywords' => []
                                                ];
                                                        //TODO: replace with keywords !!!
                                                        'keywords' => []
                                                ];
@@ -265,7 +265,7 @@ SQL;
                                                                $ret[$data['id']]['articles'][$id]['keywords'][$kid] = [
                                                                        #'slug' => $slugs[$k],
                                                                        'title' => $titles[$k],
                                                                $ret[$data['id']]['articles'][$id]['keywords'][$kid] = [
                                                                        #'slug' => $slugs[$k],
                                                                        'title' => $titles[$k],
-                                                                       'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $kid, 'slug' => $slugs[$k]]),
+                                                                       'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $kid, 'slug' => $slugs[$k]]),
                                                                ];
                                                        }
                                                }
                                                                ];
                                                        }
                                                }
@@ -282,9 +282,9 @@ SQL;
         * Find user by id as array
         *
         * @param integer $id The user id
         * Find user by id as array
         *
         * @param integer $id The user id
-        * @return array The article array
+        * @return ?array The article array
         */
         */
-       public function findByIdAsArray(int $id): array {
+       public function findByIdAsArray(int $id): ?array {
                //Set the request
                $req = <<<SQL
 SELECT
                //Set the request
                $req = <<<SQL
 SELECT
@@ -401,10 +401,13 @@ SQL;
                        ->addScalarResult('kt_titles', 'kt_titles', 'string');
 
                //Get data
                        ->addScalarResult('kt_titles', 'kt_titles', 'string');
 
                //Get data
-               $data = $this->_em
+               if (($data = $this->_em
                        ->createNativeQuery($req, $rsm)
                        ->setParameter('id', $id)
                        ->createNativeQuery($req, $rsm)
                        ->setParameter('id', $id)
-                       ->getOneOrNullResult();
+                       ->getOneOrNullResult()) === null) {
+                       //Return null
+                       return $data;
+               }
 
                //Set return
                $return = [
 
                //Set return
                $return = [
@@ -418,8 +421,8 @@ SQL;
                        'modified' => $data['modified'],
                        'civility' => $data['civility'],
                        'slug' => $data['slug'],
                        'modified' => $data['modified'],
                        'civility' => $data['civility'],
                        'slug' => $data['slug'],
-                       'link' => $this->router->generate('rapsys_blog_user_view', ['id' => $data['id'], 'slug' => $data['slug']]),
-                       'edit' => $this->router->generate('rapsys_user_edit', ['mail' => $short = $this->slugger->short($data['mail']), 'hash' => $this->slugger->hash($short)]),
+                       'link' => $this->router->generate('rapsysblog_user_view', ['id' => $data['id'], 'slug' => $data['slug']]),
+                       'edit' => $this->router->generate('rapsysuser_edit', ['mail' => $short = $this->slugger->short($data['mail']), 'hash' => $this->slugger->hash($short)]),
                        'articles' => [],
                        'groups' => []
                ];
                        'articles' => [],
                        'groups' => []
                ];
@@ -435,7 +438,7 @@ SQL;
                                $return['groups'][$id] = [
                                        'title' => /*$group = */$this->translator->trans($titles[$k]),
                                        #'slug' => $this->slugger->slug($group)
                                $return['groups'][$id] = [
                                        'title' => /*$group = */$this->translator->trans($titles[$k]),
                                        #'slug' => $this->slugger->slug($group)
-                                       #'link' => $this->router->generate('rapsys_user_group_view', ['id' => $id, 'slug' => $this->slugger->short($group)])
+                                       #'link' => $this->router->generate('rapsysuser_group_view', ['id' => $id, 'slug' => $this->slugger->short($group)])
                                ];
                        }
                }
                                ];
                        }
                }
@@ -467,7 +470,7 @@ SQL;
                                                'description' => $descriptions[$k],
                                                #'slug' => $slugs[$k],
                                                'title' => $titles[$k],
                                                'description' => $descriptions[$k],
                                                #'slug' => $slugs[$k],
                                                'title' => $titles[$k],
-                                               'link' => $this->router->generate('rapsys_blog_article_view', ['id' => $id, 'slug' => $slugs[$k]]),
+                                               'link' => $this->router->generate('rapsysblog_article_view', ['id' => $id, 'slug' => $slugs[$k]]),
                                                //TODO: replace with keywords !!!
                                                'keywords' => []
                                        ];
                                                //TODO: replace with keywords !!!
                                                'keywords' => []
                                        ];
@@ -486,7 +489,7 @@ SQL;
                                                        $return['articles'][$id]['keywords'][$kid] = [
                                                                #'slug' => $slugs[$k],
                                                                'title' => $titles[$k],
                                                        $return['articles'][$id]['keywords'][$kid] = [
                                                                #'slug' => $slugs[$k],
                                                                'title' => $titles[$k],
-                                                               'link' => $this->router->generate('rapsys_blog_keyword_view', ['id' => $kid, 'slug' => $slugs[$k]]),
+                                                               'link' => $this->router->generate('rapsysblog_keyword_view', ['id' => $kid, 'slug' => $slugs[$k]]),
                                                        ];
                                                }
                                        }
                                                        ];
                                                }
                                        }
diff --git a/Resources/config/parameters.yml.dist b/Resources/config/parameters.yml.dist
deleted file mode 100644 (file)
index ab4e194..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# This file is a "template" of what your parameters.yml file should look like
-# Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production.
-# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
-parameters:
-    database_host: localhost
-    database_port: null
-    database_name: blog
-    database_user: blog
-    database_password: ~
-
-    mailer_transport: smtp
-    mailer_host: 127.0.0.1
-    mailer_user: ~
-    mailer_password: ~
-
-    # A secret key that's used to generate certain security-related tokens
-    secret: ThisTokenIsNotSoSecretChangeIt
-
-    # Blog config
-    blog.locales: [ en, fr ]
-    blog.logo: 'bundles/rapsysblog/png/favicon.png'
-    blog.title: 'Dev log'
-    blog.welcome: 'Welcome to %blog.title%'
-    blog.contact_mail: 'blog@rapsys.eu'
-    blog.contact_name: 'Raphaël Gertz'
-
-# Add json dql function
-doctrine:
-    orm:
-        dql:
-            string_functions:
-                Json:
-                    Rapsys\BlogBundle\DQL\JsonFunction
-
-# Sension config
-sensio_framework_extra:
-    router:
-        annotations: false
-    request:
-        converters: false
-        auto_convert: false
-    view:
-        annotations: false
-    cache:
-        annotations: false
-    security:
-        annotations: false
-    psr_message:
-        enabled: false
-
-# Set fallback locale
-framework:
-    translator:
-        fallbacks:
-            - '%locale%'
-
-# Set twig global
-twig:
-    globals:
-        blog_locales: '%blog.locales%'
diff --git a/Resources/config/routing.yml b/Resources/config/routing.yml
deleted file mode 100644 (file)
index 448e728..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-root:
-    path:     /
-    defaults: { _controller: RapsysBlogBundle:Default:root }
-
-homepage:
-    path:     /{_locale}
-    defaults: { _controller: RapsysBlogBundle:Page:index }
-    requirements:
-            _locale: '%blog.locales%'
-
-about:
-    path:     /{_locale}/about
-    defaults: { _controller: RapsysBlogBundle:Page:about }
-    requirements:
-            _locale: '%blog.locales%'
-
-contact:
-    path:     /{_locale}/contact
-    defaults: { _controller: RapsysBlogBundle:Page:contact }
-    requirements:
-            _locale: '%blog.locales%'
-
-articles:
-    path:     /{_locale}/articles
-    defaults: { _controller: RapsysBlogBundle:Page:articleIndex }
-    requirements:
-            _locale: '%blog.locales%'
-
-articles_article:
-    path:     /{_locale}/articles/{_article}
-    defaults: { _controller: RapsysBlogBundle:Page:articleRead }
-    requirements:
-            _locale: '%blog.locales%'
-            #_article: '\d+'
-            _article: '[a-z0-9-]+'
-
-keywords:
-    path:     /{_locale}/keywords
-    defaults: { _controller: RapsysBlogBundle:Page:keywordIndex }
-    requirements:
-            _locale: '%blog.locales%'
-
-keywords_keyword:
-    path: /{_locale}/keywords/{_keyword}
-    defaults: { _controller: RapsysBlogBundle:Page:keywordRead }
-    requirements:
-        _locale: '%blog.locales%'
-        _keyword: '[a-z0-9-]+'
diff --git a/Resources/config/services.yml b/Resources/config/services.yml
deleted file mode 100644 (file)
index 2dcb15f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-services:
-    twig.extension.intl:
-        class: Twig_Extensions_Extension_Intl
-        tags: [ twig.extension ]
-    rapsys_blog.twig.base64:
-        class: Rapsys\BlogBundle\Twig\Base64Extension
-        tags: [ twig.extension ]
diff --git a/Resources/views/_base.html.twig b/Resources/views/_base.html.twig
deleted file mode 100644 (file)
index 7e2c170..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE html>
-<html{% if head.locale is defined and head.locale %} lang="{{ head.locale }}"{% endif %}>
-       <head{% if head.facebook is defined and head.facebook is not empty %} prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"{% endif %}>
-               {% block head %}
-                       <meta charset="UTF-8" />
-                       <title>{{ head.title }}</title>
-                       <meta name="viewport" content="width=device-width, initial-scale=1" />
-                       {% if head.description is defined and head.description %}
-                               <meta name="description" content="{{ head.description }}" />
-                       {% endif %}
-                       {% if head.keywords is defined and head.keywords %}
-                               <meta name="keywords" content="{{ head.keywords }}" />
-                       {% endif %}
-                       {% if head.facebook is defined and head.facebook %}
-                               {% for property, contents in head.facebook %}
-                                       {% if contents is iterable %}
-                                               {% for content in contents %}
-                                                       <meta property="{{ property }}" content="{{ content }}" />
-                                               {% endfor %}
-                                       {% else %}
-                                               <meta property="{{ property }}" content="{{ contents }}" />
-                                       {% endif %}
-                               {% endfor %}
-                       {% endif %}
-                       {% block link %}
-                               {% if head.icon.ico is defined and head.icon.ico is not empty %}
-                                       <link rel="shortcut icon" type="image/x-icon" href="{{ asset(head.icon.ico) }}" />
-                               {% endif %}
-                               {% if head.icon.png is defined and head.icon.png is not empty %}
-                                       {% for size, icon in head.icon.png %}
-                                               {# Apple #}
-                                               {% if size in [120, 152, 167, 180] %}
-                                                       {% if size == 180 %}
-                                                               <link rel="apple-touch-icon" href="{{ asset(icon) }}" />
-                                                       {% endif %}
-                                                       <link rel="apple-touch-icon" sizes="{{ size }}x{{ size }}" href="{{ asset(icon) }}" />
-                                               {# Windows #}
-                                               {% elseif size in [70, 150, 310] %}
-                                                       <meta name="msapplication-square{{ size }}x{{ size }}logo" content="{{ asset(icon) }}" />
-                                               {# Others #}
-                                               {% else %}
-                                                       <link rel="icon" type="image/png" sizes="{{ size }}x{{ size }}" href="{{ asset(icon) }}" />
-                                               {% endif %}
-                                       {% endfor %}
-                               {% endif %}
-                               {% if head.icon.svg is defined and head.icon.svg is not empty %}
-                                       <link rel="icon" type="image/svg+xml" href="{{ asset(head.icon.svg) }}" />
-                               {% endif %}
-                               {# stylesheet '//fonts.googleapis.com/css?family=Irish+Grover' '//fonts.googleapis.com/css?family=La+Belle+Aurore' '@RapsysBlogBundle/Resources/public/css/{reset,screen}.css' #}
-                               {% stylesheet '@RapsysBlog/css/{reset,droidsans,lemon,notoemoji,screen}.css' %}
-                                       <link rel="stylesheet" type="text/css" href="{{ asset_url }}?{{ 'now'|date('U') }}" />
-                               {% endstylesheet %}
-                               {% stopwatch 'stylesheet' %}
-                               {% endstopwatch %}
-                               {% if head.canonical is defined and head.canonical %}
-                                       <link rel="canonical" href="{{ head.canonical }}"{% if head.locale is defined and head.locale %} hreflang="{{ head.locale }}"{% endif %} />
-                               {% endif %}
-                               {% if head.alternates is defined and head.alternates %}
-                                       {% for lang, alternate in head.alternates %}
-                                               <link rel="alternate" href="{{ alternate.absolute }}" hreflang="{{ lang }}" />
-                                       {% endfor %}
-                               {% endif %}
-                               {% if head.prev is defined and head.prev %}
-                                       <link rel="prev" href="{{ head.prev }}" hreflang="{{ head.locale }}" />
-                               {% endif %}
-                               {% if head.next is defined and head.next %}
-                                       <link rel="next" href="{{ head.next }}" hreflang="{{ head.locale }}" />
-                               {% endif %}
-                       {% endblock %}
-               {% endblock %}
-       </head>
-       <body>
-               {% block body %}
-                       {% block header %}
-                               <header id="header">
-                                       <a id="logo" href="{{ path(head.root) }}" title="{{ head.site }}">
-                                               <img src="{{ asset(head.logo.svg) }}?20221024100144" srcset="{{ asset(head.logo.png) }}?20221024100144 200w, {{ asset(head.logo.svg) }}?20221024100144 400w" sizes="(min-width:400px) 400px, 200px" alt="{{ head.logo.alt }}" width="100" height="60" />
-                                               <strong>{{ head.site }}</strong>
-                                       </a>
-                                       <nav id="nav">
-                                               <a href="{{ path('rapsys_blog') }}" rel="home">{% trans %}Home{% endtrans %}</a>
-                                               <a href="{{ path('rapsys_blog_contact') }}" rel="contact">{% trans %}Contact{% endtrans %}</a>
-                                               {#<a href="{{ path('rapsys_blog_frequently_asked_questions') }}">{% trans %}Frequently asked questions{% endtrans %}</a>#}
-                                               {#{% if is_granted('ROLE_ADMIN') %}#}
-                                                       <a href="{{ path('rapsys_blog_user') }}">{% trans %}Users{% endtrans %}</a>
-                                               {#{% endif %}#}
-                                               {% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
-                                                       <a href="{{ path('rapsys_user_edit', {mail: app.user.mail|short, hash: app.user.mail|short|hash}) }}">{% trans %}My account{% endtrans %}</a>
-                                                       <a href="{{ path('rapsys_user_logout') }}">{% trans %}Logout{% endtrans %}</a>
-                                               {% else %}
-                                                       <a href="{{ path('rapsys_user_login') }}">{% trans %}Login{% endtrans %}</a>
-                                                       <a href="{{ path('rapsys_user_register') }}">{% trans %}Register{% endtrans %}</a>
-                                               {% endif %}
-                                       </nav>
-                                       {#{% block site_subtitle %}{% endblock %}
-                                       {% block site_tagline %}
-                                               {% if tags is defined and tags %}
-                                                       <ul>
-                                                               {% for id, tag in tags %}
-                                                                       <li><h2><a href="#{{id}}">{{tag}}</a></h2></li>
-                                                               {% endfor %}
-                                                       </ul>
-                                               {% endif %}
-                                       {% endblock %}#}
-                               </header>
-                       {% endblock %}
-                       {% block message %}
-                               {# pass an array argument to get the messages of those types (['warning', 'error']) #}
-                               {% for label, messages in app.flashes %}
-                                       {% if messages %}
-                                               <section class="message {{label}}">
-                                                       <ul>
-                                                               {% for message in messages %}
-                                                                       <li>{{ message }}</li>
-                                                               {% endfor %}
-                                                       </ul>
-                                               </section>
-                                       {% endif %}
-                               {% endfor %}
-                       {% endblock %}
-               {% endblock %}
-               {#{% block sidebar %}<aside id="sidebar"></aside>{% endblock %}#}
-               {% block content %}
-                       <article>
-                               <header>
-                                       {% block title %}<h1 id="title"><a href="{{ head.canonical }}">{{ title }}</a></h1>{% endblock %}>
-                                       <p>{{ description }}</p>
-                               </header>
-                       </article>
-               {% endblock %}
-               {% block footer %}
-                       <footer id="footer">
-                               <a href="{{ path('rapsys_blog_about') }}">{% trans %}About{% endtrans %}</a>
-                               {% if copy is defined and copy %}
-                                       <details><summary>{{ copy.long }}</summary><span>{{ copy.short }} <a href="{{ copy.link }}" title="{{ copy.title }}" rel="author">{{ copy.by }}</a></span></details>
-                               {% endif %}
-                               {#<a href="{{ path('rapsys_blog_terms_of_service') }}">{% trans %}Terms of service{% endtrans %}</a>#}
-                               {% if head.alternates is defined and head.alternates %}
-                                       {% set langs = head.alternates|keys|filter(v => v|length == 5) %}
-                                       {% if langs|length > 1 %}
-                                               <ul>
-                                                       {% for lang in langs %}
-                                                               <li><a href="{{ head.alternates[lang].relative }}" hreflang="{{ lang|replace({'_': '-'}) }}" title="{{ head.alternates[lang].title }}">{{ head.alternates[lang].translated }}</a></li>
-                                                       {% endfor %}
-                                               </ul>
-                                       {% else %}
-                                               {% set lang = langs|first %}
-                                               <a href="{{ head.alternates[lang].relative }}" hreflang="{{ lang|replace({'_': '-'}) }}" title="{{ head.alternates[lang].title }}">{{ head.alternates[lang].translated }}</a>
-                                       {% endif %}
-                               {% else %}
-                                       <span>&nbsp;</span>
-                               {% endif %}
-                       </footer>
-               {% endblock %}
-               {% block javascripts %}
-                       {% stopwatch 'javascript' %}
-                               {#{% javascript '@RapsysBlog/js/*.js' %}
-                                       <script type="text/javascript" src="{{ asset_url }}"></script>
-                               {% endjavascript %}#}
-                       {% endstopwatch %}
-               {% endblock %}
-       </body>
-</html>
diff --git a/Resources/views/article/index.html.twig b/Resources/views/article/index.html.twig
deleted file mode 100644 (file)
index 512e0fa..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends '@RapsysBlog/_base.html.twig' %}
-{% block content %}
-       <section id="content">
-               <header>
-                       <h1><a href="{{ path('rapsys_blog_article') }}">{{ title }}</a></h1>
-                       <p>{{ description }}</p>
-               </header>
-               <section>
-                       {% for article in articles %}
-                               <article>
-                                       <header>
-                                               <h2><a href="{{ path('rapsys_blog_article_view', {'id': article.id, 'slug': article.slug}) }}">{{ article.title }}</a></h2>
-                                       </header>
-                                       <section>
-                                               <p>{{ article.description }}</p>
-                                               {% if article.keywords is defined and article.keywords %}
-                                                       <nav>
-                                                               {% for keyword in article.keywords %}
-                                                                       <a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
-                                                               {% endfor %}
-                                                       </nav>
-                                               {% endif %}
-                                       </section>
-                                       <footer>
-                                               <nav>
-                                                       <a href="{{ path('rapsys_blog_article_view', {'id': article.id, 'slug': article.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
-                                               </nav>
-                                       </footer>
-                               </article>
-                       {% endfor %}
-               </section>
-               {% if head.prev is defined or head.next is defined %}
-                       <footer>
-                               <nav class="pager">
-                                       {% if head.prev is defined %}
-                                               <a href="{{ head.prev }}" rel="prev">&lt; {% trans %}Previous articles{% endtrans %}</a>
-                                       {% endif %}
-                                       {% if head.next is defined %}
-                                               <a href="{{ head.next }}" rel="next">{% trans %}Next articles{% endtrans %} &gt;</a>
-                                       {% endif %}
-                               </nav>
-                       </footer>
-               {% endif %}
-       </section>
-{% endblock %}
diff --git a/Resources/views/form/contact.html.twig b/Resources/views/form/contact.html.twig
deleted file mode 100644 (file)
index dbbf191..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-{% extends '@RapsysBlog/_base.html.twig' %}
-{% block content %}
-       <section class="form">
-               <header>
-                       <h1><a href="{{ head.canonical }}">{{ title }}</a></h1>
-                       <p>{{ description }}</p>
-               </header>
-               <section>
-                       {% if sent is defined and sent %}
-                               <p>{% trans %}Your message has been sent{% endtrans %}</p>
-                       {% else %}
-                               {{ form_start(contact) }}
-                                       {{ form_row(contact.subject) }}
-
-                                       {{ form_row(contact.name) }}
-
-                                       {{ form_row(contact.mail) }}
-
-                                       {{ form_row(contact.message) }}
-
-                                       {{ form_row(contact.captcha) }}
-
-                                       {{ form_row(contact.submit) }}
-
-                                       {# Render CSRF token etc .#}
-                                       <div style="display:none">{{ form_rest(contact) }}</div>
-                               {{ form_end(contact) }}
-                       {% endif %}
-               </section>
-       </section>
-{% endblock %}
diff --git a/Resources/views/form/recover.html.twig b/Resources/views/form/recover.html.twig
deleted file mode 100644 (file)
index fa48444..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-{% extends '@RapsysBlog/_base.html.twig' %}
-{% block content %}
-       <section class="form">
-               <header>
-                       <h2><a href="{{ path('rapsys_user_recover') }}">{{ title }}</a></h2>
-               </header>
-               <section>
-                       {% if sent %}
-                               <p class="message notice">{% trans %}Your account recovery message has been sent{% endtrans %}</p>
-                       {% else %}
-                               {{ form_start(recover) }}
-                                       {% if recover.mail is defined %}
-                                               {{ form_row(recover.mail) }}
-                                       {% endif %}
-
-                                       {% if recover.password is defined %}
-                                               {{ form_row(recover.password) }}
-                                       {% endif %}
-
-                                       {{ form_row(recover.submit) }}
-
-                                       {# Render CSRF token etc .#}
-                                       <footer style="display:none">{{ form_rest(recover) }}</footer>
-                               {{ form_end(recover) }}
-                       {% endif %}
-               </section>
-       </section>
-{% endblock %}
diff --git a/Resources/views/index.html.twig b/Resources/views/index.html.twig
deleted file mode 100644 (file)
index 464fd8a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends '@RapsysBlog/_base.html.twig' %}
-{% block content %}
-       <section id="content">
-               <header>
-                       <h1 id="title"><a href="{{ head.canonical }}">{{ title }}</a></h1>
-                       <p>{{ description }}</p>
-               </header>
-               <section>
-                       {% for article in articles %}
-                               <article>
-                                       <header>
-                                               <h2><a href="{{ path('rapsys_blog_article_view', {'id': article.id, 'slug': article.slug}) }}">{{ article.title }}</a></h2>
-                                       </header>
-                                       <section>
-                                               <p>{{ article.description }}</p>
-                                               {% if article.keywords is defined and article.keywords %}
-                                                       <nav>
-                                                               {% for keyword in article.keywords %}
-                                                                       <a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
-                                                               {% endfor %}
-                                                       </nav>
-                                               {% endif %}
-                                       </section>
-                                       <footer>
-                                               <nav>
-                                                       <a href="{{ path('rapsys_blog_article_view', {'id': article.id, 'slug': article.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
-                                               </nav>
-                                       </footer>
-                               </article>
-                       {% endfor %}
-               </section>
-               {% if head.prev is defined or head.next is defined %}
-                       <footer>
-                               <nav class="pager">
-                                       {% if head.prev is defined %}
-                                               <a href="{{ head.prev }}" rel="prev">&lt; {% trans %}Previous articles{% endtrans %}</a>
-                                       {% endif %}
-                                       {% if head.next is defined %}
-                                               <a href="{{ head.next }}" rel="next">{% trans %}Next articles{% endtrans %} &gt;</a>
-                                       {% endif %}
-                               </nav>
-                       </footer>
-               {% endif %}
-       </section>
-{% endblock %}
diff --git a/Resources/views/keyword/index.html.twig b/Resources/views/keyword/index.html.twig
deleted file mode 100644 (file)
index dae4b70..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends '@RapsysBlog/_base.html.twig' %}
-{% block content %}
-       <section id="content">
-               <header>
-                       <h1><a href="{{ path('rapsys_blog_keyword') }}">{{ title }}</a></h1>
-                       <p>{{ description }}</p>
-               </header>
-               <section>
-                       {% for keyword in keywords %}
-                               <article>
-                                       <header>
-                                               <h2><a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a></h2>
-                                       </header>
-                                       <section>
-                                               <p>{{ keyword.description }}</p>
-                                               {#{% if article.keywords is defined and article.keywords %}
-                                                       <nav>
-                                                               {% for keyword in article.keywords %}
-                                                                       <a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
-                                                               {% endfor %}
-                                                       </nav>
-                                               {% endif %}#}
-                                       </section>
-                                       <footer>
-                                               <nav>
-                                                       <a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
-                                               </nav>
-                                       </footer>
-                               </article>
-                       {% endfor %}
-               </section>
-               {% if head.prev is defined or head.next is defined %}
-                       <footer>
-                               <nav class="pager">
-                                       {% if head.prev is defined %}
-                                               <a href="{{ head.prev }}" rel="prev">&lt; {% trans %}Previous keywords{% endtrans %}</a>
-                                       {% endif %}
-                                       {% if head.next is defined %}
-                                               <a href="{{ head.next }}" rel="next">{% trans %}Next keywords{% endtrans %} &gt;</a>
-                                       {% endif %}
-                               </nav>
-                       </footer>
-               {% endif %}
-       </section>
-{% endblock %}
diff --git a/Resources/views/mail/_base.html.twig b/Resources/views/mail/_base.html.twig
deleted file mode 100644 (file)
index 23eea6d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-{% extends '@RapsysBlog/_base.html.twig' %}
-{% block head %}
-       <meta charset="UTF-8" />
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-       {% if head.locale is defined and head.locale %}<meta http-equiv="Content-Language" content="{{ head.locale }}" />{% endif %}
-       <meta name="viewport" content="width=device-width, initial-scale=1" />
-       <title>{{ subject }}</title>
-       <style type="text/css">
-               body {background:white;color:#222}
-               a {text-decoration:none;color:#15c}
-               a:hover {text-decoration:underline}
-               a.link {word-break:break-all;font-size:1.5rem}
-               h1 {margin: .5rem;font-size: 2rem}
-               table {width: 100%;border-radius: .5rem}
-               thead {border-top:.5rem solid #09c;background:#cff}
-               thead th {text-align:center}
-               tbody {border-top:.5rem solid #09c;background:#cff}
-               tbody td {margin:.5rem 0;padding:0 .5rem}
-               tfoot {border-top:.5rem solid #09c;background:#cff}
-               tfoot td {text-align:center}
-               tfoot summary:after {display:none}
-               tfoot summary::-webkit-details-marker {display:none}
-       </style>
-{% endblock %}
-{% block header %}
-       <table>
-               <thead>
-                       <tr>
-                               {#<th><a href="{{ url(head.root) }}" title="{{ head.site }}"><img src="{{ source(head.logo.png)|data_uri }}" alt="{{ head.logo.alt }}" width="100" height="60" /></a></th>#}
-                               <th><a href="{{ url(head.root) }}" title="{{ head.site }}"><img src="{{ email.image(head.logo.png) }}" alt="{{ head.logo.alt }}" width="100" height="60" /></a></th>
-                               <th><h1><a href="{{ url(head.root) }}">{{ head.site }}</a></h1></th>
-                       </tr>
-               </thead>
-{% endblock %}
-{% block message %}{% endblock %}
-{% block footer %}
-               <tfoot>
-                       <tr>
-                               <td colspan="2">{{ copy.long }} - {{ copy.short }}</td>
-                       </tr>
-               </tfoot>
-       </table>
-{% endblock %}
similarity index 70%
rename from Resources/config/packages/rapsys_blog.yaml
rename to config/packages/rapsysblog.yaml
index 660ca0f0be9ca855bfa670ef04ce24cc44dede41..09d7ac534b3769cfcc7e820d6392e043235e04ec 100644 (file)
@@ -1,6 +1,6 @@
 # Dev log configuration
 #TODO: set mail, calendar and facebook app id as env variables ???
 # Dev log configuration
 #TODO: set mail, calendar and facebook app id as env variables ???
-rapsys_blog:
+rapsysblog:
     contact:
         address: 'blog@rapsys.eu'
         name: 'Raphaël Gertz'
     contact:
         address: 'blog@rapsys.eu'
         name: 'Raphaël Gertz'
@@ -61,11 +61,11 @@ rapsys_blog:
         alt: 'Rapsys'' dev log logo'
         png: '@RapsysBlog/png/logo.png'
         svg: '@RapsysBlog/svg/logo.svg'
         alt: 'Rapsys'' dev log logo'
         png: '@RapsysBlog/png/logo.png'
         svg: '@RapsysBlog/svg/logo.svg'
-    root: 'rapsys_blog'
+    root: 'rapsysblog'
     title: 'Rapsys'' dev log'
 
 #RapsysUser configuration
     title: 'Rapsys'' dev log'
 
 #RapsysUser configuration
-rapsys_user:
+rapsysuser:
     #Class replacement
     class:
         group: 'Rapsys\BlogBundle\Entity\Group'
     #Class replacement
     class:
         group: 'Rapsys\BlogBundle\Entity\Group'
@@ -76,66 +76,65 @@ rapsys_user:
         admin: 'ROLE_ADMIN'
         civility: 'Mister'
         group: [ 'User' ]
         admin: 'ROLE_ADMIN'
         civility: 'Mister'
         group: [ 'User' ]
+        languages: '%rapsysblog.languages%'
     #Route replacement
     route:
     #Route replacement
     route:
-        index:
-            name: 'rapsys_blog'
         register:
         register:
-            name: 'rapsys_user_register'
+            name: 'rapsysuser_register'
     #Translate replacement
     #Translate replacement
-    translate: [ 'title', 'password', 'copy.by', 'copy.long', 'copy.short', 'copy.title', 'head.logo.alt', 'head.site' ]
-    #Languages replacement
-    languages: '%rapsys_blog.languages%'
+    translate: [ 'title.page', 'title.section', 'title.site', 'password', 'copy.by', 'copy.long', 'copy.short', 'copy.title', 'logo.alt' ]
     #Contact replacement
     #Contact replacement
-    contact: '%rapsys_blog.contact%'
+    contact: '%rapsysblog.contact%'
     #Context replacement
     context:
     #Context replacement
     context:
-        copy: '%rapsys_blog.copy%'
-        head:
-            icon: '%rapsys_blog.icon%'
-            logo: '%rapsys_blog.logo%'
-            root: '%rapsys_blog.root%'
-            site: '%rapsys_blog.title%'
+        copy: '%rapsysblog.copy%'
+        icon: '%rapsysblog.icon%'
+        logo: '%rapsysblog.logo%'
+        root: '%rapsysblog.root%'
+        title:
+            section: 'User'
+            site: '%rapsysblog.title%'
     #Edit replacement
     edit:
         admin:
             mail: true
             slug: true
     #Edit replacement
     edit:
         admin:
             mail: true
             slug: true
-        route:
-            index: 'root'
         view:
             edit: 'Rapsys\BlogBundle\Form\EditType'
             name: '@RapsysBlog/form/edit.html.twig'
             context:
         view:
             edit: 'Rapsys\BlogBundle\Form\EditType'
             name: '@RapsysBlog/form/edit.html.twig'
             context:
-                title: 'Modify account'
+                title:
+                    page: 'Modify account'
                 password: 'Modify password'
                 password: 'Modify password'
+                root: '%rapsysblog.root%'
     #Index replacement
     index:
     #Index replacement
     index:
-        route:
-            index: 'root'
         view:
             name: '@RapsysBlog/user/index.html.twig'
             context:
         view:
             name: '@RapsysBlog/user/index.html.twig'
             context:
-                title: 'User list'
+                title:
+                    page: 'User list'
+                root: '%rapsysblog.root%'
     #Login replacement
     login:
     #Login replacement
     login:
-        route:
-            index: 'root'
         view:
             name: '@RapsysBlog/form/login.html.twig'
             context:
         view:
             name: '@RapsysBlog/form/login.html.twig'
             context:
-                title: 'Login'
+                title:
+                    page: 'Login'
+                root: '%rapsysblog.root%'
     #Recover replacement
     recover:
         route:
     #Recover replacement
     recover:
         route:
-            index: 'root'
             recover: 'recover_url'
         view:
             name: '@RapsysBlog/form/recover.html.twig'
             context:
             recover: 'recover_url'
         view:
             name: '@RapsysBlog/form/recover.html.twig'
             context:
-                title: 'Recover'
+                title:
+                    page: 'Recover'
+                root: '%rapsysblog.root%'
         mail:
         mail:
-            subject: 'Welcome back %%recipient_name%% to %%head.site%%'
+            subject: 'Welcome back %%recipient_name%% to %%title.site%%'
             html: '@RapsysBlog/mail/recover.html.twig'
             text: '@RapsysBlog/mail/recover.text.twig'
             context:
             html: '@RapsysBlog/mail/recover.html.twig'
             text: '@RapsysBlog/mail/recover.text.twig'
             context:
@@ -145,15 +144,16 @@ rapsys_user:
             pseudonym: false
             slug: false
         route:
             pseudonym: false
             slug: false
         route:
-            index: 'root'
             confirm: 'confirm_url'
         view:
             form: 'Rapsys\BlogBundle\Form\RegisterType'
             name: '@RapsysBlog/form/register.html.twig'
             context:
             confirm: 'confirm_url'
         view:
             form: 'Rapsys\BlogBundle\Form\RegisterType'
             name: '@RapsysBlog/form/register.html.twig'
             context:
-                title: 'Register'
+                title:
+                    page: 'Register'
+                root: '%rapsysblog.root%'
         mail:
         mail:
-            subject: 'Welcome %%recipient_name%% to %%head.site%%'
+            subject: 'Welcome %%recipient_name%% to %%title.site%%'
             html: '@RapsysBlog/mail/register.html.twig'
             text: '@RapsysBlog/mail/register.text.twig'
             context:
             html: '@RapsysBlog/mail/register.html.twig'
             text: '@RapsysBlog/mail/register.text.twig'
             context:
@@ -168,6 +168,9 @@ doctrine:
             collate: 'utf8mb4_unicode_ci'
     # Orm configuration
     orm:
             collate: 'utf8mb4_unicode_ci'
     # Orm configuration
     orm:
+        # Controler resolver
+        controller_resolver:
+            auto_mapping: false
         # Replace repository factory
         repository_factory: 'Rapsys\BlogBundle\Factory\RepositoryFactory'
 
         # Replace repository factory
         repository_factory: 'Rapsys\BlogBundle\Factory\RepositoryFactory'
 
@@ -180,7 +183,7 @@ doctrine:
 
 # Framework configuration
 framework:
 
 # Framework configuration
 framework:
-    default_locale: '%rapsys_blog.locale%'
+    default_locale: '%rapsysblog.locale%'
     disallow_search_engine_index: false
     #error_controller: 'Rapsys\BlogBundle\Controller\ErrorController::show'
     mailer:
     disallow_search_engine_index: false
     #error_controller: 'Rapsys\BlogBundle\Controller\ErrorController::show'
     mailer:
@@ -195,7 +198,7 @@ framework:
         cookie_secure: 'auto'
         cookie_samesite: 'lax'
     translator:
         cookie_secure: 'auto'
         cookie_samesite: 'lax'
     translator:
-        fallbacks: '%rapsys_blog.locales%'
+        fallbacks: '%rapsysblog.locales%'
 
 # Security configuration
 security:
 
 # Security configuration
 security:
@@ -214,14 +217,14 @@ security:
     providers:
         database:
             entity:
     providers:
         database:
             entity:
-                class: Rapsys\BlogBundle\Entity\User
-                property: mail
+                class: 'Rapsys\BlogBundle\Entity\User'
+                property: 'mail'
 
     # Set firewall
     firewalls:
         # Disables authentication for assets and the profiler, adapt it according to your needs
         dev:
 
     # Set firewall
     firewalls:
         # Disables authentication for assets and the profiler, adapt it according to your needs
         dev:
-            pattern: ^/(_(profiler|wdt)|css|images|js)/
+            pattern: '^/(_(profiler|wdt)|css|images|js)/'
             security: false
 
         main:
             security: false
 
         main:
@@ -246,9 +249,9 @@ security:
                 # Redirect to referer if different from login route
                 use_referer: true
                 # Login path
                 # Redirect to referer if different from login route
                 use_referer: true
                 # Login path
-                login_path: rapsys_user_login
+                login_path: 'rapsysuser_login'
                 # Check path
                 # Check path
-                check_path: rapsys_user_login
+                check_path: 'rapsysuser_login'
                 # Username parameter
                 username_parameter: 'login[mail]'
                 # Password parameter
                 # Username parameter
                 username_parameter: 'login[mail]'
                 # Password parameter
@@ -263,9 +266,9 @@ security:
             # Set logout route
             logout:
                 # Logout route
             # Set logout route
             logout:
                 # Logout route
-                path: rapsys_user_logout
+                path: 'rapsysuser_logout'
                 # Logout default target
                 # Logout default target
-                target: rapsys_blog
+                target: 'rapsysblog'
 
             # Set custom access denied handler
             #access_denied_handler: Rapsys\BlogBundle\Handler\AccessDeniedHandler
 
             # Set custom access denied handler
             #access_denied_handler: Rapsys\BlogBundle\Handler\AccessDeniedHandler
@@ -287,29 +290,29 @@ security:
 services:
     #Register abstract controller
     Rapsys\BlogBundle\Controller\AbstractController:
 services:
     #Register abstract controller
     Rapsys\BlogBundle\Controller\AbstractController:
-        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
+        arguments: [ '@security.authorization_checker', '@service_container', '@rapsysuser.access_decision_manager', '@doctrine', '@rapsysblog.facebook_util', '@form.factory', '@rapsyspack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsyspack.path_package', '@router', '@rapsyspack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
         tags: [ 'controller.service_arguments' ]
     #Register article controller
     Rapsys\BlogBundle\Controller\ArticleController:
         tags: [ 'controller.service_arguments' ]
     #Register article controller
     Rapsys\BlogBundle\Controller\ArticleController:
-        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
+        arguments: [ '@security.authorization_checker', '@service_container', '@rapsysuser.access_decision_manager', '@doctrine', '@rapsysblog.facebook_util', '@form.factory', '@rapsyspack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsyspack.path_package', '@router', '@rapsyspack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
         tags: [ 'controller.service_arguments' ]
     #Register default controller
     Rapsys\BlogBundle\Controller\DefaultController:
         tags: [ 'controller.service_arguments' ]
     #Register default controller
     Rapsys\BlogBundle\Controller\DefaultController:
-        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
+        arguments: [ '@security.authorization_checker', '@service_container', '@rapsysuser.access_decision_manager', '@doctrine', '@rapsysblog.facebook_util', '@form.factory', '@rapsyspack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsyspack.path_package', '@router', '@rapsyspack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
         tags: [ 'controller.service_arguments' ]
     #Register keyword controller
     Rapsys\BlogBundle\Controller\KeywordController:
         tags: [ 'controller.service_arguments' ]
     #Register keyword controller
     Rapsys\BlogBundle\Controller\KeywordController:
-        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
+        arguments: [ '@security.authorization_checker', '@service_container', '@rapsysuser.access_decision_manager', '@doctrine', '@rapsysblog.facebook_util', '@form.factory', '@rapsyspack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsyspack.path_package', '@router', '@rapsyspack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
         tags: [ 'controller.service_arguments' ]
     #Register user controller
     Rapsys\BlogBundle\Controller\UserController:
         tags: [ 'controller.service_arguments' ]
     #Register user controller
     Rapsys\BlogBundle\Controller\UserController:
-        arguments: [ '@security.authorization_checker', '@service_container', '@rapsys_user.access_decision_manager', '@doctrine', '@rapsys_pack.facebook_util', '@form.factory', '@rapsys_pack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsys_pack.path_package', '@router', '@rapsys_pack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
+        arguments: [ '@security.authorization_checker', '@service_container', '@rapsysuser.access_decision_manager', '@doctrine', '@rapsysblog.facebook_util', '@form.factory', '@rapsyspack.image_util', '@mailer.mailer', '@doctrine.orm.default_entity_manager', '@rapsyspack.path_package', '@router', '@rapsyspack.slugger_util', '@security.helper', '@request_stack', '@translator', '@twig' ]
         tags: [ 'controller.service_arguments' ]
     Rapsys\BlogBundle\Factory\RepositoryFactory:
         tags: [ 'controller.service_arguments' ]
     Rapsys\BlogBundle\Factory\RepositoryFactory:
-        arguments: [ '@request_stack', '@router', '@rapsys_pack.slugger_util', '@translator', '%rapsys_blog.languages%', '%rapsys_blog.locale%' ]
+        arguments: [ '@request_stack', '@router', '@rapsyspack.slugger_util', '@translator', '%rapsysblog.languages%', '%rapsysblog.locale%' ]
     #Register blog fixture
     Rapsys\BlogBundle\Fixture\BlogFixture:
     #Register blog fixture
     Rapsys\BlogBundle\Fixture\BlogFixture:
-        arguments: [ '@rapsys_pack.slugger_util' ]
+        arguments: [ '@rapsyspack.slugger_util' ]
         tags: [ 'doctrine.fixture.orm' ]
     #Register form factory as public
     form.factory:
         tags: [ 'doctrine.fixture.orm' ]
     #Register form factory as public
     form.factory:
@@ -318,18 +321,19 @@ services:
         public: true
     #Register facebook event subscriber
     Rapsys\PackBundle\Subscriber\FacebookSubscriber:
         public: true
     #Register facebook event subscriber
     Rapsys\PackBundle\Subscriber\FacebookSubscriber:
-        arguments: [ '@router', '%rapsys_blog.locales%' ]
+        arguments: [ '@router', '%rapsysblog.locales%' ]
         tags: [ 'kernel.event_subscriber' ]
     #Register facebook util service
         tags: [ 'kernel.event_subscriber' ]
     #Register facebook util service
-    rapsys_blog.facebook_util:
+    rapsysblog.facebook_util:
         class: 'Rapsys\PackBundle\Util\FacebookUtil'
         #TODO: create the facebook.png file and add the fonts
         #TODO: add a default font
         class: 'Rapsys\PackBundle\Util\FacebookUtil'
         #TODO: create the facebook.png file and add the fonts
         #TODO: add a default font
-        arguments: [ '@router',  '%kernel.project_dir%/var/cache', '%rapsys_pack.path%', 'facebook', '%rapsys_blog.path%/png/facebook.png', { irishgrover: '%rapsys_blog.path%/ttf/irishgrover.v10.ttf', labelleaurore: '%rapsys_blog.path%/ttf/labelleaurore.v10.ttf', dejavusans: '%rapsys_blog.path%/ttf/dejavusans.2.37.ttf', droidsans: '%rapsys_blog.path%/ttf/droidsans.regular.ttf' } ]
+        arguments: [ '@service_container', '@router', '@rapsyspack.slugger_util' ]
+        #arguments: [ '@service_container', '@router',  '%kernel.project_dir%/var/cache', '%rapsyspack.path%', 'facebook', '%rapsysblog.path%/png/facebook.png', { irishgrover: '%rapsysblog.path%/ttf/irishgrover.v10.ttf', labelleaurore: '%rapsysblog.path%/ttf/labelleaurore.v10.ttf', dejavusans: '%rapsysblog.path%/ttf/dejavusans.2.37.ttf', droidsans: '%rapsysblog.path%/ttf/droidsans.regular.ttf' } ]
         public: true
     #Register contact form type
         public: true
     #Register contact form type
-    Rapsys\BlogBundle\Form\ContactType:
-        arguments: [ '@rapsys_pack.image_util', '@rapsys_pack.slugger_util', '@translator' ]
+    Rapsys\PackBundle\Form\ContactType:
+        arguments: [ '@rapsyspack.image_util', '@rapsyspack.slugger_util', '@translator', true ]
         tags: [ 'form.type' ]
 
 # Twig configuration
         tags: [ 'form.type' ]
 
 # Twig configuration
@@ -341,10 +345,10 @@ twig:
     #XXX: enable forced regeneration of css and js at each page load
     cache: false
     #Fix form layout for css
     #XXX: enable forced regeneration of css and js at each page load
     cache: false
     #Fix form layout for css
-    #XXX: @RapsysBlog is a shortcut to vendor/rapsys/blogbundle/Resources/views directory here
+    #XXX: @RapsysBlog is a shortcut to vendor/rapsys/blogbundle/templates directory here
     form_theme: [ '@RapsysBlog/form/form_div_layout.html.twig' ]
     #Set twig paths
     paths:
         #Required by email.image(site_logo) directive
     form_theme: [ '@RapsysBlog/form/form_div_layout.html.twig' ]
     #Set twig paths
     paths:
         #Required by email.image(site_logo) directive
-        #XXX: Allow twig to resolve @RapsysBlog/png/logo.png in vendor/rapsys/blogbundle/Resources/public/png/logo.png
-        '%kernel.project_dir%/vendor/rapsys/blogbundle/Resources/public': 'RapsysBlog'
+        #XXX: Allow twig to resolve @RapsysBlog/png/logo.png in vendor/rapsys/blogbundle/public/png/logo.png
+        '%kernel.project_dir%/vendor/rapsys/blogbundle/public': 'RapsysBlog'
similarity index 90%
rename from Resources/config/routes/rapsys_blog.yaml
rename to config/routes/rapsysblog.yaml
index 0f9495522e19414d27bc1008e965afc3c4dcd43a..5c84a6409f96986233dab2b8de356650cec1e1dc 100644 (file)
@@ -4,84 +4,84 @@
 #SCRUD: index, add, edit, delete, view
 
 #TODO: rename view in show ???
 #SCRUD: index, add, edit, delete, view
 
 #TODO: rename view in show ???
-rapsys_blog:
+rapsysblog:
     path:
         en_gb: '/en'
         fr_fr: '/'
     controller: Rapsys\BlogBundle\Controller\DefaultController::index
     methods: GET
 
     path:
         en_gb: '/en'
         fr_fr: '/'
     controller: Rapsys\BlogBundle\Controller\DefaultController::index
     methods: GET
 
-rapsys_blog_about:
+rapsysblog_about:
     path:
         en_gb: '/en/about'
         fr_fr: '/a-propos'
     controller: Rapsys\BlogBundle\Controller\DefaultController::about
     methods: GET
 
     path:
         en_gb: '/en/about'
         fr_fr: '/a-propos'
     controller: Rapsys\BlogBundle\Controller\DefaultController::about
     methods: GET
 
-rapsys_blog_contact:
+rapsysblog_contact:
     path:
         en_gb: '/en/contact/{id<\d*>?}/{user<[\w-]*>?}'
         fr_fr: '/contacter/{id<\d*>?}/{user<[\w-]*>?}'
     controller: Rapsys\BlogBundle\Controller\DefaultController::contact
     methods: GET|POST
 
     path:
         en_gb: '/en/contact/{id<\d*>?}/{user<[\w-]*>?}'
         fr_fr: '/contacter/{id<\d*>?}/{user<[\w-]*>?}'
     controller: Rapsys\BlogBundle\Controller\DefaultController::contact
     methods: GET|POST
 
-rapsys_blog_article:
+rapsysblog_article:
     path:
         en_gb: '/en/article'
         fr_fr: '/article'
     controller: Rapsys\BlogBundle\Controller\ArticleController::index
     methods: GET|POST
 
     path:
         en_gb: '/en/article'
         fr_fr: '/article'
     controller: Rapsys\BlogBundle\Controller\ArticleController::index
     methods: GET|POST
 
-rapsys_blog_article_view:
+rapsysblog_article_view:
     path:
         en_gb: '/en/article/{id<\d*>?}/{slug<[\w-]*>?}'
         fr_fr: '/article/{id<\d*>?}/{slug<[\w-]*>?}'
     controller: Rapsys\BlogBundle\Controller\ArticleController::view
     methods: GET|POST
 
     path:
         en_gb: '/en/article/{id<\d*>?}/{slug<[\w-]*>?}'
         fr_fr: '/article/{id<\d*>?}/{slug<[\w-]*>?}'
     controller: Rapsys\BlogBundle\Controller\ArticleController::view
     methods: GET|POST
 
-rapsys_blog_keyword:
+rapsysblog_keyword:
     path:
         en_gb: '/en/keyword'
         fr_fr: '/mot-cle'
     controller: Rapsys\BlogBundle\Controller\KeywordController::index
     methods: GET|POST
 
     path:
         en_gb: '/en/keyword'
         fr_fr: '/mot-cle'
     controller: Rapsys\BlogBundle\Controller\KeywordController::index
     methods: GET|POST
 
-rapsys_blog_keyword_view:
+rapsysblog_keyword_view:
     path:
         en_gb: '/en/keyword/{id<\d*>?}/{slug<[\w-]*>?}'
         fr_fr: '/mot-cle/{id<\d*>?}/{slug<[\w-]*>?}'
     controller: Rapsys\BlogBundle\Controller\KeywordController::view
     methods: GET|POST
 
     path:
         en_gb: '/en/keyword/{id<\d*>?}/{slug<[\w-]*>?}'
         fr_fr: '/mot-cle/{id<\d*>?}/{slug<[\w-]*>?}'
     controller: Rapsys\BlogBundle\Controller\KeywordController::view
     methods: GET|POST
 
-rapsys_blog_frequently_asked_questions:
+rapsysblog_frequently_asked_questions:
     path:
         en_gb: '/en/frequently-asked-questions'
         fr_fr: '/foire-aux-questions'
     controller: Rapsys\BlogBundle\Controller\DefaultController::frequentlyAskedQuestions
     methods: GET
 
     path:
         en_gb: '/en/frequently-asked-questions'
         fr_fr: '/foire-aux-questions'
     controller: Rapsys\BlogBundle\Controller\DefaultController::frequentlyAskedQuestions
     methods: GET
 
-rapsys_blog_terms_of_service:
+rapsysblog_terms_of_service:
     path:
         en_gb: '/en/terms-of-service'
         fr_fr: '/conditions-generales-d-utilisation'
     controller: Rapsys\BlogBundle\Controller\DefaultController::termsOfService
     methods: GET
 
     path:
         en_gb: '/en/terms-of-service'
         fr_fr: '/conditions-generales-d-utilisation'
     controller: Rapsys\BlogBundle\Controller\DefaultController::termsOfService
     methods: GET
 
-rapsys_blog_user:
+rapsysblog_user:
     path:
         en_gb: '/en/user'
         fr_fr: '/utilisateur'
     controller: Rapsys\BlogBundle\Controller\UserController::index
     methods: GET
 
     path:
         en_gb: '/en/user'
         fr_fr: '/utilisateur'
     controller: Rapsys\BlogBundle\Controller\UserController::index
     methods: GET
 
-rapsys_blog_user_view:
+rapsysblog_user_view:
     path:
         en_gb: '/en/user/{id<\d+>}/{slug<[\w-]+>?}'
         fr_fr: '/utilisateur/{id<\d+>}/{slug<[\w-]+>?}'
     controller: Rapsys\BlogBundle\Controller\UserController::view
     methods: GET|POST
 
     path:
         en_gb: '/en/user/{id<\d+>}/{slug<[\w-]+>?}'
         fr_fr: '/utilisateur/{id<\d+>}/{slug<[\w-]+>?}'
     controller: Rapsys\BlogBundle\Controller\UserController::view
     methods: GET|POST
 
-rapsys_user_confirm:
+rapsysuser_confirm:
     path:
         en_gb: '/en/confirm/{hash}/{mail}'
         fr_fr: '/confirmer/{hash}/{mail}'
     path:
         en_gb: '/en/confirm/{hash}/{mail}'
         fr_fr: '/confirmer/{hash}/{mail}'
@@ -91,7 +91,7 @@ rapsys_user_confirm:
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
-rapsys_user_edit:
+rapsysuser_edit:
     path:
         en_gb: '/en/user/{hash}/{mail}'
         fr_fr: '/utilisateur/{hash}/{mail}'
     path:
         en_gb: '/en/user/{hash}/{mail}'
         fr_fr: '/utilisateur/{hash}/{mail}'
@@ -101,7 +101,7 @@ rapsys_user_edit:
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
-rapsys_user_login:
+rapsysuser_login:
     path:
         en_gb: '/en/login/{hash}/{mail}'
         fr_fr: '/connecter/{hash}/{mail}'
     path:
         en_gb: '/en/login/{hash}/{mail}'
         fr_fr: '/connecter/{hash}/{mail}'
@@ -114,13 +114,13 @@ rapsys_user_login:
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
-rapsys_user_logout:
+rapsysuser_logout:
     path:
         en_gb: '/en/logout'
         fr_fr: '/deconnecter'
     methods: GET
 
     path:
         en_gb: '/en/logout'
         fr_fr: '/deconnecter'
     methods: GET
 
-rapsys_user_recover:
+rapsysuser_recover:
     path:
         en_gb: '/en/recover/{hash}/{pass}/{mail}'
         fr_fr: '/recuperer/{hash}/{pass}/{mail}'
     path:
         en_gb: '/en/recover/{hash}/{pass}/{mail}'
         fr_fr: '/recuperer/{hash}/{pass}/{mail}'
@@ -135,7 +135,7 @@ rapsys_user_recover:
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
         hash: '[a-zA-Z0-9=_-]+'
     methods: GET|POST
 
-rapsys_user_register:
+rapsysuser_register:
     path:
         en_gb: '/en/register'
         fr_fr: '/enregistrer'
     path:
         en_gb: '/en/register'
         fr_fr: '/enregistrer'
similarity index 99%
rename from Resources/public/css/screen.css
rename to public/css/screen.css
index 7227a83e18ba6e5b1e230f112eaf7ec9c19360d7..dc8dd24151ae69c79ce152809127e7c7a989a17f 100644 (file)
@@ -191,6 +191,10 @@ section header p {
        text-align: justify;
 }
 
        text-align: justify;
 }
 
+article header p {
+       margin-bottom: 0;
+}
+
 article section,
 section section {
        padding: 0 .5rem;
 article section,
 section section {
        padding: 0 .5rem;
diff --git a/templates/_base.html.twig b/templates/_base.html.twig
new file mode 100644 (file)
index 0000000..a175f5d
--- /dev/null
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html{% if locale is defined and locale %} lang="{{ locale }}"{% endif %}>
+       <head{% if facebook is defined and facebook %} prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"{% endif %}>
+               {% block meta %}<meta charset="UTF-8">{% endblock %}
+               <title>{% block title %}{{ [title.page, title.section, title.site]|filter(v => v)|join(' - ') }}{% endblock %}</title>
+               {% block stylesheet %}
+                       <meta name="viewport" content="width=device-width, initial-scale=1" />
+                       {% if description is defined and description %}
+                               <meta name="description" content="{{ description }}" />
+                       {% endif %}
+                       {% if keywords is defined and keywords %}
+                               <meta name="keywords" content="{{ keywords|join(', ') }}" />
+                       {% endif %}
+                       {% if icon is defined and icon %}
+                               <link rel="shortcut icon" type="image/x-icon" href="{{ asset(icon.ico) }}" />
+                               <link rel="icon" type="image/svg+xml" href="{{ asset(icon.svg) }}" />
+                               {% for size, icon in icon.png %}
+                                       {# Apple #}
+                                       {% if size in [120, 152, 167, 180] %}
+                                               {% if size == 180 %}
+                                                       <link rel="apple-touch-icon" href="{{ asset(icon) }}" />
+                                               {% endif %}
+                                               <link rel="apple-touch-icon" sizes="{{ size }}x{{ size }}" href="{{ asset(icon) }}" />
+                                       {# Windows #}
+                                       {% elseif size in [70, 150, 310] %}
+                                               <meta name="msapplication-square{{ size }}x{{ size }}logo" content="{{ asset(icon) }}" />
+                                       {# Others #}
+                                       {% else %}
+                                               <link rel="icon" type="image/png" sizes="{{ size }}x{{ size }}" href="{{ asset(icon) }}" />
+                                       {% endif %}
+                               {% endfor %}
+                       {% endif %}
+                       {% stopwatch 'stylesheet' %}
+                               {# stylesheet '//fonts.googleapis.com/css?family=Irish+Grover' '//fonts.googleapis.com/css?family=La+Belle+Aurore' '@RapsysBlogBundle/css/{reset,screen}.css' #}
+                               {% stylesheet '@RapsysBlog/css/{reset,droidsans,lemon,notoemoji,screen}.css' %}
+                                       <link rel="stylesheet" type="text/css" href="{{ asset }}?{{ 'now'|date('U') }}" />
+                               {% endstylesheet %}
+                       {% endstopwatch %}
+                       {% if canonical is defined and canonical %}
+                               <link rel="canonical" href="{{ canonical }}"{% if locale is defined and locale %} hreflang="{{ locale }}"{% endif %} />
+                       {% endif %}
+                       {% if alternates is defined and alternates %}
+                               {% for lang, alternate in alternates %}
+                                       <link rel="alternate" href="{{ alternate.absolute }}" hreflang="{{ lang }}" />
+                               {% endfor %}
+                       {% endif %}
+                       {% if prev is defined and prev %}
+                               <link rel="prev" href="{{ prev }}" hreflang="{{ locale }}" />
+                       {% endif %}
+                       {% if next is defined and next %}
+                               <link rel="next" href="{{ next }}" hreflang="{{ locale }}" />
+                       {% endif %}
+                       {% if facebook is defined and facebook %}
+                               {% for property, contents in facebook %}
+                                       {% if contents is iterable %}
+                                               {% for content in contents %}
+                                                       <meta property="{{ property }}" content="{{ content }}" />
+                                               {% endfor %}
+                                       {% else %}
+                                               <meta property="{{ property }}" content="{{ contents }}" />
+                                       {% endif %}
+                               {% endfor %}
+                       {% endif %}
+               {% endblock %}
+       </head>
+       <body>
+               {% block body %}
+                       {% block header %}
+                               <header id="header">
+                                       {% if logo is defined and logo %}
+                                               {% block header_title %}
+                                                       <a id="logo" href="{{ path(root) }}" title="{{ title.site }}">
+                                                               <img src="{{ asset(logo.svg) }}?{{ 'now'|date('U') }}" srcset="{{ asset(logo.png) }}?{{ 'now'|date('U') }} 200w, {{ asset(logo.svg) }}?{{ 'now'|date('U') }} 400w" sizes="(min-width:400px) 400px, 200px" alt="{{ title.site }}" width="100" height="45" />
+                                                               <strong>{{ title.site }}</strong>
+                                                       </a>
+                                               {% endblock %}
+                                       {% endif %}
+                                       {% block header_nav %}
+                                               <nav id="nav">
+                                                       <a href="{{ path('rapsysblog') }}" rel="home">{% trans %}Home{% endtrans %}</a>
+                                                       <a href="{{ path('rapsysblog_contact') }}" rel="contact">{% trans %}Contact{% endtrans %}</a>
+                                                       {#<a href="{{ path('rapsysblog_frequently_asked_questions') }}">{% trans %}Frequently asked questions{% endtrans %}</a>#}
+                                                       {#{% if is_granted('ROLE_ADMIN') %}#}
+                                                               <a href="{{ path('rapsysblog_user') }}">{% trans %}Users{% endtrans %}</a>
+                                                       {#{% endif %}#}
+                                                       {% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
+                                                               <a href="{{ path('rapsysuser_edit', {mail: app.user.mail|short, hash: app.user.mail|short|hash}) }}">{% trans %}My account{% endtrans %}</a>
+                                                               <a href="{{ path('rapsysuser_logout') }}">{% trans %}Logout{% endtrans %}</a>
+                                                       {% else %}
+                                                               <a href="{{ path('rapsysuser_login') }}">{% trans %}Login{% endtrans %}</a>
+                                                               <a href="{{ path('rapsysuser_register') }}">{% trans %}Register{% endtrans %}</a>
+                                                       {% endif %}
+                                               </nav>
+                                       {% endblock %}
+                                       {#
+                                               {% block header_subtitle %}{% endblock %}
+                                               {% block header_tagline %}
+                                                       {% if tags is defined and tags %}
+                                                               <ul>
+                                                                       {% for id, tag in tags %}
+                                                                               <li><h2><a href="#{{id}}">{{tag}}</a></h2></li>
+                                                                       {% endfor %}
+                                                               </ul>
+                                                       {% endif %}
+                                               {% endblock %}
+                                       #}
+                               </header>
+                       {% endblock %}
+                       {% block message %}
+                               {# pass an array argument to get the messages of those types (['warning', 'error']) #}
+                               {% for label, messages in app.flashes %}
+                                       {% if messages %}
+                                               <section class="message {{label}}">
+                                                       <ul>
+                                                               {% for message in messages %}
+                                                                       <li>{{ message }}</li>
+                                                               {% endfor %}
+                                                       </ul>
+                                               </section>
+                                       {% endif %}
+                               {% endfor %}
+                       {% endblock %}
+                       {#{% block sidebar %}<aside id="sidebar"></aside>{% endblock %}#}
+                       {% block content %}
+                               <article>
+                                       <header>
+                                               {% block content_title %}<h1 id="title"><a href="{{ canonical }}">{{ title.page }}</a></h1>{% endblock %}>
+                                               <p>{{ description }}</p>
+                                       </header>
+                               </article>
+                       {% endblock %}
+                       {% block footer %}
+                               <footer id="footer">
+                                       <a href="{{ path('rapsysblog_about') }}">{% trans %}About{% endtrans %}</a>
+                                       {% if copy is defined and copy %}
+                                               <details><summary>{{ copy.long }}</summary><span>{{ copy.short }} <a href="{{ copy.link }}" title="{{ copy.title }}" rel="author">{{ copy.by }}</a></span></details>
+                                       {% endif %}
+                                       {#<a href="{{ path('rapsysblog_terms_of_service') }}">{% trans %}Terms of service{% endtrans %}</a>#}
+                                       {% if alternates is defined and alternates %}
+                                               {% set langs = alternates|keys|filter(v => v|length == 5) %}
+                                               {% if langs|length > 1 %}
+                                                       <ul>
+                                                               {% for lang in langs %}
+                                                                       <li><a href="{{ alternates[lang].relative }}" hreflang="{{ lang|replace({'_': '-'}) }}" title="{{ alternates[lang].title }}">{{ alternates[lang].translated }}</a></li>
+                                                               {% endfor %}
+                                                       </ul>
+                                               {% else %}
+                                                       {% set lang = langs|first %}
+                                                       <a href="{{ alternates[lang].relative }}" hreflang="{{ lang|replace({'_': '-'}) }}" title="{{ alternates[lang].title }}">{{ alternates[lang].translated }}</a>
+                                               {% endif %}
+                                       {% else %}
+                                               <span>&nbsp;</span>
+                                       {% endif %}
+                               </footer>
+                       {% endblock %}
+               {% endblock %}
+               {% block javascript %}
+                       {% stopwatch 'javascript' %}
+                               {#{% javascript '@RapsysBlog/js/*.js' %}
+                                       <script type="text/javascript" src="{{ asset_url }}"></script>
+                               {% endjavascript %}#}
+                       {% endstopwatch %}
+               {% endblock %}
+       </body>
+</html>
similarity index 84%
rename from Resources/views/about.html.twig
rename to templates/about.html.twig
index b5a584020e5c26f5febc40ab110289ff270fb95a..ab7b440c352f5e0b5135210d31a0ba6a4f6993a5 100644 (file)
@@ -2,7 +2,7 @@
 {% block content %}
        <article id="content">
                <header>
 {% block content %}
        <article id="content">
                <header>
-                       <h1><a href="{{ head.canonical }}">{{ title }}</a></h1>
+                       <h1><a href="{{ canonical }}">{{ title.page }}</a></h1>
                        <p>{{ description }}</p>
                </header>
                <section>
                        <p>{{ description }}</p>
                </header>
                <section>
diff --git a/templates/article/index.html.twig b/templates/article/index.html.twig
new file mode 100644 (file)
index 0000000..c1a8aab
--- /dev/null
@@ -0,0 +1,45 @@
+{% extends '@RapsysBlog/_base.html.twig' %}
+{% block content %}
+       <section id="content">
+               <header>
+                       <h1><a href="{{ path('rapsysblog_article') }}">{{ title.page }}</a></h1>
+                       <p>{{ description }}</p>
+               </header>
+               <section>
+                       {% for article in articles %}
+                               <article>
+                                       <header>
+                                               <h2><a href="{{ path('rapsysblog_article_view', {'id': article.id, 'slug': article.slug}) }}">{{ article.title }}</a></h2>
+                                       </header>
+                                       <section>
+                                               <p>{{ article.description }}</p>
+                                               {% if article.keywords is defined and article.keywords %}
+                                                       <nav>
+                                                               {% for keyword in article.keywords %}
+                                                                       <a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
+                                                               {% endfor %}
+                                                       </nav>
+                                               {% endif %}
+                                       </section>
+                                       <footer>
+                                               <nav>
+                                                       <a href="{{ path('rapsysblog_article_view', {'id': article.id, 'slug': article.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
+                                               </nav>
+                                       </footer>
+                               </article>
+                       {% endfor %}
+               </section>
+               {% if ( prev is defined and prev ) or ( next is defined and next ) %}
+                       <footer>
+                               <nav class="pager">
+                                       {% if prev is defined and prev %}
+                                               <a href="{{ prev }}" rel="prev">&lt; {% trans %}Previous articles{% endtrans %}</a>
+                                       {% endif %}
+                                       {% if next is defined and next %}
+                                               <a href="{{ next }}" rel="next">{% trans %}Next articles{% endtrans %} &gt;</a>
+                                       {% endif %}
+                               </nav>
+                       </footer>
+               {% endif %}
+       </section>
+{% endblock %}
similarity index 75%
rename from Resources/views/article/view.html.twig
rename to templates/article/view.html.twig
index 36a87a23e52f6e6aed61c1db3a065ae46cbebc99..565a72929019b55e1429852680cf60bf74d25f02 100644 (file)
@@ -1,9 +1,8 @@
 {% extends '@RapsysBlog/_base.html.twig' %}
 {% extends '@RapsysBlog/_base.html.twig' %}
-{% block title %}{% endblock %}
 {% block content %}
        <article id="content">
                <header>
 {% block content %}
        <article id="content">
                <header>
-                       <h1 id="title"><a href="{{ head.canonical }}">{{ title }}</a></h1>
+                       <h1 id="title"><a href="{{ canonical }}">{{ title.page }}</a></h1>
                        <p>{% trans with {'%date%': article.created|format_datetime('full', 'short')} %}Published the %date%{% endtrans %}{% if article.created != article.updated %}{% trans with {'%date%': article.updated|format_datetime('short', 'short')} %}, edited the %date%{% endtrans %}{% endif %}</p>
                </header>
                <section>
                        <p>{% trans with {'%date%': article.created|format_datetime('full', 'short')} %}Published the %date%{% endtrans %}{% if article.created != article.updated %}{% trans with {'%date%': article.updated|format_datetime('short', 'short')} %}, edited the %date%{% endtrans %}{% endif %}</p>
                </header>
                <section>
@@ -13,7 +12,7 @@
                        {% if article.keywords is defined and article.keywords %}
                                <nav>
                                        {% for keyword in article.keywords %}
                        {% if article.keywords is defined and article.keywords %}
                                <nav>
                                        {% for keyword in article.keywords %}
-                                               <a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
+                                               <a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
                                        {% endfor %}
                                </nav>
                        {% endif %}
                                        {% endfor %}
                                </nav>
                        {% endif %}
diff --git a/templates/form/contact.html.twig b/templates/form/contact.html.twig
new file mode 100644 (file)
index 0000000..c67c919
--- /dev/null
@@ -0,0 +1,27 @@
+{% extends '@RapsysBlog/_base.html.twig' %}
+{% block content %}
+       <section class="form">
+               <header>
+                       <h1><a href="{{ canonical }}">{{ title.page }}</a></h1>
+                       <p>{{ description }}</p>
+               </header>
+               <section>
+                       {{ form_start(contact) }}
+                               {{ form_row(contact.subject) }}
+
+                               {{ form_row(contact.name) }}
+
+                               {{ form_row(contact.mail) }}
+
+                               {{ form_row(contact.message) }}
+
+                               {{ form_row(contact.captcha) }}
+
+                               {{ form_row(contact.submit) }}
+
+                               {# Render CSRF token etc .#}
+                               <div style="display:none">{{ form_rest(contact) }}</div>
+                       {{ form_end(contact) }}
+               </section>
+       </section>
+{% endblock %}
similarity index 55%
rename from Resources/views/form/edit.html.twig
rename to templates/form/edit.html.twig
index ef321a64bcc80cfde0ebce622a2364ed5935407b..5d6aa4ab4028153e08788baa919911a9f7e8b390 100644 (file)
@@ -2,7 +2,7 @@
 {% block content %}
        <section class="form">
                <header>
 {% block content %}
        <section class="form">
                <header>
-                       <h2><a href="{{ head.canonical }}">{{ title }}</a></h2>
+                       <h2><a href="{{ canonical }}">{{ title.page }}</a></h2>
                </header>
                <section>
                        {% if disabled is defined and disabled %}
                </header>
                <section>
                        {% if disabled is defined and disabled %}
                                <p class="message notice">{% trans %}Your verification mail has been sent, to activate your account follow the confirmation link inside{% endtrans %}</p>
                                <p class="message warning">{% trans %}If you did not receive a verification mail, check your Spam or Junk mail folder{% endtrans %}</p>
                        {% else %}
                                <p class="message notice">{% trans %}Your verification mail has been sent, to activate your account follow the confirmation link inside{% endtrans %}</p>
                                <p class="message warning">{% trans %}If you did not receive a verification mail, check your Spam or Junk mail folder{% endtrans %}</p>
                        {% else %}
-                               {{ form_start(edit) }}
-                                       {% if edit.mail is defined %}
-                                               {{ form_row(edit.mail) }}
+                               {{ form_start(register) }}
+                                       {% if register.mail is defined %}
+                                               {{ form_row(register.mail) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.password is defined %}
-                                               {{ form_row(edit.password) }}
+                                       {% if register.password is defined %}
+                                               {{ form_row(register.password) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.civility is defined %}
-                                               {{ form_row(edit.civility) }}
+                                       {% if register.civility is defined %}
+                                               {{ form_row(register.civility) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.forename is defined %}
-                                               {{ form_row(edit.forename) }}
+                                       {% if register.forename is defined %}
+                                               {{ form_row(register.forename) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.surname is defined %}
-                                               {{ form_row(edit.surname) }}
+                                       {% if register.surname is defined %}
+                                               {{ form_row(register.surname) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.pseudonym is defined %}
-                                               {{ form_row(edit.pseudonym) }}
+                                       {% if register.pseudonym is defined %}
+                                               {{ form_row(register.pseudonym) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.slug is defined %}
-                                               {{ form_row(edit.slug) }}
+                                       {% if register.slug is defined %}
+                                               {{ form_row(register.slug) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.active is defined %}
-                                               {{ form_row(edit.active) }}
+                                       {% if register.active is defined %}
+                                               {{ form_row(register.active) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {% if edit.enable is defined %}
-                                               {{ form_row(edit.enable) }}
+                                       {% if register.enable is defined %}
+                                               {{ form_row(register.enable) }}
                                        {% endif %}
 
                                        {% endif %}
 
-                                       {{ form_row(edit.submit) }}
+                                       {{ form_row(register.submit) }}
 
                                        {# Render CSRF token etc .#}
 
                                        {# Render CSRF token etc .#}
-                                       <footer style="display:none">{{ form_rest(edit) }}</footer>
-                               {{ form_end(edit) }}
+                                       <footer style="display:none">{{ form_rest(register) }}</footer>
+                               {{ form_end(register) }}
                        {% endif %}
                </section>
        </section>
        {% if reset is defined %}
                <section class="form">
                        <header>
                        {% endif %}
                </section>
        </section>
        {% if reset is defined %}
                <section class="form">
                        <header>
-                               <h2><a href="{{ head.canonical }}">{{ password }}</a></h2>
+                               <h2><a href="{{ canonical }}">{{ password }}</a></h2>
                        </header>
                        <section>
                                {{ form_start(reset) }}
                        </header>
                        <section>
                                {{ form_start(reset) }}
similarity index 82%
rename from Resources/views/form/login.html.twig
rename to templates/form/login.html.twig
index 2d15c51cfdd07a5bb98686324d99b69163379f58..260e4184192ea08a083d1d645339c8d5a126b98b 100644 (file)
@@ -2,7 +2,7 @@
 {% block content %}
        <section class="form">
                <header>
 {% block content %}
        <section class="form">
                <header>
-                       <h2><a href="{{ path('rapsys_user_login') }}">{{ title }}</a></h2>
+                       <h2><a href="{{ path('rapsysuser_login') }}">{{ title.page }}</a></h2>
                </header>
                <section>
                        {{ form_start(login) }}
                </header>
                <section>
                        {{ form_start(login) }}
@@ -20,7 +20,7 @@
        {% if recover is defined %}
                <section class="form">
                        <header>
        {% if recover is defined %}
                <section class="form">
                        <header>
-                               <h2><a href="{{ path('rapsys_user_recover') }}">{% trans %}Recover{% endtrans %}</a></h2>
+                               <h2><a href="{{ path('rapsysuser_recover') }}">{% trans %}Recover{% endtrans %}</a></h2>
                        </header>
                        <section>
                                {{ form_start(recover) }}
                        </header>
                        <section>
                                {{ form_start(recover) }}
diff --git a/templates/form/recover.html.twig b/templates/form/recover.html.twig
new file mode 100644 (file)
index 0000000..46a4503
--- /dev/null
@@ -0,0 +1,24 @@
+{% extends '@RapsysBlog/_base.html.twig' %}
+{% block content %}
+       <section class="form">
+               <header>
+                       <h2><a href="{{ path('rapsysuser_recover') }}">{{ title.page }}</a></h2>
+               </header>
+               <section>
+                       {{ form_start(recover) }}
+                               {% if recover.mail is defined %}
+                                       {{ form_row(recover.mail) }}
+                               {% endif %}
+
+                               {% if recover.password is defined %}
+                                       {{ form_row(recover.password) }}
+                               {% endif %}
+
+                               {{ form_row(recover.submit) }}
+
+                               {# Render CSRF token etc .#}
+                               <footer style="display:none">{{ form_rest(recover) }}</footer>
+                       {{ form_end(recover) }}
+               </section>
+       </section>
+{% endblock %}
similarity index 95%
rename from Resources/views/form/register.html.twig
rename to templates/form/register.html.twig
index 86080a64e1c83fcd1c3490fe4c56aa36b92fa9ee..11c3b9ecb63e003e1ee2c5df474e82e1c468519b 100644 (file)
@@ -2,7 +2,7 @@
 {% block content %}
        <section class="form">
                <header>
 {% block content %}
        <section class="form">
                <header>
-                       <h2><a href="{{ path('rapsys_user_register') }}">{{ title }}</a></h2>
+                       <h2><a href="{{ path('rapsysuser_register') }}">{{ title.page }}</a></h2>
                </header>
                <section>
                        {% if disabled is defined and disabled %}
                </header>
                <section>
                        {% if disabled is defined and disabled %}
diff --git a/templates/index.html.twig b/templates/index.html.twig
new file mode 100644 (file)
index 0000000..14b74ff
--- /dev/null
@@ -0,0 +1,45 @@
+{% extends '@RapsysBlog/_base.html.twig' %}
+{% block content %}
+       <section id="content">
+               <header>
+                       <h1 id="title"><a href="{{ canonical }}">{{ title.page }}</a></h1>
+                       <p>{{ description }}</p>
+               </header>
+               <section>
+                       {% for article in articles %}
+                               <article>
+                                       <header>
+                                               <h2><a href="{{ path('rapsysblog_article_view', {'id': article.id, 'slug': article.slug}) }}">{{ article.title }}</a></h2>
+                                       </header>
+                                       <section>
+                                               <p>{{ article.description }}</p>
+                                               {% if article.keywords is defined and article.keywords %}
+                                                       <nav>
+                                                               {% for keyword in article.keywords %}
+                                                                       <a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
+                                                               {% endfor %}
+                                                       </nav>
+                                               {% endif %}
+                                       </section>
+                                       <footer>
+                                               <nav>
+                                                       <a href="{{ path('rapsysblog_article_view', {'id': article.id, 'slug': article.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
+                                               </nav>
+                                       </footer>
+                               </article>
+                       {% endfor %}
+               </section>
+               {% if ( prev is defined and prev ) or ( next is defined and next ) %}
+                       <footer>
+                               <nav class="pager">
+                                       {% if prev is defined and prev %}
+                                               <a href="{{ prev }}" rel="prev">&lt; {% trans %}Previous articles{% endtrans %}</a>
+                                       {% endif %}
+                                       {% if next is defined and next %}
+                                               <a href="{{ next }}" rel="next">{% trans %}Next articles{% endtrans %} &gt;</a>
+                                       {% endif %}
+                               </nav>
+                       </footer>
+               {% endif %}
+       </section>
+{% endblock %}
diff --git a/templates/keyword/index.html.twig b/templates/keyword/index.html.twig
new file mode 100644 (file)
index 0000000..1bc5904
--- /dev/null
@@ -0,0 +1,45 @@
+{% extends '@RapsysBlog/_base.html.twig' %}
+{% block content %}
+       <section id="content">
+               <header>
+                       <h1><a href="{{ path('rapsysblog_keyword') }}">{{ title.page }}</a></h1>
+                       <p>{{ description }}</p>
+               </header>
+               <section>
+                       {% for keyword in keywords %}
+                               <article>
+                                       <header>
+                                               <h2><a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a></h2>
+                                       </header>
+                                       <section>
+                                               <p>{{ keyword.description }}</p>
+                                               {#{% if article.keywords is defined and article.keywords %}
+                                                       <nav>
+                                                               {% for keyword in article.keywords %}
+                                                                       <a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
+                                                               {% endfor %}
+                                                       </nav>
+                                               {% endif %}#}
+                                       </section>
+                                       <footer>
+                                               <nav>
+                                                       <a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
+                                               </nav>
+                                       </footer>
+                               </article>
+                       {% endfor %}
+               </section>
+               {% if ( prev is defined and prev ) or ( next is defined and next ) %}
+                       <footer>
+                               <nav class="pager">
+                                       {% if prev is defined and prev %}
+                                               <a href="{{ prev }}" rel="prev">&lt; {% trans %}Previous keywords{% endtrans %}</a>
+                                       {% endif %}
+                                       {% if next is defined and next %}
+                                               <a href="{{ next }}" rel="next">{% trans %}Next keywords{% endtrans %} &gt;</a>
+                                       {% endif %}
+                               </nav>
+                       </footer>
+               {% endif %}
+       </section>
+{% endblock %}
similarity index 67%
rename from Resources/views/keyword/view.html.twig
rename to templates/keyword/view.html.twig
index 97c6c940b1e19205755fa12470224011290a0b6d..56a9a28045bead0de426341ba49183299b67384b 100644 (file)
@@ -1,9 +1,8 @@
 {% extends '@RapsysBlog/_base.html.twig' %}
 {% extends '@RapsysBlog/_base.html.twig' %}
-{% block title %}{% endblock %}
 {% block content %}
        <article id="content">
                <header>
 {% block content %}
        <article id="content">
                <header>
-                       <h1 id="title"><a href="{{ head.canonical }}">{{ title }}</a></h1>
+                       <h1 id="title"><a href="{{ canonical }}">{{ title.page }}</a></h1>
                        <p>{% trans with {'%date%': keyword.created|format_datetime('full', 'short')} %}Published the %date%{% endtrans %}{% if keyword.created != keyword.updated %}{% trans with {'%date%': keyword.updated|format_datetime('short', 'short')} %}, edited the %date%{% endtrans %}{% endif %}</p>
                        <p>{{ keyword.description }}</p>
                </header>
                        <p>{% trans with {'%date%': keyword.created|format_datetime('full', 'short')} %}Published the %date%{% endtrans %}{% if keyword.created != keyword.updated %}{% trans with {'%date%': keyword.updated|format_datetime('short', 'short')} %}, edited the %date%{% endtrans %}{% endif %}</p>
                        <p>{{ keyword.description }}</p>
                </header>
                                {% for article in keyword.articles %}
                                        <article>
                                                <header>
                                {% for article in keyword.articles %}
                                        <article>
                                                <header>
-                                                       <h2><a href="{{ path('rapsys_blog_article_view', {'id': article.id, 'slug': article.slug}) }}">{{ article.title }}</a></h2>
+                                                       <h2><a href="{{ path('rapsysblog_article_view', {'id': article.id, 'slug': article.slug}) }}">{{ article.title }}</a></h2>
                                                </header>
                                                <section>
                                                        <p>{{ article.description }}</p>
                                                        {% if article.keywords is defined and article.keywords %}
                                                                <nav>
                                                                        {% for keyword in article.keywords %}
                                                </header>
                                                <section>
                                                        <p>{{ article.description }}</p>
                                                        {% if article.keywords is defined and article.keywords %}
                                                                <nav>
                                                                        {% for keyword in article.keywords %}
-                                                                               <a href="{{ path('rapsys_blog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
+                                                                               <a href="{{ path('rapsysblog_keyword_view', {'id': keyword.id, 'slug': keyword.slug}) }}">{{ keyword.title }}</a>
                                                                        {% endfor %}
                                                                </nav>
                                                        {% endif %}
                                                </section>
                                                <footer>
                                                        <nav>
                                                                        {% endfor %}
                                                                </nav>
                                                        {% endif %}
                                                </section>
                                                <footer>
                                                        <nav>
-                                                               <a href="{{ path('rapsys_blog_article_view', {'id': article.id, 'slug': article.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
+                                                               <a href="{{ path('rapsysblog_article_view', {'id': article.id, 'slug': article.slug}) }}">{% trans %}Read more{% endtrans %}...</a>
                                                        </nav>
                                                </footer>
                                        </article>
                                                        </nav>
                                                </footer>
                                        </article>
diff --git a/templates/mail/_base.html.twig b/templates/mail/_base.html.twig
new file mode 100644 (file)
index 0000000..5b2811c
--- /dev/null
@@ -0,0 +1,38 @@
+{% extends '@RapsysBlog/_base.html.twig' %}
+{% block head %}
+       <meta charset="UTF-8" />
+       <meta name="viewport" content="width=device-width" />
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       {% if locale is defined and locale %}<meta http-equiv="Content-Language" content="{{ locale }}" />{% endif %}
+{% endblock %}
+{% block stylesheet %}
+       <style type="text/css">
+               body {background:white;color:#222}
+               a {text-decoration:none;color:#15c}
+               a:hover {text-decoration:underline}
+               a.link {word-break:break-all;font-size:1.5rem}
+               h1 {margin: .5rem;font-size: 2rem}
+               table {width: 100%;border-radius: .5rem}
+               table.header {border:.1rem solid #09c;text-align:center}
+               table.content {background:white;border:.1rem solid #09c;margin:.5rem 0}
+               table.footer {border:.1rem solid #09c;text-align:center;font-weight:bold}
+               table.footer summary:after {display:none}
+               table.footer summary::-webkit-details-marker {display:none}
+       </style>
+{% endblock %}
+{% block body %}
+       <table class="header">
+               <tr>
+                       {% if logo is defined and logo %}<td><a href="{{ url(root)|escape('html_attr') }}"><img src="{{ email.image(logo.png) }}" alt="{{ logo.alt|escape('html_attr') }}" /></a></td>{% endif %}
+                       <td><h1><a href="{{ url(root)|escape('html_attr') }}">{{ title.site }}</a></h1></td>
+               </tr>
+       </table>
+       {% block content %}{% endblock %}
+       {% if copy is defined and copy %}
+               <table class="footer">
+                       <tr>
+                               <td colspan="2">{{ copy.long }} - {{ copy.short }}</td>
+                       </tr>
+               </table>
+       {% endif %}
+{% endblock %}
similarity index 75%
rename from Resources/views/mail/recover.html.twig
rename to templates/mail/recover.html.twig
index 3e7a954291503b868db77fea4ec6d26a73f5c721..3d6902e154642f700aa88c7c6259871d26ce1d9d 100644 (file)
@@ -3,9 +3,9 @@
        <tbody>
                <tr>
                        <td colspan="2">
        <tbody>
                <tr>
                        <td colspan="2">
-                               <h2 title="{% trans %}Subject{% endtrans %}">{{ 'Welcome back to %head.site%'|trans({'%head.site%': head.site}) }}</h2>
+                               <h2 title="{% trans %}Subject{% endtrans %}">{{ 'Welcome back to %title.site%'|trans({'%title.site%': title.site}) }}</h2>
                                <h3>{% if recipient_name %}{{ 'Hi %recipient_name%,'|trans({'%recipient_name%': recipient_name}) }}{% else %}{% trans %}Hi,{% endtrans %}{% endif %}</h3>
                                <h3>{% if recipient_name %}{{ 'Hi %recipient_name%,'|trans({'%recipient_name%': recipient_name}) }}{% else %}{% trans %}Hi,{% endtrans %}{% endif %}</h3>
-                               <p>{{ 'Thanks so much for rejoining %head.site%, the blog program.'|trans({'%head.site%': head.site}) }}</p>
+                               <p>{{ 'Thanks so much for rejoining %title.site%, the blog program.'|trans({'%title.site%': title.site}) }}</p>
                                <p>{% trans %}To recover your account follow this link:{% endtrans %}</p>
                                <p><a href="{{ recover_url|escape('html_attr') }}" class="link">{{ recover_url }}</a></p>
                        </td>
                                <p>{% trans %}To recover your account follow this link:{% endtrans %}</p>
                                <p><a href="{{ recover_url|escape('html_attr') }}" class="link">{{ recover_url }}</a></p>
                        </td>
similarity index 64%
rename from Resources/views/mail/recover.text.twig
rename to templates/mail/recover.text.twig
index 76f33e0e57b1c07306a4c32a64a272c55c4b320d..d809f2ac03bbfa366101c3b789b603d419abedea 100644 (file)
@@ -2,7 +2,7 @@
 {% for i in range(1, subject|length) %}={% endfor %}
 
 
 {% for i in range(1, subject|length) %}={% endfor %}
 
 
-*{{ 'Thanks so much for rejoining %head.site%, the blog program.'|trans({'%head.site%': head.site}) }}*
+*{{ 'Thanks so much for rejoining %title.site%, the blog program.'|trans({'%title.site%': title.site}) }}*
 
 {% trans %}To recover your account follow this link:{% endtrans %}
 {{ recover_url }}
 
 {% trans %}To recover your account follow this link:{% endtrans %}
 {{ recover_url }}
similarity index 75%
rename from Resources/views/mail/register.html.twig
rename to templates/mail/register.html.twig
index bca60d05acb4cbeee38c6878ca24f9d9423350fb..9fa7f70c0675cacaca347766fef8891322913ad3 100644 (file)
@@ -3,9 +3,9 @@
        <tbody>
                <tr>
                        <td colspan="2">
        <tbody>
                <tr>
                        <td colspan="2">
-                               <h2 title="{% trans %}Subject{% endtrans %}">{{ 'Welcome to %head.site%'|trans({'%head.site%': head.site}) }}</h2>
+                               <h2 title="{% trans %}Subject{% endtrans %}">{{ 'Welcome to %title.site%'|trans({'%title.site%': title.site}) }}</h2>
                                <h3>{% if recipient_name %}{{ 'Hi %recipient_name%,'|trans({'%recipient_name%': recipient_name}) }}{% else %}{% trans %}Hi,{% endtrans %}{% endif %}</h3>
                                <h3>{% if recipient_name %}{{ 'Hi %recipient_name%,'|trans({'%recipient_name%': recipient_name}) }}{% else %}{% trans %}Hi,{% endtrans %}{% endif %}</h3>
-                               <p>{{ 'Thanks so much for joining %head.site%, the blog program.'|trans({'%head.site%': head.site}) }}</p>
+                               <p>{{ 'Thanks so much for joining %title.site%, the blog program.'|trans({'%title.site%': title.site}) }}</p>
                                <p>{% trans %}To finalize your account follow this link:{% endtrans %}</p>
                                <p><a href="{{ confirm_url|escape('html_attr') }}">{{ confirm_url }}</a></p>
                        </td>
                                <p>{% trans %}To finalize your account follow this link:{% endtrans %}</p>
                                <p><a href="{{ confirm_url|escape('html_attr') }}">{{ confirm_url }}</a></p>
                        </td>
similarity index 65%
rename from Resources/views/mail/register.text.twig
rename to templates/mail/register.text.twig
index 64fef8d258ca208febc1df131c5a6e17f09fbc14..0980e2170bc43efa6b86a99069831bd525ec8efc 100644 (file)
@@ -2,7 +2,7 @@
 {% for i in range(1, subject|length) %}={% endfor %}
 
 
 {% for i in range(1, subject|length) %}={% endfor %}
 
 
-*{{ 'Thanks so much for joining %head.site%, the blog program.'|trans({'%head.site%': head.site}) }}*
+*{{ 'Thanks so much for joining %title.site%, the blog program.'|trans({'%title.site%': title.site}) }}*
 
 {% trans %}To finalize your account follow this link:{% endtrans %}
 {{ confirm_url }}
 
 {% trans %}To finalize your account follow this link:{% endtrans %}
 {{ confirm_url }}
similarity index 80%
rename from Resources/views/user/index.html.twig
rename to templates/user/index.html.twig
index e3049b9e86429cfc4d94c1d10266d2e3691461c8..8fc35b454dff407b8a894761e34926d560dfc486 100644 (file)
@@ -2,7 +2,7 @@
 {% block content %}
        <section id="content">
                <header>
 {% block content %}
        <section id="content">
                <header>
-                       <h1><a href="{{ path('rapsys_blog_user') }}">{{ title }}</a></h1>
+                       <h1><a href="{{ path('rapsysblog_user') }}">{{ title.page }}</a></h1>
                </header>
                <section>
                        {% for user in users %}
                </header>
                <section>
                        {% for user in users %}
                                </article>
                        {% endfor %}
                </section>
                                </article>
                        {% endfor %}
                </section>
-               {% if head.prev is defined or head.next is defined %}
+               {% if ( prev is defined and prev ) or ( next is defined and next ) %}
                        <footer>
                                <nav class="pager">
                        <footer>
                                <nav class="pager">
-                                       {% if head.prev is defined %}
-                                               <a href="{{ head.prev }}" rel="prev">&lt; {% trans %}Previous users{% endtrans %}</a>
+                                       {% if prev is defined and prev %}
+                                               <a href="{{ prev }}" rel="prev">&lt; {% trans %}Previous users{% endtrans %}</a>
                                        {% endif %}
                                        {% endif %}
-                                       {% if head.next is defined %}
-                                               <a href="{{ head.next }}" rel="next">{% trans %}Next users{% endtrans %} &gt;</a>
+                                       {% if next is defined and next %}
+                                               <a href="{{ next }}" rel="next">{% trans %}Next users{% endtrans %} &gt;</a>
                                        {% endif %}
                                </nav>
                        </footer>
                                        {% endif %}
                                </nav>
                        </footer>
similarity index 90%
rename from Resources/translations/messages.en_gb.yml
rename to translations/messages.en_gb.yml
index 0eb60674c0e4b490b010431eefe48239722de7c9..5636efddaef15ce934aa4cedfba28e1f9fdcaaaa 100644 (file)
@@ -30,23 +30,16 @@ Welcome to raphaël's developer diary contact page: Welcome to raphaël's develo
 contact: contact
 Captcha is empty: Captcha is empty
 Subject: Subject
 contact: contact
 Captcha is empty: Captcha is empty
 Subject: Subject
-Name: Name
-Your name: Your name
-Mail: Mail
-Your mail: Your mail
-Message: Message
-Your message: Your message
-Send: Send
 Your message has been sent: Your message has been sent
 , edited the %date%: , edited the %date%
 Your message has been sent: Your message has been sent
 , edited the %date%: , edited the %date%
-Thanks so much for joining %head.site%, the blog program.: Thanks so much for joining %head.site%, the blog program.
+Thanks so much for joining %title.site%, the blog program.: Thanks so much for joining %title.site%, the blog program.
 'To finalize your account follow this link:': 'To finalize your account follow this link:'
 'To finalize your account follow this link:': 'To finalize your account follow this link:'
-Thanks so much for rejoining %head.site%, the blog program.: Thanks so much for rejoining %head.site%, the blog program.
+Thanks so much for rejoining %title.site%, the blog program.: Thanks so much for rejoining %title.site%, the blog program.
 'To recover your account follow this link': 'To recover your account follow this link:'
 'To recover your account follow this link': 'To recover your account follow this link:'
-Welcome back to %head.site%: Welcome back to %head.site%
+Welcome back to %title.site%: Welcome back to %title.site%
 Hi %recipient_name%,: Hi %recipient_name%,
 Hi,: Hi,
 Hi %recipient_name%,: Hi %recipient_name%,
 Hi,: Hi,
-Welcome to %head.site%: Welcome to %head.site%
+Welcome to %title.site%: Welcome to %title.site%
 Dev log: Dev log
 Recover: Recover
 Your account has been disabled: Your account has been disabled
 Dev log: Dev log
 Recover: Recover
 Your account has been disabled: Your account has been disabled
@@ -105,3 +98,7 @@ Forename: Forename
 Your forename: Your forename
 Surname: Surname
 Your surname: Your surname
 Your forename: Your forename
 Surname: Surname
 Your surname: Your surname
+Pseudonym: Pseudonym
+Your pseudonym: Your pseudonym
+Slug: Slug
+Your slug: Your slug
similarity index 91%
rename from Resources/translations/messages.fr_fr.yml
rename to translations/messages.fr_fr.yml
index 3513d17bb12b864a794ee016e795039e59167f1f..d45a138b728ed8e3af31c8bffbc3bf8981faea3a 100644 (file)
@@ -30,23 +30,16 @@ Welcome to raphaël's developer diary contact page: Bienvenue sur la page de con
 contact: contacter
 Captcha is empty: Le captcha est vide
 Subject: Sujet
 contact: contacter
 Captcha is empty: Le captcha est vide
 Subject: Sujet
-Name: Nom
-Your name: Votre nom
-Mail: Courriel
-Your mail: Votre courriel
-Message: Message
-Your message: Votre message
-Send: Envoyer
 Your message has been sent: Votre message a été envoyé
 , edited the %date%: , edité le %date%
 Your message has been sent: Votre message a été envoyé
 , edited the %date%: , edité le %date%
-Thanks so much for joining %head.site%, the blog program.: Merci d'avoir rejoint %head.site%, le programme de blog.
+Thanks so much for joining %title.site%, the blog program.: Merci d'avoir rejoint %title.site%, le programme de blog.
 'To finalize your account follow this link:': 'Pour finaliser votre compte suivez ce lien:'
 'To finalize your account follow this link:': 'Pour finaliser votre compte suivez ce lien:'
-Thanks so much for rejoining %head.site%, the blog program.: Merci d'avoir rejoint de nouveau %head.site%, le programme de blog.
+Thanks so much for rejoining %title.site%, the blog program.: Merci d'avoir rejoint de nouveau %title.site%, le programme de blog.
 'To recover your account follow this link': 'Pour récupérer votre compte suivez ce lien:'
 'To recover your account follow this link': 'Pour récupérer votre compte suivez ce lien:'
-Welcome back to %head.site%: Bienvenue à nouveau sur %head.site%
+Welcome back to %title.site%: Bienvenue à nouveau sur %title.site%
 Hi %recipient_name%,: Salut %recipient_name%,
 Hi,: Salut,
 Hi %recipient_name%,: Salut %recipient_name%,
 Hi,: Salut,
-Welcome to %head.site%: Bienvenue sur %head.site%
+Welcome to %title.site%: Bienvenue sur %title.site%
 Dev log: Journal de développement
 Recover: Récupérer
 Your account has been disabled: Votre compte a été désactivé
 Dev log: Journal de développement
 Recover: Récupérer
 Your account has been disabled: Votre compte a été désactivé
@@ -105,3 +98,7 @@ Forename: Prénom
 Your forename: Votre prénom
 Surname: Nom de famille
 Your surname: Votre nom de famille
 Your forename: Votre prénom
 Surname: Nom de famille
 Your surname: Votre nom de famille
+Pseudonym: Pseudonyme
+Your pseudonym: Votre pseudonyme
+Slug: Identificateur
+Your slug: Votre identificateur
diff --git a/translations/rapsyspack.en_gb.yml b/translations/rapsyspack.en_gb.yml
new file mode 100644 (file)
index 0000000..603d574
--- /dev/null
@@ -0,0 +1,8 @@
+Subject: Subject
+Name: Name
+Your name: Your name
+Mail: Mail
+Your mail: Your mail
+Message: Message
+Your message: Your message
+Send: Send
diff --git a/translations/rapsyspack.fr_fr.yml b/translations/rapsyspack.fr_fr.yml
new file mode 100644 (file)
index 0000000..d9e9730
--- /dev/null
@@ -0,0 +1,9 @@
+Subject: Sujet
+Name: Nom
+Your name: Votre nom
+Mail: Courriel
+Your mail: Votre courriel
+Message: Message
+Your message: Votre message
+Send: Envoyer
+Your message has been sent: Votre message a été envoyé