From f464bd935394268269b27473a2797024023d120d Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Sun, 28 Dec 2014 02:38:04 +0100 Subject: [PATCH] Changed scope identifier to the form website/store/view --- .../OpenTools/Ordernumber/Block/Counters.php | 29 ++++++----- .../Ordernumber/Model/Backend/Counters.php | 48 +++++-------------- .../OpenTools/Ordernumber/Model/Observer.php | 9 ++-- .../Ordernumber/Model/Ordernumber.php | 12 ++--- .../Model/Resource/Ordernumber.php | 10 ++-- .../install-0.1.0.php | 8 ++-- 6 files changed, 45 insertions(+), 71 deletions(-) diff --git a/app/code/community/OpenTools/Ordernumber/Block/Counters.php b/app/code/community/OpenTools/Ordernumber/Block/Counters.php index c5b6b86..750fca7 100644 --- a/app/code/community/OpenTools/Ordernumber/Block/Counters.php +++ b/app/code/community/OpenTools/Ordernumber/Block/Counters.php @@ -137,7 +137,7 @@ class OpenTools_Ordernumber_Block_Counters extends Mage_Adminhtml_Block_System_C $websites = $sstore->getWebsiteCollection(); foreach ($websites as $website) { $websiteId = $website->getId(); - $siteStr = 'w'.(int)$websiteId; + $siteStr = (int)$websiteId; if ($websiteIds && !in_array($websiteId, $websiteIds)) { continue; } @@ -153,7 +153,7 @@ class OpenTools_Ordernumber_Block_Counters extends Mage_Adminhtml_Block_System_C foreach ($website->getGroups() as $group) { $groupId = $group->getId(); - $groupStr = $siteStr . 'g' . (int)$groupId; + $groupStr = $siteStr . '/' . (int)$groupId; if ($groupIds && !in_array($groupId, $groupIds)) { continue; @@ -168,7 +168,7 @@ class OpenTools_Ordernumber_Block_Counters extends Mage_Adminhtml_Block_System_C foreach ($group->getStores() as $store) { $storeId = $store->getId(); - $storeStr = $groupStr . 's' . (int)$storeId; + $storeStr = $groupStr . '/' . (int)$storeId; if ($storeIds && !in_array($storeId, $storeIds)) { continue; } @@ -201,26 +201,33 @@ class OpenTools_Ordernumber_Block_Counters extends Mage_Adminhtml_Block_System_C return $html; } - protected function _convertScopeToString($website_id, $group_id, $store_id) + /** Convert the scope id ('' for global, websiteID/groupID/storeID) + * to a human-readable string + * + * @param $scope_ids scope id ('' for global, websiteID/groupID/storeID) + * @return string + */ + protected function _convertScopeToString($scope_ids) { $sstore = Mage::getSingleton('adminhtml/system_store'); $nonEscapableNbspChar = html_entity_decode(' ', ENT_NOQUOTES, 'UTF-8'); + $ids = explode ('/', $scope_ids); $scopes = array(); - if ($website_id<=0) { + if (empty($ids) || empty($ids[0])) { $scopes[] = $this->__('Global'); } else { - $website = Mage::getModel('core/website')->load($website_id); + $website = Mage::getModel('core/website')->load($ids[0]); if ($website) $scopes[] = $this->__('Website: %s', $website->getName()); } - if ($group_id>0) { - $group = Mage::getModel('core/store_group')->load($group_id); + if (count($ids)>1) { + $group = Mage::getModel('core/store_group')->load($ids[1]); if ($group) $scopes[] = str_repeat($nonEscapableNbspChar, 4) . $this->__('Store: %s', $group->getName()); } - if ($store_id>0) { - $store = Mage::getModel('core/store')->load($store_id); + if (count($ids)>2) { + $store = Mage::getModel('core/store')->load($ids[2]); if ($store) $scopes[] = str_repeat($nonEscapableNbspChar, 8) . $this->__('View: %s', $store->getName()); } @@ -241,7 +248,7 @@ class OpenTools_Ordernumber_Block_Counters extends Mage_Adminhtml_Block_System_C $class = ($class=='odd')?'even':'odd'; $types = $this->getNumberTypes(); $html .= '<td class="ordernumber_type">'.$types[$counter->getNumberType()].'</td>'; - $html .= '<td class="ordernumber_scope">' . $this->_convertScopeToString($counter->getWebsiteId(), $counter->getGroupId(), $counter->getStoreId()) . '</td>'; + $html .= '<td class="ordernumber_scope">' . $this->_convertScopeToString($counter->getNumberScope()) . '</td>'; $html .= '<td class="ordernumber_name">' . $counter->getNumberFormat() . '</td>'; $html .= '<td class="ordernumber_counter">' . '<div class="">' . (int)$counter->getCount() . '</div>' . diff --git a/app/code/community/OpenTools/Ordernumber/Model/Backend/Counters.php b/app/code/community/OpenTools/Ordernumber/Model/Backend/Counters.php index b1a417f..67c8187 100644 --- a/app/code/community/OpenTools/Ordernumber/Model/Backend/Counters.php +++ b/app/code/community/OpenTools/Ordernumber/Model/Backend/Counters.php @@ -30,13 +30,13 @@ class OpenTools_Ordernumber_Model_Backend_Counters extends Mage_Core_Model_Confi if ($oldval != $newval) { $counter = $model->load($countid); if ($counter->getCount() != $oldval) { - $session->addWarning($helper->__('Counter "%s" (type: %s) was changed in the background in the dabase from %d to %d. Overwriting with %d.', - $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $oldval, $counter->getCount(), $newval)); + $session->addWarning($helper->__('Counter "%s" (type: %s, scope: %s) was changed in the background in the dabase from %d to %d. Overwriting with %d.', + $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $counter->getNumberScope(), $oldval, $counter->getCount(), $newval)); } $counter->setCount($newval) ->save(); - $session->addSuccess($helper->__('Successfully changed counter "%s" (type: %s) from %d to %d', - $counter->getNumberFormat(), $model->reNadableType($counter->getNumberType()), $oldval, $counter->getCount())); + $session->addSuccess($helper->__('Successfully changed counter "%s" (type: %s, scope: %s) from %d to %d', + $counter->getNumberFormat(), $model->reNadableType($counter->getNumberType()), $counter->getNumberScope(), $oldval, $counter->getCount())); } } // Deleting counters: @@ -45,51 +45,25 @@ class OpenTools_Ordernumber_Model_Backend_Counters extends Mage_Core_Model_Confi // Check if the counter has changed meanwhile in the DB! $counter = $model->load($countid); if ($counter->getCount() != $oldval) { - $session->addWarning($helper->__('Counter "%s" (type: %s) was changed in the background in the dabase from %d to %d. Deleting it nonetheless.', - $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $oldval, $counter->getCount())); + $session->addWarning($helper->__('Counter "%s" (type: %s, scope: %s) was changed in the background in the dabase from %d to %d. Deleting it nonetheless.', + $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $counter->getNumberScope(), $oldval, $counter->getCount())); } $counter->delete(); - $session->addSuccess($helper->__('Successfully deleted counter "%s" (type: %s) with value %d', - $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $counter->getCount())); + $session->addSuccess($helper->__('Successfully deleted counter "%s" (type: %s, scope: %s) with value %d', + $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $counter->getNumberScope(), $counter->getCount())); } // New counters foreach ($vals['new_counter_type'] as $nr =>$countertype) { // TODO: Check whether a counter with these name, scope and type already exists! $scope = $vals['new_counter_scope'][$nr]; - // Extract the counter scope from the request variable - $website = 0; - $group = 0; - $store = 0; - // Loop through the characters and process groups w[0-9]+, g[0-9]+, s[0-9]+ - $i = 0; - $len = strlen($scope); - while ($i<$len) { - $ch = $scope[$i]; - $i++; - if ($i>=$len || !in_array($ch, array('w', 'g', 's'))) - continue; - $nr = 0; - while ($i<$len && ctype_digit($scope[$i])) { - $nr = $nr*10 + (int)$scope[$i]; - $i++; - } - switch ($ch) { - case 'w': $website = $nr; break; - case 'g': $group = $nr; break; - case 's': $store = $nr; break; - } - } - $counter = $model->unsetData() ->setNumberType($countertype) - ->setWebsiteId($website) - ->setGroupId($group) - ->setStoreId($store) + ->setNumberScope($vals['new_counter_scope'][$nr]) ->setNumberFormat($vals['new_counter_name'][$nr]) ->setCount($vals['new_counter_value'][$nr]) ->save(); - $session->addSuccess($helper->__('Successfully created counter "%s" (type: %s) with value %d', - $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $counter->getCount())); + $session->addSuccess($helper->__('Successfully created counter "%s" (type: %s, scope: %s) with value %d', + $counter->getNumberFormat(), $model->readableType($counter->getNumberType()), $counter->getNumberScope(), $counter->getCount())); } } } diff --git a/app/code/community/OpenTools/Ordernumber/Model/Observer.php b/app/code/community/OpenTools/Ordernumber/Model/Observer.php index 69bdb58..0c97c8d 100644 --- a/app/code/community/OpenTools/Ordernumber/Model/Observer.php +++ b/app/code/community/OpenTools/Ordernumber/Model/Observer.php @@ -126,10 +126,11 @@ Mage::Log('customvars: '.print_r($customvars,1), null, 'ordernumber.log'); $count += 1; // Find the next counter value - $website_id = ($scope>=1)?$store->getWebsiteId():0; - $group_id = ($scope>=2)?$store->getGroupId():0; - $store_id = ($scope>=3)?$store->getStoreId():0; - $count = $model->getCounterValueIncremented($nrtype, $counterfmt, $increment, $website_id, $group_id, $store_id); + $scope_id = ''; + if ($scope>=1) $scope_id = $store->getWebsiteId(); + if ($scope>=2) $scope_id .= '/' . $store->getGroupId(); + if ($scope>=3) $scope_id .= '/' . $store->getStoreId(); + $count = $model->getCounterValueIncremented($nrtype, $counterfmt, $increment, $scope_id); $newnumber = str_replace ("#", sprintf('%0' . (int)$digits . 's', $count), $format); // Check whether that number is already in use. If so, attempt to create the next number: diff --git a/app/code/community/OpenTools/Ordernumber/Model/Ordernumber.php b/app/code/community/OpenTools/Ordernumber/Model/Ordernumber.php index 4331a25..1ed04ab 100644 --- a/app/code/community/OpenTools/Ordernumber/Model/Ordernumber.php +++ b/app/code/community/OpenTools/Ordernumber/Model/Ordernumber.php @@ -8,13 +8,11 @@ class OpenTools_Ordernumber_Model_Ordernumber extends Mage_Core_Model_Abstract parent::_construct(); $this->_init('opentools_ordernumber/ordernumber'); } - public function getCounterValueIncremented($nrtype, $format, $increment=1, $website_id=0, $group_id=0, $store_id=0) { + public function getCounterValueIncremented($nrtype, $format, $increment=1, $scope_id='') { $helper = Mage::helper('ordernumber'); - $this->loadNumberCounter($nrtype, $format, $website_id, $group_id, $store_id); + $this->loadNumberCounter($nrtype, $format, $scope_id); - $this->setWebsiteId($website_id); - $this->setGroupId($group_id); - $this->setStoreId($store_id); + $this->setNumberScope($scope_id); $this->setNumberType($nrtype); $this->setNumberFormat($format); $count = $this->getCount() + $increment; @@ -22,9 +20,9 @@ class OpenTools_Ordernumber_Model_Ordernumber extends Mage_Core_Model_Abstract $res = $this->save(); return $count; } - public function loadNumberCounter($nrtype, $format, $website_id, $group_id, $store_id) + public function loadNumberCounter($nrtype, $format, $scope_id='') { - $this->_getResource()->loadNumberCounter($this, $nrtype, $format, $website_id, $group_id, $store_id); + $this->_getResource()->loadNumberCounter($this, $nrtype, $format, $scope_id); $this->_afterLoad(); $this->setOrigData(); $this->_hasDataChanges = false; diff --git a/app/code/community/OpenTools/Ordernumber/Model/Resource/Ordernumber.php b/app/code/community/OpenTools/Ordernumber/Model/Resource/Ordernumber.php index d78c85d..1c5b177 100644 --- a/app/code/community/OpenTools/Ordernumber/Model/Resource/Ordernumber.php +++ b/app/code/community/OpenTools/Ordernumber/Model/Resource/Ordernumber.php @@ -5,22 +5,18 @@ class OpenTools_Ordernumber_Model_Resource_Ordernumber extends Mage_Core_Model_R $this->_init('opentools_ordernumber/ordernumber', 'ordernumber_id'); } - public function loadNumberCounter(Mage_Core_Model_Abstract $object, $nrtype, $format, $website_id, $group_id, $store_id) { + public function loadNumberCounter(Mage_Core_Model_Abstract $object, $nrtype, $format, $scope='') { $read = $this->_getWriteAdapter(); if ($read && !is_null($nrtype)) { $typefield = $read->quoteIdentifier(sprintf('%s.%s', $this->getMainTable(), 'number_type')); $formatfield = $read->quoteIdentifier(sprintf('%s.%s', $this->getMainTable(), 'number_format')); - $websitefield = $read->quoteIdentifier(sprintf('%s.%s', $this->getMainTable(), 'website_id')); - $groupfield = $read->quoteIdentifier(sprintf('%s.%s', $this->getMainTable(), 'group_id')); - $storefield = $read->quoteIdentifier(sprintf('%s.%s', $this->getMainTable(), 'store_id')); + $scopefield = $read->quoteIdentifier(sprintf('%s.%s', $this->getMainTable(), 'number_scope')); $select = $read->select() ->from($this->getMainTable()) ->where($typefield . '=?', $nrtype) ->where($formatfield .'=?', $format) - ->where($websitefield . '=?', $website_id) - ->where($groupfield . '=?', $group_id) - ->where($storefield . '=?', $store_id); + ->where($scopefield . '=?', $scope); $data = $read->fetchRow($select); if ($data) { $object->setData($data); diff --git a/app/code/community/OpenTools/Ordernumber/sql/opentools_ordernumber_setup/install-0.1.0.php b/app/code/community/OpenTools/Ordernumber/sql/opentools_ordernumber_setup/install-0.1.0.php index 570c707..7d9ea96 100644 --- a/app/code/community/OpenTools/Ordernumber/sql/opentools_ordernumber_setup/install-0.1.0.php +++ b/app/code/community/OpenTools/Ordernumber/sql/opentools_ordernumber_setup/install-0.1.0.php @@ -19,17 +19,15 @@ $table = $installer->getConnection() 'primary' => true, ), 'Ordernumber id') ->addColumn('number_type', Varien_Db_Ddl_Table::TYPE_TEXT, 63, array('nullable'=> false), 'Number Type') - ->addColumn('website_id', Varien_Db_Ddl_Table::TYPE_SMALLINT,null, array('nullable'=> false, 'default'=>-1), 'Website ID') - ->addColumn('group_id', Varien_Db_Ddl_Table::TYPE_SMALLINT,null, array('nullable'=> false, 'default'=>-1), 'Group ID') - ->addColumn('store_id', Varien_Db_Ddl_Table::TYPE_SMALLINT,null, array('nullable'=> false, 'default'=>-1), 'Store ID') + ->addColumn('number_scope', Varien_Db_Ddl_Table::TYPE_TEXT, 20, array('nullable'=> false, 'default'=>''), 'Number Scope') ->addColumn('number_format',Varien_Db_Ddl_Table::TYPE_TEXT, 255, array('nullable'=> true), 'Number Format') ->addColumn('count', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array('unsigned'=>true,'nullable'=>false), 'Counter') ->addIndex($installer->getIdxName( $installer->getTable('opentools_ordernumber/ordernumber'), - array('number_type', 'website_id', 'group_id', 'store_id', 'number_format'), + array('number_type', 'number_scope', 'number_format'), Varien_Db_Adapter_Interface::INDEX_TYPE_UNIQUE ), - array('number_type', 'number_format'), + array('number_type', 'number_scope', 'number_format'), array('type' => Varien_Db_Adapter_Interface::INDEX_TYPE_UNIQUE) ) ->setComment('Ordernumber Counter Table'); -- GitLab