| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 | 
							- <?php
 
- /**
 
-  *
 
-  * PHP Pro Bid $Id$ CIRslYEf3mfCjDYVWa6h00QEiY+aTS/CqM7LtuIw6fY=
 
-  *
 
-  * @link        http://www.phpprobid.com
 
-  * @copyright   Copyright (c) 2016 Online Ventures Software & CodeCube SRL
 
-  * @license     http://www.phpprobid.com/license Commercial License
 
-  *
 
-  * @version     7.8
 
-  */
 
- /**
 
-  * listing stock levels form element
 
-  * allows the creation of the composite element used if we have product attributes
 
-  * product attributes are generated from custom fields
 
-  */
 
- namespace Ppb\Form\Element;
 
- use Cube\Form\Element,
 
-     Cube\Controller\Front,
 
-     Ppb\View\Helper\ProductAttributes as ProductAttributesHelper;
 
- class StockLevels extends TextAutocomplete
 
- {
 
-     const FIELD_OPTIONS = 'options';
 
-     const FIELD_QUANTITY = 'quantity';
 
-     const FIELD_PRICE = 'price';
 
-     /**
 
-      *
 
-      * custom fields array
 
-      *
 
-      * @var array
 
-      */
 
-     protected $_customFields;
 
-     /**
 
-      *
 
-      * form data - needed to display only selected product attributes
 
-      *
 
-      * @var array
 
-      */
 
-     protected $_formData;
 
-     /**
 
-      *
 
-      * whether we have an empty stock levels element
 
-      *
 
-      * @var bool
 
-      */
 
-     protected $_empty = false;
 
-     public function __construct($name)
 
-     {
 
-         parent::__construct($name);
 
-         $baseUrl = Front::getInstance()->getRequest()->getBaseUrl();
 
-         $translate = $this->getTranslate();
 
-         $this->setBodyCode('<script type="text/javascript" src="' . $baseUrl . '/js/bootbox.min.js"></script>')
 
-             ->setBodyCode(
 
-                 "<script type=\"text/javascript\">
 
-                     $(document).on('click', 'button[name=\"" . $this->_name . "\"]', function(e) {
 
-                         e.preventDefault();
 
-                         var btn = $(this);
 
-                         bootbox.confirm(\"" . $translate->_('Do you wish to set the same quantity value on all fields below?') . "\", function(result) {
 
-                             if (result) {
 
-                                 var quantity = btn.closest('div').find('input[name*=\"" . self::FIELD_QUANTITY . "\"]').val();
 
-                                 btn.closest('.form-group').find('input[name*=\"" . self::FIELD_QUANTITY . "\"]').val(quantity);
 
-                             }
 
-                         });
 
-                     });
 
-                 </script>");
 
-     }
 
-     /**
 
-      *
 
-      * get custom fields array
 
-      *
 
-      * @return array
 
-      */
 
-     public function getCustomFields()
 
-     {
 
-         return $this->_customFields;
 
-     }
 
-     /**
 
-      *
 
-      * set custom fields array
 
-      *
 
-      * @param array $customFields
 
-      *
 
-      * @return $this
 
-      */
 
-     public function setCustomFields($customFields)
 
-     {
 
-         $this->_customFields = $customFields;
 
-         return $this;
 
-     }
 
-     /**
 
-      *
 
-      * get form data
 
-      *
 
-      * @param string $key
 
-      *
 
-      * @return mixed
 
-      */
 
-     public function getFormData($key = null)
 
-     {
 
-         if ($key !== null) {
 
-             if (!empty($this->_formData[$key])) {
 
-                 return $this->_formData[$key];
 
-             }
 
-             return null;
 
-         }
 
-         return $this->_formData;
 
-     }
 
-     /**
 
-      *
 
-      * set form data
 
-      *
 
-      * @param array $formData
 
-      *
 
-      * @return $this
 
-      */
 
-     public function setFormData($formData)
 
-     {
 
-         $this->_formData = $formData;
 
-         return $this;
 
-     }
 
-     /**
 
-      *
 
-      * check empty flag
 
-      *
 
-      * @return boolean
 
-      */
 
-     public function isEmpty()
 
-     {
 
-         return $this->_empty;
 
-     }
 
-     /**
 
-      *
 
-      * set empty flag
 
-      *
 
-      * @param boolean $empty
 
-      *
 
-      * @return $this
 
-      */
 
-     public function setEmpty($empty)
 
-     {
 
-         $this->_empty = $empty;
 
-         return $this;
 
-     }
 
-     public function render()
 
-     {
 
-         $output = null;
 
-         $array = array();
 
-         $customFields = $this->getCustomFields();
 
-         foreach ($customFields as $key => $customField) {
 
-             if ($customField['product_attribute']) {
 
-                 $customFields[$key]['multiOptions']
 
-                     = $multiOptions
 
-                     = \Ppb\Utility::unserialize($customField['multiOptions']);
 
-                 if (!empty($multiOptions['key'])) {
 
-                     $id = intval(str_replace('custom_field_', '', $customField['id']));
 
-                     $value = array_filter($multiOptions['key']);
 
-                     $customFieldData = (array)$this->getFormData($customField['id']);
 
-                     $array[$id] = array_intersect($customFieldData, $value);
 
-                 }
 
-             }
 
-         }
 
-         $cartesian = array_filter(
 
-             $this->_cartesian($array));
 
-         if (count($cartesian) > 0) {
 
-             $values = $this->getValue();
 
-             $translate = $this->getTranslate();
 
-             $cloneButton = true;
 
-             $helper = new ProductAttributesHelper();
 
-             foreach ($cartesian as $key => $row) {
 
-                 $value = str_ireplace(
 
-                     array("'", '"'),
 
-                     array(''', '"'), serialize($row));
 
-                 $price = null;
 
-                 $quantity = null;
 
-                 foreach ((array)$values as $k => $v) {
 
-                     if (!empty($values[$k][self::FIELD_OPTIONS])) {
 
-                         if (\Ppb\Utility::unserialize($values[$k][self::FIELD_OPTIONS]) == $row) {
 
-                             $quantity = (!empty($values[$k][self::FIELD_QUANTITY])) ?
 
-                                 abs(intval($values[$k][self::FIELD_QUANTITY])) : null;
 
-                             $price = (!empty($values[$k][self::FIELD_PRICE])) ?
 
-                                 abs(floatval($values[$k][self::FIELD_PRICE])) : null;
 
-                         }
 
-                     }
 
-                 }
 
-                 $output .= '<input type="hidden" name="' . $this->_name . '[' . $key . '][' . self::FIELD_OPTIONS . ']" '
 
-                     . 'value="' . $value . '">';
 
-                 $this->removeAttribute('placeholder')->addAttribute('placeholder', $translate->_('Qty'));
 
-                 $output .= '<label class="col-sm-4 control-label">' . $helper->productAttributes($row)->display() . '</label>'
 
-                     . '<div class="col-sm-8">'
 
-                     . ' <input type="text" name="' . $this->_name . '[' . $key . '][' . self::FIELD_QUANTITY . ']" '
 
-                     . $this->renderAttributes()
 
-                     . ' value="' . $quantity . '" '
 
-                     . $this->_endTag;
 
-                 if ($cloneButton === true) {
 
-                     $output .= '<button type="button" name="' . $this->_name . '" class="btn btn-link">
 
-                             <i class="fa fa-clone" alt="' . $translate->_('Copy Quantity Value') . '"></i>
 
-                         </button>';
 
-                 }
 
-                 $this->removeAttribute('placeholder')->addAttribute('placeholder', $translate->_('Price'));
 
-                 $output .= ' '
 
-                     . $translate->_('Add Extra:')
 
-                     . ' <input type="text" name="' . $this->_name . '[' . $key . '][' . self::FIELD_PRICE . ']" '
 
-                     . $this->renderAttributes()
 
-                     . ' value="' . $price . '" '
 
-                     . $this->_endTag;
 
-                 $output .= '</div>'
 
-                     . '<div class="clearfix"></div>';
 
-                 $cloneButton = false;
 
-             }
 
-         }
 
-         if ($output == null) {
 
-             $this->setEmpty(true);
 
-             $hidden = new Element\Hidden($this->_name);
 
-             $output = $hidden->render();
 
-         }
 
-         return '<div class="stock-levels">' . $output . '</div>';
 
-     }
 
-     /**
 
-      *
 
-      * create the cartesian product of the input array
 
-      *
 
-      * @param array $input
 
-      *
 
-      * @return array
 
-      */
 
-     protected function _cartesian($input)
 
-     {
 
-         // filter out empty values
 
-         $input = array_filter($input);
 
-         $result = array(array());
 
-         foreach ($input as $key => $values) {
 
-             $append = array();
 
-             foreach ($result as $product) {
 
-                 foreach ($values as $item) {
 
-                     $product[$key] = $item;
 
-                     $append[] = $product;
 
-                 }
 
-             }
 
-             $result = $append;
 
-         }
 
-         return $result;
 
-     }
 
- }
 
 
  |