/app/code/core/Mage/Catalog/Model/Product/Type.php
https://bitbucket.org/kdms/sh-magento · PHP · 227 lines · 147 code · 23 blank · 57 comment · 15 complexity · 11096570c0e051d0b90f69e0850d39a7 MD5 · raw file
- <?php
- /**
- * Magento Enterprise Edition
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Magento Enterprise Edition License
- * that is bundled with this package in the file LICENSE_EE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://www.magentocommerce.com/license/enterprise-edition
- * 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) 2012 Magento Inc. (http://www.magentocommerce.com)
- * @license http://www.magentocommerce.com/license/enterprise-edition
- */
- /**
- * Product type model
- *
- * @category Mage
- * @package Mage_Catalog
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Catalog_Model_Product_Type
- {
- /**
- * Available product types
- */
- const TYPE_SIMPLE = 'simple';
- const TYPE_BUNDLE = 'bundle';
- const TYPE_CONFIGURABLE = 'configurable';
- const TYPE_GROUPED = 'grouped';
- const TYPE_VIRTUAL = 'virtual';
- const DEFAULT_TYPE = 'simple';
- const DEFAULT_TYPE_MODEL = 'catalog/product_type_simple';
- const DEFAULT_PRICE_MODEL = 'catalog/product_type_price';
- static protected $_types;
- static protected $_compositeTypes;
- static protected $_priceModels;
- static protected $_typesPriority;
- /**
- * Product type instance factory
- *
- * @param Mage_Catalog_Model_Product $product
- * @param bool $singleton
- * @return Mage_Catalog_Model_Product_Type_Abstract
- */
- public static function factory($product, $singleton = false)
- {
- $types = self::getTypes();
- $typeId = $product->getTypeId();
- if (!empty($types[$typeId]['model'])) {
- $typeModelName = $types[$typeId]['model'];
- } else {
- $typeModelName = self::DEFAULT_TYPE_MODEL;
- $typeId = self::DEFAULT_TYPE;
- }
- if ($singleton === true) {
- $typeModel = Mage::getSingleton($typeModelName);
- }
- else {
- $typeModel = Mage::getModel($typeModelName);
- $typeModel->setProduct($product);
- }
- $typeModel->setConfig($types[$typeId]);
- return $typeModel;
- }
- /**
- * Product type price model factory
- *
- * @param string $productType
- * @return Mage_Catalog_Model_Product_Type_Price
- */
- public static function priceFactory($productType)
- {
- if (isset(self::$_priceModels[$productType])) {
- return self::$_priceModels[$productType];
- }
- $types = self::getTypes();
- if (!empty($types[$productType]['price_model'])) {
- $priceModelName = $types[$productType]['price_model'];
- } else {
- $priceModelName = self::DEFAULT_PRICE_MODEL;
- }
- self::$_priceModels[$productType] = Mage::getModel($priceModelName);
- return self::$_priceModels[$productType];
- }
- static public function getOptionArray()
- {
- $options = array();
- foreach(self::getTypes() as $typeId=>$type) {
- $options[$typeId] = Mage::helper('catalog')->__($type['label']);
- }
- return $options;
- }
- static public function getAllOption()
- {
- $options = self::getOptionArray();
- array_unshift($options, array('value'=>'', 'label'=>''));
- return $options;
- }
- static public function getAllOptions()
- {
- $res = array();
- $res[] = array('value'=>'', 'label'=>'');
- foreach (self::getOptionArray() as $index => $value) {
- $res[] = array(
- 'value' => $index,
- 'label' => $value
- );
- }
- return $res;
- }
- static public function getOptions()
- {
- $res = array();
- foreach (self::getOptionArray() as $index => $value) {
- $res[] = array(
- 'value' => $index,
- 'label' => $value
- );
- }
- return $res;
- }
- static public function getOptionText($optionId)
- {
- $options = self::getOptionArray();
- return isset($options[$optionId]) ? $options[$optionId] : null;
- }
- static public function getTypes()
- {
- if (is_null(self::$_types)) {
- $productTypes = Mage::getConfig()->getNode('global/catalog/product/type')->asArray();
- foreach ($productTypes as $productKey => $productConfig) {
- $moduleName = 'catalog';
- if (isset($productConfig['@']['module'])) {
- $moduleName = $productConfig['@']['module'];
- }
- $translatedLabel = Mage::helper($moduleName)->__($productConfig['label']);
- $productTypes[$productKey]['label'] = $translatedLabel;
- }
- self::$_types = $productTypes;
- }
- return self::$_types;
- }
- /**
- * Return composite product type Ids
- *
- * @return array
- */
- static public function getCompositeTypes()
- {
- if (is_null(self::$_compositeTypes)) {
- self::$_compositeTypes = array();
- $types = self::getTypes();
- foreach ($types as $typeId=>$typeInfo) {
- if (array_key_exists('composite', $typeInfo) && $typeInfo['composite']) {
- self::$_compositeTypes[] = $typeId;
- }
- }
- }
- return self::$_compositeTypes;
- }
- /**
- * Return product types by type indexing priority
- *
- * @return array
- */
- public static function getTypesByPriority()
- {
- if (is_null(self::$_typesPriority)) {
- self::$_typesPriority = array();
- $a = array();
- $b = array();
- $types = self::getTypes();
- foreach ($types as $typeId => $typeInfo) {
- $priority = isset($typeInfo['index_priority']) ? abs(intval($typeInfo['index_priority'])) : 0;
- if (!empty($typeInfo['composite'])) {
- $b[$typeId] = $priority;
- } else {
- $a[$typeId] = $priority;
- }
- }
- asort($a, SORT_NUMERIC);
- asort($b, SORT_NUMERIC);
- foreach (array_keys($a) as $typeId) {
- self::$_typesPriority[$typeId] = $types[$typeId];
- }
- foreach (array_keys($b) as $typeId) {
- self::$_typesPriority[$typeId] = $types[$typeId];
- }
- }
- return self::$_typesPriority;
- }
- }