public function buildCombinationsAction()
    {
        // Check current user authorization
        if (null !== $response = $this->checkAuth($this->resourceCode, array(), AccessManager::UPDATE)) {
            return $response;
        }

        $changeForm = $this->createForm(AdminForm::PRODUCT_COMBINATION_GENERATION);

        try {
            // Check the form against constraints violations
            $form = $this->validateForm($changeForm, "POST");

            // Get the form field values
            $data = $form->getData();

            // Rework attributes_av array, to build an array which contains all combinations,
            // in the form combination[] = array of combination attributes av IDs
            //
            // First, create an array of attributes_av ID in the form $attributes_av_list[$attribute_id] = array of attributes_av ID
            // from the list of attribute_id:attributes_av ID from the form.
            $combinations = $attributes_av_list = $tmp = array();

            foreach ($data['attribute_av'] as $item) {
                list($attribute_id, $attribute_av_id) = explode(':', $item);

                if (! isset($attributes_av_list[$attribute_id])) {
                    $attributes_av_list[$attribute_id] = array();
                }

                $attributes_av_list[$attribute_id][] = $attribute_av_id;
            }

            // Next, recursively combine array
            $this->combine($attributes_av_list, $combinations, $tmp);

            // Create event
            $event = new ProductCombinationGenerationEvent(
                $this->getExistingObject(),
                $data['currency'],
                $combinations
            );

            $event
                ->setReference($data['reference'] == null ? '' : $data['reference'])
                ->setPrice($data['price'] == null ? 0 : $data['price'])
                ->setWeight($data['weight'] == null ? 0 : $data['weight'])
                ->setQuantity($data['quantity'] == null ? 0 : $data['quantity'])
                ->setSalePrice($data['sale_price'] == null ? 0 : $data['sale_price'])
                ->setOnsale($data['onsale'] == null ? false : $data['onsale'])
                ->setIsnew($data['isnew'] == null ? false : $data['isnew'])
                ->setEanCode($data['ean_code'] == null ? '' : $data['ean_code'])
            ;

            $this->dispatch(TheliaEvents::PRODUCT_COMBINATION_GENERATION, $event);

            // Log object modification
            $this->adminLogAppend(
                $this->resourceCode,
                AccessManager::CREATE,
                sprintf(
                    "Combination generation for product reference %s",
                    $event->getProduct()->getRef()
                ),
                $event->getProduct()->getId()
            );

           // Redirect to the success URL
            return $this->generateSuccessRedirect($changeForm);
        } catch (FormValidationException $ex) {
            // Form cannot be validated
            $error_msg = $this->createStandardFormValidationErrorMessage($ex);
        } catch (\Exception $ex) {
            // Any other error
            $error_msg = $ex->getMessage();
        }

        $this->setupFormErrorContext(
            $this->getTranslator()->trans("Combination builder"),
            $error_msg,
            $changeForm,
            $ex
        );

        // At this point, the form has errors, and should be redisplayed.
        return $this->renderEditionTemplate();
    }
public function buildCombinationsAction()
    {
        // Check current user authorization
        if (null !== $response = $this->checkAuth($this->resourceCode, array(), AccessManager::UPDATE)) {
            return $response;
        }

        $changeForm = $this->createForm(AdminForm::PRODUCT_COMBINATION_GENERATION);

        try {
            // Check the form against constraints violations
            $form = $this->validateForm($changeForm, "POST");

            // Get the form field values
            $data = $form->getData();

            // Rework attributes_av array, to build an array which contains all combinations,
            // in the form combination[] = array of combination attributes av IDs
            //
            // First, create an array of attributes_av ID in the form $attributes_av_list[$attribute_id] = array of attributes_av ID
            // from the list of attribute_id:attributes_av ID from the form.
            $combinations = $attributes_av_list = $tmp = array();

            foreach ($data['attribute_av'] as $item) {
                list($attribute_id, $attribute_av_id) = explode(':', $item);

                if (! isset($attributes_av_list[$attribute_id])) {
                    $attributes_av_list[$attribute_id] = array();
                }

                $attributes_av_list[$attribute_id][] = $attribute_av_id;
            }

            // Next, recursively combine array
            $this->combine($attributes_av_list, $combinations, $tmp);

            // Create event
            $event = new ProductCombinationGenerationEvent(
                $this->getExistingObject(),
                $data['currency'],
                $combinations
            );

            $event
                ->setReference($data['reference'] == null ? '' : $data['reference'])
                ->setPrice($data['price'] == null ? 0 : $data['price'])
                ->setWeight($data['weight'] == null ? 0 : $data['weight'])
                ->setQuantity($data['quantity'] == null ? 0 : $data['quantity'])
                ->setSalePrice($data['sale_price'] == null ? 0 : $data['sale_price'])
                ->setOnsale($data['onsale'] == null ? false : $data['onsale'])
                ->setIsnew($data['isnew'] == null ? false : $data['isnew'])
                ->setEanCode($data['ean_code'] == null ? '' : $data['ean_code'])
            ;

            $this->dispatch(TheliaEvents::PRODUCT_COMBINATION_GENERATION, $event);

            // Log object modification
            $this->adminLogAppend(
                $this->resourceCode,
                AccessManager::CREATE,
                sprintf(
                    "Combination generation for product reference %s",
                    $event->getProduct()->getRef()
                ),
                $event->getProduct()->getId()
            );

           // Redirect to the success URL
            return $this->generateSuccessRedirect($changeForm);
        } catch (FormValidationException $ex) {
            // Form cannot be validated
            $error_msg = $this->createStandardFormValidationErrorMessage($ex);
        } catch (\Exception $ex) {
            // Any other error
            $error_msg = $ex->getMessage();
        }

        $this->setupFormErrorContext(
            $this->getTranslator()->trans("Combination builder"),
            $error_msg,
            $changeForm,
            $ex
        );

        // At this point, the form has errors, and should be redisplayed.
        return $this->renderEditionTemplate();
    }
