// 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
This commit is contained in:
mMarinetti
2011-12-30 16:05:15 +00:00
parent 97443c2591
commit 10f1da2bc9
2 changed files with 134 additions and 22 deletions

View File

@@ -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';
}
}
}

View File

@@ -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 */