| 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: | |