* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
/**
* Use this helper to generate preferences forms, with values stored in the configuration table
*/
class HelperOptionsCore extends Helper
{
public $required = false;
public function __construct()
{
$this->base_folder = 'helpers/options/';
$this->base_tpl = 'options.tpl';
parent::__construct();
}
/**
* Generate a form for options
* @param array options
* @return string html
*/
public function generateOptions($option_list)
{
$this->tpl = $this->createTemplate($this->base_tpl);
$tab = Tab::getTab($this->context->language->id, $this->id);
if (!isset($languages))
$languages = Language::getLanguages(false);
$use_multishop = false;
$hide_multishop_checkbox = (Shop::getTotalShops(false, null) < 2) ? true : false;
foreach ($option_list as $category => $category_data)
{
if (!is_array($category_data))
continue;
if (!isset($category_data['image']))
$category_data['image'] = (!empty($tab['module']) && file_exists($_SERVER['DOCUMENT_ROOT']._MODULE_DIR_.$tab['module'].'/'.$tab['class_name'].'.gif') ? _MODULE_DIR_.$tab['module'].'/' : '../img/t/').$tab['class_name'].'.gif';
if (!isset($category_data['fields']))
$category_data['fields'] = array();
$category_data['hide_multishop_checkbox'] = true;
foreach ($category_data['fields'] as $key => $field)
{
if (empty($field['no_multishop_checkbox']) && !$hide_multishop_checkbox)
$category_data['hide_multishop_checkbox'] = false;
// Set field value unless explicitly denied
if (!isset($field['auto_value']) || $field['auto_value'])
$field['value'] = $this->getOptionValue($key, $field);
// Check if var is invisible (can't edit it in current shop context), or disable (use default value for multishop)
$isDisabled = $isInvisible = false;
if (Shop::isFeatureActive())
{
if (isset($field['visibility']) && $field['visibility'] > Shop::getContext())
{
$isDisabled = true;
$isInvisible = true;
}
else if (Shop::getContext() != Shop::CONTEXT_ALL && !Configuration::isOverridenByCurrentContext($key))
$isDisabled = true;
}
$field['is_disabled'] = $isDisabled;
$field['is_invisible'] = $isInvisible;
$field['required'] = isset($field['required']) ? $field['required'] : $this->required;
if ($field['type'] == 'color')
$this->context->controller->addJS(_PS_JS_DIR_.'jquery/plugins/jquery.colorpicker.js');
if ($field['type'] == 'texarea' || $field['type'] == 'textareaLang')
$this->context->controller->addJS(_PS_JS_DIR_.'jquery/plugins/jquery.autosize.min.js');
if ($field['type'] == 'file')
{
$uploader = new HelperUploader();
$uploader->setId(isset($field['id'])?$field['id']:null);
$uploader->setName($field['name']);
$uploader->setUrl(isset($field['url'])?$field['url']:null);
$uploader->setMultiple(isset($field['multiple'])?$field['multiple']:false);
$uploader->setUseAjax(isset($field['ajax'])?$field['ajax']:false);
$uploader->setMaxFiles(isset($field['max_files'])?$field['max_files']:null);
if (isset($field['files']) && $field['files'])
$uploader->setFiles($field['files']);
elseif (isset($field['image']) && $field['image']) // Use for retrocompatibility
$uploader->setFiles(array(
0 => array(
'type' => HelperUploader::TYPE_IMAGE,
'image' => isset($field['image'])?$field['image']:null,
'size' => isset($field['size'])?$field['size']:null,
'delete_url' => isset($field['delete_url'])?$field['delete_url']:null
)));
if (isset($field['file']) && $field['file']) // Use for retrocompatibility
$uploader->setFiles(array(
0 => array(
'type' => HelperUploader::TYPE_FILE,
'size' => isset($field['size'])?$field['size']:null,
'delete_url' => isset($field['delete_url'])?$field['delete_url']:null,
'download_url' => isset($field['file'])?$field['file']:null
)));
if (isset($field['thumb']) && $field['thumb']) // Use for retrocompatibility
$uploader->setFiles(array(
0 => array(
'type' => HelperUploader::TYPE_IMAGE,
'image' => isset($field['thumb'])?'':null,
)));
$uploader->setTitle(isset($field['title'])?$field['title']:null);
$field['file'] = $uploader->render();
}
// Cast options values if specified
if ($field['type'] == 'select' && isset($field['cast']))
foreach ($field['list'] as $option_key => $option)
$field['list'][$option_key][$field['identifier']] = $field['cast']($option[$field['identifier']]);
// Fill values for all languages for all lang fields
if (substr($field['type'], -4) == 'Lang')
{
foreach ($languages as $language)
{
if ($field['type'] == 'textLang')
$value = Tools::safeOutput(Tools::getValue($key.'_'.$language['id_lang'], Configuration::get($key, $language['id_lang'])));
elseif ($field['type'] == 'textareaLang')
$value = Configuration::get($key, $language['id_lang']);
elseif ($field['type'] == 'selectLang')
$value = Configuration::get($key, $language['id_lang']);
$field['languages'][$language['id_lang']] = $value;
$field['value'][$language['id_lang']] = $this->getOptionValue($key.'_'.strtoupper($language['iso_code']), $field);
}
}
// pre-assign vars to the tpl
// @todo move this
if ($field['type'] == 'maintenance_ip')
{
$field['script_ip'] = '
';
$field['link_remove_ip'] = '';
}
// Multishop default value
$field['multishop_default'] = false;
if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_ALL && !$isInvisible)
{
$field['multishop_default'] = true;
$use_multishop = true;
}
// Assign the modifications back to parent array
$category_data['fields'][$key] = $field;
// Is at least one required field present?
if (isset($field['required']) && $field['required'])
$category_data['required_fields'] = true;
}
// Assign the modifications back to parent array
$option_list[$category] = $category_data;
}
$this->tpl->assign(array(
'title' => $this->title,
'toolbar_btn' => $this->toolbar_btn,
'show_toolbar' => $this->show_toolbar,
'toolbar_scroll' => $this->toolbar_scroll,
'current' => $this->currentIndex,
'table' => $this->table,
'token' => $this->token,
'option_list' => $option_list,
'current_id_lang' => $this->context->language->id,
'languages' => isset($languages) ? $languages : null,
'currency_left_sign' => $this->context->currency->getSign('left'),
'currency_right_sign' => $this->context->currency->getSign('right'),
'use_multishop' => $use_multishop,
));
return parent::generate();
}
/**
* Type = image
*/
public function displayOptionTypeImage($key, $field, $value)
{
echo '
| ';
echo '';
echo '';
echo ' '; echo ''; echo ' | ';
if (isset($field['max']) && ($i + 1) % $field['max'] == 0)
echo '