Ejemplo n.º 1
0
 private function _postProcess()
 {
     Configuration::updateValue('LEO_ANIMATELOAD', Tools::getValue('LEO_ANIMATELOAD'));
     $listGroupId = LeoManageWidgetGroup::getAllGroupId();
     $listColumnId = LeoManageWidgetColumn::getAllColumnId();
     $listRowId = LeoManagerWidgetContent::getAllRowId();
     $res = 1;
     $data_form = Tools::getValue('data_form');
     $data_form = Tools::jsonDecode($data_form, true);
     $context = Context::getContext();
     $id_shop = $context->shop->id;
     if ($data_form['deletedObj']) {
         //delete row
         if (isset($data_form['deletedObj']['deletedRow']) && $data_form['deletedObj']['deletedRow']) {
             $rowList = explode(',', $data_form['deletedObj']['deletedRow']);
             //remove empty element
             $rowList = array_filter($rowList);
             foreach ($rowList as $value) {
                 if ($value && ($key = array_search($value, $listRowId)) !== false) {
                     $rowModel = new LeoManagerWidgetContent();
                     $rowModel->id = $value;
                     if ($rowModel->delete()) {
                         unset($listRowId[$key]);
                     }
                 }
             }
         }
         //delete column
         if (isset($data_form['deletedObj']['deletedColumn']) && $data_form['deletedObj']['deletedColumn']) {
             $columnList = explode(',', $data_form['deletedObj']['deletedColumn']);
             //remove empty element
             $columnList = array_filter($columnList);
             foreach ($columnList as $value) {
                 if ($value && ($key = array_search($value, $listColumnId)) !== false) {
                     $columnModel = new LeoManageWidgetColumn();
                     $columnModel->id = $value;
                     if ($columnModel->delete()) {
                         unset($listColumnId[$key]);
                     }
                 }
             }
         }
         //delete group
         if (isset($data_form['deletedObj']['deletedGroup']) && $data_form['deletedObj']['deletedGroup']) {
             $groupList = explode(',', $data_form['deletedObj']['deletedGroup']);
             $groupList = array_filter($groupList);
             foreach ($groupList as $value) {
                 if ($value && ($key = array_search($value, $listGroupId)) !== false) {
                     $groupModel = new LeoManageWidgetGroup();
                     $groupModel->id = $value;
                     if ($groupModel->delete()) {
                         unset($listGroupId[$key]);
                     }
                 }
             }
         }
     }
     $positionGroupByHook = array();
     $positionColumnByGroup = array();
     $positionRowByColumn = array();
     if ($data_form['groups']) {
         foreach ($data_form['groups'] as $group) {
             if (!isset($group['params']) || !$group['params']) {
                 continue;
             }
             //get all group value
             $params = $group['params'];
             $groupModel = new LeoManageWidgetGroup();
             //asign group value to model object
             foreach ($this->_groupField as $gKey => $gField) {
                 if (is_array($gField)) {
                     $tmpObj = array();
                     foreach ($gField as $gF) {
                         if (isset($params[$gF])) {
                             $tmpObj[$gF] = $params[$gF];
                         }
                     }
                     $groupModel->{$gKey} = call_user_func('base64' . '_encode', Tools::jsonEncode($tmpObj));
                 } else {
                     $groupModel->{$gField} = $params[$gField];
                 }
             }
             //assign postion number for group in each hook
             if (!isset($positionGroupByHook[$groupModel->hook_name])) {
                 $groupModel->position = 1;
                 $positionGroupByHook[$groupModel->hook_name] = 1;
             } else {
                 $positionGroupByHook[$groupModel->hook_name] = (int) $positionGroupByHook[$groupModel->hook_name] + 1;
                 $groupModel->position = $positionGroupByHook[$groupModel->hook_name];
             }
             $groupModel->id_shop = $id_shop;
             $groupModel->hook_name = Tools::strtolower($groupModel->hook_name);
             //add new group
             if ($groupModel->id == 0 || !in_array($groupModel->id, $listGroupId)) {
                 if (!$groupModel->add()) {
                     $res = 0;
                     $this->_html .= $this->displayError('Could add new Group in hook %s.', $groupModel->hook_name);
                 }
             } else {
                 if (!$groupModel->update()) {
                     $res = 0;
                     $this->_html .= $this->displayError('Could update Group in hook %s.', $groupModel->hook_name);
                 }
             }
             if (isset($group['columns']) && $group['columns']) {
                 foreach ($group['columns'] as $column) {
                     $columnModel = new LeoManageWidgetColumn();
                     //asign group value to model object
                     foreach ($this->_columnField as $cKey => $cField) {
                         if (is_array($cField)) {
                             $tmpObj = array();
                             foreach ($cField as $cF) {
                                 if (isset($column[$cF])) {
                                     $tmpObj[$cF] = $column[$cF];
                                 }
                             }
                             $columnModel->{$cKey} = call_user_func('base64' . '_encode', Tools::jsonEncode($tmpObj));
                         } else {
                             $columnModel->{$cField} = $column[$cField];
                         }
                     }
                     //assign grop ID
                     $columnModel->id_group = $groupModel->id;
                     //assign postion number for column in each group
                     if (!isset($positionColumnByGroup[$columnModel->id_group])) {
                         $columnModel->position = 1;
                         $positionColumnByGroup[$columnModel->id_group] = 1;
                     } else {
                         $positionColumnByGroup[$columnModel->id_group] = (int) $positionColumnByGroup[$columnModel->id_group] + 1;
                         $columnModel->position = $positionColumnByGroup[$columnModel->id_group];
                     }
                     $columnModel->id_shop = $id_shop;
                     if ($columnModel->id == 0 || !in_array($columnModel->id, $listColumnId)) {
                         if (!$columnModel->add()) {
                             $res = 0;
                             $this->_html .= $this->displayError('Add process is error');
                         }
                     } else {
                         if (!$columnModel->update()) {
                             $res = 0;
                             $this->_html .= $this->displayError('Update process is error');
                         }
                     }
                     //close else
                     //rows of the column
                     if (isset($column['rows']) && $column['rows']) {
                         foreach ($column['rows'] as $row) {
                             $rowModel = new LeoManagerWidgetContent();
                             //asign row value to model object
                             foreach ($this->_rowField as $cKey => $cField) {
                                 if (is_array($cField)) {
                                     $tmpObj = array();
                                     foreach ($cField as $cF) {
                                         if (isset($row[$cF])) {
                                             $tmpObj[$cF] = $row[$cF];
                                         }
                                     }
                                     $rowModel->{$cKey} = call_user_func('base64' . '_encode', Tools::jsonEncode($tmpObj));
                                 } else {
                                     $rowModel->{$cField} = $row[$cField];
                                 }
                             }
                             //assign grop ID
                             $rowModel->id_column = $columnModel->id;
                             $rowModel->id_shop = $id_shop;
                             //assign postion number for row in each column
                             if (!isset($positionRowByColumn[$rowModel->id_column])) {
                                 $rowModel->position = 1;
                                 $positionRowByColumn[$rowModel->id_column] = 1;
                             } else {
                                 $positionRowByColumn[$rowModel->id_column] = (int) $positionRowByColumn[$rowModel->id_column] + 1;
                                 $rowModel->position = $positionRowByColumn[$rowModel->id_column];
                             }
                             if ($rowModel->id == 0 || !in_array($rowModel->id, $listRowId)) {
                                 if (!$rowModel->add()) {
                                     $res = 0;
                                     $this->_html .= $this->displayError('Add process is error');
                                 }
                             } else {
                                 if (!$rowModel->update()) {
                                     $res = 0;
                                     $this->_html .= $this->displayError('Update process is error');
                                 }
                             }
                             if (isset($row['deleteModule']) && $row['deleteModule'] == '1') {
                                 $this->deleteModuleFromHook($row['hook_name'], $row['module_name']);
                             }
                         }
                         //close a row
                     }
                     //close  rows
                 }
             }
             //close a column
         }
         //close a group
     }
     //close group
     $this->clearHookCache();
     Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name);
     //$this->_html .= ($res ? $this->displayConfirmation($this->l('Configuration updated')) : $this->displayError($this->l('The configuration could not be updated.')));
     # validate module
     unset($res);
 }