1: | <?php
|
2: |
|
3: | if (!class_exists('ProtectorRegistry')) {
|
4: | exit('Registry not found');
|
5: | }
|
6: |
|
7: | $registry = ProtectorRegistry::getInstance();
|
8: | $mydirname = $registry->getEntry('mydirname');
|
9: | $mydirpath = $registry->getEntry('mydirpath');
|
10: | $language = $registry->getEntry('language');
|
11: |
|
12: |
|
13: | eval(' function xoops_module_update_' . $mydirname . '( $module ) { return protector_onupdate_base( $module , "' . $mydirname . '" ) ; } ');
|
14: |
|
15: | if (!function_exists('protector_onupdate_base')) {
|
16: |
|
17: | |
18: | |
19: | |
20: | |
21: | |
22: |
|
23: | function protector_onupdate_base($module, $mydirname)
|
24: | {
|
25: |
|
26: |
|
27: |
|
28: | global $msgs;
|
29: |
|
30: | if (!is_array($msgs)) {
|
31: | $msgs = array();
|
32: | }
|
33: |
|
34: |
|
35: | $db = XoopsDatabaseFactory::getDatabaseConnection();
|
36: | $mid = $module->getVar('mid');
|
37: |
|
38: |
|
39: |
|
40: |
|
41: | $sql = 'SHOW COLUMNS FROM ' . $db->prefix('config') . " LIKE 'conf_title'";
|
42: | $result = $db->query($sql);
|
43: | if ($result !== false && $db->isResultSet($result)) {
|
44: | if ($result instanceof mysqli_result && ($myrow = $db->fetchArray($result)) && isset($myrow['Type']) && $myrow['Type'] === 'varchar(30)') {
|
45: | $db->queryF('ALTER TABLE ' . $db->prefix('config') . " MODIFY `conf_title` varchar(255) NOT NULL default '', MODIFY `conf_desc` varchar(255) NOT NULL default ''");
|
46: | }
|
47: | }
|
48: |
|
49: | $sql = 'SHOW CREATE TABLE ' . $db->prefix('config');
|
50: | $result = $db->query($sql);
|
51: | if (false === $result || !($result instanceof mysqli_result) || !$db->isResultSet($result)) {
|
52: | throw new \RuntimeException(
|
53: | \sprintf(_DB_QUERY_ERROR, $sql) . $db->error(), E_USER_ERROR
|
54: | );
|
55: | } else {
|
56: | list(, $create_string) = $db->fetchRow($result);
|
57: | }
|
58: |
|
59: |
|
60: | foreach (explode('KEY', $create_string) as $line) {
|
61: | if (preg_match('/(\`conf\_title_\d+\`) \(\`conf\_title\`\)/', $line, $regs)) {
|
62: | $db->query('ALTER TABLE ' . $db->prefix('config') . ' DROP KEY ' . $regs[1]);
|
63: | }
|
64: | }
|
65: | $db->query('ALTER TABLE ' . $db->prefix('config') . ' ADD KEY `conf_title` (`conf_title`)');
|
66: |
|
67: |
|
68: | $sql = 'SHOW CREATE TABLE ' . $db->prefix($mydirname . '_log');
|
69: | $result = $db->query($sql);
|
70: |
|
71: | if (false === $result || !($result instanceof mysqli_result) || !$db->isResultSet($result)) {
|
72: | throw new \RuntimeException(
|
73: | \sprintf(_DB_QUERY_ERROR, $sql) . $db->error(), E_USER_ERROR
|
74: | );
|
75: | } else {
|
76: | list(, $create_string) = $db->fetchRow($result);
|
77: | }
|
78: |
|
79: |
|
80: | if (preg_match('/timestamp\(/i', $create_string)) {
|
81: | $db->query('ALTER TABLE ' . $db->prefix($mydirname . '_log') . ' MODIFY `timestamp` DATETIME');
|
82: | }
|
83: |
|
84: |
|
85: |
|
86: | $tplfile_handler = xoops_getHandler('tplfile');
|
87: | $tpl_path = __DIR__ . '/templates';
|
88: |
|
89: | if (is_dir($tpl_path) && is_readable($tpl_path)) {
|
90: |
|
91: | if ($handler = opendir($tpl_path . '/')) {
|
92: | while (($file = readdir($handler)) !== false) {
|
93: | if (substr($file, 0, 1) === '.') {
|
94: | continue;
|
95: | }
|
96: | $file_path = $tpl_path . '/' . $file;
|
97: | if (is_file($file_path) && in_array(strrchr($file, '.'), array('.html', '.css', '.js'))) {
|
98: | $mtime = (int)(@filemtime($file_path));
|
99: | $tplfile = $tplfile_handler->create();
|
100: | $tplfile->setVar('tpl_source', file_get_contents($file_path), true);
|
101: | $tplfile->setVar('tpl_refid', $mid);
|
102: | $tplfile->setVar('tpl_tplset', 'default');
|
103: | $tplfile->setVar('tpl_file', $mydirname . '_' . $file);
|
104: | $tplfile->setVar('tpl_desc', '', true);
|
105: | $tplfile->setVar('tpl_module', $mydirname);
|
106: | $tplfile->setVar('tpl_lastmodified', $mtime);
|
107: | $tplfile->setVar('tpl_lastimported', 0);
|
108: | $tplfile->setVar('tpl_type', 'module');
|
109: | if (!$tplfile_handler->insert($tplfile)) {
|
110: | $ret[] = '<span style="color:#ff0000;">ERROR: Could not insert template <b>' . htmlspecialchars($mydirname . '_' . $file, ENT_QUOTES) . '</b> to the database.</span><br>';
|
111: | } else {
|
112: | $tplid = $tplfile->getVar('tpl_id');
|
113: | $msgs[] = 'Template <b>' . htmlspecialchars($mydirname . '_' . $file, ENT_QUOTES) . '</b> added to the database. (ID: <b>' . $tplid . '</b>)<br>';
|
114: |
|
115: | include_once XOOPS_ROOT_PATH . '/class/xoopsblock.php';
|
116: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
117: | if (!xoops_template_touch((string)$tplid)) {
|
118: | $msgs[] = '<span style="color:#ff0000;">ERROR: Failed compiling template <b>' . htmlspecialchars($mydirname . '_' . $file, ENT_QUOTES) . '</b>.</span><br>';
|
119: | } else {
|
120: | $msgs[] = 'Template <b>' . htmlspecialchars($mydirname . '_' . $file, ENT_QUOTES) . '</b> compiled.</span><br>';
|
121: | }
|
122: | }
|
123: | }
|
124: | }
|
125: | closedir($handler);
|
126: | } else {
|
127: |
|
128: | $msgs[] = '<span style="color:#ff0000;">ERROR: Could not open the template directory: <b>' . htmlspecialchars($tpl_path) . '</b>.</span>';
|
129: | }
|
130: | } else {
|
131: |
|
132: | $msgs[] = '<span style="color:#ff0000;">ERROR: The template directory does not exist or is not readable: <b>' . htmlspecialchars($tpl_path) . '</b>.</span><br>';
|
133: | }
|
134: |
|
135: | include_once XOOPS_ROOT_PATH . '/class/xoopsblock.php';
|
136: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
137: | xoops_template_clear_module_cache($mid);
|
138: |
|
139: | return true;
|
140: | }
|
141: |
|
142: | |
143: | |
144: | |
145: |
|
146: | function protector_message_append_onupdate(&$module_obj, &$log)
|
147: | {
|
148: | if (isset($GLOBALS['msgs']) && is_array($GLOBALS['msgs'])) {
|
149: | foreach ($GLOBALS['msgs'] as $message) {
|
150: | $log->add(strip_tags($message));
|
151: | }
|
152: | }
|
153: |
|
154: |
|
155: | }
|
156: | }
|
157: | |