/app/code/core/Mage/Catalog/Helper/Product/Configuration.php
PHP | 254 lines | 147 code | 20 blank | 87 comment | 30 complexity | a25fd1cebdce5ac1a02468dd7ff61ec2 MD5 | raw file
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Catalog
- * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Helper for fetching properties by product configurational item
- *
- * @category Mage
- * @package Mage_Catalog
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Catalog_Helper_Product_Configuration extends Mage_Core_Helper_Abstract
- implements Mage_Catalog_Helper_Product_Configuration_Interface
- {
- /**
- * Retrieves product configuration options
- *
- * @param Mage_Catalog_Model_Product_Configuration_Item_Interface $item
- * @return array
- */
- public function getCustomOptions(Mage_Catalog_Model_Product_Configuration_Item_Interface $item)
- {
- $product = $item->getProduct();
- $options = array();
- $optionIds = $item->getOptionByCode('option_ids');
- if ($optionIds) {
- $options = array();
- foreach (explode(',', $optionIds->getValue()) as $optionId) {
- $option = $product->getOptionById($optionId);
- if ($option) {
- $itemOption = $item->getOptionByCode('option_' . $option->getId());
- $group = $option->groupFactory($option->getType())
- ->setOption($option)
- ->setConfigurationItem($item)
- ->setConfigurationItemOption($itemOption);
- if ('file' == $option->getType()) {
- $downloadParams = $item->getFileDownloadParams();
- if ($downloadParams) {
- $url = $downloadParams->getUrl();
- if ($url) {
- $group->setCustomOptionDownloadUrl($url);
- }
- $urlParams = $downloadParams->getUrlParams();
- if ($urlParams) {
- $group->setCustomOptionUrlParams($urlParams);
- }
- }
- }
- $options[] = array(
- 'label' => $option->getTitle(),
- 'value' => $group->getFormattedOptionValue($itemOption->getValue()),
- 'print_value' => $group->getPrintableOptionValue($itemOption->getValue()),
- 'option_id' => $option->getId(),
- 'option_type' => $option->getType(),
- 'custom_view' => $group->isCustomizedView()
- );
- }
- }
- }
- $addOptions = $item->getOptionByCode('additional_options');
- if ($addOptions) {
- $options = array_merge($options, unserialize($addOptions->getValue()));
- }
- return $options;
- }
- /**
- * Retrieves configuration options for configurable product
- *
- * @param Mage_Catalog_Model_Product_Configuration_Item_Interface $item
- * @return array
- */
- public function getConfigurableOptions(Mage_Catalog_Model_Product_Configuration_Item_Interface $item)
- {
- $product = $item->getProduct();
- $typeId = $product->getTypeId();
- if ($typeId != Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE) {
- Mage::throwException($this->__('Wrong product type to extract configurable options.'));
- }
- $attributes = $product->getTypeInstance(true)
- ->getSelectedAttributesInfo($product);
- return array_merge($attributes, $this->getCustomOptions($item));
- }
- /**
- * Retrieves configuration options for grouped product
- *
- * @param Mage_Catalog_Model_Product_Configuration_Item_Interface $item
- * @return array
- */
- public function getGroupedOptions(Mage_Catalog_Model_Product_Configuration_Item_Interface $item)
- {
- $product = $item->getProduct();
- $typeId = $product->getTypeId();
- if ($typeId != Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE) {
- Mage::throwException($this->__('Wrong product type to extract configurable options.'));
- }
- $options = array();
- /**
- * @var Mage_Catalog_Model_Product_Type_Grouped
- */
- $typeInstance = $product->getTypeInstance(true);
- $associatedProducts = $typeInstance->getAssociatedProducts($product);
- if ($associatedProducts) {
- foreach ($associatedProducts as $associatedProduct) {
- $qty = $item->getOptionByCode('associated_product_' . $associatedProduct->getId());
- $option = array(
- 'label' => $associatedProduct->getName(),
- 'value' => ($qty && $qty->getValue()) ? $qty->getValue() : 0
- );
- $options[] = $option;
- }
- }
- return array_merge($options, $this->getCustomOptions($item));
- }
- /**
- * Retrieves product options list
- *
- * @param Mage_Catalog_Model_Product_Configuration_Item_Interface $item
- * @return array
- */
- public function getOptions(Mage_Catalog_Model_Product_Configuration_Item_Interface $item)
- {
- $typeId = $item->getProduct()->getTypeId();
- switch ($typeId) {
- case Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE:
- return $this->getConfigurableOptions($item);
- break;
- case Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE:
- return $this->getGroupedOptions($item);
- break;
- }
- return $this->getCustomOptions($item);
- }
- /**
- * Accept option value and return its formatted view
- *
- * @param mixed $optionValue
- * Method works well with these $optionValue format:
- * 1. String
- * 2. Indexed array e.g. array(val1, val2, ...)
- * 3. Associative array, containing additional option info, including option value, e.g.
- * array
- * (
- * [label] => ...,
- * [value] => ...,
- * [print_value] => ...,
- * [option_id] => ...,
- * [option_type] => ...,
- * [custom_view] =>...,
- * )
- * @param array $params
- * All keys are options. Following supported:
- * - 'maxLength': truncate option value if needed, default: do not truncate
- * - 'cutReplacer': replacer for cut off value part when option value exceeds maxLength
- *
- * @return array
- */
- public function getFormattedOptionValue($optionValue, $params = null)
- {
- // Init params
- if (!$params) {
- $params = array();
- }
- $maxLength = isset($params['max_length']) ? $params['max_length'] : null;
- $cutReplacer = isset($params['cut_replacer']) ? $params['cut_replacer'] : '...';
- // Proceed with option
- $optionInfo = array();
- // Define input data format
- if (is_array($optionValue)) {
- if (isset($optionValue['option_id'])) {
- $optionInfo = $optionValue;
- if (isset($optionInfo['value'])) {
- $optionValue = $optionInfo['value'];
- }
- } else if (isset($optionValue['value'])) {
- $optionValue = $optionValue['value'];
- }
- }
- // Render customized option view
- if (isset($optionInfo['custom_view']) && $optionInfo['custom_view']) {
- $_default = array('value' => $optionValue);
- if (isset($optionInfo['option_type'])) {
- try {
- $group = Mage::getModel('catalog/product_option')->groupFactory($optionInfo['option_type']);
- return array('value' => $group->getCustomizedView($optionInfo));
- } catch (Exception $e) {
- return $_default;
- }
- }
- return $_default;
- }
- // Truncate standard view
- $result = array();
- if (is_array($optionValue)) {
- $_truncatedValue = implode("\n", $optionValue);
- $_truncatedValue = nl2br($_truncatedValue);
- return array('value' => $_truncatedValue);
- } else {
- if ($maxLength) {
- $_truncatedValue = Mage::helper('core/string')->truncate($optionValue, $maxLength, '');
- } else {
- $_truncatedValue = $optionValue;
- }
- $_truncatedValue = nl2br($_truncatedValue);
- }
- $result = array('value' => $_truncatedValue);
- if ($maxLength && (Mage::helper('core/string')->strlen($optionValue) > $maxLength)) {
- $result['value'] = $result['value'] . $cutReplacer;
- $optionValue = nl2br($optionValue);
- $result['full_view'] = $optionValue;
- }
- return $result;
- }
- }