/app/code/core/Mage/Core/Model/Resource/Abstract.php
https://bitbucket.org/jokusafet/magento2 · PHP · 244 lines · 107 code · 16 blank · 121 comment · 22 complexity · d4af8473218cadf3294ce0e6c6a96df6 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_Core
- * @copyright Copyright (c) 2012 X.commerce, Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Abstract resource model
- *
- * @category Mage
- * @package Mage_Core
- * @author Magento Core Team <core@magentocommerce.com>
- */
- abstract class Mage_Core_Model_Resource_Abstract
- {
- /**
- * @var Varien_Db_Adapter_Interface
- */
- protected $_writeAdapter;
- /**
- * Main constructor
- */
- public function __construct()
- {
- /**
- * Please override this one instead of overriding real __construct constructor
- */
- $this->_construct();
- }
- /**
- * Array of callbacks subscribed to commit transaction commit
- *
- * @var array
- */
- static protected $_commitCallbacks = array();
- /**
- * Resource initialization
- */
- abstract protected function _construct();
- /**
- * Retrieve connection for read data
- */
- abstract protected function _getReadAdapter();
- /**
- * Retrieve connection for write data
- */
- abstract protected function _getWriteAdapter();
- /**
- * Start resource transaction
- *
- * @return Mage_Core_Model_Resource_Abstract
- */
- public function beginTransaction()
- {
- $this->_getWriteAdapter()->beginTransaction();
- return $this;
- }
- /**
- * Subscribe some callback to transaction commit
- *
- * @param callback $callback
- * @return Mage_Core_Model_Resource_Abstract
- */
- public function addCommitCallback($callback)
- {
- $adapterKey = spl_object_hash($this->_getWriteAdapter());
- self::$_commitCallbacks[$adapterKey][] = $callback;
- return $this;
- }
- /**
- * Commit resource transaction
- *
- * @return Mage_Core_Model_Resource_Abstract
- */
- public function commit()
- {
- $this->_getWriteAdapter()->commit();
- /**
- * Process after commit callbacks
- */
- if ($this->_getWriteAdapter()->getTransactionLevel() === 0) {
- $adapterKey = spl_object_hash($this->_getWriteAdapter());
- if (isset(self::$_commitCallbacks[$adapterKey])) {
- $callbacks = self::$_commitCallbacks[$adapterKey];
- self::$_commitCallbacks[$adapterKey] = array();
- foreach ($callbacks as $index => $callback) {
- call_user_func($callback);
- }
- }
- }
- return $this;
- }
- /**
- * Roll back resource transaction
- *
- * @return Mage_Core_Model_Resource_Abstract
- */
- public function rollBack()
- {
- $this->_getWriteAdapter()->rollBack();
- return $this;
- }
- /**
- * Format date to internal format
- *
- * @param string|Zend_Date $date
- * @param bool $includeTime
- * @return string
- */
- public function formatDate($date, $includeTime=true)
- {
- return Varien_Date::formatDate($date, $includeTime);
- }
- /**
- * Convert internal date to UNIX timestamp
- *
- * @param string $str
- * @return int
- */
- public function mktime($str)
- {
- return Varien_Date::toTimestamp($str);
- }
- /**
- * Serialize specified field in an object
- *
- * @param Varien_Object $object
- * @param string $field
- * @param mixed $defaultValue
- * @param bool $unsetEmpty
- * @return Mage_Core_Model_Resource_Abstract
- */
- protected function _serializeField(Varien_Object $object, $field, $defaultValue = null, $unsetEmpty = false)
- {
- $value = $object->getData($field);
- if (empty($value)) {
- if ($unsetEmpty) {
- $object->unsetData($field);
- } else {
- if (is_object($defaultValue) || is_array($defaultValue)) {
- $defaultValue = serialize($defaultValue);
- }
- $object->setData($field, $defaultValue);
- }
- } elseif (is_array($value) || is_object($value)) {
- $object->setData($field, serialize($value));
- }
- return $this;
- }
- /**
- * Unserialize Varien_Object field in an object
- *
- * @param Mage_Core_Model_Abstract $object
- * @param string $field
- * @param mixed $defaultValue
- */
- protected function _unserializeField(Varien_Object $object, $field, $defaultValue = null)
- {
- $value = $object->getData($field);
- if (empty($value)) {
- $object->setData($field, $defaultValue);
- } elseif (!is_array($value) && !is_object($value)) {
- $object->setData($field, unserialize($value));
- }
- }
- /**
- * Prepare data for passed table
- *
- * @param Varien_Object $object
- * @param string $table
- * @return array
- */
- protected function _prepareDataForTable(Varien_Object $object, $table)
- {
- $data = array();
- $fields = $this->_getWriteAdapter()->describeTable($table);
- foreach (array_keys($fields) as $field) {
- if ($object->hasData($field)) {
- $fieldValue = $object->getData($field);
- if ($fieldValue instanceof Zend_Db_Expr) {
- $data[$field] = $fieldValue;
- } else {
- if (null !== $fieldValue) {
- $fieldValue = $this->_prepareTableValueForSave($fieldValue, $fields[$field]['DATA_TYPE']);
- $data[$field] = $this->_getWriteAdapter()->prepareColumnValue($fields[$field], $fieldValue);
- } else if (!empty($fields[$field]['NULLABLE'])) {
- $data[$field] = null;
- }
- }
- }
- }
- return $data;
- }
- /**
- * Prepare value for save
- *
- * @param mixed $value
- * @param string $type
- * @return mixed
- */
- protected function _prepareTableValueForSave($value, $type)
- {
- $type = strtolower($type);
- if ($type == 'decimal' || $type == 'numeric' || $type == 'float') {
- $value = Mage::app()->getLocale()->getNumber($value);
- }
- return $value;
- }
- }