/**
  * Create produc custom options Mage_XmlConnect_Model_Simplexml_Element object
  *
  * @param Mage_Catalog_Model_Product $product
  * @return Mage_XmlConnect_Model_Simplexml_Element
  */
 public function getProductCustomOptionsXmlObject(Mage_Catalog_Model_Product $product)
 {
     $xmlModel = new Mage_XmlConnect_Model_Simplexml_Element('<product></product>');
     $optionsNode = $xmlModel->addChild('options');
     if (!$product->getId()) {
         return $xmlModel;
     }
     $xmlModel->addAttribute('id', $product->getId());
     if (!$product->isSaleable() || !sizeof($product->getOptions())) {
         return $xmlModel;
     }
     foreach ($product->getOptions() as $option) {
         $optionNode = $optionsNode->addChild('option');
         $type = $this->_getOptionTypeForXmlByRealType($option->getType());
         $code = 'options[' . $option->getId() . ']';
         if ($type == self::OPTION_TYPE_CHECKBOX) {
             $code .= '[]';
         }
         $optionNode->addAttribute('code', $code);
         $optionNode->addAttribute('type', $type);
         $optionNode->addAttribute('label', $xmlModel->xmlentities(strip_tags($option->getTitle())));
         if ($option->getIsRequire()) {
             $optionNode->addAttribute('is_required', 1);
         }
         /**
          * Process option price
          */
         $price = Mage::helper('xmlconnect')->formatPriceForXml($option->getPrice());
         if ($price > 0.0) {
             $optionNode->addAttribute('price', $price);
             $formatedPrice = Mage::app()->getStore($product->getStoreId())->formatPrice($price, false);
             $optionNode->addAttribute('formated_price', $formatedPrice);
         }
         if ($type == self::OPTION_TYPE_CHECKBOX || $type == self::OPTION_TYPE_SELECT) {
             foreach ($option->getValues() as $value) {
                 $valueNode = $optionNode->addChild('value');
                 $valueNode->addAttribute('code', $value->getId());
                 $valueNode->addAttribute('label', $xmlModel->xmlentities(strip_tags($value->getTitle())));
                 $price = Mage::helper('xmlconnect')->formatPriceForXml($value->getPrice());
                 if ($price > 0.0) {
                     $valueNode->addAttribute('price', $price);
                     $formatedPrice = $this->_formatPriceString($price, $product);
                     $valueNode->addAttribute('formated_price', $formatedPrice);
                 }
             }
         }
     }
     return $xmlModel;
 }
 /**
  * @param Mage_Catalog_Model_Product $product
  * @return boolean
  */
 public function productHasOptions(Mage_Catalog_Model_Product $product)
 {
     if (count($product->getOptions()) > 0) {
         return true;
     }
     return false;
 }
 /**
  * @covers Mage_Catalog_Model_Product::addOption
  * @covers Mage_Catalog_Model_Product::getOptionById
  * @covers Mage_Catalog_Model_Product::getOptions
  */
 public function testOptionApi()
 {
     $this->assertEquals(array(), $this->_model->getOptions());
     $optionId = uniqid();
     $option = new Mage_Catalog_Model_Product_Option(array('key' => 'value'));
     $option->setId($optionId);
     $this->_model->addOption($option);
     $this->assertSame($option, $this->_model->getOptionById($optionId));
     $this->assertEquals(array($optionId => $option), $this->_model->getOptions());
 }
Exemple #4
0
 /**
  * @param array $productData
  * @param Mage_Catalog_Model_Product $product
  * @return mixed|void
  */
 public function processData(array &$productData, $product)
 {
     if (isset($productData['custom_options'])) {
         if ($product->getId()) {
             $currentOptions = $product->getOptions();
             foreach ($currentOptions as $option) {
                 $option->delete();
             }
         }
         $optionsData = $productData['custom_options'];
         if (!empty($optionsData)) {
             foreach ($optionsData as $optionData) {
                 $this->_addOption($product, $optionData);
             }
             $product->setHasOptions(true);
         } else {
             $product->setHasOptions(false);
         }
     }
 }
