From 10f1da2bc96af6e12ba2edb0eb3bd3500affdfc3 Mon Sep 17 00:00:00 2001 From: mMarinetti Date: Fri, 30 Dec 2011 16:05:15 +0000 Subject: [PATCH] // fix admin Language and Theme controller git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@11955 b9a71923-0436-4b27-9f14-aed3839534dd --- .../admin/AdminLanguagesController.php | 35 +++++ controllers/admin/AdminThemesController.php | 121 ++++++++++++++---- 2 files changed, 134 insertions(+), 22 deletions(-) diff --git a/controllers/admin/AdminLanguagesController.php b/controllers/admin/AdminLanguagesController.php index 6b0cb8c41..0307aed7f 100644 --- a/controllers/admin/AdminLanguagesController.php +++ b/controllers/admin/AdminLanguagesController.php @@ -486,6 +486,41 @@ class AdminLanguagesControllerCore extends AdminController if (!$lang->active) $this->_errors[] = Tools::displayError('You cannot set this language as default language because it\'s disabled'); } + public function ajaxProcessCheckLangPack() + { + $this->json = true; + if(empty($_GET['iso_lang'])) + { + $this->status = 'error'; + $this->_errors[] = '[TECHNICAL ERROR] iso_lang not set or empty'; + } + if(empty($_GET['ps_version'])) + { + $this->status = 'error'; + $this->_errors[] = '[TECHNICAL ERROR] ps_version not set or empty'; + } + if(@fsockopen('api.prestashop.com', 80)) + { + // Get all iso code available + $lang_packs = Tools::file_get_contents('http://api.prestashop.com/download/lang_packs/get_language_pack.php?version='.(string)$_GET['ps_version'].'&iso_lang='.(string)$_GET['iso_lang']); + + if ($lang_packs !== '' && Tools::jsonDecode($lang_packs) !== NULL) + { + $this->status = 'ok'; + $this->content = $lang_packs; + } + else + { + $this->status = 'error'; + $this->_errors[] = $this->l('wrong ISO code or lang pack unavailable'); + } + } + else + { + $this->status = 'error'; + $this->_errors[] = '[TECHNICAL ERROR] Server unreachable'; + } + } } diff --git a/controllers/admin/AdminThemesController.php b/controllers/admin/AdminThemesController.php index 36be14453..7807af794 100644 --- a/controllers/admin/AdminThemesController.php +++ b/controllers/admin/AdminThemesController.php @@ -135,18 +135,20 @@ class AdminThemesControllerCore extends AdminController ), ); - $getAvailableThemes = Theme::getAvailable(false); - $available_theme_directories = array(); - - $selected_theme_directory = null; - if ($this->loadObject(true)) - $selected_theme_directory = $this->object->directory; + } + public function renderForm(){ + $getAvailableThemes = Theme::getAvailable(false); + $available_theme_dir = array(); + $selected_theme_dir = null; + if ($this->object) + $selected_theme_dir= $this->object->directory; + foreach($getAvailableThemes as $k => $dirname) { - $available_theme_directories[$k]['value'] = $dirname; - $available_theme_directories[$k]['label'] = $dirname; - $available_theme_directories[$k]['id'] = $dirname; + $available_theme_dir[$k]['value'] = $dirname; + $available_theme_dir[$k]['label'] = $dirname; + $available_theme_dir[$k]['id'] = $dirname; }; $this->fields_form = array( 'tinymce' => false, @@ -163,25 +165,48 @@ class AdminThemesControllerCore extends AdminController 'required' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', ), - array( - 'type' => 'radio', - 'label' => $this->l('Directory:'), - 'name' => 'directory', - 'required' => true, - 'br' => true, - 'class' => 't', - 'values' => $available_theme_directories, - 'selected' => $selected_theme_directory, - 'desc' => $this->l('Note: only the existence of the directory is checked. Please be sure to select a valid theme directory.'), - ), ), 'submit' => array( 'title' => $this->l(' Save '), 'class' => 'button' ) ); - } + // adding a new theme, you can create a directory, and copy from an existing theme + if ($this->display == 'add' || !$this->object->id) + { + $this->fields_form['input'][] = array( + 'type' => 'text', + 'label' => $this->l('Directory:'), + 'name' => 'directory', + 'required' => true, + 'desc' => $this->l('Note: only the existence of the directory is checked. Please be sure to select a valid theme directory.'), + ); + $this->fields_form['input'][] = array( + 'type' => 'select', + 'name' => 'based_on', + 'label' => $this->l('Based on'), + 'options' => array( + 'id' => 'id', 'name' => 'name', + 'default' => array('value' => 0, 'label' => ' - '), + 'query' => Theme::getThemes(), + ) + ); + } + else + $this->fields_form['input'][] = array( + 'type' => 'radio', + 'label' => $this->l('Directory:'), + 'name' => 'directory', + 'required' => true, + 'br' => true, + 'class' => 't', + 'values' => $available_theme_dir, + 'selected' => $selected_theme_dir, + 'desc' => $this->l('Note: only the existence of the directory is checked. Please be sure to select a valid theme directory.'), + ); + return parent::renderForm(); + } public function renderList(){ $this->addRowAction('edit'); $this->addRowAction('delete'); @@ -191,6 +216,59 @@ class AdminThemesControllerCore extends AdminController return parent::renderList(); } + + /** + * copy $base_theme_dir into $target_theme_dir. + * + * @param string $base_theme_dir relative path to base dir + * @param string $target_theme_dir relative path to target dir + * @return boolean true if success + */ + private static function copyTheme($base_theme_dir, $target_theme_dir) + { + $res = true; + $base_theme_dir = rtrim($base_theme_dir, '/').'/'; + $base_dir = _PS_ALL_THEMES_DIR_ . $base_theme_dir; + $target_theme_dir = rtrim($target_theme_dir, '/').'/'; + $target_dir = _PS_ALL_THEMES_DIR_ . $target_theme_dir; + $files = scandir($base_dir); + + foreach ($files as $file) + if (!in_array($file[0], array('.', '..', '.svn'))) + { + if (is_dir($base_dir.$file)) + { + if (!is_dir($target_dir.$file)) + mkdir($target_dir.$file, Theme::$access_rights); + + $res &= self::copyTheme($base_theme_dir.$file, $target_theme_dir.$file); + } + elseif (!file_exists($target_theme_dir.$file)) + $res &= copy($base_dir.$file, $target_dir.$file); + } + + return $res; + } + + public function processAdd($token){ + $new_dir = Tools::getValue('directory'); + $res = true; + if (Validate::isDirName($new_dir) && !is_dir(_PS_ALL_THEMES_DIR_.$new_dir)) + { + $res &= mkdir(_PS_ALL_THEMES_DIR_.$new_dir, Theme::$access_rights); + if ($res) + $this->confirmations[] = $this->l('Directory successfully created'); + } + + if (0 !== $id_based = (int)Tools::getValue('based_on')) + { + $base_theme = new Theme($id_based); + $res = $this->copyTheme($base_theme->directory, $new_dir); + $base_theme = new Theme((int)Tools::getValue('based_on')); + } + + return parent::processAdd($token); + } public function processDelete($token){ $obj = $this->loadObject(); @@ -449,7 +527,6 @@ class AdminThemesControllerCore extends AdminController protected function uploadIco($name, $dest) { - if (isset($_FILES[$name]['tmp_name']) && !empty($_FILES[$name]['tmp_name'])) { /* Check ico validity */