public function validateSubscription(AW_Sarp_Model_Catalog_Product $product, Varien_Object $buyRequest) { if ($options = $buyRequest->getOptions()) { if (!isset($options['aw_sarp_subscription_start']) && !in_array(AW_Sarp_Model_Period::PERIOD_TYPE_NONE, explode(',', $product->getAwSarpPeriod()))) { if (!$buyRequest->getAwSarpSubscriptionStart()) { return false; } else { return true; } } else { return true; } } if (!$buyRequest->getAwSarpSubscriptionStart() && $buyRequest->getAwSarpSubscriptionStart() != '' && !in_array(AW_Sarp_Model_Period::PERIOD_TYPE_NONE, explode(',', $product->getAwSarpPeriod()))) { return false; } else { return true; } }
/** * Parse buyRequest into options values used by product * * @param Varien_Object $buyRequest * @return Varien_Object */ public function processBuyRequest(Varien_Object $buyRequest) { $options = new Varien_Object(); /* add product custom options data */ $customOptions = $buyRequest->getOptions(); if (is_array($customOptions)) { foreach ($customOptions as $key => $value) { if ($value === '') { unset($customOptions[$key]); } } $options->setOptions($customOptions); } /* add product type selected options data */ $type = $this->getTypeInstance(true); $typeSpecificOptions = $type->processBuyRequest($this, $buyRequest); $options->addData($typeSpecificOptions); /* check correctness of product's options */ $options->setErrors($type->checkProductConfiguration($this, $buyRequest)); return $options; }
/** * Run PEAR command with html output console style * * @param array|Varien_Object $runParams command, options, params, * comment, success_callback, failure_callback */ public function runHtmlConsole($runParams) { ob_implicit_flush(); $fe = $this->getFrontend(); $oldLogStream = $fe->getLogStream(); $fe->setLogStream('stdout'); if ($runParams instanceof Varien_Object) { $run = $runParams; } elseif (is_array($runParams)) { $run = new Varien_Object($runParams); } elseif (is_string($runParams)) { $run = new Varien_Object(array('title' => $runParams)); } else { throw Varien_Exception("Invalid run parameters"); } ?> <html><head><style type="text/css"> body { margin:0px; padding:3px; background:black; color:white; } pre { font:normal 11px Courier New, serif; color:#2EC029; } </style></head><body> <?php echo "<pre>" . $run->getComment(); if ($command = $run->getCommand()) { $result = $this->run($command, $run->getOptions(), $run->getParams()); if ($result instanceof PEAR_Error) { echo "\r\n\r\nPEAR ERROR: " . $result->getMessage(); } echo '</pre><script type="text/javascript">'; if ($result instanceof PEAR_Error) { if ($callback = $run->getFailureCallback()) { call_user_func_array($callback, array($result)); } } else { if ($callback = $run->getSuccessCallback()) { call_user_func_array($callback, array($result)); } } echo '</script>'; } else { $result = false; echo '</pre>'; } ?> <script type="text/javascript"> if (!auto_scroll) { var auto_scroll = window.setInterval("document.body.scrollTop+=2", 10); } </script> </body></html> <?php $fe->setLogStream($oldLogStream); return $result; }
/** * Initialize product(s) for add to cart process * * @param Varien_Object $buyRequest * @return array|string */ public function prepareForCart(Varien_Object $buyRequest) { $product = $this->getProduct(); /* @var Mage_Catalog_Model_Product $product */ // try to add custom options $options = $this->_prepareOptionsForCart($buyRequest->getOptions()); if (is_string($options)) { return $options; } // try to found super product configuration // (if product was buying within grouped product) $superProductConfig = $buyRequest->getSuperProductConfig(); if (!empty($superProductConfig['product_id']) && !empty($superProductConfig['product_type'])) { $superProductId = (int) $superProductConfig['product_id']; if ($superProductId) { if (!($superProduct = Mage::registry('used_super_product_' . $superProductId))) { $superProduct = Mage::getModel('catalog/product')->load($superProductId); Mage::register('used_super_product_' . $superProductId, $superProduct); } if ($superProduct->getId()) { $assocProductIds = $superProduct->getTypeInstance()->getAssociatedProductIds(); if (in_array($product->getId(), $assocProductIds)) { $productType = $superProductConfig['product_type']; $product->addCustomOption('product_type', $productType, $superProduct); $buyRequest->setData('super_product_config', array('product_type' => $productType, 'product_id' => $superProduct->getId())); } } } } $product->addCustomOption('info_buyRequest', serialize($buyRequest->getData())); if ($options) { $optionIds = array_keys($options); $product->addCustomOption('option_ids', implode(',', $optionIds)); foreach ($options as $optionId => $optionValue) { $product->addCustomOption('option_' . $optionId, $optionValue); } } // set quantity in cart $product->setCartQty($buyRequest->getQty()); return array($product); }
/** * Parse buyRequest into options values used by product * * @param Varien_Object $buyRequest * @return Varien_Object */ public function processBuyRequest(Varien_Object $buyRequest) { $options = new Varien_Object(); /* add product custom options data */ $customOptions = $buyRequest->getOptions(); if (is_array($customOptions)) { $options->setOptions(array_diff($buyRequest->getOptions(), array(''))); } /* add product type selected options data */ $type = $this->getTypeInstance(); $typeSpecificOptions = $type->processBuyRequest($this, $buyRequest); $options->addData($typeSpecificOptions); /* check correctness of product's options */ $options->setErrors($type->checkProductConfiguration($this, $buyRequest)); return $options; }
/** * Prepare product and its configuration to be added to some products list. * Perform standard preparation process and add logic specific to Grouped product type. * * Implemented for Magento 1.5+ CE. * * @param Varien_Object $buyRequest * @param Mage_Catalog_Model_Product $product * @param string $processMode * @return array|string */ protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) { $product = $this->getProduct($product); $productsInfo = $buyRequest->getSuperGroup(); $isStrictProcessMode = $this->_isStrictProcessMode($processMode); if (!$isStrictProcessMode || !empty($productsInfo) && is_array($productsInfo)) { $products = array(); $associatedProductsInfo = array(); $associatedProducts = $this->getAssociatedProducts($product); if ($associatedProducts || !$isStrictProcessMode) { foreach ($associatedProducts as $subProduct) { $subProductId = $subProduct->getId(); if (isset($productsInfo[$subProductId])) { $qty = $productsInfo[$subProductId]; if (!empty($qty) && is_numeric($qty)) { /* BEGIN Brim Grouped-Options Customizations */ if ($subProduct->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) { $isConfigurable = true; $configBuyRequest = clone $buyRequest; $superAttr = $buyRequest->getSuperAttribute(); if (array_key_exists($subProductId, $superAttr)) { $configBuyRequest->setSuperAttribute($superAttr[$subProductId]); } $configBuyRequest->setQty($qty); if (!($superOptions = $buyRequest->getOptions())) { $superOptions = $buyRequest->getSuperOptions(); } if (is_array($superOptions) && array_key_exists($subProductId, $superOptions)) { $optionIds = join(',', array_keys($superOptions[$subProductId])); $subProduct->addCustomOption('option_ids', $optionIds); foreach ($superOptions[$subProductId] as $id => $value) { if (is_array($value)) { $value = join(',', $value); } $subProduct->addCustomOption('option_' . $id, $value); } $configBuyRequest->setOptions($superOptions[$subProductId]); } $_result = $subProduct->getTypeInstance(true)->_prepareProduct($configBuyRequest, $subProduct, $processMode); } else { /* END Brim Grouped-Options Customizations */ $isConfigurable = false; $clonedBuyRequest = clone $buyRequest; $superOptions = $buyRequest->getSuperOptions(); if ($superOptions && isset($superOptions[$subProduct->getId()])) { $clonedBuyRequest->setOptions($superOptions[$subProduct->getId()]); } if ($subProduct->getHasOptions() && count($subProduct->getOptions()) == 0) { foreach ($subProduct->getProductOptionsCollection() as $_option) { $subProduct->addOption($_option); } } $_result = $subProduct->getTypeInstance(true)->_prepareProduct($clonedBuyRequest, $subProduct, $processMode); } if (is_string($_result) && !is_array($_result)) { return $_result; } if (!isset($_result[0])) { return Mage::helper('checkout')->__('Cannot process the item.'); } /* BEGIN Brim Grouped-Options Customizations */ if ($isConfigurable) { foreach ($_result as $item) { $products[] = $item; } } else { /* END Brim Grouped-Options Customizations */ if ($isStrictProcessMode) { $_result[0]->setCartQty($qty); $_result[0]->addCustomOption('product_type', self::TYPE_CODE, $product); $newBuyRequest = array('super_product_config' => array('product_type' => self::TYPE_CODE, 'product_id' => $product->getId())); if (isset($clonedBuyRequest)) { if ($clonedBuyRequest->getOptions()) { $newBuyRequest['options'] = $clonedBuyRequest->getOptions(); } if ($clonedBuyRequest->getQty()) { $newBuyRequest['qty'] = $clonedBuyRequest->getQty(); } } $_result[0]->addCustomOption('info_buyRequest', serialize($newBuyRequest)); $products[] = $_result[0]; } else { $associatedProductsInfo[] = array($subProductId => $qty); $product->addCustomOption('associated_product_' . $subProductId, $qty); } } } } } } if (!$isStrictProcessMode || count($associatedProductsInfo)) { $product->addCustomOption('product_type', self::TYPE_CODE, $product); $product->addCustomOption('info_buyRequest', serialize($buyRequest)); $products[] = $product; } if (count($products)) { return $products; } } return Mage::helper('catalog')->__('Please specify the quantity of product(s).'); }