src/Controller/Master/DefaultController.php line 294

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Master;
  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\Entity\SiteConfig;
  9. use App\Entity\Content;
  10. use App\Utils\ModuleHelper;
  11. use App\Utils\MediaHelper;
  12. use App\Utils\ContentHelper;
  13. use App\Utils\ContentMeta;
  14. use App\Utils\DomainBlacklistHelper;
  15. # use App\Twig\RCSExtension;
  16. class DefaultController extends Controller
  17. {
  18.     protected $moduleHelper;
  19.     protected $contentHelper;
  20.     protected $mediaHelper;
  21.     protected $blacklistHelper;
  22.     protected $request;
  23.     protected $user;
  24.     
  25.     //TODO: Update how we're doing this (site config entity?)
  26.     protected $site_code;
  27.     
  28.     public function __construct (
  29.         RequestStack $reqStack,
  30.         ModuleHelper $moduleHelper,
  31.         ContentHelper $contentHelper,
  32.         MediaHelper $mediaHelper,
  33.         DomainBlacklistHelper $blacklistHelper,
  34.         TokenStorageInterface $tokenStore
  35.     ) {
  36.         $this->request $reqStack->getCurrentRequest();
  37.         $this->moduleHelper $moduleHelper;
  38.         $this->contentHelper $contentHelper;
  39.         $this->mediaHelper $mediaHelper;
  40.         $this->blacklistHelper $blacklistHelper;
  41.         $this->user $tokenStore->getToken()->getUser();
  42.         if ($this->user === "anon.") {
  43.             $this->user null;
  44.         }
  45.         $session $this->request->getSession();
  46.         if($session) {
  47.             $this->site_code $session->get("site");
  48.         }
  49.     }
  50.     
  51.     
  52.     /**
  53.      * Overwrite the render method so each controller does not have to
  54.      * worry about pull module / sidebar / or ad data.
  55.      * 
  56.      * Overriding render will be removed from the next major update ... 
  57.      * possibly: http://symfony.com/doc/current/event_dispatcher/before_after_filters.html
  58.      * 
  59.      * OR make another render function that calls it - look into renderView() vs render()
  60.      * 
  61.      */
  62.     public function defaultRender (
  63.         string $view ""
  64.         array $params = [],
  65.         Response $response NULL
  66.     ): Response {
  67.         
  68.         //Blocking links from certain sites
  69.         $user_refer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "";
  70.         if ($user_refer && !(strpos($user_refer'rooferscoffeeshop.com') !== false) && !(strpos($user_refer'askaroofer.com') !== false)) { //referred from an external sites
  71.             if($this->blacklistHelper->isBlacklisted($user_refer)) { //blacklisted
  72.                 //$view = "errors/404.html.twig";
  73.                 $view "content/content.html.twig";
  74.                 $params = [
  75.                     "content" => $this->contentHelper->getPageBySlug("free-sample-redirect")
  76.                 ];
  77.             }
  78.         }
  79.         
  80.         if($view != "content/dashboard.html.twig" && $view != "test.html.twig") { // Add any excluded pages here. The dashboard, for example, should not count for impressions.
  81.             
  82.             $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']);
  83.             
  84.             array_walk_recursive($params, function($value$key) use ($bot){
  85.                 if(is_a($valueContent::class)) {
  86.                     if($bot) {
  87.                         $this->contentHelper->addImpression($this->request$value);
  88.                     }
  89.                     else {
  90.                         $this->contentHelper->enqueueImpression($this->request$value);
  91.                     }
  92.                 }
  93.             });
  94.             
  95.         }
  96.         
  97.         $params["meta"] = array_merge([
  98.             "root" => $this->request->getPathInfo(),
  99.             "title" => SiteConfig::getConfig($this->site_code"meta_title"),
  100.             "robots" => "index, follow",
  101.             "canonical" => "",
  102.             "breadcrumbs" => array (),
  103.         ], $params["meta"] ?? []);
  104.         
  105.         if (empty($params["meta"]["breadcrumbs"])) {
  106.             // try to create from content object
  107.             if (isset($params["content"])) {
  108.                 $cnt $params["content"];
  109.                 switch ($cnt->getType()) {
  110.                     // page
  111.                     case 1:
  112.                         $params["meta"]["breadcrumbs"][] = [
  113.                             "href" => "/{$cnt->getSlug()}",
  114.                             "title" => $cnt->getTitle(),
  115.                         ];
  116.                         break;
  117.                     // post
  118.                     case 2:
  119.                         $tmp = [];
  120.                         $cat $cnt->getCategory();
  121.                         // walk up parent elements
  122.                         
  123.                         while ($cat) {
  124.                             $tmp[] = [
  125.                                 "slug" => $cat->getSlug(),
  126.                                 "title" => $cat->getTitle(),
  127.                             ];
  128.                             $cat $cat->getPrnt();
  129.                         }
  130.                         
  131.                         $tmp array_reverse($tmp);
  132.                         
  133.                         $slug "category/";
  134.                         foreach ($tmp as $row) {
  135.                             $params["meta"]["breadcrumbs"][] = [
  136.                                 "href" => "/{$slug}{$row["slug"]}",
  137.                                 "title" => $row["title"],
  138.                             ];
  139.                             $slug .= "{$row["slug"]}/";
  140.                         }
  141.                         
  142.                         $params["meta"]["breadcrumbs"][] = [
  143.                             "href" => "",
  144.                             "title" => $cnt->getTitle(),
  145.                         ];
  146.                         break;
  147.                 }
  148.             }
  149.             
  150.             if (isset($params["product"])) {
  151.                 $prod $params["product"];
  152.                 
  153.                 $tmp = [];
  154.                 $cat $prod->getCategory();
  155.                 // walk up parent elements
  156.                 
  157.                 while ($cat) {
  158.                     $tmp[] = [
  159.                         "slug" => $cat->getSlug(),
  160.                         "title" => $cat->getTitle(),
  161.                     ];
  162.                     $cat $cat->getPrnt();
  163.                 }
  164.                 
  165.                 $tmp array_reverse($tmp);
  166.                 
  167.                 $params["meta"]["breadcrumbs"][] = [
  168.                     "href" => "/gift-shop",
  169.                     "title" => "RCS Gift Shop",
  170.                 ];
  171.                 
  172.                 foreach ($tmp as $row) {
  173.                     $params["meta"]["breadcrumbs"][] = [
  174.                         "href" => "/gift-shop/1/{$row["slug"]}",
  175.                         "title" => $row["title"],
  176.                     ];
  177.                 }
  178.                 
  179.                 $params["meta"]["breadcrumbs"][] = [
  180.                     "href" => "",
  181.                     "title" => $prod->getTitle(),
  182.                 ];
  183.             }
  184.         }
  185.                 
  186.         // store the params globally for twig...
  187.         ContentMeta::$meta $params["meta"];
  188.         
  189.         //TODO: clean up
  190.         
  191.         $bottom_ad_position "";
  192.         
  193.         switch($this->site_code) {
  194.             case Content::SITE_RCS:
  195.                 
  196.                 $params["sidebars"] = $this->moduleHelper->getSidebarModulesBySlug (
  197.                     $params["meta"]["root"]
  198.                 );
  199.                 $params["menu_ads"] = $this->moduleHelper->getMenuAds($this->site_code);
  200.                 //$bottom_ad_position = "ad-bottom";
  201.                 
  202.                 break;
  203.             case Content::SITE_AAR:
  204.                 
  205.                 $params["sidebars"] = $this->moduleHelper->getAARSidebarModulesBySlug (
  206.                     $params["meta"]["root"]
  207.                 );
  208.                 //$bottom_ad_position = "aar-ad-bottom";
  209.                 
  210.                 break;
  211.             
  212.             case Content::SITE_MCS:
  213.                 $params["sidebars"] = $this->moduleHelper->getMCSSidebarModulesBySlug (
  214.                     $params["meta"]["root"]
  215.                 );
  216.                 $params["menu_ads"] = $this->moduleHelper->getMenuAds($this->site_code);
  217.                 
  218.                 break;
  219.                 
  220.             case Content::SITE_CCS:
  221.                 $params["sidebars"] = $this->moduleHelper->getCCSSidebarModulesBySlug (
  222.                     $params["meta"]["root"]
  223.                 );
  224.                 $params["menu_ads"] = $this->moduleHelper->getMenuAds($this->site_code);
  225.                 
  226.                 break;
  227.             
  228.             default:
  229.                 
  230.                 $params["sidebars"] = $this->moduleHelper->getOtherSidebarModulesBySlug (
  231.                     $params["meta"]["root"]
  232.                 );
  233.                 
  234.                 break;
  235.             
  236.         }
  237.         $bottom_ad_position "ad-bottom";
  238.         
  239.         
  240.         
  241.         
  242.         // check if we are showing a bottom advertisement 
  243.         // - better naming ... :/
  244.         
  245.         if (ContentMeta::$meta["root"] != "/" && //home
  246.             ContentMeta::$meta["root"] != "home" && //home
  247.             !(strpos(ContentMeta::$meta["root"], "/404") !== false) &&
  248.             !(strpos(ContentMeta::$meta["root"], "/account") !== false) &&
  249.             !(strpos(ContentMeta::$meta["root"], "/directory/") !== false && strpos(ContentMeta::$meta["root"], "/posts") == false//directory pages
  250.         ) {
  251.             $params["bottom"] = [
  252.                 [
  253.                     "type" => "mediagroup",
  254.                     "position" => $bottom_ad_position,
  255.                 ]
  256.             ];
  257.         } else {
  258.             //if($this->site_code == Content::SITE_RCS) {
  259.                 $coffeeCastAd $this->mediaHelper->getFirstItemByPosition("ad-video-coffee-cast");
  260.                 $params["ad_video_coffee_cast"] = $coffeeCastAd;
  261.             //}
  262.         }
  263.         
  264.         // header ads
  265.         //if($this->site_code == Content::SITE_RCS) {
  266.             try {
  267.                 
  268.                 $countdownAd $this->mediaHelper->getFirstItemByPosition("header-countdown");
  269.                 $params["countdown_ad"] = $countdownAd;
  270.                 
  271.                 $bottomHeaderAd $this->mediaHelper->getFirstItemByPosition("header-bottom");
  272.                 $params["bottom_header_ad"] = $bottomHeaderAd;
  273.                 
  274.                 $bottomBottomHeaderAd $this->mediaHelper->getFirstItemByPosition("header-bottom-bottom");
  275.                 $params["bottom_bottom_header_ad"] = $bottomBottomHeaderAd;
  276.                 
  277.                 //$params["megaMenu"] = $this->someHelper->getMegaMenuItems();
  278.                 
  279.             } catch (\Exception $e) {
  280.                 //no header_news_link
  281.             }
  282.         //}
  283.         
  284.         // add the user object to all requests
  285.         $params["user"] = $this->user;
  286.         $params["site_code"] = $this->site_code;
  287.         
  288.         return $this->render($view$params$response);
  289.         
  290.     }
  291.     
  292. }