d_seo_module.php (8128B)
1 <?php 2 class ModelExtensionModuleDSEOModule extends Model { 3 private $codename = 'd_seo_module'; 4 5 /* 6 * Save File Data. 7 */ 8 public function saveFileData($file, $data) { 9 $dir = str_replace('system/', '', DIR_SYSTEM); 10 11 if ($file == 'htaccess') { 12 $file_on = $dir . '.htaccess'; 13 $file_off = $dir . '._htaccess'; 14 } 15 16 if ($file == 'robots') { 17 $file_on = $dir . 'robots.txt'; 18 $file_off = $dir . '_robots.txt'; 19 } 20 21 if ($data['status']) { 22 if (file_exists($file_off)) unlink($file_off); 23 $fh = fopen($file_on, 'w'); 24 fwrite($fh, html_entity_decode($data['text'])); 25 fclose($fh); 26 } else { 27 if (file_exists($file_on)) unlink($file_on); 28 $fh = fopen($file_off, 'w'); 29 fwrite($fh, html_entity_decode($data['text'])); 30 fclose($fh); 31 } 32 } 33 34 /* 35 * Return File Data. 36 */ 37 public function getFileData($file) { 38 $dir = str_replace('system/', '', DIR_SYSTEM); 39 40 if ($file == 'htaccess') { 41 $file_on = $dir . '.htaccess'; 42 $file_off = $dir . '._htaccess'; 43 } 44 45 if ($file == 'robots') { 46 $file_on = $dir . 'robots.txt'; 47 $file_off = $dir . '_robots.txt'; 48 } 49 50 $data = array(); 51 52 if (file_exists($file_on)) { 53 $data['status'] = true; 54 $fh = fopen($file_on, 'r'); 55 $data['text'] = fread($fh, filesize($file_on) + 1); 56 fclose($fh); 57 } else { 58 if (file_exists($file_off)) { 59 $data['status'] = false; 60 $fh = fopen($file_off, 'r'); 61 $data['text'] = fread($fh, filesize($file_off) + 1); 62 fclose($fh); 63 } else { 64 $data['status'] = false; 65 $data['text'] = ''; 66 } 67 } 68 69 return $data; 70 } 71 72 /* 73 * Create Default Target Elements. 74 */ 75 public function createDefaultTargetElements($default_target_keywords, $store_id = 0) { 76 $languages = $this->getLanguages(); 77 78 $this->db->query("DELETE FROM " . DB_PREFIX . "d_target_keyword WHERE route LIKE '%/%' AND store_id = '" . (int)$store_id . "'"); 79 80 foreach ($languages as $language) { 81 $implode = array(); 82 83 foreach ($default_target_keywords as $route => $target_keyword) { 84 $sort_order = 1; 85 86 foreach ($target_keyword as $keyword) { 87 $implode[] = "('" . $route . "', '" . (int)$store_id . "', '" . (int)$language['language_id'] . "', '" . $sort_order . "', '" . $keyword . "')"; 88 89 $sort_order++; 90 } 91 } 92 93 if ($implode) { 94 $this->db->query("INSERT INTO " . DB_PREFIX . "d_target_keyword (route, store_id, language_id, sort_order, keyword) VALUES " . implode(', ', $implode)); 95 } 96 } 97 } 98 99 /* 100 * Save SEO extensions. 101 */ 102 public function saveSEOExtensions($seo_extensions) { 103 $this->load->model('setting/setting'); 104 105 $setting['d_seo_extension_install'] = $seo_extensions; 106 107 $this->model_setting_setting->editSetting('d_seo_extension', $setting); 108 } 109 110 /* 111 * Return list of SEO extensions. 112 */ 113 public function getSEOExtensions() { 114 $this->load->model('setting/setting'); 115 116 $seo_extensions = array(); 117 118 $files = glob(DIR_APPLICATION . 'controller/extension/' . $this->codename . '/*.php'); 119 120 if ($files) { 121 foreach ($files as $file) { 122 $seo_extensions[] = basename($file, '.php'); 123 } 124 } 125 126 return $seo_extensions; 127 } 128 129 /* 130 * Return list of installed SEO extensions. 131 */ 132 public function getInstalledSEOExtensions() { 133 $this->load->model('setting/setting'); 134 135 $installed_extensions = array(); 136 137 $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "extension ORDER BY code"); 138 139 foreach ($query->rows as $result) { 140 $installed_extensions[] = $result['code']; 141 } 142 143 $installed_seo_extensions = $this->model_setting_setting->getSetting('d_seo_extension'); 144 $installed_seo_extensions = isset($installed_seo_extensions['d_seo_extension_install']) ? $installed_seo_extensions['d_seo_extension_install'] : array(); 145 146 $seo_extensions = array(); 147 148 $files = glob(DIR_APPLICATION . 'controller/extension/' . $this->codename . '/*.php'); 149 150 if ($files) { 151 foreach ($files as $file) { 152 $seo_extension = basename($file, '.php'); 153 154 if (in_array($seo_extension, $installed_extensions) && in_array($seo_extension, $installed_seo_extensions)) { 155 $seo_extensions[] = $seo_extension; 156 } 157 } 158 } 159 160 return $seo_extensions; 161 } 162 163 /* 164 * Return list of languages. 165 */ 166 public function getLanguages() { 167 $this->load->model('localisation/language'); 168 169 $languages = $this->model_localisation_language->getLanguages(); 170 171 foreach ($languages as $key => $language) { 172 if (VERSION >= '2.2.0.0') { 173 $languages[$key]['flag'] = 'language/' . $language['code'] . '/' . $language['code'] . '.png'; 174 } else { 175 $languages[$key]['flag'] = 'view/image/flags/' . $language['image']; 176 } 177 } 178 179 return $languages; 180 } 181 182 /* 183 * Return list of stores. 184 */ 185 public function getStores() { 186 $this->load->model('setting/store'); 187 188 $result = array(); 189 190 $result[] = array( 191 'store_id' => 0, 192 'name' => $this->config->get('config_name') 193 ); 194 195 $stores = $this->model_setting_store->getStores(); 196 197 if ($stores) { 198 foreach ($stores as $store) { 199 $result[] = array( 200 'store_id' => $store['store_id'], 201 'name' => $store['name'] 202 ); 203 } 204 } 205 206 return $result; 207 } 208 209 /* 210 * Return store. 211 */ 212 public function getStore($store_id) { 213 $this->load->model('setting/store'); 214 215 $result = array(); 216 217 if ($store_id == 0) { 218 $result = array( 219 'store_id' => 0, 220 'name' => $this->config->get('config_name'), 221 'url' => HTTP_CATALOG, 222 'ssl' => HTTPS_CATALOG 223 ); 224 } else { 225 $store = $this->model_setting_store->getStore($store_id); 226 227 $result = array( 228 'store_id' => $store['store_id'], 229 'name' => $store['name'], 230 'url' => $store['url'], 231 'ssl' => $store['ssl'] 232 ); 233 } 234 235 return $result; 236 } 237 238 /* 239 * Return URL Info. 240 */ 241 public function getURLInfo($url) { 242 $url_info = parse_url(str_replace('&', '&', $url)); 243 244 $url_info['scheme'] = isset($url_info['scheme']) ? $url_info['scheme'] . '://' : ''; 245 $url_info['user'] = isset($url_info['user']) ? $url_info['user'] : ''; 246 $url_info['pass'] = isset($url_info['pass']) ? ':' . $url_info['pass'] : ''; 247 $url_info['pass'] = ($url_info['user'] || $url_info['pass']) ? $url_info['pass'] . '@' : ''; 248 $url_info['host'] = isset($url_info['host']) ? $url_info['host'] : ''; 249 $url_info['port'] = isset($url_info['port']) ? ':' . $url_info['port'] : ''; 250 $url_info['path'] = isset($url_info['path']) ? $url_info['path'] : ''; 251 252 $url_info['data'] = array(); 253 254 if (isset($url_info['query'])) { 255 parse_str($url_info['query'], $url_info['data']); 256 } 257 258 $url_info['query'] = isset($url_info['query']) ? '?' . $url_info['query'] : ''; 259 $url_info['fragment'] = isset($url_info['fragment']) ? '#' . $url_info['fragment'] : ''; 260 261 return $url_info; 262 } 263 264 /* 265 * Sort Array By Column. 266 */ 267 public function sortArrayByColumn($arr, $col, $dir = SORT_ASC) { 268 $sort_col = array(); 269 $sort_key = array(); 270 271 foreach ($arr as $key => $row) { 272 $sort_key[$key] = $key; 273 274 if (isset($row[$col])) { 275 $sort_col[$key] = $row[$col]; 276 } else { 277 $sort_col[$key] = ''; 278 } 279 } 280 281 array_multisort($sort_col, $dir, $sort_key, SORT_ASC, $arr); 282 283 return $arr; 284 } 285 286 /* 287 * Install. 288 */ 289 public function installExtension() { 290 if (VERSION < '3.0.0.0') { 291 $this->db->query("ALTER TABLE " . DB_PREFIX . "setting MODIFY code VARCHAR(128) NOT NULL"); 292 } 293 294 $this->db->query("DROP TABLE IF EXISTS " . DB_PREFIX . "d_target_keyword"); 295 296 $this->db->query("CREATE TABLE " . DB_PREFIX . "d_target_keyword (route VARCHAR(255) NOT NULL, store_id INT(11) NOT NULL, language_id INT(11) NOT NULL, sort_order INT(3) NOT NULL, keyword VARCHAR(255) NOT NULL, PRIMARY KEY (route, store_id, language_id, sort_order), KEY keyword (keyword)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); 297 } 298 299 /* 300 * Uninstall. 301 */ 302 public function uninstallExtension() { 303 $this->db->query("DROP TABLE IF EXISTS " . DB_PREFIX . "d_target_keyword"); 304 $this->db->query("DROP TABLE IF EXISTS " . DB_PREFIX . "d_meta_data"); 305 $this->db->query("DROP TABLE IF EXISTS " . DB_PREFIX . "d_url_keyword"); 306 } 307 } 308 ?>