/** * extension install actions, db queries, copying files etc * * @param string $name * @param SimpleXMLElement $config * @return bool|null */ public function install($name, $config) { $ext = new ExtensionUtils($name); // gets extension_id for install.php $extension_info = $this->getExtensionsList(array('search' => $name)); $extension_id = $extension_info->row['extension_id']; $validate = $this->validateCoreVersion($extension_info->row['key'], $config); $errors = $ext->getError(); if ($errors) { $this->session->data['error'] = implode("<br>", $errors); } if (!$validate) { $error = new AError($errors); $error->toLog()->toDebug(); return false; } //install default settings $default_settings = $ext->getDefaultSettings(); $settings = array($name . '_status' => 0, $name . '_layout' => (string) $config->layout, $name . '_priority' => (string) $config->priority, $name . '_date_installed' => date("Y-m-d H:i:s", time())); $settings = array_merge($settings, $default_settings); //write info about install into install log $install_upgrade_history = new ADataset('install_upgrade_history', 'admin'); $install_upgrade_history->addRows(array('date_added' => date("Y-m-d H:i:s", time()), 'name' => $name, 'version' => $settings[$name . '_version'], 'backup_file' => '', 'backup_date' => '', 'type' => 'install', 'user' => $this->user->getUsername())); // add dependencies into database for required extensions only if (isset($config->dependencies->item)) { foreach ($config->dependencies->item as $item) { if ((bool) $item['required']) { $this->addDependant($name, (string) $item); } } } // running sql install script if it exists if (isset($config->install->sql)) { $file = DIR_EXT . str_replace('../', '', $name) . '/' . (string) $config->install->sql; if (is_file($file)) { $this->db->performSql($file); } } // running php install script if it exists if (isset($config->install->trigger)) { $file = DIR_EXT . str_replace('../', '', $name) . '/' . (string) $config->install->trigger; if (is_file($file)) { include $file; } } // refresh data about updates $this->load->model('tool/updater'); $this->model_tool_updater->check4updates(); //save default settings for all stores $this->load->model('setting/store'); $stores = $this->model_setting_store->getStores(); foreach ($stores as $store) { $settings['store_id'] = $store['store_id']; $this->editSetting($name, $settings); } return null; }
public function edit() { //init controller data $this->extensions->hk_InitData($this, __FUNCTION__); $extension = $this->request->get['extension']; if (!$extension) { $this->redirect($this->html->getSecureURL('extension/extensions')); } $this->document->resetBreadcrumbs(); $this->document->addBreadcrumb(array('href' => $this->html->getSecureURL('index/home'), 'text' => $this->language->get('text_home'), 'separator' => FALSE)); $this->document->addBreadcrumb(array('href' => $this->html->getSecureURL('extension/extensions/' . $this->session->data['extension_filter']), 'text' => $this->language->get('heading_title'), 'separator' => ' :: ')); $this->loadLanguage('extension/extensions'); $this->loadLanguage($extension . '/' . $extension); $store_id = (int) $this->session->data['current_store_id']; if ($this->request->get_or_post('store_id')) { $store_id = $this->request->get_or_post('store_id'); } $ext = new ExtensionUtils($extension, $store_id); $settings = $ext->getSettings(); $this->data['extension_info'] = $this->extensions->getExtensionInfo($extension); if (!$this->data['extension_info']) { // if extension is not installed yet - redirect to list $this->redirect($this->html->getSecureURL('extension/extensions')); } $this->data['extension_info']['id'] = $extension; $this->data['form_store_switch'] = $this->html->getStoreSwitcher(); /** build aform with settings**/ $form = new AForm('HS'); $form->setForm(array('form_name' => 'editSettings', 'update' => $this->html->getSecureURL('listing_grid/extension/update', '&id=' . $extension . '&store_id=' . $store_id))); $this->data['form']['form_open'] = $form->getFieldHtml(array('type' => 'form', 'name' => 'editSettings', 'attr' => 'data-confirm-exit="true" class="aform form-horizontal"', 'action' => $this->html->getSecureURL('extension/extensions/edit/', '&action=save&extension=' . $extension . '&store_id=' . $store_id))); $result = array('resource_field_list' => array()); foreach ($settings as $item) { $data = array(); if ($item['name'] == $extension . '_status') { $data['attr'] = ' reload_on_save="true"'; $status = $item['value']; //set sign for confirmation modal about dependendants for disable action if ($item['value'] == 1) { $children = $this->extension_manager->getChildrenExtensions($extension); if ($children) { foreach ($children as $child) { if ($this->config->get($child['key'] . '_status')) { $this->data['has_dependants'] = true; break; } } } } } $data['name'] = $item['name']; $data['type'] = $item['type']; $data['value'] = $item['value']; $data['required'] = (bool) $item['required']; if ($item['note']) { $data['note'] = $item['note']; } else { $note_text = $this->language->get($data['name']); // if text definition not found - seek it in default settings definitions if ($note_text == $data['name']) { $new_text_key = str_replace($extension . '_', 'text_', $data['name']); $note_text = $this->language->get($new_text_key); if ($note_text == $new_text_key) { $note_text = $this->language->get($new_text_key . '_' . $this->data['extension_info']['type']); } } $data['note'] = $note_text; } if ($item['style']) { $data['style'] = $item['style']; } if ($item['attr']) { $data['attr'] = $item['attr']; } if ($item['readonly']) { $data['readonly'] = $item['readonly']; } switch ($data['type']) { case 'selectbox': case 'multiselectbox': case 'checkboxgroup': // if options need to extract from db $data['options'] = $item['options']; if ($item['model_rt'] != '') { //force to load models even before extension is enabled $this->loadModel($item['model_rt'], 'force'); $model = $this->{'model_' . str_replace("/", "_", $item['model_rt'])}; $method_name = $item['method']; if (method_exists($model, $method_name)) { $res = call_user_func(array($model, $method_name)); if ($res) { $field1 = $item['field1']; $field2 = $item['field2']; foreach ($res as $opt) { $data['options'][$opt[$field1]] = $opt[$field2]; } } } } if ($data['type'] == 'checkboxgroup' || $data['type'] == 'multiselectbox') { #custom settings for multivalue $data['scrollbox'] = 'true'; if (substr($item['name'], -2) != '[]') { $data['name'] = $item['name'] . "[]"; } $data['style'] = "chosen"; } break; case 'html_template': // if options need to extract from db $data['template'] = $item['template']; $data['options'] = $item['options']; if ($item['model_rt'] != '') { //force to load models even before extension is enabled $this->loadModel($item['model_rt'], 'force'); $model = $this->{'model_' . str_replace("/", "_", $item['model_rt'])}; $method_name = $item['method']; if (method_exists($model, $method_name)) { $data['options'][$method_name] = call_user_func(array($model, $method_name)); } } break; case 'checkbox': $data['style'] = "btn_switch"; if ($item['name'] == $extension . '_status') { $data['style'] .= " status_switch"; } break; case 'resource': $item['resource_type'] = (string) $item['resource_type']; $data['rl_types'] = array($item['resource_type']); $data['rl_type'] = $item['resource_type']; //check if ID for resource is provided or path if (is_numeric($item['value'])) { $data['resource_id'] = $item['value']; } else { $data['resource_path'] = $item['value']; } if (!$result['rl_scripts']) { $scripts = $this->dispatch('responses/common/resource_library/get_resources_scripts', array('object_name' => '', 'object_id' => '', 'types' => array($item['resource_type']), 'onload' => true, 'mode' => 'single')); $result['rl_scripts'] = $scripts->dispatchGetOutput(); unset($scripts); } break; default: } $html = ''; //if template process diffrently if (has_value((string) $data['template'])) { //build path to template directory. $dir_template = DIR_EXT . $extension . DIR_EXT_ADMIN . DIR_EXT_TEMPLATE . $this->config->get('admin_template') . "/template/" . $data['template']; //validate template and report issue if (!file_exists($dir_template)) { $warning = new AWarning(sprintf($this->language->get('error_could_not_load_override'), $dir_template, $extension)); $warning->toLog()->toDebug(); } else { $this->view->batchAssign($data); $html = $this->view->fetch($dir_template); } } else { $html = $form->getFieldHtml($data); } $result['html'][$data['name']] = array('note' => $data['note'], 'value' => $html); } // end building aform $this->data['settings'] = $result['html']; $this->data['resources_scripts'] = $result['rl_scripts']; $this->data['target_url'] = $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $extension . '&store_id=' . $store_id); //check if we restore settings to default values if (isset($this->request->get['restore']) && $this->request->get['restore']) { $this->extension_manager->editSetting($extension, $ext->getDefaultSettings()); $this->cache->delete('settings.extension'); $this->session->data['success'] = $this->language->get('text_restore_success'); $this->redirect($this->data['target_url']); } //check if we save settings with the post if ($this->request->is_POST() && $this->_validateSettings($extension, $store_id)) { $save_data = $this->request->post; foreach ($settings as $item) { if (!isset($this->request->post[$item['name']])) { $save_data[$item['name']] = 0; } } $save_data['store_id'] = $store_id; $this->extension_manager->editSetting($extension, $save_data); $this->cache->delete('settings.extension'); $this->session->data['success'] = $this->language->get('text_save_success'); $this->redirect($this->data['target_url']); } $conflict_resources = $ext->validateResources(); if (!empty($conflict_resources)) { ob_start(); print_r($conflict_resources); $err = ob_get_clean(); ADebug::warning('resources conflict', AC_ERR_USER_WARNING, $extension . ' Extension resources conflict detected.<br/><pre>' . $err . '</pre>'); } $this->document->setTitle($this->language->get($extension . '_name')); $this->document->addBreadcrumb(array('href' => $this->data['target_url'], 'text' => $this->language->get($extension . '_name'), 'separator' => ' :: ', 'current' => true)); $this->data['heading_title'] = $this->language->get($extension . '_name'); $this->data['text_version'] = $this->language->get('text_version'); $this->data['text_installed_on'] = $this->language->get('text_installed_on'); $this->data['text_date_added'] = $this->language->get('text_date_added'); $this->data['text_license'] = $this->language->get('text_license'); $this->data['text_dependency'] = $this->language->get('text_dependency'); $this->data['text_configuration_settings'] = $this->language->get('text_configuration_settings'); $this->data['button_back'] = $this->html->buildElement(array('type' => 'button', 'name' => 'btn_back', 'text' => $this->language->get('text_back'))); $this->data['button_reload'] = $this->html->buildElement(array('type' => 'button', 'name' => 'btn_reload', 'text' => $this->language->get('text_reload'))); $this->data['button_restore_defaults'] = $this->html->buildElement(array('type' => 'button', 'name' => 'button_restore_defaults', 'text' => $this->language->get('button_restore_defaults'), 'href' => $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $extension . '&reload=1'))); $this->data['button_save'] = $this->html->buildElement(array('type' => 'button', 'name' => 'btn_save', 'text' => $this->language->get('button_save'))); $this->data['button_save_green'] = $this->html->buildElement(array('type' => 'button', 'name' => 'btn_save', 'text' => $this->language->get('button_save'))); $this->data['button_reset'] = $this->html->buildElement(array('type' => 'button', 'name' => 'btn_reset', 'text' => $this->language->get('text_reset'))); $this->data['reload'] = $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $extension); $this->data['back'] = $this->html->getSecureURL('extension/extensions/' . $this->session->data['extension_filter']); $this->data['update'] = $this->html->getSecureURL('listing_grid/extension/update', '&id=' . $extension . '&store_id=' . $store_id); $this->data['dependants_url'] = $this->html->getSecureURL('listing_grid/extension/dependants', '&extension=' . $extension); if (!$this->extension_manager->validateDependencies($extension, getExtensionConfigXml($extension))) { $this->error['warning'] = $this->language->get('error_dependencies'); } if (isset($this->error['warning'])) { $this->data['error_warning'] = $this->error['warning']; } else { $this->data['error_warning'] = ''; } if (isset($this->session->data['success'])) { $this->data['success'] = $this->session->data['success']; unset($this->session->data['success']); } else { $this->data['success'] = ''; } if (isset($this->session->data['error'])) { $this->data['error_warning'] = $this->session->data['error']; unset($this->session->data['error']); } else { $this->data['error'] = ''; } //info about available updates $upd = $this->cache->get('extensions.updates'); if (is_array($upd) && in_array($extension, array_keys($upd))) { $this->data['info'] = sprintf($this->language->get('text_update_available'), $upd[$extension]['version'], $this->html->getSecureURL('tool/package_installer', '&extension_key=' . $upd[$extension]['installation_key'])); } $missing_extensions = $this->extensions->getMissingExtensions(); //if extension is missing - do redirect on extensions list with alert! if (in_array($extension, $missing_extensions)) { $this->session->data['error'] = sprintf($this->language->get('text_missing_extension'), $extension); $this->redirect($this->html->getSecureURL('extension/extensions')); } $this->data['extension_info']['note'] = $ext->getConfig('note') ? $this->html->convertLinks($this->language->get($extension . '_note')) : ''; $config = $ext->getConfig(); if (!empty($config->preview->item)) { foreach ($config->preview->item as $item) { if (!is_file(DIR_EXT . $extension . DIR_EXT_IMAGE . (string) $item)) { continue; } $this->data['extension_info']['preview'][] = HTTPS_EXT . $extension . DIR_EXT_IMAGE . (string) $item; } //image gallery scripts and css for previews $this->document->addStyle(array('href' => RDIR_TEMPLATE . 'javascript/blueimp-gallery/css/bootstrap-image-gallery.css', 'rel' => 'stylesheet')); $this->document->addStyle(array('href' => RDIR_TEMPLATE . 'javascript/blueimp-gallery/css/blueimp-gallery.min.css', 'rel' => 'stylesheet')); $this->document->addScript(RDIR_TEMPLATE . 'javascript/blueimp-gallery/jquery.blueimp-gallery.min.js'); $this->document->addScript(RDIR_TEMPLATE . 'javascript/blueimp-gallery/bootstrap-image-gallery.js'); } if ($ext->getConfig('help_link')) { $this->data['extension_info']['help'] = array('ext_link' => array('text' => $this->language->get('text_developer_site'), 'link' => $ext->getConfig('help_link'))); } if ($ext->getConfig('help_file')) { $this->data['extension_info']['help']['file'] = array('link' => $this->html->getSecureURL('extension/extension/help', '&extension=' . $this->request->get['extension']), 'text' => $this->language->get('button_howto')); } $this->data['extension_info']['dependencies'] = array(); $this->data['extension_info']['extensions'] = $this->extensions->getEnabledExtensions(); $missing_extensions = $this->extensions->getMissingExtensions(); $db_extensions = $this->extensions->getDbExtensions(); if (isset($config->dependencies->item)) { foreach ($config->dependencies->item as $item) { $id = (string) $item; $actions = array(); if ($this->config->has($id . '_status')) { $status = $this->language->get('text_installed') . ' (' . $this->language->get('text_enabled') . ')'; } else { $status = $this->language->get('text_not_installed') . ' (' . $this->language->get('text_disabled') . ')'; } if (in_array($id, $db_extensions)) { if (in_array($id, $missing_extensions)) { $class = 'warning'; $status = sprintf($this->language->get('text_missing_extension'), $id); $actions['delete'] = $this->html->buildElement(array('type' => 'button', 'href' => $this->html->getSecureURL('extension/extensions/delete', '&extension=' . $id), 'target' => '_blank', 'style' => 'btn_delete', 'icon' => 'fa fa-trash-o', 'title' => $this->language->get('text_delete'))); } else { if (!$this->config->has($id . '_status')) { $actions['install'] = $this->html->buildElement(array('type' => 'button', 'href' => $this->html->getSecureURL('extension/extensions/install', '&extension=' . $id), 'target' => '_blank', 'style' => 'btn_install', 'icon' => 'fa fa-play', 'title' => $this->language->get('text_install'))); $actions['delete'] = $this->html->buildElement(array('type' => 'button', 'href' => $this->html->getSecureURL('extension/extensions/delete', '&extension=' . $id), 'target' => '_blank', 'style' => 'btn_delete', 'icon' => 'fa fa-trash-o', 'title' => $this->language->get('text_delete'))); } else { $actions['edit'] = $this->html->buildElement(array('type' => 'button', 'href' => $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $id), 'target' => '_blank', 'style' => 'btn_edit', 'icon' => 'fa fa-edit', 'title' => $this->language->get('text_edit'))); if (!(bool) $item['required']) { $actions['uninstall'] = $this->html->buildElement(array('type' => 'button', 'href' => $this->html->getSecureURL('extension/extensions/uninstall', '&extension=' . $id), 'target' => '_blank', 'style' => 'btn_uninstall', 'icon' => 'fa fa-times', 'title' => $this->language->get('text_uninstall'))); } } } } else { $actions['mp'] = $this->html->buildElement(array('type' => 'button', 'href' => $this->html->getSecureURL('extension/extensions_store', '&extension=' . $id), 'target' => '_blank', 'style' => 'btn_mp', 'icon' => 'fa fa-play', 'title' => $this->language->get('text_visit_repository'))); } $this->data['extension_info']['dependencies'][] = array('required' => (bool) $item['required'], 'id' => $id, 'status' => $status, 'actions' => $actions, 'class' => $class); unset($class); } } // additional settings page if ($ext->getConfig('additional_settings')) { $btn_param = array('type' => 'button', 'name' => 'btn_addsett', 'href' => $this->html->getSecureURL($ext->getConfig('additional_settings')), 'text' => $this->language->get('text_additional_settings'), 'style' => 'button1'); if ($store_id) { $this->loadModel('setting/store'); $store_info = $this->model_setting_store->getStore($store_id); $btn_param['link'] = $store_info['config_url'] . '?s=' . ADMIN_PATH . '&rt=' . $ext->getConfig('additional_settings'); $btn_param['target'] = '_blank'; $btn_param['onclick'] = 'onclick="return confirm(\'' . $this->language->get('additional_settings_confirm') . '\');"'; } $this->data['add_sett'] = $this->html->buildElement($btn_param); } $this->data['target_url'] = $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $extension); $this->view->assign('help_url', $this->gen_help_url('extension_edit')); $template = 'pages/extension/extensions_edit.tpl'; //#PR set custom templates for extension settings page. if (has_value((string) $config->custom_settings_template)) { //build path to template directory. $dir_template = DIR_EXT . $extension . DIR_EXT_ADMIN . DIR_EXT_TEMPLATE . $this->config->get('admin_template') . "/template/"; $dir_template .= (string) $config->custom_settings_template; //validate template and report issue if (!file_exists($dir_template)) { $warning = new AWarning(sprintf($this->language->get('error_could_not_load_override'), $dir_template, $extension)); $warning->toLog()->toDebug(); } else { $template = $dir_template; } } //load tabs controller for addtional settings if ($this->data['add_sett']) { $this->data['groups'][] = 'additional_settings'; $this->data['link_additional_settings'] = $this->data['add_sett']->href . '&extension=' . $extension; } $tabs_obj = $this->dispatch('pages/extension/extension_tabs', array($this->data)); $this->data['tabs'] = $tabs_obj->dispatchGetOutput(); unset($tabs_obj); $obj = $this->dispatch('pages/extension/extension_summary', array($this->data)); $this->data['extension_summary'] = $obj->dispatchGetOutput(); unset($obj); $this->view->batchAssign($this->data); $this->processTemplate($template); //update controller data $this->extensions->hk_UpdateData($this, __FUNCTION__); }
public function edit() { //init controller data $this->extensions->hk_InitData($this, __FUNCTION__); $this->document->addScript($this->view->templateResource('/javascript/jquery/thickbox/thickbox-compressed.js')); $this->document->addStyle(array('href' => $this->view->templateResource('/javascript/jquery/thickbox/thickbox.css'), 'rel' => 'stylesheet', 'media' => 'screen')); $this->document->resetBreadcrumbs(); $this->document->addBreadcrumb(array('href' => $this->html->getSecureURL('index/home'), 'text' => $this->language->get('text_home'), 'separator' => FALSE)); $this->document->addBreadcrumb(array('href' => $this->html->getSecureURL('extension/extensions/' . $this->session->data['extension_filter']), 'text' => $this->language->get('heading_title'), 'separator' => ' :: ')); $extension = $this->request->get['extension']; $this->loadLanguage('extension/extensions'); $this->loadLanguage($extension . '/' . $extension); $store_id = (int) $this->config->get('config_store_id'); if ($this->request->get_or_post('store_id')) { $store_id = $this->request->get_or_post('store_id'); } $ext = new ExtensionUtils($extension, $store_id); $settings = $ext->getSettings(); $extension_info = $this->extensions->getExtensionInfo($extension); if (!$extension_info) { // if extension is not installed yet - redirect to list $this->redirect($this->html->getSecureURL('extension/extensions')); } /** build aform with settings**/ $result = array('resource_field_list' => array()); // store switcher for default store Cntrol Panel only if (!$this->config->get('config_store_id')) { $stores = array(); $stores[0] = $this->language->get('text_default'); $this->loadModel('setting/store'); $stores_arr = $this->model_setting_store->getStores(); if (count($stores_arr) > 1) { foreach ($stores_arr as $res) { $stores[$res['store_id']] = $res['alias']; } $switcher = array('name' => 'store_id', 'type' => 'selectbox', 'options' => $stores, 'value' => $store_id, 'note' => $this->language->get('tab_store'), 'style' => 'no-save'); } else { $switcher = array('type' => 'hidden', 'name' => 'store_id', 'note' => ' ', 'value' => 0); } } else { $switcher = array('type' => 'hidden', 'name' => 'store_id', 'note' => ' ', 'value' => $store_id); } array_unshift($settings, $switcher); foreach ($settings as $item) { $data = array(); if ($item['name'] == $extension . '_status') { $status = $item['value']; } $data['name'] = $item['name']; $data['type'] = $item['type']; $data['value'] = $item['value']; $data['required'] = (bool) $item['required']; if ($item['note']) { $data['note'] = $item['note']; } else { $note_text = $this->language->get($data['name']); // if text definition not found - seek it in default settings definitions if ($note_text == $data['name']) { $new_text_key = str_replace($extension . '_', 'text_', $data['name']); $note_text = $this->language->get($new_text_key); if ($note_text == $new_text_key) { $note_text = $this->language->get($new_text_key . '_' . $extension_info['type']); } } $data['note'] = $note_text; } if ($item['style']) { $data['style'] = $item['style']; } if ($item['attr']) { $data['attr'] = $item['attr']; } if ($item['readonly']) { $data['readonly'] = $item['readonly']; } switch ($data['type']) { case 'selectbox': case 'multiselectbox': case 'checkboxgroup': // if options need to extract from db $data['options'] = $item['options']; if ($item['model_rt'] != '') { //force to load models even before extension is enabled $this->loadModel($item['model_rt'], 'force'); $model = $this->{'model_' . str_replace("/", "_", $item['model_rt'])}; $method_name = $item['method']; if (method_exists($model, $method_name)) { $res = call_user_func(array($model, $method_name)); if ($res) { $field1 = $item['field1']; $field2 = $item['field2']; foreach ($res as $opt) { $data['options'][$opt[$field1]] = $opt[$field2]; } } } } if ($data['type'] == 'checkboxgroup' || $data['type'] == 'multiselectbox') { #custom settings for multivalue $data['scrollbox'] = 'true'; if (substr($item['name'], -2) != '[]') { $data['name'] = $item['name'] . "[]"; } } break; case 'resource': $item['resource_type'] = (string) $item['resource_type']; if (!$result['rl_scripts']) { $scripts = $this->dispatch('responses/common/resource_library/get_resources_scripts', array('object_name' => '', 'object_id' => '', 'types' => $item['resource_type'], 'mode' => 'url')); $result['rl_scripts'] = $scripts->dispatchGetOutput(); unset($scripts); } //preview of resource $resource = new AResource($item['resource_type']); $resource_id = $resource->getIdFromHexPath(str_replace($item['resource_type'] . '/', '', $item['value'])); $preview = $this->dispatch('responses/common/resource_library/get_resource_html_single', array('type' => 'image', 'wrapper_id' => $item['name'], 'resource_id' => $resource_id, 'field' => $item['name'])); $item['value'] = $preview->dispatchGetOutput(); if ($data['value']) { $data = array('note' => $data['note'], 'name' => $item['name'], 'type' => 'hidden'); if ($resource_id) { $resource_info = $resource->getResource($resource_id); $data['value'] = $item['resource_type'] . '/' . $resource_info['resource_path']; } } $result['resource_field_list'][$item['name']]['value'] = $item['value']; $result['resource_field_list'][$item['name']]['resource_type'] = $item['resource_type']; $result['resource_field_list'][$item['name']]['resource_id'] = $resource_id; break; default: } $item = HtmlElementFactory::create($data); $result['html'][$data['name']] = array('note' => $data['note'], 'value' => $item->getHtml()); } // end building aform $this->data['settings'] = $result['html']; $this->data['resource_field_list'] = $result['resource_field_list']; $this->data['resource_edit_link'] = $this->data['resources_scripts'] = $result['rl_scripts']; $this->data['target_url'] = $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $extension . '&store_id=' . $store_id); if (isset($this->request->get['restore']) && $this->request->get['restore']) { $this->extension_manager->editSetting($extension, $ext->getDefaultSettings()); $this->cache->delete('settings.extension'); $this->session->data['success'] = $this->language->get('text_restore_success'); $this->redirect($this->data['target_url']); } if ($this->request->server['REQUEST_METHOD'] == 'POST' && $this->_validateSettings($extension, $store_id)) { foreach ($settings as $item) { if (!isset($this->request->post[$item['name']])) { $this->request->post[$item['name']] = 0; } } $this->extension_manager->editSetting($extension, $this->request->post); $this->cache->delete('settings.extension'); $this->session->data['success'] = $this->language->get('text_success'); $this->redirect($this->data['target_url']); } $conflict_resources = $ext->validateResources(); if (!empty($conflict_resources)) { ob_start(); print_r($conflict_resources); $err = ob_get_clean(); ADebug::warning('resources conflict', AC_ERR_USER_WARNING, $extension . ' Extension resources conflict detected.<br/><pre>' . $err . '</pre>'); } $this->document->setTitle($this->language->get($extension . '_name')); $this->document->addBreadcrumb(array('href' => $this->data['target_url'], 'text' => $this->language->get($extension . '_name'), 'separator' => ' :: ')); $this->data['heading_title'] = $this->language->get($extension . '_name'); $this->data['text_version'] = $this->language->get('text_version'); $this->data['text_installed_on'] = $this->language->get('text_installed_on'); $this->data['text_date_added'] = $this->language->get('text_date_added'); $this->data['text_license'] = $this->language->get('text_license'); $this->data['text_dependency'] = $this->language->get('text_dependency'); $this->data['text_configuration_settings'] = $this->language->get('text_configuration_settings'); $this->data['button_back'] = $this->html->buildButton(array('name' => 'btn_back', 'text' => $this->language->get('text_back'), 'style' => 'button2')); $this->data['button_reload'] = $this->html->buildButton(array('name' => 'btn_reload', 'text' => $this->language->get('text_reload'), 'style' => 'button2')); $this->data['button_restore_defaults'] = $this->html->buildButton(array('name' => 'button_restore_defaults', 'text' => $this->language->get('button_restore_defaults'), 'style' => 'button2')); $this->data['button_save'] = $this->html->buildButton(array('name' => 'btn_save', 'text' => $this->language->get('button_save'), 'style' => 'button1')); $this->data['button_save_green'] = $this->html->buildButton(array('name' => 'btn_save', 'text' => $this->language->get('button_save'), 'style' => 'button3')); $this->data['button_reset'] = $this->html->buildButton(array('name' => 'btn_reset', 'text' => $this->language->get('text_reset'), 'style' => 'button2')); $this->data['reload'] = $this->html->getSecureURL('extension/extensions/edit/', '&extension=' . $extension); $this->data['back'] = $this->html->getSecureURL('extension/extensions/' . $this->session->data['extension_filter']); $this->data['update'] = $this->html->getSecureURL('listing_grid/extension/update', '&id=' . $extension . '&store_id=' . $store_id); $this->data['dependants_url'] = $this->html->getSecureURL('listing_grid/extension/dependants'); $form = new AForm(); $form->setForm(array('form_name' => 'editSettings')); $this->data['form']['form_open'] = $form->getFieldHtml(array('type' => 'form', 'name' => 'editSettings', 'attr' => 'confirm-exit="true"', 'action' => $this->html->getSecureURL('extension/extensions/edit/', '&action=save&extension=' . $extension . '&store_id=' . $store_id))); if (!$this->extension_manager->validateDependencies($extension, getExtensionConfigXml($extension))) { $this->error['warning'] = 'This extension cannot be enabled because required dependency missing or not enabled.'; } if (isset($this->error['warning'])) { $this->data['error_warning'] = $this->error['warning']; } else { $this->data['error_warning'] = ''; } if (isset($this->session->data['success'])) { $this->data['success'] = $this->session->data['success']; unset($this->session->data['success']); } else { $this->data['success'] = ''; } if (isset($this->session->data['error'])) { $this->data['error_warning'] = $this->session->data['error']; unset($this->session->data['error']); } else { $this->data['error'] = ''; } $icon_ext_img_url = HTTP_CATALOG . 'extensions/' . $extension . '/image/icon.png'; $icon_ext_dir = DIR_EXT . $extension . '/image/icon.png'; $icon = is_file($icon_ext_dir) ? $icon_ext_img_url : RDIR_TEMPLATE . 'image/default_extension.png'; $extension_data = array('id' => $extension); $missing_extensions = $this->extensions->getMissingExtensions(); if (!in_array($extension, $missing_extensions)) { $extension_data['icon'] = $icon; $extension_data['name'] = $this->language->get($extension . '_name'); $extension_data['version'] = $extension_info['version']; $long_datetime_format = $this->language->get('date_format_long') . ' ' . $this->language->get('time_format'); if ($extension_info['date_installed']) { $extension_data['installed'] = dateISO2Display($extension_info['date_installed'], $long_datetime_format); } if ($extension_info['create_date']) { $extension_data['create_date'] = dateISO2Display($extension_info['create_date'], $long_datetime_format); } $extension_data['license'] = $extension_info['license_key']; $extension_data['note'] = $ext->getConfig('note') ? $this->html->convertLinks($this->language->get($extension . '_note')) : ''; $config = $ext->getConfig(); if (!empty($config->preview->item)) { foreach ($config->preview->item as $item) { if (!is_file(DIR_EXT . $extension . DIR_EXT_IMAGE . (string) $item)) { continue; } $extension_data['preview'][] = HTTPS_EXT . $extension . DIR_EXT_IMAGE . (string) $item; } } if (isset($this->session->data['extension_updates'][$extension])) { $extension_data['upgrade'] = array('text' => $this->html->buildButton(array('id' => 'upgradenow', 'name' => 'btn_upgrade', 'text' => $this->language->get('button_upgrade'), 'style' => 'button1')), 'link' => AEncryption::addEncoded_stid($this->session->data['extension_updates'][$extension]['url'])); } $extension_data['help'] = array('text' => $this->html->buildButton(array('name' => 'btn_help', 'text' => $this->language->get('text_help'), 'style' => 'button2')), 'ext_link' => $ext->getConfig('help_link')); if ($ext->getConfig('help_file')) { $extension_data['help']['file'] = true; $extension_data['help']['file_link'] = $this->html->getSecureURL('extension/extension/help', '&extension=' . $this->request->get['extension']); $this->data['text_more_help'] = $this->language->get('text_more_help'); } $extension_data['dependencies'] = array(); $extension_data['extensions'] = $this->extensions->getEnabledExtensions(); $missing_extensions = $this->extensions->getMissingExtensions(); $db_extensions = $this->extensions->getDbExtensions(); if (isset($config->dependencies->item)) { foreach ($config->dependencies->item as $item) { $id = (string) $item; if (in_array($id, $db_extensions)) { if (in_array($id, $missing_extensions)) { $class = 'warning'; $action = str_replace('%EXT%', $id, $this->language->get('text_missing_extension')) . '<a class="btn_action" target="_blank" href="' . $this->html->getSecureURL('extension/extensions/delete', '&extension=' . $id) . '" onclick="return confirm(\'' . $this->language->get('text_delete_confirm') . '\')" title="' . $this->language->get('text_delete') . '">' . '<img src="' . RDIR_TEMPLATE . 'image/icons/icon_grid_delete.png" alt="' . $this->language->get('text_delete') . '" />' . '</a>'; } else { if (!$this->config->has($id . '_status')) { $class = 'attention'; $action = '<a class="btn_action" target="_blank" href="' . $this->html->getSecureURL('extension/extensions/install', '&extension=' . $id) . '" title="' . $this->language->get('text_install') . '">' . '<img src="' . RDIR_TEMPLATE . 'image/icons/icon_grid_install.png" alt="' . $this->language->get('text_install') . '" />' . '</a>' . '<a class="btn_action" target="_blank" href="' . $this->html->getSecureURL('extension/extensions/delete', '&extension=' . $id) . '" onclick="return confirm(\'' . $this->language->get('text_delete_confirm') . '\')" title="' . $this->language->get('text_delete') . '">' . '<img src="' . RDIR_TEMPLATE . 'image/icons/icon_grid_delete.png" alt="' . $this->language->get('text_delete') . '" />' . '</a>'; } else { $action = '<a id="action_edit_' . $id . '" target="_blank" class="btn_action" href="' . $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $id) . '" title="' . $this->language->get('text_edit') . '">' . '<img src="' . RDIR_TEMPLATE . 'image/icons/icon_grid_edit.png" alt="' . $this->language->get('text_edit') . '" /></a>'; if (!(bool) $item['required']) { $action .= '<a class="btn_action" target="_blank" href="' . $this->html->getSecureURL('extension/extensions/uninstall', '&extension=' . $id) . '" onclick="return confirm(\'' . str_replace('%extension%', $id, $this->language->get('text_uninstall_confirm')) . '\')" title="' . $this->language->get('text_uninstall') . '">' . '<img src="' . RDIR_TEMPLATE . 'image/icons/icon_grid_uninstall.png" alt="' . $this->language->get('text_uninstall') . '" />' . '</a>'; } } } } else { $action = '<a href="' . $this->html->getSecureURL('extension/extensions_store', '&extension=' . $id) . '" target="_blank">'; $action = str_replace('%extensions_store%', $action, $this->language->get('text_visit_repository')); } $extension_data['dependencies'][] = array('required' => (bool) $item['required'], 'id' => $id, 'status' => ($this->config->has($id . '_status') ? $this->language->get('text_installed') : $this->language->get('text_not_installed')) . ' (' . ($this->config->get($id . '_status') ? $this->language->get('text_enabled') : $this->language->get('text_disabled')) . ' )', 'action' => $action, 'class' => $class); unset($class); } } } else { // if extension missing $extension_data['icon'] = $icon; $extension_data['name'] = str_replace('%EXT%', $extension, $this->language->get('text_missing_extension')); } // additional settings page if ($ext->getConfig('additional_settings') && $status) { $btn_param = array('name' => 'btn_addsett', 'text' => $this->language->get('text_additional_settings'), 'style' => 'button1'); $this->data['add_sett']['link'] = $this->html->getSecureURL($ext->getConfig('additional_settings')); if ($store_id) { $this->loadModel('setting/store'); $store_info = $this->model_setting_store->getStore($store_id); $this->data['add_sett']['link'] = $store_info['config_url'] . '?s=' . ADMIN_PATH . '&rt=' . $ext->getConfig('additional_settings'); $this->data['add_sett']['onclick'] = 'onclick="return confirm(\'' . $this->language->get('additional_settings_confirm') . '\');"'; } $this->data['add_sett']['text'] = $this->html->buildButton($btn_param); } $this->data['extension'] = $extension_data; $this->data['target_url'] = $this->html->getSecureURL('extension/extensions/edit', '&extension=' . $extension); $this->view->assign('help_url', $this->gen_help_url('extension_edit')); $template = 'pages/extension/extensions_edit.tpl'; //#PR set custom templates for extension settings page. if (has_value((string) $config->custom_settings_template)) { //build path to template directory. $dir_template = DIR_EXT . $extension . DIR_EXT_ADMIN . DIR_EXT_TEMPLATE . $this->config->get('admin_template') . "/template/"; $dir_template .= (string) $config->custom_settings_template; //validate template and report issue if (!file_exists($dir_template)) { $warning = new AWarning("Cannot load override template {$dir_template} in extension {$extension}!"); $warning->toLog()->toDebug(); } else { $template = $dir_template; } } $this->view->batchAssign($this->data); $this->processTemplate($template); //update controller data $this->extensions->hk_UpdateData($this, __FUNCTION__); }