src/Controller/RCS/DefaultController.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\Controller\RCS;
  3. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as Controller;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use App\Utils\ModuleHelper;
  9. use App\Utils\MediaHelper;
  10. use App\Utils\ContentHelper;
  11. use App\Utils\ContentMeta;
  12. use App\Utils\DomainBlacklistHelper;
  13. use App\Entity\Content;
  14. # use App\Twig\RCSExtension;
  15. class DefaultController extends Controller
  16. {
  17.     protected $moduleHelper;
  18.     protected $contentHelper;
  19.     protected $mediaHelper;
  20.     protected $blacklistHelper;
  21.     protected $request;
  22.     protected $user;
  23.     
  24.     public function __construct (
  25.         RequestStack $reqStack,
  26.         ModuleHelper $moduleHelper,
  27.         ContentHelper $contentHelper,
  28.         MediaHelper $mediaHelper,
  29.         DomainBlacklistHelper $blacklistHelper,
  30.         TokenStorageInterface $tokenStore
  31.     ) {
  32.         $this->request $reqStack->getCurrentRequest();
  33.         $this->moduleHelper $moduleHelper;
  34.         $this->contentHelper $contentHelper;
  35.         $this->mediaHelper $mediaHelper;
  36.         $this->blacklistHelper $blacklistHelper;
  37.         $this->user $tokenStore->getToken()->getUser();
  38.         if ($this->user === "anon.") {
  39.             $this->user null;
  40.         }
  41.     }
  42.     
  43.     /**
  44.      * Overwrite the render method so each controller does not have to
  45.      * worry about pull module / sidebar / or ad data.
  46.      * 
  47.      * Overriding render will be removed from the next major update ... 
  48.      * possibly: http://symfony.com/doc/current/event_dispatcher/before_after_filters.html
  49.      * 
  50.      * OR make another render function that calls it - look into renderView() vs render()
  51.      * 
  52.      */
  53.     public function defaultRender (
  54.         string $view ""
  55.         array $params = [],
  56.         Response $response NULL
  57.     ): Response {
  58.         
  59.         //Blocking links from certain sites
  60.         $user_refer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "";
  61.         if ($user_refer && !(strpos($user_refer'rooferscoffeeshop.com') !== false) && !(strpos($user_refer'askaroofer.com') !== false)) { //referred from an external sites
  62.             if($this->blacklistHelper->isBlacklisted($user_refer)) { //blacklisted
  63.                 //$view = "errors/404.html.twig";
  64.                 $view "content/content.html.twig";
  65.                 $params = [
  66.                     "content" => $this->contentHelper->getPageBySlug("free-sample-redirect")
  67.                 ];
  68.             }
  69.         }
  70.         
  71.         if($view != "content/dashboard.html.twig" && $view != "test.html.twig") { // Add any excluded pages here. The dashboard, for example, should not count for impressions.
  72.             
  73.             $bot preg_match('/bot|crawl|curl|dataprovider|search|get|spider|find|java|majesticsEO|google|yahoo|teoma|contaxe|yandex|libwww-perl|sleuth|audit|robot|Node|seo|broken|buck|Anthill|facebookexternalhit/i'$_SERVER['HTTP_USER_AGENT']);
  74.             
  75.             array_walk_recursive($params, function($value$key) use ($bot){
  76.                 if(is_a($valueContent::class)) {
  77.                     if($bot) {
  78.                         $this->contentHelper->addImpression($this->request$value);
  79.                     }
  80.                     else {
  81.                         $this->contentHelper->enqueueImpression($this->request$value);
  82.                     }
  83.                 }
  84.             });
  85.             
  86.         }
  87.         
  88.         $params["meta"] = array_merge([
  89.             "root" => $this->request->getPathInfo(),
  90.             "title" => "Roofing Forum, Classifieds, Galleries and More!",
  91.             "robots" => "index, follow",
  92.             "canonical" => "",
  93.             "breadcrumbs" => array (),
  94.         ], $params["meta"] ?? []);
  95.         
  96.         if (empty($params["meta"]["breadcrumbs"])) {
  97.             // try to create from content object
  98.             if (isset($params["content"])) {
  99.                 $cnt $params["content"];
  100.                 switch ($cnt->getType()) {
  101.                     // page
  102.                     case 1:
  103.                         $params["meta"]["breadcrumbs"][] = [
  104.                             "href" => "/{$cnt->getSlug()}",
  105.                             "title" => $cnt->getTitle(),
  106.                         ];
  107.                         break;
  108.                     // post
  109.                     case 2:
  110.                         $tmp = [];
  111.                         $cat $cnt->getCategory();
  112.                         // walk up parent elements
  113.                         
  114.                         while ($cat) {
  115.                             $tmp[] = [
  116.                                 "slug" => $cat->getSlug(),
  117.                                 "title" => $cat->getTitle(),
  118.                             ];
  119.                             $cat $cat->getPrnt();
  120.                         }
  121.                         
  122.                         $tmp array_reverse($tmp);
  123.                         
  124.                         $slug "category/";
  125.                         foreach ($tmp as $row) {
  126.                             $params["meta"]["breadcrumbs"][] = [
  127.                                 "href" => "/{$slug}{$row["slug"]}",
  128.                                 "title" => $row["title"],
  129.                             ];
  130.                             $slug .= "{$row["slug"]}/";
  131.                         }
  132.                         
  133.                         $params["meta"]["breadcrumbs"][] = [
  134.                             "href" => "",
  135.                             "title" => $cnt->getTitle(),
  136.                         ];
  137.                         break;
  138.                 }
  139.             }
  140.             
  141.             if (isset($params["product"])) {
  142.                 $prod $params["product"];
  143.                 
  144.                 $tmp = [];
  145.                 $cat $prod->getCategory();
  146.                 // walk up parent elements
  147.                 
  148.                 while ($cat) {
  149.                     $tmp[] = [
  150.                         "slug" => $cat->getSlug(),
  151.                         "title" => $cat->getTitle(),
  152.                     ];
  153.                     $cat $cat->getPrnt();
  154.                 }
  155.                 
  156.                 $tmp array_reverse($tmp);
  157.                 
  158.                 $params["meta"]["breadcrumbs"][] = [
  159.                     "href" => "/gift-shop",
  160.                     "title" => "RCS Gift Shop",
  161.                 ];
  162.                 
  163.                 foreach ($tmp as $row) {
  164.                     $params["meta"]["breadcrumbs"][] = [
  165.                         "href" => "/gift-shop/1/{$row["slug"]}",
  166.                         "title" => $row["title"],
  167.                     ];
  168.                 }
  169.                 
  170.                 $params["meta"]["breadcrumbs"][] = [
  171.                     "href" => "",
  172.                     "title" => $prod->getTitle(),
  173.                 ];
  174.             }
  175.         }
  176.                 
  177.         // store the params globally for twig...
  178.         ContentMeta::$meta $params["meta"];
  179.         
  180.         
  181.         $params["sidebars"] = $this->moduleHelper->getSidebarModulesBySlug (
  182.             $params["meta"]["root"]
  183.         );
  184.         
  185.         $params["menu_ads"] = $this->moduleHelper->getMenuAds(1);
  186.         
  187.         // check if we are showing a bottom advertisement 
  188.         // - better naming ... :/
  189.         
  190.         if (ContentMeta::$meta["root"] != "/" && //home
  191.             ContentMeta::$meta["root"] != "home" && //home
  192.             !(strpos(ContentMeta::$meta["root"], "/404") !== false) &&
  193.             !(strpos(ContentMeta::$meta["root"], "/account") !== false) &&
  194.             !(strpos(ContentMeta::$meta["root"], "/directory/") !== false && strpos(ContentMeta::$meta["root"], "/posts") == false//directory pages
  195.         ) {
  196.             $params["bottom"] = [
  197.                 [
  198.                     "type" => "mediagroup",
  199.                     "position" => "ad-bottom",
  200.                 ]
  201.             ];
  202.         }
  203.         else {
  204.             $coffeeCastAd $this->mediaHelper->getFirstItemByPosition("ad-video-coffee-cast");
  205.             $params["ad_video_coffee_cast"] = $coffeeCastAd;
  206.         }
  207.         
  208.         // header ads
  209.         try {
  210.             /*
  211.             $headermenus = $this->menuHelper->getMenusByPosition("header-news");
  212.             if(count($headermenus) > 0) {
  213.                 $headermenu = $headermenus[0];
  214.             }
  215.             $headermenuitem = $headermenu->getMenuItems()->first();
  216.             $headerlink = $headermenuitem->getLink();
  217.             $params["header_news_link"] = $headerlink;
  218.             */
  219.             
  220.             $countdownAd $this->mediaHelper->getFirstItemByPosition("header-countdown");
  221.             $params["countdown_ad"] = $countdownAd;
  222.             
  223.             $bottomHeaderAd $this->mediaHelper->getFirstItemByPosition("header-bottom");
  224.             $params["bottom_header_ad"] = $bottomHeaderAd;
  225.             
  226.             $bottomBottomHeaderAd $this->mediaHelper->getFirstItemByPosition("header-bottom-bottom");
  227.             $params["bottom_bottom_header_ad"] = $bottomBottomHeaderAd;
  228.             
  229.             
  230.         } catch (\Exception $e) {
  231.             //no header_news_link
  232.         }
  233.         
  234.         // add the user object to all requests
  235.         $params["user"] = $this->user;
  236.         $params["site_code"] = 1//RCS
  237.         //$resp = parent::render($view, $params, $response);
  238.         //return $resp;
  239.         
  240.         return $this->render($view$params$response);
  241.         
  242.     }
  243.     
  244. }