This commit is contained in:
Michael RICOIS 2017-11-17 11:42:47 +01:00
parent ea761282f0
commit 1c5205a2a8
4 changed files with 180 additions and 157 deletions

View File

@ -70,6 +70,116 @@ class AdminGuideCategories extends AdminTab
parent::__construct();
}
public function postProcess()
{
if (isset($_GET['delete'.$this->table]) || Tools::getValue('submitDel'.$this->table)) {
$this->postProcessDelete();
return;
}
if (self::$current_category->id != 0) {
$this->noLink = true;
}
parent::postProcess();
}
protected function afterUpdate()
{
return $this->afterAdd();
}
protected function afterAdd()
{
if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name'] != NULL) {
$object = $this->loadObject();
$error = checkImage($_FILES['image'], $this->maxImageSize);
if ($error) {
$this->_errors[] = $error;
return false;
}
$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if (!$tmpName OR !move_uploaded_file($_FILES['image']['tmp_name'], $tmpName)) {
$this->_errors[] = Tools::displayError('An error occurred during the image upload');
return false;
}
$new_path = $object->getImageFilePath();
if (file_exists($new_path)) {
@unlink($new_path);
}
if (!imageResize($tmpName, $new_path, self::IMG_WIDTH, self::IMG_HEIGHT)) {
$this->_errors[] = Tools::displayError('An error occurred while copying image.');
return false;
}
@unlink($tmpName);
}
return true;
}
private function postProcessDelete()
{
global $currentIndex;
if ($this->tabAccess['delete'] === '1')
{
if (isset($_GET['delete'.$this->table])) {
$object = $this->loadObject();
if (Validate::isLoadedObject($object)) {
$result = $object->delete();
if (!$result) {
if ($object->getDeleteError()==1) {
$this->_errors[] = Tools::displayError($this->l('The category has at least one sub category'));
}
else if ($object->getDeleteError()==2) {
$this->_errors[] = Tools::displayError($this->l('The category contains at least one page'));
}
else {
$this->_errors[] = Tools::displayError('An error occurred during deletion.');
}
}
else {
Tools::redirectAdmin($currentIndex.'&id_guide_category_parent='.self::$current_category->id.'&conf=1&token='.$this->token);
}
}
else {
$this->_errors[] = Tools::displayError('An error occurred while deleting object.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
}
return;
}
elseif (Tools::getValue('submitDel'.$this->table)) {
$object = new GuideCategory();
$result = $object->deleteSelection(Tools::getValue($this->table.'Box'));
if (!$result) {
if ($object->getDeleteError()==1) {
$this->_errors[] = Tools::displayError($this->l('One of the selected categories has at least one sub category'));
}
elseif ($object->getDeleteError()==2) {
$this->_errors[] = Tools::displayError($this->l('One of the selected categories contains at least one page'));
}
else {
$this->_errors[] = Tools::displayError('An error occurred while deleting selection.');
}
}
else {
Tools::redirectAdmin($currentIndex.'&id_guide_category_parent='.self::$current_category->id.'&conf=1&token='.$this->token);
}
return;
}
}
}
protected function _displayEditLink($token = NULL, $id)
{
global $currentIndex;
@ -275,115 +385,4 @@ class AdminGuideCategories extends AdminTab
$this->displayRequiredFields();
$this->includeSubTab('display');
}
public function postProcess()
{
if (isset($_GET['delete'.$this->table]) ||
Tools::getValue('submitDel'.$this->table)) {
$this->postProcessDelete();
return;
}
if (self::$current_category->id != 0) {
$this->noLink = true;
}
parent::postProcess();
}
protected function afterUpdate()
{
return $this->afterAdd();
}
protected function afterAdd()
{
if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name'] != NULL) {
$object = $this->loadObject();
$error = checkImage($_FILES['image'], $this->maxImageSize);
if ($error) {
$this->_errors[] = $error;
return false;
}
$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS');
if (!$tmpName OR !move_uploaded_file($_FILES['image']['tmp_name'], $tmpName)) {
$this->_errors[] = Tools::displayError('An error occurred during the image upload');
return false;
}
$new_path = $object->getImageFilePath();
if (file_exists($new_path)) {
@unlink($new_path);
}
if (!imageResize($tmpName, $new_path, self::IMG_WIDTH, self::IMG_HEIGHT)) {
$this->_errors[] = Tools::displayError('An error occurred while copying image.');
return false;
}
@unlink($tmpName);
}
return true;
}
private function postProcessDelete()
{
global $currentIndex;
if ($this->tabAccess['delete'] === '1')
{
if (isset($_GET['delete'.$this->table])) {
$object = $this->loadObject();
if (Validate::isLoadedObject($object)) {
$result = $object->delete();
if (!$result) {
if ($object->getDeleteError()==1) {
$this->_errors[] = Tools::displayError($this->l('The category has at least one sub category'));
}
else if ($object->getDeleteError()==2) {
$this->_errors[] = Tools::displayError($this->l('The category contains at least one page'));
}
else {
$this->_errors[] = Tools::displayError('An error occurred during deletion.');
}
}
else {
Tools::redirectAdmin($currentIndex.'&id_guide_category_parent='.self::$current_category->id.'&conf=1&token='.$this->token);
}
}
else {
$this->_errors[] = Tools::displayError('An error occurred while deleting object.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
}
return;
}
elseif (Tools::getValue('submitDel'.$this->table)) {
$object = new GuideCategory();
$result = $object->deleteSelection(Tools::getValue($this->table.'Box'));
if (!$result) {
if ($object->getDeleteError()==1) {
$this->_errors[] = Tools::displayError($this->l('One of the selected categories has at least one sub category'));
}
elseif ($object->getDeleteError()==2) {
$this->_errors[] = Tools::displayError($this->l('One of the selected categories contains at least one page'));
}
else {
$this->_errors[] = Tools::displayError('An error occurred while deleting selection.');
}
}
else {
Tools::redirectAdmin($currentIndex.'&id_guide_category_parent='.self::$current_category->id.'&conf=1&token='.$this->token);
}
return;
}
}
}
}

