d_seo_module.php (37412B)
1 <?php 2 class ModelExtensionDSEOModuleManagerDSEOModule extends Model { 3 private $codename = 'd_seo_module'; 4 5 /* 6 * Return List Elements for Manager. 7 */ 8 public function getListElements($data) { 9 $field_info = $this->load->controller('extension/module/d_seo_module/getFieldInfo'); 10 11 if ($data['sheet_code'] == 'category') { 12 $categories = array(); 13 $implode = array(); 14 $implode[] = "c.category_id"; 15 $add = ''; 16 17 foreach ($data['fields'] as $field) { 18 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 19 if ($field['code'] == 'target_keyword') { 20 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 21 22 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 23 $target_keyword_store_id = $data['store_id']; 24 } else { 25 $target_keyword_store_id = 0; 26 } 27 28 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('category_id=', c.category_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = '" . (int)$data['language_id'] . "') LEFT JOIN " . DB_PREFIX . "d_target_keyword tk2 ON (tk2.route = CONCAT('category_id=', c.category_id) AND tk2.store_id = '" . (int)$target_keyword_store_id . "')"; 29 } 30 } 31 } 32 33 $sql = "SELECT " . implode(', ', $implode) . " FROM " . DB_PREFIX . "category c" . $add; 34 35 $implode = array(); 36 37 foreach ($data['filter'] as $field_code => $filter) { 38 if (!empty($filter)) { 39 if ($field_code == 'target_keyword') { 40 $implode[] = "tk2.keyword LIKE '%" . $this->db->escape($filter) . "%'"; 41 } 42 } 43 } 44 45 if ($implode) { 46 $sql .= " WHERE " . implode(' AND ', $implode); 47 } 48 49 $sql .= " GROUP BY c.category_id"; 50 51 $query = $this->db->query($sql); 52 53 foreach ($query->rows as $result) { 54 $categories[$result['category_id']] = $result; 55 } 56 57 return $categories; 58 } 59 60 if ($data['sheet_code'] == 'product') { 61 $products = array(); 62 $implode = array(); 63 $implode[] = "p.product_id"; 64 $add = ''; 65 66 foreach ($data['fields'] as $field) { 67 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 68 if ($field['code'] == 'target_keyword') { 69 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 70 71 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 72 $target_keyword_store_id = $data['store_id']; 73 } else { 74 $target_keyword_store_id = 0; 75 } 76 77 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('product_id=', p.product_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = '" . (int)$data['language_id'] . "') LEFT JOIN " . DB_PREFIX . "d_target_keyword tk2 ON (tk2.route = CONCAT('product_id=', p.product_id) AND tk2.store_id = '" . (int)$target_keyword_store_id . "')"; 78 } 79 } 80 } 81 82 $sql = "SELECT " . implode(', ', $implode) . " FROM " . DB_PREFIX . "product p" . $add; 83 84 $implode = array(); 85 86 foreach ($data['filter'] as $field_code => $filter) { 87 if (!empty($filter)) { 88 if ($field_code == 'target_keyword') { 89 $implode[] = "tk2.keyword LIKE '%" . $this->db->escape($filter) . "%'"; 90 } 91 } 92 } 93 94 if ($implode) { 95 $sql .= " WHERE " . implode(' AND ', $implode); 96 } 97 98 $sql .= " GROUP BY p.product_id"; 99 100 $query = $this->db->query($sql); 101 102 foreach ($query->rows as $result) { 103 $products[$result['product_id']] = $result; 104 } 105 106 return $products; 107 } 108 109 if ($data['sheet_code'] == 'manufacturer') { 110 $manufacturers = array(); 111 $implode = array(); 112 $implode[] = "m.manufacturer_id"; 113 114 foreach ($data['fields'] as $field) { 115 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 116 if ($field['code'] == 'target_keyword') { 117 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 118 119 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 120 $target_keyword_store_id = $data['store_id']; 121 } else { 122 $target_keyword_store_id = 0; 123 } 124 125 $add = "LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('manufacturer_id=', m.manufacturer_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = '" . (int)$data['language_id'] . "') LEFT JOIN " . DB_PREFIX . "d_target_keyword tk2 ON (tk2.route = CONCAT('manufacturer_id=', m.manufacturer_id) AND tk2.store_id = '" . (int)$target_keyword_store_id . "')"; 126 } 127 } 128 } 129 130 $sql = "SELECT " . implode(', ', $implode) . " FROM " . DB_PREFIX . "manufacturer m " . $add; 131 132 $implode = array(); 133 134 foreach ($data['filter'] as $field_code => $filter) { 135 if (!empty($filter)) { 136 if ($field_code == 'target_keyword') { 137 $implode[] = "tk2.keyword LIKE '%" . $this->db->escape($filter) . "%'"; 138 } 139 } 140 } 141 142 if ($implode) { 143 $sql .= " WHERE " . implode(' AND ', $implode); 144 } 145 146 $sql .= " GROUP BY m.manufacturer_id"; 147 148 $query = $this->db->query($sql); 149 150 foreach ($query->rows as $result) { 151 $manufacturers[$result['manufacturer_id']] = $result; 152 } 153 154 return $manufacturers; 155 } 156 157 if ($data['sheet_code'] == 'information') { 158 $informations = array(); 159 $implode = array(); 160 $implode[] = "i.information_id"; 161 $add = ''; 162 163 foreach ($data['fields'] as $field) { 164 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 165 if ($field['code'] == 'target_keyword') { 166 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 167 168 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 169 $target_keyword_store_id = $data['store_id']; 170 } else { 171 $target_keyword_store_id = 0; 172 } 173 174 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('information_id=', i.information_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = '" . (int)$data['language_id'] . "') LEFT JOIN " . DB_PREFIX . "d_target_keyword tk2 ON (tk2.route = CONCAT('information_id=', i.information_id) AND tk2.store_id = '" . (int)$target_keyword_store_id . "')"; 175 } 176 } 177 } 178 179 $sql = "SELECT " . implode(', ', $implode) . " FROM " . DB_PREFIX . "information i" . $add; 180 181 $implode = array(); 182 183 foreach ($data['filter'] as $field_code => $filter) { 184 if (!empty($filter)) { 185 if ($field_code == 'target_keyword') { 186 $implode[] = "tk2.keyword LIKE '%" . $this->db->escape($filter) . "%'"; 187 } 188 } 189 } 190 191 if ($implode) { 192 $sql .= " WHERE " . implode(' AND ', $implode); 193 } 194 195 $sql .= " GROUP BY i.information_id"; 196 197 $query = $this->db->query($sql); 198 199 foreach ($query->rows as $result) { 200 $informations[$result['information_id']] = $result; 201 } 202 203 return $informations; 204 } 205 } 206 207 /* 208 * Edit Element Field for Manager. 209 */ 210 public function editElementField($element) { 211 $field_info = $this->load->controller('extension/module/d_seo_module/getFieldInfo'); 212 213 if ($element['sheet_code'] == 'category') { 214 if (($element['field_code'] == 'target_keyword') && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store']) && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status'])) { 215 if ($element['store_id'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status']) { 216 $target_keyword_store_id = $element['store_id']; 217 } else { 218 $target_keyword_store_id = 0; 219 } 220 221 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'category_id=" . (int)$element['element_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$element['language_id'] . "'"); 222 223 if ($element['value']) { 224 preg_match_all('/\[[^]]+\]/', $element['value'], $keywords); 225 226 $sort_order = 1; 227 $this->request->post['value'] = ''; 228 229 foreach ($keywords[0] as $keyword) { 230 $keyword = substr($keyword, 1, strlen($keyword) - 2); 231 232 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'category_id=" . (int)$element['element_id'] . "', store_id='" . (int)$target_keyword_store_id . "', language_id = '" . (int)$element['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 233 234 $sort_order++; 235 $this->request->post['value'] .= '[' . $keyword . ']'; 236 } 237 } 238 } 239 } 240 241 if ($element['sheet_code'] == 'product') { 242 if (($element['field_code'] == 'target_keyword') && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store']) && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status'])) { 243 if ($element['store_id'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status']) { 244 $target_keyword_store_id = $element['store_id']; 245 } else { 246 $target_keyword_store_id = 0; 247 } 248 249 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'product_id=" . (int)$element['element_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$element['language_id'] . "'"); 250 251 if ($element['value']) { 252 preg_match_all('/\[[^]]+\]/', $element['value'], $keywords); 253 254 $sort_order = 1; 255 $this->request->post['value'] = ''; 256 257 foreach ($keywords[0] as $keyword) { 258 $keyword = substr($keyword, 1, strlen($keyword) - 2); 259 260 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'product_id=" . (int)$element['element_id'] . "', store_id='" . (int)$target_keyword_store_id . "', language_id = '" . (int)$element['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 261 262 $sort_order++; 263 $this->request->post['value'] .= '[' . $keyword . ']'; 264 } 265 } 266 } 267 } 268 269 if ($element['sheet_code'] == 'manufacturer') { 270 if (($element['field_code'] == 'target_keyword') && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store']) && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status'])) { 271 if ($element['store_id'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status']) { 272 $target_keyword_store_id = $element['store_id']; 273 } else { 274 $target_keyword_store_id = 0; 275 } 276 277 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'manufacturer_id=" . (int)$element['element_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$element['language_id'] . "'"); 278 279 if ($element['value']) { 280 preg_match_all('/\[[^]]+\]/', $element['value'], $keywords); 281 282 $sort_order = 1; 283 $this->request->post['value'] = ''; 284 285 foreach ($keywords[0] as $keyword) { 286 $keyword = substr($keyword, 1, strlen($keyword) - 2); 287 288 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'manufacturer_id=" . (int)$element['element_id'] . "', store_id='" . (int)$target_keyword_store_id . "', language_id = '" . (int)$element['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 289 290 $sort_order++; 291 $this->request->post['value'] .= '[' . $keyword . ']'; 292 } 293 } 294 } 295 } 296 297 if ($element['sheet_code'] == 'information') { 298 if (($element['field_code'] == 'target_keyword') && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store']) && isset($field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status'])) { 299 if ($element['store_id'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store'] && $field_info['sheet'][$element['sheet_code']]['field'][$element['field_code']]['multi_store_status']) { 300 $target_keyword_store_id = $element['store_id']; 301 } else { 302 $target_keyword_store_id = 0; 303 } 304 305 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'information_id=" . (int)$element['element_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$element['language_id'] . "'"); 306 307 if ($element['value']) { 308 preg_match_all('/\[[^]]+\]/', $element['value'], $keywords); 309 310 $sort_order = 1; 311 $this->request->post['value'] = ''; 312 313 foreach ($keywords[0] as $keyword) { 314 $keyword = substr($keyword, 1, strlen($keyword) - 2); 315 316 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'information_id=" . (int)$element['element_id'] . "', store_id='" . (int)$target_keyword_store_id . "', language_id = '" . (int)$element['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 317 318 $sort_order++; 319 $this->request->post['value'] .= '[' . $keyword . ']'; 320 } 321 } 322 } 323 } 324 } 325 326 /* 327 * Return Export Elements for Manager. 328 */ 329 public function getExportElements($data) { 330 $field_info = $this->load->controller('extension/module/d_seo_module/getFieldInfo'); 331 332 if ($data['sheet_code'] == 'category') { 333 $categories = array(); 334 $implode = array(); 335 $add = ''; 336 337 foreach ($data['fields'] as $field) { 338 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 339 if ($field['code'] == 'target_keyword') { 340 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 341 342 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 343 $target_keyword_store_id = $data['store_id']; 344 } else { 345 $target_keyword_store_id = 0; 346 } 347 348 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('category_id=', c.category_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = cd.language_id)"; 349 } 350 } 351 } 352 353 if ($implode) { 354 $query = $this->db->query("SELECT c.category_id, cd.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = c.category_id)" . $add . " GROUP BY c.category_id, cd.language_id"); 355 356 foreach ($query->rows as $result) { 357 $categories[$result['category_id']]['category_id'] = $result['category_id']; 358 359 foreach ($result as $field => $value) { 360 if (($field != 'category_id') && ($field != 'language_id')) { 361 $categories[$result['category_id']][$field][$result['language_id']] = $value; 362 } 363 } 364 } 365 } 366 367 return $categories; 368 } 369 370 if ($data['sheet_code'] == 'product') { 371 $products = array(); 372 $implode = array(); 373 $add = ''; 374 375 foreach ($data['fields'] as $field) { 376 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 377 if ($field['code'] == 'target_keyword') { 378 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 379 380 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 381 $target_keyword_store_id = $data['store_id']; 382 } else { 383 $target_keyword_store_id = 0; 384 } 385 386 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('product_id=', p.product_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = pd.language_id)"; 387 } 388 } 389 } 390 391 if ($implode) { 392 $query = $this->db->query("SELECT p.product_id, pd.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)" . $add . " GROUP BY p.product_id, pd.language_id"); 393 394 foreach ($query->rows as $result) { 395 $products[$result['product_id']]['product_id'] = $result['product_id']; 396 397 foreach ($result as $field => $value) { 398 if (($field != 'product_id') && ($field != 'language_id')) { 399 $products[$result['product_id']][$field][$result['language_id']] = $value; 400 } 401 } 402 } 403 } 404 405 return $products; 406 } 407 408 if ($data['sheet_code'] == 'manufacturer') { 409 $manufacturers = array(); 410 $implode = array(); 411 $add = ''; 412 413 foreach ($data['fields'] as $field) { 414 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 415 if ($field['code'] == 'target_keyword') { 416 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 417 418 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 419 $target_keyword_store_id = $data['store_id']; 420 } else { 421 $target_keyword_store_id = 0; 422 } 423 424 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('manufacturer_id=', m.manufacturer_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = l.language_id)"; 425 } 426 } 427 } 428 429 if ($implode) { 430 $query = $this->db->query("SELECT m.manufacturer_id, l.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "manufacturer m CROSS JOIN " . DB_PREFIX . "language l" . $add . " GROUP BY m.manufacturer_id, l.language_id"); 431 432 foreach ($query->rows as $result) { 433 $manufacturers[$result['manufacturer_id']]['manufacturer_id'] = $result['manufacturer_id']; 434 435 foreach ($result as $field => $value) { 436 if (($field != 'manufacturer_id') && ($field != 'language_id')) { 437 $manufacturers[$result['manufacturer_id']][$field][$result['language_id']] = $value; 438 } 439 } 440 } 441 } 442 443 return $manufacturers; 444 } 445 446 if ($data['sheet_code'] == 'information') { 447 $informations = array(); 448 $implode = array(); 449 $add = ''; 450 451 foreach ($data['fields'] as $field) { 452 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 453 if ($field['code'] == 'target_keyword') { 454 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 455 456 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 457 $target_keyword_store_id = $data['store_id']; 458 } else { 459 $target_keyword_store_id = 0; 460 } 461 462 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('information_id=', i.information_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = id.language_id)"; 463 } 464 } 465 } 466 467 if ($implode) { 468 $query = $this->db->query("SELECT i.information_id, id.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "information i LEFT JOIN " . DB_PREFIX . "information_description id ON (id.information_id = i.information_id)" . $add . " GROUP BY i.information_id, id.language_id"); 469 470 foreach ($query->rows as $result) { 471 $informations[$result['information_id']]['information_id'] = $result['information_id']; 472 473 foreach ($result as $field => $value) { 474 if (($field != 'information_id') && ($field != 'language_id')) { 475 $informations[$result['information_id']][$field][$result['language_id']] = $value; 476 } 477 } 478 } 479 } 480 481 return $informations; 482 } 483 } 484 485 /* 486 * Save Import Elements for Manager. 487 */ 488 public function saveImportElements($data) { 489 $this->load->model('extension/module/' . $this->codename); 490 491 $languages = $this->{'model_extension_module_' . $this->codename}->getLanguages(); 492 493 $field_info = $this->load->controller('extension/module/d_seo_module/getFieldInfo'); 494 495 if ($data['sheet_code'] == 'category') { 496 $categories = array(); 497 $implode = array(); 498 $add = ''; 499 500 foreach ($data['fields'] as $field) { 501 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 502 if ($field['code'] == 'target_keyword') { 503 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 504 505 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 506 $target_keyword_store_id = $data['store_id']; 507 } else { 508 $target_keyword_store_id = 0; 509 } 510 511 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('category_id=', c.category_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = cd.language_id)"; 512 } 513 } 514 } 515 516 if ($implode) { 517 $query = $this->db->query("SELECT c.category_id, cd.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (cd.category_id = c.category_id)" . $add . " GROUP BY c.category_id, cd.language_id"); 518 519 foreach ($query->rows as $result) { 520 $categories[$result['category_id']]['category_id'] = $result['category_id']; 521 522 foreach ($result as $field => $value) { 523 if (($field != 'category_id') && ($field != 'language_id')) { 524 $categories[$result['category_id']][$field][$result['language_id']] = $value; 525 } 526 } 527 } 528 } 529 530 foreach ($data['elements'] as $element) { 531 if (isset($categories[$element['category_id']])) { 532 $category = $categories[$element['category_id']]; 533 534 foreach ($languages as $language) { 535 if (isset($element['target_keyword'][$language['language_id']])) { 536 if ((isset($category['target_keyword'][$language['language_id']]) && ($element['target_keyword'][$language['language_id']] != $category['target_keyword'][$language['language_id']])) || !isset($category['target_keyword'][$language['language_id']])) { 537 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store_status']) { 538 $target_keyword_store_id = $data['store_id']; 539 } else { 540 $target_keyword_store_id = 0; 541 } 542 543 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'category_id=" . (int)$category['category_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$language['language_id'] . "'"); 544 545 if ($element['target_keyword'][$language['language_id']]) { 546 preg_match_all('/\[[^]]+\]/', $element['target_keyword'][$language['language_id']], $keywords); 547 548 $sort_order = 1; 549 550 foreach ($keywords[0] as $keyword) { 551 $keyword = substr($keyword, 1, strlen($keyword) - 2); 552 553 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'category_id=" . (int)$category['category_id'] . "', store_id = '" . (int)$target_keyword_store_id . "', language_id = '" . (int)$language['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 554 555 $sort_order++; 556 } 557 } 558 } 559 } 560 } 561 } 562 } 563 } 564 565 if ($data['sheet_code'] == 'product') { 566 $products = array(); 567 $implode = array(); 568 $add = ''; 569 570 foreach ($data['fields'] as $field) { 571 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 572 if ($field['code'] == 'target_keyword') { 573 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 574 575 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 576 $target_keyword_store_id = $data['store_id']; 577 } else { 578 $target_keyword_store_id = 0; 579 } 580 581 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('product_id=', p.product_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = pd.language_id)"; 582 } 583 } 584 } 585 586 if ($implode) { 587 $query = $this->db->query("SELECT p.product_id, pd.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)" . $add . " GROUP BY p.product_id, pd.language_id"); 588 589 foreach ($query->rows as $result) { 590 $products[$result['product_id']]['product_id'] = $result['product_id']; 591 592 foreach ($result as $field => $value) { 593 if (($field != 'product_id') && ($field != 'language_id')) { 594 $products[$result['product_id']][$field][$result['language_id']] = $value; 595 } 596 } 597 } 598 } 599 600 foreach ($data['elements'] as $element) { 601 if (isset($products[$element['product_id']])) { 602 $product = $products[$element['product_id']]; 603 604 foreach ($languages as $language) { 605 if (isset($element['target_keyword'][$language['language_id']])) { 606 if ((isset($product['target_keyword'][$language['language_id']]) && ($element['target_keyword'][$language['language_id']] != $product['target_keyword'][$language['language_id']])) || !isset($product['target_keyword'][$language['language_id']])) { 607 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store_status']) { 608 $target_keyword_store_id = $data['store_id']; 609 } else { 610 $target_keyword_store_id = 0; 611 } 612 613 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'product_id=" . (int)$product['product_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$language['language_id'] . "'"); 614 615 if ($element['target_keyword'][$language['language_id']]) { 616 preg_match_all('/\[[^]]+\]/', $element['target_keyword'][$language['language_id']], $keywords); 617 618 $sort_order = 1; 619 620 foreach ($keywords[0] as $keyword) { 621 $keyword = substr($keyword, 1, strlen($keyword) - 2); 622 623 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'product_id=" . (int)$product['product_id'] . "', store_id = '" . (int)$target_keyword_store_id . "', language_id = '" . (int)$language['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 624 625 $sort_order++; 626 } 627 } 628 } 629 } 630 } 631 } 632 } 633 } 634 635 if ($data['sheet_code'] == 'manufacturer') { 636 $manufacturers = array(); 637 $implode = array(); 638 $add = ''; 639 640 foreach ($data['fields'] as $field) { 641 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 642 if ($field['code'] == 'target_keyword') { 643 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 644 645 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 646 $target_keyword_store_id = $data['store_id']; 647 } else { 648 $target_keyword_store_id = 0; 649 } 650 651 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('manufacturer_id=', m.manufacturer_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = l.language_id)"; 652 } 653 } 654 } 655 656 if ($implode) { 657 $query = $this->db->query("SELECT m.manufacturer_id, l.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "manufacturer m CROSS JOIN " . DB_PREFIX . "language l" . $add . " GROUP BY m.manufacturer_id, l.language_id"); 658 659 foreach ($query->rows as $result) { 660 $manufacturers[$result['manufacturer_id']]['manufacturer_id'] = $result['manufacturer_id']; 661 662 foreach ($result as $field => $value) { 663 if (($field != 'manufacturer_id') && ($field != 'language_id')) { 664 $manufacturers[$result['manufacturer_id']][$field][$result['language_id']] = $value; 665 } 666 } 667 } 668 } 669 670 foreach ($data['elements'] as $element) { 671 if (isset($manufacturers[$element['manufacturer_id']])) { 672 $manufacturer = $manufacturers[$element['manufacturer_id']]; 673 674 foreach ($languages as $language) { 675 if (isset($element['target_keyword'][$language['language_id']])) { 676 if ((isset($manufacturer['target_keyword'][$language['language_id']]) && ($element['target_keyword'][$language['language_id']] != $manufacturer['target_keyword'][$language['language_id']])) || !isset($manufacturer['target_keyword'][$language['language_id']])) { 677 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store_status']) { 678 $target_keyword_store_id = $data['store_id']; 679 } else { 680 $target_keyword_store_id = 0; 681 } 682 683 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'manufacturer_id=" . (int)$manufacturer['manufacturer_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$language['language_id'] . "'"); 684 685 if ($element['target_keyword'][$language['language_id']]) { 686 preg_match_all('/\[[^]]+\]/', $element['target_keyword'][$language['language_id']], $keywords); 687 688 $sort_order = 1; 689 690 foreach ($keywords[0] as $keyword) { 691 $keyword = substr($keyword, 1, strlen($keyword) - 2); 692 693 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'manufacturer_id=" . (int)$manufacturer['manufacturer_id'] . "', store_id = '" . (int)$target_keyword_store_id . "', language_id = '" . (int)$language['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 694 695 $sort_order++; 696 } 697 } 698 } 699 } 700 } 701 } 702 } 703 } 704 705 if ($data['sheet_code'] == 'information') { 706 $informations = array(); 707 $implode = array(); 708 $add = ''; 709 710 foreach ($data['fields'] as $field) { 711 if (isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store']) && isset($field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status'])) { 712 if ($field['code'] == 'target_keyword') { 713 $implode[] = "CONCAT('[', GROUP_CONCAT(DISTINCT tk.keyword ORDER BY tk.sort_order SEPARATOR ']['), ']') as target_keyword"; 714 715 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field'][$field['code']]['multi_store_status']) { 716 $target_keyword_store_id = $data['store_id']; 717 } else { 718 $target_keyword_store_id = 0; 719 } 720 721 $add .= " LEFT JOIN " . DB_PREFIX . "d_target_keyword tk ON (tk.route = CONCAT('information_id=', i.information_id) AND tk.store_id = '" . (int)$target_keyword_store_id . "' AND tk.language_id = id.language_id)"; 722 } 723 } 724 } 725 726 if ($implode) { 727 $query = $this->db->query("SELECT i.information_id, id.language_id, " . implode(', ', $implode) . " FROM " . DB_PREFIX . "information i LEFT JOIN " . DB_PREFIX . "information_description id ON (id.information_id = i.information_id)" . $add . " GROUP BY i.information_id, id.language_id"); 728 729 foreach ($query->rows as $result) { 730 $informations[$result['information_id']]['information_id'] = $result['information_id']; 731 732 foreach ($result as $field => $value) { 733 if (($field != 'information_id') && ($field != 'language_id')) { 734 $informations[$result['information_id']][$field][$result['language_id']] = $value; 735 } 736 } 737 } 738 } 739 740 foreach ($data['elements'] as $element) { 741 if (isset($informations[$element['information_id']])) { 742 $information = $informations[$element['information_id']]; 743 744 foreach ($languages as $language) { 745 if (isset($element['target_keyword'][$language['language_id']])) { 746 if ((isset($information['target_keyword'][$language['language_id']]) && ($element['target_keyword'][$language['language_id']] != $information['target_keyword'][$language['language_id']])) || !isset($information['target_keyword'][$language['language_id']])) { 747 if ($data['store_id'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store'] && $field_info['sheet'][$data['sheet_code']]['field']['target_keyword']['multi_store_status']) { 748 $target_keyword_store_id = $data['store_id']; 749 } else { 750 $target_keyword_store_id = 0; 751 } 752 753 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route = 'information_id=" . (int)$information['information_id'] . "' AND store_id = '" . (int)$target_keyword_store_id . "' AND language_id = '" . (int)$language['language_id'] . "'"); 754 755 if ($element['target_keyword'][$language['language_id']]) { 756 preg_match_all('/\[[^]]+\]/', $element['target_keyword'][$language['language_id']], $keywords); 757 758 $sort_order = 1; 759 760 foreach ($keywords[0] as $keyword) { 761 $keyword = substr($keyword, 1, strlen($keyword) - 2); 762 763 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword SET route = 'information_id=" . (int)$information['information_id'] . "', store_id = '" . (int)$target_keyword_store_id . "', language_id = '" . (int)$language['language_id'] . "', sort_order = '" . $sort_order . "', keyword = '" . $this->db->escape($keyword) . "'"); 764 765 $sort_order++; 766 } 767 } 768 } 769 } 770 } 771 } 772 } 773 } 774 } 775 } 776 ?>