[-] BO : #PSFV-704 - refactoring of AdminFeaturesController and fix of broken bulk delete

This commit is contained in:
tDidierjean
2012-03-26 12:29:34 +00:00
parent 55481a1f0c
commit dd75df4e69
2 changed files with 65 additions and 136 deletions
+64 -135
View File
@@ -89,6 +89,26 @@ class AdminFeaturesControllerCore extends AdminController
return parent::renderList();
}
/**
* Change object type to feature value (use when processing a feature value)
*/
protected function setTypeValue()
{
$this->table = 'feature_value';
$this->className = 'FeatureValue';
$this->identifier = 'id_feature_value';
}
/**
* Change object type to feature (use when processing a feature)
*/
protected function setTypeFeature()
{
$this->table = 'feature';
$this->className = 'Feature';
$this->identifier = 'id_feature';
}
/**
* method call when ajax request is made with the details row action
* @see AdminController::postProcess()
@@ -97,9 +117,7 @@ class AdminFeaturesControllerCore extends AdminController
{
if (($id = Tools::getValue('id')))
{
$this->table = 'feature_value';
$this->className = 'FeatureValue';
$this->identifier = 'id_feature_value';
$this->setTypeValue();
$this->lang = true;
// override attributes
@@ -211,7 +229,7 @@ class AdminFeaturesControllerCore extends AdminController
$this->toolbar_btn['save-and-stay'] = array(
'short' => 'SaveAndStay',
'href' => '#',
'desc' => $this->l('Save and add'),
'desc' => $this->l('Save and add another value'),
'force_desc' => true,
);
@@ -237,9 +255,7 @@ class AdminFeaturesControllerCore extends AdminController
*/
public function initFormFeatureValue()
{
$this->table = 'feature_value';
$this->className = 'FeatureValue';
$this->identifier = 'id_feature_value';
$this->setTypeValue();
$this->fields_form[0]['form'] = array(
'legend' => array(
@@ -285,8 +301,8 @@ class AdminFeaturesControllerCore extends AdminController
$helper = new HelperForm();
$helper->currentIndex = self::$currentIndex;
$helper->token = $this->token;
$helper->table = 'feature_value';
$helper->identifier = 'id_feature_value';
$helper->table = $this->table;
$helper->identifier = $this->identifier;
$helper->override_folder = 'feature_value/';
$helper->id = $feature_value->id;
$helper->toolbar_scroll = false;
@@ -300,18 +316,6 @@ class AdminFeaturesControllerCore extends AdminController
$this->content .= $helper->generateForm($this->fields_form);
}
/**
* AdminController::init() override
* @see AdminController::init()
*/
public function init()
{
if (isset($_POST['submitAddfeature_value']) || isset($_GET['updatefeature_value']) || isset($_GET['addfeature_value']))
$this->display = 'editFeatureValue';
parent::init();
}
/**
* AdminController::initContent() override
* @see AdminController::initContent()
@@ -344,8 +348,9 @@ class AdminFeaturesControllerCore extends AdminController
}
else if (!$this->ajax)
{
// If a feature value was saved, we need to reset the values to display the list
$this->setTypeFeature();
$this->content .= $this->renderList();
$this->content .= $this->renderOptions();
}
}
else
@@ -357,125 +362,36 @@ class AdminFeaturesControllerCore extends AdminController
));
}
public function initProcess()
{
// Are we working on feature values?
if (Tools::getValue('id_feature_value')
|| Tools::isSubmit('deletefeature_value')
|| Tools::isSubmit('submitAddfeature_value')
|| Tools::isSubmit('addfeature_value')
|| Tools::isSubmit('updatefeature_value')
|| Tools::isSubmit('submitBulkdeletefeature_value'))
$this->setTypeValue();
parent::initProcess();
if ($this->table == 'feature_value' && ($this->display == 'edit' || $this->display == 'add'))
$this->display = 'editFeatureValue';
}
public function postProcess()
{
if (!Feature::isFeatureActive())
return;
if (Tools::isSubmit('deletefeature_value') || Tools::isSubmit('submitAddfeature_value'))
{
if ($this->table == 'feature_value' && ($this->action == 'save' || $this->action == 'delete' || $this->action == 'bulkDelete'))
Hook::exec('displayFeatureValuePostProcess',
array('errors' => &$this->errors)); // send errors as reference to allow displayFeatureValuePostProcess to stop saving process
if (Tools::isSubmit('deletefeature_value'))
{
if ($this->tabAccess['delete'] === '1')
{
if (Tools::getValue('id_feature_value'))
{
$object = new FeatureValue((int)Tools::getValue('id_feature_value'));
if ($object->delete())
Tools::redirectAdmin(self::$currentIndex.'&conf=2'.'&token='.$this->token);
else
$this->errors[] = Tools::displayError('An error occurred during deletion.');
}
}
else
$this->errors[] = Tools::displayError('You do not have permission to delete here.');
}
else if (Tools::isSubmit('submitAddfeature_value') || Tools::isSubmit('submitAddfeature_valueAndStay'))
{
$this->table = 'feature_value';
$this->className = 'FeatureValue';
$this->identifier = 'id_feature_value';
$id = (int)Tools::getValue('id_feature_value');
$feature_value = new FeatureValue($id);
$feature_value->value = array();
if (!Tools::getValue('value_'.$this->context->language->id))
$this->errors[] = Tools::displayError('The value is required for the default language.');
$languages = Language::getLanguages(false);
foreach ($languages as $language)
$feature_value->value[$language['id_lang']] = Tools::getValue('value_'.$language['id_lang']);
$feature_value->id_feature = Tools::getValue('id_feature');
if (count($this->errors) > 0)
{
$this->display = 'editFeatureValue';
parent::postProcess();
}
else if (isset($id) && !empty($id))
{
// Update
if (!$feature_value->update())
$this->errors[] = Tools::displayError('An error has occurred: Can\'t save the current feature value');
else if (Tools::isSubmit('submitAdd'.$this->table.'AndStay') && !count($this->errors))
Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'=&id_feature='.(int)Tools::getValue('id_feature').'&conf=3&update'.$this->table.'&token='.$this->token);
else
Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token);
}
else
{
// Create
if (!$feature_value->add())
$this->errors[] = Tools::displayError('An error has occurred: Can\'t save the current feature value');
else if (Tools::isSubmit('submitAdd'.$this->table.'AndStay') && !count($this->errors))
Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'=&id_feature='.(int)Tools::getValue('id_feature').'&conf=3&update'.$this->table.'&token='.$this->token);
else
Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token);
}
}
else
parent::postProcess();
}
else
{
Hook::exec('displayFeaturePostProcess',
array('errors' => &$this->errors)); // send errors as reference to allow displayFeaturePostProcess to stop saving process
if (Tools::getValue('submitDel'.$this->table))
{
if ($this->tabAccess['delete'] === '1')
{
if (isset($_POST[$this->table.'Box']))
{
$object = new $this->className();
if ($object->deleteSelection($_POST[$this->table.'Box']))
Tools::redirectAdmin(self::$currentIndex.'&conf=2'.'&token='.$this->token);
$this->errors[] = Tools::displayError('An error occurred while deleting selection.');
}
else
$this->errors[] = Tools::displayError('You must select at least one element to delete.');
}
else
$this->errors[] = Tools::displayError('You do not have permission to delete here.');
}
else if (Tools::isSubmit('submitAdd'.$this->table))
{
if ($this->tabAccess['add'] === '1')
{
$id_feature = (int)Tools::getValue('id_feature');
// Adding last position to the feature if not exist
if ($id_feature <= 0)
{
$sql = 'SELECT `position`+1
FROM `'._DB_PREFIX_.'feature`
ORDER BY position DESC';
// set the position of the new feature in $_POST for postProcess() method
$_POST['position'] = DB::getInstance()->getValue($sql);
}
// clean \n\r characters
foreach ($_POST as $key => $value)
if (preg_match('/^name_/Ui', $key))
$_POST[$key] = str_replace ('\n', '', str_replace('\r', '', $value));
parent::postProcess();
}
}
else
parent::postProcess();
}
parent::postProcess();
}
/**
@@ -510,11 +426,24 @@ class AdminFeaturesControllerCore extends AdminController
*/
public function processSave($token)
{
if ((int)Tools::getValue('id_feature_value') <= 0 && $this->display == 'add'
|| (int)Tools::getValue('id_feature') <= 0 && $this->display != 'add')
return $this->processAdd($token);
else
return $this->processUpdate($token);
if ($this->table == 'feature')
{
$id_feature = (int)Tools::getValue('id_feature');
// Adding last position to the feature if not exist
if ($id_feature <= 0)
{
$sql = 'SELECT `position`+1
FROM `'._DB_PREFIX_.'feature`
ORDER BY position DESC';
// set the position of the new feature in $_POST for postProcess() method
$_POST['position'] = DB::getInstance()->getValue($sql);
}
// clean \n\r characters
foreach ($_POST as $key => $value)
if (preg_match('/^name_/Ui', $key))
$_POST[$key] = str_replace ('\n', '', str_replace('\r', '', $value));
}
parent::processSave($token);
}
/**