View File

@ -3,7 +3,6 @@ require_once(__DIR__.'/classes/GuidePost.php');
require_once(__DIR__.'/classes/GuideCategory.php');
require_once(__DIR__.'/classes/FormBuilder.php');
class AdminGuidePosts extends AdminTab
{
public function __construct()
@ -85,6 +84,27 @@ class AdminGuidePosts extends AdminTab
parent::postProcess();
}
public function displayTop()
{
global $cookie;
$id_guide_category = Tools::getValue('id_guide_category', 0);
if ($id_guide_category == 0) {
} else {
$category = new GuideCategory($id_guide_category);
$currentIndex = '?tab=AdminGuideCategories';
$token = Tools::getAdminTokenLite('AdminGuideCategories');
echo '<a href="'.$currentIndex.'&token='.$token.'&id_guide_category='.$category->id_parent.
'"><img src="../img/admin/arrow2.gif" /> '.$this->l('back to').' '.
$category->name[$cookie->id_lang].'</a><br /><br />';
echo $this->l('Current category').' : '.$category->name[$cookie->id_lang].'<br /><br />';
}
}
public function displayList()
{
$this->_orderBy = 'position';
@ -96,8 +116,9 @@ class AdminGuidePosts extends AdminTab
global $currentIndex, $cookie, $smarty;
parent::displayForm();
if (!($obj = $this->loadObject(true)))
return;
if (!($obj = $this->loadObject(true))) {
return;
}
$langs = Language::getLanguages(false);
@ -145,6 +166,5 @@ class AdminGuidePosts extends AdminTab
$form->setFields($this->fieldsForm);
$form->setSubmitButton($this->l('Save'));
$form->display($smarty, $langs, $obj);
}
}

View File

