d_seo_module_target_keyword.php (14587B)
1 <?php 2 class ControllerExtensionDashboardDSEOModuleTargetKeyword extends Controller { 3 private $codename = 'd_seo_module_target_keyword'; 4 private $main_codename = 'd_seo_module'; 5 private $route = 'extension/dashboard/d_seo_module_target_keyword'; 6 private $config_file = 'd_seo_module_target_keyword'; 7 private $extension = array(); 8 private $error = array(); 9 10 public function __construct($registry) { 11 parent::__construct($registry); 12 13 $this->d_shopunity = (file_exists(DIR_SYSTEM . 'library/d_shopunity/extension/d_shopunity.json')); 14 $this->extension = json_decode(file_get_contents(DIR_SYSTEM . 'library/d_shopunity/extension/' . $this->main_codename . '.json'), true); 15 } 16 17 public function index() { 18 $this->load->language($this->route); 19 20 $this->load->model($this->route); 21 $this->load->model('setting/setting'); 22 23 if ($this->d_shopunity) { 24 $this->load->model('extension/d_shopunity/mbooth'); 25 26 $this->model_extension_d_shopunity_mbooth->validateDependencies($this->main_codename); 27 } 28 29 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 30 $this->load->model('extension/module/d_twig_manager'); 31 32 $this->model_extension_module_d_twig_manager->installCompatibility(); 33 } 34 35 $this->load->controller('extension/module/d_seo_module/update'); 36 37 $url_token = ''; 38 39 if (isset($this->session->data['token'])) { 40 $url_token .= 'token=' . $this->session->data['token']; 41 } 42 43 if (isset($this->session->data['user_token'])) { 44 $url_token .= 'user_token=' . $this->session->data['user_token']; 45 } 46 47 // Styles and Scripts 48 $this->document->addStyle('view/stylesheet/d_bootstrap_extra/bootstrap.css'); 49 $this->document->addScript('view/javascript/d_bootstrap_switch/js/bootstrap-switch.min.js'); 50 $this->document->addStyle('view/javascript/d_bootstrap_switch/css/bootstrap-switch.css'); 51 $this->document->addStyle('view/stylesheet/d_seo_module.css'); 52 53 // Heading 54 $this->document->setTitle($this->language->get('heading_title_main')); 55 $data['heading_title'] = $this->language->get('heading_title_main'); 56 57 // Variable 58 $data['codename'] = $this->codename; 59 $data['route'] = $this->route; 60 $data['version'] = $this->extension['version']; 61 $data['config'] = $this->config_file; 62 $data['d_shopunity'] = $this->d_shopunity; 63 $data['stores'] = $this->{'model_extension_dashboard_' . $this->codename}->getStores(); 64 65 if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { 66 $data['server'] = HTTPS_SERVER; 67 $data['catalog'] = HTTPS_CATALOG; 68 } else { 69 $data['server'] = HTTP_SERVER; 70 $data['catalog'] = HTTP_CATALOG; 71 } 72 73 // Action 74 $data['module_link'] = $this->url->link($this->route, $url_token, true); 75 $data['action'] = $this->url->link($this->route . '/save', $url_token, true); 76 77 if (VERSION >= '3.0.0.0') { 78 $data['cancel'] = $this->url->link('marketplace/extension', $url_token . '&type=dashboard', true); 79 } else { 80 $data['cancel'] = $this->url->link('extension/extension', $url_token . '&type=dashboard', true); 81 } 82 83 // Button 84 $data['button_save'] = $this->language->get('button_save'); 85 $data['button_save_and_stay'] = $this->language->get('button_save_and_stay'); 86 $data['button_cancel'] = $this->language->get('button_cancel'); 87 88 // Entry 89 $data['entry_status'] = $this->language->get('entry_status'); 90 $data['entry_width'] = $this->language->get('entry_width'); 91 $data['entry_sort_order'] = $this->language->get('entry_sort_order'); 92 $data['entry_list_limit'] = $this->language->get('entry_list_limit'); 93 $data['entry_duplicate_status'] = $this->language->get('entry_duplicate_status'); 94 $data['entry_empty_status'] = $this->language->get('entry_empty_status'); 95 $data['entry_store'] = $this->language->get('entry_store'); 96 97 // Text 98 $data['text_edit'] = $this->language->get('text_edit'); 99 $data['text_yes'] = $this->language->get('text_yes'); 100 $data['text_no'] = $this->language->get('text_no'); 101 $data['text_enabled'] = $this->language->get('text_enabled'); 102 $data['text_disabled'] = $this->language->get('text_disabled'); 103 104 // Notification 105 foreach($this->error as $key => $error){ 106 $data['error'][$key] = $error; 107 } 108 109 if (isset($this->session->data['success'])) { 110 $data['success'] = $this->session->data['success']; 111 unset($this->session->data['success']); 112 } else { 113 $data['success'] = ''; 114 } 115 116 // Breadcrumbs 117 $data['breadcrumbs'] = array(); 118 119 $data['breadcrumbs'][] = array( 120 'text' => $this->language->get('text_home'), 121 'href' => $this->url->link('common/dashboard', $url_token, true) 122 ); 123 124 if (VERSION >= '3.0.0.0') { 125 $data['breadcrumbs'][] = array( 126 'text' => $this->language->get('text_dashboard'), 127 'href' => $this->url->link('marketplace/extension', $url_token . '&type=dashboard', true) 128 ); 129 } elseif (VERSION >= '2.3.0.0') { 130 $data['breadcrumbs'][] = array( 131 'text' => $this->language->get('text_dashboard'), 132 'href' => $this->url->link('extension/extension', $url_token . '&type=dashboard', true) 133 ); 134 } else { 135 $data['breadcrumbs'][] = array( 136 'text' => $this->language->get('text_dashboard'), 137 'href' => $this->url->link('extension/dashboard', $url_token, true) 138 ); 139 } 140 141 $data['breadcrumbs'][] = array( 142 'text' => $this->language->get('heading_title_main'), 143 'href' => $this->url->link($this->route, $url_token, true) 144 ); 145 146 // Setting 147 $this->config->load($this->config_file); 148 $data['setting'] = ($this->config->get($this->codename . '_setting')) ? $this->config->get($this->codename . '_setting') : array(); 149 150 $setting = $this->model_setting_setting->getSetting('dashboard_' . $this->codename); 151 $status = isset($setting['dashboard_' . $this->codename . '_status']) ? $setting['dashboard_' . $this->codename . '_status'] : false; 152 $width = isset($setting['dashboard_' . $this->codename . '_width']) ? $setting['dashboard_' . $this->codename . '_width'] : 12; 153 $sort_order = isset($setting['dashboard_' . $this->codename . '_sort_order']) ? $setting['dashboard_' . $this->codename . '_sort_order'] : 20; 154 $setting = isset($setting['dashboard_' . $this->codename . '_setting']) ? $setting['dashboard_' . $this->codename . '_setting'] : array(); 155 156 $data['status'] = $status; 157 $data['width'] = $width; 158 $data['sort_order'] = $sort_order; 159 160 if (!empty($setting)) { 161 $data['setting'] = array_replace_recursive($data['setting'], $setting); 162 } 163 164 $data['columns'] = array(); 165 166 for ($i = 3; $i <= 12; $i++) { 167 $data['columns'][] = $i; 168 } 169 170 $data['header'] = $this->load->controller('common/header'); 171 $data['column_left'] = $this->load->controller('common/column_left'); 172 $data['footer'] = $this->load->controller('common/footer'); 173 174 $this->response->setOutput($this->load->view($this->route, $data)); 175 } 176 177 public function save() { 178 $this->load->language($this->route); 179 180 $this->load->model('setting/setting'); 181 182 if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 183 $this->model_setting_setting->editSetting('dashboard_' . $this->codename, $this->request->post); 184 185 $data['success'] = $this->language->get('success_save'); 186 } 187 188 $data['error'] = $this->error; 189 190 $this->response->setOutput(json_encode($data)); 191 } 192 193 public function dashboard() { 194 $this->load->language($this->route); 195 196 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 197 $this->load->model('extension/module/d_twig_manager'); 198 199 $this->model_extension_module_d_twig_manager->installCompatibility(); 200 } 201 202 $this->load->controller('extension/module/d_seo_module/update'); 203 204 $url_token = ''; 205 206 if (isset($this->session->data['token'])) { 207 $url_token .= 'token=' . $this->session->data['token']; 208 } 209 210 if (isset($this->session->data['user_token'])) { 211 $url_token .= 'user_token=' . $this->session->data['user_token']; 212 } 213 214 // Heading 215 $data['heading_title'] = $this->language->get('heading_title_main'); 216 217 // Variable 218 $data['codename'] = $this->codename; 219 $data['route'] = $this->route; 220 $data['url_token'] = $url_token; 221 222 return $this->load->view($this->route . '_info', $data); 223 } 224 225 public function refresh() { 226 $this->load->language($this->route); 227 228 $this->load->model($this->route); 229 $this->load->model('setting/setting'); 230 $this->load->model('localisation/language'); 231 232 if (file_exists(DIR_APPLICATION . 'model/extension/module/d_twig_manager.php')) { 233 $this->load->model('extension/module/d_twig_manager'); 234 235 $this->model_extension_module_d_twig_manager->installCompatibility(); 236 } 237 238 // Heading 239 $data['heading_title'] = $this->language->get('heading_title_main'); 240 241 // Variable 242 $data['codename'] = $this->codename; 243 $data['route'] = $this->route; 244 $data['languages'] = $this->{'model_extension_dashboard_' . $this->codename}->getLanguages(); 245 $data['stores'] = array(); 246 247 // Column 248 $data['column_route'] = $this->language->get('column_route'); 249 $data['column_target_keyword'] = $this->language->get('column_target_keyword'); 250 251 // Text 252 $data['text_heading_info'] = $this->language->get('text_heading_info'); 253 $data['text_no_results'] = $this->language->get('text_no_results'); 254 255 // Setting 256 $this->config->load($this->config_file); 257 $config_setting = ($this->config->get($this->codename . '_setting')) ? $this->config->get($this->codename . '_setting') : array(); 258 259 $setting = $this->model_setting_setting->getSetting('dashboard_' . $this->codename); 260 $setting = isset($setting['dashboard_' . $this->codename . '_setting']) ? $setting['dashboard_' . $this->codename . '_setting'] : array(); 261 262 if (!empty($setting)) { 263 $config_setting = array_replace_recursive($config_setting, $setting); 264 } 265 266 $setting = $config_setting; 267 268 $installed_seo_target_keyword_extensions = $this->{'model_extension_dashboard_' . $this->codename}->getInstalledSEOTargetKeywordExtensions(); 269 270 $target_elements = array(); 271 $store_target_elements = array(); 272 $store_duplicate_target_elements = array(); 273 $store_empty_target_elements = array(); 274 275 if ($setting['duplicate_status'] || $setting['empty_status']) { 276 foreach ($installed_seo_target_keyword_extensions as $installed_seo_target_keyword_extension) { 277 $info = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_target_keyword_extension . '/target_elements'); 278 if ($info) $target_elements = array_replace_recursive($target_elements, $info); 279 } 280 } 281 282 if ($setting['duplicate_status']) { 283 $store_duplicate_target_elements = $this->{'model_extension_dashboard_' . $this->codename}->getStoreDuplicateTargetElements($target_elements); 284 if ($store_duplicate_target_elements) $store_target_elements = array_replace_recursive($store_target_elements, $store_duplicate_target_elements); 285 } 286 287 if ($setting['empty_status']) { 288 $store_empty_target_elements = $this->{'model_extension_dashboard_' . $this->codename}->getStoreEmptyTargetElements($target_elements); 289 if ($store_empty_target_elements) $store_target_elements = array_replace_recursive($store_target_elements, $store_empty_target_elements); 290 } 291 292 foreach ($store_target_elements as $store_id => $target_elements) { 293 $store_target_elements[$store_id] = array_slice($target_elements, 0, $setting['list_limit']); 294 } 295 296 foreach ($installed_seo_target_keyword_extensions as $installed_seo_target_keyword_extension) { 297 $store_target_elements_links = $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_target_keyword_extension . '/store_target_elements_links', $store_target_elements); 298 if ($store_target_elements_links) $store_target_elements = $store_target_elements_links; 299 } 300 301 $stores = $this->{'model_extension_dashboard_' . $this->codename}->getStores(); 302 303 foreach ($stores as $store) { 304 if ((in_array($store['store_id'], $setting['stores_id'])) || (VERSION < '2.3.0.0')) { 305 $data['stores'][$store['store_id']] = $store; 306 307 if ($setting['duplicate_status']) { 308 $data['stores'][$store['store_id']]['duplicate_target_elements_count'] = 0; 309 310 if (isset($store_duplicate_target_elements[$store['store_id']])) { 311 $data['stores'][$store['store_id']]['duplicate_target_elements_count'] = count($store_duplicate_target_elements[$store['store_id']]); 312 } 313 } 314 315 if ($setting['empty_status']) { 316 $data['stores'][$store['store_id']]['empty_target_elements_count'] = 0; 317 318 if (isset($store_empty_target_elements[$store['store_id']])) { 319 $data['stores'][$store['store_id']]['empty_target_elements_count'] = count($store_empty_target_elements[$store['store_id']]); 320 } 321 } 322 323 $data['stores'][$store['store_id']]['target_elements'] = array(); 324 325 if (isset($store_target_elements[$store['store_id']])) { 326 $data['stores'][$store['store_id']]['target_elements'] = $store_target_elements[$store['store_id']]; 327 } 328 } 329 } 330 331 $this->response->setOutput($this->load->view($this->route . '_refresh', $data)); 332 } 333 334 public function editTargetElement() { 335 $this->load->language($this->route); 336 337 $this->load->model($this->route); 338 339 if (isset($this->request->post['route']) && isset($this->request->post['store_id']) && isset($this->request->post['language_id']) && isset($this->request->post['target_keyword']) && $this->validate()) { 340 $target_element_data = array( 341 'route' => $this->request->post['route'], 342 'store_id' => $this->request->post['store_id'], 343 'language_id' => $this->request->post['language_id'], 344 'target_keyword' => $this->request->post['target_keyword'] 345 ); 346 347 $installed_seo_target_keyword_extensions = $this->{'model_extension_dashboard_' . $this->codename}->getInstalledSEOTargetKeywordExtensions(); 348 349 foreach ($installed_seo_target_keyword_extensions as $installed_seo_target_keyword_extension) { 350 $this->load->controller('extension/' . $this->codename . '/' . $installed_seo_target_keyword_extension . '/edit_target_element', $target_element_data); 351 } 352 } 353 354 $data['error'] = $this->error; 355 356 $this->response->setOutput(json_encode($data)); 357 } 358 359 /* 360 * Validator Functions. 361 */ 362 private function validate($permission = 'modify') { 363 if (isset($this->request->post['config'])) { 364 return false; 365 } 366 367 if (!$this->user->hasPermission($permission, $this->route)) { 368 $this->error['warning'] = $this->language->get('error_permission'); 369 370 return false; 371 } 372 373 return true; 374 } 375 }