public function buildCombinationsAction ( ) { // Check current user authorization if ( null !== $ response = $ this -> checkAuth ( $ this -> resourceCode , array ( ) , AccessManager :: UPDATE ) ) { return $ response ; } $ changeForm = $ this -> createForm ( AdminForm :: PRODUCT_COMBINATION_GENERATION ) ; try { // Check the form against constraints violations $ form = $ this -> validateForm ( $ changeForm , "POST" ) ; // Get the form field values $ data = $ form -> getData ( ) ; // Rework attributes_av array, to build an array which contains all combinations, // in the form combination[] = array of combination attributes av IDs // // First, create an array of attributes_av ID in the form $attributes_av_list[$attribute_id] = array of attributes_av ID // from the list of attribute_id:attributes_av ID from the form. $ combinations = $ attributes_av_list = $ tmp = array ( ) ; foreach ( $ data [ 'attribute_av' ] as $ item ) { list ( $ attribute_id , $ attribute_av_id ) = explode ( ':' , $ item ) ; if ( ! isset ( $ attributes_av_list [ $ attribute_id ] ) ) { $ attributes_av_list [ $ attribute_id ] = array ( ) ; } $ attributes_av_list [ $ attribute_id ] [ ] = $ attribute_av_id ; } // Next, recursively combine array $ this -> combine ( $ attributes_av_list , $ combinations , $ tmp ) ; // Create event $ event = new ProductCombinationGenerationEvent ( $ this -> getExistingObject ( ) , $ data [ 'currency' ] , $ combinations ) ; $ event -> setReference ( $ data [ 'reference' ] == null ? '' : $ data [ 'reference' ] ) -> setPrice ( $ data [ 'price' ] == null ? 0 : $ data [ 'price' ] ) -> setWeight ( $ data [ 'weight' ] == null ? 0 : $ data [ 'weight' ] ) -> setQuantity ( $ data [ 'quantity' ] == null ? 0 : $ data [ 'quantity' ] ) -> setSalePrice ( $ data [ 'sale_price' ] == null ? 0 : $ data [ 'sale_price' ] ) -> setOnsale ( $ data [ 'onsale' ] == null ? false : $ data [ 'onsale' ] ) -> setIsnew ( $ data [ 'isnew' ] == null ? false : $ data [ 'isnew' ] ) -> setEanCode ( $ data [ 'ean_code' ] == null ? '' : $ data [ 'ean_code' ] ) ; $ this -> dispatch ( TheliaEvents :: PRODUCT_COMBINATION_GENERATION , $ event ) ; // Log object modification $ this -> adminLogAppend ( $ this -> resourceCode , AccessManager :: CREATE , sprintf ( "Combination generation for product reference %s" , $ event -> getProduct ( ) -> getRef ( ) ) , $ event -> getProduct ( ) -> getId ( ) ) ; // Redirect to the success URL return $ this -> generateSuccessRedirect ( $ changeForm ) ; } catch ( FormValidationException $ ex ) { // Form cannot be validated $ error_msg = $ this -> createStandardFormValidationErrorMessage ( $ ex ) ; } catch ( \ Exception $ ex ) { // Any other error $ error_msg = $ ex -> getMessage ( ) ; } $ this -> setupFormErrorContext ( $ this -> getTranslator ( ) -> trans ( "Combination builder" ) , $ error_msg , $ changeForm , $ ex ) ; // At this point, the form has errors, and should be redisplayed. return $ this -> renderEditionTemplate ( ) ; }
Build combinations from the combination output builder
Build combinations from the combination output builder