XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
module.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
8 class module extends ModuleObject
9 {
13  function moduleInstall()
14  {
15  // Register action forward (to use in administrator mode)
17 
18  $oDB = &DB::getInstance();
19  $oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"), true);
20  $oDB->addIndex('sites','unique_domain',array('domain'),true);
21  // Create a directory to use in the module module
22  FileHandler::makeDir('./files/cache/module_info');
23  FileHandler::makeDir('./files/cache/triggers');
24  FileHandler::makeDir('./files/ruleset');
25 
26  // Insert site information into the sites table
27  $args = new stdClass;
28  $args->site_srl = 0;
29  $output = $oDB->executeQuery('module.getSite', $args);
30  if(!$output->data || !$output->data->index_module_srl)
31  {
32  $db_info = Context::getDBInfo();
33  $domain = Context::getDefaultUrl();
34  $url_info = parse_url($domain);
35  $domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
36 
37  $site_args = new stdClass;
38  $site_args->site_srl = 0;
39  $site_args->index_module_srl = 0;
40  $site_args->domain = $domain;
41  $site_args->default_language = $db_info->lang_type;
42 
43  $output = executeQuery('module.insertSite', $site_args);
44  if(!$output->toBool()) return $output;
45  }
46 
47  return new BaseObject();
48  }
49 
53  function checkUpdate()
54  {
55  $oDB = &DB::getInstance();
56  $oModuleModel = getModel('module');
58  $version_update_id = implode('.', array(__CLASS__, __XE_VERSION__, 'updated'));
59  if($oModuleModel->needUpdate($version_update_id))
60  {
61  // 2008. 10. 27 Add multi-index in the table, the module_part_config
62  if(!$oDB->isIndexExists("module_part_config","idx_module_part_config")) return true;
63  // 2008. 11. 13 Delete unique constraint on mid in modules. Add site_srl and then create unique index on site_srl and mid
64  if(!$oDB->isIndexExists('modules',"idx_site_mid")) return true;
65  // Move permissions/skin information of all modules to the table, grants.
66  if($oDB->isColumnExists('modules', 'grants')) return true;
67  // Move permissions/skin information of all modules to the table, grants.
68  if(!$oDB->isColumnExists('sites', 'default_language')) return true;
69  // Delete extra_vars* column
70  for($i=1;$i<=20;$i++)
71  {
72  if($oDB->isColumnExists("documents","extra_vars".$i)) return true;
73  }
74  // Insert site information to the table, sites
75  $args = new stdClass();
76  $args->site_srl = 0;
77  $output = $oDB->executeQuery('module.getSite', $args);
78  if(!$output->data) return true;
79 
80  // If domain index is defined on the table, sites
81  if($oDB->isIndexExists('sites', 'idx_domain')) return true;
82  if(!$oDB->isIndexExists('sites','unique_domain')) return true;
83 
84  if(!$oDB->isColumnExists("modules", "use_mobile")) return true;
85  if(!$oDB->isColumnExists("modules", "mlayout_srl")) return true;
86  if(!$oDB->isColumnExists("modules", "mcontent")) return true;
87  if(!$oDB->isColumnExists("modules", "mskin")) return true;
88 
89  // check fix skin
90  if(!$oDB->isColumnExists("modules", "is_skin_fix")) return true;
91 
92  if(!$oDB->isColumnExists("module_config", "site_srl")) return true;
93 
94  $args->skin = '.';
95  $output = executeQueryArray('module.getModuleSkinDotList', $args);
96  if($output->data && count($output->data) > 0)
97  {
98  foreach($output->data as $item)
99  {
100  $skin_path = explode('.', $item->skin);
101  if(count($skin_path) != 2) continue;
102  if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1]))) return true;
103  }
104  }
105 
106  // XE 1.7
107 
108  // check fix mskin
109  if(!$oDB->isColumnExists("modules", "is_mskin_fix")) return true;
110 
111  if(!$oDB->isIndexExists("module_part_config", "unique_module_part_config")) return true;
112 
113  $oModuleModel = getModel('module');
114  $moduleConfig = $oModuleModel->getModuleConfig('module');
115  if(!$moduleConfig->isUpdateFixedValue) return true;
116 
117  $oModuleController->insertUpdatedLog($version_update_id);
118  }
119 
120  if(!is_dir('./files/ruleset')) return true;
121 
122  return false;
123  }
124 
128  function moduleUpdate()
129  {
130  $oDB = &DB::getInstance();
131  $oModuleModel = getModel('module');
132  $oModuleController = getController('module');
133  $version_update_id = implode('.', array(__CLASS__, __XE_VERSION__, 'updated'));
134  if($oModuleModel->needUpdate($version_update_id))
135  {
136  // 2008. 10. 27 module_part_config Add a multi-index to the table and check all information of module_configg
137  if(!$oDB->isIndexExists("module_part_config","idx_module_part_config"))
138  {
139  $oModuleModel = getModel('module');
140  $oModuleController = getController('module');
141  $modules = $oModuleModel->getModuleList();
142  foreach($modules as $key => $module_info)
143  {
144  $module = $module_info->module;
145  if(!in_array($module, array('point','trackback','layout','rss','file','comment','editor'))) continue;
146  $config = $oModuleModel->getModuleConfig($module);
147 
148  $module_config = null;
149  switch($module)
150  {
151  case 'point' :
152  $module_config = $config->module_point;
153  unset($config->module_point);
154  break;
155  case 'trackback' :
156  case 'rss' :
157  case 'file' :
158  case 'comment' :
159  case 'editor' :
160  $module_config = $config->module_config;
161  unset($config->module_config);
162  if(is_array($module_config) && count($module_config))
163  {
164  foreach($module_config as $key => $val)
165  {
166  if(isset($module_config[$key]->module_srl)) unset($module_config[$key]->module_srl);
167  }
168  }
169  break;
170  case 'layout' :
171  $tmp = $config->header_script;
172  if(is_array($tmp) && count($tmp))
173  {
174  foreach($tmp as $k => $v)
175  {
176  if(!$v && !trim($v)) continue;
177  $module_config[$k]->header_script = $v;
178  }
179  }
180  $config = null;
181  break;
182  }
183 
184  $oModuleController->insertModuleConfig($module, $config);
185 
186  if(is_array($module_config) && count($module_config))
187  {
188  foreach($module_config as $module_srl => $module_part_config)
189  {
190  $oModuleController->insertModulePartConfig($module,$module_srl,$module_part_config);
191  }
192  }
193  }
194  $oDB->addIndex("module_part_config","idx_module_part_config", array("module","module_srl"));
195  }
196  // 2008. 11. 13 drop index(unique_mid). Add a column and index on site_srl and mid columns
197  if(!$oDB->isIndexExists('modules',"idx_site_mid"))
198  {
199  $oDB->dropIndex("modules","unique_mid",true);
200  $oDB->addColumn('modules','site_srl','number',11,0,true);
201  $oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"),true);
202  }
203  // document extra vars
204  if(!$oDB->isTableExists('document_extra_vars')) $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_vars.xml');
205 
206  if(!$oDB->isTableExists('document_extra_keys')) $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_keys.xml');
207  // Move permission, skin info, extection info, admin ID of all modules to the table, grants
208  if($oDB->isColumnExists('modules', 'grants'))
209  {
210  $oModuleController = getController('module');
211  $oDocumentController = getController('document');
212  // Get a value of the current system language code
213  $lang_code = Context::getLangType();
214  // Get module_info of all modules
215  $output = executeQueryArray('module.getModuleInfos');
216  if(count($output->data))
217  {
218  foreach($output->data as $module_info)
219  {
220  // Separate information about permission granted to the module, extra vars, skin vars, super-admin's authority
221  $module_srl = trim($module_info->module_srl);
222  // grant an authority
223  $grants = unserialize($module_info->grants);
224  if($grants) $oModuleController->insertModuleGrants($module_srl, $grants);
225  // Insert skin vars
226  $skin_vars = unserialize($module_info->skin_vars);
227  if($skin_vars) $oModuleController->insertModuleSkinVars($module_srl, $skin_vars);
228  // Insert super admin's ID
229  $admin_id = trim($module_info->admin_id);
230  if($admin_id && $admin_id != 'Array')
231  {
232  $admin_ids = explode(',',$admin_id);
233  if(count($admin_id))
234  {
235  foreach($admin_ids as $admin_id)
236  {
237  $oModuleController->insertAdminId($module_srl, $admin_id);
238  }
239  }
240  }
241  // Save extra configurations for each module(column data which doesn't exist in the defaut modules)
242  $extra_vars = unserialize($module_info->extra_vars);
243  $document_extra_keys = null;
244  if($extra_vars->extra_vars && count($extra_vars->extra_vars))
245  {
246  $document_extra_keys = $extra_vars->extra_vars;
247  unset($extra_vars->extra_vars);
248  }
249  if($extra_vars) $oModuleController->insertModuleExtraVars($module_srl, $extra_vars);
250 
254  // Insert extra vars if planet module is
255  if($module_info->module == 'planet')
256  {
257  if(!$document_extra_keys || !is_array($document_extra_keys)) $document_extra_keys = array();
258  $planet_extra_keys->name = 'postscript';
259  $planet_extra_keys->type = 'text';
260  $planet_extra_keys->is_required = 'N';
261  $planet_extra_keys->search = 'N';
262  $planet_extra_keys->default = '';
263  $planet_extra_keys->desc = '';
264  $document_extra_keys[20] = $planet_extra_keys;
265  }
266  // Register keys for document extra vars
267  if(count($document_extra_keys))
268  {
269  foreach($document_extra_keys as $var_idx => $val)
270  {
271  $oDocumentController->insertDocumentExtraKey($module_srl, $var_idx, $val->name, $val->type, $val->is_required, $val->search, $val->default, $val->desc, 'extra_vars'.$var_idx);
272  }
273  // 2009-04-14 Fixed a bug that only 100 extra vars are moved
274  $oDocumentModel = getModel('document');
275  $total_count = $oDocumentModel->getDocumentCount($module_srl);
276 
277  if($total_count > 0)
278  {
279  $per_page = 100;
280  $total_pages = (int) (($total_count - 1) / $per_page) + 1;
281  // Get extra vars if exist
282  $doc_args = null;
283  $doc_args->module_srl = $module_srl;
284  $doc_args->list_count = $per_page;
285  $doc_args->sort_index = 'list_order';
286  $doc_args->order_type = 'asc';
287 
288  for($doc_args->page = 1; $doc_args->page <= $total_pages; $doc_args->page++)
289  {
290  $output = executeQueryArray('document.getDocumentList', $doc_args);
291 
292  if($output->toBool() && $output->data && count($output->data))
293  {
294  foreach ($output->data as $document)
295  {
296  if(!$document) continue;
297  foreach ($document as $key => $var)
298  {
299  if (strpos($key, 'extra_vars') !== 0 || !trim($var) || $var == 'N;') continue;
300  $var_idx = str_replace('extra_vars','',$key);
301  $oDocumentController->insertDocumentExtraVar($module_srl, $document->document_srl, $var_idx, $var, 'extra_vars'.$var_idx, $lang_code);
302  }
303  }
304  }
305  } // for total_pages
306  } // if count
307  }
308  // Additional variables of the module, remove
309  $module_info->grant = null;
310  $module_info->extra_vars = null;
311  $module_info->skin_vars = null;
312  $module_info->admin_id = null;
313  executeQuery('module.updateModule', $module_info);
314 
315  $oCacheHandler = CacheHandler::getInstance('object', null, true);
316  if($oCacheHandler->isSupport())
317  {
318  $oCacheHandler->invalidateGroupKey('site_and_module');
319  }
320  }
321  }
322  // Various column drop
323  $oDB->dropColumn('modules','grants');
324  $oDB->dropColumn('modules','admin_id');
325  $oDB->dropColumn('modules','skin_vars');
326  $oDB->dropColumn('modules','extra_vars');
327  }
328  // Rights of all modules/skins transferring the information into a table Update grants
329  if(!$oDB->isColumnExists('sites', 'default_language'))
330  {
331  $oDB->addColumn('sites','default_language','varchar',255,0,false);
332  }
333  // extra_vars * Remove Column
334  for($i=1;$i<=20;$i++)
335  {
336  if(!$oDB->isColumnExists("documents","extra_vars".$i)) continue;
337  $oDB->dropColumn('documents','extra_vars'.$i);
338  }
339 
340  // Enter the main site information sites on the table
341  $args = new stdClass;
342  $args->site_srl = 0;
343  $output = $oDB->executeQuery('module.getSite', $args);
344  if(!$output->data)
345  {
346  // Basic mid, language Wanted
347  $mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
348  $db_info = Context::getDBInfo();
349  $domain = Context::getDefaultUrl();
350  $url_info = parse_url($domain);
351  $domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
352  $site_args->site_srl = 0;
353  $site_args->index_module_srl = $mid_output->data->module_srl;
354  $site_args->domain = $domain;
355  $site_args->default_language = $db_info->lang_type;
356 
357  $output = executeQuery('module.insertSite', $site_args);
358  if(!$output->toBool()) return $output;
359  }
360 
361  if($oDB->isIndexExists('sites','idx_domain'))
362  {
363  $oDB->dropIndex('sites','idx_domain');
364  }
365  if(!$oDB->isIndexExists('sites','unique_domain'))
366  {
367  $this->updateForUniqueSiteDomain();
368  $oDB->addIndex('sites','unique_domain',array('domain'),true);
369  }
370 
371  if(!$oDB->isColumnExists("modules", "use_mobile"))
372  {
373  $oDB->addColumn('modules','use_mobile','char',1,'N');
374  }
375  if(!$oDB->isColumnExists("modules", "mlayout_srl"))
376  {
377  $oDB->addColumn('modules','mlayout_srl','number',11, 0);
378  }
379  if(!$oDB->isColumnExists("modules", "mcontent"))
380  {
381  $oDB->addColumn('modules','mcontent','bigtext');
382  }
383  if(!$oDB->isColumnExists("modules", "mskin"))
384  {
385  $oDB->addColumn('modules','mskin','varchar',250);
386  }
387  if(!$oDB->isColumnExists("modules", "is_skin_fix"))
388  {
389  $oDB->addColumn('modules', 'is_skin_fix', 'char', 1, 'N');
390  $output = executeQuery('module.updateSkinFixModules');
391  }
392  if(!$oDB->isColumnExists("module_config", "site_srl"))
393  {
394  $oDB->addColumn('module_config', 'site_srl', 'number', 11, 0, true);
395  }
396 
397  $args->skin = '.';
398  $output = executeQueryArray('module.getModuleSkinDotList', $args);
399  if($output->data && count($output->data) > 0)
400  {
401  foreach($output->data as $item)
402  {
403  $skin_path = explode('.', $item->skin);
404  if(count($skin_path) != 2) continue;
405  if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1])))
406  {
407  unset($args);
408  $args->skin = $item->skin;
409  $args->new_skin = implode('|@|', $skin_path);
410  $output = executeQuery('module.updateSkinAll', $args);
411  }
412  }
413  }
414 
415  // XE 1.7
416  if(!$oDB->isColumnExists("modules", "is_mskin_fix"))
417  {
418  $oDB->addColumn('modules', 'is_mskin_fix', 'char', 1, 'N');
419  $output = executeQuery('module.updateMobileSkinFixModules');
420  }
421 
422  $oModuleModel = getModel('module');
423  $moduleConfig = $oModuleModel->getModuleConfig('module');
424  if(!$moduleConfig->isUpdateFixedValue)
425  {
426  $output = executeQuery('module.updateSkinFixModules');
427  $output = executeQuery('module.updateMobileSkinFixModules');
428 
429  $oModuleController = getController('module');
430  if(!$moduleConfig) $moduleConfig = new stdClass;
431  $moduleConfig->isUpdateFixedValue = TRUE;
432  $output = $oModuleController->updateModuleConfig('module', $moduleConfig);
433  }
434 
435  if(!$oDB->isIndexExists("module_part_config", "unique_module_part_config"))
436  {
437  $oDB->addIndex("module_part_config", "unique_module_part_config", array("module", "module_srl"), TRUE);
438  }
439 
440  $oModuleController->insertUpdatedLog($version_update_id);
441  }
442 
443  if(!is_dir('./files/ruleset')) FileHandler::makeDir('./files/ruleset');
444 
445  return new BaseObject(0, 'success_updated');
446  }
447 
449  {
450  $output = executeQueryArray("module.getNonuniqueDomains");
451  if(!$output->data) return;
452  foreach($output->data as $data)
453  {
454  if($data->count == 1) continue;
455  $domain = $data->domain;
456  $args = new stdClass;
457  $args->domain = $domain;
458  $output2 = executeQueryArray("module.getSiteByDomain", $args);
459  $bFirst = true;
460  foreach($output2->data as $site)
461  {
462  if($bFirst)
463  {
464  $bFirst = false;
465  continue;
466  }
467  $domain .= "_";
468  $args = new stdClass;
469  $args->domain = $domain;
470  $args->site_srl = $site->site_srl;
471  $output3 = executeQuery("module.updateSite", $args);
472  }
473  }
474  }
475 
479  function recompileCache()
480  {
481  $oModuleModel = getModel('module');
482  $oModuleModel->getModuleList();
483  $oModuleModel->loadModuleExtends();
484  }
485 }
486 /* End of file module.class.php */
487 /* Location: ./modules/module/module.class.php */
recompileCache()
Re-generate the cache file.
$oModuleModel
Definition: ko.install.php:236
getController($module_name)
Definition: func.inc.php:90
const __XE_VERSION__
Definition: config.inc.php:32
$output
Definition: ko.install.php:193
& getInstance($target= 'object', $info=null, $always_use_file=false)
foreach($sitemap as $id=> &$val) $extra_vars
Definition: ko.install.php:180
moduleUpdate()
Execute update.
checkUpdate()
a method to check if successfully installed
updateForUniqueSiteDomain()
$module_srl
integer value to represent a run-time instance of Module (XE Module)
$args
Definition: ko.install.php:185
$module_info
an object containing the module information
$oDocumentModel
Definition: ko.install.php:259
getInstance($db_type=NULL)
Definition: DB.class.php:142
makeDir($path_string)
const _XE_PATH_
Definition: config.inc.php:49
$oDocumentController
Definition: ko.install.php:260
$obj module_srl
Definition: ko.install.php:270
getModel($module_name)
Definition: func.inc.php:145
executeQueryArray($query_id, $args=NULL, $arg_columns=NULL)
Definition: func.inc.php:219
moduleInstall()
Implement if additional tasks are necessary when installing.
executeQuery($query_id, $args=NULL, $arg_columns=NULL)
Definition: func.inc.php:203
$module
Class name of Xe Module that is identified by mid.
$oModuleController
Definition: ko.install.php:287
high class of the module module
Definition: module.class.php:8
$site_args
Definition: ko.install.php:296