src/AppBundle/Service/ProductsService.php line 224

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Service;
  3. use Pimcore\Model\DataObject\ClassDefinition\Data as FieldsetData;
  4. use Pimcore\Model\DataObject\AbstractObject;
  5. use Pimcore\Model\DataObject\DataObject\Data\ElementMetadata;
  6. use Pimcore\Model\DataObject\Download;
  7. class ProductsService {
  8.     /**
  9.      * @param $product
  10.      * @return array
  11.      */
  12.     public function buildKeyBenefitsArrayToDisplay($product) {
  13.         $keyBenefits = [];
  14.         strlentrim$product->getKeybenefit1())) ? $keyBenefits[] = $product->getKeybenefit1() : null;
  15.         strlentrim$product->getKeybenefit2())) ? $keyBenefits[] = $product->getKeybenefit2() : null;
  16.         strlentrim$product->getKeybenefit3())) ? $keyBenefits[] = $product->getKeybenefit3() : null;
  17.         strlentrim$product->getKeybenefit4())) ? $keyBenefits[] = $product->getKeybenefit4() : null;
  18.         return $keyBenefits;
  19.     }
  20.     public function buildBedienkonzepteList($bedienkonzepte$locale) {
  21.         $bedienkonzepteInfo = [];
  22.         foreach ($bedienkonzepte as $item) {
  23.             $bedienkonzepteInfo[] = [
  24.                 'name' => $item->getLocalizedfields()->getLocalizedValue('name'$locale),
  25.                 'description' => $item->getLocalizedfields()->getLocalizedValue('description'$locale),
  26.                 'keyBenefits' => $item->getLocalizedfields()->getLocalizedValue('keybenefits'$locale),
  27.                 'plusBenefits' => $item->getLocalizedfields()->getLocalizedValue('plusbenefits'$locale),
  28.                 'image' => $item->getImage(),
  29.             ];
  30.         }
  31.         return $bedienkonzepteInfo;
  32.     }
  33.     public function buildHeaderGallery($product) {
  34.         $images = [];
  35.         if ($product->getGallery() && $galleryHeaderImages $product->getGallery()->getItems()) {
  36.             foreach ($galleryHeaderImages as $image) {
  37.                 if ($image !== null && $image->getImage()) {
  38.                     $images[] = $image->getImage();
  39.                 }
  40.             }
  41.         }
  42.         return $images;
  43.     }
  44.     public function buildApplicationGallery($product) {
  45.         $images = [];
  46.         if ($product->getGalleryapplication() && $galleryImages $product->getGalleryapplication()->getItems()) {
  47.             foreach ($galleryImages as $image) {
  48.                 if ($image !== null && $image->getImage()) {
  49.                     $images[] = [
  50.                         'image' => $image->getImage(),
  51.                         'description' => $image->getImage()->getMetadata('title'),
  52.                         'copyright' => $image->getImage()->getMetadata('copyright')
  53.                     ];
  54.                 }
  55.             }
  56.         }
  57.         return $images;
  58.     }
  59.     public function buildHighlightsList($product) {
  60.         $highlights = [];
  61.         foreach ($product->getHighlights() as $highlight) {
  62.             $highlights[$highlight['highlights_headline']->getData()] = $highlight['highlights_text']->getData();
  63.         }
  64.         return $highlights;
  65.     }
  66.     public function buildSimilarProductsList($product$locale) {
  67.         $otherProducts = [];
  68.         $similarProducts $product->getParent()->getChildren([AbstractObject::OBJECT_TYPE_VARIANT]);
  69.         foreach ($similarProducts as $similarProduct) {
  70.             if ($product !== $similarProduct) {
  71.                 $otherProducts[] = [
  72.                     'productObject' => $similarProduct,
  73.                     'name' => $similarProduct->getKey(),
  74.                     'image' => $similarProduct->getTeaserImage(),
  75.                     'technology' => $similarProduct->getProduct_cat() ? $similarProduct->getProduct_cat()->getLocalizedfields()->getLocalizedValue('name'$locale) : '',
  76.                     'details' => $this->buildKeyBenefitsArrayToDisplay($similarProduct)
  77.                 ];
  78.             }
  79.         }
  80.         return $otherProducts;
  81.     }
  82.     public function buildTechnicalDataTable($product) {
  83.         $technicalDataDetails = [];
  84.         if ($product->getAttributes() && $attributes $product->getAttributes()->getItems()) {
  85.             foreach ($attributes as $fieldcollection) {
  86.                 switch( get_class($fieldcollection)) {
  87.                     case 'Pimcore\Model\DataObject\Fieldcollection\Data\Netz':
  88.                         //$technicalDataDetails = $this->buildNetzTechnicalDataTables($fieldcollection, $technicalDataDetails);
  89.                         $technicalDataDetails $this->buildTechnicalDataTableContent$technicalDataDetails$fieldcollection);
  90.                         break;
  91.                     default:
  92.                         $technicalDataDetails $this->buildTechnicalDataTableContent$technicalDataDetails$fieldcollection);
  93.                 }
  94.             }
  95.         }
  96.         return $technicalDataDetails;
  97.     }
  98.     private function datatableSetEmptyValuesNull$tableData$columnTypes) {
  99.         foreach( $tableData as $rowIdx=>$row ) {
  100.             foreach( $row as $col=>$value) {
  101.                 $colType $columnTypes[$col];
  102.                 $tableData[$rowIdx][$col] = $colType;
  103.                 switch( $colType) {
  104.                     case 'text':
  105.                         if (strlen($value)) {
  106.                             $tableData[$rowIdx][$col] = array( 'text' => $value);
  107.                         } else {
  108.                             $tableData[$rowIdx][$col] = null;
  109.                         }
  110.                         break;
  111.                     case 'number':
  112.                         if (is_string$value)) {
  113.                             if (ctype_digit($value)) {
  114.                                 $value = (int)$value;
  115.                             } else if (is_numeric$value)){
  116.                                 $value = (float)$value;
  117.                             }
  118.                         }
  119.                         if (is_string$value) && ( ! strlen($value) || $value === '0')) {
  120.                             $tableData[$rowIdx][$col] = null;
  121.                         } else if (is_int($value) && $value === 0) {
  122.                             $tableData[$rowIdx][$col] = null;
  123.                         } else if (is_float($value) && $value === 0.0) {
  124.                             $tableData[$rowIdx][$col] = null;
  125.                         } else {
  126.                             if (is_int$value)) {
  127.                                 $tableData[$rowIdx][$col] = array( 'int' => $value);
  128.                             } else if (is_float$value)) {
  129.                                 $tableData[$rowIdx][$col] = array( 'float' => $value);
  130.                             } else if (is_string$value)) {
  131.                                 $tableData[$rowIdx][$col] = array( 'number' => $value);
  132.                             }
  133.                         }
  134.                         break;
  135.                     case 'bool':
  136.                         if ($value) {
  137.                             $tableData[$rowIdx][$col] = array( 'bool' => true);
  138.                         } else {
  139.                             $tableData[$rowIdx][$col] = null;
  140.                         }
  141.                         break;
  142.                     default:
  143.                 }
  144.             }
  145.         }
  146.         return $tableData;
  147.     }
  148.     private function datatableRemoveEmptyRows$tableData) {
  149.         $ret = array();
  150.         foreach( $tableData as $rowIdx=>$row ) {
  151.             $valueIsSet false;
  152.             foreach( $row as $col=>$value) {
  153.                 if ($value !== null) {
  154.                     $valueIsSet true;
  155.                     break;
  156.                 }
  157.             }
  158.             if ($valueIsSet) {
  159.                 $ret[$rowIdx] = $row;
  160.             }
  161.         }
  162.         return $ret;
  163.     }
  164.     private function datatableMergeRange$tableData$colValue$colMin$colMax) {
  165.         $ret = array();
  166.         foreach( $tableData as $rowIdx=>$row ) {
  167.             $value = array();
  168.             if (isset( $row[$colMin])) {
  169.                 $value[] = $row[$colMin];
  170.             } else {
  171.                 $value[] = null;
  172.             }
  173.             if (isset( $row[$colMax])) {
  174.                 $value[] = $row[$colMax];
  175.             } else {
  176.                 $value[] = null;
  177.             }
  178.             $ret[$rowIdx][$colValue] = array('range'=>$value);
  179.         }
  180.         return $ret;
  181.     }
  182.     private function datatableMergeDimensions$tableData$colValue$cols) {
  183.         $ret = array();
  184.         foreach( $tableData as $rowIdx=>$row ) {
  185.             $value = array();
  186.             foreach( $cols as $col) {
  187.                 if (isset( $row[$col])) {
  188.                     $value[] = $row[$col];
  189.                 } else {
  190.                     $value[] = null;
  191.                 }
  192.             }
  193.             $ret[$rowIdx][$colValue] = array('dimensions'=>$value);
  194.         }
  195.         return $ret;
  196.     }
  197.     private function datatableGetColumnNames$tableData) {
  198.         $columnNames = array();
  199.         foreach( $tableData as $rowIdx=>$row ) {
  200.             foreach( $row as $col=>$value) {
  201.                 if (!in_array$col$columnNames) && $value !== null) {
  202.                     $columnNames[] = $col;
  203.                 }
  204.             }
  205.         }
  206.         return $columnNames;
  207.     }
  208.     private function buildTechnicalDataTableContent($technicalDataDetails$fieldcollection) {
  209.         foreach( $fieldcollection->getDefinition()->getFielddefinitions() as $field=>$fieldData) {
  210.             if ($fieldData instanceof FieldsetData\StructuredTable) {
  211.                 $technicalDataDetails $this->buildTechnicalDataTableContentDatatable($technicalDataDetails$fieldcollection$field$fieldcollection->get($field), $fieldData);
  212.             } else if ($fieldData instanceof FieldsetData\Multiselect) {
  213.                 $technicalDataDetails $this->buildTechnicalDataTableContentMultiselect($technicalDataDetails$fieldcollection$field$fieldcollection->get($field));
  214.             } else if ($fieldData instanceof FieldsetData\Block) {
  215.                 // Ignore for now
  216.             } else {
  217.                 throw new \Exception('Unhandles Fieldset attribute: '.get_class($fieldData));
  218.             }
  219.         }
  220.         return $technicalDataDetails;
  221.     }
  222.     private function buildTechnicalDataTableContentDatatable($technicalDataDetails$fieldcollection$tabelName$table$tableDefinition) {
  223.         $columnTypes = array();
  224.         foreach( $tableDefinition->getCols() as $col) {
  225.             $columnTypes[$col['key']] = $col['type'];
  226.         }
  227.         $tableData $this->datatableSetEmptyValuesNull$table->getData(), $columnTypes);
  228.         $tableData $this->datatableRemoveEmptyRows$tableData);
  229.         $columnNames $this->datatableGetColumnNames$tableData);
  230.         if (in_array('min'$columnNames) && in_array('max'$columnNames)) {
  231.             $tableData $this->datatableMergeRange$tableData'wert''min''max');
  232.             $columnNames $this->datatableGetColumnNames$tableData);
  233.         } else if (in_array('length'$columnNames) && in_array('width'$columnNames) && in_array('height'$columnNames)) {
  234.             $tableData $this->datatableMergeDimensions$tableData'wert', array( 'length''width''height'));
  235.             $columnNames $this->datatableGetColumnNames$tableData);
  236.         }
  237.         $entry = array(
  238.             'class' => get_class($fieldcollection),
  239.             'object' => $fieldcollection,
  240.             'title' => 'product.technical_data.table_header.'.$fieldcollection->getType().'.'.$tabelName,
  241.             'tables' => $tableData,
  242.             'multipleColumns' => false,
  243.             'columnNames' => $columnNames,
  244.             'info' => $tableData
  245.         );
  246.         if (count($columnNames) && count($tableData)) {
  247.             $technicalDataDetails[$entry['title'].'.'.count($technicalDataDetails)] = $entry;
  248.         }
  249.         return $technicalDataDetails;
  250.     }
  251.     private function buildTechnicalDataTableContentMultiselect($technicalDataDetails$fieldcollection$fieldName$field) {
  252.         $entry = array(
  253.             'class' => get_class($fieldcollection),
  254.             'object' => $fieldcollection,
  255.             'title' => 'product.technical_data.table_header.'.$fieldcollection->getType().'.'.$fieldName,
  256.             //So wars vorher und so ists einfach falsch, da $tableData nicht definiert ist
  257.             //'tables' => $tableData,
  258.             'tables' => array( $fieldName => array( 'wert' => array( 'csv'=> $field))),
  259.             'multipleColumns' => false,
  260.             'columnNames' => array('wert'),
  261.             'info' => array( $fieldName => array( 'wert' => array( 'csv'=> $field)))
  262.         );
  263.         $technicalDataDetails[$entry['title'].'.'.count($technicalDataDetails)] = $entry;
  264.         return $technicalDataDetails;
  265.     }
  266.     public function buildDownloadList($product$locale) {
  267.         $downloadList = [];
  268.         if ($downloads $product->getDownloadsobjects()) {
  269.             /** @var Download $item */
  270.             foreach ($downloads as $item) {
  271.                 if ($item->getDownloadObject()) {
  272.                     $downloadList[] = [
  273.                         'title' => $item->getTitle() ? $item->getTitle() : $item->getDownloadObject()->getKey(),
  274.                         'downloadObject' => $item->getDownloadObject()
  275.                     ];
  276.                 }
  277.             }
  278.         }
  279.         if ($downloads $product->getDownloads()) {
  280.             /** @var ElementMetadata $asset */
  281.             foreach ($downloads as $asset) {
  282.                 if ($asset->getElement()) {
  283.                     $downloadList[] = [
  284.                         'title' => $asset->getElement()->getKey(),
  285.                         'downloadObject' => $asset->getElement()
  286.                     ];
  287.                 }
  288.             }
  289.         }
  290.         return $downloadList;
  291.     }
  292. }