Skip to content
Snippets Groups Projects
Commit f464bd93 authored by Reinhold Kainhofer's avatar Reinhold Kainhofer
Browse files

Changed scope identifier to the form website/store/view

parent ba323cf4
No related branches found
No related tags found
No related merge requests found
......@@ -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>' .
......
......@@ -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()));
}
}
}
......
......@@ -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:
......
......@@ -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;
......
......@@ -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);
......
......@@ -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');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment