diff --git a/admin-dev/tabs/AdminGenders.php b/admin-dev/tabs/AdminGenders.php deleted file mode 100644 index 3564b03a0..000000000 --- a/admin-dev/tabs/AdminGenders.php +++ /dev/null @@ -1,148 +0,0 @@ - -* @copyright 2007-2011 PrestaShop SA -* @version Release: $Revision$ -* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -class AdminGenders extends AdminTab -{ - public function __construct() - { - $this->table = 'gender'; - $this->className = 'Gender'; - $this->lang = true; - $this->edit = true; - $this->delete = true; - $this->defaultImageHeight = 16; - $this->defaultImageWidth = 16; - - $this->fieldImageSettings = array('name' => 'image', 'dir' => 'genders'); - $this->fieldsDisplay = array( - 'id_gender' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), - 'name' => array('title' => $this->l('Name'), 'width' => 150, 'filter_key' => 'b!name'), - 'type' => array( - 'title' => $this->l('Type'), - 'width' => 100, - 'orderby' => false, - 'type' => 'select', - 'select' => array(0 => $this->l('Male'), 1 => $this->l('Female'), 2 => $this->l('Neutral')), - 'filter_key' => 'a!type', - 'callback' => 'displayGenderType', - 'callback_object' => $this, - ), - 'image' => array('title' => $this->l('Image'), 'align' => 'center', 'image' => 'genders', 'orderby' => false, 'search' => false), - ); - - parent::__construct(); - } - - public function displayGenderType($value, $tr) - { - return $this->fieldsDisplay['type']['select'][$value]; - } - - public function displayForm($isMainTab = true) - { - parent::displayForm(); - - if (!($obj = $this->loadObject(true))) - return; - - echo ' -
- '.($obj->id ? '' : '').' -
'.$this->l('Gender').' - -
'; - foreach ($this->_languages as $language) - echo ' -
- * - '.$this->l('Invalid characters:').' 0-9!<>,;?=+()@#"�{}_$%:  -
'; - $this->displayFlags($this->_languages, $this->_defaultFormLanguage, 'name', 'name'); - echo '
 
'; - - echo ' -
- getFieldValue($obj, 'type') == 0 ? 'checked="checked" ' : '').'/> - - getFieldValue($obj, 'type') == 1 ? 'checked="checked" ' : '').'/> - - getFieldValue($obj, 'type') == 2 ? 'checked="checked" ' : '').'/> - -
-
'; - - echo ' -
'; - echo ' '; - if ($obj->getImage()) - echo ''; - echo '
-
- -
- -

'.$this->l('Image width in pixel. "0" to use original size').'

-
-
- -
- -

'.$this->l('Image height in pixel. "0" to use original size').'

-
'; - - echo '
- -
-
* '.$this->l('Required field').'
-
-

