[*] BO #PSFV-94 : Added AdminLanguagesController
git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@9621 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
@@ -1,450 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 7310 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class AdminLanguages extends AdminTab
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->table = 'lang';
|
||||
$this->className = 'Language';
|
||||
$this->lang = false;
|
||||
$this->edit = true;
|
||||
$this->delete = true;
|
||||
|
||||
$this->fieldImageSettings = array(array('name' => 'flag', 'dir' => 'l'), array('name' => 'no-picture', 'dir' => 'p'));
|
||||
|
||||
$this->fieldsDisplay = array(
|
||||
'id_lang' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
|
||||
'flag' => array('title' => $this->l('Logo'), 'align' => 'center', 'image' => 'l', 'orderby' => false, 'search' => false),
|
||||
'name' => array('title' => $this->l('Name'), 'width' => 120),
|
||||
'iso_code' => array('title' => $this->l('ISO code'), 'width' => 70, 'align' => 'center'),
|
||||
'language_code' => array('title' => $this->l('Language code'), 'width' => 70, 'align' => 'center'),
|
||||
'date_format_lite' => array('title' => $this->l('Date format')),
|
||||
'date_format_full' => array('title' => $this->l('Date format (full)')),
|
||||
'active' => array('title' => $this->l('Enabled'), 'align' => 'center', 'active' => 'status', 'type' => 'bool'),
|
||||
);
|
||||
|
||||
$this->optionsList = array(
|
||||
'general' => array(
|
||||
'title' => $this->l('Languages options'),
|
||||
'fields' => array(
|
||||
'PS_LANG_DEFAULT' => array('title' => $this->l('Default language:'), 'desc' => $this->l('The default language used in shop'), 'cast' => 'intval', 'type' => 'select', 'identifier' => 'id_lang', 'list' => Language::getlanguages(false)),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a no-product image
|
||||
*
|
||||
* @param string $language Language iso_code for no-picture image filename
|
||||
*/
|
||||
public function copyNoPictureImage($language)
|
||||
{
|
||||
if (isset($_FILES['no-picture']) and $_FILES['no-picture']['error'] === 0)
|
||||
if ($error = checkImage($_FILES['no-picture'], Tools::getMaxUploadSize()))
|
||||
$this->_errors[] = $error;
|
||||
else
|
||||
{
|
||||
if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($_FILES['no-picture']['tmp_name'], $tmpName))
|
||||
return false;
|
||||
if (!imageResize($tmpName, _PS_IMG_DIR_.'p/'.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while copying no-picture image to your product folder.');
|
||||
if (!imageResize($tmpName, _PS_IMG_DIR_.'c/'.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while copying no-picture image to your category folder.');
|
||||
if (!imageResize($tmpName, _PS_IMG_DIR_.'m/'.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while copying no-picture image to your manufacturer folder');
|
||||
else
|
||||
{
|
||||
$imagesTypes = ImageType::getImagesTypes('products');
|
||||
foreach ($imagesTypes AS $k => $imageType)
|
||||
{
|
||||
if (!imageResize($tmpName, _PS_IMG_DIR_.'p/'.$language.'-default-'.stripslashes($imageType['name']).'.jpg', $imageType['width'], $imageType['height']))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while resizing no-picture image to your product directory.');
|
||||
if (!imageResize($tmpName, _PS_IMG_DIR_.'c/'.$language.'-default-'.stripslashes($imageType['name']).'.jpg', $imageType['width'], $imageType['height']))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while resizing no-picture image to your category directory.');
|
||||
if (!imageResize($tmpName, _PS_IMG_DIR_.'m/'.$language.'-default-'.stripslashes($imageType['name']).'.jpg', $imageType['width'], $imageType['height']))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while resizing no-picture image to your manufacturer directory.');
|
||||
}
|
||||
}
|
||||
unlink($tmpName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* deleteNoPictureImages will delete all default image created for the language id_language
|
||||
*
|
||||
* @param string $id_language
|
||||
* @return boolean true if no error
|
||||
*/
|
||||
private function deleteNoPictureImages($id_language)
|
||||
{
|
||||
$language = Language::getIsoById($id_language);
|
||||
$imagesTypes = ImageType::getImagesTypes('products');
|
||||
$dirs = array(_PS_PROD_IMG_DIR_, _PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_SUPP_IMG_DIR_, _PS_MANU_IMG_DIR_);
|
||||
foreach ($dirs AS $dir)
|
||||
{
|
||||
foreach ($imagesTypes AS $k => $imageType)
|
||||
if (file_exists($dir.$language.'-default-'.stripslashes($imageType['name']).'.jpg'))
|
||||
if (!unlink($dir.$language.'-default-'.stripslashes($imageType['name']).'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred during image deletion.');
|
||||
|
||||
if (file_exists($dir.$language.'.jpg'))
|
||||
if (!unlink($dir.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred during image deletion.');
|
||||
}
|
||||
|
||||
return !sizeof($this->_errors) ? true : false;
|
||||
}
|
||||
|
||||
protected function copyFromPost(&$object, $table)
|
||||
{
|
||||
if($object->id AND ($object->iso_code != $_POST['iso_code']))
|
||||
if(Validate::isLanguageIsoCode($_POST['iso_code']))
|
||||
$object->moveToIso($_POST['iso_code']);
|
||||
parent::copyFromPost($object, $table);
|
||||
}
|
||||
|
||||
public function postProcess()
|
||||
{
|
||||
if (isset($_GET['delete'.$this->table]))
|
||||
{
|
||||
if ($this->tabAccess['delete'] === '1')
|
||||
{
|
||||
if (Validate::isLoadedObject($object = $this->loadObject()) AND isset($this->fieldImageSettings))
|
||||
{
|
||||
// English is needed by the system (ex. translations)
|
||||
if ($object->id == Language::getIdByIso('en'))
|
||||
$this->_errors[] = $this->l('You cannot delete the English language as it is a system requirement, you can only deactivate it.');
|
||||
if ($object->id == Configuration::get('PS_LANG_DEFAULT'))
|
||||
$this->_errors[] = $this->l('you cannot delete the default language');
|
||||
elseif ($object->id == clan)
|
||||
$this->_errors[] = $this->l('You cannot delete the language currently in use. Please change languages before deleting.');
|
||||
elseif ($this->deleteNoPictureImages((int)(Tools::getValue('id_lang'))) AND $object->delete())
|
||||
Tools::redirectAdmin(self::$currentIndex.'&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)');
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
elseif(Tools::getValue('submitDel'.$this->table) AND isset($_POST[$this->table.'Box']))
|
||||
{
|
||||
if ($this->tabAccess['delete'] === '1')
|
||||
{
|
||||
if (in_array(Configuration::get('PS_LANG_DEFAULT'), $_POST[$this->table.'Box']))
|
||||
$this->_errors[] = $this->l('you cannot delete the default language');
|
||||
elseif (in_array($this->context->language->id, $_POST[$this->table.'Box']))
|
||||
$this->_errors[] = $this->l('you cannot delete the language currently in use, please change languages before deleting');
|
||||
else
|
||||
{
|
||||
foreach ($_POST[$this->table.'Box'] AS $language)
|
||||
$this->deleteNoPictureImages($language);
|
||||
parent::postProcess();
|
||||
}
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
elseif (Tools::isSubmit('submitAddlang'))
|
||||
{
|
||||
/* New language */
|
||||
if ((int)(Tools::getValue('id_'.$this->table)) == 0)
|
||||
{
|
||||
if ($this->tabAccess['add'] === '1')
|
||||
{
|
||||
if (isset($_POST['iso_code']) AND !empty($_POST['iso_code']) AND Validate::isLanguageIsoCode(Tools::getValue('iso_code')) AND Language::getIdByIso($_POST['iso_code']))
|
||||
$this->_errors[] = Tools::displayError('This ISO code is already linked to another language.');
|
||||
if ((!empty($_FILES['no-picture']['tmp_name']) OR !empty($_FILES['flag']['tmp_name'])) AND Validate::isLanguageIsoCode(Tools::getValue('iso_code')))
|
||||
{
|
||||
if ($_FILES['no-picture']['error'] == UPLOAD_ERR_OK)
|
||||
$this->copyNoPictureImage(strtolower(Tools::getValue('iso_code')));
|
||||
// class AdminTab deal with every $_FILES content, don't do that for no-picture
|
||||
unset($_FILES['no-picture']);
|
||||
parent::postProcess();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->validateRules();
|
||||
$this->_errors[] = Tools::displayError('Flag and No-Picture image fields are required.');
|
||||
}
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to add here.');
|
||||
}
|
||||
/* Language edition */
|
||||
else
|
||||
{
|
||||
if ($this->tabAccess['edit'] === '1')
|
||||
{
|
||||
if (( isset($_FILES['no-picture']) AND !$_FILES['no-picture']['error'] OR isset($_FILES['flag']) AND !$_FILES['flag']['error'])
|
||||
AND Validate::isLanguageIsoCode(Tools::getValue('iso_code')))
|
||||
{
|
||||
if ($_FILES['no-picture']['error'] == UPLOAD_ERR_OK)
|
||||
$this->copyNoPictureImage(strtolower(Tools::getValue('iso_code')));
|
||||
// class AdminTab deal with every $_FILES content, don't do that for no-picture
|
||||
unset($_FILES['no-picture']);
|
||||
parent::postProcess();
|
||||
}
|
||||
|
||||
if (!Validate::isLoadedObject($object = $this->loadObject()))
|
||||
die(Tools::displayError());
|
||||
if ((int)($object->id) == (int)(Configuration::get('PS_LANG_DEFAULT')) AND (int)($_POST['active']) != (int)($object->active))
|
||||
$this->_errors[] = Tools::displayError('You cannot change the status of the default language.');
|
||||
else
|
||||
parent::postProcess();
|
||||
|
||||
$this->validateRules();
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
|
||||
}
|
||||
}
|
||||
elseif (isset($_GET['status']) AND isset($_GET['id_lang']))
|
||||
{
|
||||
if ($this->tabAccess['edit'] === '1')
|
||||
{
|
||||
if (!Validate::isLoadedObject($object = $this->loadObject()))
|
||||
die(Tools::displayError());
|
||||
if ((int)($object->id) == (int)(Configuration::get('PS_LANG_DEFAULT')))
|
||||
$this->_errors[] = Tools::displayError('You cannot change the status of the default language.');
|
||||
else
|
||||
return parent::postProcess();
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
|
||||
}
|
||||
else
|
||||
return parent::postProcess();
|
||||
}
|
||||
|
||||
public function beforeUpdateOptions()
|
||||
{
|
||||
$lang = new Language((int)Tools::getValue('PS_LANG_DEFAULT'));
|
||||
if (!$lang->active)
|
||||
$this->_errors[] = Tools::displayError('You cannot set this language as default language because it\'s disabled');
|
||||
}
|
||||
|
||||
public function displayList()
|
||||
{
|
||||
$this->displayWarning($this->l('When you delete a language, all related translations in the database will be deleted.'));
|
||||
parent::displayList();
|
||||
$languages = Language::getLanguages(false);
|
||||
}
|
||||
|
||||
public function displayListContent($token=NULL)
|
||||
{
|
||||
$irow = 0;
|
||||
if ($this->_list)
|
||||
|
||||
foreach ($this->_list AS $tr)
|
||||
{
|
||||
$id = $tr[$this->identifier];
|
||||
if ($tr['active'])
|
||||
{
|
||||
$active['title'] = "Enabled";
|
||||
$active['img'] = "enabled";
|
||||
if (!Language::checkFilesWithIsoCode($tr['iso_code']))
|
||||
{
|
||||
$active['title'] = "Warning, some translations files are missing for that iso-code";
|
||||
$active['img'] = "warning";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$active['title'] = "Disabled";
|
||||
$active['img'] = "disabled";
|
||||
}
|
||||
echo '<tr'.($irow++ % 2 ? ' class="alt_row"' : '').' '.((isset($tr['color']) AND $this->colorOnBackground) ? 'style="background-color: '.$tr['color'].'"' : '').'>';
|
||||
echo '<td class="center"><input type="checkbox" name="'.$this->table.'Box[]" value="'.$id.'" class="noborder" /></td>';
|
||||
|
||||
foreach ($this->fieldsDisplay AS $key => $params)
|
||||
{
|
||||
$tmp = explode('!', $key);
|
||||
$key = isset($tmp[1]) ? $tmp[1] : $tmp[0];
|
||||
echo '<td class="pointer '.(isset($params['align']) ? $params['align'] : '').'" onclick="document.location = \''.self::$currentIndex.'&'.$this->identifier.'='.$id.'&update'.$this->table.'&token='.($token!=NULL ? $token : $this->token).'\'">';
|
||||
if (isset($params['active']) AND isset($tr[$key]))
|
||||
echo '<a href="'.self::$currentIndex.'&'.$this->identifier.'='.$id.'&'.$params['active'].'&token='.($token != NULL ? $token : $this->token).'"><img src="../img/admin/'.$active['img'].'.gif" alt="active" title="'.$active['title'].'" /></a>';
|
||||
elseif (isset($params['image']))
|
||||
echo cacheImage(_PS_IMG_DIR_.$params['image'].'/'.$id.(isset($tr['id_image']) ? '-'.(int)($tr['id_image']) : '').'.'.$this->imageType, $this->table.'_mini_'.$id.'.'.$this->imageType, 45, $this->imageType);
|
||||
elseif (isset($tr[$key]))
|
||||
echo $tr[$key];
|
||||
else
|
||||
echo '--';
|
||||
'</td>';
|
||||
}
|
||||
if ($this->edit OR $this->delete OR ($this->view AND $this->view !== 'noActionColumn'))
|
||||
{
|
||||
echo '<td class="center">';
|
||||
if ($this->edit)
|
||||
echo '
|
||||
<a href="'.self::$currentIndex.'&'.$this->identifier.'='.$id.'&update'.$this->table.'&token='.($token != NULL ? $token : $this->token).'">
|
||||
<img src="../img/admin/edit.gif" border="0" alt="'.$this->l('Edit').'" title="'.$this->l('Edit').'" /></a>';
|
||||
if ($this->delete)
|
||||
echo '
|
||||
<a href="'.self::$currentIndex.'&'.$this->identifier.'='.$id.'&delete'.$this->table.'&token='.($token != NULL ? $token : $this->token).'" onclick="return confirm(\''.$this->l('When you delete a language, ALL RELATED TRANSLATIONS IN THE DATABASE WILL BE DELETED, are you sure you want to delete this language?', __CLASS__, true, false).'\');">
|
||||
<img src="../img/admin/delete.gif" border="0" alt="'.$this->l('Delete').'" title="'.$this->l('Delete').'" /></a>';
|
||||
echo '</td>';
|
||||
}
|
||||
echo '</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
public function displayForm($isMainTab = true)
|
||||
{
|
||||
parent::displayForm();
|
||||
|
||||
if (!($obj = $this->loadObject(true)))
|
||||
return;
|
||||
|
||||
echo '
|
||||
<script type="text/javascript">
|
||||
var langPackOk = "<img src=\"'._PS_IMG_.'admin/information.png\" alt=\"\" /> '.$this->l('A language pack is available for this ISO (name is').'";
|
||||
var langPackVersion = "'.$this->l('The compatible Prestashop version for this language and your system is: ').'";
|
||||
var langPackInfo = "'.$this->l('After creating the language, you can import the content of the language pack, which you can download above under "Tools - Translations"').'";
|
||||
var noLangPack = "<img src=\"'._PS_IMG_.'admin/information.png\" alt=\"\" /> '.$this->l('No language pack available on prestashop.com for this ISO code').'";
|
||||
var download = "'.$this->l('Download').'";
|
||||
</script>
|
||||
<script type="text/javascript" src="'._PS_JS_DIR_.'checkLangPack.js"></script>
|
||||
<form action="'.self::$currentIndex.'&submitAdd'.$this->table.'=1&token='.$this->token.'" method="post" enctype="multipart/form-data">
|
||||
'.($obj->id ? '<input type="hidden" name="id_'.$this->table.'" value="'.$obj->id.'" />' : '').'
|
||||
<fieldset><legend><img src="../img/admin/world.gif" />'.$this->l('Languages').'</legend>
|
||||
<input type="hidden" value="'._PS_VERSION_.'" name="ps_version" id="ps_version" />
|
||||
<label>'.$this->l('Name:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="8" maxlength="32" name="name" value="'.Tools::htmlentitiesUTF8($this->getFieldValue($obj, 'name')).'" /> <sup>*</sup>
|
||||
</div>
|
||||
<label>'.$this->l('ISO code:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="4" maxlength="2" name="iso_code" id="iso_code" value="'.Tools::htmlentitiesUTF8($this->getFieldValue($obj, 'iso_code')).'" onKeyUp="checkLangPack();" /> <sup>*</sup>
|
||||
<p>'.$this->l('2-letter ISO code (e.g., fr, en, de)').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('Language code:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="10" maxlength="5" name="language_code" id="language_code" value="'.Tools::htmlentitiesUTF8($this->getFieldValue($obj, 'language_code')).'"/> <sup>*</sup>
|
||||
<p>'.$this->l('Full language code (e.g., en-us, pt-br)').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('Date format:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="15" name="date_format_lite" id="date_format_lite" value="'.Tools::htmlentitiesUTF8($this->getFieldValue($obj, 'date_format_lite')).'"/> <sup>*</sup>
|
||||
<p>'.$this->l('Date format, lite (e.g., Y-m-d, d/m/Y)').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('Date format (full):').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="text" size="25" name="date_format_full" id="date_format_full" value="'.Tools::htmlentitiesUTF8($this->getFieldValue($obj, 'date_format_full')).'"/> <sup>*</sup>
|
||||
<p>'.$this->l('Date format, full (e.g., Y-m-d H:i:s, d/m/Y H:i)').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('Flag:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="file" name="flag" /> <sup>*</sup>
|
||||
<p>'.$this->l('Upload country flag from your computer').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('"No-picture" image:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="file" name="no-picture" /> <sup>*</sup>
|
||||
<p>'.$this->l('Image displayed when "no picture found"').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('Is RTL language:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="radio" name="is_rtl" id="is_rtl_on" value="1" '.(($this->getFieldValue($obj, 'is_rtl')) ? 'checked="checked" ' : '').'/>
|
||||
<label class="t" for="is_rtl_on"> <img src="../img/admin/enabled.gif" alt="'.$this->l('Enabled').'" title="'.$this->l('Yes').'" /></label>
|
||||
<input type="radio" name="is_rtl" id="active_off" value="0" '.((!$this->getFieldValue($obj, 'is_rtl')) ? 'checked="checked" ' : '').'/>
|
||||
<label class="t" for="is_rtl_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Disabled').'" title="'.$this->l('No').'" /></label>
|
||||
<p>'.$this->l('To active if this language is a right to left language').' '.$this->l('(Experimental: your theme must be compliant with RTL language)').'</p>
|
||||
</div>
|
||||
<label>'.$this->l('Status:').' </label>
|
||||
<div class="margin-form">
|
||||
<input type="radio" name="active" id="active_on" value="1" '.((!$obj->id OR $this->getFieldValue($obj, 'active')) ? 'checked="checked" ' : '').'/>
|
||||
<label class="t" for="active_on"> <img src="../img/admin/enabled.gif" alt="'.$this->l('Enabled').'" title="'.$this->l('Enabled').'" /></label>
|
||||
<input type="radio" name="active" id="active_off" value="0" '.((!$this->getFieldValue($obj, 'active') AND $obj->id) ? 'checked="checked" ' : '').'/>
|
||||
<label class="t" for="active_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Disabled').'" title="'.$this->l('Disabled').'" /></label>
|
||||
<p>'.$this->l('Allow or disallow this language to be selected by the customer').'</p>
|
||||
</div>
|
||||
<p id="resultCheckLangPack"><img src="'._PS_IMG_.'admin/ajax-loader.gif" alt="" /> '.$this->l('Check if a language pack is available for this ISO code...').'</p>';
|
||||
if (Shop::isFeatureActive())
|
||||
{
|
||||
echo '<label>'.$this->l('Shop association:').'</label><div class="margin-form">';
|
||||
$this->displayAssoShop();
|
||||
echo '</div>';
|
||||
}
|
||||
echo '
|
||||
<div class="margin-form">
|
||||
<input type="submit" value="'.$this->l(' Save ').'" name="submitAdd'.$this->table.'" class="button" />
|
||||
</div>
|
||||
<div class="small"><sup>*</sup> '.$this->l('Required field').'</div>
|
||||
</fieldset>
|
||||
</form>';
|
||||
|
||||
if ($obj->id AND !$obj->checkFiles())
|
||||
{
|
||||
echo '
|
||||
<br /><br />
|
||||
<fieldset style="width:572px;"><legend><img src="../img/admin/warning.gif" />'.$this->l('Warning').'</legend>
|
||||
<p>'.$this->l('This language is NOT complete and cannot be used in the Front or Back Office because some files are missing.').'</p>
|
||||
<br />
|
||||
<label>'.$this->l('Translations files:').' </label>
|
||||
<div class="margin-form" style="margin-top:4px;">';
|
||||
$files = Language::getFilesList($obj->iso_code, _THEME_NAME_, false, false, 'tr', true);
|
||||
$this->displayFilesList($files);
|
||||
echo '
|
||||
</div><br style="clear:both;" />
|
||||
<label>'.$this->l('Theme files:').' </label>
|
||||
<div class="margin-form" style="margin-top:4px;">';
|
||||
$files = Language::getFilesList($obj->iso_code, _THEME_NAME_, false, false, 'theme', true);
|
||||
$this->displayFilesList($files);
|
||||
echo '
|
||||
</div><br style="clear:both;" />
|
||||
<label>'.$this->l('Mail files:').' </label>
|
||||
<div class="margin-form" style="margin-top:4px;">';
|
||||
$files = Language::getFilesList($obj->iso_code, _THEME_NAME_, false, false, 'mail', true);
|
||||
$this->displayFilesList($files);
|
||||
echo '
|
||||
</div>
|
||||
<br />
|
||||
<div class="small">'.$this->l('Missing files are marked in red').'</div>
|
||||
</fieldset>';
|
||||
}
|
||||
}
|
||||
|
||||
public function displayFilesList($files)
|
||||
{
|
||||
foreach ($files as $key => $file)
|
||||
{
|
||||
if (!file_exists($key))
|
||||
echo '<font color="red">';
|
||||
echo $key;
|
||||
if (!file_exists($key))
|
||||
echo '</font>';
|
||||
echo '<br />';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,331 @@
|
||||
{*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Academic Free License (AFL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/afl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 8971 $
|
||||
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*}
|
||||
|
||||
{if $firstCall}
|
||||
<script type="text/javascript">
|
||||
var vat_number = {$vat_number};
|
||||
var module_dir = '{$module_dir}';
|
||||
var id_language = {$defaultFormLanguage};
|
||||
var languages = new Array();
|
||||
var langPackOk = "<img src='{$img_dir}admin/information.png' alt='' />{l s='A language pack is available for this ISO (name is)'}";
|
||||
var langPackVersion = "{l s='The compatible Prestashop version for this language and your system is: '}";
|
||||
var langPackInfo = "{l s='After creating the language, you can import the content of the language pack, which you can download above under \"Tools - Translations\"'}";
|
||||
var noLangPack = "<img src='{$img_dir}admin/information.png' alt='' />{l s='No language pack available on prestashop.com for this ISO code'}";
|
||||
var download = "{l s='Download'}";
|
||||
|
||||
$(document).ready(function() {ldelim}
|
||||
{foreach $languages as $k => $language}
|
||||
languages[{$k}] = {ldelim}
|
||||
id_lang: {$language.id_lang},
|
||||
iso_code: '{$language.iso_code}',
|
||||
name: '{$language.name}'
|
||||
{rdelim};
|
||||
{/foreach}
|
||||
displayFlags(languages, id_language, {$allowEmployeeFormLang});
|
||||
|
||||
{if isset($fields_value.id_state)}
|
||||
if ($('#id_country') && $('#id_state'))
|
||||
{ldelim}
|
||||
ajaxStates({$fields_value.id_state});
|
||||
$('#id_country').change(function() {ldelim}
|
||||
ajaxStates();
|
||||
{rdelim});
|
||||
{rdelim}
|
||||
{/if}
|
||||
|
||||
$('#iso_code').keyup(function() {ldelim}
|
||||
checkLangPack();
|
||||
{rdelim});
|
||||
{rdelim});
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/form.js"></script>
|
||||
<script type="text/javascript" src="../js/checkLangPack.js"></script>
|
||||
{/if}
|
||||
{if isset($fields.title)}<h2>{$fields.title}</h2>{/if}
|
||||
<form action="{$current}&{$submit_action}=1&token={$token}" method="post" enctype="multipart/form-data">
|
||||
{if $form_id}
|
||||
<input type="hidden" name="id_{$table}" value="{$form_id}" />
|
||||
{/if}
|
||||
<fieldset>
|
||||
{foreach $fields as $key => $field}
|
||||
{if $key == 'legend'}
|
||||
<legend>
|
||||
{if isset($field.image)}<img src="{$field.image}" alt="{$field.title}" />{/if}
|
||||
{$field.title}
|
||||
</legend>
|
||||
{elseif $key == 'input'}
|
||||
{foreach $field as $input}
|
||||
{if $input.name == 'id_state'}
|
||||
<div id="contains_states" {if $contains_states}style="display:none;"{/if}>
|
||||
{/if}
|
||||
{if isset($input.label)}
|
||||
<label>{$input.label} </label>
|
||||
{/if}
|
||||
{if $input.type == 'hidden'}
|
||||
<input type="hidden" name="{$input.name}" id="{$input.name}" value="{$fields_value[$input.name]}" />
|
||||
{else}
|
||||
<div class="margin-form">
|
||||
{if $input.type == 'text'}
|
||||
{if isset($input.lang) && isset($input.attributeLang)}
|
||||
{foreach $languages as $language}
|
||||
<div id="{$input.name}_{$language.id_lang}" style="display:{if $language.id_lang == $defaultFormLanguage}block{else}none{/if}; float: left;">
|
||||
<input type="text"
|
||||
name="{$input.name}_{$language.id_lang}"
|
||||
value="{$fields_value[$input.name][$language.id_lang]}"
|
||||
{if isset($input.size)}size="{$input.size}"{/if}
|
||||
{if isset($input.maxlength)}maxlength="{$input.maxlength}"{/if}
|
||||
{if isset($input.class)}class="{$input.class}"{/if}
|
||||
{if isset($input.readonly) && $input.readonly}readonly="readonly"{/if}
|
||||
{if isset($input.disabled) && $input.disabled}disabled="disabled"{/if} />
|
||||
{if isset($input.hint)}<span class="hint" name="help_box">{$input.hint}<span class="hint-pointer"> </span></span>{/if}
|
||||
</div>
|
||||
{/foreach}
|
||||
{if count($languages) > 1}
|
||||
<div class="displayed_flag">
|
||||
<img src="../img/l/{$defaultFormLanguage}.jpg"
|
||||
class="pointer"
|
||||
id="language_current_{$input.name}"
|
||||
onclick="toggleLanguageFlags(this);" />
|
||||
</div>
|
||||
<div id="languages_{$input.name}" class="language_flags">
|
||||
{l s='Choose language:'}<br /><br />
|
||||
{foreach $languages as $language}
|
||||
<img src="../img/l/{$language.id_lang}.jpg"
|
||||
class="pointer"
|
||||
alt="{$language.name}"
|
||||
title="{$language.name}"
|
||||
onclick="changeLanguage('{$input.name}', '{$input.attributeLang}', {$language.id_lang}, '{$language.iso_code}');" />
|
||||
{/foreach}
|
||||
</div>
|
||||
{/if}
|
||||
{else}
|
||||
<input type="text"
|
||||
name="{$input.name}"
|
||||
id="{$input.name}"
|
||||
value="{$fields_value[$input.name]}"
|
||||
{if isset($input.size)}size="{$input.size}"{/if}
|
||||
{if isset($input.maxlength)}maxlength="{$input.maxlength}"{/if}
|
||||
{if isset($input.class)}class="{$input.class}"{/if}
|
||||
{if isset($input.readonly) && $input.readonly}readonly="readonly"{/if}
|
||||
{if isset($input.disabled) && $input.disabled}disabled="disabled"{/if} />
|
||||
{if isset($input.hint)}<span class="hint" name="help_box">{$input.hint}<span class="hint-pointer"> </span></span>{/if}
|
||||
{/if}
|
||||
{elseif $input.type == 'select'}
|
||||
{if isset($input.options.query) && !$input.options.query && isset($input.empty_message)}
|
||||
{$input.empty_message}
|
||||
{$input.required = false}
|
||||
{$input.p = null}
|
||||
{else}
|
||||
<select name="{$input.name}" id="{$input.name}" {if isset($input.multiple)}multiple="multiple" {/if}{if isset($input.onchange)}onchange="{$input.onchange}"{/if}>
|
||||
{if isset($input.options.default)}
|
||||
<option value="{$input.options.default.value}">{$input.options.default.label}</option>
|
||||
{/if}
|
||||
{if isset($input.options.optiongroup)}
|
||||
{foreach $input.options.optiongroup.query AS $optiongroup}
|
||||
<optgroup label="{$optiongroup[$input.options.optiongroup.label]}">
|
||||
{foreach $optiongroup[$input.options.options.query] as $option}
|
||||
<option value="{$option[$input.options.options.id]}"
|
||||
{if isset($input.multiple)}
|
||||
{foreach $fields_value[$input.name] as $field_value}
|
||||
{if $field_value == $option[$input.options.options.id]}selected="selected"{/if}
|
||||
{/foreach}
|
||||
{else}
|
||||
{if $fields_value[$input.name] == $option[$input.options.options.id]}selected="selected"{/if}
|
||||
{/if}
|
||||
>{$option[$input.options.options.name]|escape:'htmlall':'UTF-8'}</option>
|
||||
{/foreach}
|
||||
</optgroup>
|
||||
{/foreach}
|
||||
{else}
|
||||
{foreach $input.options.query AS $option}
|
||||
<option value="{$option[$input.options.id]}"
|
||||
{if isset($input.multiple)}
|
||||
{foreach $fields_value[$input.name] as $field_value}
|
||||
{$field_value}
|
||||
{if $field_value == $option[$input.options.id]}selected="selected"{/if}
|
||||
{/foreach}
|
||||
{else}
|
||||
{if $fields_value[$input.name] == $option[$input.options.id]}selected="selected"{/if}
|
||||
{/if}
|
||||
>{$option[$input.options.name]|escape:'htmlall':'UTF-8'}</option>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</select>
|
||||
{if isset($input.hint)}<span class="hint" name="help_box">{$input.hint}<span class="hint-pointer"> </span></span>{/if}
|
||||
{/if}
|
||||
{elseif $input.type == 'radio'}
|
||||
{foreach $input.values as $value}
|
||||
<input type="radio"
|
||||
name="{$input.name}"
|
||||
id="{$value.id}"
|
||||
value="{$value.value|escape:'htmlall':'UTF-8'}"
|
||||
{if $fields_value[$input.name] == $value.value}checked="checked"{/if} />
|
||||
<label {if isset($input.class)}class="{$input.class}"{/if} for="{$value.id}">
|
||||
{if isset($input.is_bool) && $input.is_bool == true}
|
||||
{if $value.value == 1}
|
||||
<img src="../img/admin/enabled.gif" alt="{$value.label}" title="{$value.label}" />
|
||||
{else}
|
||||
<img src="../img/admin/disabled.gif" alt="{$value.label}" title="{$value.label}" />
|
||||
{/if}
|
||||
{else}
|
||||
{$value.label}
|
||||
{/if}
|
||||
</label>
|
||||
{if isset($input.br) && $input.br}<br />{/if}
|
||||
{/foreach}
|
||||
{elseif $input.type == 'textarea'}
|
||||
{if isset($input.lang) && isset($input.attributeLang)}
|
||||
{foreach $languages as $language}
|
||||
<div id="{$input.name}_{$language.id_lang}" style="display:{if $language.id_lang == $defaultFormLanguage}block{else}none{/if}; float: left;">
|
||||
<textarea cols="{$input.cols}" rows="{$input.rows}" name="{$input.name}_{$language.id_lang}">{$fields_value[$input.name][$language.id_lang]}</textarea>
|
||||
</div>
|
||||
{/foreach}
|
||||
{if count($languages) > 1}
|
||||
<div class="displayed_flag">
|
||||
<img src="../img/l/{$defaultFormLanguage}.jpg"
|
||||
class="pointer"
|
||||
id="language_current_{$input.name}"
|
||||
onclick="toggleLanguageFlags(this);" />
|
||||
</div>
|
||||
<div id="languages_{$input.name}" class="language_flags">
|
||||
{l s='Choose language:'}<br /><br />
|
||||
{foreach $languages as $language}
|
||||
<img src="../img/l/{$language.id_lang}.jpg"
|
||||
class="pointer"
|
||||
alt="{$language.name}"
|
||||
title="{$language.name}"
|
||||
onclick="changeLanguage('{$input.name}', '{$input.attributeLang}', {$language.id_lang}, '{$language.iso_code}');" />
|
||||
{/foreach}
|
||||
</div>
|
||||
{/if}
|
||||
{else}
|
||||
<textarea name="{$input.name}" id="{$input.name}" cols="{$input.cols}" rows="{$input.rows}">{$fields_value[$input.name]}</textarea>
|
||||
{/if}
|
||||
{elseif $input.type == 'checkbox'}
|
||||
{foreach $input.values.query as $value}
|
||||
{assign var=id_checkbox value=$input.name|cat:'_'|cat:$value[$input.values.id]}
|
||||
<input type="checkbox" name="{$id_checkbox}" id="{$id_checkbox}" {if $fields_value[$id_checkbox]}checked="checked"{/if} />
|
||||
<label for="{$id_checkbox}" class="t"><strong>{$value[$input.values.name]}</strong></label><br />
|
||||
{/foreach}
|
||||
{elseif $input.type == 'file'}
|
||||
<input type="file" name="{$input.name}" />
|
||||
<img src="{$fields_value[$input.name]}" />
|
||||
{elseif $input.type == 'password'}
|
||||
<input type="password"
|
||||
name="{$input.name}"
|
||||
size="{$input.size}"
|
||||
value="" />
|
||||
{elseif $input.type == 'special'}
|
||||
<p id="{$input.name}"><img src="{$img_dir}admin/{$input.img}" alt="" /> {$input.text}</p>
|
||||
{elseif $input.type == 'group'}
|
||||
{assign var=groups value=$input.values}
|
||||
{include file='form_group.tpl'}
|
||||
{elseif $input.type == 'shop' OR $input.type == 'group_shop'}
|
||||
{include file='form_shop.tpl'}
|
||||
{elseif $input.type == 'asso_shop' && isset($asso_shop) && $asso_shop}
|
||||
<label>{l s='Shop association:'}</label>
|
||||
<div class="margin-form">
|
||||
{$asso_shop}
|
||||
</div>
|
||||
{/if}
|
||||
{if isset($input.required) && $input.required} <sup>*</sup>{/if}
|
||||
{if isset($input.p)}
|
||||
<p class="clear">
|
||||
{if is_array($input.p)}
|
||||
{foreach $input.p as $p}
|
||||
{if is_array($p)}
|
||||
<span id="{$p.id}">{$p.text}</span><br />
|
||||
{else}
|
||||
{$p}<br />
|
||||
{/if}
|
||||
{/foreach}
|
||||
{else}
|
||||
{$input.p}
|
||||
{/if}
|
||||
</p>
|
||||
{/if}
|
||||
{if isset($languages)}<div class="clear"></div>{/if}
|
||||
</div>
|
||||
{/if}
|
||||
{if $input.name == 'id_state'}
|
||||
</div>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{elseif $key == 'submit'}
|
||||
<div class="margin-form">
|
||||
<input type="submit" value="{$field.title}" name="{$submit_action}" {if isset($field.class)}class="{$field.class}"{/if} />
|
||||
</div>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{if $required_fields}
|
||||
<div class="small"><sup>*</sup> {l s ='Required field'}</div>
|
||||
{/if}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{if isset($fields['new'])}
|
||||
<br /><br />
|
||||
<fieldset style="width:572px;">
|
||||
{foreach $fields['new'] as $key => $field}
|
||||
{if $key == 'legend'}
|
||||
<legend>
|
||||
{if isset($field.image)}<img src="{$field.image}" alt="{$field.title}" />{/if}
|
||||
{$field.title}
|
||||
</legend>
|
||||
<p>{l s='This language is NOT complete and cannot be used in the Front or Back Office because some files are missing.'}</p>
|
||||
<br />
|
||||
{elseif $key == 'list_files'}
|
||||
{foreach $field as $list}
|
||||
<label>{$list.label}</label>
|
||||
<div class="margin-form" style="margin-top:4px;">
|
||||
{foreach $list.files as $key => $file}
|
||||
{if !file_exists($key)}
|
||||
<font color="red">
|
||||
{/if}
|
||||
{$key}
|
||||
{if !file_exists($key)}
|
||||
</font>
|
||||
{/if}
|
||||
<br />
|
||||
{/foreach}
|
||||
</div>
|
||||
<br style="clear:both;" />
|
||||
{/foreach}
|
||||
{/if}
|
||||
{/foreach}
|
||||
<br />
|
||||
<div class="small">{l s='Missing files are marked in red'}</div>
|
||||
</fieldset>
|
||||
{/if}
|
||||
<br /><br />
|
||||
{if $firstCall && !$no_back}
|
||||
{if $back}
|
||||
<a href="{$back}"><img src="{$img_dir}admin/arrow2.gif" />{l s='Back'}</a>
|
||||
{else}
|
||||
<a href="{$current}&token={$token}"><img src="{$img_dir}admin/arrow2.gif" />{l s='Back to list'}</a>
|
||||
{/if}
|
||||
<br />
|
||||
{/if}
|
||||
@@ -1111,6 +1111,7 @@ class AdminControllerCore extends Controller
|
||||
$helper->shopLinkType = $this->shopLinkType;
|
||||
$helper->identifier = $this->identifier;
|
||||
$helper->token = $this->token;
|
||||
$helper->specificConfirmDelete = $this->specificConfirmDelete;
|
||||
$helper->imageType = $this->imageType;
|
||||
$helper->no_add = isset($this->no_add) ? $this->no_add : false;
|
||||
$helper->no_link = $this->list_no_link;
|
||||
|
||||
@@ -401,7 +401,7 @@ class HelperListCore extends Helper
|
||||
|
||||
$this->context->smarty->assign(array(
|
||||
'href' => $this->currentIndex.'&'.$this->identifier.'='.$id.'&delete'.$this->table.'&token='.($token != null ? $token : $this->token),
|
||||
'confirm' => self::$cache_lang['DeleteItem'].$id.' ?'.(!is_null($this->specificConfirmDelete) ? '\r'.$this->specificConfirmDelete : ''),
|
||||
'confirm' => (!is_null($this->specificConfirmDelete) ? '\r'.$this->specificConfirmDelete : self::$cache_lang['DeleteItem'].$id.' ? '),
|
||||
'action' => self::$cache_lang['Delete'],
|
||||
));
|
||||
|
||||
|
||||
@@ -0,0 +1,499 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @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 AdminLanguagesControllerCore extends AdminController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->table = 'lang';
|
||||
$this->className = 'Language';
|
||||
$this->lang = false;
|
||||
$this->deleted = false;
|
||||
|
||||
$this->requiredDatabase = true;
|
||||
|
||||
$this->context = Context::getContext();
|
||||
|
||||
$this->fieldImageSettings = array(
|
||||
array(
|
||||
'name' => 'flag',
|
||||
'dir' => 'l'
|
||||
),
|
||||
array(
|
||||
'name' => 'no-picture',
|
||||
'dir' => 'p'
|
||||
)
|
||||
);
|
||||
|
||||
$this->fieldsDisplay = array(
|
||||
'id_lang' => array(
|
||||
'title' => $this->l('ID'),
|
||||
'align' => 'center',
|
||||
'width' => 25
|
||||
),
|
||||
'flag' => array(
|
||||
'title' => $this->l('Logo'),
|
||||
'align' => 'center',
|
||||
'image' => 'l',
|
||||
'orderby' => false,
|
||||
'search' => false
|
||||
),
|
||||
'name' => array(
|
||||
'title' => $this->l('Name'),
|
||||
'width' => 120
|
||||
),
|
||||
'iso_code' => array(
|
||||
'title' => $this->l('ISO code'),
|
||||
'width' => 70,
|
||||
'align' => 'center'
|
||||
),
|
||||
'language_code' => array(
|
||||
'title' => $this->l('Language code'),
|
||||
'width' => 70,
|
||||
'align' => 'center'
|
||||
),
|
||||
'date_format_lite' => array(
|
||||
'title' => $this->l('Date format')
|
||||
),
|
||||
'date_format_full' => array(
|
||||
'title' => $this->l('Date format (full)')
|
||||
),
|
||||
'active' => array(
|
||||
'title' => $this->l('Enabled'),
|
||||
'align' => 'center',
|
||||
'active' => 'status',
|
||||
'type' => 'bool'
|
||||
)
|
||||
);
|
||||
|
||||
$this->options = array(
|
||||
'general' => array(
|
||||
'title' => $this->l('Languages options'),
|
||||
'fields' => array(
|
||||
'PS_LANG_DEFAULT' => array(
|
||||
'title' => $this->l('Default language:'),
|
||||
'desc' => $this->l('The default language used in shop'),
|
||||
'cast' => 'intval',
|
||||
'type' => 'select',
|
||||
'identifier' => 'id_lang',
|
||||
'list' => Language::getlanguages(false)
|
||||
)
|
||||
),
|
||||
'submit' => array()
|
||||
)
|
||||
);
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function initList()
|
||||
{
|
||||
$this->addRowAction('edit');
|
||||
$this->addRowAction('delete');
|
||||
|
||||
$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
|
||||
$this->specificConfirmDelete = $this->l('When you delete a language, ALL RELATED TRANSLATIONS IN THE DATABASE WILL BE DELETED, are you sure you want to delete this language?', __CLASS__, true, false);
|
||||
|
||||
$this->displayWarning($this->l('When you delete a language, all related translations in the database will be deleted.'));
|
||||
return parent::initList();
|
||||
}
|
||||
|
||||
public function initForm()
|
||||
{
|
||||
$this->fields_form = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Languages'),
|
||||
'image' => '../img/admin/world.gif'
|
||||
),
|
||||
'input' => array(
|
||||
array(
|
||||
'type' => 'hidden',
|
||||
'name' => 'ps_version'
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('Name:'),
|
||||
'name' => 'name',
|
||||
'size' => 8,
|
||||
'maxlength' => 32,
|
||||
'required' => true
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('ISO code:'),
|
||||
'name' => 'iso_code',
|
||||
'required' => true,
|
||||
'size' => 4,
|
||||
'maxlength' => 2,
|
||||
'p' => $this->l('2-letter ISO code (e.g., fr, en, de)')
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('Language code:'),
|
||||
'name' => 'language_code',
|
||||
'required' => true,
|
||||
'size' => 10,
|
||||
'maxlength' => 5,
|
||||
'p' => $this->l('Full language code (e.g., en-us, pt-br)')
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('Date format:'),
|
||||
'name' => 'date_format_lite',
|
||||
'required' => true,
|
||||
'size' => 15,
|
||||
'p' => $this->l('Date format, lite (e.g., Y-m-d, d/m/Y)')
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('Date format (full):'),
|
||||
'name' => 'date_format_full',
|
||||
'required' => true,
|
||||
'size' => 25,
|
||||
'p' => $this->l('Date format, full (e.g., Y-m-d H:i:s, d/m/Y H:i)')
|
||||
),
|
||||
array(
|
||||
'type' => 'file',
|
||||
'label' => $this->l('Flag:'),
|
||||
'name' => 'flag',
|
||||
'required' => true,
|
||||
'p' => $this->l('Upload country flag from your computer')
|
||||
),
|
||||
array(
|
||||
'type' => 'file',
|
||||
'label' => $this->l('"No-picture" image:'),
|
||||
'name' => 'no-picture',
|
||||
'required' => true,
|
||||
'p' => $this->l('Image displayed when "no picture found"')
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('Is RTL language:'),
|
||||
'name' => 'is_rtl',
|
||||
'required' => false,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'is_rtl_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Enabled')
|
||||
),
|
||||
array(
|
||||
'id' => 'active_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('Disabled')
|
||||
)
|
||||
),
|
||||
'p' => $this->l('To active if this language is a right to left language').' '.
|
||||
$this->l('(Experimental: your theme must be compliant with RTL language)')
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('Status:'),
|
||||
'name' => 'active',
|
||||
'required' => false,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'active_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Enabled')
|
||||
),
|
||||
array(
|
||||
'id' => 'active_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('Disabled')
|
||||
)
|
||||
),
|
||||
'p' => $this->l('Allow or disallow this language to be selected by the customer')
|
||||
),
|
||||
array(
|
||||
'type' => 'special',
|
||||
'name' => 'resultCheckLangPack',
|
||||
'text' => $this->l('Check if a language pack is available for this ISO code...'),
|
||||
'img' => 'ajax-loader.gif'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if (Shop::isFeatureActive())
|
||||
{
|
||||
$this->fields_form['input'][] = array(
|
||||
'type' => 'shop',
|
||||
'label' => $this->l('Shop association:'),
|
||||
'name' => 'checkBoxShopAsso',
|
||||
'values' => Shop::getTree()
|
||||
);
|
||||
}
|
||||
|
||||
$this->fields_form['submit'] = array(
|
||||
'title' => $this->l(' Save '),
|
||||
'class' => 'button'
|
||||
);
|
||||
|
||||
if (!($obj = $this->loadObject(true)))
|
||||
return;
|
||||
|
||||
if ($obj->id && !$obj->checkFiles())
|
||||
{
|
||||
$this->fields_form['new'] = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Warning'),
|
||||
'image' => '../img/admin/warning.gif'
|
||||
),
|
||||
'list_files' => array(
|
||||
array(
|
||||
'label' => $this->l('Translations files:'),
|
||||
'files' => Language::getFilesList($obj->iso_code, _THEME_NAME_, false, false, 'tr', true)
|
||||
),
|
||||
array(
|
||||
'label' => $this->l('Theme files:'),
|
||||
'files' => Language::getFilesList($obj->iso_code, _THEME_NAME_, false, false, 'theme', true)
|
||||
),
|
||||
array(
|
||||
'label' => $this->l('Mail files:'),
|
||||
'files' => Language::getFilesList($obj->iso_code, _THEME_NAME_, false, false, 'mail', true)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$this->fields_value = array(
|
||||
'ps_version' => _PS_VERSION_
|
||||
);
|
||||
|
||||
//Added values of object Shop
|
||||
if ($obj->id)
|
||||
{
|
||||
$assos = array();
|
||||
$sql = 'SELECT `id_shop`, `'.pSQL($this->identifier).'`
|
||||
FROM `'._DB_PREFIX_.pSQL($this->table).'_shop`
|
||||
WHERE `'.pSQL($this->identifier).'` = '.(int)$obj->id;
|
||||
foreach (Db::getInstance()->executeS($sql) as $row)
|
||||
$this->fields_value['shop'][$row['id_shop']][] = $row[$this->identifier];
|
||||
}
|
||||
|
||||
return parent::initForm();
|
||||
}
|
||||
|
||||
public function postProcess()
|
||||
{
|
||||
if (isset($_GET['delete'.$this->table]))
|
||||
{
|
||||
if ($this->tabAccess['delete'] === '1')
|
||||
{
|
||||
if (Validate::isLoadedObject($object = $this->loadObject()) && isset($this->fieldImageSettings))
|
||||
{
|
||||
// English is needed by the system (ex. translations)
|
||||
if ($object->id == Language::getIdByIso('en'))
|
||||
$this->_errors[] = $this->l('You cannot delete the English language as it is a system requirement, you can only deactivate it.');
|
||||
if ($object->id == Configuration::get('PS_LANG_DEFAULT'))
|
||||
$this->_errors[] = $this->l('you cannot delete the default language');
|
||||
else if ($object->id == $this->context->language->id)
|
||||
$this->_errors[] = $this->l('You cannot delete the language currently in use. Please change languages before deleting.');
|
||||
else if ($this->deleteNoPictureImages((int)Tools::getValue('id_lang')) && $object->delete())
|
||||
Tools::redirectAdmin(self::$currentIndex.'&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)');
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
else if (Tools::getValue('submitDel'.$this->table) && isset($_POST[$this->table.'Box']))
|
||||
{
|
||||
if ($this->tabAccess['delete'] === '1')
|
||||
{
|
||||
if (in_array(Configuration::get('PS_LANG_DEFAULT'), $_POST[$this->table.'Box']))
|
||||
$this->_errors[] = $this->l('you cannot delete the default language');
|
||||
else if (in_array($this->context->language->id, $_POST[$this->table.'Box']))
|
||||
$this->_errors[] = $this->l('you cannot delete the language currently in use, please change languages before deleting');
|
||||
else
|
||||
{
|
||||
foreach ($_POST[$this->table.'Box'] as $language)
|
||||
$this->deleteNoPictureImages($language);
|
||||
parent::postProcess();
|
||||
}
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
else if (Tools::isSubmit('submitAddlang'))
|
||||
{
|
||||
/* New language */
|
||||
if ((int)Tools::getValue('id_'.$this->table) == 0)
|
||||
{
|
||||
if ($this->tabAccess['add'] === '1')
|
||||
{
|
||||
if (isset($_POST['iso_code']) && !empty($_POST['iso_code']) && Validate::isLanguageIsoCode(Tools::getValue('iso_code')) && Language::getIdByIso($_POST['iso_code']))
|
||||
$this->_errors[] = Tools::displayError('This ISO code is already linked to another language.');
|
||||
if ((!empty($_FILES['no-picture']['tmp_name']) || !empty($_FILES['flag']['tmp_name'])) && Validate::isLanguageIsoCode(Tools::getValue('iso_code')))
|
||||
{
|
||||
if ($_FILES['no-picture']['error'] == UPLOAD_ERR_OK)
|
||||
$this->copyNoPictureImage(strtolower(Tools::getValue('iso_code')));
|
||||
// class AdminTab deal with every $_FILES content, don't do that for no-picture
|
||||
unset($_FILES['no-picture']);
|
||||
parent::postProcess();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->validateRules();
|
||||
$this->_errors[] = Tools::displayError('Flag and No-Picture image fields are required.');
|
||||
}
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to add here.');
|
||||
}
|
||||
/* Language edition */
|
||||
else
|
||||
{
|
||||
if ($this->tabAccess['edit'] === '1')
|
||||
{
|
||||
if (( isset($_FILES['no-picture']) && !$_FILES['no-picture']['error'] || isset($_FILES['flag']) && !$_FILES['flag']['error'])
|
||||
&& Validate::isLanguageIsoCode(Tools::getValue('iso_code')))
|
||||
{
|
||||
if ($_FILES['no-picture']['error'] == UPLOAD_ERR_OK)
|
||||
$this->copyNoPictureImage(strtolower(Tools::getValue('iso_code')));
|
||||
// class AdminTab deal with every $_FILES content, don't do that for no-picture
|
||||
unset($_FILES['no-picture']);
|
||||
parent::postProcess();
|
||||
}
|
||||
|
||||
if (!Validate::isLoadedObject($object = $this->loadObject()))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while updating status for object.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
|
||||
if ((int)$object->id == (int)Configuration::get('PS_LANG_DEFAULT') && (int)$_POST['active'] != (int)$object->active)
|
||||
$this->_errors[] = Tools::displayError('You cannot change the status of the default language.');
|
||||
else
|
||||
parent::postProcess();
|
||||
|
||||
$this->validateRules();
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
|
||||
}
|
||||
}
|
||||
else if (isset($_GET['status'.$this->table]) && isset($_GET['id_lang']))
|
||||
{
|
||||
if ($this->tabAccess['edit'] === '1')
|
||||
{
|
||||
if (!Validate::isLoadedObject($object = $this->loadObject()))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while updating status for object.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
|
||||
if ((int)$object->id == (int)Configuration::get('PS_LANG_DEFAULT'))
|
||||
$this->_errors[] = Tools::displayError('You cannot change the status of the default language.');
|
||||
else
|
||||
return parent::postProcess();
|
||||
}
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
|
||||
}
|
||||
else
|
||||
return parent::postProcess();
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a no-product image
|
||||
*
|
||||
* @param string $language Language iso_code for no-picture image filename
|
||||
*/
|
||||
public function copyNoPictureImage($language)
|
||||
{
|
||||
if (isset($_FILES['no-picture']) && $_FILES['no-picture']['error'] === 0)
|
||||
if ($error = checkImage($_FILES['no-picture'], Tools::getMaxUploadSize()))
|
||||
$this->_errors[] = $error;
|
||||
else
|
||||
{
|
||||
if (!$tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS') || !move_uploaded_file($_FILES['no-picture']['tmp_name'], $tmp_name))
|
||||
return false;
|
||||
if (!imageResize($tmp_name, _PS_IMG_DIR_.'p/'.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while copying no-picture image to your product folder.');
|
||||
if (!imageResize($tmp_name, _PS_IMG_DIR_.'c/'.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while copying no-picture image to your category folder.');
|
||||
if (!imageResize($tmp_name, _PS_IMG_DIR_.'m/'.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while copying no-picture image to your manufacturer folder');
|
||||
else
|
||||
{
|
||||
$images_types = ImageType::getImagesTypes('products');
|
||||
foreach ($images_types as $k => $image_type)
|
||||
{
|
||||
if (!imageResize($tmp_name, _PS_IMG_DIR_.'p/'.$language.'-default-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while resizing no-picture image to your product directory.');
|
||||
if (!imageResize($tmp_name, _PS_IMG_DIR_.'c/'.$language.'-default-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while resizing no-picture image to your category directory.');
|
||||
if (!imageResize($tmp_name, _PS_IMG_DIR_.'m/'.$language.'-default-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']))
|
||||
$this->_errors[] = Tools::displayError('An error occurred while resizing no-picture image to your manufacturer directory.');
|
||||
}
|
||||
}
|
||||
unlink($tmp_name);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* deleteNoPictureImages will delete all default image created for the language id_language
|
||||
*
|
||||
* @param string $id_language
|
||||
* @return boolean true if no error
|
||||
*/
|
||||
private function deleteNoPictureImages($id_language)
|
||||
{
|
||||
$language = Language::getIsoById($id_language);
|
||||
$images_types = ImageType::getImagesTypes('products');
|
||||
$dirs = array(_PS_PROD_IMG_DIR_, _PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_SUPP_IMG_DIR_, _PS_MANU_IMG_DIR_);
|
||||
foreach ($dirs as $dir)
|
||||
{
|
||||
foreach ($images_types as $k => $image_type)
|
||||
if (file_exists($dir.$language.'-default-'.stripslashes($image_type['name']).'.jpg'))
|
||||
if (!unlink($dir.$language.'-default-'.stripslashes($image_type['name']).'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred during image deletion.');
|
||||
|
||||
if (file_exists($dir.$language.'.jpg'))
|
||||
if (!unlink($dir.$language.'.jpg'))
|
||||
$this->_errors[] = Tools::displayError('An error occurred during image deletion.');
|
||||
}
|
||||
|
||||
return !count($this->_errors) ? true : false;
|
||||
}
|
||||
|
||||
protected function copyFromPost(&$object, $table)
|
||||
{
|
||||
if ($object->id && ($object->iso_code != $_POST['iso_code']))
|
||||
if (Validate::isLanguageIsoCode($_POST['iso_code']))
|
||||
$object->moveToIso($_POST['iso_code']);
|
||||
parent::copyFromPost($object, $table);
|
||||
}
|
||||
|
||||
public function beforeUpdateOptions()
|
||||
{
|
||||
$lang = new Language((int)Tools::getValue('PS_LANG_DEFAULT'));
|
||||
if (!$lang->active)
|
||||
$this->_errors[] = Tools::displayError('You cannot set this language as default language because it\'s disabled');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user