@ -180,8 +180,10 @@ class GuideCategory extends ObjectModel
public function update($autodate = true, $nullValues = false)
{
$this->position = self::cleanupPositions((int)$this->id_parent);
return parent::update($autodate, $nullValues);
$this->position = self::getLastPosition((int)$this->id_parent);
$ret = parent::update($autodate, $nullValues);
$this->cleanupPositions((int)$this->id_parent);
return $ret;
}
public function delete()
@ -191,10 +193,9 @@ class GuideCategory extends ObjectModel
return FALSE;
}
if ($this->getNbPosts($this->id)) {
$this->error = 2;
return FALSE;
return false;
}
if (!parent::delete()) {
@ -211,11 +212,11 @@ class GuideCategory extends ObjectModel
public function deleteSelection($selection)
{
if (!is_array($selection) OR !Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
die(Tools::displayError());
if (!is_array($selection) OR !Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table)) {
die(Tools::displayError());
}
$result = true;
foreach ($selection AS $id)
{
foreach ($selection AS $id) {
$this->id = (int)($id);
$result2 = $this->delete();
$result = $result && $this->delete();
@ -235,15 +236,20 @@ class GuideCategory extends ObjectModel
FROM `'._DB_PREFIX_.'guide_category` cp
WHERE cp.`id_parent` = '.(int)$this->id_parent.'
ORDER BY cp.`position` ASC'
))
return false;
)) {
return false;
}
foreach ($res AS $category)
if ((int)($category['id_guide_category']) == (int)($this->id))
$movedCategory = $category;
foreach ($res AS $category) {
if ((int)($category['id_guide_category']) == (int)($this->id)) {
$movedCategory = $category;
}
}
if (!isset($movedCategory) || !isset($position)) {
return false;
}
if (!isset($movedCategory) || !isset($position))
return false;
// < and > statements rather than BETWEEN operator
// since BETWEEN is treated differently according to databases
return (Db::getInstance()->Execute('
@ -260,14 +266,33 @@ class GuideCategory extends ObjectModel
WHERE `id_parent` = '.(int)($movedCategory['id_parent']).'
AND `id_guide_category`='.(int)($movedCategory['id_guide_category'])));
}
private function cleanupPositions($id_parent)
{
$result = Db::getInstance()->ExecuteS('
SELECT `id_guide_category`
FROM `'._DB_PREFIX_.'guide_category`
WHERE `id_parent` = '.(int)($id_parent).'
ORDER BY `position`');
$position = 0;
foreach ($result as $row) {
$position++;
$sql = '
UPDATE `'._DB_PREFIX_.'guide_category`
SET `position` = '.(int)($position).'
WHERE `id_parent` = '.(int)($id_parent).'
AND `id_guide_category` = '.(int)($row['id_guide_category']);
Db::getInstance()->Execute($sql);
}
return true;
}
public static function getLastPosition($id_parent)
{
return (Db::getInstance()->getValue('SELECT MAX(position)+1 FROM `'._DB_PREFIX_.'guide_category` WHERE `id_parent` = '.(int)($id_parent)));
return (Db::getInstance()->getValue('SELECT MAX(position)+1 FROM `'._DB_PREFIX_.
'guide_category` WHERE `id_parent` = '.(int)($id_parent)));
}
private function getNbSubCategories($id_guide_category)
{
$sql = 'SELECT COUNT(*)
@ -276,7 +301,6 @@ class GuideCategory extends ObjectModel
return Db::getInstance()->getValue($sql);
}
private function getNbPosts($id_guide_category)
{
$sql = 'SELECT COUNT(*)
@ -284,25 +308,6 @@ class GuideCategory extends ObjectModel
WHERE `id_guide_category` = '.intval($id_guide_category);
return Db::getInstance()->getValue($sql);
}
private function cleanupPositions($id_parent)
{
$sql = 'SELECT `id_guide_category`
FROM `'._DB_PREFIX_.'guide_category`
WHERE `id_parent` = '.intval($id_parent).'
ORDER BY `position` ASC';
$rows = Db::getInstance()->ExecuteS($sql);
$position = 1;
foreach($rows as $row) {
$sql = 'UPDATE `'._DB_PREFIX_.'guide_category`
SET `position` = '.$position.'
WHERE `id_guide_category` = '.$row['id_guide_category'];
Db::getInstance()->Execute($sql);
$position++;
}
return $position;
}
public function findByCategoryFamily($id, $id_lang)
{
@ -311,7 +316,6 @@ class GuideCategory extends ObjectModel
" AND gc.id_category_family=".$id;
$row = Db::getInstance()->getRow($sql);
return $row;
}

View File

@ -55,7 +55,7 @@ class PostController extends FrontController
$sql = "SELECT * FROM ps_guide_category gc, ps_guide_category_lang gcl
WHERE gc.active=1 AND gc.id_guide_category=gcl.id_guide_category
AND gc.id_parent=".$id_category." AND gcl.id_lang=".$id_lang.
" ORDER BY position DESC";
" ORDER BY position ASC";
$category = Db::getInstance()->getRow($sql);
}
}
@ -65,8 +65,8 @@ class PostController extends FrontController
if ($id_post != 0) {
$sql = "SELECT * FROM ps_guide_post gp, ps_guide_post_lang gpl
WHERE gp.active=1 AND gp.id_guide_post=gpl.id_guide_post
AND gp.id_guide_category=".$category['id_guide_category']." AND gp.id_guide_post=".$id_post.
" AND gpl.id_lang=".$id_lang;
AND gp.id_guide_category=".$category['id_guide_category'].
" AND gp.id_guide_post=".$id_post." AND gpl.id_lang=".$id_lang;
$content = Db::getInstance()->getRow($sql);
}
// Auto Select Post