'; - } - - protected function postImage($id) - { - if (isset($this->fieldImageSettings['name']) AND isset($this->fieldImageSettings['dir'])) - { - if(!Validate::isInt(Tools::getValue('img_width')) || !Validate::isInt(Tools::getValue('img_height'))) - $this->_errors[] = Tools::displayError('Width and height must be a numeric'); - else - { - if ((int)Tools::getValue('img_width') > 0 && (int)Tools::getValue('img_height') > 0) - { - $width = (int)Tools::getValue('img_width'); - $height = (int)Tools::getValue('img_height'); - } - else - { - $width = NULL; - $height = NULL; - } - return $this->uploadImage($id, $this->fieldImageSettings['name'], $this->fieldImageSettings['dir'].'/', false, $width, $height); - } - } - return !sizeof($this->_errors) ? true : false; - } -} diff --git a/admin-dev/themes/template/form.tpl b/admin-dev/themes/template/form.tpl index 9dd6361bc..5cf14e14c 100644 --- a/admin-dev/themes/template/form.tpl +++ b/admin-dev/themes/template/form.tpl @@ -55,7 +55,7 @@ {/if} -
+ {if $form_id} {/if} @@ -172,6 +172,9 @@ {/if} {elseif $input.type == 'checkbox'} + {elseif $input.type == 'file'} + + {/if} {if isset($input.required) && $input.required} *{/if} {if isset($input.p)} diff --git a/classes/AdminController.php b/classes/AdminController.php index 7d2d95884..bcf319203 100644 --- a/classes/AdminController.php +++ b/classes/AdminController.php @@ -170,6 +170,9 @@ class AdminControllerCore extends Controller /** @var array Name and directory where class image are located */ public $fieldImageSettings = array(); + /** @var string Image type */ + public $imageType = 'jpg'; + public function __construct() { // retro-compatibility : className for admin without controller @@ -968,6 +971,7 @@ class AdminControllerCore extends Controller $helper->shopLinkType = $this->shopLinkType; $helper->identifier = $this->identifier; $helper->token = $this->token; + $helper->imageType = $this->imageType; $helper->_listSkipDelete = $this->_listSkipDelete; $helper->colorOnBackground = $this->colorOnBackground; @@ -1388,11 +1392,11 @@ class AdminControllerCore extends Controller protected function getFieldValue($obj, $key, $id_lang = null) { if ($id_lang) - $defaultValue = ($obj->id && isset($obj->{$key}[$id_lang])) ? $obj->{$key}[$id_lang] : ''; + $default_value = ($obj->id && isset($obj->{$key}[$id_lang])) ? $obj->{$key}[$id_lang] : ''; else - $defaultValue = isset($obj->{$key}) ? $obj->{$key} : ''; + $default_value = isset($obj->{$key}) ? $obj->{$key} : ''; - return Tools::getValue($key.($id_lang ? '_'.$id_lang : ''), $defaultValue); + return Tools::getValue($key.($id_lang ? '_'.$id_lang : ''), $default_value); } /** @@ -1597,6 +1601,42 @@ class AdminControllerCore extends Controller return !count($this->_errors) ? true : false; } + protected function uploadImage($id, $name, $dir, $ext = false, $width = NULL, $height = NULL) + { + if (isset($_FILES[$name]['tmp_name']) && !empty($_FILES[$name]['tmp_name'])) + { + // Delete old image + if (Validate::isLoadedObject($object = $this->loadObject())) + $object->deleteImage(); + else + return false; + + + // Check image validity + $max_size = isset($this->maxImageSize) ? $this->maxImageSize : 0; + if ($error = checkImage($_FILES[$name], Tools::getMaxUploadSize($max_size))) + $this->_errors[] = $error; + elseif (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') || !move_uploaded_file($_FILES[$name]['tmp_name'], $tmpName)) + return false; + else + { + $tmpName = $_FILES[$name]['tmp_name']; + // Copy new image + if (!imageResize($tmpName, _PS_IMG_DIR_.$dir.$id.'.'.$this->imageType, (int)$width, (int)$height, ($ext ? $ext : $this->imageType))) + $this->_errors[] = Tools::displayError('An error occurred while uploading image.'); + if (count($this->_errors)) + return false; + if ($this->afterImageUpload()) + { + unlink($tmpName); + return true; + } + return false; + } + } + return true; + } + /** * Delete multiple items * diff --git a/classes/AdminTab.php b/classes/AdminTab.php index 2544cd14d..6c913b023 100644 --- a/classes/AdminTab.php +++ b/classes/AdminTab.php @@ -1077,7 +1077,7 @@ abstract class AdminTabCore return false; else { - $_FILES[$name]['tmp_name'] = $tmpName; + $tmpName = $_FILES[$name]['tmp_name']; // Copy new image if (!imageResize($tmpName, _PS_IMG_DIR_.$dir.$id.'.'.$this->imageType, (int)$width, (int)$height, ($ext ? $ext : $this->imageType))) $this->_errors[] = Tools::displayError('An error occurred while uploading image.'); diff --git a/classes/Gender.php b/classes/Gender.php index 138d05a09..4337f5ba8 100644 --- a/classes/Gender.php +++ b/classes/Gender.php @@ -85,15 +85,15 @@ class GenderCore extends ObjectModel return ObjectModel::hydrateCollection('Gender', $results, $id_lang); } - public static function getStaticImage($id, $useUnknown = false) + public static function getStaticImage($id, $use_unknown = false) { if (!file_exists(_PS_GENDERS_DIR_.$id.'.jpg')) - return ($useUnknown) ? _PS_ADMIN_IMG_.'unknown.gif' : false; + return ($use_unknown) ? _PS_ADMIN_IMG_.'unknown.gif' : false; return _THEME_GENDERS_DIR_.$id.'.jpg'; } - public function getImage($useUnknown = false) + public function getImage($use_unknown = false) { - return Gender::getStaticImage($this->id, $useUnknown); + return Gender::getStaticImage($this->id, $use_unknown); } } \ No newline at end of file diff --git a/controllers/admin/AdminGendersController.php b/controllers/admin/AdminGendersController.php new file mode 100644 index 000000000..ef1f19f36 --- /dev/null +++ b/controllers/admin/AdminGendersController.php @@ -0,0 +1,207 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 8971 $ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +class AdminGendersController extends AdminController +{ + public function __construct() + { + $this->table = 'gender'; + $this->className = 'Gender'; + $this->lang = true; + $this->edit = true; + $this->delete = true; + $this->requiredDatabase = true; + + $this->context = Context::getContext(); + + if (!Tools::getValue('realedit')) + $this->deleted = false; + + $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'))); + + $this->default_image_height = 16; + $this->default_image_width = 16; + + $this->fieldImageSettings = array( + 'name' => 'image', + 'dir' => 'genders' + ); + + $this->fieldsDisplay = array( + 'id_gender' => array( + 'title' => $this->l('ID'), + 'align' => 'center', + 'width' => 25 + ), + 'name' => array( + 'title' => $this->l('Name'), + 'width' => 150, + 'filter_key' => 'b!name' + ), + 'type' => array( + 'title' => $this->l('Type'), + 'width' => 100, + 'orderby' => false, + 'type' => 'select', + 'select' => array( + 0 => $this->l('Male'), + 1 => $this->l('Female'), + 2 => $this->l('Neutral') + ), + 'filter_key' => 'a!type', + 'callback' => 'displayGenderType', + 'callback_object' => $this, + ), + 'image' => array( + 'title' => $this->l('Image'), + 'align' => 'center', + 'image' => 'genders', + 'orderby' => false, + 'search' => false + ) + ); + + $this->fields_form = array( + 'legend' => array( + 'title' => $this->l('Gender'), + 'image' => '../img/admin/tab-genders.gif' + ), + 'input' => array( + array( + 'type' => 'text', + 'label' => $this->l('Name:'), + 'name' => 'name', + 'lang' => true, + 'attributeLang' => 'name', + 'size' => 33, + 'hint' => $this->l('Invalid characters:').' 0-9!<>,;?=+()@#"�{}_$%:', + 'required' => true + ), + array( + 'type' => 'radio', + 'label' => $this->l('Type:'), + 'name' => 'type', + 'required' => false, + 'class' => 't', + 'values' => array( + array( + 'id' => 'type_male', + 'value' => 0, + 'label' => $this->l('Male') + ), + array( + 'id' => 'type_female', + 'value' => 1, + 'label' => $this->l('Female') + ), + array( + 'id' => 'type_neutral', + 'value' => 2, + 'label' => $this->l('Neutral') + ) + ) + ), + array( + 'type' => 'file', + 'label' => $this->l('Image:'), + 'name' => 'image', + 'value' => true + ), + array( + 'type' => 'text', + 'label' => $this->l('Image Width:'), + 'name' => 'img_width', + 'size' => 4, + 'p' => $this->l('Image width in pixel. "0" to use original size') + ), + array( + 'type' => 'text', + 'label' => $this->l('Image Height:'), + 'name' => 'img_height', + 'size' => 4, + 'p' => $this->l('Image height in pixel. "0" to use original size') + ) + ), + 'submit' => array( + 'title' => $this->l(' Save '), + 'class' => 'button' + ) + ); + + parent::__construct(); + } + + public function initContent() + { + if ($this->display != 'edit' && $this->display != 'add') + $this->display = 'list'; + else + { + if (!($obj = $this->loadObject(true))) + return; + + $this->fields_value = array( + 'img_width' => $this->default_image_width, + 'img_height' => $this->default_image_height, + 'image' => $obj->getImage() + ); + } + + parent::initContent(); + } + + public function displayGenderType($value, $tr) + { + return $this->fieldsDisplay['type']['select'][$value]; + } + + protected function postImage($id) + { + if (isset($this->fieldImageSettings['name']) && isset($this->fieldImageSettings['dir'])) + { + if (!Validate::isInt(Tools::getValue('img_width')) || !Validate::isInt(Tools::getValue('img_height'))) + $this->_errors[] = Tools::displayError('Width and height must be a numeric'); + else + { + if ((int)Tools::getValue('img_width') > 0 && (int)Tools::getValue('img_height') > 0) + { + $width = (int)Tools::getValue('img_width'); + $height = (int)Tools::getValue('img_height'); + } + else + { + $width = null; + $height = null; + } + return $this->uploadImage($id, $this->fieldImageSettings['name'], $this->fieldImageSettings['dir'].'/', false, $width, $height); + } + } + return !count($this->_errors) ? true : false; + } +} + +