From 977865ede6d9e8c4d7253bf208d65b17b19322ed Mon Sep 17 00:00:00 2001 From: Michal Tomka Date: Thu, 21 Nov 2019 17:36:28 +0100 Subject: [PATCH 1/4] move contact form on FE to separate page --- config/shopsys-routing/routing_front_cs.yml | 4 ++ config/shopsys-routing/routing_front_en.yml | 4 ++ .../Front/ContactFormController.php | 53 +++++++------------ src/DataFixtures/Demo/ArticleDataFixture.php | 4 -- src/Migrations/Version20191121171000.php | 27 ++++++++++ src/Resources/scripts/frontend/contactForm.js | 30 ----------- .../Front/Content/ContactForm/index.html.twig | 46 ++++++++++++++++ templates/Front/Layout/footer.html.twig | 1 + .../Front/Layout/layoutWithPanel.html.twig | 4 -- 9 files changed, 102 insertions(+), 71 deletions(-) create mode 100644 src/Migrations/Version20191121171000.php delete mode 100644 src/Resources/scripts/frontend/contactForm.js create mode 100644 templates/Front/Content/ContactForm/index.html.twig diff --git a/config/shopsys-routing/routing_front_cs.yml b/config/shopsys-routing/routing_front_cs.yml index d72c744f67..444bb24823 100644 --- a/config/shopsys-routing/routing_front_cs.yml +++ b/config/shopsys-routing/routing_front_cs.yml @@ -2,6 +2,10 @@ front_cart: path: /kosik/ defaults: { _controller: App\Controller\Front\CartController:indexAction } +front_contact: + path: /kontakt/ + defaults: { _controller: App\Controller\Front\ContactFormController:indexAction } + front_customer_edit: path: /zakaznik/upravit-udaje/ defaults: { _controller: App\Controller\Front\CustomerController:editAction } diff --git a/config/shopsys-routing/routing_front_en.yml b/config/shopsys-routing/routing_front_en.yml index c958bce0d4..ef04f92dce 100644 --- a/config/shopsys-routing/routing_front_en.yml +++ b/config/shopsys-routing/routing_front_en.yml @@ -2,6 +2,10 @@ front_cart: path: /cart/ defaults: { _controller: App\Controller\Front\CartController:indexAction } +front_contact: + path: /contact/ + defaults: { _controller: App\Controller\Front\ContactFormController:indexAction } + front_customer_edit: path: /customer/edit/ defaults: { _controller: App\Controller\Front\CustomerController:editAction } diff --git a/src/Controller/Front/ContactFormController.php b/src/Controller/Front/ContactFormController.php index 9b28f877fc..547cfffaf2 100644 --- a/src/Controller/Front/ContactFormController.php +++ b/src/Controller/Front/ContactFormController.php @@ -8,8 +8,8 @@ use Shopsys\FrameworkBundle\Component\Domain\Domain; use Shopsys\FrameworkBundle\Model\ContactForm\ContactFormData; use Shopsys\FrameworkBundle\Model\ContactForm\ContactFormFacade; +use Shopsys\FrameworkBundle\Model\ContactForm\ContactFormSettingsFacade; use Shopsys\FrameworkBundle\Model\LegalConditions\LegalConditionsFacade; -use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; class ContactFormController extends FrontBaseController @@ -29,70 +29,57 @@ class ContactFormController extends FrontBaseController */ private $domain; + /** + * @var \Shopsys\FrameworkBundle\Model\ContactForm\ContactFormSettingsFacade + */ + private $contactFormSettingsFacade; + /** * @param \Shopsys\FrameworkBundle\Model\ContactForm\ContactFormFacade $contactFormFacade * @param \Shopsys\FrameworkBundle\Model\LegalConditions\LegalConditionsFacade $legalConditionsFacade * @param \Shopsys\FrameworkBundle\Component\Domain\Domain $domain + * @param \Shopsys\FrameworkBundle\Model\ContactForm\ContactFormSettingsFacade $contactFormSettingsFacade */ public function __construct( ContactFormFacade $contactFormFacade, LegalConditionsFacade $legalConditionsFacade, - Domain $domain + Domain $domain, + ContactFormSettingsFacade $contactFormSettingsFacade ) { $this->contactFormFacade = $contactFormFacade; $this->legalConditionsFacade = $legalConditionsFacade; $this->domain = $domain; + $this->contactFormSettingsFacade = $contactFormSettingsFacade; } /** * @param \Symfony\Component\HttpFoundation\Request $request */ - public function sendAction(Request $request) + public function indexAction(Request $request) { - $privacyPolicyArticle = $this->legalConditionsFacade->findPrivacyPolicy($this->domain->getId()); + $domainId = $this->domain->getId(); + $privacyPolicyArticle = $this->legalConditionsFacade->findPrivacyPolicy($domainId); - $form = $this->createForm(ContactFormType::class, new ContactFormData(), [ - 'action' => $this->generateUrl('front_contact_form_send'), - ]); + $form = $this->createForm(ContactFormType::class, new ContactFormData()); $form->handleRequest($request); - $message = ''; if ($form->isSubmitted() && $form->isValid()) { $contactFormData = $form->getData(); try { $this->contactFormFacade->sendMail($contactFormData); - $form = $this->createForm(ContactFormType::class, new ContactFormData(), [ - 'action' => $this->generateUrl('front_contact_form_send'), - ]); - $message = t('Thank you, your message has been sent.'); + $this->getFlashMessageSender()->addSuccessFlash(t('Thank you, your message has been sent.')); } catch (\Shopsys\FrameworkBundle\Model\Mail\Exception\MailException $ex) { - $message = t('Error occurred when sending email.'); + $this->getFlashMessageSender()->addErrorFlash(t('Error occurred when sending email.')); } - } - - $contactFormHtml = $this->renderView('Front/Content/ContactForm/contactForm.html.twig', [ - 'form' => $form->createView(), - 'privacyPolicyArticle' => $privacyPolicyArticle, - ]); - - return new JsonResponse([ - 'contactFormHtml' => $contactFormHtml, - 'message' => $message, - ]); - } - public function indexAction() - { - $privacyPolicyArticle = $this->legalConditionsFacade->findPrivacyPolicy($this->domain->getId()); - - $form = $this->createForm(ContactFormType::class, new ContactFormData(), [ - 'action' => $this->generateUrl('front_contact_form_send'), - ]); + return $this->redirect($this->generateUrl('front_contact')); + } - return $this->render('Front/Content/ContactForm/contactForm.html.twig', [ + return $this->render('Front/Content/ContactForm/index.html.twig', [ 'form' => $form->createView(), 'privacyPolicyArticle' => $privacyPolicyArticle, + 'mainText' => $this->contactFormSettingsFacade->getMainText($domainId), ]); } } diff --git a/src/DataFixtures/Demo/ArticleDataFixture.php b/src/DataFixtures/Demo/ArticleDataFixture.php index f5bf63a208..7200165925 100644 --- a/src/DataFixtures/Demo/ArticleDataFixture.php +++ b/src/DataFixtures/Demo/ArticleDataFixture.php @@ -98,10 +98,6 @@ protected function getDataForArticles(string $locale): array self::ATTRIBUTE_TEXT_KEY => t('Morbi posuere mauris dolor, quis accumsan dolor ullamcorper eget. Phasellus at elementum magna, et pretium neque. Praesent tristique lorem mi, eget varius quam aliquam eget. Vivamus ultrices interdum nisi, sed placerat lectus fermentum non. Phasellus ac quam vitae nisi aliquam vestibulum. Sed rhoncus tortor a arcu sagittis placerat. Nulla lectus nunc, ultrices ac faucibus sed, accumsan nec diam. Nam auctor neque quis tincidunt tempus. Nunc eget risus tristique, lobortis metus vitae, pellentesque leo. Vivamus placerat turpis ac dolor vehicula tincidunt. Sed venenatis, ante id ultrices convallis, lacus elit porttitor dolor, non porta risus ipsum ac justo. Integer id pretium quam, id placerat nulla.', [], 'dataFixtures', $locale), self::ATTRIBUTE_PLACEMENT_KEY => Article::PLACEMENT_NONE, self::REFERENCE_NAME_KEY => self::ARTICLE_COOKIES, - ], [ - self::ATTRIBUTE_NAME_KEY => t('Contact', [], 'dataFixtures', $locale), - self::ATTRIBUTE_TEXT_KEY => t('Donec at dolor mi. Nullam ornare, massa in cursus imperdiet, felis nisl auctor ante, vel aliquet tortor lacus sit amet ipsum. Proin ultrices euismod elementum. Integer sodales hendrerit tortor, vel semper turpis interdum eu. Phasellus quam tortor, feugiat vel condimentum vel, tristique et ipsum. Duis blandit lectus in odio cursus rutrum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam pulvinar massa at imperdiet venenatis. Maecenas convallis lobortis quam in fringilla. Mauris gravida turpis eget sapien imperdiet pulvinar. Nunc velit urna, fringilla nec est sit amet, accumsan varius nunc. Morbi sed tincidunt diam, sit amet laoreet nisl. Nulla tempus id lectus non lacinia.\n\nVestibulum interdum adipiscing iaculis. Nunc posuere pharetra velit. Nunc ac ante non massa scelerisque blandit sit amet vel velit. Integer in massa sed augue pulvinar malesuada. Pellentesque laoreet orci augue, in fermentum nisl feugiat ut. Nunc congue et nisi a interdum. Aenean mauris mi, interdum vel lacus et, placerat gravida augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed sagittis ipsum et consequat euismod. Praesent a ipsum dapibus, aliquet justo a, consectetur magna. Phasellus imperdiet tempor laoreet. Sed a accumsan lacus, accumsan faucibus dolor. Praesent euismod justo quis ipsum aliquam suscipit. Sed quis blandit urna.', [], 'dataFixtures', $locale), - self::ATTRIBUTE_PLACEMENT_KEY => Article::PLACEMENT_FOOTER, ], ]; } diff --git a/src/Migrations/Version20191121171000.php b/src/Migrations/Version20191121171000.php new file mode 100644 index 0000000000..ae77107a40 --- /dev/null +++ b/src/Migrations/Version20191121171000.php @@ -0,0 +1,27 @@ +sql('DELETE FROM friendly_urls WHERE slug=\'contact\''); + $this->sql('DELETE FROM articles WHERE name=\'Contact\' AND placement=\'footer\''); + } + + /** + * @param \Doctrine\DBAL\Schema\Schema $schema + */ + public function down(Schema $schema) + { + } +} diff --git a/src/Resources/scripts/frontend/contactForm.js b/src/Resources/scripts/frontend/contactForm.js deleted file mode 100644 index 31938d1ca6..0000000000 --- a/src/Resources/scripts/frontend/contactForm.js +++ /dev/null @@ -1,30 +0,0 @@ -(function ($) { - - Shopsys = window.Shopsys || {}; - Shopsys.contactForm = Shopsys.contactForm || {}; - - Shopsys.register.registerCallback(function ($container) { - $container.filterAllNodes('form[name="contact_form"]').bind('contactFormAjaxSubmit', Shopsys.contactForm.ajaxSubmit); - }); - - Shopsys.contactForm.ajaxSubmit = function (event) { - Shopsys.ajax({ - loaderElement: '#js-contact-form-container', - url: $(this).attr('action'), - method: 'post', - data: $(this).serialize(), - dataType: 'json', - success: onSuccess - }); - event.preventDefault(); - }; - - var onSuccess = function (data) { - $('#js-contact-form-container').html(data['contactFormHtml']); - Shopsys.register.registerNewContent($('#js-contact-form-container')); - Shopsys.window({ - content: data['message'] - }); - }; - -})(jQuery); diff --git a/templates/Front/Content/ContactForm/index.html.twig b/templates/Front/Content/ContactForm/index.html.twig new file mode 100644 index 0000000000..5439599a54 --- /dev/null +++ b/templates/Front/Content/ContactForm/index.html.twig @@ -0,0 +1,46 @@ +{% extends 'Front/Layout/layoutWithPanel.html.twig' %} + +{% block title %} + {{ 'Contact'|trans }} +{% endblock %} + +{% block main_content %} +
+ {{ mainText }} +
+ + {{ form_start(form) }} +
{{ 'Contact us'|trans }}
+ + {{ form_errors(form) }} + + {{ form_row(form.name, { label: 'Full name'|trans, rowClass: 'form-line-block', errors_attr: { class: 'form-error--line-block' } }) }} + {{ form_row(form.email, { label: 'Email'|trans, rowClass: 'form-line-block', errors_attr: { class: 'form-error--line-block' } }) }} + {{ form_row(form.message, { label: 'Message'|trans, rowClass: 'form-line-block', errors_attr: { class: 'form-error--line-block' } }) }} + {% if privacyPolicyArticle is not null %} + {% set articleUrl = url('front_article_detail', {'id': privacyPolicyArticle.id}) %} + {{ form_row( + form.privacyPolicy, + { + label: 'I agree with privacy policy.'|trans({'%url%': articleUrl}), + errors_attr: { class: 'form-error--choice' }, + rawLabel:true, + rowClass: 'form-line-block' + } + )}} + {% else %} + {{ form_row( + form.privacyPolicy, + { + label: 'I agree with privacy policy.'|trans, + errors_attr: { class: 'form-error--choice' }, + rowClass: 'form-line-block' + } + )}} + {% endif %} +
+ {{ form_widget(form.send, { label: 'Send'|trans }) }} +
+ + {{ form_end(form) }} +{% endblock %} diff --git a/templates/Front/Layout/footer.html.twig b/templates/Front/Layout/footer.html.twig index ddf0424e37..00b9a4b138 100644 --- a/templates/Front/Layout/footer.html.twig +++ b/templates/Front/Layout/footer.html.twig @@ -19,6 +19,7 @@ {{ getShopInfoPhoneNumber() }} {{ getShopInfoEmail() }} {{ render(controller('App\\Controller\\Front\\ArticleController:footerAction')) }} + {{ 'Contact'|trans }} diff --git a/templates/Front/Layout/layoutWithPanel.html.twig b/templates/Front/Layout/layoutWithPanel.html.twig index ef71f9bf82..ffc642cfce 100644 --- a/templates/Front/Layout/layoutWithPanel.html.twig +++ b/templates/Front/Layout/layoutWithPanel.html.twig @@ -21,10 +21,6 @@ {% block panel_content %}{% endblock %} -
- {{ render(controller('App\\Controller\\Front\\ContactFormController:indexAction')) }} -
- {{ render(controller('App\\Controller\\Front\\AdvertController:boxAction',{'positionName' : 'leftSidebar'})) }} From 53ed2b1ded4e7d7b1c7ff5309b429ff7417a2ab5 Mon Sep 17 00:00:00 2001 From: tomasgottvald Date: Mon, 25 Nov 2019 13:29:26 +0100 Subject: [PATCH 2/4] design - contact page with basic form layout --- .../Front/Content/ContactForm/index.html.twig | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/templates/Front/Content/ContactForm/index.html.twig b/templates/Front/Content/ContactForm/index.html.twig index 5439599a54..d0a5aa94f2 100644 --- a/templates/Front/Content/ContactForm/index.html.twig +++ b/templates/Front/Content/ContactForm/index.html.twig @@ -5,42 +5,42 @@ {% endblock %} {% block main_content %} -
- {{ mainText }} +
{{ 'Contact us'|trans }}
+ +
+ {{ mainText|raw }}
{{ form_start(form) }} -
{{ 'Contact us'|trans }}
{{ form_errors(form) }} - {{ form_row(form.name, { label: 'Full name'|trans, rowClass: 'form-line-block', errors_attr: { class: 'form-error--line-block' } }) }} - {{ form_row(form.email, { label: 'Email'|trans, rowClass: 'form-line-block', errors_attr: { class: 'form-error--line-block' } }) }} - {{ form_row(form.message, { label: 'Message'|trans, rowClass: 'form-line-block', errors_attr: { class: 'form-error--line-block' } }) }} - {% if privacyPolicyArticle is not null %} - {% set articleUrl = url('front_article_detail', {'id': privacyPolicyArticle.id}) %} - {{ form_row( - form.privacyPolicy, - { - label: 'I agree with privacy policy.'|trans({'%url%': articleUrl}), - errors_attr: { class: 'form-error--choice' }, - rawLabel:true, - rowClass: 'form-line-block' - } - )}} - {% else %} - {{ form_row( - form.privacyPolicy, - { - label: 'I agree with privacy policy.'|trans, - errors_attr: { class: 'form-error--choice' }, - rowClass: 'form-line-block' - } - )}} - {% endif %} -
- {{ form_widget(form.send, { label: 'Send'|trans }) }} -
+ {{ form_row(form.name, { label: 'Full name'|trans }) }} + {{ form_row(form.email, { label: 'Email'|trans }) }} + {{ form_row(form.message, { label: 'Message'|trans }) }} +
+
+
+
+ {{ form_widget(form.privacyPolicy, { attr: { class: "css-checkbox" }} )}} + + +
+
+
+ {{ form_widget(form.send, { label: 'Send'|trans }) }} {{ form_end(form) }} {% endblock %} From 9995c09f28e79dad5d1d8e8dff9371c51110fee2 Mon Sep 17 00:00:00 2001 From: Michal Tomka Date: Wed, 27 Nov 2019 13:56:36 +0100 Subject: [PATCH 3/4] dump translation for the contact page --- translations/dataFixtures.cs.po | 3 --- translations/dataFixtures.en.po | 3 --- translations/messages.cs.po | 3 +++ translations/messages.en.po | 4 +++- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/translations/dataFixtures.cs.po b/translations/dataFixtures.cs.po index dc58bacc23..18727cbdaa 100644 --- a/translations/dataFixtures.cs.po +++ b/translations/dataFixtures.cs.po @@ -562,9 +562,6 @@ msgstr "Konektory" msgid "Construction" msgstr "Konstrukce" -msgid "Contact" -msgstr "Kontakty" - msgid "Coupon valued to 100 Czech crowns. You can cash it at any exchange office" msgstr "Poukázka na 100 Kč. Můžete ji využít v libovolné směnárně." diff --git a/translations/dataFixtures.en.po b/translations/dataFixtures.en.po index d7d6457865..f1b5291df4 100644 --- a/translations/dataFixtures.en.po +++ b/translations/dataFixtures.en.po @@ -562,9 +562,6 @@ msgstr "" msgid "Construction" msgstr "" -msgid "Contact" -msgstr "" - msgid "Coupon valued to 100 Czech crowns. You can cash it at any exchange office" msgstr "" diff --git a/translations/messages.cs.po b/translations/messages.cs.po index 9f5658b71d..fa1642e7d3 100644 --- a/translations/messages.cs.po +++ b/translations/messages.cs.po @@ -106,6 +106,9 @@ msgstr "Název firmy" msgid "Company number" msgstr "IČ" +msgid "Contact" +msgstr "Kontakt" + msgid "Contact us" msgstr "Napište nám" diff --git a/translations/messages.en.po b/translations/messages.en.po index 5a1bcdc331..16905eef96 100644 --- a/translations/messages.en.po +++ b/translations/messages.en.po @@ -106,6 +106,9 @@ msgstr "" msgid "Company number" msgstr "" +msgid "Contact" +msgstr "" + msgid "Contact us" msgstr "" @@ -675,4 +678,3 @@ msgstr "" msgid "{1}Load next %loadNextCount% product|[2,Inf]Load next %loadNextCount% products" msgstr "" - From 486792ab73dfbe4b22b4898bcaa3676f105271be Mon Sep 17 00:00:00 2001 From: Michal Tomka Date: Wed, 27 Nov 2019 14:02:50 +0100 Subject: [PATCH 4/4] dump translation data fixtures --- translations/dataFixtures.cs.po | 3 --- translations/dataFixtures.en.po | 3 --- 2 files changed, 6 deletions(-) diff --git a/translations/dataFixtures.cs.po b/translations/dataFixtures.cs.po index 18727cbdaa..81ce9c78f8 100644 --- a/translations/dataFixtures.cs.po +++ b/translations/dataFixtures.cs.po @@ -691,9 +691,6 @@ msgstr "Typ displeje" msgid "Done" msgstr "Vyřízena" -msgid "Donec at dolor mi. Nullam ornare, massa in cursus imperdiet, felis nisl auctor ante, vel aliquet tortor lacus sit amet ipsum. Proin ultrices euismod elementum. Integer sodales hendrerit tortor, vel semper turpis interdum eu. Phasellus quam tortor, feugiat vel condimentum vel, tristique et ipsum. Duis blandit lectus in odio cursus rutrum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam pulvinar massa at imperdiet venenatis. Maecenas convallis lobortis quam in fringilla. Mauris gravida turpis eget sapien imperdiet pulvinar. Nunc velit urna, fringilla nec est sit amet, accumsan varius nunc. Morbi sed tincidunt diam, sit amet laoreet nisl. Nulla tempus id lectus non lacinia.\\n\\nVestibulum interdum adipiscing iaculis. Nunc posuere pharetra velit. Nunc ac ante non massa scelerisque blandit sit amet vel velit. Integer in massa sed augue pulvinar malesuada. Pellentesque laoreet orci augue, in fermentum nisl feugiat ut. Nunc congue et nisi a interdum. Aenean mauris mi, interdum vel lacus et, placerat gravida augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed sagittis ipsum et consequat euismod. Praesent a ipsum dapibus, aliquet justo a, consectetur magna. Phasellus imperdiet tempor laoreet. Sed a accumsan lacus, accumsan faucibus dolor. Praesent euismod justo quis ipsum aliquam suscipit. Sed quis blandit urna." -msgstr "Donec at dolor mi. Nullam ornare, massa in cursus imperdiet, felis nisl auctor ante, vel aliquet tortor lacus sit amet ipsum. Proin ultrices euismod elementum. Integer sodales hendrerit tortor, vel semper turpis interdum eu. Phasellus quam tortor, feugiat vel condimentum vel, tristique et ipsum. Duis blandit lectus in odio cursus rutrum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam pulvinar massa at imperdiet venenatis. Maecenas convallis lobortis quam in fringilla. Mauris gravida turpis eget sapien imperdiet pulvinar. Nunc velit urna, fringilla nec est sit amet, accumsan varius nunc. Morbi sed tincidunt diam, sit amet laoreet nisl. Nulla tempus id lectus non lacinia.\\n\\nVestibulum interdum adipiscing iaculis. Nunc posuere pharetra velit. Nunc ac ante non massa scelerisque blandit sit amet vel velit. Integer in massa sed augue pulvinar malesuada. Pellentesque laoreet orci augue, in fermentum nisl feugiat ut. Nunc congue et nisi a interdum. Aenean mauris mi, interdum vel lacus et, placerat gravida augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed sagittis ipsum et consequat euismod. Praesent a ipsum dapibus, aliquet justo a, consectetur magna. Phasellus imperdiet tempor laoreet. Sed a accumsan lacus, accumsan faucibus dolor. Praesent euismod justo quis ipsum aliquam suscipit. Sed quis blandit urna." - msgid "DéLonghi ECAM 44.660.B. Start the morning with your favorite drink with the DeLonghi ECAM 44.660.B Eletta automatic coffee maker" msgstr "DeLonghi ECAM 44.660 B Luxusní plnoautomatický kávovar Eletta Plus v černé barvě s nerezovými částmi,1450 W" diff --git a/translations/dataFixtures.en.po b/translations/dataFixtures.en.po index f1b5291df4..a72e65f714 100644 --- a/translations/dataFixtures.en.po +++ b/translations/dataFixtures.en.po @@ -691,9 +691,6 @@ msgstr "" msgid "Done" msgstr "" -msgid "Donec at dolor mi. Nullam ornare, massa in cursus imperdiet, felis nisl auctor ante, vel aliquet tortor lacus sit amet ipsum. Proin ultrices euismod elementum. Integer sodales hendrerit tortor, vel semper turpis interdum eu. Phasellus quam tortor, feugiat vel condimentum vel, tristique et ipsum. Duis blandit lectus in odio cursus rutrum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam pulvinar massa at imperdiet venenatis. Maecenas convallis lobortis quam in fringilla. Mauris gravida turpis eget sapien imperdiet pulvinar. Nunc velit urna, fringilla nec est sit amet, accumsan varius nunc. Morbi sed tincidunt diam, sit amet laoreet nisl. Nulla tempus id lectus non lacinia.\\n\\nVestibulum interdum adipiscing iaculis. Nunc posuere pharetra velit. Nunc ac ante non massa scelerisque blandit sit amet vel velit. Integer in massa sed augue pulvinar malesuada. Pellentesque laoreet orci augue, in fermentum nisl feugiat ut. Nunc congue et nisi a interdum. Aenean mauris mi, interdum vel lacus et, placerat gravida augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed sagittis ipsum et consequat euismod. Praesent a ipsum dapibus, aliquet justo a, consectetur magna. Phasellus imperdiet tempor laoreet. Sed a accumsan lacus, accumsan faucibus dolor. Praesent euismod justo quis ipsum aliquam suscipit. Sed quis blandit urna." -msgstr "" - msgid "DéLonghi ECAM 44.660.B. Start the morning with your favorite drink with the DeLonghi ECAM 44.660.B Eletta automatic coffee maker" msgstr ""