public function generate() { $this->tpl = $this->createTemplate($this->base_tpl); if (is_null($this->submit_action)) { $this->submit_action = 'submitAdd' . $this->table; } $categories = true; $color = true; $date = true; $tinymce = true; $textarea_autosize = true; $file = true; foreach ($this->fields_form as $fieldset_key => &$fieldset) { if (isset($fieldset['form']['tabs'])) { $tabs[] = $fieldset['form']['tabs']; } if (isset($fieldset['form']['input'])) { foreach ($fieldset['form']['input'] as $key => &$params) { // If the condition is not met, the field will not be displayed if (isset($params['condition']) && !$params['condition']) { unset($this->fields_form[$fieldset_key]['form']['input'][$key]); } switch ($params['type']) { case 'select': $field_name = (string) $params['name']; // If multiple select check that 'name' field is suffixed with '[]' if (isset($params['multiple']) && $params['multiple'] && stripos($field_name, '[]') === false) { $params['name'] .= '[]'; } break; case 'categories': if ($categories) { if (!isset($params['tree']['id'])) { throw new PrestaShopException('Id must be filled for categories tree'); } $tree = new HelperTreeCategories($params['tree']['id'], isset($params['tree']['title']) ? $params['tree']['title'] : null); if (isset($params['name'])) { $tree->setInputName($params['name']); } if (isset($params['tree']['selected_categories'])) { $tree->setSelectedCategories($params['tree']['selected_categories']); } if (isset($params['tree']['disabled_categories'])) { $tree->setDisabledCategories($params['tree']['disabled_categories']); } if (isset($params['tree']['root_category'])) { $tree->setRootCategory($params['tree']['root_category']); } if (isset($params['tree']['use_search'])) { $tree->setUseSearch($params['tree']['use_search']); } if (isset($params['tree']['use_checkbox'])) { $tree->setUseCheckBox($params['tree']['use_checkbox']); } if (isset($params['tree']['set_data'])) { $tree->setData($params['tree']['set_data']); } $this->context->smarty->assign('categories_tree', $tree->render()); $categories = false; } break; case 'file': $uploader = new HelperUploader(); $uploader->setId(isset($params['id']) ? $params['id'] : null); $uploader->setName($params['name']); $uploader->setUrl(isset($params['url']) ? $params['url'] : null); $uploader->setMultiple(isset($params['multiple']) ? $params['multiple'] : false); $uploader->setUseAjax(isset($params['ajax']) ? $params['ajax'] : false); $uploader->setMaxFiles(isset($params['max_files']) ? $params['max_files'] : null); if (isset($params['files']) && $params['files']) { $uploader->setFiles($params['files']); } elseif (isset($params['image']) && $params['image']) { // Use for retrocompatibility $uploader->setFiles(array(0 => array('type' => HelperUploader::TYPE_IMAGE, 'image' => isset($params['image']) ? $params['image'] : null, 'size' => isset($params['size']) ? $params['size'] : null, 'delete_url' => isset($params['delete_url']) ? $params['delete_url'] : null))); } if (isset($params['file']) && $params['file']) { // Use for retrocompatibility $uploader->setFiles(array(0 => array('type' => HelperUploader::TYPE_FILE, 'size' => isset($params['size']) ? $params['size'] : null, 'delete_url' => isset($params['delete_url']) ? $params['delete_url'] : null, 'download_url' => isset($params['file']) ? $params['file'] : null))); } if (isset($params['thumb']) && $params['thumb']) { // Use for retrocompatibility $uploader->setFiles(array(0 => array('type' => HelperUploader::TYPE_IMAGE, 'image' => isset($params['thumb']) ? '<img src="' . $params['thumb'] . '" alt="' . (isset($params['title']) ? $params['title'] : '') . '" title="' . (isset($params['title']) ? $params['title'] : '') . '" />' : null))); } $uploader->setTitle(isset($params['title']) ? $params['title'] : null); $params['file'] = $uploader->render(); break; case 'color': if ($color) { // Added JS file $this->context->controller->addJqueryPlugin('colorpicker'); $color = false; } break; case 'date': if ($date) { $this->context->controller->addJqueryUI('ui.datepicker'); $date = false; } break; case 'textarea': if ($tinymce) { $iso = $this->context->language->iso_code; $this->tpl_vars['iso'] = file_exists(_PS_CORE_DIR_ . '/js/tiny_mce/langs/' . $iso . '.js') ? $iso : 'en'; $this->tpl_vars['path_css'] = _THEME_CSS_DIR_; $this->tpl_vars['ad'] = __PS_BASE_URI__ . basename(_PS_ADMIN_DIR_); $this->tpl_vars['tinymce'] = true; $this->context->controller->addJS(_PS_JS_DIR_ . 'tiny_mce/tiny_mce.js'); $this->context->controller->addJS(_PS_JS_DIR_ . 'admin/tinymce.inc.js'); $tinymce = false; } if ($textarea_autosize) { $this->context->controller->addJqueryPlugin('autosize'); $textarea_autosize = false; } break; case 'shop': $disable_shops = isset($params['disable_shared']) ? $params['disable_shared'] : false; $params['html'] = $this->renderAssoShop($disable_shops); if (Shop::getTotalShops(false) == 1) { if (isset($this->fields_form[$fieldset_key]['form']['force']) && !$this->fields_form[$fieldset_key]['form']['force'] || !isset($this->fields_form[$fieldset_key]['form']['force'])) { unset($this->fields_form[$fieldset_key]['form']['input'][$key]); } } break; } } } } $this->tpl->assign(array('title' => $this->title, 'toolbar_btn' => $this->toolbar_btn, 'show_toolbar' => $this->show_toolbar, 'toolbar_scroll' => $this->toolbar_scroll, 'submit_action' => $this->submit_action, 'firstCall' => $this->first_call, 'current' => $this->currentIndex, 'token' => $this->token, 'table' => $this->table, 'identifier' => $this->identifier, 'name_controller' => $this->name_controller, 'languages' => $this->languages, 'current_id_lang' => $this->context->language->id, 'defaultFormLanguage' => $this->default_form_language, 'allowEmployeeFormLang' => $this->allow_employee_form_lang, 'form_id' => $this->id, 'tabs' => isset($tabs) ? $tabs : null, 'fields' => $this->fields_form, 'fields_value' => $this->fields_value, 'required_fields' => $this->getFieldsRequired(), 'vat_number' => Module::isInstalled('vatnumber') && file_exists(_PS_MODULE_DIR_ . 'vatnumber/ajax.php'), 'module_dir' => _MODULE_DIR_, 'base_url' => $this->context->shop->getBaseURL(), 'contains_states' => isset($this->fields_value['id_country']) && isset($this->fields_value['id_state']) ? Country::containsStates($this->fields_value['id_country']) : null, 'show_cancel_button' => $this->show_cancel_button, 'back_url' => $this->back_url)); return parent::generate(); }
/** * Generate a form for options * @param array $option_list * @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; if (isset($category_data['tabs'])) { $tabs[$category] = $category_data['tabs']; $tabs[$category]['misc'] = $this->l('Miscellaneous'); } 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) $is_disabled = $is_invisible = false; if (Shop::isFeatureActive()) { if (isset($field['visibility']) && $field['visibility'] > Shop::getContext()) { $is_disabled = true; $is_invisible = true; } elseif (Shop::getContext() != Shop::CONTEXT_ALL && !Configuration::isOverridenByCurrentContext($key)) { $is_disabled = true; } } $field['is_disabled'] = $is_disabled; $field['is_invisible'] = $is_invisible; $field['required'] = isset($field['required']) ? $field['required'] : $this->required; if ($field['type'] == 'color') { $this->context->controller->addJqueryPlugin('colorpicker'); } if ($field['type'] == 'texarea' || $field['type'] == 'textareaLang') { $this->context->controller->addJqueryPlugin('autosize'); } 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']) ? '<img src="' . $field['thumb'] . '" alt="' . $field['title'] . '" title="' . $field['title'] . '" />' : 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::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'] = ' <script type="text/javascript"> function addRemoteAddr() { var length = $(\'input[name=PS_MAINTENANCE_IP]\').attr(\'value\').length; if (length > 0) $(\'input[name=PS_MAINTENANCE_IP]\').attr(\'value\',$(\'input[name=PS_MAINTENANCE_IP]\').attr(\'value\') +\',' . Tools::getRemoteAddr() . '\'); else $(\'input[name=PS_MAINTENANCE_IP]\').attr(\'value\',\'' . Tools::getRemoteAddr() . '\'); } </script>'; $field['link_remove_ip'] = '<button type="button" class="btn btn-default" onclick="addRemoteAddr();"><i class="icon-plus"></i> ' . $this->l('Add my IP', 'Helper') . '</button>'; } // Multishop default value $field['multishop_default'] = false; if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_ALL && !$is_invisible) { $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, 'tabs' => isset($tabs) ? $tabs : null, '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(); }