* @copyright 2007-2012 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 */ /** * Step 4 : configure the shop and admin access */ class InstallControllerHttpConfigure extends InstallControllerHttp { /** * @see InstallAbstractModel::processNextStep() */ public function processNextStep() { // Save shop configuration $this->session->shop_name = trim(Tools::getValue('shop_name')); $this->session->shop_activity = Tools::getValue('shop_activity'); $this->session->install_type = Tools::getValue('db_mode'); $this->session->shop_country = Tools::getValue('shop_country'); $this->session->shop_timezone = Tools::getValue('shop_timezone'); // Save admin configuration $this->session->admin_firstname = trim(Tools::getValue('admin_firstname')); $this->session->admin_lastname = trim(Tools::getValue('admin_lastname')); $this->session->admin_email = trim(Tools::getValue('admin_email')); $this->session->send_informations = Tools::getValue('send_informations'); // If password fields are empty, but are already stored in session, do not fill them again if (!$this->session->admin_password || trim(Tools::getValue('admin_password'))) $this->session->admin_password = trim(Tools::getValue('admin_password')); if (!$this->session->admin_password_confirm || trim(Tools::getValue('admin_password_confirm'))) $this->session->admin_password_confirm = trim(Tools::getValue('admin_password_confirm')); } /** * @see InstallAbstractModel::validate() */ public function validate() { // List of required fields $required_fields = array('shop_name', 'shop_country', 'shop_timezone', 'admin_firstname', 'admin_lastname', 'admin_email', 'admin_password'); foreach ($required_fields as $field) if (!$this->session->$field) $this->errors[$field] = $this->l('Field required'); // Check shop name if ($this->session->shop_name && !Validate::isGenericName($this->session->shop_name)) $this->errors['shop_name'] = $this->l('Invalid shop name'); // Check admin name if ($this->session->admin_firstname && !Validate::isGenericName($this->session->admin_firstname)) $this->errors['admin_firstname'] = $this->l('Your firstname contains some invalid characters'); if ($this->session->admin_lastname && !Validate::isGenericName($this->session->admin_lastname)) $this->errors['admin_lastname'] = $this->l('Your lastname contains some invalid characters'); // Check passwords if ($this->session->admin_password) { if (!Validate::isPasswdAdmin($this->session->admin_password)) $this->errors['admin_password'] = $this->l('The password is incorrect (alphanumeric string with at least 8 characters)'); else if ($this->session->admin_password != $this->session->admin_password_confirm) $this->errors['admin_password'] = $this->l('Password and its confirmation are different'); } // Check email if ($this->session->admin_email && !Validate::isEmail($this->session->admin_email)) $this->errors['admin_email'] = $this->l('This e-mail address is invalid'); return count($this->errors) ? false : true; } public function process() { if (Tools::getValue('uploadLogo')) $this->processUploadLogo(); else if (Tools::getValue('timezoneByIso')) $this->processTimezoneByIso(); } /** * Process the upload of new logo */ public function processUploadLogo() { $error = ''; if (isset($_FILES['fileToUpload'])) { $file = $_FILES['fileToUpload']; // If error code is not 0, an error occured during upload if ($file['error'] != 0) { $upload_errors = array( 1 => $this->l('The uploaded file exceeds the upload_max_filesize directive in php.ini'), 2 => $this->l('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'), 3 => $this->l('The uploaded file was only partially uploaded'), 4 => $this->l('No file was uploaded'), 6 => $this->l('Missing a temporary folder'), 7 => $this->l('Failed to write file to disk'), 8 => $this->l('File upload stopped by extension'), ); if (isset($upload_errors[$file['error']])) $error = $upload_errors[$file['error']]; else $error = $this->l('No error code available'); } // Check if no error during creation of tmp file else if (!$file['tmp_name'] || $file['tmp_name'] == 'none') { $error = $this->l('Missing a temporary folder'); } // No error, let's update the file else { list($width, $height, $type) = getimagesize($file['tmp_name']); // Check if this is really an image if ($height == 0) $error = $this->l('This is not a valid image file'); // Resize image else { $newheight = ($height > 500) ? 500 : $height; $percent = $newheight / $height; $newwidth = $width * $percent; $newheight = $height * $percent; $thumb = imagecreatetruecolor($newwidth, $newheight); switch ($type) { case 1: $source = imagecreatefromgif($file['tmp_name']); break; case 2: $source = imagecreatefromjpeg($file['tmp_name']); break; case 3: $source = imagecreatefrompng($file['tmp_name']); break; default: $error = $this->l('Image type is not supported'); } if (!$error) { imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); if (!is_writable(_PS_ROOT_DIR_.'/img/logo.jpg')) $error = $this->l('Image folder %s is not writable', _PS_ROOT_DIR_.'/img/'); else if (!imagejpeg($thumb, _PS_ROOT_DIR_.'/img/logo.jpg', 90)) $error = $this->l('Cannot upload the file'); } } } } $this->ajaxJsonAnswer(($error) ? false : true, $error); } /** * Obtain the timezone associated to an iso */ public function processTimezoneByIso() { $timezone = $this->getTimezoneByIso(Tools::getValue('iso')); $this->ajaxJsonAnswer(($timezone) ? true : false, $timezone); } /** * Get list of timezones * * @return array */ public function getTimezones() { if (!is_null($this->cache_timezones)) return; if (!file_exists(_PS_INSTALL_DATA_PATH_.'xml/timezone.xml')) return array(); $xml = simplexml_load_file(_PS_INSTALL_DATA_PATH_.'xml/timezone.xml'); $timezones = array(); foreach ($xml->entities->timezone as $timezone) $timezones[] = (string)$timezone['name']; return $timezones; } /** * Get a timezone associated to an iso * * @param string $iso * @return string */ public function getTimezoneByIso($iso) { if (!file_exists(_PS_INSTALL_DATA_PATH_.'iso_to_timezone.xml')) return ''; $xml = simplexml_load_file(_PS_INSTALL_DATA_PATH_.'iso_to_timezone.xml'); $timezones = array(); foreach ($xml->relation as $relation) $timezones[(string)$relation['iso']] = (string)$relation['zone']; return isset($timezones[$iso]) ? $timezones[$iso] : ''; } /** * @see InstallAbstractModel::display() */ public function display() { // List of activities $list_activities = array( $this->l('Lingerie and Adult'), $this->l('Animals and Pets'), $this->l('Art and Culture'), $this->l('Babies'), $this->l('Beauty and Personal Care'), $this->l('Cars'), $this->l('Computer Hardware and Software'), $this->l('Download'), $this->l('Fashion and accessories'), $this->l('Flowers, Gifts and Crafts'), $this->l('Food and beverage'), $this->l('HiFi, Photo and Video'), $this->l('Home and Garden'), $this->l('Home Appliances'), $this->l('Jewelry'), $this->l('Mobile and Telecom'), $this->l('Services'), $this->l('Shoes and accessories'), $this->l('Sports and Entertainment'), $this->l('Travel'), ); sort($list_activities); $this->list_activities = $list_activities; // Countries list $this->list_countries = array(); $countries = $this->language->getCountries(); $top_countries = array( 'fr', 'es', 'us', 'gb', 'it', 'de', 'nl', 'pl', 'id', 'be', 'br', 'se', 'ca', 'ru', 'cn', ); foreach ($top_countries as $iso) $this->list_countries[] = array('iso' => $iso, 'name' => $countries[$iso]); $this->list_countries[] = array('name' => '-----------------'); foreach ($countries as $iso => $lang) if (!in_array($iso, $top_countries)) $this->list_countries[] = array('iso' => $iso, 'name' => $lang); // Try to detect default country if (!$this->session->shop_country) { $detect_language = $this->language->detectLanguage(); if (isset($detect_language['primarytag'])) { $this->session->shop_country = (isset($detect_language['subtag'])) ? $detect_language['subtag'] : $detect_language['primarytag']; $this->session->shop_timezone = $this->getTimezoneByIso($this->session->shop_country); } } // Install type $this->install_type = ($this->session->install_type) ? $this->session->install_type : 'full'; $this->displayTemplate('configure'); } /** * Helper to display error for a field * * @param unknown_type $field */ public function displayError($field) { if (!isset($this->errors[$field])) return; return ''.$this->errors[$field].''; } }