Exemple #5
0
 /**
  * set inputs
  */
 public function setInputs()
 {
     $result = array();
     foreach ($this->item->getOptions() as $option) {
         /** @var Mage_Catalog_Model_Product_Option $option */
         $inputType = $this->_mapInputType($option->getType());
         $inputItem = new Shopgate_Model_Catalog_Input();
         $inputItem->setUid($option->getId());
         $inputItem->setType($inputType);
         $inputItem->setLabel($option->getTitle());
         $inputItem->setRequired($option->getIsRequire());
         $inputItem->setValidation($this->_buildInputValidation($inputType, $option));
         $inputItem->setSortOrder($option->getSortOrder());
         /**
          * add additional price for types without options
          */
         switch ($inputType) {
             case Shopgate_Model_Catalog_Input::DEFAULT_INPUT_TYPE_TEXT:
             case Shopgate_Model_Catalog_Input::DEFAULT_INPUT_TYPE_AREA:
             case Shopgate_Model_Catalog_Input::DEFAULT_INPUT_TYPE_FILE:
             case Shopgate_Model_Catalog_Input::DEFAULT_INPUT_TYPE_DATE:
             case Shopgate_Model_Catalog_Input::DEFAULT_INPUT_TYPE_DATETIME:
             case Shopgate_Model_Catalog_Input::DEFAULT_INPUT_TYPE_TIME:
                 $inputItem->setAdditionalPrice($this->_getInputValuePrice($option));
                 break;
             default:
                 $inputItem->setOptions($this->_buildInputOptions($option));
                 break;
         }
         $result[] = $inputItem;
     }
     if ($this->item->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
         $result = $this->_setBundleOptions($result);
     }
     parent::setInputs($result);
 }
Exemple #6
0
 /**
  * Return true if product has options
  *
  * @param  Mage_Catalog_Model_Product $product
  * @return bool
  */
 public function hasOptions($product)
 {
     if ($product->getOptions()) {
         return true;
     }
     $attributes = $this->getConfigurableAttributes($product);
     if (count($attributes)) {
         foreach ($attributes as $attribute) {
             /** @var Mage_Catalog_Model_Product_Type_Configurable_Attribute $attribute */
             if ($attribute->getData('prices')) {
                 return true;
             }
         }
     }
     return false;
 }
