d_seo_module.php (161802B)
1 <?php 2 class ControllerExtensionModuleDSEOModule extends Controller { 3 private $codename = 'd_seo_module'; 4 private $route = 'extension/module/d_seo_module'; 5 private $config_file = 'd_seo_module'; 6 private $extension = array(); 7 private $error = array(); 8 9 public function __construct($registry) { 10 parent::__construct($registry); 11 12 $this->extension = json_decode(file_get_contents(DIR_SYSTEM . 'library/d_shopunity/extension/' . $this->codename . '.json'), true); 13 $this->d_shopunity = (file_exists(DIR_SYSTEM . 'library/d_shopunity/extension/d_shopunity.json')); 14 $this->d_validator = (file_exists(DIR_SYSTEM . 'library/d_shopunity/extension/d_validator.json')); 15 } 16 17 public function index() { 18 $this->dashboard(); 19 } 20 21 public function dashboard() { 22 $this->load->language($this->route); 23 24 $this->load->model($this->route); 25 $this->load->model('setting/setting'); 26 $this->load->model('localisation/language'); 27 $this->load->model('tool/image'); 28 29 if ($this->d_shopunity) { 30 $this->load->model('extension/d_shopunity/mbooth'); 31 32 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->codename); 33 } 34 35 if ($this->d_validator) { 36 $this->load->model('extension/d_shopunity/d_validator'); 37 $this->model_extension_d_shopunity_d_validator->installCompatibility(); 38 } 39 40 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 41 $this->load->model('extension/module/d_twig_manager'); 42 43 $this->model_extension_module_d_twig_manager->installCompatibility(); 44 } 45 46 $this->update(); 47 48 if (isset($this->request->get['store_id'])) { 49 $store_id = $this->request->get['store_id']; 50 } else { 51 $store_id = 0; 52 } 53 54 $url_token = ''; 55 56 if (isset($this->session->data['token'])) { 57 $url_token .= 'token=' . $this->session->data['token']; 58 } 59 60 if (isset($this->session->data['user_token'])) { 61 $url_token .= 'user_token=' . $this->session->data['user_token']; 62 } 63 64 $url_store = 'store_id=' . $store_id; 65 66 // Styles and Scripts 67 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 68 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 69 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 70 $this->document->addStyle('view/stylesheet/d_admin_style/core/normalize/normalize.css'); 71 $this->document->addStyle('view/stylesheet/d_admin_style/themes/light/light.css'); 72 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 73 74 // Heading 75 $this->document->setTitle($this->language->get('heading_title_main')); 76 $data['heading_title'] = $this->language->get('heading_title_main'); 77 78 // Variable 79 $data['codename'] = $this->codename; 80 $data['route'] = $this->route; 81 $data['version'] = $this->extension['version']; 82 $data['extension_id'] = $this->extension['extension_id']; 83 $data['config'] = $this->config_file; 84 $data['d_shopunity'] = $this->d_shopunity; 85 $data['store_id'] = $store_id; 86 $data['url_token'] = $url_token; 87 $data['stores'] = $this->{'model_extension_module_' . $this->codename}->getStores(); 88 $data['languages'] = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 89 90 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 91 $data['installed'] = in_array($this->codename, $installed_seo_extensions) ? true : false; 92 93 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 94 $data['server'] = HTTPS_SERVER; 95 $data['catalog'] = HTTPS_CATALOG; 96 } else { 97 $data['server'] = HTTP_SERVER; 98 $data['catalog'] = HTTP_CATALOG; 99 } 100 101 // Action 102 $data['href_dashboard'] = $this->url->link($this->route . '/dashboard', $url_token . '&' . $url_store, true); 103 $data['href_setting'] = $this->url->link($this->route . '/setting', $url_token . '&' . $url_store, true); 104 $data['href_multi_store_field'] = $this->url->link($this->route . '/multi_store_field', $url_token . '&' . $url_store, true); 105 $data['href_target_keyword'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store, true); 106 $data['href_export_import'] = $this->url->link($this->route . '/export_import', $url_token . '&' . $url_store, true); 107 $data['href_instruction'] = $this->url->link($this->route . '/instruction', $url_token . '&' . $url_store, true); 108 109 $data['module_link'] = $this->url->link($this->route, $url_token . '&' . $url_store, true); 110 $data['setup'] = $this->url->link($this->route . '/setupExtension', $url_token, true); 111 $data['install'] = $this->url->link($this->route . '/installExtension', $url_token, true); 112 $data['uninstall'] = $this->url->link($this->route . '/uninstallExtension', $url_token, true); 113 114 if (VERSION >= '3.0.0.0') { 115 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=module', true); 116 } elseif (VERSION >= '2.3.0.0') { 117 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=module', true); 118 } else { 119 $data['cancel'] = $this->url->link('extension/module', $url_token, true); 120 } 121 122 // Tab 123 $data['text_dashboard'] = $this->language->get('text_dashboard'); 124 $data['text_settings'] = $this->language->get('text_settings'); 125 $data['text_multi_store_fields'] = $this->language->get('text_multi_store_fields'); 126 $data['text_target_keywords'] = $this->language->get('text_target_keywords'); 127 $data['text_export_import'] = $this->language->get('text_export_import'); 128 $data['text_instructions'] = $this->language->get('text_instructions'); 129 130 // Button 131 $data['button_cancel'] = $this->language->get('button_cancel'); 132 $data['button_setup'] = $this->language->get('button_setup'); 133 $data['button_install'] = $this->language->get('button_install'); 134 $data['button_view'] = $this->language->get('button_view'); 135 $data['button_reset'] = $this->language->get('button_reset'); 136 137 // Text 138 $data['text_edit'] = $this->language->get('text_edit'); 139 $data['text_install'] = $this->language->get('text_install'); 140 $data['text_setup'] = $this->language->get('text_setup'); 141 $data['text_full_setup'] = $this->language->get('text_full_setup'); 142 $data['text_custom_setup'] = $this->language->get('text_custom_setup'); 143 $data['text_seo_extensions'] = $this->language->get('text_seo_extensions'); 144 $data['text_quick_setup'] = $this->language->get('text_quick_setup'); 145 $data['text_implemented'] = $this->language->get('text_implemented'); 146 $data['text_details'] = $this->language->get('text_details'); 147 $data['text_no_control_elements'] = $this->language->get('text_no_control_elements'); 148 $data['text_powered_by'] = $this->language->get('text_powered_by'); 149 150 // Help 151 $data['help_setup'] = $this->language->get('help_setup'); 152 $data['help_full_setup'] = $this->language->get('help_full_setup'); 153 $data['help_custom_setup'] = $this->language->get('help_custom_setup'); 154 155 // Notification 156 foreach ($this->error as $key => $error) { 157 $data['error'][$key] = $error; 158 } 159 160 if (isset($this->session->data['success'])) { 161 $data['success'] = $this->session->data['success']; 162 unset($this->session->data['success']); 163 } else { 164 $data['success'] = ''; 165 } 166 167 if (!file_exists(DIR_SYSTEM . '/library/d_shopunity/extension/d_seo_module_pack.json')) { 168 $data['d_seo_module_pack']['info'] = $this->language->get('help_d_seo_module_pack'); 169 $data['d_seo_module_pack']['extension_id'] = 130; 170 } 171 172 // Breadcrumbs 173 $data['breadcrumbs'] = array(); 174 175 $data['breadcrumbs'][] = array( 176 'text' => $this->language->get('text_home'), 177 'href' => $this->url->link('common/dashboard', $url_token, true) 178 ); 179 180 if (VERSION >= '3.0.0.0') { 181 $data['breadcrumbs'][] = array( 182 'text' => $this->language->get('text_modules'), 183 'href' => $this->url->link('marketplace/extension', $url_token . '&type=module', true) 184 ); 185 } elseif (VERSION >= '2.3.0.0') { 186 $data['breadcrumbs'][] = array( 187 'text' => $this->language->get('text_modules'), 188 'href' => $this->url->link('extension/extension', $url_token . '&type=module', true) 189 ); 190 } else { 191 $data['breadcrumbs'][] = array( 192 'text' => $this->language->get('text_modules'), 193 'href' => $this->url->link('extension/module', $url_token, true) 194 ); 195 } 196 197 $data['breadcrumbs'][] = array( 198 'text' => $this->language->get('text_seo_module'), 199 'href' => $this->url->link($this->route, $url_token . '&' . $url_store, true) 200 ); 201 202 $data['header'] = $this->load->controller('common/header'); 203 $data['column_left'] = $this->load->controller('common/column_left'); 204 $data['footer'] = $this->load->controller('common/footer'); 205 206 if ($data['installed']) { 207 $control_extensions = array(); 208 209 $seo_extensions = $this->{'model_extension_module_' . $this->codename}->getSEOExtensions(); 210 211 foreach ($seo_extensions as $seo_extension) { 212 $info = $this->load->controller('extension/' . $this->codename . '/' . $seo_extension . '/control_extensions'); 213 if ($info) $control_extensions = array_merge($control_extensions, $info); 214 } 215 216 $control_extensions = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($control_extensions, 'sort_order'); 217 218 $data['control_extensions'] = array(); 219 220 foreach ($control_extensions as $control_extension) { 221 if (isset($control_extension['code']) && isset($control_extension['name']) && isset($control_extension['image']) && isset($control_extension['href'])) { 222 $url_extension_code = 'extension_code=' . $control_extension['code']; 223 224 $control_extension['install_href'] = $this->url->link('extension/module/' . $this->codename . '/installControlExtension', $url_token . '&' . $url_extension_code, true); 225 $control_extension['installed'] = in_array($control_extension['code'], $installed_seo_extensions) ? true : false; 226 227 $data['control_extensions'][] = $control_extension; 228 } 229 } 230 231 $control_elements = array(); 232 233 foreach ($installed_seo_extensions as $installed_seo_extension) { 234 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/control_elements', array('store_id' => $store_id)); 235 if ($info) $control_elements = array_merge($control_elements, $info); 236 } 237 238 $data['quick_setup_total'] = 0; 239 $data['implemented_total'] = 0; 240 $data['control_elements'] = array(); 241 242 foreach ($control_elements as $control_element) { 243 if (isset($control_element['extension_code']) && isset($control_element['element_code']) && isset($control_element['name']) && isset($control_element['description']) && isset($control_element['confirm']) && isset($control_element['implemented'])) { 244 $url_extension_code = 'extension_code=' . $control_element['extension_code']; 245 $url_element_code = 'element_code=' . $control_element['element_code']; 246 247 $control_element['edit_href'] = $this->url->link('extension/module/' . $this->codename . '/executeControlElement', $url_token . '&' . $url_store . '&' . $url_extension_code . '&' . $url_element_code, true); 248 249 if ($control_element['implemented']) { 250 $data['implemented_total']++; 251 } else { 252 $data['quick_setup_total']++; 253 } 254 255 $data['control_elements'][] = $control_element; 256 } 257 } 258 259 $data['control_elements'] = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($data['control_elements'], 'weight', SORT_DESC); 260 261 $this->response->setOutput($this->load->view($this->route . '/dashboard', $data)); 262 } else { 263 // Setting 264 $this->config->load($this->config_file); 265 $config_feature_setting = ($this->config->get($this->codename . '_feature_setting')) ? $this->config->get($this->codename . '_feature_setting') : array(); 266 267 $data['features'] = array(); 268 269 foreach ($config_feature_setting as $feature) { 270 if (substr($feature['name'], 0, strlen('text_')) == 'text_') { 271 $feature['name'] = $this->language->get($feature['name']); 272 } 273 274 $data['features'][] = $feature; 275 } 276 277 $this->response->setOutput($this->load->view($this->route . '/install', $data)); 278 } 279 } 280 281 public function setting() { 282 $this->load->language($this->route); 283 284 $this->load->model($this->route); 285 $this->load->model('setting/setting'); 286 $this->load->model('localisation/language'); 287 288 if ($this->d_shopunity) { 289 $this->load->model('extension/d_shopunity/mbooth'); 290 291 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->codename); 292 } 293 294 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 295 $this->load->model('extension/module/d_twig_manager'); 296 297 $this->model_extension_module_d_twig_manager->installCompatibility(); 298 } 299 300 $this->update(); 301 302 if (isset($this->request->get['store_id'])) { 303 $store_id = $this->request->get['store_id']; 304 } else { 305 $store_id = 0; 306 } 307 308 $url_token = ''; 309 310 if (isset($this->session->data['token'])) { 311 $url_token .= 'token=' . $this->session->data['token']; 312 } 313 314 if (isset($this->session->data['user_token'])) { 315 $url_token .= 'user_token=' . $this->session->data['user_token']; 316 } 317 318 $url_store = 'store_id=' . $store_id; 319 320 // Styles and Scripts 321 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 322 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 323 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 324 $this->document->addStyle('view/stylesheet/d_admin_style/core/normalize/normalize.css'); 325 $this->document->addStyle('view/stylesheet/d_admin_style/themes/light/light.css'); 326 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 327 328 // Heading 329 $this->document->setTitle($this->language->get('heading_title_main')); 330 $data['heading_title'] = $this->language->get('heading_title_main'); 331 332 // Variable 333 $data['codename'] = $this->codename; 334 $data['route'] = $this->route; 335 $data['version'] = $this->extension['version']; 336 $data['config'] = $this->config_file; 337 $data['d_shopunity'] = $this->d_shopunity; 338 $data['store_id'] = $store_id; 339 $data['stores'] = $this->{'model_extension_module_' . $this->codename}->getStores(); 340 $data['languages'] = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 341 342 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 343 $data['installed'] = in_array($this->codename, $installed_seo_extensions) ? true : false; 344 345 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 346 $data['server'] = HTTPS_SERVER; 347 $data['catalog'] = HTTPS_CATALOG; 348 } else { 349 $data['server'] = HTTP_SERVER; 350 $data['catalog'] = HTTP_CATALOG; 351 } 352 353 $data['catalog_url_info'] = $this->{'model_extension_module_' . $this->codename}->getURLInfo($data['catalog']); 354 355 // Action 356 $data['href_dashboard'] = $this->url->link($this->route . '/dashboard', $url_token . '&' . $url_store, true); 357 $data['href_setting'] = $this->url->link($this->route . '/setting', $url_token . '&' . $url_store, true); 358 $data['href_multi_store_field'] = $this->url->link($this->route . '/multi_store_field', $url_token . '&' . $url_store, true); 359 $data['href_target_keyword'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store, true); 360 $data['href_export_import'] = $this->url->link($this->route . '/export_import', $url_token . '&' . $url_store, true); 361 $data['href_instruction'] = $this->url->link($this->route . '/instruction', $url_token . '&' . $url_store, true); 362 363 $data['module_link'] = $this->url->link($this->route, $url_token . '&' . $url_store, true); 364 $data['action'] = $this->url->link($this->route . '/save', $url_token . '&' . $url_store, true); 365 $data['setup'] = $this->url->link($this->route . '/setupExtension', $url_token, true); 366 $data['install'] = $this->url->link($this->route . '/installExtension', $url_token, true); 367 $data['uninstall'] = $this->url->link($this->route . '/uninstallExtension', $url_token, true); 368 $data['store_setting'] = $this->url->link('setting/setting', $url_token, true); 369 370 if (VERSION >= '3.0.0.0') { 371 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=module', true); 372 } elseif (VERSION >= '2.3.0.0') { 373 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=module', true); 374 } else { 375 $data['cancel'] = $this->url->link('extension/module', $url_token, true); 376 } 377 378 // Tab 379 $data['text_dashboard'] = $this->language->get('text_dashboard'); 380 $data['text_settings'] = $this->language->get('text_settings'); 381 $data['text_multi_store_fields'] = $this->language->get('text_multi_store_fields'); 382 $data['text_target_keywords'] = $this->language->get('text_target_keywords'); 383 $data['text_export_import'] = $this->language->get('text_export_import'); 384 $data['text_instructions'] = $this->language->get('text_instructions'); 385 $data['text_basic_settings'] = $this->language->get('text_basic_settings'); 386 $data['text_htaccess'] = $this->language->get('text_htaccess'); 387 $data['text_robots'] = $this->language->get('text_robots'); 388 389 // Button 390 $data['button_save'] = $this->language->get('button_save'); 391 $data['button_save_and_stay'] = $this->language->get('button_save_and_stay'); 392 $data['button_cancel'] = $this->language->get('button_cancel'); 393 $data['button_setup'] = $this->language->get('button_setup'); 394 $data['button_uninstall'] = $this->language->get('button_uninstall'); 395 $data['button_view_store_setting'] = $this->language->get('button_view_store_setting'); 396 397 // Entry 398 $data['entry_status'] = $this->language->get('entry_status'); 399 $data['entry_list_limit'] = $this->language->get('entry_list_limit'); 400 $data['entry_uninstall'] = $this->language->get('entry_uninstall'); 401 $data['entry_text'] = $this->language->get('entry_text'); 402 403 // Text 404 $data['text_edit'] = $this->language->get('text_edit'); 405 $data['text_install'] = $this->language->get('text_install'); 406 $data['text_setup'] = $this->language->get('text_setup'); 407 $data['text_full_setup'] = $this->language->get('text_full_setup'); 408 $data['text_custom_setup'] = $this->language->get('text_custom_setup'); 409 $data['text_yes'] = $this->language->get('text_yes'); 410 $data['text_no'] = $this->language->get('text_no'); 411 $data['text_enabled'] = $this->language->get('text_enabled'); 412 $data['text_disabled'] = $this->language->get('text_disabled'); 413 $data['text_powered_by'] = $this->language->get('text_powered_by'); 414 $data['text_uninstall_confirm'] = $this->language->get('text_uninstall_confirm'); 415 416 // Help 417 $data['help_setup'] = $this->language->get('help_setup'); 418 $data['help_full_setup'] = $this->language->get('help_full_setup'); 419 $data['help_custom_setup'] = $this->language->get('help_custom_setup'); 420 $data['help_htaccess_setting'] = $this->language->get('help_htaccess_setting'); 421 $data['help_htaccess_subfolder'] = $this->language->get('help_htaccess_subfolder'); 422 $data['help_robots'] = $this->language->get('help_robots'); 423 424 // Notification 425 foreach ($this->error as $key => $error) { 426 $data['error'][$key] = $error; 427 } 428 429 if (isset($this->session->data['success'])) { 430 $data['success'] = $this->session->data['success']; 431 unset($this->session->data['success']); 432 } else { 433 $data['success'] = ''; 434 } 435 436 // Breadcrumbs 437 $data['breadcrumbs'] = array(); 438 439 $data['breadcrumbs'][] = array( 440 'text' => $this->language->get('text_home'), 441 'href' => $this->url->link('common/dashboard', $url_token, true) 442 ); 443 444 if (VERSION >= '3.0.0.0') { 445 $data['breadcrumbs'][] = array( 446 'text' => $this->language->get('text_modules'), 447 'href' => $this->url->link('marketplace/extension', $url_token . '&type=module', true) 448 ); 449 } elseif (VERSION >= '2.3.0.0') { 450 $data['breadcrumbs'][] = array( 451 'text' => $this->language->get('text_modules'), 452 'href' => $this->url->link('extension/extension', $url_token . '&type=module', true) 453 ); 454 } else { 455 $data['breadcrumbs'][] = array( 456 'text' => $this->language->get('text_modules'), 457 'href' => $this->url->link('extension/module', $url_token, true) 458 ); 459 } 460 461 $data['breadcrumbs'][] = array( 462 'text' => $this->language->get('text_seo_module'), 463 'href' => $this->url->link($this->route, $url_token . '&' . $url_store, true) 464 ); 465 466 $data['header'] = $this->load->controller('common/header'); 467 $data['column_left'] = $this->load->controller('common/column_left'); 468 $data['footer'] = $this->load->controller('common/footer'); 469 470 if ($data['installed']) { 471 // Setting 472 $this->config->load($this->config_file); 473 $data['setting'] = ($this->config->get($this->codename . '_setting')) ? $this->config->get($this->codename . '_setting') : array(); 474 475 $setting = $this->model_setting_setting->getSetting('module_' . $this->codename, $store_id); 476 $status = isset($setting['module_' . $this->codename . '_status']) ? $setting['module_' . $this->codename . '_status'] : false; 477 $setting = isset($setting['module_' . $this->codename . '_setting']) ? $setting['module_' . $this->codename . '_setting'] : array(); 478 479 $data['status'] = $status; 480 481 if (!empty($setting)) { 482 $data['setting'] = array_replace_recursive($data['setting'], $setting); 483 } 484 485 $data['htaccess'] = $this->{'model_extension_module_' . $this->codename}->getFileData('htaccess'); 486 $data['robots'] = $this->{'model_extension_module_' . $this->codename}->getFileData('robots'); 487 488 if (!$data['htaccess']['status'] && !trim($data['htaccess']['text'])) { 489 $data['htaccess']['text'] = str_replace('[catalog_url_path]', $data['catalog_url_info']['path'], $data['setting']['default_htaccess']); 490 } 491 492 if (!$data['robots']['status'] && !trim($data['robots']['text'])) { 493 $data['robots']['text'] = str_replace('[catalog_url]', $data['catalog'], $data['setting']['default_robots']); 494 $data['robots']['text'] = str_replace('[catalog_url_host]', $data['catalog_url_info']['host'], $data['robots']['text']); 495 } 496 497 $this->response->setOutput($this->load->view($this->route . '/setting', $data)); 498 } else { 499 // Setting 500 $this->config->load($this->config_file); 501 $config_feature_setting = ($this->config->get($this->codename . '_feature_setting')) ? $this->config->get($this->codename . '_feature_setting') : array(); 502 503 $data['features'] = array(); 504 505 foreach ($config_feature_setting as $feature) { 506 if (substr($feature['name'], 0, strlen('text_')) == 'text_') { 507 $feature['name'] = $this->language->get($feature['name']); 508 } 509 510 $data['features'][] = $feature; 511 } 512 513 $this->response->setOutput($this->load->view($this->route . '/install', $data)); 514 } 515 } 516 517 public function multi_store_field() { 518 $this->load->language($this->route); 519 520 $this->load->model($this->route); 521 $this->load->model('setting/setting'); 522 $this->load->model('localisation/language'); 523 524 if ($this->d_shopunity) { 525 $this->load->model('extension/d_shopunity/mbooth'); 526 527 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->codename); 528 } 529 530 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 531 $this->load->model('extension/module/d_twig_manager'); 532 533 $this->model_extension_module_d_twig_manager->installCompatibility(); 534 } 535 536 $this->update(); 537 538 if (isset($this->request->get['store_id'])) { 539 $store_id = $this->request->get['store_id']; 540 } else { 541 $store_id = 0; 542 } 543 544 $url_token = ''; 545 546 if (isset($this->session->data['token'])) { 547 $url_token .= 'token=' . $this->session->data['token']; 548 } 549 550 if (isset($this->session->data['user_token'])) { 551 $url_token .= 'user_token=' . $this->session->data['user_token']; 552 } 553 554 $url_store = 'store_id=' . $store_id; 555 556 // Styles and Scripts 557 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 558 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 559 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 560 $this->document->addStyle('view/stylesheet/d_admin_style/core/normalize/normalize.css'); 561 $this->document->addStyle('view/stylesheet/d_admin_style/themes/light/light.css'); 562 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 563 564 // Heading 565 $this->document->setTitle($this->language->get('heading_title_main')); 566 $data['heading_title'] = $this->language->get('heading_title_main'); 567 568 // Variable 569 $data['codename'] = $this->codename; 570 $data['route'] = $this->route; 571 $data['version'] = $this->extension['version']; 572 $data['config'] = $this->config_file; 573 $data['d_shopunity'] = $this->d_shopunity; 574 $data['store_id'] = $store_id; 575 $data['stores'] = $this->{'model_extension_module_' . $this->codename}->getStores(); 576 $data['languages'] = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 577 578 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 579 $data['installed'] = in_array($this->codename, $installed_seo_extensions) ? true : false; 580 581 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 582 $data['server'] = HTTPS_SERVER; 583 $data['catalog'] = HTTPS_CATALOG; 584 } else { 585 $data['server'] = HTTP_SERVER; 586 $data['catalog'] = HTTP_CATALOG; 587 } 588 589 // Action 590 $data['href_dashboard'] = $this->url->link($this->route . '/dashboard', $url_token . '&' . $url_store, true); 591 $data['href_setting'] = $this->url->link($this->route . '/setting', $url_token . '&' . $url_store, true); 592 $data['href_multi_store_field'] = $this->url->link($this->route . '/multi_store_field', $url_token . '&' . $url_store, true); 593 $data['href_target_keyword'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store, true); 594 $data['href_export_import'] = $this->url->link($this->route . '/export_import', $url_token . '&' . $url_store, true); 595 $data['href_instruction'] = $this->url->link($this->route . '/instruction', $url_token . '&' . $url_store, true); 596 597 $data['action'] = $this->url->link($this->route . '/save', $url_token, true); 598 $data['setup'] = $this->url->link($this->route . '/setupExtension', $url_token, true); 599 $data['install'] = $this->url->link($this->route . '/installExtension', $url_token, true); 600 601 if (VERSION >= '3.0.0.0') { 602 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=module', true); 603 } elseif (VERSION >= '2.3.0.0') { 604 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=module', true); 605 } else { 606 $data['cancel'] = $this->url->link('extension/module', $url_token, true); 607 } 608 609 // Tab 610 $data['text_dashboard'] = $this->language->get('text_dashboard'); 611 $data['text_settings'] = $this->language->get('text_settings'); 612 $data['text_multi_store_fields'] = $this->language->get('text_multi_store_fields'); 613 $data['text_target_keywords'] = $this->language->get('text_target_keywords'); 614 $data['text_export_import'] = $this->language->get('text_export_import'); 615 $data['text_instructions'] = $this->language->get('text_instructions'); 616 617 // Button 618 $data['button_save'] = $this->language->get('button_save'); 619 $data['button_save_and_stay'] = $this->language->get('button_save_and_stay'); 620 $data['button_cancel'] = $this->language->get('button_cancel'); 621 $data['button_setup'] = $this->language->get('button_setup'); 622 623 // Column 624 $data['column_field'] = $this->language->get('column_field'); 625 $data['column_multi_store_status'] = $this->language->get('column_multi_store_status'); 626 627 // Text 628 $data['text_edit'] = $this->language->get('text_edit'); 629 $data['text_install'] = $this->language->get('text_install'); 630 $data['text_setup'] = $this->language->get('text_setup'); 631 $data['text_full_setup'] = $this->language->get('text_full_setup'); 632 $data['text_custom_setup'] = $this->language->get('text_custom_setup'); 633 $data['text_yes'] = $this->language->get('text_yes'); 634 $data['text_no'] = $this->language->get('text_no'); 635 $data['text_enabled'] = $this->language->get('text_enabled'); 636 $data['text_disabled'] = $this->language->get('text_disabled'); 637 $data['text_powered_by'] = $this->language->get('text_powered_by'); 638 639 // Help 640 $data['help_setup'] = $this->language->get('help_setup'); 641 $data['help_full_setup'] = $this->language->get('help_full_setup'); 642 $data['help_custom_setup'] = $this->language->get('help_custom_setup'); 643 644 // Notification 645 foreach ($this->error as $key => $error) { 646 $data['error'][$key] = $error; 647 } 648 649 if (isset($this->session->data['success'])) { 650 $data['success'] = $this->session->data['success']; 651 unset($this->session->data['success']); 652 } else { 653 $data['success'] = ''; 654 } 655 656 // Breadcrumbs 657 $data['breadcrumbs'] = array(); 658 659 $data['breadcrumbs'][] = array( 660 'text' => $this->language->get('text_home'), 661 'href' => $this->url->link('common/dashboard', $url_token, true) 662 ); 663 664 if (VERSION >= '3.0.0.0') { 665 $data['breadcrumbs'][] = array( 666 'text' => $this->language->get('text_modules'), 667 'href' => $this->url->link('marketplace/extension', $url_token . '&type=module', true) 668 ); 669 } elseif (VERSION >= '2.3.0.0') { 670 $data['breadcrumbs'][] = array( 671 'text' => $this->language->get('text_modules'), 672 'href' => $this->url->link('extension/extension', $url_token . '&type=module', true) 673 ); 674 } else { 675 $data['breadcrumbs'][] = array( 676 'text' => $this->language->get('text_modules'), 677 'href' => $this->url->link('extension/module', $url_token, true) 678 ); 679 } 680 681 $data['breadcrumbs'][] = array( 682 'text' => $this->language->get('text_seo_module'), 683 'href' => $this->url->link($this->route, $url_token . '&' . $url_store, true) 684 ); 685 686 $data['header'] = $this->load->controller('common/header'); 687 $data['column_left'] = $this->load->controller('common/column_left'); 688 $data['footer'] = $this->load->controller('common/footer'); 689 690 if ($data['installed']) { 691 $data['field_setting'] = $this->getFieldInfo(); 692 693 $this->response->setOutput($this->load->view($this->route . '/multi_store_field', $data)); 694 } else { 695 // Setting 696 $this->config->load($this->config_file); 697 $config_feature_setting = ($this->config->get($this->codename . '_feature_setting')) ? $this->config->get($this->codename . '_feature_setting') : array(); 698 699 $data['features'] = array(); 700 701 foreach ($config_feature_setting as $feature) { 702 if (substr($feature['name'], 0, strlen('text_')) == 'text_') { 703 $feature['name'] = $this->language->get($feature['name']); 704 } 705 706 $data['features'][] = $feature; 707 } 708 709 $this->response->setOutput($this->load->view($this->route . '/install', $data)); 710 } 711 } 712 713 public function target_keyword() { 714 $this->load->language($this->route); 715 716 $this->load->model($this->route); 717 $this->load->model('setting/setting'); 718 $this->load->model('localisation/language'); 719 720 if ($this->d_shopunity) { 721 $this->load->model('extension/d_shopunity/mbooth'); 722 723 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->codename); 724 } 725 726 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 727 $this->load->model('extension/module/d_twig_manager'); 728 729 $this->model_extension_module_d_twig_manager->installCompatibility(); 730 } 731 732 $this->update(); 733 734 if (isset($this->request->get['store_id'])) { 735 $store_id = $this->request->get['store_id']; 736 } else { 737 $store_id = 0; 738 } 739 740 if (isset($this->request->get['sheet_code'])) { 741 $sheet_code = $this->request->get['sheet_code']; 742 } else { 743 $sheet_code = 'category'; 744 } 745 746 if (isset($this->request->get['page'])) { 747 $page = $this->request->get['page']; 748 } else { 749 $page = 1; 750 } 751 752 $url_token = ''; 753 754 if (isset($this->session->data['token'])) { 755 $url_token .= 'token=' . $this->session->data['token']; 756 } 757 758 if (isset($this->session->data['user_token'])) { 759 $url_token .= 'user_token=' . $this->session->data['user_token']; 760 } 761 762 $url_store = 'store_id=' . $store_id; 763 $url_sheet = 'sheet_code=' . $sheet_code; 764 $url_page = 'page=' . $page; 765 766 // Styles and Scripts 767 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 768 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 769 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 770 $this->document->addStyle('view/stylesheet/d_admin_style/core/normalize/normalize.css'); 771 $this->document->addStyle('view/stylesheet/d_admin_style/themes/light/light.css'); 772 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 773 774 // Heading 775 $this->document->setTitle($this->language->get('heading_title_main')); 776 $data['heading_title'] = $this->language->get('heading_title_main'); 777 778 // Variable 779 $data['codename'] = $this->codename; 780 $data['route'] = $this->route; 781 $data['version'] = $this->extension['version']; 782 $data['config'] = $this->config_file; 783 $data['d_shopunity'] = $this->d_shopunity; 784 $data['store_id'] = $store_id; 785 $data['sheet_code'] = $sheet_code; 786 $data['page'] = $page; 787 $data['url_token'] = $url_token; 788 $data['stores'] = $this->{'model_extension_module_' . $this->codename}->getStores(); 789 $data['languages'] = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 790 791 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 792 $data['installed'] = in_array($this->codename, $installed_seo_extensions) ? true : false; 793 794 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 795 $data['server'] = HTTPS_SERVER; 796 $data['catalog'] = HTTPS_CATALOG; 797 } else { 798 $data['server'] = HTTP_SERVER; 799 $data['catalog'] = HTTP_CATALOG; 800 } 801 802 // Action 803 $data['href_dashboard'] = $this->url->link($this->route . '/dashboard', $url_token . '&' . $url_store, true); 804 $data['href_setting'] = $this->url->link($this->route . '/setting', $url_token . '&' . $url_store, true); 805 $data['href_multi_store_field'] = $this->url->link($this->route . '/multi_store_field', $url_token . '&' . $url_store, true); 806 $data['href_target_keyword'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store, true); 807 $data['href_export_import'] = $this->url->link($this->route . '/export_import', $url_token . '&' . $url_store, true); 808 $data['href_instruction'] = $this->url->link($this->route . '/instruction', $url_token . '&' . $url_store, true); 809 810 $data['module_link'] = $this->url->link($this->route, $url_token . '&' . $url_store, true); 811 $data['store_url'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_sheet, true); 812 $data['setup'] = $this->url->link($this->route . '/setupExtension', $url_token, true); 813 $data['install'] = $this->url->link($this->route . '/installExtension', $url_token, true); 814 815 if (VERSION >= '3.0.0.0') { 816 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=module', true); 817 } elseif (VERSION >= '2.3.0.0') { 818 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=module', true); 819 } else { 820 $data['cancel'] = $this->url->link('extension/module', $url_token, true); 821 } 822 823 // Tab 824 $data['text_dashboard'] = $this->language->get('text_dashboard'); 825 $data['text_settings'] = $this->language->get('text_settings'); 826 $data['text_multi_store_fields'] = $this->language->get('text_multi_store_fields'); 827 $data['text_target_keywords'] = $this->language->get('text_target_keywords'); 828 $data['text_export_import'] = $this->language->get('text_export_import'); 829 $data['text_instructions'] = $this->language->get('text_instructions'); 830 831 // Button 832 $data['button_save'] = $this->language->get('button_save'); 833 $data['button_save_and_stay'] = $this->language->get('button_save_and_stay'); 834 $data['button_cancel'] = $this->language->get('button_cancel'); 835 $data['button_setup'] = $this->language->get('button_setup'); 836 $data['button_filter'] = $this->language->get('button_filter'); 837 $data['button_clear_filter'] = $this->language->get('button_clear_filter'); 838 $data['button_create_default_target_keywords'] = $this->language->get('button_create_default_target_keywords'); 839 $data['button_add_target_keyword'] = $this->language->get('button_add_target_keyword'); 840 $data['button_delete_target_keywords'] = $this->language->get('button_delete_target_keywords'); 841 842 // Column 843 $data['column_route'] = $this->language->get('column_route'); 844 $data['column_target_keyword'] = $this->language->get('column_target_keyword'); 845 846 // Entry 847 $data['entry_route'] = $this->language->get('entry_route'); 848 $data['entry_target_keyword'] = $this->language->get('entry_target_keyword'); 849 850 // Text 851 $data['text_edit'] = $this->language->get('text_edit'); 852 $data['text_install'] = $this->language->get('text_install'); 853 $data['text_setup'] = $this->language->get('text_setup'); 854 $data['text_full_setup'] = $this->language->get('text_full_setup'); 855 $data['text_custom_setup'] = $this->language->get('text_custom_setup'); 856 $data['text_yes'] = $this->language->get('text_yes'); 857 $data['text_no'] = $this->language->get('text_no'); 858 $data['text_enabled'] = $this->language->get('text_enabled'); 859 $data['text_disabled'] = $this->language->get('text_disabled'); 860 $data['text_powered_by'] = $this->language->get('text_powered_by'); 861 862 $data['text_no_results'] = $this->language->get('text_no_results'); 863 $data['text_add_target_keyword'] = $this->language->get('text_add_target_keyword'); 864 $data['text_delete_target_keywords_confirm'] = $this->language->get('text_delete_target_keywords_confirm'); 865 $data['text_create_default_target_keywords_confirm'] = $this->language->get('text_create_default_target_keywords_confirm'); 866 867 // Help 868 $data['help_setup'] = $this->language->get('help_setup'); 869 $data['help_full_setup'] = $this->language->get('help_full_setup'); 870 $data['help_custom_setup'] = $this->language->get('help_custom_setup'); 871 872 // Notification 873 foreach ($this->error as $key => $error) { 874 $data['error'][$key] = $error; 875 } 876 877 if (isset($this->session->data['success'])) { 878 $data['success'] = $this->session->data['success']; 879 unset($this->session->data['success']); 880 } else { 881 $data['success'] = ''; 882 } 883 884 if (isset($this->request->post['selected'])) { 885 $data['selected'] = (array)$this->request->post['selected']; 886 } else { 887 $data['selected'] = array(); 888 } 889 890 if (isset($this->request->post['clear_filter'])) { 891 if ($this->request->post['clear_filter']) { 892 unset($this->request->post['filter']); 893 unset($this->session->data[$this->codename . '_filter_' . $sheet_code]); 894 } 895 } 896 897 if (isset($this->request->post['filter'])) { 898 $filter = $this->request->post['filter']; 899 $i = 0; 900 901 foreach($filter as $value) { 902 if ($value) $i++; 903 } 904 905 if ($i > 0) { 906 $this->session->data[$this->codename . '_filter_' . $sheet_code] = $filter; 907 } else { 908 $filter = array(); 909 unset($this->session->data[$this->codename . '_filter_' . $sheet_code]); 910 } 911 } elseif (isset($this->session->data[$this->codename . '_filter_' . $sheet_code])) { 912 $filter = $this->session->data[$this->codename . '_filter_' . $sheet_code]; 913 } else { 914 $filter = array(); 915 unset($this->session->data[$this->codename . '_filter_' . $sheet_code]); 916 } 917 918 // Breadcrumbs 919 $data['breadcrumbs'] = array(); 920 921 $data['breadcrumbs'][] = array( 922 'text' => $this->language->get('text_home'), 923 'href' => $this->url->link('common/dashboard', $url_token, true) 924 ); 925 926 if (VERSION >= '3.0.0.0') { 927 $data['breadcrumbs'][] = array( 928 'text' => $this->language->get('text_modules'), 929 'href' => $this->url->link('marketplace/extension', $url_token . '&type=module', true) 930 ); 931 } elseif (VERSION >= '2.3.0.0') { 932 $data['breadcrumbs'][] = array( 933 'text' => $this->language->get('text_modules'), 934 'href' => $this->url->link('extension/extension', $url_token . '&type=module', true) 935 ); 936 } else { 937 $data['breadcrumbs'][] = array( 938 'text' => $this->language->get('text_modules'), 939 'href' => $this->url->link('extension/module', $url_token, true) 940 ); 941 } 942 943 $data['breadcrumbs'][] = array( 944 'text' => $this->language->get('text_seo_module'), 945 'href' => $this->url->link($this->route, $url_token . '&' . $url_store, true) 946 ); 947 948 $data['header'] = $this->load->controller('common/header'); 949 $data['column_left'] = $this->load->controller('common/column_left'); 950 $data['footer'] = $this->load->controller('common/footer'); 951 952 if ($data['installed']) { 953 // Setting 954 $this->config->load($this->config_file); 955 $data['setting'] = ($this->config->get($this->codename . '_setting')) ? $this->config->get($this->codename . '_setting') : array(); 956 957 $setting = $this->model_setting_setting->getSetting('module_' . $this->codename, $store_id); 958 $setting = isset($setting['module_' . $this->codename . '_setting']) ? $setting['module_' . $this->codename . '_setting'] : array(); 959 960 if (!empty($setting)) { 961 $data['setting'] = array_replace_recursive($data['setting'], $setting); 962 } 963 964 $target_setting = array(); 965 966 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 967 968 foreach ($installed_seo_extensions as $installed_seo_extension) { 969 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/target_config'); 970 if ($info) $target_setting = array_replace_recursive($target_setting, $info); 971 } 972 973 $sheets = array(); 974 975 foreach ($target_setting['sheet'] as $sheet) { 976 if (isset($sheet['code']) && isset($sheet['icon']) && isset($sheet['name']) && isset($sheet['sort_order'])) { 977 $sheets[] = array( 978 'code' => $sheet['code'], 979 'icon' => $sheet['icon'], 980 'name' => $sheet['name'], 981 'sort_order' => $sheet['sort_order'], 982 'url' => $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store . '&sheet_code=' . $sheet['code'], true) 983 ); 984 } 985 } 986 987 $sheets = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($sheets, 'sort_order'); 988 989 $filter_data = array( 990 'store_id' => $store_id, 991 'sheet_code' => $sheet_code, 992 'filter' => $filter 993 ); 994 995 $target_elements = array(); 996 997 foreach ($installed_seo_extensions as $installed_seo_extension) { 998 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/target_elements', $filter_data); 999 if ($info) $target_elements = array_replace_recursive($target_elements, $info); 1000 } 1001 1002 $data['target_elements'] = array(); 1003 1004 $i = 0; 1005 1006 foreach ($target_elements as $target_element) { 1007 if (isset($target_element['target_keyword'])) { 1008 foreach ($target_element['target_keyword'] as $language_id => $target_keyword) { 1009 foreach ($target_keyword as $sort_order => $keyword) { 1010 $field_data = array( 1011 'field_code' => 'target_keyword', 1012 'filter' => array( 1013 'store_id' => $store_id, 1014 'keyword' => $keyword 1015 ) 1016 ); 1017 1018 $target_keywords = $this->getFieldElements($field_data); 1019 $store_target_keywords = reset($target_keywords); 1020 1021 if ((count($target_keywords) > 1) || (count(reset($store_target_keywords)) > 1)) { 1022 $target_element['target_keyword_duplicate'][$language_id][$sort_order] = 1; 1023 } 1024 } 1025 } 1026 } 1027 1028 if (($i >= (($page - 1) * $data['setting']['list_limit'])) && ($i < ((($page - 1) * $data['setting']['list_limit']) + $data['setting']['list_limit']))) { 1029 $data['target_elements'][] = $target_element; 1030 } 1031 1032 $i++; 1033 1034 if ($i == ((($page - 1) * $data['setting']['list_limit']) + $data['setting']['list_limit'])) break; 1035 } 1036 1037 $pagination = new Pagination(); 1038 $pagination->total = count($target_elements); 1039 $pagination->page = $page; 1040 $pagination->limit = $data['setting']['list_limit']; 1041 $pagination->url = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store . '&' . $url_sheet . '&page={page}', true); 1042 1043 $data['pagination'] = $pagination->render(); 1044 1045 $data['results'] = sprintf($this->language->get('text_pagination'), (count($target_elements)) ? (($page - 1) * $data['setting']['list_limit']) + 1 : 0, ((($page - 1) * $data['setting']['list_limit']) > (count($target_elements) - $data['setting']['list_limit'])) ? count($target_elements) : ((($page - 1) * $data['setting']['list_limit']) + $data['setting']['list_limit']), count($target_elements), ceil(count($target_elements) / $data['setting']['list_limit'])); 1046 1047 $data['sheets'] = $sheets; 1048 $data['filter'] = $filter; 1049 1050 $this->response->setOutput($this->load->view($this->route . '/target_keyword', $data)); 1051 } else { 1052 // Setting 1053 $this->config->load($this->config_file); 1054 $config_feature_setting = ($this->config->get($this->codename . '_feature_setting')) ? $this->config->get($this->codename . '_feature_setting') : array(); 1055 1056 $data['features'] = array(); 1057 1058 foreach ($config_feature_setting as $feature) { 1059 if (substr($feature['name'], 0, strlen('text_')) == 'text_') { 1060 $feature['name'] = $this->language->get($feature['name']); 1061 } 1062 1063 $data['features'][] = $feature; 1064 } 1065 1066 $this->response->setOutput($this->load->view($this->route . '/install', $data)); 1067 } 1068 } 1069 1070 public function export_import() { 1071 $this->load->language($this->route); 1072 1073 $this->load->model($this->route); 1074 $this->load->model('setting/setting'); 1075 $this->load->model('localisation/language'); 1076 1077 if ($this->d_shopunity) { 1078 $this->load->model('extension/d_shopunity/mbooth'); 1079 1080 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->codename); 1081 } 1082 1083 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 1084 $this->load->model('extension/module/d_twig_manager'); 1085 1086 $this->model_extension_module_d_twig_manager->installCompatibility(); 1087 } 1088 1089 $this->update(); 1090 1091 if (isset($this->request->get['store_id'])) { 1092 $store_id = $this->request->get['store_id']; 1093 } else { 1094 $store_id = 0; 1095 } 1096 1097 $url_token = ''; 1098 1099 if (isset($this->session->data['token'])) { 1100 $url_token .= 'token=' . $this->session->data['token']; 1101 } 1102 1103 if (isset($this->session->data['user_token'])) { 1104 $url_token .= 'user_token=' . $this->session->data['user_token']; 1105 } 1106 1107 $url_store = 'store_id=' . $store_id; 1108 1109 // Styles and Scripts 1110 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 1111 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 1112 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 1113 $this->document->addStyle('view/stylesheet/d_admin_style/core/normalize/normalize.css'); 1114 $this->document->addStyle('view/stylesheet/d_admin_style/themes/light/light.css'); 1115 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 1116 1117 // Heading 1118 $this->document->setTitle($this->language->get('heading_title_main')); 1119 $data['heading_title'] = $this->language->get('heading_title_main'); 1120 1121 // Variable 1122 $data['codename'] = $this->codename; 1123 $data['route'] = $this->route; 1124 $data['version'] = $this->extension['version']; 1125 $data['config'] = $this->config_file; 1126 $data['d_shopunity'] = $this->d_shopunity; 1127 $data['store_id'] = $store_id; 1128 $data['stores'] = $this->{'model_extension_module_' . $this->codename}->getStores(); 1129 1130 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1131 $data['installed'] = in_array($this->codename, $installed_seo_extensions) ? true : false; 1132 1133 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 1134 $data['server'] = HTTPS_SERVER; 1135 $data['catalog'] = HTTPS_CATALOG; 1136 } else { 1137 $data['server'] = HTTP_SERVER; 1138 $data['catalog'] = HTTP_CATALOG; 1139 } 1140 1141 // Action 1142 $data['href_dashboard'] = $this->url->link($this->route . '/dashboard', $url_token . '&' . $url_store, true); 1143 $data['href_setting'] = $this->url->link($this->route . '/setting', $url_token . '&' . $url_store, true); 1144 $data['href_multi_store_field'] = $this->url->link($this->route . '/multi_store_field', $url_token . '&' . $url_store, true); 1145 $data['href_target_keyword'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store, true); 1146 $data['href_export_import'] = $this->url->link($this->route . '/export_import', $url_token . '&' . $url_store, true); 1147 $data['href_instruction'] = $this->url->link($this->route . '/instruction', $url_token . '&' . $url_store, true); 1148 1149 $data['module_link'] = $this->url->link($this->route, $url_token . '&' . $url_store, true); 1150 $data['setup'] = $this->url->link($this->route . '/setupExtension', $url_token, true); 1151 $data['install'] = $this->url->link($this->route . '/installExtension', $url_token, true); 1152 $data['export'] = $this->url->link($this->route . '/export', $url_token, true); 1153 $data['import'] = $this->url->link($this->route . '/import', $url_token, true); 1154 1155 if (VERSION >= '3.0.0.0') { 1156 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=module', true); 1157 } elseif (VERSION >= '2.3.0.0') { 1158 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=module', true); 1159 } else { 1160 $data['cancel'] = $this->url->link('extension/module', $url_token, true); 1161 } 1162 1163 // Tab 1164 $data['text_dashboard'] = $this->language->get('text_dashboard'); 1165 $data['text_settings'] = $this->language->get('text_settings'); 1166 $data['text_multi_store_fields'] = $this->language->get('text_multi_store_fields'); 1167 $data['text_target_keywords'] = $this->language->get('text_target_keywords'); 1168 $data['text_export_import'] = $this->language->get('text_export_import'); 1169 $data['text_instructions'] = $this->language->get('text_instructions'); 1170 1171 $data['text_export'] = $this->language->get('text_export'); 1172 $data['text_import'] = $this->language->get('text_import'); 1173 1174 // Button 1175 $data['button_cancel'] = $this->language->get('button_cancel'); 1176 $data['button_setup'] = $this->language->get('button_setup'); 1177 $data['button_export'] = $this->language->get('button_export'); 1178 $data['button_import'] = $this->language->get('button_import'); 1179 1180 // Entry 1181 $data['entry_store'] = $this->language->get('entry_store'); 1182 $data['entry_sheet'] = $this->language->get('entry_sheet'); 1183 $data['entry_export'] = $this->language->get('entry_export'); 1184 $data['entry_upload'] = $this->language->get('entry_upload'); 1185 $data['entry_import'] = $this->language->get('entry_import'); 1186 1187 // Text 1188 $data['text_edit'] = $this->language->get('text_edit'); 1189 $data['text_install'] = $this->language->get('text_install'); 1190 $data['text_setup'] = $this->language->get('text_setup'); 1191 $data['text_full_setup'] = $this->language->get('text_full_setup'); 1192 $data['text_custom_setup'] = $this->language->get('text_custom_setup'); 1193 $data['text_yes'] = $this->language->get('text_yes'); 1194 $data['text_no'] = $this->language->get('text_no'); 1195 $data['text_enabled'] = $this->language->get('text_enabled'); 1196 $data['text_disabled'] = $this->language->get('text_disabled'); 1197 $data['text_powered_by'] = $this->language->get('text_powered_by'); 1198 1199 // Help 1200 $data['help_setup'] = $this->language->get('help_setup'); 1201 $data['help_full_setup'] = $this->language->get('help_full_setup'); 1202 $data['help_custom_setup'] = $this->language->get('help_custom_setup'); 1203 1204 // Notification 1205 foreach ($this->error as $key => $error) { 1206 $data['error'][$key] = $error; 1207 } 1208 1209 if (isset($this->session->data['success'])) { 1210 $data['success'] = $this->session->data['success']; 1211 unset($this->session->data['success']); 1212 } else { 1213 $data['success'] = ''; 1214 } 1215 1216 // Breadcrumbs 1217 $data['breadcrumbs'] = array(); 1218 1219 $data['breadcrumbs'][] = array( 1220 'text' => $this->language->get('text_home'), 1221 'href' => $this->url->link('common/dashboard', $url_token, true) 1222 ); 1223 1224 if (VERSION >= '3.0.0.0') { 1225 $data['breadcrumbs'][] = array( 1226 'text' => $this->language->get('text_modules'), 1227 'href' => $this->url->link('marketplace/extension', $url_token . '&type=module', true) 1228 ); 1229 } elseif (VERSION >= '2.3.0.0') { 1230 $data['breadcrumbs'][] = array( 1231 'text' => $this->language->get('text_modules'), 1232 'href' => $this->url->link('extension/extension', $url_token . '&type=module', true) 1233 ); 1234 } else { 1235 $data['breadcrumbs'][] = array( 1236 'text' => $this->language->get('text_modules'), 1237 'href' => $this->url->link('extension/module', $url_token, true) 1238 ); 1239 } 1240 1241 $data['breadcrumbs'][] = array( 1242 'text' => $this->language->get('text_seo_module'), 1243 'href' => $this->url->link($this->route, $url_token . '&' . $url_store, true) 1244 ); 1245 1246 $data['header'] = $this->load->controller('common/header'); 1247 $data['column_left'] = $this->load->controller('common/column_left'); 1248 $data['footer'] = $this->load->controller('common/footer'); 1249 1250 if ($data['installed']) { 1251 // Setting 1252 $this->config->load($this->config_file); 1253 $data['setting'] = ($this->config->get($this->codename)) ? $this->config->get($this->codename) : array(); 1254 1255 $setting = $this->model_setting_setting->getSetting('module_' . $this->codename, $store_id); 1256 $setting = isset($setting['module_' . $this->codename . '_setting']) ? $setting['module_' . $this->codename . '_setting'] : array(); 1257 1258 if (!empty($setting)) { 1259 $data['setting'] = array_replace_recursive($data['setting'], $setting); 1260 } 1261 1262 $this->response->setOutput($this->load->view($this->route . '/export_import', $data)); 1263 } else { 1264 // Setting 1265 $this->config->load($this->config_file); 1266 $config_feature_setting = ($this->config->get($this->codename . '_feature_setting')) ? $this->config->get($this->codename . '_feature_setting') : array(); 1267 1268 $data['features'] = array(); 1269 1270 foreach ($config_feature_setting as $feature) { 1271 if (substr($feature['name'], 0, strlen('text_')) == 'text_') { 1272 $feature['name'] = $this->language->get($feature['name']); 1273 } 1274 1275 $data['features'][] = $feature; 1276 } 1277 1278 $this->response->setOutput($this->load->view($this->route . '/install', $data)); 1279 } 1280 } 1281 1282 public function instruction() { 1283 $this->load->language($this->route); 1284 1285 $this->load->model($this->route); 1286 $this->load->model('setting/setting'); 1287 $this->load->model('localisation/language'); 1288 1289 if ($this->d_shopunity) { 1290 $this->load->model('extension/d_shopunity/mbooth'); 1291 1292 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->codename); 1293 } 1294 1295 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 1296 $this->load->model('extension/module/d_twig_manager'); 1297 1298 $this->model_extension_module_d_twig_manager->installCompatibility(); 1299 } 1300 1301 $this->update(); 1302 1303 if (isset($this->request->get['store_id'])) { 1304 $store_id = $this->request->get['store_id']; 1305 } else { 1306 $store_id = 0; 1307 } 1308 1309 $url_token = ''; 1310 1311 if (isset($this->session->data['token'])) { 1312 $url_token .= 'token=' . $this->session->data['token']; 1313 } 1314 1315 if (isset($this->session->data['user_token'])) { 1316 $url_token .= 'user_token=' . $this->session->data['user_token']; 1317 } 1318 1319 $url_store = 'store_id=' . $store_id; 1320 1321 // Styles and Scripts 1322 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 1323 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 1324 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 1325 $this->document->addStyle('view/stylesheet/d_admin_style/core/normalize/normalize.css'); 1326 $this->document->addStyle('view/stylesheet/d_admin_style/themes/light/light.css'); 1327 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 1328 1329 // Heading 1330 $this->document->setTitle($this->language->get('heading_title_main')); 1331 $data['heading_title'] = $this->language->get('heading_title_main'); 1332 1333 // Variable 1334 $data['codename'] = $this->codename; 1335 $data['route'] = $this->route; 1336 $data['version'] = $this->extension['version']; 1337 $data['config'] = $this->config_file; 1338 $data['d_shopunity'] = $this->d_shopunity; 1339 $data['store_id'] = $store_id; 1340 1341 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1342 $data['installed'] = in_array($this->codename, $installed_seo_extensions) ? true : false; 1343 1344 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 1345 $data['server'] = HTTPS_SERVER; 1346 $data['catalog'] = HTTPS_CATALOG; 1347 } else { 1348 $data['server'] = HTTP_SERVER; 1349 $data['catalog'] = HTTP_CATALOG; 1350 } 1351 1352 // Action 1353 $data['href_dashboard'] = $this->url->link($this->route . '/dashboard', $url_token . '&' . $url_store, true); 1354 $data['href_setting'] = $this->url->link($this->route . '/setting', $url_token . '&' . $url_store, true); 1355 $data['href_multi_store_field'] = $this->url->link($this->route . '/multi_store_field', $url_token . '&' . $url_store, true); 1356 $data['href_target_keyword'] = $this->url->link($this->route . '/target_keyword', $url_token . '&' . $url_store, true); 1357 $data['href_export_import'] = $this->url->link($this->route . '/export_import', $url_token . '&' . $url_store, true); 1358 $data['href_instruction'] = $this->url->link($this->route . '/instruction', $url_token . '&' . $url_store, true); 1359 1360 $data['setup'] = $this->url->link($this->route . '/setupExtension', $url_token, true); 1361 $data['install'] = $this->url->link($this->route . '/installExtension', $url_token, true); 1362 1363 if (VERSION >= '3.0.0.0') { 1364 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=module', true); 1365 } elseif (VERSION >= '2.3.0.0') { 1366 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=module', true); 1367 } else { 1368 $data['cancel'] = $this->url->link('extension/module', $url_token, true); 1369 } 1370 1371 // Tab 1372 $data['text_dashboard'] = $this->language->get('text_dashboard'); 1373 $data['text_settings'] = $this->language->get('text_settings'); 1374 $data['text_multi_store_fields'] = $this->language->get('text_multi_store_fields'); 1375 $data['text_target_keywords'] = $this->language->get('text_target_keywords'); 1376 $data['text_export_import'] = $this->language->get('text_export_import'); 1377 $data['text_instructions'] = $this->language->get('text_instructions'); 1378 1379 // Button 1380 $data['button_cancel'] = $this->language->get('button_cancel'); 1381 $data['button_setup'] = $this->language->get('button_setup'); 1382 1383 // Text 1384 $data['text_edit'] = $this->language->get('text_edit'); 1385 $data['text_install'] = $this->language->get('text_install'); 1386 $data['text_setup'] = $this->language->get('text_setup'); 1387 $data['text_full_setup'] = $this->language->get('text_full_setup'); 1388 $data['text_custom_setup'] = $this->language->get('text_custom_setup'); 1389 $data['text_yes'] = $this->language->get('text_yes'); 1390 $data['text_no'] = $this->language->get('text_no'); 1391 $data['text_enabled'] = $this->language->get('text_enabled'); 1392 $data['text_disabled'] = $this->language->get('text_disabled'); 1393 $data['text_powered_by'] = $this->language->get('text_powered_by'); 1394 $data['text_instructions_full'] = $this->language->get('text_instructions_full'); 1395 1396 // Help 1397 $data['help_setup'] = $this->language->get('help_setup'); 1398 $data['help_full_setup'] = $this->language->get('help_full_setup'); 1399 $data['help_custom_setup'] = $this->language->get('help_custom_setup'); 1400 1401 // Notification 1402 foreach ($this->error as $key => $error) { 1403 $data['error'][$key] = $error; 1404 } 1405 1406 if (isset($this->session->data['success'])) { 1407 $data['success'] = $this->session->data['success']; 1408 unset($this->session->data['success']); 1409 } else { 1410 $data['success'] = ''; 1411 } 1412 1413 // Breadcrumbs 1414 $data['breadcrumbs'] = array(); 1415 1416 $data['breadcrumbs'][] = array( 1417 'text' => $this->language->get('text_home'), 1418 'href' => $this->url->link('common/dashboard', $url_token, true) 1419 ); 1420 1421 if (VERSION >= '3.0.0.0') { 1422 $data['breadcrumbs'][] = array( 1423 'text' => $this->language->get('text_modules'), 1424 'href' => $this->url->link('marketplace/extension', $url_token . '&type=module', true) 1425 ); 1426 } elseif (VERSION >= '2.3.0.0') { 1427 $data['breadcrumbs'][] = array( 1428 'text' => $this->language->get('text_modules'), 1429 'href' => $this->url->link('extension/extension', $url_token . '&type=module', true) 1430 ); 1431 } else { 1432 $data['breadcrumbs'][] = array( 1433 'text' => $this->language->get('text_modules'), 1434 'href' => $this->url->link('extension/module', $url_token, true) 1435 ); 1436 } 1437 1438 $data['breadcrumbs'][] = array( 1439 'text' => $this->language->get('text_seo_module'), 1440 'href' => $this->url->link($this->route, $url_token . '&' . $url_store, true) 1441 ); 1442 1443 $data['header'] = $this->load->controller('common/header'); 1444 $data['column_left'] = $this->load->controller('common/column_left'); 1445 $data['footer'] = $this->load->controller('common/footer'); 1446 1447 if ($data['installed']) { 1448 $this->response->setOutput($this->load->view($this->route . '/instruction', $data)); 1449 } else { 1450 // Setting 1451 $this->config->load($this->config_file); 1452 $config_feature_setting = ($this->config->get($this->codename . '_feature_setting')) ? $this->config->get($this->codename . '_feature_setting') : array(); 1453 1454 $data['features'] = array(); 1455 1456 foreach ($config_feature_setting as $feature) { 1457 if (substr($feature['name'], 0, strlen('text_')) == 'text_') { 1458 $feature['name'] = $this->language->get($feature['name']); 1459 } 1460 1461 $data['features'][] = $feature; 1462 } 1463 1464 $this->response->setOutput($this->load->view($this->route . '/install', $data)); 1465 } 1466 } 1467 1468 public function save() { 1469 $this->load->language($this->route); 1470 1471 $this->load->model($this->route); 1472 $this->load->model('setting/setting'); 1473 1474 if (isset($this->request->get['store_id'])) { 1475 $store_id = $this->request->get['store_id']; 1476 } else { 1477 $store_id = 0; 1478 } 1479 1480 if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 1481 $old_setting = $this->model_setting_setting->getSetting('module_' . $this->codename, $store_id); 1482 1483 $new_setting = array_replace_recursive($old_setting, $this->request->post); 1484 1485 if (isset($this->request->post['module_' . $this->codename . '_status']) && $this->request->post['module_' . $this->codename . '_status']) { 1486 $new_setting['module_' . $this->codename . '_setting']['control_element']['enable_status']['implemented'] = 1; 1487 } 1488 1489 if (isset($this->request->post['htaccess'])) { 1490 $this->{'model_extension_module_' . $this->codename}->saveFileData('htaccess', $this->request->post['htaccess']); 1491 1492 if (isset($this->request->post['htaccess']['status']) && $this->request->post['htaccess']['status']) { 1493 $new_setting['module_' . $this->codename . '_setting']['control_element']['enable_htaccess']['implemented'] = 1; 1494 } 1495 } 1496 1497 if (isset($this->request->post['robots'])) { 1498 $this->{'model_extension_module_' . $this->codename}->saveFileData('robots', $this->request->post['robots']); 1499 1500 if (isset($this->request->post['robots']['status']) && $this->request->post['robots']['status']) { 1501 $new_setting['module_' . $this->codename . '_setting']['control_element']['enable_robots']['implemented'] = 1; 1502 } 1503 } 1504 1505 $this->model_setting_setting->editSetting('module_' . $this->codename, $new_setting, $store_id); 1506 1507 $save_data = array( 1508 'old_setting' => $old_setting, 1509 'new_setting' => $new_setting, 1510 'store_id' => $store_id 1511 ); 1512 1513 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1514 1515 foreach ($installed_seo_extensions as $installed_seo_extension) { 1516 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/save', $save_data); 1517 } 1518 1519 $data['success'] = $this->language->get('success_save'); 1520 } 1521 1522 $data['error'] = $this->error; 1523 1524 $this->response->setOutput(json_encode($data)); 1525 } 1526 1527 public function installControlExtension() { 1528 $this->load->language($this->route); 1529 1530 $data = array(); 1531 1532 if (isset($this->request->get['extension_code']) && $this->validate()) { 1533 $extension_code = $this->request->get['extension_code']; 1534 1535 if ($extension_code) { 1536 $info = $this->load->controller('extension/' . $this->codename . '/' . $extension_code . '/control_install_extension'); 1537 if ($info) $data = $info; 1538 } 1539 } 1540 1541 $this->response->setOutput(json_encode($data)); 1542 } 1543 1544 public function executeControlElement() { 1545 $this->load->language($this->route); 1546 1547 $this->load->model($this->route); 1548 $this->load->model('setting/setting'); 1549 1550 if (isset($this->request->get['store_id'])) { 1551 $store_id = $this->request->get['store_id']; 1552 } else { 1553 $store_id = 0; 1554 } 1555 1556 if (isset($this->request->get['extension_code']) && isset($this->request->get['element_code']) && $this->validate()) { 1557 $extension_code = $this->request->get['extension_code']; 1558 $element_code = $this->request->get['element_code']; 1559 1560 if ($extension_code && $element_code) { 1561 $control_element_data = array( 1562 'store_id' => $store_id, 1563 'element_code' => $element_code 1564 ); 1565 1566 $info = $this->load->controller('extension/' . $this->codename . '/' . $extension_code . '/control_execute_element', $control_element_data); 1567 1568 if (isset($info['error'])) { 1569 $this->error = array_replace_recursive($this->error, $info['error']); 1570 } 1571 } 1572 } 1573 1574 if (!$this->error) { 1575 $data['success'] = $this->language->get('success_execute'); 1576 } 1577 1578 $data['error'] = $this->error; 1579 1580 $this->response->setOutput(json_encode($data)); 1581 } 1582 1583 public function createDefaultTargetElements() { 1584 $this->load->language($this->route); 1585 1586 $this->load->model($this->route); 1587 1588 if (isset($this->request->get['store_id'])) { 1589 $store_id = $this->request->get['store_id']; 1590 } else { 1591 $store_id = 0; 1592 } 1593 1594 $this->config->load($this->config_file); 1595 $config_setting = ($this->config->get($this->codename . '_setting')) ? $this->config->get($this->codename . '_setting') : array(); 1596 1597 if ($this->validate()) { 1598 $this->{'model_extension_module_' . $this->codename}->createDefaultTargetElements($config_setting['default_target_keywords'], $store_id); 1599 1600 $data['success'] = $this->language->get('success_create_default_target_keywords'); 1601 } 1602 1603 $data['error'] = $this->error; 1604 1605 $this->response->setOutput(json_encode($data)); 1606 } 1607 1608 public function addTargetElement() { 1609 $this->load->language($this->route); 1610 1611 $this->load->model($this->route); 1612 1613 if (isset($this->request->get['store_id'])) { 1614 $store_id = $this->request->get['store_id']; 1615 } else { 1616 $store_id = 0; 1617 } 1618 1619 if (isset($this->request->post['target_element']) && $this->validateAddTargetElement()) { 1620 $target_element_data = $this->request->post['target_element']; 1621 $target_element_data['store_id'] = $store_id; 1622 1623 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1624 1625 foreach ($installed_seo_extensions as $installed_seo_extension) { 1626 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/add_target_element', $target_element_data); 1627 } 1628 1629 $data['success'] = $this->language->get('success_add_target_keyword'); 1630 } 1631 1632 $data['error'] = $this->error; 1633 1634 $this->response->setOutput(json_encode($data)); 1635 } 1636 1637 public function editTargetElement() { 1638 $this->load->language($this->route); 1639 1640 $this->load->model($this->route); 1641 1642 if (isset($this->request->get['store_id'])) { 1643 $store_id = $this->request->get['store_id']; 1644 } else { 1645 $store_id = 0; 1646 } 1647 1648 if (isset($this->request->post['route']) && isset($this->request->post['language_id']) && isset($this->request->post['target_keyword']) && $this->validateEditTargetElement()) { 1649 $target_element_data = array( 1650 'route' => $this->request->post['route'], 1651 'store_id' => $store_id, 1652 'language_id' => $this->request->post['language_id'], 1653 'target_keyword' => $this->request->post['target_keyword'] 1654 ); 1655 1656 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1657 1658 foreach ($installed_seo_extensions as $installed_seo_extension) { 1659 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/edit_target_element', $target_element_data); 1660 } 1661 } 1662 1663 $data['error'] = $this->error; 1664 1665 $this->response->setOutput(json_encode($data)); 1666 } 1667 1668 public function deleteTargetElements() { 1669 $this->load->language($this->route); 1670 1671 $this->load->model($this->route); 1672 1673 if (isset($this->request->get['store_id'])) { 1674 $store_id = $this->request->get['store_id']; 1675 } else { 1676 $store_id = 0; 1677 } 1678 1679 if (isset($this->request->post['selected']) && $this->validate()) { 1680 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1681 1682 foreach ($this->request->post['selected'] as $route) { 1683 $target_element_data = array( 1684 'route' => $route, 1685 'store_id' => $store_id 1686 ); 1687 1688 foreach ($installed_seo_extensions as $installed_seo_extension) { 1689 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/delete_target_element', $target_element_data); 1690 } 1691 } 1692 1693 $data['success'] = $this->language->get('success_delete_target_keywords'); 1694 } 1695 1696 $data['error'] = $this->error; 1697 1698 $this->response->setOutput(json_encode($data)); 1699 } 1700 1701 public function export() { 1702 $this->load->language($this->route); 1703 1704 $this->load->model($this->route); 1705 $this->load->model('setting/setting'); 1706 $this->load->model('localisation/language'); 1707 1708 if (isset($this->request->post['store_id'])) { 1709 $store_id = $this->request->post['store_id']; 1710 } else { 1711 $store_id = 0; 1712 } 1713 1714 if (isset($this->request->post['sheet_codes'])) { 1715 $sheet_codes = $this->request->post['sheet_codes']; 1716 } else { 1717 $sheet_codes = array(); 1718 } 1719 1720 // Setting 1721 $target_setting = array(); 1722 1723 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1724 1725 foreach ($installed_seo_extensions as $installed_seo_extension) { 1726 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/target_config'); 1727 if ($info) $target_setting = array_replace_recursive($target_setting, $info); 1728 } 1729 1730 $sheets = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($target_setting['sheet'], 'sort_order'); 1731 1732 $store = $this->{'model_extension_module_' . $this->codename}->getStore($store_id); 1733 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 1734 1735 if (file_exists(DIR_SYSTEM . 'library/d_excel_reader_writer.php')) { 1736 $d_excel_reader_writer = new d_excel_reader_writer(); 1737 1738 foreach ($sheet_codes as $sheet_code) { 1739 if ($sheet_code == 'target_keyword') { 1740 // Set the column widths 1741 $column_widths = array(max(strlen('route') + 4, 30) + 1); 1742 1743 foreach ($languages as $language) { 1744 $column_widths[] = max(strlen('target_keyword') + 4, 30) + 1; 1745 } 1746 1747 $d_excel_reader_writer->setColumnWidths($column_widths); 1748 1749 // The heading row and column styles 1750 $header = array('route' => 'string'); 1751 1752 foreach ($languages as $language) { 1753 $header['target_keyword' . '(' . $language['code'] . ')'] = 'string'; 1754 } 1755 1756 $d_excel_reader_writer->writeSheetHeader($sheet_code, $header); 1757 1758 // The actual custom pages data 1759 foreach ($sheets as $sheet) { 1760 $export_data = array( 1761 'store_id' => $store_id, 1762 'sheet_code' => $sheet['code'] 1763 ); 1764 1765 $target_elements = array(); 1766 1767 foreach ($installed_seo_extensions as $installed_seo_extension) { 1768 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/export_target_elements', $export_data); 1769 if ($info) $target_elements = array_replace_recursive($target_elements, $info); 1770 } 1771 1772 foreach ($target_elements as $route => $target_element) { 1773 $data = array(html_entity_decode($target_element['route'], ENT_QUOTES,'UTF-8')); 1774 1775 foreach ($languages as $language) { 1776 if (isset($target_element['target_keyword'][$language['language_id']])) { 1777 $data[] = html_entity_decode($target_element['target_keyword'][$language['language_id']], ENT_QUOTES, 'UTF-8'); 1778 } else { 1779 $data[] = ''; 1780 } 1781 } 1782 1783 $d_excel_reader_writer->writeSheetRow($sheet_code, $data); 1784 } 1785 } 1786 } 1787 } 1788 1789 $filename = $this->codename . ' ' . $store['name'] . ' ' . date('Y-m-d') . '.xlsx'; 1790 1791 $this->response->addHeader('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 1792 $this->response->addHeader('Content-Disposition: attachment;filename="' . $filename . '"'); 1793 $this->response->addHeader('Cache-Control: max-age=0'); 1794 1795 $this->response->setOutput($d_excel_reader_writer->writeToString()); 1796 } 1797 } 1798 1799 public function import() { 1800 $this->load->language($this->route); 1801 1802 $this->load->model($this->route); 1803 $this->load->model('setting/setting'); 1804 $this->load->model('localisation/language'); 1805 1806 if (isset($this->request->post['store_id'])) { 1807 $store_id = $this->request->post['store_id']; 1808 } else { 1809 $store_id = 0; 1810 } 1811 1812 // Setting 1813 $target_setting = array(); 1814 1815 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1816 1817 foreach ($installed_seo_extensions as $installed_seo_extension) { 1818 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/target_config'); 1819 if ($info) $target_setting = array_replace_recursive($target_setting, $info); 1820 } 1821 1822 $sheets = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($target_setting['sheet'], 'sort_order'); 1823 1824 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 1825 1826 if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validateImport())) { 1827 if ((isset($this->request->files['upload'])) && (is_uploaded_file($this->request->files['upload']['tmp_name'])) && file_exists(DIR_SYSTEM . 'library/d_excel_reader_writer.php')) { 1828 $filepath = $this->request->files['upload']['tmp_name']; 1829 $filename = $this->request->files['upload']['name']; 1830 $mimetype = $this->request->files['upload']['type']; 1831 1832 $d_excel_reader_writer = new d_excel_reader_writer(); 1833 1834 // parse uploaded spreadsheet file 1835 $reader = $d_excel_reader_writer->readFromFile($filepath, $filename, $mimetype); 1836 1837 // get worksheet if there 1838 $sheet_codes = $reader->Sheets(); 1839 1840 // get worksheet if there 1841 foreach ($sheet_codes as $sheet_index => $sheet_code) { 1842 if ($sheet_code == 'target_keyword') { 1843 $reader->ChangeSheet($sheet_index); 1844 1845 $elements = array(); 1846 $header = array(); 1847 1848 foreach ($reader as $row => $row_data) { 1849 if (!$header) { 1850 $header = $row_data; 1851 1852 continue; 1853 } 1854 1855 foreach ($header as $col => $col_data) { 1856 $cell = isset($row_data[$col]) ? $row_data[$col] : ''; 1857 $elements[$row][$header[$col]] = htmlspecialchars($cell); 1858 } 1859 } 1860 1861 $target_elements = array(); 1862 1863 foreach ($elements as $element) { 1864 $target_element = array(); 1865 1866 if (isset($element['route']) && $element['route']) { 1867 $target_element['route'] = $element['route']; 1868 } else { 1869 continue; 1870 } 1871 1872 $target_element['target_keyword'] = array(); 1873 1874 foreach ($languages as $language) { 1875 if (isset($element['target_keyword' . '(' . $language['code'] . ')'])) { 1876 $target_element['target_keyword'][$language['language_id']] = $element['target_keyword' . '(' . $language['code'] . ')']; 1877 } 1878 } 1879 1880 $target_elements[] = $target_element; 1881 } 1882 1883 $import_data = array( 1884 'store_id' => $store_id, 1885 'target_elements' => $target_elements 1886 ); 1887 1888 foreach ($installed_seo_extensions as $installed_seo_extension) { 1889 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/import_target_elements', $import_data); 1890 1891 if (isset($info['error'])) { 1892 $this->error = array_replace_recursive($this->error, $info['error']); 1893 } 1894 } 1895 } 1896 } 1897 } 1898 } 1899 1900 $data['error'] = $this->error; 1901 1902 if (!$this->error) { 1903 $data['success'] = $this->language->get('success_import'); 1904 } 1905 1906 $this->response->setOutput(json_encode($data)); 1907 } 1908 1909 public function setupExtension() { 1910 $this->load->model($this->route); 1911 1912 $seo_extensions = $this->{'model_extension_module_' . $this->codename}->getSEOExtensions(); 1913 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1914 1915 // Install SEO Modules 1916 foreach ($seo_extensions as $seo_extension) { 1917 if (!in_array($seo_extension, $installed_seo_extensions)) { 1918 $info = $this->load->controller('extension/' . $this->codename . '/' . $seo_extension . '/control_install_extension'); 1919 1920 if (isset($info['error'])) { 1921 $this->error = array_replace_recursive($this->error, $info['error']); 1922 } 1923 } 1924 } 1925 1926 if (!$this->error) { 1927 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 1928 1929 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 1930 1931 foreach ($stores as $store) { 1932 $control_elements = array(); 1933 1934 foreach ($installed_seo_extensions as $installed_seo_extension) { 1935 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/control_elements', array('store_id' => $store['store_id'])); 1936 if ($info) $control_elements = array_merge($control_elements, $info); 1937 } 1938 1939 $control_elements = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($control_elements, 'weight', SORT_DESC); 1940 1941 foreach ($control_elements as $control_element) { 1942 if (isset($control_element['extension_code']) && isset($control_element['element_code']) && isset($control_element['name']) && isset($control_element['description']) && isset($control_element['confirm']) && isset($control_element['implemented'])) { 1943 if ($control_element['extension_code'] && $control_element['element_code']) { 1944 $control_element_data = array( 1945 'store_id' => $store['store_id'], 1946 'element_code' => $control_element['element_code'] 1947 ); 1948 1949 $info = $this->load->controller('extension/' . $this->codename . '/' . $control_element['extension_code'] . '/control_execute_element', $control_element_data); 1950 1951 if (isset($info['error'])) { 1952 $this->error = array_replace_recursive($this->error, $info['error']); 1953 } 1954 } 1955 } 1956 } 1957 } 1958 } 1959 1960 $this->load->language($this->route); 1961 1962 if (!$this->error) { 1963 $data['success'] = $this->language->get('success_install'); 1964 } 1965 1966 $data['error'] = $this->error; 1967 1968 $this->response->setOutput(json_encode($data)); 1969 } 1970 1971 public function installExtension() { 1972 $this->load->language($this->route); 1973 1974 $this->load->model($this->route); 1975 $this->load->model('setting/setting'); 1976 $this->load->model('user/user_group'); 1977 1978 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 1979 $server = HTTPS_SERVER; 1980 $catalog = HTTPS_CATALOG; 1981 } else { 1982 $server = HTTP_SERVER; 1983 $catalog = HTTP_CATALOG; 1984 } 1985 1986 $catalog_url_info = $this->{'model_extension_module_' . $this->codename}->getURLInfo($catalog); 1987 1988 if ($this->validateInstall()) { 1989 $this->{'model_extension_module_' . $this->codename}->installExtension(); 1990 1991 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_event_manager.php')) { 1992 $this->load->model('extension/module/d_event_manager'); 1993 1994 $this->model_extension_module_d_event_manager->installCompatibility(); 1995 $this->model_extension_module_d_event_manager->deleteEvent($this->codename); 1996 1997 if (VERSION >= '2.3.0.0') { 1998 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/common/column_left/before', 'extension/module/d_seo_module/column_left_before'); 1999 } else { 2000 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/common/menu/after', 'extension/module/d_seo_module/menu_after'); 2001 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/common/dashboard/after', 'extension/module/d_seo_module/dashboard_after'); 2002 } 2003 2004 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/common/header/after', 'extension/module/d_seo_module/header_after'); 2005 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/localisation/language/addLanguage/after', 'extension/module/d_seo_module/language_add_language_after'); 2006 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/localisation/language/editLanguage/after', 'extension/module/d_seo_module/language_edit_language_after'); 2007 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/localisation/language/deleteLanguage/after', 'extension/module/d_seo_module/language_delete_language_after'); 2008 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/setting/setting/after', 'extension/module/d_seo_module/setting_after'); 2009 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/setting/store_form/after', 'extension/module/d_seo_module/store_form_after'); 2010 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/setting/store/addStore/after', 'extension/module/d_seo_module/store_add_store_after'); 2011 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/setting/store/editStore/after', 'extension/module/d_seo_module/store_edit_store_after'); 2012 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/setting/store/deleteStore/after', 'extension/module/d_seo_module/store_delete_store_after'); 2013 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/catalog/category_form/after', 'extension/module/d_seo_module/category_form_after'); 2014 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/category/addCategory/after', 'extension/module/d_seo_module/category_add_category_after'); 2015 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/category/editCategory/after', 'extension/module/d_seo_module/category_edit_category_after'); 2016 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/category/deleteCategory/after', 'extension/module/d_seo_module/category_delete_category_after'); 2017 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/catalog/product_form/after', 'extension/module/d_seo_module/product_form_after'); 2018 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/product/addProduct/after', 'extension/module/d_seo_module/product_add_product_after'); 2019 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/product/editProduct/after', 'extension/module/d_seo_module/product_edit_product_after'); 2020 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/product/deleteProduct/after', 'extension/module/d_seo_module/product_delete_product_after'); 2021 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/catalog/manufacturer_form/after', 'extension/module/d_seo_module/manufacturer_form_after'); 2022 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/manufacturer/addManufacturer/after', 'extension/module/d_seo_module/manufacturer_add_manufacturer_after'); 2023 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/manufacturer/editManufacturer/after', 'extension/module/d_seo_module/manufacturer_edit_manufacturer_after'); 2024 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/manufacturer/deleteManufacturer/after', 'extension/module/d_seo_module/manufacturer_delete_manufacturer_after'); 2025 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/view/catalog/information_form/after', 'extension/module/d_seo_module/information_form_after'); 2026 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/information/addInformation/after', 'extension/module/d_seo_module/information_add_information_after'); 2027 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/information/editInformation/after', 'extension/module/d_seo_module/information_edit_information_after'); 2028 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'admin/model/catalog/information/deleteInformation/after', 'extension/module/d_seo_module/information_delete_information_after'); 2029 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/common/header/before', 'extension/module/d_seo_module/header_before'); 2030 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/common/header/after', 'extension/module/d_seo_module/header_after'); 2031 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/common/footer/before', 'extension/module/d_seo_module/footer_before'); 2032 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/common/footer/after', 'extension/module/d_seo_module/footer_after'); 2033 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/common/home/before', 'extension/module/d_seo_module/home_before'); 2034 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/common/home/after', 'extension/module/d_seo_module/home_after'); 2035 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/category/before', 'extension/module/d_seo_module/category_before'); 2036 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/category/after', 'extension/module/d_seo_module/category_after'); 2037 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/category/getCategory/after', 'extension/module/d_seo_module/category_get_category_after'); 2038 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/category/getCategories/after', 'extension/module/d_seo_module/category_get_categories_after'); 2039 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/product/before', 'extension/module/d_seo_module/product_before'); 2040 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/product/after', 'extension/module/d_seo_module/product_after'); 2041 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/product/getProduct/after', 'extension/module/d_seo_module/product_get_product_after'); 2042 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/product/getProducts/after', 'extension/module/d_seo_module/product_get_products_after'); 2043 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/manufacturer_list/before', 'extension/module/d_seo_module/manufacturer_list_before'); 2044 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/manufacturer_list/after', 'extension/module/d_seo_module/manufacturer_list_after'); 2045 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/manufacturer_info/before', 'extension/module/d_seo_module/manufacturer_info_before'); 2046 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/manufacturer_info/after', 'extension/module/d_seo_module/manufacturer_info_after'); 2047 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/manufacturer/getManufacturer/after', 'extension/module/d_seo_module/manufacturer_get_manufacturer_after'); 2048 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/manufacturer/getManufacturers/after', 'extension/module/d_seo_module/manufacturer_get_manufacturers_after'); 2049 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/information/information/before', 'extension/module/d_seo_module/information_before'); 2050 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/information/information/after', 'extension/module/d_seo_module/information_after'); 2051 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/information/getInformation/after', 'extension/module/d_seo_module/information_get_information_after'); 2052 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/model/catalog/information/getInformations/after', 'extension/module/d_seo_module/information_get_informations_after'); 2053 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/search/before', 'extension/module/d_seo_module/search_before'); 2054 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/search/after', 'extension/module/d_seo_module/search_after'); 2055 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/special/before', 'extension/module/d_seo_module/special_before'); 2056 $this->model_extension_module_d_event_manager->addEvent($this->codename, 'catalog/view/product/special/after', 'extension/module/d_seo_module/special_after'); 2057 } 2058 2059 if (file_exists(DIR_APPLICATION . 'model/extension/d_opencart_patch/modification.php')) { 2060 $this->load->model('extension/d_opencart_patch/modification'); 2061 2062 $this->model_extension_d_opencart_patch_modification->setModification($this->codename . '.xml', 1); 2063 $this->model_extension_d_opencart_patch_modification->refreshCache(); 2064 } 2065 2066 if (file_exists(DIR_APPLICATION . 'model/extension/d_opencart_patch/extension.php')) { 2067 $this->load->model('extension/d_opencart_patch/extension'); 2068 $this->load->model('extension/d_opencart_patch/user'); 2069 2070 $user_group_id = $this->model_extension_d_opencart_patch_user->getGroupId(); 2071 2072 // Install SEO Module 2073 if (!$this->model_extension_d_opencart_patch_extension->isInstalled('d_seo_module')) { 2074 $this->model_extension_d_opencart_patch_extension->install('module', 'd_seo_module'); 2075 2076 $this->model_user_user_group->addPermission($user_group_id, 'access', 'extension/module/d_seo_module'); 2077 $this->model_user_user_group->addPermission($user_group_id, 'modify', 'extension/module/d_seo_module'); 2078 } 2079 2080 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 2081 2082 foreach ($stores as $store) { 2083 $setting = $this->model_setting_setting->getSetting('module_' . $this->codename, $store['store_id']); 2084 2085 $setting['module_' . $this->codename . '_status'] = 1; 2086 $setting['module_' . $this->codename . '_setting']['control_element']['enable_status']['implemented'] = 1; 2087 $setting['module_' . $this->codename . '_setting']['control_element']['enable_seo_url']['implemented'] = 1; 2088 $setting['module_' . $this->codename . '_setting']['control_element']['enable_htaccess']['implemented'] = 1; 2089 $setting['module_' . $this->codename . '_setting']['control_element']['enable_robots']['implemented'] = 1; 2090 2091 $this->model_setting_setting->editSetting('module_' . $this->codename, $setting, $store['store_id']); 2092 } 2093 2094 $store_setting = $this->model_setting_setting->getSetting('config'); 2095 $store_setting['config_seo_url'] = 1; 2096 2097 $this->model_setting_setting->editSetting('config', $store_setting); 2098 2099 $this->config->load($this->config_file); 2100 $config_setting = ($this->config->get($this->codename . '_setting')) ? $this->config->get($this->codename . '_setting') : array(); 2101 2102 $htaccess = $this->{'model_extension_module_' . $this->codename}->getFileData('htaccess'); 2103 2104 if (!$htaccess['status'] && !trim($htaccess['text'])) { 2105 $htaccess['text'] = str_replace('[catalog_url_path]', $catalog_url_info['path'], $config_setting['default_htaccess']); 2106 } 2107 2108 $htaccess['status'] = 1; 2109 2110 $this->{'model_extension_module_' . $this->codename}->saveFileData('htaccess', $htaccess); 2111 2112 $robots = $this->{'model_extension_module_' . $this->codename}->getFileData('robots'); 2113 2114 if (!$robots['status'] && !trim($robots['text'])) { 2115 $robots['text'] = str_replace('[catalog_url]', $catalog, $config_setting['default_robots']); 2116 $robots['text'] = str_replace('[catalog_url_host]', $catalog_url_info['host'], $robots['text']); 2117 } 2118 2119 $robots['status'] = 1; 2120 2121 $this->{'model_extension_module_' . $this->codename}->saveFileData('robots', $robots); 2122 2123 // Install SEO Module Target Keyword 2124 if (!$this->model_extension_d_opencart_patch_extension->isInstalled('d_seo_module_target_keyword')) { 2125 $this->model_extension_d_opencart_patch_extension->install('dashboard', 'd_seo_module_target_keyword'); 2126 2127 $setting = array( 2128 'dashboard_d_seo_module_target_keyword_status' => true, 2129 'dashboard_d_seo_module_target_keyword_width' => 12, 2130 'dashboard_d_seo_module_target_keyword_sort_order' => 20 2131 ); 2132 2133 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 2134 2135 foreach ($stores as $store) { 2136 $setting['dashboard_d_seo_module_target_keyword_setting']['stores_id'][] = $store['store_id']; 2137 } 2138 2139 $this->model_setting_setting->editSetting('dashboard_d_seo_module_target_keyword', $setting); 2140 2141 $this->model_user_user_group->addPermission($user_group_id, 'access', 'extension/dashboard'); 2142 $this->model_user_user_group->addPermission($user_group_id, 'modify', 'extension/dashboard'); 2143 $this->model_user_user_group->addPermission($user_group_id, 'access', 'extension/dashboard/d_seo_module_target_keyword'); 2144 $this->model_user_user_group->addPermission($user_group_id, 'modify', 'extension/dashboard/d_seo_module_target_keyword'); 2145 } 2146 } 2147 2148 $data['success'] = $this->language->get('success_install'); 2149 } 2150 2151 $data['error'] = $this->error; 2152 2153 $this->response->setOutput(json_encode($data)); 2154 } 2155 2156 public function uninstallExtension() { 2157 $this->load->language($this->route); 2158 2159 $this->load->model($this->route); 2160 $this->load->model('setting/setting'); 2161 $this->load->model('user/user_group'); 2162 2163 if ($this->validateUninstall()) { 2164 $this->{'model_extension_module_' . $this->codename}->uninstallExtension(); 2165 2166 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_event_manager.php')) { 2167 $this->load->model('extension/module/d_event_manager'); 2168 2169 $this->model_extension_module_d_event_manager->deleteEvent($this->codename); 2170 } 2171 2172 if (file_exists(DIR_APPLICATION . 'model/extension/d_opencart_patch/modification.php')) { 2173 $this->load->model('extension/d_opencart_patch/modification'); 2174 2175 $this->model_extension_d_opencart_patch_modification->setModification($this->codename . '.xml', 0); 2176 $this->model_extension_d_opencart_patch_modification->refreshCache(); 2177 } 2178 2179 if (file_exists(DIR_APPLICATION . 'model/extension/d_opencart_patch/extension.php')) { 2180 $this->load->model('extension/d_opencart_patch/extension'); 2181 $this->load->model('extension/d_opencart_patch/user'); 2182 2183 $user_group_id = $this->model_extension_d_opencart_patch_user->getGroupId(); 2184 2185 // Uninstall SEO Module Target Keyword 2186 if ($this->model_extension_d_opencart_patch_extension->isInstalled('d_seo_module_target_keyword')) { 2187 $this->model_extension_d_opencart_patch_extension->uninstall('dashboard', 'd_seo_module_target_keyword'); 2188 $this->model_setting_setting->deleteSetting('dashboard_d_seo_module_target_keyword'); 2189 2190 $this->model_user_user_group->removePermission($user_group_id, 'access', 'extension/dashboard/d_seo_module_target_keyword'); 2191 $this->model_user_user_group->removePermission($user_group_id, 'modify', 'extension/dashboard/d_seo_module_target_keyword'); 2192 } 2193 } 2194 2195 $data['success'] = $this->language->get('success_uninstall'); 2196 } 2197 2198 $data['error'] = $this->error; 2199 2200 $this->response->setOutput(json_encode($data)); 2201 } 2202 2203 public function install() { 2204 if ($this->d_shopunity) { 2205 $this->load->model('extension/d_shopunity/mbooth'); 2206 2207 $this->model_extension_d_shopunity_mbooth->installDependencies($this->codename); 2208 } 2209 2210 $this->update(); 2211 } 2212 2213 public function update() { 2214 $result = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "url_target'"); 2215 2216 if ($result->rows) { 2217 $this->db->query("DROP TABLE IF EXISTS " . DB_PREFIX . "url_target"); 2218 2219 $this->uninstallExtension(); 2220 $this->installExtension(); 2221 } 2222 2223 if (file_exists(DIR_APPLICATION . 'model/extension/d_opencart_patch/modification.php')) { 2224 $this->load->model('extension/d_opencart_patch/modification'); 2225 2226 $result = $this->model_extension_d_opencart_patch_modification->getModificationByCode('d_seo_module'); 2227 2228 if ($result && (strpos($result['xml'], '$url_info = parse_url(str_replace') !== false)) { 2229 $this->model_extension_d_opencart_patch_modification->setModification($this->codename . '.xml', 0); 2230 $this->model_extension_d_opencart_patch_modification->setModification($this->codename . '.xml', 1); 2231 $this->model_extension_d_opencart_patch_modification->refreshCache(); 2232 } 2233 } 2234 } 2235 2236 public function header_after($route, $data, &$output) { 2237 $this->load->language($this->route); 2238 2239 $this->load->model($this->route); 2240 2241 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2242 $menu_items = array(); 2243 2244 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2245 2246 foreach ($installed_seo_extensions as $installed_seo_extension) { 2247 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/header_menu'); 2248 if ($info) $menu_items = array_merge($menu_items, $info); 2249 } 2250 2251 $menu_items = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($menu_items, 'sort_order'); 2252 2253 $html_menu = '<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-search fa-lg" style="margin-right: 5px"></i> <span class="hidden-xs hidden-sm hidden-md">' . $this->language->get('text_seo') . '</span> <i class="fa fa-caret-down fa-fw"></i></a><ul class="dropdown-menu dropdown-menu-right" style="min-width: 260px">'; 2254 2255 foreach ($menu_items as $menu_item) { 2256 $html_menu .= $menu_item['html']; 2257 2258 if ($menu_item != end($menu_items)) { 2259 $html_menu .= '<li class="divider"></li>'; 2260 } 2261 } 2262 2263 $html_menu .= '</ul></li>'; 2264 2265 if ($menu_items) { 2266 $html_dom = new d_simple_html_dom(); 2267 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2268 2269 if ($html_dom->find('.navbar .nav')) { 2270 $html_dom->find('.navbar .nav li', 0)->outertext .= $html_menu; 2271 2272 $output = (string)$html_dom; 2273 } 2274 } 2275 } 2276 } 2277 2278 public function column_left_before($route, &$data) { 2279 $this->load->language($this->route); 2280 2281 $this->load->model($this->route); 2282 2283 $menu_items = array(); 2284 2285 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2286 2287 foreach ($installed_seo_extensions as $installed_seo_extension) { 2288 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/menu'); 2289 if ($info) $menu_items = array_merge($menu_items, $info); 2290 } 2291 2292 $menu_items = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($menu_items, 'sort_order'); 2293 2294 if ($menu_items) { 2295 $data['menus'][] = array( 2296 'id' => 'menu-seo', 2297 'icon' => 'fa-search', 2298 'name' => $this->language->get('text_seo'), 2299 'href' => '', 2300 'children' => $menu_items 2301 ); 2302 } 2303 } 2304 2305 public function menu_after($route, $data, &$output) { 2306 $this->load->language($this->route); 2307 2308 $this->load->model($this->route); 2309 2310 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2311 $menu_items = array(); 2312 2313 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2314 2315 foreach ($installed_seo_extensions as $installed_seo_extension) { 2316 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/menu'); 2317 if ($info) $menu_items = array_merge($menu_items, $info); 2318 } 2319 2320 $menu_items = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($menu_items, 'sort_order'); 2321 2322 $html_menu = '<li id="menu-seo"><a class="parent"><i class="fa fa-search fa-fw"></i> <span>' . $this->language->get('text_seo') . '</span></a><ul>'; 2323 2324 foreach ($menu_items as $menu_item) { 2325 $html_menu .= '<li>'; 2326 2327 if ($menu_item['href']) { 2328 $html_menu .= '<a href="' . $menu_item['href'] . '">' . $menu_item['name'] . '</a>'; 2329 } else { 2330 $html_menu .= '<a class="parent">' . $menu_item['name'] . '</a>'; 2331 } 2332 2333 if (isset($menu_item['children']) && $menu_item['children']) { 2334 $html_menu .= '<ul>'; 2335 2336 foreach ($menu_item['children'] as $children_1) { 2337 $html_menu .= '<li>'; 2338 2339 if ($children_1['href']) { 2340 $html_menu .= '<a href="' . $children_1['href'] . '">' . $children_1['name'] . '</a>'; 2341 } else { 2342 $html_menu .= '<a class="parent">' . $children_1['name'] . '</a>'; 2343 } 2344 2345 if ($children_1['children']) { 2346 $html_menu .= '<ul>'; 2347 2348 foreach ($children_1['children'] as $children_2) { 2349 $html_menu .= '<li><a href="' . $children_2['href'] . '">' . $children_2['name'] . '</a></li>'; 2350 } 2351 2352 $html_menu .= '</ul>'; 2353 } 2354 2355 $html_menu .= '</li>'; 2356 } 2357 2358 $html_menu .= '</ul>'; 2359 } 2360 2361 $html_menu .= '</li>'; 2362 } 2363 2364 $html_menu .= '</ul></li>'; 2365 2366 if ($menu_items) { 2367 $html_dom = new d_simple_html_dom(); 2368 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2369 2370 $html_dom->find('#reports', 0)->outertext .= $html_menu; 2371 2372 $output = (string)$html_dom; 2373 } 2374 } 2375 } 2376 2377 public function dashboard_after($route, $data, &$output) { 2378 $this->load->language($this->route); 2379 2380 $this->load->model($this->route); 2381 2382 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2383 $dashboards = array(); 2384 2385 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2386 2387 foreach ($installed_seo_extensions as $installed_seo_extension) { 2388 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/dashboard'); 2389 if ($info) $dashboards = array_merge($dashboards, $info); 2390 } 2391 2392 $dashboards = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($dashboards, 'sort_order'); 2393 2394 // Split the array so the columns width is not more than 12 on each row. 2395 $width = 0; 2396 $column = array(); 2397 $rows = array(); 2398 2399 foreach ($dashboards as $dashboard) { 2400 $column[] = $dashboard; 2401 2402 $width = ($width + $dashboard['width']); 2403 2404 if ($width >= 12) { 2405 $rows[] = $column; 2406 2407 $width = 0; 2408 $column = array(); 2409 } 2410 } 2411 2412 $html_dashboard = ''; 2413 2414 foreach ($rows as $row) { 2415 $html_dashboard .= '<div class="row">'; 2416 2417 foreach ($row as $dashboard_1) { 2418 $class = 'col-lg-' . $dashboard_1['width'] . ' col-md-3 col-sm-6'; 2419 2420 foreach ($row as $dashboard_2) { 2421 if ($dashboard_2['width'] > 3) { 2422 $class = 'col-lg-' . $dashboard_1['width'] . ' col-md-12 col-sm-12'; 2423 } 2424 } 2425 2426 $html_dashboard .= '<div class="' . $class . '">' . $dashboard_1['html'] . '</div>'; 2427 } 2428 2429 $html_dashboard .= '</div>'; 2430 } 2431 2432 if ($html_dashboard) { 2433 $html_dom = new d_simple_html_dom(); 2434 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2435 2436 $html_dom->find('#content .container-fluid', 1)->innertext .= $html_dashboard; 2437 2438 $output = (string)$html_dom; 2439 } 2440 } 2441 } 2442 2443 public function language_add_language_after($route, $data, $output) { 2444 $this->load->model($this->route); 2445 2446 $data = $data[0]; 2447 $data['language_id'] = $output; 2448 2449 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2450 2451 foreach ($installed_seo_extensions as $installed_seo_extension) { 2452 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/language_add_language', $data); 2453 } 2454 } 2455 2456 public function language_edit_language_after($route, $data, $output) { 2457 $this->load->model($this->route); 2458 2459 $language_id = $data[0]; 2460 $data = $data[1]; 2461 $data['language_id'] = $language_id; 2462 2463 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2464 2465 foreach ($installed_seo_extensions as $installed_seo_extension) { 2466 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/language_edit_language', $data); 2467 } 2468 } 2469 2470 public function language_delete_language_after($route, $data, $output) { 2471 $this->load->model($this->route); 2472 2473 $data['language_id'] = $data[0]; 2474 2475 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2476 2477 foreach ($installed_seo_extensions as $installed_seo_extension) { 2478 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/language_delete_language', $data); 2479 } 2480 } 2481 2482 public function setting_after($route, $data, &$output) { 2483 $this->load->language($this->route); 2484 2485 $this->load->model($this->route); 2486 2487 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2488 $html_tab_general = ''; 2489 $html_tab_general_language = array(); 2490 $html_tab_store = ''; 2491 $html_tab_local = ''; 2492 $html_tab_option = ''; 2493 $html_style = ''; 2494 $html_script = ''; 2495 2496 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2497 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 2498 2499 foreach ($installed_seo_extensions as $installed_seo_extension) { 2500 $html_tab_general .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_tab_general'); 2501 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_tab_general_language'); 2502 2503 foreach ($languages as $language) { 2504 if (!isset($html_tab_general_language[$language['language_id']])) $html_tab_general_language[$language['language_id']] = ''; 2505 2506 if (isset($info[$language['language_id']])) { 2507 $html_tab_general_language[$language['language_id']] .= $info[$language['language_id']]; 2508 } 2509 } 2510 2511 $html_tab_store .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_tab_store'); 2512 $html_tab_local .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_tab_local'); 2513 $html_tab_option .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_tab_option'); 2514 $html_style .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_style'); 2515 $html_script .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_script'); 2516 } 2517 2518 $html_dom = new d_simple_html_dom(); 2519 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2520 2521 if ($html_tab_general) { 2522 $html_dom->find('#tab-general', 0)->innertext .= $html_tab_general; 2523 } 2524 2525 if (reset($html_tab_general_language)) { 2526 $html_languages = '<ul class="nav nav-tabs" id="language">'; 2527 2528 foreach ($languages as $language) { 2529 $html_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#language' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 2530 } 2531 2532 $html_languages .= '</ul>'; 2533 $html_languages .= '<div class="tab-language tab-content">'; 2534 2535 foreach ($languages as $language) { 2536 $html_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="language' . $language['language_id'] . '"></div>'; 2537 } 2538 2539 $html_languages .= '</div>'; 2540 2541 $html_dom->find('#tab-general', 0)->innertext = $html_languages . $html_dom->find('#tab-general', 0)->innertext; 2542 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2543 2544 foreach ($languages as $language) { 2545 $html_dom->find('#tab-general #language' . $language['language_id'], 0)->innertext .= $html_tab_general_language[$language['language_id']]; 2546 } 2547 } 2548 2549 if ($html_tab_store) { 2550 $html_dom->find('#tab-store', 0)->innertext .= $html_tab_store; 2551 } 2552 2553 if ($html_tab_local) { 2554 $html_dom->find('#tab-local', 0)->innertext .= $html_tab_local; 2555 } 2556 2557 if ($html_tab_option) { 2558 $html_dom->find('#tab-option', 0)->innertext .= $html_tab_option; 2559 } 2560 2561 if ($html_style) { 2562 $html_dom->find('#content', 0)->innertext .= $html_style; 2563 } 2564 2565 if ($html_script) { 2566 $html_dom->find('#content', 0)->innertext .= $html_script; 2567 } 2568 2569 $output = (string)$html_dom; 2570 } 2571 } 2572 2573 public function setting_validate($error) { 2574 $this->load->model($this->route); 2575 2576 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2577 2578 foreach ($installed_seo_extensions as $installed_seo_extension) { 2579 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_validate', $error); 2580 if ($info != '') $error = $info; 2581 } 2582 2583 return $error; 2584 } 2585 2586 public function setting_edit_setting() { 2587 $this->load->model($this->route); 2588 2589 $data = $this->request->post; 2590 $data['store_id'] = 0; 2591 2592 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2593 2594 foreach ($installed_seo_extensions as $installed_seo_extension) { 2595 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/setting_edit_setting', $data); 2596 } 2597 } 2598 2599 public function store_form_after($route, $data, &$output) { 2600 $this->load->language($this->route); 2601 2602 $this->load->model($this->route); 2603 2604 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2605 $html_tab_general = ''; 2606 $html_tab_general_language = array(); 2607 $html_tab_store = ''; 2608 $html_tab_local = ''; 2609 $html_tab_option = ''; 2610 $html_style = ''; 2611 $html_script = ''; 2612 2613 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2614 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 2615 2616 foreach ($installed_seo_extensions as $installed_seo_extension) { 2617 $html_tab_general .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_tab_general'); 2618 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_tab_general_language'); 2619 2620 foreach ($languages as $language) { 2621 if (!isset($html_tab_general_language[$language['language_id']])) $html_tab_general_language[$language['language_id']] = ''; 2622 2623 if (isset($info[$language['language_id']])) { 2624 $html_tab_general_language[$language['language_id']] .= $info[$language['language_id']]; 2625 } 2626 } 2627 2628 $html_tab_store .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_tab_store'); 2629 $html_tab_local .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_tab_local'); 2630 $html_tab_option .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_tab_option'); 2631 $html_style .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_style'); 2632 $html_script .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_form_script'); 2633 } 2634 2635 $html_dom = new d_simple_html_dom(); 2636 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2637 2638 if ($html_tab_general) { 2639 $html_dom->find('#tab-general', 0)->innertext .= $html_tab_general; 2640 } 2641 2642 if (reset($html_tab_general_language)) { 2643 $html_languages = '<ul class="nav nav-tabs" id="language">'; 2644 2645 foreach ($languages as $language) { 2646 $html_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#language' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 2647 } 2648 2649 $html_languages .= '</ul>'; 2650 $html_languages .= '<div class="tab-language tab-content">'; 2651 2652 foreach ($languages as $language) { 2653 $html_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="language' . $language['language_id'] . '"></div>'; 2654 } 2655 2656 $html_languages .= '</div>'; 2657 2658 $html_dom->find('#tab-general', 0)->innertext = $html_languages . $html_dom->find('#tab-general', 0)->innertext; 2659 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2660 2661 foreach ($languages as $language) { 2662 $html_dom->find('#tab-general #language' . $language['language_id'], 0)->innertext .= $html_tab_general_language[$language['language_id']]; 2663 } 2664 } 2665 2666 if ($html_tab_store) { 2667 $html_dom->find('#tab-store', 0)->innertext .= $html_tab_store; 2668 } 2669 2670 if ($html_tab_local) { 2671 $html_dom->find('#tab-local', 0)->innertext .= $html_tab_local; 2672 } 2673 2674 if ($html_tab_option) { 2675 $html_dom->find('#tab-option', 0)->innertext .= $html_tab_option; 2676 } 2677 2678 if ($html_style) { 2679 $html_dom->find('#content', 0)->innertext .= $html_style; 2680 } 2681 2682 if ($html_script) { 2683 $html_dom->find('#content', 0)->innertext .= $html_script; 2684 } 2685 2686 $output = (string)$html_dom; 2687 } 2688 } 2689 2690 public function store_validate_form($error) { 2691 $this->load->model($this->route); 2692 2693 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2694 2695 foreach ($installed_seo_extensions as $installed_seo_extension) { 2696 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_validate_form', $error); 2697 if ($info != '') $error = $info; 2698 } 2699 2700 return $error; 2701 } 2702 2703 public function store_add_store_after($route, $data, $output) { 2704 $this->load->model($this->route); 2705 2706 $data = $data[0]; 2707 $data['store_id'] = $output; 2708 2709 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2710 2711 foreach ($installed_seo_extensions as $installed_seo_extension) { 2712 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_add_store', $data); 2713 } 2714 } 2715 2716 public function store_edit_store_after($route, $data, $output) { 2717 $this->load->model($this->route); 2718 2719 $store_id = $data[0]; 2720 $data = $data[1]; 2721 $data['store_id'] = $store_id; 2722 2723 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2724 2725 foreach ($installed_seo_extensions as $installed_seo_extension) { 2726 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_edit_store', $data); 2727 } 2728 } 2729 2730 public function store_delete_store_after($route, $data, $output) { 2731 $this->load->model($this->route); 2732 2733 $data['store_id'] = $data[0]; 2734 2735 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2736 2737 foreach ($installed_seo_extensions as $installed_seo_extension) { 2738 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/store_delete_store', $data); 2739 } 2740 } 2741 2742 public function category_form_after($route, $data, &$output) { 2743 $this->load->language($this->route); 2744 2745 $this->load->model($this->route); 2746 2747 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2748 $html_tab_general = ''; 2749 $html_tab_general_language = array(); 2750 $html_tab_general_store = array(); 2751 $html_tab_general_store_language = array(); 2752 $html_tab_data = ''; 2753 $html_style = ''; 2754 $html_script = ''; 2755 2756 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2757 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 2758 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 2759 unset($stores[0]); 2760 2761 foreach ($installed_seo_extensions as $installed_seo_extension) { 2762 $html_tab_general .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_tab_general'); 2763 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_tab_general_language'); 2764 2765 foreach ($languages as $language) { 2766 if (!isset($html_tab_general_language[$language['language_id']])) $html_tab_general_language[$language['language_id']] = ''; 2767 2768 if (isset($info[$language['language_id']])) { 2769 $html_tab_general_language[$language['language_id']] .= $info[$language['language_id']]; 2770 } 2771 } 2772 2773 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_tab_general_store'); 2774 2775 foreach ($stores as $store) { 2776 if (!isset($html_tab_general_store[$store['store_id']])) $html_tab_general_store[$store['store_id']] = ''; 2777 2778 if (isset($info[$store['store_id']])) { 2779 $html_tab_general_store[$store['store_id']] .= $info[$store['store_id']]; 2780 } 2781 } 2782 2783 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_tab_general_store_language'); 2784 2785 foreach ($stores as $store) { 2786 foreach ($languages as $language) { 2787 if (!isset($html_tab_general_store_language[$store['store_id']][$language['language_id']])) $html_tab_general_store_language[$store['store_id']][$language['language_id']] = ''; 2788 2789 if (isset($info[$store['store_id']][$language['language_id']])) { 2790 $html_tab_general_store_language[$store['store_id']][$language['language_id']] .= $info[$store['store_id']][$language['language_id']]; 2791 } 2792 } 2793 } 2794 2795 $html_tab_data .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_tab_data'); 2796 $html_style .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_style'); 2797 $html_script .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_form_script'); 2798 } 2799 2800 $html_dom = new d_simple_html_dom(); 2801 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2802 2803 if ($html_tab_general) { 2804 $html_dom->find('#tab-general', 0)->innertext .= $html_tab_general; 2805 } 2806 2807 if (reset($html_tab_general_language)) { 2808 foreach ($languages as $language) { 2809 $html_dom->find('#tab-general #language' . $language['language_id'], 0)->innertext .= $html_tab_general_language[$language['language_id']]; 2810 } 2811 } 2812 2813 $html_tab_general_language = reset($html_tab_general_store_language); 2814 2815 if ((count($stores)) && (reset($html_tab_general_store) || reset($html_tab_general_language))) { 2816 $html_stores = '<ul class="nav nav-tabs" id="store">'; 2817 2818 foreach ($stores as $store) { 2819 $html_stores .= '<li' . (($store == reset($stores)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '" data-toggle="tab">' . $store['name'] . '</a></li>'; 2820 } 2821 2822 $html_stores .= '</ul>'; 2823 $html_stores .= '<div class="tab-store tab-content">'; 2824 2825 foreach ($stores as $store) { 2826 $html_store_languages = ''; 2827 2828 if (reset($html_tab_general_store_language[$store['store_id']])) { 2829 $html_store_languages = '<ul class="nav nav-tabs" id="store_' . $store['store_id'] . '_language">'; 2830 2831 foreach ($languages as $language) { 2832 $html_store_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '_language_' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 2833 } 2834 2835 $html_store_languages .= '</ul>'; 2836 $html_store_languages .= '<div class="tab-language tab-content">'; 2837 2838 foreach ($languages as $language) { 2839 $html_store_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '_language_' . $language['language_id'] . '">' . $html_tab_general_store_language[$store['store_id']][$language['language_id']] . '</div>'; 2840 } 2841 2842 $html_store_languages .= '</div>'; 2843 } 2844 2845 $html_stores .= '<div class="tab-pane' . (($store == reset($stores)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '">' . $html_tab_general_store[$store['store_id']] . $html_store_languages . '</div>'; 2846 } 2847 2848 $html_stores .= '</div>'; 2849 2850 $html_dom->find('#tab-general', 0)->innertext .= $html_stores; 2851 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2852 } 2853 2854 if ($html_tab_data) { 2855 $html_dom->find('#tab-data', 0)->innertext .= $html_tab_data; 2856 } 2857 2858 if ($html_style) { 2859 $html_dom->find('#content', 0)->innertext .= $html_style; 2860 } 2861 2862 if ($html_script) { 2863 $html_dom->find('#content', 0)->innertext .= $html_script; 2864 } 2865 2866 $output = (string)$html_dom; 2867 } 2868 } 2869 2870 public function category_validate_form($error) { 2871 $this->load->model($this->route); 2872 2873 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2874 2875 foreach ($installed_seo_extensions as $installed_seo_extension) { 2876 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_validate_form', $error); 2877 if ($info != '') $error = $info; 2878 } 2879 2880 return $error; 2881 } 2882 2883 public function category_add_category_after($route, $data, $output) { 2884 $this->load->model($this->route); 2885 2886 $data = $data[0]; 2887 $data['category_id'] = $output; 2888 2889 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2890 2891 foreach ($installed_seo_extensions as $installed_seo_extension) { 2892 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_add_category', $data); 2893 } 2894 } 2895 2896 public function category_edit_category_after($route, $data, $output) { 2897 $this->load->model($this->route); 2898 2899 $category_id = $data[0]; 2900 $data = $data[1]; 2901 $data['category_id'] = $category_id; 2902 2903 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2904 2905 foreach ($installed_seo_extensions as $installed_seo_extension) { 2906 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_edit_category', $data); 2907 } 2908 } 2909 2910 public function category_delete_category_after($route, $data, $output) { 2911 $this->load->model($this->route); 2912 2913 $data['category_id'] = $data[0]; 2914 2915 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2916 2917 foreach ($installed_seo_extensions as $installed_seo_extension) { 2918 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/category_delete_category', $data); 2919 } 2920 } 2921 2922 public function product_form_after($route, $data, &$output) { 2923 $this->load->language($this->route); 2924 2925 $this->load->model($this->route); 2926 2927 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 2928 $html_tab_general = ''; 2929 $html_tab_general_language = array(); 2930 $html_tab_general_store = array(); 2931 $html_tab_general_store_language = array(); 2932 $html_tab_data = ''; 2933 $html_tab_links = ''; 2934 $html_style = ''; 2935 $html_script = ''; 2936 2937 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 2938 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 2939 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 2940 unset($stores[0]); 2941 2942 foreach ($installed_seo_extensions as $installed_seo_extension) { 2943 $html_tab_general .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_tab_general'); 2944 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_tab_general_language'); 2945 2946 foreach ($languages as $language) { 2947 if (!isset($html_tab_general_language[$language['language_id']])) $html_tab_general_language[$language['language_id']] = ''; 2948 2949 if (isset($info[$language['language_id']])) { 2950 $html_tab_general_language[$language['language_id']] .= $info[$language['language_id']]; 2951 } 2952 } 2953 2954 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_tab_general_store'); 2955 2956 foreach ($stores as $store) { 2957 if (!isset($html_tab_general_store[$store['store_id']])) $html_tab_general_store[$store['store_id']] = ''; 2958 2959 if (isset($info[$store['store_id']])) { 2960 $html_tab_general_store[$store['store_id']] .= $info[$store['store_id']]; 2961 } 2962 } 2963 2964 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_tab_general_store_language'); 2965 2966 foreach ($stores as $store) { 2967 foreach ($languages as $language) { 2968 if (!isset($html_tab_general_store_language[$store['store_id']][$language['language_id']])) $html_tab_general_store_language[$store['store_id']][$language['language_id']] = ''; 2969 2970 if (isset($info[$store['store_id']][$language['language_id']])) { 2971 $html_tab_general_store_language[$store['store_id']][$language['language_id']] .= $info[$store['store_id']][$language['language_id']]; 2972 } 2973 } 2974 } 2975 2976 $html_tab_data .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_tab_data'); 2977 $html_tab_links .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_tab_links'); 2978 $html_style .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_style'); 2979 $html_script .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_form_script'); 2980 } 2981 2982 $html_dom = new d_simple_html_dom(); 2983 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 2984 2985 if ($html_tab_general) { 2986 $html_dom->find('#tab-general', 0)->innertext .= $html_tab_general; 2987 } 2988 2989 if (reset($html_tab_general_language)) { 2990 foreach ($languages as $language) { 2991 $html_dom->find('#tab-general #language' . $language['language_id'], 0)->innertext .= $html_tab_general_language[$language['language_id']]; 2992 } 2993 } 2994 2995 $html_tab_general_language = reset($html_tab_general_store_language); 2996 2997 if ((count($stores)) && (reset($html_tab_general_store) || reset($html_tab_general_language))) { 2998 $html_stores = '<ul class="nav nav-tabs" id="store">'; 2999 3000 foreach ($stores as $store) { 3001 $html_stores .= '<li' . (($store == reset($stores)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '" data-toggle="tab">' . $store['name'] . '</a></li>'; 3002 } 3003 3004 $html_stores .= '</ul>'; 3005 $html_stores .= '<div class="tab-store tab-content">'; 3006 3007 foreach ($stores as $store) { 3008 $html_store_languages = ''; 3009 3010 if (reset($html_tab_general_store_language[$store['store_id']])) { 3011 $html_store_languages = '<ul class="nav nav-tabs" id="store_' . $store['store_id'] . '_language">'; 3012 3013 foreach ($languages as $language) { 3014 $html_store_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '_language_' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 3015 } 3016 3017 $html_store_languages .= '</ul>'; 3018 $html_store_languages .= '<div class="tab-language tab-content">'; 3019 3020 foreach ($languages as $language) { 3021 $html_store_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '_language_' . $language['language_id'] . '">' . $html_tab_general_store_language[$store['store_id']][$language['language_id']] . '</div>'; 3022 } 3023 3024 $html_store_languages .= '</div>'; 3025 } 3026 3027 $html_stores .= '<div class="tab-pane' . (($store == reset($stores)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '">' . $html_tab_general_store[$store['store_id']] . $html_store_languages . '</div>'; 3028 } 3029 3030 $html_stores .= '</div>'; 3031 3032 $html_dom->find('#tab-general', 0)->innertext .= $html_stores; 3033 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3034 } 3035 3036 if ($html_tab_data) { 3037 $html_dom->find('#tab-data', 0)->innertext .= $html_tab_data; 3038 } 3039 3040 if ($html_tab_links) { 3041 $html_dom->find('#tab-links', 0)->innertext .= $html_tab_links; 3042 } 3043 3044 if ($html_style) { 3045 $html_dom->find('#content', 0)->innertext .= $html_style; 3046 } 3047 3048 if ($html_script) { 3049 $html_dom->find('#content', 0)->innertext .= $html_script; 3050 } 3051 3052 $output = (string)$html_dom; 3053 } 3054 } 3055 3056 public function product_validate_form($error) { 3057 $this->load->model($this->route); 3058 3059 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3060 3061 foreach ($installed_seo_extensions as $installed_seo_extension) { 3062 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_validate_form', $error); 3063 if ($info != '') $error = $info; 3064 } 3065 3066 return $error; 3067 } 3068 3069 public function product_add_product_after($route, $data, $output) { 3070 $this->load->model($this->route); 3071 3072 $data = $data[0]; 3073 $data['product_id'] = $output; 3074 3075 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3076 3077 foreach ($installed_seo_extensions as $installed_seo_extension) { 3078 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_add_product', $data); 3079 } 3080 } 3081 3082 public function product_edit_product_after($route, $data, $output) { 3083 $this->load->model($this->route); 3084 3085 $product_id = $data[0]; 3086 $data = $data[1]; 3087 $data['product_id'] = $product_id; 3088 3089 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3090 3091 foreach ($installed_seo_extensions as $installed_seo_extension) { 3092 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_edit_product', $data); 3093 } 3094 } 3095 3096 public function product_delete_product_after($route, $data, $output) { 3097 $this->load->model($this->route); 3098 3099 $data['product_id'] = $data[0]; 3100 3101 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3102 3103 foreach ($installed_seo_extensions as $installed_seo_extension) { 3104 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/product_delete_product', $data); 3105 } 3106 } 3107 3108 public function manufacturer_form_after($route, $data, &$output) { 3109 $this->load->language($this->route); 3110 3111 $this->load->model($this->route); 3112 3113 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 3114 $html_tab_general = ''; 3115 $html_tab_general_language = array(); 3116 $html_tab_general_store = array(); 3117 $html_tab_general_store_language = array(); 3118 $html_tab_data = ''; 3119 $html_style = ''; 3120 $html_script = ''; 3121 3122 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3123 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 3124 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 3125 unset($stores[0]); 3126 3127 foreach ($installed_seo_extensions as $installed_seo_extension) { 3128 $html_tab_general .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_tab_general'); 3129 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_tab_general_language'); 3130 3131 foreach ($languages as $language) { 3132 if (!isset($html_tab_general_language[$language['language_id']])) $html_tab_general_language[$language['language_id']] = ''; 3133 3134 if (isset($info[$language['language_id']])) { 3135 $html_tab_general_language[$language['language_id']] .= $info[$language['language_id']]; 3136 } 3137 } 3138 3139 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_tab_general_store'); 3140 3141 foreach ($stores as $store) { 3142 if (!isset($html_tab_general_store[$store['store_id']])) $html_tab_general_store[$store['store_id']] = ''; 3143 3144 if (isset($info[$store['store_id']])) { 3145 $html_tab_general_store[$store['store_id']] .= $info[$store['store_id']]; 3146 } 3147 } 3148 3149 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_tab_general_store_language'); 3150 3151 foreach ($stores as $store) { 3152 foreach ($languages as $language) { 3153 if (!isset($html_tab_general_store_language[$store['store_id']][$language['language_id']])) $html_tab_general_store_language[$store['store_id']][$language['language_id']] = ''; 3154 3155 if (isset($info[$store['store_id']][$language['language_id']])) { 3156 $html_tab_general_store_language[$store['store_id']][$language['language_id']] .= $info[$store['store_id']][$language['language_id']]; 3157 } 3158 } 3159 } 3160 3161 $html_tab_data .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_tab_data'); 3162 $html_style .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_style'); 3163 $html_script .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_form_script'); 3164 } 3165 3166 $html_dom = new d_simple_html_dom(); 3167 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3168 3169 if (VERSION >= '3.0.0.0') { 3170 $html_manufacturer_name = $html_dom->find('#form-manufacturer #tab-general .form-group', 0)->outertext; 3171 $html_dom->find('#form-manufacturer #tab-general .form-group', 0)->outertext = ''; 3172 $html_manufacturer_data = $html_dom->find('#form-manufacturer #tab-general', 0)->innertext; 3173 $html_dom->find('#form-manufacturer #tab-general', 0)->innertext = $html_manufacturer_name; 3174 $html_dom->find('#form-manufacturer .nav-tabs a[href=#tab-general]', 0)->outertext .= '<li><a href="#tab-data" data-toggle="tab">' . $this->language->get('text_data') . '</a></li>'; 3175 $html_dom->find('#form-manufacturer .tab-content #tab-general', 0)->outertext .= '<div class="tab-pane" id="tab-data">' . $html_manufacturer_data . '</div>'; 3176 } else { 3177 $html_manufacturer_name = $html_dom->find('#form-manufacturer .form-group', 0)->outertext; 3178 $html_dom->find('#form-manufacturer .form-group', 0)->outertext = ''; 3179 $html_manufacturer_data = $html_dom->find('#form-manufacturer', 0)->innertext; 3180 $html_dom->find('#form-manufacturer', 0)->innertext = '<ul class="nav nav-tabs"><li class="active"><a href="#tab-general" data-toggle="tab">' . $this->language->get('text_general') . '</a></li><li><a href="#tab-data" data-toggle="tab">' . $this->language->get('text_data') . '</a></li></ul><div class="tab-main tab-content"><div class="tab-pane active" id="tab-general">' . $html_manufacturer_name . '</div><div class="tab-pane" id="tab-data">' . $html_manufacturer_data . '</div></div>'; 3181 } 3182 3183 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3184 3185 if ($html_tab_general) { 3186 $html_dom->find('#tab-general', 0)->innertext .= $html_tab_general; 3187 } 3188 3189 if (reset($html_tab_general_language)) { 3190 $html_languages = '<ul class="nav nav-tabs" id="language">'; 3191 3192 foreach ($languages as $language) { 3193 $html_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#language' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 3194 } 3195 3196 $html_languages .= '</ul>'; 3197 $html_languages .= '<div class="tab-language tab-content">'; 3198 3199 foreach ($languages as $language) { 3200 $html_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="language' . $language['language_id'] . '"></div>'; 3201 } 3202 3203 $html_languages .= '</div>'; 3204 3205 $html_dom->find('#tab-general', 0)->innertext .= $html_languages; 3206 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3207 3208 foreach ($languages as $language) { 3209 $html_dom->find('#tab-general #language' . $language['language_id'], 0)->innertext .= $html_tab_general_language[$language['language_id']]; 3210 } 3211 } 3212 3213 $html_tab_general_language = reset($html_tab_general_store_language); 3214 3215 if ((count($stores)) && (reset($html_tab_general_store) || reset($html_tab_general_language))) { 3216 $html_stores = '<ul class="nav nav-tabs" id="store">'; 3217 3218 foreach ($stores as $store) { 3219 $html_stores .= '<li' . (($store == reset($stores)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '" data-toggle="tab">' . $store['name'] . '</a></li>'; 3220 } 3221 3222 $html_stores .= '</ul>'; 3223 $html_stores .= '<div class="tab-store tab-content">'; 3224 3225 foreach ($stores as $store) { 3226 $html_store_languages = ''; 3227 3228 if (reset($html_tab_general_store_language[$store['store_id']])) { 3229 $html_store_languages = '<ul class="nav nav-tabs" id="store_' . $store['store_id'] . '_language">'; 3230 3231 foreach ($languages as $language) { 3232 $html_store_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '_language_' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 3233 } 3234 3235 $html_store_languages .= '</ul>'; 3236 $html_store_languages .= '<div class="tab-language tab-content">'; 3237 3238 foreach ($languages as $language) { 3239 $html_store_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '_language_' . $language['language_id'] . '">' . $html_tab_general_store_language[$store['store_id']][$language['language_id']] . '</div>'; 3240 } 3241 3242 $html_store_languages .= '</div>'; 3243 } 3244 3245 $html_stores .= '<div class="tab-pane' . (($store == reset($stores)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '">' . $html_tab_general_store[$store['store_id']] . $html_store_languages . '</div>'; 3246 } 3247 3248 $html_stores .= '</div>'; 3249 3250 $html_dom->find('#tab-general', 0)->innertext .= $html_stores; 3251 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3252 } 3253 3254 if ($html_tab_data) { 3255 $html_dom->find('#tab-data', 0)->innertext .= $html_tab_data; 3256 } 3257 3258 if ($html_style) { 3259 $html_dom->find('#content', 0)->innertext .= $html_style; 3260 } 3261 3262 if ($html_script) { 3263 $html_dom->find('#content', 0)->innertext .= $html_script; 3264 } 3265 3266 $output = (string)$html_dom; 3267 } 3268 } 3269 3270 public function manufacturer_validate_form($error) { 3271 $this->load->model($this->route); 3272 3273 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3274 3275 foreach ($installed_seo_extensions as $installed_seo_extension) { 3276 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_validate_form', $error); 3277 if ($info != '') $error = $info; 3278 } 3279 3280 return $error; 3281 } 3282 3283 public function manufacturer_add_manufacturer_after($route, $data, $output) { 3284 $this->load->model($this->route); 3285 3286 $data = $data[0]; 3287 $data['manufacturer_id'] = $output; 3288 3289 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3290 3291 foreach ($installed_seo_extensions as $installed_seo_extension) { 3292 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_add_manufacturer', $data); 3293 } 3294 } 3295 3296 public function manufacturer_edit_manufacturer_after($route, $data, $output) { 3297 $this->load->model($this->route); 3298 3299 $manufacturer_id = $data[0]; 3300 $data = $data[1]; 3301 $data['manufacturer_id'] = $manufacturer_id; 3302 3303 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3304 3305 foreach ($installed_seo_extensions as $installed_seo_extension) { 3306 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_edit_manufacturer', $data); 3307 } 3308 } 3309 3310 public function manufacturer_delete_manufacturer_after($route, $data, $output) { 3311 $this->load->model($this->route); 3312 3313 $data['manufacturer_id'] = $data[0]; 3314 3315 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3316 3317 foreach ($installed_seo_extensions as $installed_seo_extension) { 3318 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/manufacturer_delete_manufacturer', $data); 3319 } 3320 } 3321 3322 public function information_form_after($route, $data, &$output) { 3323 $this->load->language($this->route); 3324 3325 $this->load->model($this->route); 3326 3327 if (file_exists(DIR_SYSTEM . 'library/d_simple_html_dom.php')) { 3328 $html_tab_general = ''; 3329 $html_tab_general_language = array(); 3330 $html_tab_general_store = array(); 3331 $html_tab_general_store_language = array(); 3332 $html_tab_data = ''; 3333 $html_style = ''; 3334 $html_script = ''; 3335 3336 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3337 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 3338 $stores = $this->{'model_extension_module_' . $this->codename}->getStores(); 3339 unset($stores[0]); 3340 3341 foreach ($installed_seo_extensions as $installed_seo_extension) { 3342 $html_tab_general .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_tab_general'); 3343 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_tab_general_language'); 3344 3345 foreach ($languages as $language) { 3346 if (!isset($html_tab_general_language[$language['language_id']])) $html_tab_general_language[$language['language_id']] = ''; 3347 3348 if (isset($info[$language['language_id']])) { 3349 $html_tab_general_language[$language['language_id']] .= $info[$language['language_id']]; 3350 } 3351 } 3352 3353 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_tab_general_store'); 3354 3355 foreach ($stores as $store) { 3356 if (!isset($html_tab_general_store[$store['store_id']])) $html_tab_general_store[$store['store_id']] = ''; 3357 3358 if (isset($info[$store['store_id']])) { 3359 $html_tab_general_store[$store['store_id']] .= $info[$store['store_id']]; 3360 } 3361 } 3362 3363 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_tab_general_store_language'); 3364 3365 foreach ($stores as $store) { 3366 foreach ($languages as $language) { 3367 if (!isset($html_tab_general_store_language[$store['store_id']][$language['language_id']])) $html_tab_general_store_language[$store['store_id']][$language['language_id']] = ''; 3368 3369 if (isset($info[$store['store_id']][$language['language_id']])) { 3370 $html_tab_general_store_language[$store['store_id']][$language['language_id']] .= $info[$store['store_id']][$language['language_id']]; 3371 } 3372 } 3373 } 3374 3375 $html_tab_data .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_tab_data'); 3376 $html_style .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_style'); 3377 $html_script .= $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_form_script'); 3378 } 3379 3380 $html_dom = new d_simple_html_dom(); 3381 $html_dom->load((string)$output, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3382 3383 if ($html_tab_general) { 3384 $html_dom->find('#tab-general', 0)->innertext .= $html_tab_general; 3385 } 3386 3387 if (reset($html_tab_general_language)) { 3388 foreach ($languages as $language) { 3389 $html_dom->find('#tab-general #language' . $language['language_id'], 0)->innertext .= $html_tab_general_language[$language['language_id']]; 3390 } 3391 } 3392 3393 $html_tab_general_language = reset($html_tab_general_store_language); 3394 3395 if ((count($stores)) && (reset($html_tab_general_store) || reset($html_tab_general_language))) { 3396 $html_stores = '<ul class="nav nav-tabs" id="store">'; 3397 3398 foreach ($stores as $store) { 3399 $html_stores .= '<li' . (($store == reset($stores)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '" data-toggle="tab">' . $store['name'] . '</a></li>'; 3400 } 3401 3402 $html_stores .= '</ul>'; 3403 $html_stores .= '<div class="tab-store tab-content">'; 3404 3405 foreach ($stores as $store) { 3406 $html_store_languages = ''; 3407 3408 if (reset($html_tab_general_store_language[$store['store_id']])) { 3409 $html_store_languages = '<ul class="nav nav-tabs" id="store_' . $store['store_id'] . '_language">'; 3410 3411 foreach ($languages as $language) { 3412 $html_store_languages .= '<li' . (($language == reset($languages)) ? ' class="active"' : '') . '><a href="#store_' . $store['store_id'] . '_language_' . $language['language_id'] . '" data-toggle="tab"><img src="' . $language['flag'] . '" title="' . $language['name'] . '" /> ' . $language['name'] . '</a></li>'; 3413 } 3414 3415 $html_store_languages .= '</ul>'; 3416 $html_store_languages .= '<div class="tab-language tab-content">'; 3417 3418 foreach ($languages as $language) { 3419 $html_store_languages .= '<div class="tab-pane' . (($language == reset($languages)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '_language_' . $language['language_id'] . '">' . $html_tab_general_store_language[$store['store_id']][$language['language_id']] . '</div>'; 3420 } 3421 3422 $html_store_languages .= '</div>'; 3423 } 3424 3425 $html_stores .= '<div class="tab-pane' . (($store == reset($stores)) ? ' active' : '') . '" id="store_' . $store['store_id'] . '">' . $html_tab_general_store[$store['store_id']] . $html_store_languages . '</div>'; 3426 } 3427 3428 $html_stores .= '</div>'; 3429 3430 $html_dom->find('#tab-general', 0)->innertext .= $html_stores; 3431 $html_dom->load((string)$html_dom, $lowercase = true, $stripRN = false, $defaultBRText = DEFAULT_BR_TEXT); 3432 } 3433 3434 if ($html_tab_data) { 3435 $html_dom->find('#tab-data', 0)->innertext .= $html_tab_data; 3436 } 3437 3438 if ($html_style) { 3439 $html_dom->find('#content', 0)->innertext .= $html_style; 3440 } 3441 3442 if ($html_script) { 3443 $html_dom->find('#content', 0)->innertext .= $html_script; 3444 } 3445 3446 $output = (string)$html_dom; 3447 } 3448 } 3449 3450 public function information_validate_form($error) { 3451 $this->load->model($this->route); 3452 3453 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3454 3455 foreach ($installed_seo_extensions as $installed_seo_extension) { 3456 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_validate_form', $error); 3457 if ($info != '') $error = $info; 3458 } 3459 3460 return $error; 3461 } 3462 3463 public function information_add_information_after($route, $data, $output) { 3464 $this->load->model($this->route); 3465 3466 $data = $data[0]; 3467 $data['information_id'] = $output; 3468 3469 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3470 3471 foreach ($installed_seo_extensions as $installed_seo_extension) { 3472 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_add_information', $data); 3473 } 3474 } 3475 3476 public function information_edit_information_after($route, $data, $output) { 3477 $this->load->model($this->route); 3478 3479 $information_id = $data[0]; 3480 $data = $data[1]; 3481 $data['information_id'] = $information_id; 3482 3483 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3484 3485 foreach ($installed_seo_extensions as $installed_seo_extension) { 3486 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_edit_information', $data); 3487 } 3488 } 3489 3490 public function information_delete_information_after($route, $data, $output) { 3491 $this->load->model($this->route); 3492 3493 $data['information_id'] = $data[0]; 3494 3495 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3496 3497 foreach ($installed_seo_extensions as $installed_seo_extension) { 3498 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/information_delete_information', $data); 3499 } 3500 } 3501 3502 /* 3503 * Return Field Info. 3504 */ 3505 public function getFieldInfo() { 3506 $_language = new Language(); 3507 $_language->load($this->route); 3508 3509 $this->load->model($this->route); 3510 3511 if ($this->config->get($this->codename . '_field_info')) { 3512 return $this->config->get($this->codename . '_field_info'); 3513 } 3514 3515 // Setting 3516 $config_field_setting = array(); 3517 3518 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3519 3520 foreach ($installed_seo_extensions as $installed_seo_extension) { 3521 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/field_config'); 3522 if ($info) $config_field_setting = array_replace_recursive($config_field_setting, $info); 3523 } 3524 3525 $setting = $this->model_setting_setting->getSetting('module_' . $this->codename); 3526 $field_setting = isset($setting['module_' . $this->codename . '_field_setting']) ? $setting['module_' . $this->codename . '_field_setting'] : array(); 3527 3528 if (!empty($field_setting)) { 3529 $config_field_setting = array_replace_recursive($config_field_setting, $field_setting); 3530 } 3531 3532 $field_setting = $config_field_setting; 3533 3534 $sheets = array(); 3535 3536 foreach ($field_setting['sheet'] as $sheet) { 3537 if (isset($sheet['code']) && isset($sheet['name'])) { 3538 $fields = array(); 3539 3540 if (isset($sheet['field'])) { 3541 foreach ($sheet['field'] as $field) { 3542 if (isset($field['code']) && isset($field['name']) && isset($field['description']) && isset($field['type']) && isset($field['multi_language']) && isset($field['multi_store']) && isset($field['required'])) { 3543 $fields[$field['code']] = $field; 3544 } 3545 } 3546 3547 $fields = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($fields, 'sort_order'); 3548 } 3549 3550 $sheet['field'] = array(); 3551 3552 foreach ($fields as $field) { 3553 $sheet['field'][$field['code']] = $field; 3554 } 3555 3556 $sheets[$sheet['code']] = $sheet; 3557 } 3558 } 3559 3560 $field_setting['sheet'] = $this->{'model_extension_module_' . $this->codename}->sortArrayByColumn($sheets, 'sort_order'); 3561 3562 $this->config->set($this->codename . '_field_info', $field_setting); 3563 3564 return $field_setting; 3565 } 3566 3567 /* 3568 * Return Field Elements. 3569 */ 3570 public function getFieldElements($data) { 3571 $this->load->model($this->route); 3572 3573 $field_elements = array(); 3574 3575 if (isset($data['field_code']) && isset($data['filter'])) { 3576 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3577 3578 foreach ($installed_seo_extensions as $installed_seo_extension) { 3579 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/field_elements', $data); 3580 if ($info != '') $field_elements = array_replace_recursive($field_elements, $info); 3581 } 3582 } 3583 3584 return $field_elements; 3585 } 3586 3587 /* 3588 * Return Custom Page Exception Routes. 3589 */ 3590 public function getCustomPageExceptionRoutes() { 3591 $this->load->model($this->route); 3592 3593 if ($this->config->get($this->codename . '_custom_page_exception_routes')) { 3594 return $this->config->get($this->codename . '_custom_page_exception_routes'); 3595 } 3596 3597 $custom_page_exception_routes = array(); 3598 3599 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3600 3601 foreach ($installed_seo_extensions as $installed_seo_extension) { 3602 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_extension . '/custom_page_exception_routes'); 3603 if ($info) $custom_page_exception_routes = array_merge($custom_page_exception_routes, $info); 3604 } 3605 3606 $this->config->set($this->codename . '_custom_page_exception_routes', $custom_page_exception_routes); 3607 3608 return $custom_page_exception_routes; 3609 } 3610 3611 /* 3612 * Return Target Keywords. 3613 */ 3614 public function getTargetKeywords() { 3615 $filter = array(); 3616 3617 if (isset($this->request->post['route'])) { 3618 $filter['route'] = $this->request->post['route']; 3619 } 3620 3621 if (isset($this->request->post['store_id'])) { 3622 $filter['store_id'] = $this->request->post['store_id']; 3623 } 3624 3625 if (isset($this->request->post['language_id'])) { 3626 $filter['language_id'] = $this->request->post['language_id']; 3627 } 3628 3629 if (isset($this->request->post['sort_order'])) { 3630 $filter['sort_order'] = $this->request->post['sort_order']; 3631 } 3632 3633 if (isset($this->request->post['keyword'])) { 3634 $filter['keyword'] = $this->request->post['keyword']; 3635 } 3636 3637 $field_data = array( 3638 'field_code' => 'target_keyword', 3639 'filter' => $filter 3640 ); 3641 3642 $data['target_keywords'] = $this->getFieldElements($field_data); 3643 3644 $this->response->setOutput(json_encode($data)); 3645 } 3646 3647 /* 3648 * Validator Functions. 3649 */ 3650 private function validate($permission = 'modify') { 3651 if (!$this->user->hasPermission($permission, $this->route)) { 3652 $this->error['warning'] = $this->language->get('error_permission'); 3653 3654 return false; 3655 } 3656 3657 return true; 3658 } 3659 3660 private function validateAddTargetElement($permission = 'modify') { 3661 if (!$this->user->hasPermission($permission, $this->route)) { 3662 $this->error['warning'] = $this->language->get('error_permission'); 3663 3664 return false; 3665 } 3666 3667 if (!preg_match('/[A-Za-z0-9]+\/[A-Za-z0-9]+/i', $this->request->post['target_element']['route']) && !preg_match('/[A-Za-z0-9]+\=[0-9]+/i', $this->request->post['target_element']['route'])) { 3668 $this->error['warning'] = $this->language->get('error_route'); 3669 3670 return false; 3671 } 3672 3673 $field_data = array( 3674 'field_code' => 'target_keyword', 3675 'filter' => array( 3676 'route' => $this->request->post['target_element']['route'], 3677 'store_id' => $this->request->get['store_id'] 3678 ) 3679 ); 3680 3681 $target_keywords = $this->getFieldElements($field_data); 3682 3683 if ($target_keywords) { 3684 $this->error['warning'] = sprintf($this->language->get('error_route_exists'), $this->request->post['target_element']['route']); 3685 3686 return false; 3687 } 3688 3689 foreach ($this->request->post['target_element']['target_keyword'] as $language_id => $target_keyword) { 3690 preg_match_all('/\[[^]]+\]/', $target_keyword, $keywords); 3691 3692 if (!$keywords[0]) { 3693 $this->error['warning'] = sprintf($this->language->get('error_target_keyword'), $target_keyword); 3694 3695 return false; 3696 } 3697 } 3698 3699 return true; 3700 } 3701 3702 private function validateEditTargetElement($permission = 'modify') { 3703 if (!$this->user->hasPermission($permission, $this->route)) { 3704 $this->error['warning'] = $this->language->get('error_permission'); 3705 3706 return false; 3707 } 3708 3709 preg_match_all('/\[[^]]+\]/', $this->request->post['target_keyword'], $keywords); 3710 3711 if (!$keywords[0]) { 3712 $this->error['warning'] = sprintf($this->language->get('error_target_keyword'), $this->request->post['target_keyword']); 3713 3714 return false; 3715 } 3716 3717 return true; 3718 } 3719 3720 private function validateImport($permission = 'modify') { 3721 if (!$this->user->hasPermission($permission, $this->route)) { 3722 $this->error['warning'] = $this->language->get('error_permission'); 3723 3724 return false; 3725 } 3726 3727 if (!isset($this->request->files['upload']['name']) || !$this->request->files['upload']['name']) { 3728 $this->error['warning'] = $this->language->get('error_upload_name'); 3729 3730 return false; 3731 } 3732 3733 $ext = strtolower(pathinfo($this->request->files['upload']['name'], PATHINFO_EXTENSION)); 3734 3735 if (($ext != 'xls') && ($ext != 'xlsx') && ($ext != 'ods')) { 3736 $this->error['warning'] = $this->language->get('error_upload_ext'); 3737 3738 return false; 3739 } 3740 3741 return true; 3742 } 3743 3744 private function validateInstall($permission = 'modify') { 3745 $this->load->model($this->route); 3746 3747 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3748 3749 if (in_array($this->codename, $installed_seo_extensions)) { 3750 $this->error['warning'] = $this->language->get('error_installed'); 3751 3752 return false; 3753 } 3754 3755 $installed_seo_extensions[] = $this->codename; 3756 3757 $this->{'model_extension_module_' . $this->codename}->saveSEOExtensions($installed_seo_extensions); 3758 3759 return true; 3760 } 3761 3762 private function validateUninstall($permission = 'modify') { 3763 $this->load->model($this->route); 3764 3765 $installed_seo_extensions = $this->{'model_extension_module_' . $this->codename}->getInstalledSEOExtensions(); 3766 3767 if (count($installed_seo_extensions) > 1) { 3768 $this->error['warning'] = $this->language->get('error_dependencies'); 3769 3770 return false; 3771 } 3772 3773 $key = array_search($this->codename, $installed_seo_extensions); 3774 3775 if ($key !== false) unset($installed_seo_extensions[$key]); 3776 3777 $this->{'model_extension_module_' . $this->codename}->saveSEOExtensions($installed_seo_extensions); 3778 3779 return true; 3780 } 3781 }