src/WebBundle/Helper/ArticleSettingsHelper.php line 23

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Helper;
  3. use AdmBundle\Helper\StrAdm;
  4. use Exception;
  5. use Import1CBundle\Helper\v3\BiConstant;
  6. use WebBundle\Constant\CookieKeysConstant;
  7. use WebBundle\Enum\ArticleTypeEnum;
  8. use WebBundle\Enum\MeasureEnum;
  9. use WebBundle\Repository\ArticleRepository;
  10. use WebBundle\Repository\FilterRepository;
  11. class ArticleSettingsHelper
  12. {
  13.     /**
  14.      * @param string $description
  15.      * @param ArticleRepository $articleRepository
  16.      * @return string
  17.      * @throws Exception
  18.      */
  19.     public static function replaceLinkToReal(string $descriptionArticleRepository $articleRepository): string
  20.     {
  21.         if (preg_match_all('#\[link:(.*)]#isUu'$description$matchesPREG_SET_ORDER)) {
  22.             foreach ($matches as $match) {
  23.                 if (empty($match[1])) {
  24.                     continue;
  25.                 }
  26.                 $aName trim($match[1]);
  27.                 $itemLink $articleRepository->getItemUrl($aName);
  28.                 if ($itemLink) {
  29.                     $urlItem App::generateUrl('app_collection_slideshow', [
  30.                         'factoryUrl' => $itemLink->getFactoryUrl(),
  31.                         'collectionUrl' => $itemLink->getCollectionUrl(),
  32.                         'type' => 'a',
  33.                         'elementId' => $itemLink->getUrl(),
  34.                     ]);
  35.                     $description str_replace(
  36.                         $match[0],
  37.                         '<a target="_blank" href="' $urlItem '">' $aName '</a>',
  38.                         $description
  39.                     );
  40.                 } else {
  41.                     $description str_replace(
  42.                         $match[0],
  43.                         $aName,
  44.                         $description
  45.                     );
  46.                 }
  47.             }
  48.         }
  49.         return $description;
  50.     }
  51.     /**
  52.      * @param $id
  53.      * @param null $locale
  54.      * @param null $country
  55.      * @param null $measure
  56.      * @param ?bool $filter
  57.      * @return mixed|null
  58.      * @throws Exception
  59.      */
  60.     public static function getArticleSettings($id$locale null$country null$measure null, ?bool $filter false)
  61.     {
  62.         $inch App::getCurCountry() == 'us' && CookieHelper::get(CookieKeysConstant::MEASURE_FT) == 'ft';
  63.         $locale = ($locale === null) ? App::getCurLocale() : $locale;
  64.         /** @var ArticleRepository $articleRepo */
  65.         $articleRepo App::getRepository('WebBundle:Article');
  66.         $settings $articleRepo->getArticleForSetting((int) $id$locale);
  67.         $textures $articleRepo->getTexturesForArticle((int) $id);
  68.         $settings['texture'] = [];
  69.         $settings['textureIdes'] = [];
  70.         foreach ($textures as $item) {
  71.             $textureElement null;
  72.             if ($item['id'] == 6) {
  73.                 $subTextures $articleRepo->getStoneTexturesForArticle((int) $id);
  74.                 foreach ($subTextures as $subTexture) {
  75.                     $textureElement $subTexture['texture'];
  76.                 }
  77.             }
  78.             if (!$textureElement) {
  79.                 if (!in_array($item['id'], $settings['textureIdes'])) {
  80.                     $settings['textureIdes'][] = $item['id'];
  81.                 }
  82.                 $settings['texture'][] = $item['texture'];
  83.             } else {
  84.                 $settings['texture'][] = $textureElement;
  85.             }
  86.         }
  87. //        if (!$filter) {
  88.             $settings['texture'] = self::humanizeTexture($settings['texture'] ?? null$locale);
  89. //        }
  90.         // если есть признак квадрата, то меняем значение для shape
  91.         if ($settings['square']) {
  92.             $settings['shape'] = 'left_menu_square';
  93.         }
  94.         unset($settings['square']);
  95.         $sur $articleRepo->getSurfaceForArticle((int) $id);
  96.         $settings['surface'] = null;
  97.         $settings['surfaceIdes'] = [];
  98.         foreach ($sur as $k => $item) {
  99.             if (!empty($item['surface'])) {
  100.                 $text App::trans($item['surface'], $locale);
  101.                 if ($locale == 'de') {
  102.                     $text strHelper::ucWords($text);
  103.                 } elseif ($k == 0) {
  104.                     $text strHelper::ucFirstOnly($text);
  105.                 } else {
  106.                     $text strHelper::toLower($text);
  107.                 }
  108.                 if (($settings['material_id'] ?? null) == 28) {
  109.                     $sTitle null;
  110.                 } else {
  111.                     $sTitle App::trans($item['surface'] . '_title'$locale);
  112.                     if ($item['surface'] . '_title' == $sTitle) {
  113.                         $sTitle null;
  114.                     }
  115.                 }
  116.                 $settings['surface'][$k] = [
  117.                     'title' => str_replace(['"''3d'], ['''3D'], $sTitle),
  118.                     'text' => str_replace(['"''3d'], ['''3D'], $text),
  119.                 ];
  120.                 if ($item['surface_id'] == || $item['surface_id'] == 5) {
  121.                     $settings['surface'][$k]['subTitle'] = str_replace(
  122.                         '"',
  123.                         '',
  124.                         App::trans('article.setting.help.surface.r' $item['sliding_id'], $locale)
  125.                     );
  126.                     $settings['surface'][$k]['subText'] = 'R' $item['sliding_id'];
  127.                 }
  128.                 if (!in_array($item['surface_id'], $settings['surfaceIdes'])) {
  129.                     $settings['surfaceIdes'][] = $item['surface_id'];
  130.                 }
  131.                 if (in_array($item['surface_id'], [1112])) {
  132.                     unset($settings['surface'][$k]['title']);
  133.                 }
  134.             }
  135.         }
  136.         $motive $articleRepo->getMotivesForArticle((int) $id);
  137.         $motives = [];
  138.         $settings['motiveIdes'] = [];
  139.         foreach ($motive as $item) {
  140.             if (!in_array($item['id'], $settings['motiveIdes'])) {
  141.                 $settings['motiveIdes'][] = $item['id'];
  142.             }
  143.             $motives[] = App::trans($item['motive'], $locale);
  144.         }
  145.         $settings['motive'] = join(', '$motives);
  146.         $styleArr $articleRepo->getStyleForArticle((int) $id);
  147.         $styles = [];
  148.         $settings['styleIdes'] = [];
  149.         $handMadeStyle null;
  150.         foreach ($styleArr as $item) {
  151.             $settings['styleIdes'][] = $item['id'];
  152.             // https://te2.remote.team/discus/1BB66374-235D-17D4-9CF6-4756541DF89D
  153.             if ($item['style'] === 'left_menu_hand_made') {
  154.                 $handMadeStyle = [
  155.                     'title' => str_replace('"'''App::trans('article.setting.help.hand-made'$locale)),
  156.                     'text' => StrHelper::toLower(App::trans($item['style'], $locale)),
  157.                 ];
  158.             } else {
  159.                 $styles[] = StrHelper::toLower(App::trans($item['style'], $locale));
  160.             }
  161.         }
  162.         $settings['styleIdes'] = array_unique($settings['styleIdes']);
  163.         $settings['style'] = StrHelper::ucFirstOnly(join(', '$styles));
  164.         $styleName StrHelper::ucFirstOnly(App::trans('left_menu_style'$locale)) . (in_array($locale, ['de''fi''sv''da''no''pt']) ? ': ' ' ');
  165.         if (!empty($settings['style'])) {
  166.             if (!in_array($locale, ['en''nl'])) {
  167.                 $settings['style'] =  StrHelper::toLower($settings['style']);
  168.             }
  169.         }
  170.         // просто добавим в конец стиль ручная работа
  171.         if (null !== $handMadeStyle) {
  172.             if (!empty($settings['style'])) {
  173.                 $settings['style'] .= ', ';
  174.             }
  175.             $handMadeStyle['text'] = $styleName $settings['style'] . $handMadeStyle['text'];
  176.             $settings['style'] = $handMadeStyle;
  177.         } elseif (!empty($settings['style'])) {
  178.             $settings['style'] = $styleName $settings['style'];
  179.         }
  180.         $colorArr $articleRepo->getColorsForArticle((int) $id);
  181.         $colors = [];
  182.         foreach ($colorArr as $item) {
  183.             $colors[] = StrHelper::toLower($item['name']);
  184.         }
  185.         if (count($colorArr) > 0) {
  186.             $settings['color'] = join(', '$colors);
  187.         } else {
  188.             unset($settings['color']);
  189.         }
  190.         $tesseraShapesArr $articleRepo->getShapesForArticle((int) $id);
  191.         $tesseraShapes = [];
  192.         foreach ($tesseraShapesArr as $item) {
  193.             $tesseraShapes[] = StrHelper::toLower(App::trans($item['alias'], $locale));
  194.         }
  195.         // если задана форма чипа, то она приоритетнее https://te.remote.team/#/discus/73234C92-5EEE-6A8B-DA9E-4CAB82EEA00A/
  196.         if (count($tesseraShapes) > 0) {
  197.             $settings['shape'] = StrHelper::ucFirstOnly(join(', '$tesseraShapes));
  198.         }
  199.         $ets $articleRepo->getEdgeTypeForArticle((int) $id);
  200.         $etts = [];
  201.         foreach ($ets as $et){
  202.             if (!empty($et['alias'])) {
  203.                 $text App::trans($et['alias'], $locale);
  204.                 switch ($et['alias']) {
  205.                     case 'left_menu_no_retified':
  206.                         $sTitle 'article.setting.help.non-rectified';
  207.                         break;
  208.                     case 'left_menu_retified':
  209.                         $sTitle 'article.setting.help.rectified';
  210.                         break;
  211.                     case 'left_menu_edge_rustic':
  212.                         $sTitle 'article.setting.help.rustic';
  213.                         break;
  214.                     case 'Left_menu_oblique':
  215.                         $sTitle 'article.setting.help.oblique';
  216.                         break;
  217.                     default:
  218.                         $sTitle '';
  219.                         break;
  220.                 }
  221.                 $etts[] = [
  222.                     'title' => str_replace('"'''App::trans($sTitle$locale)),
  223.                     'text' => strHelper::ucFirstOnly($text),
  224.                 ];
  225.             }
  226.         }
  227.         $settings['etts'] = $etts;
  228.         if (!empty($settings['descriptionEn'])) {
  229.             $settings['description'] = str_replace(
  230.                 '¶',
  231.                 ' ',
  232.                 $settings['description'] ?? $settings['descriptionEn']
  233.             );
  234.             unset($settings['descriptionEn']);
  235.         }
  236.         if (!empty($settings['durabilityClass'])) {
  237.             $settings['durabilityClass'] = App::trans('item_settings.use_class') . ' ' $settings['durabilityClass'];
  238.         }
  239.         //Просьба:Свойство "частичного прокрашивания" не отображается в характеристиках артикулов
  240.         //https://te2.remote.team/discus/8D7374A5-BD77-E346-E043-1DC4BB177237?goto=true
  241.         //https://te2.remote.team/discus/515B8B19-96A2-D301-5E06-464F006ADE86?goto=true
  242.        if (!empty($settings['typePainting'])) {
  243.             if ($settings['typePainting'] == 'Color-body') {
  244.                 $settings['typePainting'] = App::trans('item_settings.full_body');
  245.             } else {
  246.                 $settings['typePainting'] = App::trans('item_settings.through_body');
  247.             }
  248.         }
  249.         if (!empty($settings['dyedInMass'])) {
  250.             $settings['dyedInMass'] = [
  251.                 'title' => App::trans('item.setting.base_colored'),
  252.                 'text' => App::trans('item_settings.full_body')
  253.             ];
  254.         }
  255.         if (!empty($settings['draw'])) {
  256.             $settings['pictureInTitle'] = [
  257.                 'title' => App::trans('item.setting.pattern_help'),
  258.                 'text' => App::trans('item.setting.pattern') . ': ' $settings['draw']
  259.             ];
  260.             unset($settings['draw']);
  261.         }
  262.         if ($filter) {
  263.             $params = [
  264. //                '403' => $settings['type_id'], //type
  265. //                '394' => $settings['using_id'], //using
  266. //                '397' => $settings['material_id'], //material
  267. //                '401' => $settings['surfaceIdes'], //surface
  268.                 '402' => [$settings['textureIdes'], 'getFacturas'], //texture (effect)
  269.                 '400' => [$settings['styleIdes'], 'getStyles'], //style
  270. //                '421' => $settings['motiveIdes'] //motive
  271.             ];
  272.             if (!in_array($settings['shape_id'], [49])) {
  273.                 $params['413'] = [$settings['shape_id'], 'shape']; //shape
  274.             }
  275.             // Получаем выборку по фильтрам
  276.             /** @var FilterRepository $repoFilters */
  277.             $repoFilters App::getRepository('WebBundle:FilterEntity');
  278.             $filters $repoFilters->getArrListForSlider(App::getCurLocale(), $params);
  279.             foreach ($filters as $f) {
  280.                 $settings['filters'][] = [
  281.                     'group' => $f['group.name'],
  282.                     'name' => $f['name'],
  283.                     'url' => App::generateUrl('app_catalog', ['key' => $f['url']], 0),
  284.                     'textLink' => App::trans('filter.more'App::getCurLocale(), [
  285.                         '%count%' => App::plural($f['count'], $locale'pl'2),
  286.                         '%cnt%' => $f['count']
  287.                     ]),
  288.                 ];
  289.             }
  290.             unset($settings['style']);
  291.            // unset($settings['texture']);
  292.         }
  293.         unset($settings['using_id']);
  294.         unset($settings['surfaceIdes']);
  295.         unset($settings['textureIdes']);
  296.         unset($settings['styleIdes']);
  297.         unset($settings['motiveIdes']);
  298.         // характеристики раковины
  299.         if ($settings['type_id'] == 64) {
  300.             // есть перелив раковины
  301.             $settings['overflowSink'] = App::trans('sink.overflow') . ': ' .
  302.                 StrHelper::toLower(empty($settings['overflowSink']) ? App::trans('no') : App::trans('yes'));
  303.             if (!empty($settings['drainSizeSink'])) {
  304.                 // Диаметр сливного отверстия
  305.                 $settings['drainSizeSink'] = App::trans('sink.drain_size') . ': ' .
  306.                     (LocaleHelper::measureGb()
  307.                         ? (ConversionHelper::convertInch((float) $settings['drainSizeSink']) . '″')
  308.                         : ($settings['drainSizeSink'] . ' ' App::trans('left_menu_mm'))
  309.                     );
  310.             } else {
  311.                 unset($settings['drainSizeSink']);
  312.             }
  313.             // тип установки
  314.             $settings['installationTypeSink'] = App::trans('sink.installation_type') . ': ' .
  315.                 StrHelper::toLower(App::trans($settings['installationTypeSink']));
  316.             // Отверстие под смеситель
  317.             $settings['faucetHoleSink'] = App::trans('sink.faucet_hole') . ': ' .
  318.                 StrHelper::toLower(empty($settings['faucetHoleSink']) ? App::trans('no') : App::trans('yes'));
  319.         } else {
  320.             unset($settings['overflowSink']);
  321.             unset($settings['drainSizeSink']);
  322.             unset($settings['faucetHoleSink']);
  323.             unset($settings['installationTypeSink']);
  324.         }
  325.         if (!empty($settings['methLaying'])) {
  326.             $settings['methLaying'] = App::trans('item.installation_method') . ': ' .
  327.                 StrHelper::toLower(App::trans($settings['methLaying']));
  328.         }
  329.         if (LocaleHelper::getUserMeasure(['country' => $country]) === 'ft'
  330.             && !in_array($settings['measure_id'], [MeasureEnum::UNITMeasureEnum::SETMeasureEnum::BOX])
  331.         ) {
  332.             $settings['packagingCount'] = $settings['packagingCountFt'];
  333.         }
  334.         unset($settings['packagingCountFt']);
  335.         if (!empty($settings['description'])) {
  336.             $settings['description'] = self::replaceLinkToReal($settings['description'], $articleRepo);
  337.         }
  338.         if (!empty($settings['swimmingPool'])) {
  339.             $settings['swimmingPool'] = App::trans('swimming_pool'$locale);
  340.         } else {
  341.             unset($settings['swimmingPool']);
  342.         }
  343.         if (!empty($settings['module'])) {
  344.             $settings['module'] = App::trans('setting_module'$locale);
  345.         } else {
  346.             unset($settings['module']);
  347.         }
  348.         $clearSizeTessera true;
  349.         if (!empty($settings['sizeTessera'])) {
  350.             $clearSizeTessera false;
  351.             $outVarios $outDiameter = [];
  352.             $sizeTesseraItems explode('|'StrAdm::toLower($settings['sizeTessera']));
  353.             foreach ($sizeTesseraItems as $key => $item) {
  354.                 if ($item == BiConstant::KEY_TESSERA_CHIP_VARIOS) { // left_menu_chip_various|left_menu_chip_various
  355.                     $outVarios[] = App::trans($item$locale);
  356.                 } elseif ($item == BiConstant::KEY_TESSERA_DIAMETER) {
  357.                     if (!empty($settings['tesseraSizeX'])) {
  358.                         $tesseraSizeX explode('|'$settings['tesseraSizeX']);
  359.                         $tesseraX $tesseraSizeX[$key];
  360.                         if ($inch) {
  361.                             $outDiameter[] = [
  362.                                 'x' => LocaleHelper::floatSign(
  363.                                         ConversionHelper::convertInch((float) $tesseraXConversionHelper::INCH),
  364.                                         -1
  365.                                     ) . '″',
  366.                             ];
  367.                         } else {
  368.                             $outDiameter[] = [
  369.                                 'x' => LocaleHelper::floatSign($tesseraX, -1),
  370.                             ];
  371.                         }
  372.                     }
  373.                 } else {
  374.                     $outVarios[] = App::trans($item$locale);
  375.                 }
  376.             }
  377.             $outVarios array_unique($outVarios);
  378.             if ($outVarios) {
  379.                 $settings['sizeTessera'] = App::trans('article.tessera_size'$locale) . ' ' .
  380.                     implode('|'$outVarios);
  381.             }
  382.             if ($outDiameter) {
  383.                 $st = [];
  384.                 foreach ($outDiameter as $sizeTessera) {
  385.                     $st[] = implode(' &times; '$sizeTessera) .
  386.                         (!$inch ? (' ' App::trans('left_menu_cm'$locale)) : '');
  387.                 }
  388.                 $settings['sizeTessera'] = $st ? (App::trans('article.tessera_size'$locale) . ' &#8960; ' implode(', '$st)) : '';
  389.             }
  390.         } else {
  391.             // Размер чипа
  392.             $tesseraSizeXY = [];
  393.             if (!empty($settings['tesseraSizeX']) and !empty($settings['tesseraSizeY'])) {
  394.                 $tesseraSizeX $settings['tesseraSizeX']; //2.5|2.6 5.5
  395.                 $tesseraSizeY $settings['tesseraSizeY']; //2.5|2.6 11
  396.                 $tesseraSizeZ $settings['tesseraSizeZ']; //2.5|2.6 11
  397.                 $tesseraX explode('|'$tesseraSizeX);
  398.                 $tesseraY explode('|'$tesseraSizeY);
  399.                 $tesseraZ explode('|'$tesseraSizeZ);
  400.                 foreach ($tesseraX as $key => $x) {
  401.                     $X $x;
  402.                     $Y $tesseraY[$key];
  403.                     $Z $tesseraZ[$key]??null;
  404.                     if ($inch) {
  405.                         $tesseraSizeXY[$key] = [
  406.                             'x' => LocaleHelper::floatSign(
  407.                                     ConversionHelper::convertInch((float) $XConversionHelper::INCH),
  408.                                     -1
  409.                                 ) . '″',
  410.                             'y' => LocaleHelper::floatSign(
  411.                                     ConversionHelper::convertInch((float) $YConversionHelper::INCH),
  412.                                     -1
  413.                                 ) . '″',
  414.                         ];
  415.                         if($Z){
  416.                             $tesseraSizeXY[$key]['z'] = LocaleHelper::floatSign(
  417.                                     ConversionHelper::convertInch((float) $ZConversionHelper::INCH),
  418.                                     -1
  419.                                 ) . '″';
  420.                         }
  421.                     } else {
  422.                         $tesseraSizeXY[$key] = [
  423.                             'x' => LocaleHelper::floatSign($X, -1),
  424.                             'y' => LocaleHelper::floatSign($Y, -1),
  425.                         ];
  426.                         if($Z){
  427.                             $tesseraSizeXY[$key]['z'] = LocaleHelper::floatSign($Z, -1);
  428.                         }
  429.                     }
  430.                 }
  431.                 $settings['sizeTessera'] = $tesseraSizeXY;
  432.                 $clearSizeTessera false;
  433.             }
  434.             if (!empty($settings['sizeTessera'])) {
  435.                 $st = [];
  436.                 foreach ($settings['sizeTessera'] as $sizeTessera) {
  437.                     $st[] = implode(' &times; '$sizeTessera) . (!$inch ? (' ' App::trans('left_menu_cm'$locale)) : '');
  438.                 }
  439.                 $settings['sizeTessera'] = $st ? (App::trans('article.tessera_size'$locale) . ' ' implode(', '$st)) : '';
  440.                 $clearSizeTessera false;
  441.             }
  442.         }
  443.         if (
  444.             StrAdm::toLower($settings['sizeTessera']) === 'left_menu_diameter'
  445.             && empty($settings['tesseraSizeX'])
  446.             && empty($settings['tesseraSizeY'])
  447.             && empty($settings['tesseraSizeZ'])
  448.         ) {
  449.             unset($settings['sizeTessera']);
  450.         }
  451.         if (isset($settings['tesseraSizeX'])) {
  452.             unset($settings['tesseraSizeX']);
  453.         }
  454.         if (isset($settings['tesseraSizeY'])) {
  455.             unset($settings['tesseraSizeY']);
  456.         }
  457.         if (isset($settings['tesseraSizeZ'])) {
  458.             unset($settings['tesseraSizeZ']);
  459.         }
  460.         if ($clearSizeTessera) {
  461.             unset($settings['sizeTessera']);
  462.         }
  463.         if (!empty($settings['mosaicEffect'])) {
  464.             $settings['type'] = App::trans('left_menu_mosaic_imitation'$locale);
  465.         } else {
  466.             if (!empty($settings['type'])) {
  467.                 $settings['type'] = strHelper::ucFirstOnly(App::trans($settings['type'], $locale));
  468.             }
  469.         }
  470.         unset($settings['mosaicEffect']);
  471.         if (LocaleHelper::measureGb(['measure' => $measure]) && $settings['measure_id'] == 1) {
  472.             $settings['measure'] = 'measure_ft';
  473.         } elseif (LocaleHelper::measureGb(['measure' => $measure]) && $settings['measure_id'] == 3) {
  474.             $settings['measure'] = 'measure_rft';
  475.         }
  476.         if (!empty($settings['repeatDrawId'])) {
  477.             $text App::getTranslator()->trans(
  478.                 $settings['repeatDraw'],
  479.                 [
  480.                     '%number%' => $settings['repeatNumber']
  481.                 ],
  482.                 null,
  483.                 $locale
  484.             );
  485.             if ($settings['repeatDrawId'] == 2) {
  486.                 $settings['repeatDraw'] = [
  487.                     'title' => str_replace('"'''App::trans('tooltip_title_no_repeat_item'$locale)),
  488.                     'text' => $text
  489.                 ];
  490.             } else {
  491.                 $settings['repeatDraw'] = $text;
  492.             }
  493.         }
  494.         if ($id == 493292827) {
  495.             unset($settings['shape']);// https://te.remote.team/#/discus/3DF962BC-1164-BC10-FDB4-FAD461E17936/
  496.         }
  497.         unset($settings['repeatDrawId']);
  498.         unset($settings['repeatNumber']);
  499.         $measure App::trans(
  500.             TranslitHelper::getCase(
  501.                 $settings['packagingCount'],
  502.                 [
  503.                     $settings['measure'],
  504.                     $settings['measure'] . 's'
  505.                 ]
  506.             ),
  507.             $locale
  508.         );
  509.         $str App::trans('collection_in_package'$locale) . ': ' .
  510.             LocaleHelper::floatSign($settings['packagingCount']) . ' ' $measure;
  511.         $settings['packagingCount'] = $str;
  512.         if (!in_array($settings['measure_id'], [247])) {
  513.             if ($settings['packagingCountPC'] > 0) {
  514.                 $settings['packagingCount'] .= ' (' LocaleHelper::floatSign($settings['packagingCountPC'], -1) . ' ' .
  515.                     App::trans(TranslitHelper::getCase($settings['packagingCountPC'], ['measure_unit''measure_units']), $locale) . ')';
  516.             }
  517.         }
  518.         $settings['packagingCount'] = StrHelper::ucFirstOnly($settings['packagingCount']);
  519.         unset($settings['packagingCountPC']);
  520.         if ($inch) {
  521.             $settings['weight'] = LocaleHelper::getFloatFromString(ConversionHelper::convertKgLb((float) $settings['weight']))
  522.                 . ' '
  523.                 App::trans('measure_lb'$locale);
  524.         } else {
  525.             $settings['weight'] = LocaleHelper::getFloatFromString($settings['weight'] ?? '0')
  526.                 . ' '
  527.                 App::trans('measure_kg'$locale);
  528.         }
  529.         $settings['weight'] = App::trans('collection_package_weight'$locale) . ': ' $settings['weight'];
  530.         if (!empty($settings['material'])) {
  531.             $settings['material'] = App::trans($settings['material'], $locale);
  532.             if (App::getCurLocale() == 'de') {
  533.                 $settings['material'] = strHelper::ucWords($settings['material']);
  534.             } else {
  535.                 $settings['material'] = strHelper::ucFirst($settings['material']);
  536.             }
  537.             // проверка некоторых материалов и выделение их
  538.             if (self::checkIfMaterialNeedMark((int) $settings['material_id'])) {
  539.                 $settings['material'] = '<b>' $settings['material'] . '</b>';
  540.             }
  541.         }
  542.         if(!empty($settings['etts'])){
  543.             $settings['edgeType'] = $settings['etts'];
  544.         }else{
  545.             if (!empty($settings['edgeType'])) {
  546.                 $text App::trans($settings['edgeType'], $locale);
  547.                 switch ($settings['edgeType']) {
  548.                     case 'left_menu_no_retified':
  549.                         $sTitle 'article.setting.help.non-rectified';
  550.                         break;
  551.                     case 'left_menu_retified':
  552.                         $sTitle 'article.setting.help.rectified';
  553.                         break;
  554.                     case 'left_menu_edge_rustic':
  555.                         $sTitle 'article.setting.help.rustic';
  556.                         break;
  557.                     default:
  558.                         $sTitle '';
  559.                         break;
  560.                 }
  561.                 $settings['edgeType'] = [
  562.                     'title' => str_replace('"'''App::trans($sTitle$locale)),
  563.                     'text' => strHelper::ucFirstOnly($text),
  564.                 ];
  565.             }
  566.         }
  567.         unset($settings['etts']);
  568.         if ($settings['type_id'] === ArticleTypeEnum::MOSAIC) {
  569.             $settings['edgeType'] = null;
  570.         }
  571.         unset($settings['type_id']);
  572.         if (!empty($settings['pei'])) {
  573.             $text strHelper::toUpper($settings['pei']);
  574.             $sTitle App::trans('article.setting.help.pie'$locale);
  575.             $subTitle '';
  576.             if ($text == 'PEI I') {
  577.                 $subTitle App::trans('article.setting.help.pie.i'$locale);
  578.             } elseif ($text == 'PEI II') {
  579.                 $subTitle App::trans('article.setting.help.pie.ii'$locale);
  580.             } elseif ($text == 'PEI III') {
  581.                 $subTitle App::trans('article.setting.help.pie.iii'$locale);
  582.             } elseif ($text == 'PEI IV') {
  583.                 $subTitle App::trans('article.setting.help.pie.iv'$locale);
  584.             } elseif ($text == 'PEI V') {
  585.                 $subTitle App::trans('article.setting.help.pie.v'$locale);
  586.             }
  587.             $settings['pei'] = [
  588.                 'title' => str_replace('"'''$sTitle),
  589.                 'subTitle' => str_replace('"'''$subTitle),
  590.                 'text' => $text,
  591.             ];
  592.         }
  593.         if (!empty($settings['offShade'])) {
  594.             $text App::trans($settings['offShade'], $locale);
  595.             $sTitle App::trans('article.setting.help.offShade.v'$locale);
  596.             $settings['offShade'] = [
  597.                 'title' => str_replace('"'''$sTitle),
  598.                 'text' => $text,
  599.                 'current' => $settings['offShade_id'],
  600.                 'variations' => [
  601.                     '1' => App::trans('article.setting.help.offShade.v1'$locale),
  602.                     '2' => App::trans('article.setting.help.offShade.v2'$locale),
  603.                     '3' => App::trans('article.setting.help.offShade.v3'$locale),
  604.                     '4' => App::trans('article.setting.help.offShade.v4'$locale),
  605.                 ],
  606.             ];
  607.         }
  608.         if (!empty($settings['color'])) {
  609. //            https://te.remote.team/#/discus/90659538-2D23-A51F-1432-650F7E9AB921/
  610. //            $settings['color_brand'] = /* App::trans('left_menu_color', $locale) . ': ' .*/
  611. //            StrHelper::toLower($settings['color']);
  612.             $settings['color'] = App::trans('left_menu_color'$locale) . ': ' .
  613.                 StrHelper::toLower($settings['color']);
  614.         }
  615.         if ($settings['thinGranite'] != false) {
  616.             $settings['thinGranite'] = App::trans('left_menu_thin_porcelain_tile'$locale);
  617.         } elseif ($settings['thick'] >= 17 && !empty($settings['material_id']) && $settings['material_id'] == 6) {
  618.             $settings['thinGranite'] = App::trans('left_menu_thick_porcelain_tile'$locale);
  619.         }
  620.         if (App::getCurLocale() == 'de') {
  621.             $settings['thinGranite'] = strHelper::ucWords($settings['thinGranite']);
  622.         } else {
  623.             $settings['thinGranite'] = strHelper::ucFirst($settings['thinGranite']);
  624.         }
  625.         if (!empty($settings['thick'])) {
  626.             $thick App::trans('left_menu_thickness'$locale);
  627.             $thick .= ' ' LocaleHelper::floatSign($settings['thick'], -1) . ' ' .
  628.                 App::trans('left_menu_mm'$locale);
  629.             if ($inch) {
  630.                 $thick .= ' (~' .
  631.                     LocaleHelper::floatSign(
  632.                         ConversionHelper::convertInch((float) $settings['thick'], ConversionHelper::INCH) / 10
  633.                     ) . '″)';
  634.             }
  635.             $settings['thick'] = $thick;
  636.         }
  637. //        if (!empty($settings['measurementSize_id'])) {
  638. //            if (App::getCurLocale() == 'de') {
  639. //                $settings['measurementSize_alias'] = strHelper::ucWords(App::trans($settings['measurementSize_alias'], $locale));
  640. //            } else {
  641. //                $settings['measurementSize_alias'] = strHelper::ucFirst(App::trans($settings['measurementSize_alias'], $locale));
  642. //            }
  643. //
  644. //            $settings['measurementSize_alias'] .= (' ' . $settings['measurementSize_id']);
  645. //        }
  646.         unset($settings['measurementSize_id']);
  647.         unset($settings['measurementSize_alias']);
  648.         unset($settings['publishDate']);
  649.         unset($settings['glazedGranite']);
  650.         unset($settings['delivery']);
  651.         unset($settings['sliding_id']);
  652.         unset($settings['sliding']);
  653.         unset($settings['measure']);
  654.         unset($settings['measure_id']);
  655.         unset($settings['offShade_id']);
  656.         $materialId $settings['material_id'] ?? null;
  657.         if ($materialId == '25') {
  658.             unset($settings['measure']);
  659.             unset($settings['type']);
  660.             unset($settings['using']);
  661.             unset($settings['surface']);
  662.             unset($settings['texture']);
  663.             unset($settings['style']);
  664.             unset($settings['thinGranite']);
  665.             unset($settings['thick']);
  666.             unset($settings['edgeType']);
  667.             unset($settings['shape']);
  668.             unset($settings['offShade']);
  669.             unset($settings['color']);
  670.             unset($settings['pei']);
  671.             unset($settings['delivery']);
  672.             unset($settings['sliding']);
  673.         }
  674.         unset($settings['material_id']);
  675.         if ($filter) {
  676. //            unset($settings['material']);
  677. //            unset($settings['type']);
  678. //            unset($settings['surface']);
  679.   //          unset($settings['texture']);
  680.             unset($settings['style']);
  681.             if (!in_array($settings['shape_id'], [49])) {
  682.                 unset($settings['shape']);
  683.             }
  684.             unset($settings['shape_id']);
  685. //            unset($settings['motive']);
  686. //            unset($settings['texture']);
  687.         }
  688.         unset($settings['shape_id']);
  689.         return $settings;
  690.     }
  691.     /**
  692.      * Приведение текстуры в человеко читаемый вид
  693.      *
  694.      * @param array|null $textures
  695.      * Массив алиасов(alias) фильтров текстуры. Например: ['left_menu_brick', 'left_menu_wood']
  696.      * @param string $locale
  697.      * Локаль, в которой надо вернуть результат
  698.      * @return string
  699.      * @throws Exception
  700.      */
  701.     public static function humanizeTexture(?array $texturesstring $locale): string
  702.     {
  703.         if (empty($textures)) {
  704.             return '';
  705.         }
  706.         $result '';
  707.         $hydravlic '';
  708.         foreach ($textures as $item) {
  709.             if ($item) {
  710.                 $texture App::trans(trim($item), $locale);
  711.                 if ($locale != 'de') {
  712.                     $texture StrHelper::toLower($texture);
  713.                 } else {
  714.                     $texture StrHelper::ucFirstOnly($texture);
  715.                 }
  716.                 if ($item == 'left_menu_hydravlic_tile') {
  717.                     $hydravlic $texture;
  718.                 } elseif (empty($result)) {
  719.                     $result = !empty($item) ? StrHelper::ucFirstOnly($texture) : null;
  720.                 } elseif (!empty($item)) {
  721.                     $result .= ', ' $texture;
  722.                 }
  723.             }
  724.         }
  725.         if (!empty($result)) {
  726.             if (!in_array($locale, ['en''nl'])) {
  727.                 $result StrHelper::ucFirstOnly(App::trans('left_menu_effect'$locale)) .
  728.                     (in_array($locale, ['de''fi''sv''da''no''pt']) ? ': ' ' ') . StrHelper::toLower($result);
  729.             } else {
  730.                 $result .= ' ' StrHelper::toLower(App::trans('left_menu_effect'$locale));
  731.             }
  732.         }
  733.         if ($hydravlic != '') {
  734.             if (empty($result)) {
  735.                 $result $hydravlic;
  736.             } else {
  737.                 $result .= ', ' $hydravlic;
  738.             }
  739.         }
  740.         return $result;
  741.     }
  742.     /**
  743.      * Решено некоторые материалы выделять - список захардкожен
  744.      * https://te2.remote.team/discus/28DC490B-BE6B-5496-9BD5-614F11A796A9
  745.      *
  746.      * @param int $materialId ид материала
  747.      * @return bool true - материал в списке
  748.      */
  749.     private static function checkIfMaterialNeedMark(int $materialId): bool
  750.     {
  751.         return $materialId === 28 // Винил
  752.             || $materialId === 32 // Пробка
  753.             || $materialId === 17 // Агломерат
  754.             || $materialId === 21 // Цемент
  755.             || $materialId === 10 // Стекло
  756.             || $materialId === 1// Натуральный камень
  757.     }
  758. }