src/WebBundle/Helper/TwigTe.php line 134

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace WebBundle\Helper;
  4. use Exception;
  5. use Twig\Error\Error;
  6. use WebBundle\Entity\BuyOrder;
  7. use WebBundle\Entity\Idea;
  8. use WebBundle\Entity\User;
  9. use WebBundle\Enum\BuyOrderStatusEnum;
  10. use WebBundle\Repository\FilterRepository;
  11. /**
  12.  * class: TwigTe
  13.  * Исключительн хелпер для твига , все его статические функции автоматически доступны в шаблоне
  14.  * -----------------------------------------------------
  15.  * Created by MihailShirnin on 25.10.2016.
  16.  * @package WebBundle\Helper
  17.  */
  18. class TwigTe
  19. {
  20.     /**
  21.      * Отдаем текущий статический класс. Сделано для твига
  22.      * @return TwigTe
  23.      */
  24.     public static function that()
  25.     {
  26.         return new self();
  27.     }
  28.     /**
  29.      * @return UrlHelper
  30.      */
  31.     public static function path()
  32.     {
  33.         return UrlHelper::that();
  34.     }
  35.     public static function pathGenerate($type$article)
  36.     {
  37.         return PathHelper::pathGenerate($type$article);
  38.     }
  39.     /**
  40.      * @return null|User
  41.      * @throws Exception
  42.      */
  43.     public static function user()
  44.     {
  45.         return App::getCurUser();
  46.     }
  47.     /**
  48.      * @return StrHelper
  49.      */
  50.     public static function str()
  51.     {
  52.         return StrHelper::that();
  53.     }
  54.     /**
  55.      * @return LocaleHelper
  56.      */
  57.     public static function locale()
  58.     {
  59.         return LocaleHelper::that();
  60.     }
  61.     /**
  62.      * @param array $params
  63.      */
  64.     public function dump(...$params)
  65.     {
  66.         $params count($params) == $params[0] : $params;
  67.         App::dump($params);
  68.     }
  69.     /**
  70.      * Формирование массива ссылок фильтров в футер меню
  71.      * Возвращаем массив: название (в текущей локали) => ссылка (catalog/свойство)
  72.      *
  73.      * @return array
  74.      * @throws Exception
  75.      */
  76.     public static function getFooterLinks()
  77.     {
  78.         $lc in_array(App::getCurLocale(), App::getParameter('locales')) ? App::getCurLocale() : 'en';
  79.         /**  @var FilterRepository $oRepoFilter */
  80.         $oRepoFilter App::getRepository('WebBundle:FilterEntity');
  81.         $list $oRepoFilter->getForFooterByGroupAlias();
  82.         foreach ($list as $id => $item) {
  83.             if (!empty($item[$lc])) {
  84.                 $list[$id] = $item[$lc];
  85.             }
  86.         }
  87.         return $list;
  88.     }
  89.     /**
  90.      * Удаление значения из массива
  91.      * @param array $arr
  92.      * @param       $keys
  93.      * @return array
  94.      */
  95.     public static function unsetArr(array $arr$keys)
  96.     {
  97.         $keys is_array($keys) ? $keys explode(','$keys);
  98.         foreach ($keys as $key) {
  99.             $key trim($key);
  100.             if (!empty($arr[$key])) {
  101.                 unset($arr[$key]);
  102.             }
  103.         }
  104.         return $arr;
  105.     }
  106.     /**
  107.      * Формируем LITE меню фильтров
  108.      * @param Boolean $withLiteFilters // рендерить ли lite-filters
  109.      * @param array $collection //если коллекция уже получена при поиске зачем получать ее еще раз в getDataMenuLite ?
  110.      * @param array $calculate //если использовался sphinx, то у нас будут совсем другие количества результатов для фильтров
  111.      * @return string
  112.      * @throws Exception
  113.      */
  114.     public static function buildLeftMenuLite(bool $withLiteFilters true)
  115.     {
  116.         $oLeftService App::getContainer()->get('app.service.leftmenu');
  117.         $output $oLeftService->getDataMenuLite();
  118.         $output['withLiteFilters'] = $withLiteFilters;
  119.         //  App::debugExit($output);
  120.         $render App::getTwig()->render('@Web/Left/_left_menu.html.twig'$output);
  121.         return $render;
  122.     }
  123.     /**
  124.      * Получение значения из объекта для составных имен методов класса
  125.      * @param $obj
  126.      * @param $dop
  127.      * @return mixed
  128.      */
  129.     public static function runMethodGet($obj$dop)
  130.     {
  131.         $aDop explode('.'$dop);
  132.         $res $obj;
  133.         foreach ($aDop as $dop) {
  134.             if (strripos($dop'get') === false) {
  135.                 $dop 'get' StrHelper::ucFirst($dop);
  136.             }
  137.             $res $res->$dop();
  138.         }
  139.         return $res;
  140.     }
  141.     /**
  142.      * Проверка DEV окружения
  143.      * @return bool
  144.      * @throws Exception
  145.      */
  146.     public static function checkIsDev()
  147.     {
  148.         return App::isDev();
  149.     }
  150.     /**
  151.      * проверка окружения для вакансий - учетом локали ру
  152.      * @param bool $isDev
  153.      * @return bool
  154.      * @throws Exception
  155.      */
  156.     public static function isVacancyTE($isDev false)
  157.     {
  158.         return App::isVacancyTE($isDev);
  159.     }
  160.     public static function checkIsUpdated()
  161.     {
  162.         return App::getParameter('show_alert_update');
  163.     }
  164.     public static function getRequest()
  165.     {
  166.         return RequestHelper::syRequest();
  167.     }
  168.     public static function replaceStr($search$replace$subject, &$count null)
  169.     {
  170.         return str_replace($search$replace$subject$count);
  171.     }
  172.     function valK($val)
  173.     {
  174.         if ($val 999) {
  175.             $val LocaleHelper::floatSign($val 10001) . 'K';
  176.         }
  177.         return $val;
  178.     }
  179.     /**
  180.      * @param null $route
  181.      * @param null|array $params
  182.      * @param null|array $hrefFlag
  183.      * @return string
  184.      * @throws Error
  185.      * @throws Exception
  186.      */
  187.     static function getSEOLink($route null$params null$hrefFlag null): string
  188.     {
  189.         $params $params_ = empty($params) ? [] : $params;
  190.         $keyBase ArrHelper::get($params'key');
  191.         $links = [];
  192.         if ($route) {
  193.             $lcList LocaleHelper::getListCodeAvailable();
  194.             $countryList App::getCountryList();
  195.             $fs App::getContainer()->get('app.service.filters');
  196.             foreach ($lcList as $loc) {
  197.                 $loc strtolower($loc);
  198.                 if ($loc === 'zh') {
  199.                     continue;
  200.                 }
  201.                 if ($route === 'app_catalog') {
  202.                     if ($keyBase) {
  203.                         $key $fs->getWord(null$loc);
  204.                         if (!$key) {
  205.                             continue;
  206.                         } else {
  207.                             $params['key'] = $key;
  208.                         }
  209.                     } else {
  210.                         continue;
  211.                     }
  212.                 }
  213.                 if ($route === 'app_publication_single') {
  214.                     if (!empty($hrefFlag[$loc])) {
  215.                         $params['id'] = $hrefFlag[$loc];
  216.                     } else {
  217.                         continue;
  218.                     }
  219.                 }
  220.                 if ($route === 'app_collection' && !empty($params['elementId'])) {
  221.                     $translated $fs->getWord($params['elementId'], $loc);
  222.                     if (!$translated) {
  223.                         continue;
  224.                     }
  225.                     $tmpParams $params;
  226.                     $tmpParams['elementId'] = $translated;
  227.                 } else {
  228.                     $tmpParams $params;
  229.                 }
  230.                 foreach ($countryList as $code => $country) {
  231.                     $code strtolower($code);
  232.                     if (
  233.                         empty($code) ||
  234.                         $code == 'ru' ||
  235.                         $code == 'en' ||
  236.                         ($code != 'en' && !in_array($loc$country['localesArr'])) ||
  237.                         ($code == 'ru' && $loc != 'ru')
  238.                     ) {
  239.                         continue;
  240.                     }
  241.                     $lf $loc '-' $code;
  242.                     if ($loc == $code) {
  243.                         $l $loc;
  244.                     } else {
  245.                         $l $lf;
  246.                     }
  247.                     //для ru нет такой страницы
  248.                     if (
  249.                         !empty($tmpParams['url'])
  250.                         && $tmpParams['url'] === 'improving-site'
  251.                         && $l === 'ru'
  252.                     ) {
  253.                         continue;
  254.                     }
  255.                     $links[] = [
  256.                         'url' => App::generateUrl(
  257.                             $route,
  258.                             array_merge($tmpParamsarray_merge(['_locale' => $l], App::getRequest()->query->all())),
  259.                             0
  260.                         ),
  261.                         'locale' => $lf,
  262.                     ];
  263.                 }
  264.             }
  265.         }
  266.         $lcFull App::getCurLocale(true);
  267.         $canonical false;
  268.         if (in_array($lcFull, ['it''fi'])) {
  269.             $params array_merge($params_, ['_locale' => $lcFull]);
  270.             if ($params != $params_) {
  271.                 $canonical App::generateUrl($routearray_merge($params, ['_locale' => $lcFull]), 0);
  272.             }
  273.         }
  274.         return App::getTwig()->render(
  275.             '@Web/Common/seo-link.html.twig',
  276.             [
  277.                 'links' => $links,
  278.                 'canonical' => $canonical,
  279.             ]
  280.         );
  281.     }
  282.     /**
  283.      * @return string
  284.      */
  285.     static function getCanonicalTR(): string
  286.     {
  287.         return '';
  288.     }
  289.     /**
  290.      * Используется как уникальная строка в твиге
  291.      * @return string
  292.      */
  293.     public static function getUniqId()
  294.     {
  295.         return uniqid();
  296.     }
  297.     public static function isArray($val)
  298.     {
  299.         return is_array($val);
  300.     }
  301.     /**
  302.      * Получить параметр из файла конфига parameters.yml
  303.      * Для получения url web socket сервера
  304.      * @param string $param Имя параметра в файле конфига parameters.yml
  305.      * @return mixed
  306.      * @throws Exception
  307.      * @todo возможно есть лучшее решение, не нашел
  308.      */
  309.     public static function getParameter($param 'portal_ws_server')
  310.     {
  311.         if (!$param) {
  312.             throw new Exception('Pass empty parameter');
  313.         }
  314.         return App::getParameter($param);
  315.     }
  316.     /**
  317.      * @param BuyOrder $buyOrder
  318.      * @return string
  319.      * @throws Exception
  320.      */
  321.     public static function headerBO($buyOrder)
  322.     {
  323.         return App::getTwig()->render('@Web/BuyOrder/header.html.twig', [
  324.             'header' => OrderHelper::header($buyOrder),
  325.             'noObligation' => $buyOrder->getStatus() < BuyOrderStatusEnum::PARTIALLY_PAID && !$buyOrder->getBankTransferRequested(),
  326.         ]);
  327.     }
  328.     /**
  329.      * @throws Exception
  330.      */
  331.     public static function ideaUrl(Idea $idea): string
  332.     {
  333.         return App::generateUrl('app_idea', ['url' => $idea->getId()], 0);
  334.     }
  335.     /**
  336.      * Костыль для получения языка на страницах 404 500 b т.д.
  337.      */
  338.     public function getLangFromUri(): ?string
  339.     {
  340.         $localeFromUri LocaleHelper::getLocaleFromUri(App::getRequest()->getUri());
  341.         return $localeFromUri->getLangToUrl();
  342.     }
  343.     public function getCountryFromUri(): ?string
  344.     {
  345.         $localeFromUri LocaleHelper::getLocaleFromUri(App::getRequest()->getUri());
  346.         return $localeFromUri->getCountryToUrl();
  347.     }
  348.     function fakePrice(array $article): array
  349.     {
  350.         return LocaleHelper::fakePrice($article);
  351.     }
  352.     /**
  353.      * Ссылка на страницу Новинок сайта
  354.      * @return mixed
  355.      */
  356.     public static function linkTopPage()
  357.     {
  358.         return FilterHelper::getUrl('recently-added-tiles');
  359.     }
  360.     public function truncate($string$length)
  361.     {
  362.         if (strlen($string) > $length) {
  363.             $string substr($string0$length) . '...';
  364.         }
  365.         return $string;
  366.     }
  367.     /**
  368.      * @param string $key
  369.      * @param $count
  370.      * @param $locale
  371.      * @param array $params
  372.      * @param int $allowKey
  373.      * @return string
  374.      * Plural on twig
  375.      */
  376.     public function transByVariant(string $key$count$locale null$params = [], int $allowKey 0)
  377.     {
  378.         try {
  379.             $locale $locale ?: App::getCurLocale();
  380.             return App::getTranslator()->trans(
  381.                 $key,
  382.                 ['%count%' => App::plural((int) $count$locale$allowKey)] + $params,
  383.                 null,
  384.                 $locale
  385.             );
  386.         } catch (Exception $e) {
  387.             return '';
  388.         }
  389.     }
  390. }