src/Product/BasicData/BasicProductData.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Klaravik\Product\BasicData;
  4. use Klaravik\Enum\ProductFieldsEnum;
  5. use Klaravik\Exception\RepositoryException;
  6. use Klaravik\Model\ProductField;
  7. use Klaravik\Model\ProductValue;
  8. use Klaravik\Repository\ProductFieldRepository;
  9. use Klaravik\Repository\ProductValueRepository;
  10. use Klaravik\Translate\Trans;
  11. class BasicProductData
  12. {
  13.     private Trans $trans;
  14.     public function __construct(Trans $trans)
  15.     {
  16.         $this->trans $trans;
  17.     }
  18.     /**
  19.      * @param int $products_id
  20.      * @param int $categories_id
  21.      * @return array
  22.      */
  23.     public function getProductBasicData(int $products_idint $categories_id): array
  24.     {
  25.         try {
  26.             $getProductBasicDataByCategoriesId = (new ProductFieldRepository())->getProductBasicDataByCategoriesId($categories_id);
  27.         } catch (RepositoryException $e) {
  28.             $getProductBasicDataByCategoriesId = [];
  29.         }
  30.         $elements = [];
  31.         $elements['basicData'] = [];
  32.         $elements['basicData'][$this->trans->get('text_label_page-product_basicdata-information-headline-group')] = [];
  33.         $elements['highLight'] = [];
  34.         $elements['loadingHelp'] = '';
  35.         $elements['loadingHelpText'] = '';
  36.         foreach ($getProductBasicDataByCategoriesId as $basicDataMain) {
  37.             if (in_array($basicDataMain->getType(), [1235], true)) {
  38.                 $elements $this->getTextFieldsBasicData($basicDataMain$products_id$elements);
  39.             }
  40.             if ($basicDataMain->getType() === 4) { // Checkboxes
  41.                 $elements $this->getCheckBoxDataBasic($basicDataMain$products_id$elements);
  42.             }
  43.         }
  44.         return $elements;
  45.     }
  46.     /**
  47.      * @param ProductField $productField
  48.      * @param int $products_id
  49.      * @param array $elements
  50.      * @return array
  51.      */
  52.     protected function getTextFieldsBasicData(ProductField $productFieldint $products_id, array $elements) : array
  53.     {
  54.         try {
  55.             $productValues = (new ProductValueRepository())->getPublicFieldsByTypeText($productField->getId(), $products_id);
  56.         } catch (RepositoryException $e) {
  57.             $productValues = [];
  58.         }
  59.         if
  60.         (empty($productField->getHeadlineGroup()) || // Map all empty headline-groups that has no name yet
  61.             (strpos($productField->getHeadlineGroup(), '!') === 0)) { // Map headLineGroups that start with '!'
  62.             $productField->setHeadlineGroup(
  63.                 $this->trans->get('text_label_page-product_basicdata-information-headline-group')
  64.             );
  65.         }
  66.         foreach ($productValues as $productFieldModel) {
  67.             if ($productField->getSystemName() === ProductFieldsEnum::LOADINGHELP_TITLE()->label) {
  68.                 try {
  69.                     $loadingHelp = (new ProductFieldRepository())->getSelectedSystemName($productFieldModel->getRefid());
  70.                     $elements['loadingHelp'] = $loadingHelp;
  71.                     $elements['loadingHelpText'] = $productFieldModel->getValue();
  72.                 } catch (RepositoryException $e) {}
  73.                 continue;
  74.             }
  75.             $productValuesModel = new ProductValue();
  76.             $productValuesModel->setValue($productFieldModel->getValue());
  77.             if ($productField->getHighlight() === 1) {
  78.                 $elements['highLight'][$productField->getValue()] = $productValuesModel;
  79.             } else {
  80.                 $elements['basicData'][$productField->getHeadlineGroup()][$productField->getValue()][] = $productValuesModel;
  81.             }
  82.         }
  83.         return $elements;
  84.     }
  85.     /**
  86.      * @param ProductField $productField
  87.      * @param int $products_id
  88.      * @param array $elements
  89.      * @return array
  90.      */
  91.     protected function getCheckBoxDataBasic(ProductField $productFieldint $products_id, array $elements): array
  92.     {
  93.         try {
  94.             $productValueRepository = new ProductValueRepository();
  95.             $productValues $productValueRepository->getPublicFieldsByTypeCheckbox($productField->getId(), $products_id);
  96.         } catch (RepositoryException $e) {
  97.             return $elements;
  98.         }
  99.         $checkBoxProductFields '';
  100.         foreach ($productValues as $productFieldModel) {
  101.             // Checkboxes can have multiple values, so let's merge them.
  102.             $checkBoxProductFields .= $productFieldModel->getValue() . ' ' $productFieldModel->getExtraValue() . PHP_EOL;
  103.         }
  104.         if
  105.             (empty($productField->getHeadlineGroup()) || // Map all empty headline-groups that has no name yet
  106.             (strpos($productField->getHeadlineGroup(), '!') === 0)) { // Map headLineGroups that start with '!'
  107.             $productField->setHeadlineGroup(
  108.                 $this->trans->get('text_label_page-product_basicdata-information-headline-group')
  109.             );
  110.         }
  111.         $productValuesModel = new ProductValue();
  112.         $productValuesModel->setValue(trim($checkBoxProductFields));
  113.         if ($productField->getHighlight() === 1) {
  114.             $elements['highLight'][$productField->getValue()] = $productValuesModel;
  115.         } else {
  116.             $elements['basicData'][$productField->getHeadlineGroup()][$productField->getValue()][] = $productValuesModel;
  117.         }
  118.         return $elements;
  119.     }
  120. }