src/Controller/BlogController.php line 299

Open in your IDE?
  1. <?php
  2. /**
  3.  *  BlogController extends BaseController extends FrontendController 
  4.  * 
  5. */
  6. namespace App\Controller;
  7. use Pimcore\Controller\FrontendController;
  8. use Pimcore\Controller\Configuration\ResponseHeader;
  9. use Pimcore\Model\Document;
  10. use Pimcore\Model\Asset;
  11. use Pimcore\Tool\DeviceDetector;
  12. use Pimcore\Translation\Translator;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Carbon\Carbon;
  18. use App\Blog\Blog;
  19. use App\Captcha\Captcha;
  20. use App\Website\Search\Newsblog;
  21. class BlogController extends BaseController
  22. {
  23.     /**
  24.      *  Blog homepage action
  25.     */
  26.     public function homepageAction(
  27.         Request $request
  28.         Translator $translator
  29.     ) {
  30.         $device     \Pimcore\Tool\DeviceDetector::getInstance();
  31.         $blog       $this->document->getProperty('blog');
  32.         // $tools      = new Blog;
  33.         $categories null;
  34.         $articles   null;
  35.         $article    null;
  36.         
  37.         // return new Response( $blog->getCategoriesRoot() );
  38.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  39.         {
  40.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  41.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  42.             $categories ->setOrderKey("position");
  43.             $categories ->setOrder("asc");
  44.             
  45.             $articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
  46.             $articles ->setCondition("o_path LIKE '" $blog->getArticlesRoot() . "%' && isArchived <> '1'");
  47.             $articles ->setOrderKey('date');
  48.             $articles ->setOrder('desc');
  49.             $articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
  50.             
  51.             // set latest article for og data
  52.             if ( count($articles) )
  53.                 foreach ($articles as $a)
  54.                     if ( !$article )
  55.                         $article $a;
  56.         }
  57.         return $this->render('blog/homepage.html.twig', [
  58.             'languages'   => $this->getValidLanguages(),
  59.             'locale'      => $request->getLocale(),
  60.             'device'      => $device,
  61.             'blog'        => $blog,
  62.             'navigation'  => Blog::blogNavigation$categories$blog->getCategoriesRoot() ),           
  63.             'catgories'   => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories null,
  64.             'articles'    => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles null,
  65.             'article'     => $article
  66.         ]);
  67.     }
  68.     
  69.     
  70.     /**
  71.      *  Blog document action
  72.     */
  73.     public function documentAction(
  74.         Request $request
  75.         Translator $translator
  76.     ) {
  77.         $device \Pimcore\Tool\DeviceDetector::getInstance();        
  78.         $blog   $this->document->getProperty('blog');
  79.         
  80.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  81.         {
  82.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  83.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  84.             $categories ->setOrderKey("position");
  85.             $categories ->setOrder("asc");
  86.             
  87.             $articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
  88.             $articles ->setCondition("o_path LIKE '" $blog->getArticlesRoot() . "%' && isArchived <> '1'");
  89.             $articles ->setOrderKey('date');
  90.             $articles ->setOrder('desc');
  91.             $articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
  92.         }
  93.         return $this->render('blog/document.html.twig', [
  94.             'languages'   => $this->getValidLanguages(),
  95.             'locale'      => $request->getLocale(),
  96.             'device'      => $device,
  97.             'blog'        => $blog,
  98.             'navigation'  => Blog::blogNavigation$categories$blog->getCategoriesRoot() ),
  99.             'catgories'   => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories null,
  100.             'articles'    => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles null
  101.         ]);
  102.     }
  103.     
  104.     
  105.     /**
  106.      *  Blog category action
  107.     */
  108.     public function categoryAction(
  109.         Request $request
  110.         Translator $translator
  111.     ) {
  112.         $device         \Pimcore\Tool\DeviceDetector::getInstance();
  113.         $blog           $this->document->getProperty('blog');
  114.         $category       null;
  115.         $categoryId     = ($request->get('cid')) ? $request->get('cid') : '';
  116.         $categoryKey    = ($request->get('ckey')) ? $request->get('ckey') : '';
  117.         $findSubcats    "";
  118.         $article        null;
  119.         
  120.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  121.         {
  122.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  123.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  124.             $categories ->setOrderKey("position");
  125.             $categories ->setOrder("asc");
  126.                 
  127.             $category \Pimcore\Model\DataObject\BlogCategory::getById($categoryId);
  128.             if ( !$category && $categoryKey!='' )
  129.             {
  130.                 $list = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  131.                 $list ->setCondition("o_path LIKE '" $blog->getCategoriesRoot() . "%' && o_key = '" $categoryKey "'");
  132.                 foreach ($list as $c)
  133.                     $category $c;
  134.             }
  135.             
  136.             if ( $category instanceof \Pimcore\Model\DataObject\BlogCategory )
  137.             {
  138.                 $subCategories $category->getChildren();
  139.                 if ( count($subCategories) )
  140.                 {
  141.                     foreach ( $subCategories as $subcat )
  142.                         $findSubcats .= " or FIND_IN_SET('" $subcat->getId() . "', categories) ";
  143.                 }
  144.             }
  145.             $articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
  146.             $articles ->setCondition("o_path LIKE '" $blog->getArticlesRoot() . "%' && isArchived <> '1' && ( FIND_IN_SET('" $category->getId() . "', categories) " $findSubcats " )");
  147.             $articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
  148.             
  149.             // set latest article for og data
  150.             if ( count($articles) )
  151.                 foreach ($articles as $a)
  152.                     if ( !$article )
  153.                         $article $a;
  154.         }
  155.         
  156.         return $this->render('blog/category.html.twig', [
  157.             'languages'   => $this->getValidLanguages(),
  158.             'locale'      => $request->getLocale(),
  159.             'device'      => $device,
  160.             'blog'        => $blog,
  161.             'navigation'  => Blog::blogNavigation$categories$blog->getCategoriesRoot(), $category ),            
  162.             'catgories'   => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories null,
  163.             'category'    => ($category instanceof \Pimcore\Model\DataObject\BlogCategory) ? $category null,
  164.             'articles'    => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles null,
  165.             'article'     => $article
  166.         ]);
  167.     }
  168.     
  169.     
  170.     /**
  171.      *  Blog archive action
  172.     */
  173.     public function archiveAction(
  174.         Request $request
  175.         Translator $translator
  176.     ) {
  177.         $device \Pimcore\Tool\DeviceDetector::getInstance();        
  178.         $blog   $this->document->getProperty('blog');
  179.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  180.         {
  181.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  182.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  183.             $categories ->setOrderKey("position");
  184.             $categories ->setOrder("asc");
  185.             
  186.             $articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
  187.             // $articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%' && isArchived = '1'");
  188.             $articles ->setCondition("o_path LIKE '" $blog->getArticlesRoot() . "%'");
  189.             $articles ->setOrderKey('date');
  190.             $articles ->setOrder('desc');
  191.             // $articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
  192.         }
  193.         return $this->render('blog/archive.html.twig', [
  194.             'languages'   => $this->getValidLanguages(),
  195.             'locale'      => $request->getLocale(),
  196.             'device'      => $device,
  197.             'blog'        => $blog,
  198.             'navigation'  => Blog::blogNavigation$categories$blog->getCategoriesRoot() ),
  199.             'catgories'   => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories null,
  200.             'articles'    => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles null
  201.         ]);
  202.     }
  203.     
  204.     
  205.     /**
  206.      *  Blog archiveCategory action
  207.     */
  208.     public function archiveCategoryAction(
  209.         Request $request
  210.         Translator $translator
  211.     ) {
  212.         $device         \Pimcore\Tool\DeviceDetector::getInstance();
  213.         $blog           $this->document->getProperty('blog');
  214.         $category       null;
  215.         $categoryId     = ($request->get('cid')) ? $request->get('cid') : '';
  216.         $categoryKey    = ($request->get('ckey')) ? $request->get('ckey') : '';
  217.         $findSubcats    "";
  218.         $article        null;
  219.         
  220.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  221.         {
  222.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  223.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  224.             $categories ->setOrderKey("position");
  225.             $categories ->setOrder("asc");
  226.                 
  227.             $category \Pimcore\Model\DataObject\BlogCategory::getById($categoryId);
  228.             if ( !$category && $categoryKey!='' )
  229.             {
  230.                 $list = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  231.                 $list ->setCondition("o_path LIKE '" $blog->getCategoriesRoot() . "%' && o_key = '" $categoryKey "'");
  232.                 foreach ($list as $c)
  233.                     $category $c;
  234.             }
  235.             
  236.             if ( $category instanceof \Pimcore\Model\DataObject\BlogCategory )
  237.             {
  238.                 $subCategories $category->getChildren();
  239.                 if ( count($subCategories) )
  240.                 {
  241.                     foreach ( $subCategories as $subcat )
  242.                         $findSubcats .= " or FIND_IN_SET('" $subcat->getId() . "', categories) ";
  243.                 }
  244.             }
  245.             $articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
  246.             $articles ->setCondition("o_path LIKE '" $blog->getArticlesRoot() . "%' && isArchived = '1' && ( FIND_IN_SET('" $category->getId() . "', categories) " $findSubcats " )");
  247.             $articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
  248.             
  249.             // set latest article for og data
  250.             if ( count($articles) )
  251.                 foreach ($articles as $a)
  252.                     if ( !$article )
  253.                         $article $a;
  254.         }
  255.         
  256.         return $this->render('blog/archive.html.twig', [
  257.             'languages'   => $this->getValidLanguages(),
  258.             'locale'      => $request->getLocale(),
  259.             'device'      => $device,
  260.             'blog'        => $blog,
  261.             'navigation'  => Blog::blogNavigation$categories$blog->getCategoriesRoot(), $category ),            
  262.             'catgories'   => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories null,
  263.             'category'    => ($category instanceof \Pimcore\Model\DataObject\BlogCategory) ? $category null,
  264.             'articles'    => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles null,
  265.             'article'     => $article
  266.         ]);
  267.     }
  268.     
  269.     
  270.     /**
  271.      *  Blog article action
  272.     */
  273.     public function articleAction(
  274.         Request $request
  275.         Translator $translator
  276.     ) {
  277.         $device       \Pimcore\Tool\DeviceDetector::getInstance();
  278.         $blog         $this->document->getProperty('blog');
  279.         $articleYear  = ($request->get('year')) ? $request->get('year') : '';
  280.         $articleMonth = ($request->get('month')) ? $request->get('month') : '';
  281.         $articleDay   = ($request->get('day')) ? $request->get('day') : '';
  282.         $articleKey   = ($request->get('key')) ? $request->get('key') : '';
  283.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  284.         {
  285.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  286.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  287.             $categories ->setOrderKey("position");
  288.             $categories ->setOrder("asc");
  289.             
  290.             // $articlePath = $blog->getArticlesRoot() . '/' . $articleYear . '/' . $articleMonth . '/' . $articleDay . '/' . $articleKey;
  291.             $articlePath $blog->getArticlesRoot() . '/' $articleKey;  
  292.             echo 'P: ' $articlePath;                
  293.             $article \Pimcore\Model\DataObject\BlogArticle::getByPath($articlePath);            
  294.         }
  295.         return $this->render('blog/article.html.twig', [
  296.             'languages'   => $this->getValidLanguages(),
  297.             'locale'      => $request->getLocale(),
  298.             'device'      => $device,
  299.             'blog'        => $blog,
  300.             'navigation'  => Blog::blogNavigation$categories$blog->getCategoriesRoot() ),
  301.             'searchTerm'  => ($request->get('s')) ? $request->get('s') : '',
  302.             'article'     => $article,
  303.             'prevArticle' => Blog::getPrevArticle$article$blog->getArticlesRoot() ),
  304.             'nextArticle' => Blog::getNextArticle$article$blog->getArticlesRoot() )
  305.         ]);
  306.     }
  307.     
  308.     
  309.     /**
  310.      *  Blog search action
  311.     */
  312.     public function searchAction(
  313.         Request $request
  314.         Translator $translator
  315.     ) {
  316.         $device       \Pimcore\Tool\DeviceDetector::getInstance();      
  317.         $blog         $this->document->getProperty('blog'); 
  318.         $texts        = [];       
  319.         $searchCount  0;
  320.         $resultsNews  null;
  321.         $resultsDocs  null;
  322.         $resultsShop  null;
  323.         
  324.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  325.         {
  326.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  327.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  328.             $categories ->setOrderKey("position");
  329.             $categories ->setOrder("asc");
  330.         }
  331.         if ( $request->get('search') )
  332.         {
  333.             // search in documents
  334.             $docs = new \App\Website\Search\Document$request->get('search') );
  335.             $docs ->setKeywords$request->get('search') );
  336.             // search document.title and editables (type=wysiwyg,input) data field
  337.             $docs ->setDocumentFields( ["data"] );         
  338.             
  339.             if ( $resultsDocs $docs ->search'id' ) )
  340.                 foreach ( $resultsDocs as $r)
  341.                     $searchCount++;     
  342.                     
  343.             // search in newsblog
  344.             $news = new \App\Website\Search\Newsblog$request->get('search') );
  345.             $news ->setKeywords$request->get('search') );
  346.             $news ->setSearchRootPath$blog->getArticlesRoot() );
  347.             $news ->setDataObjectFields( ["headline","article","author"] );         
  348.             
  349.             if ( $resultsNews $news ->search() )
  350.                 foreach ( $resultsNews as $r)
  351.                     $searchCount++;
  352.         }        
  353.         return $this->render('blog/search.html.twig', [
  354.             'languages'         => $this->getValidLanguages(),
  355.             'locale'            => $request->getLocale(),
  356.             'device'            => $device,
  357.             'blog'              => $blog,
  358.             'navigation'        => Blog::blogNavigation$categories$blog->getCategoriesRoot() ),
  359.             'texts'             => $texts,
  360.             'search'            => $request->get('search'),
  361.             'searchCount'       => $searchCount,
  362.             'resultsDocuments'  => $resultsDocs,
  363.             'resultsNews'       => $resultsNews,            
  364.             'resultsShop'       => $resultsShop,
  365.             'timestamp'         => time()
  366.         ]);
  367.     }
  368.     
  369.     
  370.      /**
  371.      *  Document contact action
  372.     */
  373.     public function contactAction(
  374.         Request $request
  375.         Translator $translator
  376.     ) {
  377.         $device         \Pimcore\Tool\DeviceDetector::getInstance();
  378.         $blog           $this->document->getProperty('blog'); 
  379.         $message        = [];
  380.         $mailSubmitted  false;
  381.         $mailRendered   false;
  382.         if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
  383.         {
  384.             $categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
  385.             $categories ->setCondition("o_path = '" $blog->getCategoriesRoot() . "/'");
  386.             $categories ->setOrderKey("position");
  387.             $categories ->setOrder("asc");
  388.         }
  389.         
  390.         // get post form data
  391.         $post_vars  $request->request->all();
  392.         $formdata = [];
  393.         foreach ($post_vars as $key => $var) {
  394.             $formdata[$key] = $var;
  395.         }
  396.         
  397.         // init captcha
  398.         $captcha = new Captcha('de'); 
  399.         $captcha_validated false;       
  400.         // validate captcha
  401.         if ( $request->get('captcha_key') ) 
  402.         {
  403.             $captcha_validated $captcha->validateCaptcha($request->get('captcha_key'), $request->get('captcha_answer'));
  404.         }
  405.         
  406.         if ( isset( $formdata['contact_token'] ) 
  407.             && filter_var($formdata['contact_email'], FILTER_VALIDATE_EMAIL)
  408.             && $captcha_validated === true
  409.         ) {
  410.             $mail = new \Pimcore\Mail();
  411.             // $mail ->setCharset('utf-8');
  412.             $mail ->addToSITE_MAIL_DEFAULT );
  413.             $mail ->addTo$formdata['contact_email'] );
  414.             // $mail ->setFrom( SITE_MAIL_DEFAULT, $formdata['contact_firstname'].' '.$formdata['contact_lastname'] );
  415.             $mail ->addReplyTo$formdata['contact_email'] );
  416.             $mail ->setSubjectSITE_NAME ' - Neue Anfrage erhalten' );
  417.             $mail ->setDocumentDocument::getByPath'/email-templates/contact-form' ) );
  418.             $mail ->setParams$formdata );                         
  419.             $mail ->send(); 
  420.             
  421.             $mailSubmitted true;            
  422.             $mailRendered $mail->getBodyHtmlRendered();
  423.             
  424.             $message[] = '<h3><span class="lsf">check</span> Vielen Dank f&uuml;r Ihre Nachricht</h3>
  425.                           <p>Wir werden Ihr Anliegen schnellstm&ouml;glich bearbeiten.</p>';          
  426.         } 
  427.         else if ( isset( $formdata['contact_token'] ) 
  428.                   && $formdata['contact_token'
  429.         ) {
  430.             $message[] = '<h3 style="color: #c00;"><span class="lsf">trouble</span> Fehler</h3><p style="color: #c00;">Ihre Nachricht konnte nicht gesendet werden.</p>';
  431.             if ( !$captcha_validated )
  432.                 $message[] = '<p style="color: #c00;">Ung&uuml;ltige Captcha-Eingabe.</p>';   
  433.         }
  434.         
  435.         return $this->render('blog/contact.html.twig', [
  436.             'languages'     => $this->getValidLanguages(),
  437.             'locale'        => $request->getLocale(),
  438.             'device'        => $device,
  439.             'blog'          => $blog,
  440.             'navigation'    => Blog::blogNavigation$categories$blog->getCategoriesRoot() ),
  441.             'captcha'       => $captcha->getCaptcha(),
  442.             'formdata'      => $formdata,
  443.             'mailSubmitted' => $mailSubmitted,
  444.             'mailRendered'  => ($mailRendered) ? $mailRendered '',
  445.             'message'       => $message
  446.         ]);
  447.     }
  448.     
  449. }
  450. ?>