Exemple #7
0
 /**
  * Create produc custom options Mage_XmlConnect_Model_Simplexml_Element object
  *
  * @param Mage_Catalog_Model_Product $product
  * @return Mage_XmlConnect_Model_Simplexml_Element
  */
 public function getProductCustomOptionsXmlObject(Mage_Catalog_Model_Product $product)
 {
     $xmlModel = Mage::getModel('xmlconnect/simplexml_element', '<product></product>');
     $optionsNode = $xmlModel->addChild('options');
     if ($product->hasPreconfiguredValues()) {
         $preConfiguredValues = $product->getPreconfiguredValues();
         $optionData = $preConfiguredValues->getData('options');
     }
     if (!$product->getId()) {
         return $xmlModel;
     }
     $xmlModel->addAttribute('id', $product->getId());
     if (!$product->isSaleable() || !sizeof($product->getOptions())) {
         return $xmlModel;
     }
     foreach ($product->getOptions() as $option) {
         $optionNode = $optionsNode->addChild('option');
         $type = $this->_getOptionTypeForXmlByRealType($option->getType());
         $code = 'options[' . $option->getId() . ']';
         if ($type == self::OPTION_TYPE_CHECKBOX) {
             $code .= '[]';
         }
         $optionNode->addAttribute('code', $code);
         $optionNode->addAttribute('type', $type);
         $optionNode->addAttribute('label', $xmlModel->escapeXml($option->getTitle()));
         if ($option->getIsRequire()) {
             $optionNode->addAttribute('is_required', 1);
         }
         /**
          * Process option price
          */
         $price = $option->getPrice();
         if ($price) {
             $optionNode->addAttribute('price', Mage::helper('xmlconnect')->formatPriceForXml($price));
             $formattedPrice = Mage::app()->getStore($product->getStoreId())->formatPrice($price, false);
             $optionNode->addAttribute('formated_price', $formattedPrice);
         }
         $optionId = $option->getOptionId();
         if ($type == self::OPTION_TYPE_CHECKBOX || $type == self::OPTION_TYPE_SELECT) {
             foreach ($option->getValues() as $value) {
                 $code = $value->getId();
                 $valueNode = $optionNode->addChild('value');
                 $valueNode->addAttribute('code', $code);
                 $valueNode->addAttribute('label', $xmlModel->escapeXml($value->getTitle()));
                 if ($value->getPrice() != 0) {
                     $price = Mage::helper('xmlconnect')->formatPriceForXml($value->getPrice());
                     $valueNode->addAttribute('price', $price);
                     $formattedPrice = $this->_formatPriceString($price, $product);
                     $valueNode->addAttribute('formated_price', $formattedPrice);
                 }
                 if ($product->hasPreconfiguredValues()) {
                     $this->_setCartSelectedValue($valueNode, $type, $this->_getPreconfiguredOption($optionData, $optionId, $code));
                 }
             }
         } else {
             if ($product->hasPreconfiguredValues() && array_key_exists($option->getOptionId(), $optionData)) {
                 $this->_setCartSelectedValue($optionNode, $type, $optionData[$optionId]);
             }
         }
     }
     return $xmlModel;
 }
 private function getProductCustomOptionsOption(Mage_Catalog_Model_Product $product)
 {
     $options = array();
     if (!$product->getId()) {
         return $options;
     }
     if (!$product->isSaleable() || !sizeof($product->getOptions())) {
         return $options;
     }
     foreach ($product->getOptions() as $option) {
         $optionObj = array();
         $type = $this->_getOptionTypeForKanCartByRealType($option->getType());
         $optionObj['attribute_id'] = $option->getId();
         $optionObj['required'] = $option->getRequired() || $option->getIsRequire() || $option->getIsRequired();
         $optionObj['input'] = $type;
         $optionObj['title'] = $option->getTitle();
         $price = $option->getPrice();
         if ($price) {
             $optionObj['price'] = $this->getCurrencyPrice($price);
         } else {
             $optionObj['price'] = null;
         }
         $optionObj['options'] = array();
         if (!$optionObj['required'] && $optionObj['input'] == self::OPTION_TYPE_SELECT) {
             $none = array('attribute_id' => 'none', 'option_id' => '', 'title' => 'None');
             $optionObj['options'][] = $none;
         }
         foreach ($option->getValues() as $value) {
             $optionValueObj = array();
             $optionValueObj['attribute_id'] = $option->getId();
             $optionValueObj['option_id'] = $value->getId();
             $optionValueObj['title'] = $value->getTitle();
             $price = $value->getPrice();
             if ($price) {
                 $optionValueObj['price'] = $this->getCurrencyPrice($price);
             } else {
                 $optionValueObj['price'] = null;
             }
             $optionObj['options'][] = $optionValueObj;
         }
         $options[] = $optionObj;
     }
     return $options;
 }
 /**
  * Returns product SKU for specified options set
  * @param Mage_Catalog_Model_Product $Product
  * @param mixed                      $options
  * @return string
  */
 public function getProductSku(Mage_Catalog_Model_Product $Product, $options = null)
 {
     if ($options) {
         $productOptions = $Product->getOptions();
         foreach ($options as $option) {
             if ($ProductOption = @$productOptions[$option['option_id']]) {
                 $values = $ProductOption->getValues();
                 if (($value = $values[$option['option_value']]) && $value->getSku()) {
                     return $value->getSku();
                 }
             }
         }
     }
     return $Product->getSku();
 }
Exemple #10
0
 /**
  * Check if product can be bought
  *
  * @param  Mage_Catalog_Model_Product $product
  * @return Mage_Catalog_Model_Product_Type_Abstract
  * @throws Mage_Core_Exception
  */
 public function checkProductBuyState($product)
 {
     if (!$product->getSkipCheckRequiredOption()) {
         foreach ($product->getOptions() as $option) {
             if ($option->getIsRequire()) {
                 $customOption = $product->getCustomOption(self::OPTION_PREFIX . $option->getId());
                 if (!$customOption || strlen($customOption->getValue()) == 0) {
                     $product->setSkipCheckRequiredOption(true);
                     Mage::throwException($this->_helper('Mage_Catalog_Helper_Data')->__('The product has required options'));
                 }
             }
         }
     }
     return $this;
 }
Exemple #11
0
 /**
  * Returns whether product has custom option of type file or not.
  * (only if option is required)
  *
  * @param Mage_Catalog_Model_Product $product
  *
  * @return bool
  */
 public function productHasRequiredFileOption($product)
 {
     $options = $product->getOptions();
     foreach ($options as $option) {
         /** @var $option Mage_Catalog_Model_Product_Option */
         if ($option->getType() === Mage_Catalog_Model_Product_Option::OPTION_TYPE_FILE && $option->getIsRequire()) {
             return true;
         }
     }
     return false;
 }