| 1: | <?php
|
| 2: | |
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: | |
| 8: | |
| 9: | |
| 10: |
|
| 11: |
|
| 12: | |
| 13: | |
| 14: | |
| 15: | |
| 16: | |
| 17: | |
| 18: |
|
| 19: |
|
| 20: | |
| 21: | |
| 22: | |
| 23: | |
| 24: |
|
| 25: |
|
| 26: | |
| 27: | |
| 28: | |
| 29: | |
| 30: |
|
| 31: | function xoops_module_install($dirname)
|
| 32: | {
|
| 33: | global $xoopsUser, $xoopsConfig;
|
| 34: | $dirname = trim($dirname);
|
| 35: | $db =& $GLOBALS['xoopsDB'];
|
| 36: | $reservedTables = array(
|
| 37: | 'avatar',
|
| 38: | 'avatar_users_link',
|
| 39: | 'block_module_link',
|
| 40: | 'xoopscomments',
|
| 41: | 'config',
|
| 42: | 'configcategory',
|
| 43: | 'configoption',
|
| 44: | 'image',
|
| 45: | 'imagebody',
|
| 46: | 'imagecategory',
|
| 47: | 'imgset',
|
| 48: | 'imgset_tplset_link',
|
| 49: | 'imgsetimg',
|
| 50: | 'groups',
|
| 51: | 'groups_users_link',
|
| 52: | 'group_permission',
|
| 53: | 'online',
|
| 54: | 'bannerclient',
|
| 55: | 'banner',
|
| 56: | 'bannerfinish',
|
| 57: | 'priv_msgs',
|
| 58: | 'ranks',
|
| 59: | 'session',
|
| 60: | 'smiles',
|
| 61: | 'users',
|
| 62: | 'newblocks',
|
| 63: | 'modules',
|
| 64: | 'tplfile',
|
| 65: | 'tplset',
|
| 66: | 'tplsource',
|
| 67: | 'xoopsnotifications',
|
| 68: | 'banner',
|
| 69: | 'bannerclient',
|
| 70: | 'bannerfinish');
|
| 71: |
|
| 72: | $module_handler = xoops_getHandler('module');
|
| 73: | if ($module_handler->getCount(new Criteria('dirname', $dirname)) == 0) {
|
| 74: | $module = $module_handler->create();
|
| 75: | $module->loadInfoAsVar($dirname);
|
| 76: | $module->setVar('weight', 1);
|
| 77: | $module->setVar('isactive', 1);
|
| 78: | $module->setVar('last_update', time());
|
| 79: | $error = false;
|
| 80: | $errs = array();
|
| 81: | $msgs = array();
|
| 82: | $msgs[] = '<div id="xo-module-log"><div class="header">';
|
| 83: | $msgs[] = $errs[] = '<h4>' . _AM_SYSTEM_MODULES_INSTALLING . $module->getInfo('name', 's') . '</h4>';
|
| 84: | if ($module->getInfo('image') !== false && trim($module->getInfo('image')) != '') {
|
| 85: | $msgs[] = '<a href="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/' . $module->getInfo('adminindex') . '"><img src="' . XOOPS_URL . '/modules/' . $dirname . '/' . trim($module->getInfo('image')) . '" alt="" /></a>';
|
| 86: | }
|
| 87: | $msgs[] = '<strong>' . _VERSION . ':</strong> ' . $module->getInfo('version');
|
| 88: | if ($module->getInfo('author') !== false && trim($module->getInfo('author')) != '') {
|
| 89: | $msgs[] = '<strong>' . _AUTHOR . ':</strong> ' . htmlspecialchars(trim($module->getInfo('author')), ENT_QUOTES);
|
| 90: | }
|
| 91: | $msgs[] = '</div><div class="logger">';
|
| 92: |
|
| 93: | $install_script = $module->getInfo('onInstall');
|
| 94: | if ($install_script && trim($install_script) != '') {
|
| 95: | include_once XOOPS_ROOT_PATH . '/modules/' . $dirname . '/' . trim($install_script);
|
| 96: | }
|
| 97: | $func = "xoops_module_pre_install_{$dirname}";
|
| 98: |
|
| 99: | if (function_exists($func)) {
|
| 100: | $result = $func($module);
|
| 101: | if (!$result) {
|
| 102: | $error = true;
|
| 103: | $errs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_EXECUTE, $func) . '</p>';
|
| 104: | $errs = array_merge($errs, $module->getErrors());
|
| 105: | } else {
|
| 106: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_SUCESS, "<strong>{$func}</strong>") . '</p>';
|
| 107: | $msgs += $module->getErrors();
|
| 108: | }
|
| 109: | }
|
| 110: |
|
| 111: | if ($error === false) {
|
| 112: | $sqlfile = $module->getInfo('sqlfile');
|
| 113: | if (is_array($sqlfile) && !empty($sqlfile[XOOPS_DB_TYPE])) {
|
| 114: | $sql_file_path = XOOPS_ROOT_PATH . '/modules/' . $dirname . '/' . $sqlfile[XOOPS_DB_TYPE];
|
| 115: | if (!file_exists($sql_file_path)) {
|
| 116: | $errs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_SQL_NOT_FOUND, "<strong>{$sql_file_path}</strong>");
|
| 117: | $error = true;
|
| 118: | } else {
|
| 119: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_SQL_FOUND, "<strong>{$sql_file_path}</strong>") . '<br />' . _AM_SYSTEM_MODULES_CREATE_TABLES;
|
| 120: | include_once XOOPS_ROOT_PATH . '/class/database/sqlutility.php';
|
| 121: | $sql_query = fread(fopen($sql_file_path, 'r'), filesize($sql_file_path));
|
| 122: | $sql_query = trim($sql_query);
|
| 123: | SqlUtility::splitMySqlFile($pieces, $sql_query);
|
| 124: | $created_tables = array();
|
| 125: | foreach ($pieces as $piece) {
|
| 126: |
|
| 127: |
|
| 128: | $prefixed_query = SqlUtility::prefixQuery($piece, $db->prefix());
|
| 129: | if (!$prefixed_query) {
|
| 130: | $errs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_SQL_NOT_VALID, '<strong>' . $piece . '</strong>');
|
| 131: | $error = true;
|
| 132: | break;
|
| 133: | }
|
| 134: |
|
| 135: | if (!in_array($prefixed_query[4], $reservedTables)) {
|
| 136: |
|
| 137: | if (!$db->query($prefixed_query[0])) {
|
| 138: | $errs[] = $db->error();
|
| 139: | $error = true;
|
| 140: | break;
|
| 141: | } else {
|
| 142: | if (!in_array($prefixed_query[4], $created_tables)) {
|
| 143: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TABLE_CREATED, '<strong>' . $db->prefix($prefixed_query[4]) . '</strong>');
|
| 144: | $created_tables[] = $prefixed_query[4];
|
| 145: | } else {
|
| 146: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_INSERT_DATA, '<strong>' . $db->prefix($prefixed_query[4]) . '</strong>');
|
| 147: | }
|
| 148: | }
|
| 149: | } else {
|
| 150: |
|
| 151: | $errs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TABLE_RESERVED, '<strong>' . $prefixed_query[4] . '</strong>');
|
| 152: | $error = true;
|
| 153: | break;
|
| 154: | }
|
| 155: | }
|
| 156: |
|
| 157: | if ($error === true) {
|
| 158: | foreach ($created_tables as $ct) {
|
| 159: | $db->query('DROP TABLE ' . $db->prefix($ct));
|
| 160: | }
|
| 161: | }
|
| 162: | }
|
| 163: | }
|
| 164: | }
|
| 165: |
|
| 166: | if ($error === false) {
|
| 167: | if (!$module_handler->insert($module)) {
|
| 168: | $errs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_INSERT_DATA_FAILD, '<strong>' . $module->getVar('name') . '</strong>');
|
| 169: | foreach ($created_tables as $ct) {
|
| 170: | $db->query('DROP TABLE ' . $db->prefix($ct));
|
| 171: | }
|
| 172: | $ret = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILINS, '<strong>' . $module->name() . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br>';
|
| 173: | foreach ($errs as $err) {
|
| 174: | $ret .= ' - ' . $err . '<br>';
|
| 175: | }
|
| 176: | $ret .= '</p>';
|
| 177: | unset($module, $created_tables, $errs, $msgs);
|
| 178: |
|
| 179: | return $ret;
|
| 180: | } else {
|
| 181: | $newmid = $module->getVar('mid');
|
| 182: | unset($created_tables);
|
| 183: | $msgs[] = '<p>' . _AM_SYSTEM_MODULES_INSERT_DATA_DONE . sprintf(_AM_SYSTEM_MODULES_MODULEID, '<strong>' . $newmid . '</strong>');
|
| 184: | $tplfile_handler = xoops_getHandler('tplfile');
|
| 185: | $templates = $module->getInfo('templates');
|
| 186: | if ($templates !== false) {
|
| 187: | $msgs[] = _AM_SYSTEM_MODULES_TEMPLATES_ADD;
|
| 188: | foreach ($templates as $tpl) {
|
| 189: | $tplfile = $tplfile_handler->create();
|
| 190: | $type = (isset($tpl['type']) ? $tpl['type'] : 'module');
|
| 191: | $tpldata =& xoops_module_gettemplate($dirname, $tpl['file'], $type);
|
| 192: | $tplfile->setVar('tpl_source', $tpldata, true);
|
| 193: | $tplfile->setVar('tpl_refid', $newmid);
|
| 194: |
|
| 195: | $tplfile->setVar('tpl_tplset', 'default');
|
| 196: | $tplfile->setVar('tpl_file', $tpl['file']);
|
| 197: | $tplfile->setVar('tpl_desc', $tpl['description'], true);
|
| 198: | $tplfile->setVar('tpl_module', $dirname);
|
| 199: | $tplfile->setVar('tpl_lastmodified', time());
|
| 200: | $tplfile->setVar('tpl_lastimported', time());
|
| 201: | $tplfile->setVar('tpl_type', $type);
|
| 202: | if (!$tplfile_handler->insert($tplfile)) {
|
| 203: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_ERROR, '<strong>' . $tpl['file'] . '</strong>') . '</span>';
|
| 204: | } else {
|
| 205: | $newtplid = $tplfile->getVar('tpl_id');
|
| 206: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_DATA, '<strong>' . $tpl['file'] . '</strong>') . '(ID: <strong>' . $newtplid . '</strong>)';
|
| 207: |
|
| 208: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
| 209: | if (!xoops_template_touch($newtplid)) {
|
| 210: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_COMPILED_FAILED, '<strong>' . $tpl['file'] . '</strong>') . '</span>';
|
| 211: | } else {
|
| 212: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_COMPILED, '<strong>' . $tpl['file'] . '</strong>');
|
| 213: | }
|
| 214: | }
|
| 215: | unset($tplfile, $tpldata);
|
| 216: | }
|
| 217: | }
|
| 218: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
| 219: | xoops_template_clear_module_cache($newmid);
|
| 220: | $blocks = $module->getInfo('blocks');
|
| 221: | if ($blocks !== false) {
|
| 222: | $msgs[] = _AM_SYSTEM_MODULES_BLOCKS_ADD;
|
| 223: | foreach ($blocks as $blockkey => $block) {
|
| 224: |
|
| 225: | if (!isset($block['file']) || !isset($block['show_func'])) {
|
| 226: | break;
|
| 227: | }
|
| 228: | $options = '';
|
| 229: | if (!empty($block['options'])) {
|
| 230: | if (is_array($block['options'])) {
|
| 231: | $options = implode('|', $block['options']);
|
| 232: | } else {
|
| 233: | $options = $block['options'];
|
| 234: | }
|
| 235: | $options = trim($options);
|
| 236: | }
|
| 237: | $newbid = $db->genId($db->prefix('newblocks') . '_bid_seq');
|
| 238: | $edit_func = isset($block['edit_func']) ? trim($block['edit_func']) : '';
|
| 239: | $template = '';
|
| 240: | if (isset($block['template']) && trim($block['template']) != '') {
|
| 241: | $content =& xoops_module_gettemplate($dirname, $block['template'], 'blocks');
|
| 242: | }
|
| 243: | if (empty($content)) {
|
| 244: | $content = '';
|
| 245: | } else {
|
| 246: | $template = trim($block['template']);
|
| 247: | }
|
| 248: | $block_name = addslashes(trim($block['name']));
|
| 249: | $sql = 'INSERT INTO ' . $db->prefix('newblocks') . " (bid, mid, func_num, options, name, title, content, side, weight, visible, block_type, c_type, isactive, dirname, func_file, show_func, edit_func, template, bcachetime, last_modified) VALUES ($newbid, $newmid, " . (int)$blockkey . ", '$options', '" . $block_name . "','" . $block_name . "', '', 0, 0, 0, 'M', 'H', 1, '" . addslashes($dirname) . "', '" . addslashes(trim($block['file'])) . "', '" . addslashes(trim($block['show_func'])) . "', '" . addslashes($edit_func) . "', '" . $template . "', 0, " . time() . ')';
|
| 250: | if (!$db->query($sql)) {
|
| 251: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_BLOCK_ADD_ERROR, '<strong>' . $block['name'] . '</strong>') . sprintf(_AM_SYSTEM_MODULES_BLOCK_ADD_ERROR_DATABASE, '<strong>' . $db->error() . '</strong>') . '</span>';
|
| 252: | } else {
|
| 253: | if (empty($newbid)) {
|
| 254: | $newbid = $db->getInsertId();
|
| 255: | }
|
| 256: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_BLOCK_ADD, '<strong>' . $block['name'] . '</strong>') . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $newbid . '</strong>');
|
| 257: | $sql = 'INSERT INTO ' . $db->prefix('block_module_link') . ' (block_id, module_id) VALUES (' . $newbid . ', -1)';
|
| 258: | $db->query($sql);
|
| 259: | if ($template != '') {
|
| 260: | $tplfile = $tplfile_handler->create();
|
| 261: | $tplfile->setVar('tpl_refid', $newbid);
|
| 262: | $tplfile->setVar('tpl_source', $content, true);
|
| 263: | $tplfile->setVar('tpl_tplset', 'default');
|
| 264: | $tplfile->setVar('tpl_file', $block['template']);
|
| 265: | $tplfile->setVar('tpl_module', $dirname);
|
| 266: | $tplfile->setVar('tpl_type', 'block');
|
| 267: | $tplfile->setVar('tpl_desc', $block['description'], true);
|
| 268: | $tplfile->setVar('tpl_lastimported', 0);
|
| 269: | $tplfile->setVar('tpl_lastmodified', time());
|
| 270: | if (!$tplfile_handler->insert($tplfile)) {
|
| 271: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_ERROR, '<strong>' . $block['template'] . '</strong>') . '</span>';
|
| 272: | } else {
|
| 273: | $newtplid = $tplfile->getVar('tpl_id');
|
| 274: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_DATA, '<strong>' . $block['template'] . '</strong>') . ' (ID: <strong>' . $newtplid . '</strong>)';
|
| 275: |
|
| 276: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
| 277: | if (!xoops_template_touch($newtplid)) {
|
| 278: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_COMPILED_FAILED, '<strong>' . $block['template'] . '</strong>') . '</span>';
|
| 279: | } else {
|
| 280: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_COMPILED, '<strong>' . $block['template'] . '</strong>');
|
| 281: | }
|
| 282: | }
|
| 283: | unset($tplfile);
|
| 284: | }
|
| 285: | }
|
| 286: | unset($content);
|
| 287: | }
|
| 288: | unset($blocks);
|
| 289: | }
|
| 290: | $configs = $module->getInfo('config');
|
| 291: | if ($configs !== false) {
|
| 292: | if ($module->getVar('hascomments') != 0) {
|
| 293: | include_once XOOPS_ROOT_PATH . '/include/comment_constants.php';
|
| 294: | $configs[] = array(
|
| 295: | 'name' => 'com_rule',
|
| 296: | 'title' => '_CM_COMRULES',
|
| 297: | 'description' => '',
|
| 298: | 'formtype' => 'select',
|
| 299: | 'valuetype' => 'int',
|
| 300: | 'default' => 1,
|
| 301: | 'options' => array(
|
| 302: | '_CM_COMNOCOM' => XOOPS_COMMENT_APPROVENONE,
|
| 303: | '_CM_COMAPPROVEALL' => XOOPS_COMMENT_APPROVEALL,
|
| 304: | '_CM_COMAPPROVEUSER' => XOOPS_COMMENT_APPROVEUSER,
|
| 305: | '_CM_COMAPPROVEADMIN' => XOOPS_COMMENT_APPROVEADMIN));
|
| 306: | $configs[] = array(
|
| 307: | 'name' => 'com_anonpost',
|
| 308: | 'title' => '_CM_COMANONPOST',
|
| 309: | 'description' => '',
|
| 310: | 'formtype' => 'yesno',
|
| 311: | 'valuetype' => 'int',
|
| 312: | 'default' => 0);
|
| 313: | }
|
| 314: | } else {
|
| 315: | if ($module->getVar('hascomments') != 0) {
|
| 316: | $configs = array();
|
| 317: | include_once XOOPS_ROOT_PATH . '/include/comment_constants.php';
|
| 318: | $configs[] = array(
|
| 319: | 'name' => 'com_rule',
|
| 320: | 'title' => '_CM_COMRULES',
|
| 321: | 'description' => '',
|
| 322: | 'formtype' => 'select',
|
| 323: | 'valuetype' => 'int',
|
| 324: | 'default' => 1,
|
| 325: | 'options' => array(
|
| 326: | '_CM_COMNOCOM' => XOOPS_COMMENT_APPROVENONE,
|
| 327: | '_CM_COMAPPROVEALL' => XOOPS_COMMENT_APPROVEALL,
|
| 328: | '_CM_COMAPPROVEUSER' => XOOPS_COMMENT_APPROVEUSER,
|
| 329: | '_CM_COMAPPROVEADMIN' => XOOPS_COMMENT_APPROVEADMIN));
|
| 330: | $configs[] = array(
|
| 331: | 'name' => 'com_anonpost',
|
| 332: | 'title' => '_CM_COMANONPOST',
|
| 333: | 'description' => '',
|
| 334: | 'formtype' => 'yesno',
|
| 335: | 'valuetype' => 'int',
|
| 336: | 'default' => 0);
|
| 337: | }
|
| 338: | }
|
| 339: |
|
| 340: | if ($module->getVar('hasnotification') != 0) {
|
| 341: | if (empty($configs)) {
|
| 342: | $configs = array();
|
| 343: | }
|
| 344: |
|
| 345: | include_once XOOPS_ROOT_PATH . '/include/notification_constants.php';
|
| 346: | include_once XOOPS_ROOT_PATH . '/include/notification_functions.php';
|
| 347: | $options = array();
|
| 348: | $options['_NOT_CONFIG_DISABLE'] = XOOPS_NOTIFICATION_DISABLE;
|
| 349: | $options['_NOT_CONFIG_ENABLEBLOCK'] = XOOPS_NOTIFICATION_ENABLEBLOCK;
|
| 350: | $options['_NOT_CONFIG_ENABLEINLINE'] = XOOPS_NOTIFICATION_ENABLEINLINE;
|
| 351: | $options['_NOT_CONFIG_ENABLEBOTH'] = XOOPS_NOTIFICATION_ENABLEBOTH;
|
| 352: |
|
| 353: | $configs[] = array(
|
| 354: | 'name' => 'notification_enabled',
|
| 355: | 'title' => '_NOT_CONFIG_ENABLE',
|
| 356: | 'description' => '_NOT_CONFIG_ENABLEDSC',
|
| 357: | 'formtype' => 'select',
|
| 358: | 'valuetype' => 'int',
|
| 359: | 'default' => XOOPS_NOTIFICATION_ENABLEBOTH,
|
| 360: | 'options' => $options);
|
| 361: |
|
| 362: |
|
| 363: | $options = array();
|
| 364: | $categories =& notificationCategoryInfo('', $module->getVar('mid'));
|
| 365: | foreach ($categories as $category) {
|
| 366: | $events =& notificationEvents($category['name'], false, $module->getVar('mid'));
|
| 367: | foreach ($events as $event) {
|
| 368: | if (!empty($event['invisible'])) {
|
| 369: | continue;
|
| 370: | }
|
| 371: | $option_name = $category['title'] . ' : ' . $event['title'];
|
| 372: | $option_value = $category['name'] . '-' . $event['name'];
|
| 373: | $options[$option_name] = $option_value;
|
| 374: | }
|
| 375: | unset($events);
|
| 376: | }
|
| 377: | unset($categories);
|
| 378: | $configs[] = array(
|
| 379: | 'name' => 'notification_events',
|
| 380: | 'title' => '_NOT_CONFIG_EVENTS',
|
| 381: | 'description' => '_NOT_CONFIG_EVENTSDSC',
|
| 382: | 'formtype' => 'select_multi',
|
| 383: | 'valuetype' => 'array',
|
| 384: | 'default' => array_values($options),
|
| 385: | 'options' => $options);
|
| 386: | }
|
| 387: |
|
| 388: | if ($configs !== false) {
|
| 389: | $msgs[] = _AM_SYSTEM_MODULES_MODULE_DATA_ADD;
|
| 390: |
|
| 391: | $config_handler = xoops_getHandler('config');
|
| 392: | $order = 0;
|
| 393: | foreach ($configs as $config) {
|
| 394: | $confobj = $config_handler->createConfig();
|
| 395: | $confobj->setVar('conf_modid', $newmid);
|
| 396: | $confobj->setVar('conf_catid', 0);
|
| 397: | $confobj->setVar('conf_name', $config['name']);
|
| 398: | $confobj->setVar('conf_title', $config['title'], true);
|
| 399: | $confobj->setVar('conf_desc', isset($config['description']) ? $config['description'] : '', true);
|
| 400: | $confobj->setVar('conf_formtype', $config['formtype']);
|
| 401: | $confobj->setVar('conf_valuetype', $config['valuetype']);
|
| 402: | $confobj->setConfValueForInput($config['default'], true);
|
| 403: | $confobj->setVar('conf_order', $order);
|
| 404: | $confop_msgs = '';
|
| 405: | if (isset($config['options']) && \is_array($config['options'])) {
|
| 406: | foreach ($config['options'] as $key => $value) {
|
| 407: | $confop = $config_handler->createConfigOption();
|
| 408: | $confop->setVar('confop_name', $key, true);
|
| 409: | $confop->setVar('confop_value', $value, true);
|
| 410: | $confobj->setConfOptions($confop);
|
| 411: | $confop_msgs .= '<br> ' . _AM_SYSTEM_MODULES_CONFIG_ADD . _AM_SYSTEM_MODULES_NAME . ' <strong>' . (defined($key) ? constant($key) : $key) . '</strong> ' . _AM_SYSTEM_MODULES_VALUE . ' <strong>' . $value . '</strong> ';
|
| 412: | unset($confop);
|
| 413: | }
|
| 414: | }
|
| 415: | ++$order;
|
| 416: | if ($config_handler->insertConfig($confobj) != false) {
|
| 417: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_CONFIG_DATA_ADD, '<strong>' . $config['name'] . '</strong>') . $confop_msgs;
|
| 418: | } else {
|
| 419: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_CONFIG_DATA_ADD_ERROR, '<strong>' . $config['name'] . '</strong>') . '</span>';
|
| 420: | }
|
| 421: | unset($confobj);
|
| 422: | }
|
| 423: | unset($configs);
|
| 424: | }
|
| 425: | }
|
| 426: | $groups = array(XOOPS_GROUP_ADMIN);
|
| 427: | if ($module->getInfo('hasMain')) {
|
| 428: | $groups = array(XOOPS_GROUP_ADMIN, XOOPS_GROUP_USERS, XOOPS_GROUP_ANONYMOUS);
|
| 429: | }
|
| 430: |
|
| 431: | $blocks = XoopsBlock::getByModule($newmid, false);
|
| 432: | $msgs[] = _AM_SYSTEM_MODULES_GROUP_SETTINGS_ADD;
|
| 433: |
|
| 434: | $gperm_handler = xoops_getHandler('groupperm');
|
| 435: | foreach ($groups as $mygroup) {
|
| 436: | if ($gperm_handler->checkRight('module_admin', 0, $mygroup)) {
|
| 437: |
|
| 438: | $mperm = $gperm_handler->create();
|
| 439: | $mperm->setVar('gperm_groupid', $mygroup);
|
| 440: | $mperm->setVar('gperm_itemid', $newmid);
|
| 441: | $mperm->setVar('gperm_name', 'module_admin');
|
| 442: | $mperm->setVar('gperm_modid', 1);
|
| 443: | if (!$gperm_handler->insert($mperm)) {
|
| 444: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_ACCESS_ADMIN_ADD_ERROR, '<strong>' . $mygroup . '</strong>') . '</span>';
|
| 445: | } else {
|
| 446: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_ACCESS_ADMIN_ADD, '<strong>' . $mygroup . '</strong>');
|
| 447: | }
|
| 448: | unset($mperm);
|
| 449: | }
|
| 450: | $mperm = $gperm_handler->create();
|
| 451: | $mperm->setVar('gperm_groupid', $mygroup);
|
| 452: | $mperm->setVar('gperm_itemid', $newmid);
|
| 453: | $mperm->setVar('gperm_name', 'module_read');
|
| 454: | $mperm->setVar('gperm_modid', 1);
|
| 455: | if (!$gperm_handler->insert($mperm)) {
|
| 456: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_ACCESS_USER_ADD_ERROR, '<strong>' . $mygroup . '</strong>') . '</span>';
|
| 457: | } else {
|
| 458: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_ACCESS_USER_ADD_ERROR, '<strong>' . $mygroup . '</strong>');
|
| 459: | }
|
| 460: | unset($mperm);
|
| 461: | foreach ($blocks as $blc) {
|
| 462: |
|
| 463: | $bperm = $gperm_handler->create();
|
| 464: | $bperm->setVar('gperm_groupid', $mygroup);
|
| 465: | $bperm->setVar('gperm_itemid', $blc);
|
| 466: | $bperm->setVar('gperm_name', 'block_read');
|
| 467: | $bperm->setVar('gperm_modid', 1);
|
| 468: | if (!$gperm_handler->insert($bperm)) {
|
| 469: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_BLOCK_ACCESS_ERROR . ' Block ID: <strong>' . $blc . '</strong> Group ID: <strong>' . $mygroup . '</strong></span>';
|
| 470: | } else {
|
| 471: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_BLOCK_ACCESS . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $blc . '</strong>') . sprintf(_AM_SYSTEM_MODULES_GROUP_ID, '<strong>' . $mygroup . '</strong>');
|
| 472: | }
|
| 473: | unset($bperm);
|
| 474: | }
|
| 475: | }
|
| 476: | unset($blocks, $groups);
|
| 477: |
|
| 478: |
|
| 479: | $func = "xoops_module_install_{$dirname}";
|
| 480: | if (function_exists($func)) {
|
| 481: | if (!$lastmsg = $func($module)) {
|
| 482: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_EXECUTE, $func) . '</p>';
|
| 483: | } else {
|
| 484: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_SUCESS, "<strong>{$func}</strong>") . '</p>';
|
| 485: | if (is_string($lastmsg)) {
|
| 486: | $msgs[] = $lastmsg;
|
| 487: | }
|
| 488: | }
|
| 489: | }
|
| 490: |
|
| 491: | $msgs[] = sprintf(_AM_SYSTEM_MODULES_OKINS, '<strong>' . $module->getVar('name', 's') . '</strong>');
|
| 492: | $msgs[] = '</div></div>';
|
| 493: |
|
| 494: | $blocks = $module->getInfo('blocks');
|
| 495: | $redDevider = '<span class="red bold"> | </span>';
|
| 496: | $msgs[] = '<div class="noininstall center"><a href="admin.php?fct=modulesadmin">' . _AM_SYSTEM_MODULES_BTOMADMIN . '</a> |
|
| 497: | <a href="admin.php?fct=modulesadmin&op=installlist">' . _AM_SYSTEM_MODULES_TOINSTALL . '</a>';
|
| 498: | $msgs[] = '<br><span class="red bold">' . _AM_SYSTEM_MODULES_MODULE . ' ' . $module->getInfo('name') . ': </span></div>';
|
| 499: | if ($blocks !== false) {
|
| 500: | $msgs[] = '<div class="noininstall center"><a href="admin.php?fct=blocksadmin&op=list&filter=1&selgen=' . $newmid . '&selmod=-2&selgrp=-1&selvis=-1&filsave=1">' . _AM_SYSTEM_BLOCKS . '</a></div>';
|
| 501: | }
|
| 502: | if ($module->getInfo('config') !== false) {
|
| 503: | $msgs[] = '<div class="noininstall center"><a href="admin.php?fct=preferences&op=showmod&mod=' . $newmid . '">' . _AM_SYSTEM_PREF . '</a>';
|
| 504: | } else {
|
| 505: | $msgs[] = '<div class="noininstall center">';
|
| 506: | }
|
| 507: | if ($module->getInfo('adminindex') != ''){
|
| 508: | $msgs[] = '<a href="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/' . $module->getInfo('adminindex') . '">' . _AM_SYSTEM_MODULES_INSTALL_THISMODULE . '</a>';
|
| 509: | }
|
| 510: | $testdataDirectory = XOOPS_ROOT_PATH . '/modules/' . $module->getInfo('dirname', 'e') . '/testdata';
|
| 511: | if (file_exists($testdataDirectory)) {
|
| 512: | $msgs[] = '<a href="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/testdata/index.php?op=load' . '">' . _AM_SYSTEM_MODULES_INSTALL_TESTDATA . '</a></div>';
|
| 513: | } else {
|
| 514: | $msgs[] = '</div>';
|
| 515: | }
|
| 516: |
|
| 517: | $ret = implode('<br>', $msgs);
|
| 518: | unset($blocks, $msgs, $errs, $module);
|
| 519: |
|
| 520: | return $ret;
|
| 521: | } else {
|
| 522: | $ret = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILINS, '<strong>' . $dirname . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br>' . implode('<br>', $errs) . '</p>';
|
| 523: | unset($msgs, $errs);
|
| 524: |
|
| 525: | return $ret;
|
| 526: | }
|
| 527: | } else {
|
| 528: | return '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILINS, '<strong>' . $dirname . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br> ' . sprintf(_AM_SYSTEM_MODULES_ALEXISTS, $dirname) . '</p>';
|
| 529: | }
|
| 530: | }
|
| 531: |
|
| 532: | |
| 533: | |
| 534: | |
| 535: | |
| 536: | |
| 537: | |
| 538: |
|
| 539: | function &xoops_module_gettemplate($dirname, $template, $type = '')
|
| 540: | {
|
| 541: | global $xoopsConfig;
|
| 542: | $ret = '';
|
| 543: | switch ($type) {
|
| 544: | case 'blocks':
|
| 545: | case 'admin':
|
| 546: | $path = XOOPS_ROOT_PATH . '/modules/' . $dirname . '/templates/' . $type . '/' . $template;
|
| 547: | break;
|
| 548: | default:
|
| 549: | $path = XOOPS_ROOT_PATH . '/modules/' . $dirname . '/templates/' . $template;
|
| 550: | break;
|
| 551: | }
|
| 552: | if (!file_exists($path)) {
|
| 553: | return $ret;
|
| 554: | } else {
|
| 555: | $lines = file($path);
|
| 556: | }
|
| 557: | if (!$lines) {
|
| 558: | return $ret;
|
| 559: | }
|
| 560: | $count = count($lines);
|
| 561: | for ($i = 0; $i < $count; ++$i) {
|
| 562: | $ret .= str_replace("\n", "\r\n", str_replace("\r\n", "\n", $lines[$i]));
|
| 563: | }
|
| 564: |
|
| 565: | return $ret;
|
| 566: | }
|
| 567: |
|
| 568: | |
| 569: | |
| 570: | |
| 571: | |
| 572: |
|
| 573: | function xoops_module_uninstall($dirname)
|
| 574: | {
|
| 575: | global $xoopsConfig;
|
| 576: | $reservedTables = array(
|
| 577: | 'avatar',
|
| 578: | 'avatar_users_link',
|
| 579: | 'block_module_link',
|
| 580: | 'xoopscomments',
|
| 581: | 'config',
|
| 582: | 'configcategory',
|
| 583: | 'configoption',
|
| 584: | 'image',
|
| 585: | 'imagebody',
|
| 586: | 'imagecategory',
|
| 587: | 'imgset',
|
| 588: | 'imgset_tplset_link',
|
| 589: | 'imgsetimg',
|
| 590: | 'groups',
|
| 591: | 'groups_users_link',
|
| 592: | 'group_permission',
|
| 593: | 'online',
|
| 594: | 'bannerclient',
|
| 595: | 'banner',
|
| 596: | 'bannerfinish',
|
| 597: | 'priv_msgs',
|
| 598: | 'ranks',
|
| 599: | 'session',
|
| 600: | 'smiles',
|
| 601: | 'users',
|
| 602: | 'newblocks',
|
| 603: | 'modules',
|
| 604: | 'tplfile',
|
| 605: | 'tplset',
|
| 606: | 'tplsource',
|
| 607: | 'xoopsnotifications',
|
| 608: | 'banner',
|
| 609: | 'bannerclient',
|
| 610: | 'bannerfinish');
|
| 611: | $db = XoopsDatabaseFactory::getDatabaseConnection();
|
| 612: |
|
| 613: | $module_handler = xoops_getHandler('module');
|
| 614: | $module = $module_handler->getByDirname($dirname);
|
| 615: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
| 616: | xoops_template_clear_module_cache($module->getVar('mid'));
|
| 617: | if ($module->getVar('dirname') === 'system') {
|
| 618: | return '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILUNINS, '<strong>' . $module->getVar('name') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br> - ' . _AM_SYSTEM_MODULES_SYSNO . '</p>';
|
| 619: | } elseif ($module->getVar('dirname') == $xoopsConfig['startpage']) {
|
| 620: | return '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILUNINS, '<strong>' . $module->getVar('name') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br> - ' . _AM_SYSTEM_MODULES_STRTNO . '</p>';
|
| 621: | } else {
|
| 622: | $msgs = array();
|
| 623: | $msgs[] = '<div id="xo-module-log"><div class="header">';
|
| 624: | $msgs[] = $errs[] = '<h4>' . _AM_SYSTEM_MODULES_UNINSTALL . ' ' . $module->getInfo('name', 's') . '</h4>';
|
| 625: | if ($module->getInfo('image') !== false && trim($module->getInfo('image')) != '') {
|
| 626: | $msgs[] = '<img src="' . XOOPS_URL . '/modules/' . $dirname . '/' . trim($module->getInfo('image')) . '" alt="" />';
|
| 627: | }
|
| 628: | $msgs[] = '<strong>' . _VERSION . ':</strong> ' . $module->getInfo('version');
|
| 629: | if ($module->getInfo('author') !== false && trim($module->getInfo('author')) != '') {
|
| 630: | $msgs[] = '<strong>' . _AUTHOR . ':</strong> ' . htmlspecialchars(trim($module->getInfo('author')), ENT_QUOTES);
|
| 631: | }
|
| 632: | $msgs[] = '</div><div class="logger">';
|
| 633: |
|
| 634: | $uninstall_script = $module->getInfo('onUninstall');
|
| 635: | if ($uninstall_script && trim($uninstall_script) != '') {
|
| 636: | include_once XOOPS_ROOT_PATH . '/modules/' . $dirname . '/' . trim($uninstall_script);
|
| 637: | }
|
| 638: | $func = "xoops_module_pre_uninstall_{$dirname}";
|
| 639: |
|
| 640: | if (function_exists($func)) {
|
| 641: | $result = $func($module);
|
| 642: | if (false === $result) {
|
| 643: | $errs = $module->getErrors();
|
| 644: | $errs[] = sprintf(_AM_SYSTEM_MODULES_FAILED_EXECUTE, $func);
|
| 645: |
|
| 646: | return '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILUNINS, '<strong>' . $module->getVar('name') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br>' . implode('<br>', $errs) . '</p>';
|
| 647: | } else {
|
| 648: | $prevErrs = $module->getErrors();
|
| 649: | array_unshift($prevErrs, '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_SUCESS, "<strong>{$func}</strong>") . '</p>');
|
| 650: | $msgs = array_merge($msgs, $prevErrs);
|
| 651: | }
|
| 652: | }
|
| 653: |
|
| 654: | if (false === $module_handler->delete($module)) {
|
| 655: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_DELETE_ERROR, $module->getVar('name')) . '</span>';
|
| 656: | } else {
|
| 657: |
|
| 658: |
|
| 659: | $tplfile_handler = xoops_getHandler('tplfile');
|
| 660: | $templates = $tplfile_handler->find(null, 'module', $module->getVar('mid'));
|
| 661: | $tcount = count($templates);
|
| 662: | if ($tcount > 0) {
|
| 663: | $msgs[] = _AM_SYSTEM_MODULES_TEMPLATES_DELETE;
|
| 664: | for ($i = 0; $i < $tcount; ++$i) {
|
| 665: | if (false === $tplfile_handler->delete($templates[$i])) {
|
| 666: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_DELETE_DATA_FAILD, $templates[$i]->getVar('tpl_file')) . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ID, '<strong>' . $templates[$i]->getVar('tpl_id') . '</strong>') . '</span>';
|
| 667: | } else {
|
| 668: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_DELETE_DATA, '<strong>' . $templates[$i]->getVar('tpl_file') . '</strong>') . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ID, '<strong>' . $templates[$i]->getVar('tpl_id') . '</strong>');
|
| 669: | }
|
| 670: | }
|
| 671: | }
|
| 672: | unset($templates);
|
| 673: |
|
| 674: |
|
| 675: | $block_arr = XoopsBlock::getByModule($module->getVar('mid'));
|
| 676: | if (is_array($block_arr)) {
|
| 677: | $bcount = count($block_arr);
|
| 678: | $msgs[] = _AM_SYSTEM_MODULES_BLOCKS_DELETE;
|
| 679: | for ($i = 0; $i < $bcount; ++$i) {
|
| 680: | if (false === $block_arr[$i]->delete()) {
|
| 681: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_BLOCK_DELETE_ERROR, '<strong>' . $block_arr[$i]->getVar('name') . '</strong>') . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $block_arr[$i]->getVar('bid') . '</strong>') . '</span>';
|
| 682: | } else {
|
| 683: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_BLOCK_DELETE, '<strong>' . $block_arr[$i]->getVar('name') . '</strong>') . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $block_arr[$i]->getVar('bid') . '</strong>');
|
| 684: | }
|
| 685: | if ($block_arr[$i]->getVar('template') != '') {
|
| 686: | $templates = $tplfile_handler->find(null, 'block', $block_arr[$i]->getVar('bid'));
|
| 687: | $btcount = count($templates);
|
| 688: | if ($btcount > 0) {
|
| 689: | for ($j = 0; $j < $btcount; ++$j) {
|
| 690: | if (!$tplfile_handler->delete($templates[$j])) {
|
| 691: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_BLOCK_DELETE_TEMPLATE_ERROR, $templates[$j]->getVar('tpl_file')) . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ID, '<strong>' . $templates[$j]->getVar('tpl_id') . '</strong>') . '</span>';
|
| 692: | } else {
|
| 693: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_BLOCK_DELETE_DATA, '<strong>' . $templates[$j]->getVar('tpl_file') . '</strong>') . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ID, '<strong>' . $templates[$j]->getVar('tpl_id') . '</strong>');
|
| 694: | }
|
| 695: | }
|
| 696: | }
|
| 697: | unset($templates);
|
| 698: | }
|
| 699: | }
|
| 700: | }
|
| 701: |
|
| 702: |
|
| 703: | $modtables = $module->getInfo('tables');
|
| 704: | if ($modtables !== false && \is_array($modtables)) {
|
| 705: | $msgs[] = _AM_SYSTEM_MODULES_DELETE_MOD_TABLES;
|
| 706: | foreach ($modtables as $table) {
|
| 707: |
|
| 708: | if (!in_array($table, $reservedTables)) {
|
| 709: | $sql = 'DROP TABLE ' . $db->prefix($table);
|
| 710: | if (!$db->query($sql)) {
|
| 711: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TABLE_DROPPED_ERROR, '<strong>' . $db->prefix($table) . '</strong>') . '</span>';
|
| 712: | } else {
|
| 713: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TABLE_DROPPED, '<strong>' . $db->prefix($table) . '</strong>');
|
| 714: | }
|
| 715: | } else {
|
| 716: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TABLE_DROPPED_FAILDED, '<strong>' . $db->prefix($table) . '</strong>') . '</span>';
|
| 717: | }
|
| 718: | }
|
| 719: | }
|
| 720: |
|
| 721: |
|
| 722: | if ($module->getVar('hascomments') != 0) {
|
| 723: | $msgs[] = _AM_SYSTEM_MODULES_COMMENTS_DELETE;
|
| 724: | $comment_handler = xoops_getHandler('comment');
|
| 725: | if (false === $comment_handler->deleteByModule($module->getVar('mid'))) {
|
| 726: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_COMMENTS_DELETE_ERROR . '</span>';
|
| 727: | } else {
|
| 728: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_COMMENTS_DELETED;
|
| 729: | }
|
| 730: | }
|
| 731: |
|
| 732: |
|
| 733: |
|
| 734: | if ($module->getVar('hasnotification') != 0) {
|
| 735: | $msgs[] = _AM_SYSTEM_MODULES_NOTIFICATIONS_DELETE;
|
| 736: | if (false === xoops_notification_deletebymodule($module->getVar('mid'))) {
|
| 737: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_NOTIFICATIONS_DELETE_ERROR . '</span>';
|
| 738: | } else {
|
| 739: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_NOTIFICATIONS_DELETED;
|
| 740: | }
|
| 741: | }
|
| 742: |
|
| 743: |
|
| 744: | $gperm_handler = xoops_getHandler('groupperm');
|
| 745: | if (false === $gperm_handler->deleteByModule($module->getVar('mid'))) {
|
| 746: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_GROUP_PERMS_DELETE_ERROR . '</span>';
|
| 747: | } else {
|
| 748: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_GROUP_PERMS_DELETED;
|
| 749: | }
|
| 750: |
|
| 751: |
|
| 752: | if ($module->getVar('hasconfig') != 0 || $module->getVar('hascomments') != 0) {
|
| 753: |
|
| 754: | $config_handler = xoops_getHandler('config');
|
| 755: | $configs = $config_handler->getConfigs(new Criteria('conf_modid', $module->getVar('mid')));
|
| 756: | $confcount = count($configs);
|
| 757: | if ($confcount > 0) {
|
| 758: | $msgs[] = _AM_SYSTEM_MODULES_MODULE_DATA_DELETE;
|
| 759: | for ($i = 0; $i < $confcount; ++$i) {
|
| 760: | if (false === $config_handler->deleteConfig($configs[$i])) {
|
| 761: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_CONFIG_DATA_DELETE_ERROR . sprintf(_AM_SYSTEM_MODULES_GONFIG_ID, '<strong>' . $configs[$i]->getvar('conf_id') . '</strong>') . '</span>';
|
| 762: | } else {
|
| 763: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_GONFIG_DATA_DELETE . sprintf(_AM_SYSTEM_MODULES_GONFIG_ID, '<strong>' . $configs[$i]->getvar('conf_id') . '</strong>');
|
| 764: | }
|
| 765: | }
|
| 766: | }
|
| 767: | }
|
| 768: |
|
| 769: |
|
| 770: | $func = 'xoops_module_uninstall_' . $dirname;
|
| 771: | if (function_exists($func)) {
|
| 772: | if (!$func($module)) {
|
| 773: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_EXECUTE, $func) . '</p>';
|
| 774: | } else {
|
| 775: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_SUCESS, "<strong>{$func}</strong>") . '</p>';
|
| 776: | }
|
| 777: | }
|
| 778: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_OKUNINS, '<strong>' . $module->getVar('name') . '</strong>') . '</p>';
|
| 779: | }
|
| 780: | $msgs[] = '</div></div>';
|
| 781: | $msgs[] = '<div class="center"><a href="admin.php?fct=modulesadmin">' . _AM_SYSTEM_MODULES_BTOMADMIN . '</a></div>';
|
| 782: | $ret = implode('<br>', $msgs);
|
| 783: |
|
| 784: | return $ret;
|
| 785: | }
|
| 786: | }
|
| 787: |
|
| 788: | |
| 789: | |
| 790: | |
| 791: |
|
| 792: | function xoops_module_update($dirname)
|
| 793: | {
|
| 794: | global $xoopsUser, $xoopsConfig, $xoopsTpl;
|
| 795: | $dirname = trim($dirname);
|
| 796: | $xoopsDB =& $GLOBALS['xoopsDB'];
|
| 797: | |
| 798: | $myts = \MyTextSanitizer::getInstance();
|
| 799: |
|
| 800: | $dirname = $myts->htmlSpecialChars(trim($dirname));
|
| 801: |
|
| 802: | $module_handler = xoops_getHandler('module');
|
| 803: | $module = $module_handler->getByDirname($dirname);
|
| 804: |
|
| 805: | $prev_version = $module->getVar('version');
|
| 806: | $clearTpl = new XoopsTpl();
|
| 807: | $clearTpl->xoopsClearCache($dirname);
|
| 808: |
|
| 809: |
|
| 810: | $temp_name = $module->getVar('name');
|
| 811: | $module->loadInfoAsVar($dirname);
|
| 812: | $module->setVar('name', $temp_name);
|
| 813: | $module->setVar('last_update', time());
|
| 814: | |
| 815: | |
| 816: | |
| 817: | |
| 818: | |
| 819: | |
| 820: | |
| 821: | |
| 822: | |
| 823: | |
| 824: | |
| 825: | |
| 826: | |
| 827: | |
| 828: |
|
| 829: | if (!$module_handler->insert($module)) {
|
| 830: | echo '<p>Could not update ' . $module->getVar('name') . '</p>';
|
| 831: | echo "<br><div class='center'><a href='admin.php?fct=modulesadmin'>" . _AM_SYSTEM_MODULES_BTOMADMIN . '</a></div>';
|
| 832: | } else {
|
| 833: | $newmid = $module->getVar('mid');
|
| 834: | $msgs = array();
|
| 835: | $msgs[] = '<div id="xo-module-log"><div class="header">';
|
| 836: | $msgs[] = $errs[] = '<h4>' . _AM_SYSTEM_MODULES_UPDATING . $module->getInfo('name', 's') . '</h4>';
|
| 837: | if ($module->getInfo('image') !== false && trim($module->getInfo('image')) != '') {
|
| 838: | $msgs[] = '<img src="' . XOOPS_URL . '/modules/' . $dirname . '/' . trim($module->getInfo('image')) . '" alt="" />';
|
| 839: | }
|
| 840: | $msgs[] = '<strong>' . _VERSION . ':</strong> ' . $module->getInfo('version');
|
| 841: | if ($module->getInfo('author') !== false && trim($module->getInfo('author')) != '') {
|
| 842: | $msgs[] = '<strong>' . _AUTHOR . ':</strong> ' . $myts->htmlSpecialChars(trim($module->getInfo('author')));
|
| 843: | }
|
| 844: | $msgs[] = '</div><div class="logger">';
|
| 845: |
|
| 846: | $update_script = $module->getInfo('onUpdate');
|
| 847: | if (!empty($update_script) && trim($update_script) != '') {
|
| 848: | include_once XOOPS_ROOT_PATH . '/modules/' . $dirname . '/' . trim($update_script);
|
| 849: | }
|
| 850: |
|
| 851: | if (function_exists('xoops_module_pre_update_' . $dirname)) {
|
| 852: | $func = 'xoops_module_pre_update_' . $dirname;
|
| 853: | if (!$func($module, $prev_version)) {
|
| 854: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_EXECUTE, $func) . '</p>';
|
| 855: | $msgs = array_merge($msgs, $module->getErrors());
|
| 856: | } else {
|
| 857: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_SUCESS, '<strong>' . $func . '</strong>') . '</p>';
|
| 858: | $msgs += $module->getErrors();
|
| 859: | }
|
| 860: | }
|
| 861: | $msgs[] = _AM_SYSTEM_MODULES_MODULE_DATA_UPDATE;
|
| 862: |
|
| 863: | $tplfile_handler = xoops_getHandler('tplfile');
|
| 864: |
|
| 865: | |
| 866: | |
| 867: | |
| 868: | |
| 869: | |
| 870: | |
| 871: | |
| 872: | |
| 873: | |
| 874: | |
| 875: | |
| 876: | |
| 877: |
|
| 878: |
|
| 879: | $templates = $module->getInfo('templates');
|
| 880: | if ($templates !== false) {
|
| 881: | $msgs[] = _AM_SYSTEM_MODULES_TEMPLATES_UPDATE;
|
| 882: | foreach ($templates as $tpl) {
|
| 883: | $tpl['file'] = trim($tpl['file']);
|
| 884: |
|
| 885: |
|
| 886: | $type = (isset($tpl['type']) ? $tpl['type'] : 'module');
|
| 887: | if (preg_match("/\.css$/i", $tpl['file'])) {
|
| 888: | $type = 'css';
|
| 889: | }
|
| 890: | $criteria = new CriteriaCompo();
|
| 891: | $criteria->add(new Criteria('tpl_refid', $newmid), 'AND');
|
| 892: | $criteria->add(new Criteria('tpl_module', $dirname), 'AND');
|
| 893: | $criteria->add(new Criteria('tpl_tplset', 'default'), 'AND');
|
| 894: | $criteria->add(new Criteria('tpl_file', $tpl['file']), 'AND');
|
| 895: | $criteria->add(new Criteria('tpl_type', $type), 'AND');
|
| 896: | $tplfiles = $tplfile_handler->getObjects($criteria);
|
| 897: |
|
| 898: | $tpldata =& xoops_module_gettemplate($dirname, $tpl['file'], $type);
|
| 899: | $tplfile = empty($tplfiles) ? $tplfile_handler->create() : $tplfiles[0];
|
| 900: |
|
| 901: | $tplfile->setVar('tpl_refid', $newmid);
|
| 902: | $tplfile->setVar('tpl_lastimported', 0);
|
| 903: | $tplfile->setVar('tpl_lastmodified', time());
|
| 904: | $tplfile->setVar('tpl_type', $type);
|
| 905: | $tplfile->setVar('tpl_source', $tpldata, true);
|
| 906: | $tplfile->setVar('tpl_module', $dirname);
|
| 907: | $tplfile->setVar('tpl_tplset', 'default');
|
| 908: | $tplfile->setVar('tpl_file', $tpl['file'], true);
|
| 909: | $tplfile->setVar('tpl_desc', $tpl['description'], true);
|
| 910: | if (!$tplfile_handler->insert($tplfile)) {
|
| 911: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_ERROR, '<strong>' . $tpl['file'] . '</strong>') . '</span>';
|
| 912: | } else {
|
| 913: | $newid = $tplfile->getVar('tpl_id');
|
| 914: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_INSERT_DATA, '<strong>' . $tpl['file'] . '</strong>');
|
| 915: | if ($xoopsConfig['template_set'] === 'default') {
|
| 916: | if (!xoops_template_touch($newid)) {
|
| 917: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_RECOMPILE_ERROR, '<strong>' . $tpl['file'] . '</strong>') . '</span>';
|
| 918: | } else {
|
| 919: | $msgs[] = ' <span>' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_RECOMPILE, '<strong>' . $tpl['file'] . '</strong>') . '</span>';
|
| 920: | }
|
| 921: | }
|
| 922: | }
|
| 923: | unset($tpldata);
|
| 924: |
|
| 925: | |
| 926: | |
| 927: | |
| 928: | |
| 929: |
|
| 930: |
|
| 931: | }
|
| 932: | }
|
| 933: | $blocks = $module->getInfo('blocks');
|
| 934: | $msgs[] = _AM_SYSTEM_MODULES_BLOCKS_REBUILD;
|
| 935: | if ($blocks !== false) {
|
| 936: | $showfuncs = array();
|
| 937: | $funcfiles = array();
|
| 938: | foreach ($blocks as $i => $block) {
|
| 939: | if (isset($block['show_func']) && $block['show_func'] != '' && isset($block['file']) && $block['file'] != '') {
|
| 940: | $editfunc = isset($block['edit_func']) ? $block['edit_func'] : '';
|
| 941: | $showfuncs[] = $block['show_func'];
|
| 942: | $funcfiles[] = $block['file'];
|
| 943: | $content = '';
|
| 944: | $template = '';
|
| 945: | if (isset($block['template']) && trim($block['template']) != '') {
|
| 946: | $content =& xoops_module_gettemplate($dirname, $block['template'], 'blocks');
|
| 947: | }
|
| 948: | if (!$content) {
|
| 949: | $content = '';
|
| 950: | } else {
|
| 951: | $template = $block['template'];
|
| 952: | }
|
| 953: | $options = '';
|
| 954: | if (!empty($block['options'])) {
|
| 955: | $options = $block['options'];
|
| 956: | }
|
| 957: | $sql = 'SELECT bid, name FROM ' . $xoopsDB->prefix('newblocks') . ' WHERE mid=' . $module->getVar('mid') . ' AND func_num=' . $i . " AND show_func='" . addslashes($block['show_func']) . "' AND func_file='" . addslashes($block['file']) . "'";
|
| 958: | $fresult = $xoopsDB->query($sql);
|
| 959: | if (!$xoopsDB->isResultSet($fresult)) {
|
| 960: | throw new \RuntimeException(
|
| 961: | \sprintf(_DB_QUERY_ERROR, $sql) . $xoopsDB->error(), E_USER_ERROR
|
| 962: | );
|
| 963: | }
|
| 964: | $fcount = 0;
|
| 965: | while (false !== ($fblock = $xoopsDB->fetchArray($fresult))) {
|
| 966: | ++$fcount;
|
| 967: | $sql = 'UPDATE ' . $xoopsDB->prefix('newblocks') . " SET name='" . addslashes($block['name']) . "', edit_func='" . addslashes($editfunc) . "', content='', template='" . $template . "', last_modified=" . time() . ' WHERE bid=' . $fblock['bid'];
|
| 968: | $result = $xoopsDB->query($sql);
|
| 969: | if (!$result) {
|
| 970: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_UPDATE_ERROR, $fblock['name']);
|
| 971: | } else {
|
| 972: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_BLOCK_UPDATE, $fblock['name']) . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $fblock['bid'] . '</strong>');
|
| 973: | if ($template != '') {
|
| 974: | $tplfile = $tplfile_handler->find('default', 'block', $fblock['bid']);
|
| 975: | if (count($tplfile) == 0) {
|
| 976: | $tplfile_new = $tplfile_handler->create();
|
| 977: | $tplfile_new->setVar('tpl_module', $dirname);
|
| 978: | $tplfile_new->setVar('tpl_refid', $fblock['bid']);
|
| 979: | $tplfile_new->setVar('tpl_tplset', 'default');
|
| 980: | $tplfile_new->setVar('tpl_file', $block['template'], true);
|
| 981: | $tplfile_new->setVar('tpl_type', 'block');
|
| 982: | } else {
|
| 983: | $tplfile_new = $tplfile[0];
|
| 984: | }
|
| 985: | $tplfile_new->setVar('tpl_source', $content, true);
|
| 986: | $tplfile_new->setVar('tpl_desc', $block['description'], true);
|
| 987: | $tplfile_new->setVar('tpl_lastmodified', time());
|
| 988: | $tplfile_new->setVar('tpl_lastimported', 0);
|
| 989: | $tplfile_new->setVar('tpl_file', $block['template'], true);
|
| 990: | if (!$tplfile_handler->insert($tplfile_new)) {
|
| 991: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_UPDATE_ERROR, '<strong>' . $block['template'] . '</strong>') . '</span>';
|
| 992: | } else {
|
| 993: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_UPDATE, '<strong>' . $block['template'] . '</strong>');
|
| 994: | if ($xoopsConfig['template_set'] === 'default') {
|
| 995: | if (!xoops_template_touch($tplfile_new->getVar('tpl_id'))) {
|
| 996: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_RECOMPILE_ERROR, '<strong>' . $block['template'] . '</strong>') . '</span>';
|
| 997: | } else {
|
| 998: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_RECOMPILE, '<strong>' . $block['template'] . '</strong>');
|
| 999: | }
|
| 1000: | }
|
| 1001: | }
|
| 1002: | }
|
| 1003: | }
|
| 1004: | }
|
| 1005: | if ($fcount == 0) {
|
| 1006: | $newbid = $xoopsDB->genId($xoopsDB->prefix('newblocks') . '_bid_seq');
|
| 1007: | $block_name = addslashes($block['name']);
|
| 1008: | $block_type = ($module->getVar('dirname') === 'system') ? 'S' : 'M';
|
| 1009: | $sql = 'INSERT INTO ' . $xoopsDB->prefix('newblocks') . ' (bid, mid, func_num, options, name, title, content, side, weight, visible, block_type, isactive, dirname, func_file, show_func, edit_func, template, last_modified) VALUES (' . $newbid . ', ' . $module->getVar('mid') . ', ' . $i . ",'" . addslashes($options) . "','" . $block_name . "', '" . $block_name . "', '', 0, 0, 0, '{$block_type}', 1, '" . addslashes($dirname) . "', '" . addslashes($block['file']) . "', '" . addslashes($block['show_func']) . "', '" . addslashes($editfunc) . "', '" . $template . "', " . time() . ')';
|
| 1010: | $result = $xoopsDB->query($sql);
|
| 1011: | if (!$result) {
|
| 1012: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_SQL_NOT_CREATE, $block['name']);
|
| 1013: | echo $sql;
|
| 1014: | } else {
|
| 1015: | if (empty($newbid)) {
|
| 1016: | $newbid = $xoopsDB->getInsertId();
|
| 1017: | }
|
| 1018: | if ($module->getInfo('hasMain')) {
|
| 1019: | $groups = array(XOOPS_GROUP_ADMIN, XOOPS_GROUP_USERS, XOOPS_GROUP_ANONYMOUS);
|
| 1020: | } else {
|
| 1021: | $groups = array(XOOPS_GROUP_ADMIN);
|
| 1022: | }
|
| 1023: | $gperm_handler = xoops_getHandler('groupperm');
|
| 1024: | foreach ($groups as $mygroup) {
|
| 1025: | $bperm = $gperm_handler->create();
|
| 1026: | $bperm->setVar('gperm_groupid', $mygroup);
|
| 1027: | $bperm->setVar('gperm_itemid', $newbid);
|
| 1028: | $bperm->setVar('gperm_name', 'block_read');
|
| 1029: | $bperm->setVar('gperm_modid', 1);
|
| 1030: | if (!$gperm_handler->insert($bperm)) {
|
| 1031: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_BLOCK_ACCESS_ERROR . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $newbid . '</strong>') . sprintf(_AM_SYSTEM_MODULES_GROUP_ID, '<strong>' . $mygroup . '</strong>') . '</span>';
|
| 1032: | } else {
|
| 1033: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_BLOCK_ACCESS . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $newbid . '</strong>') . sprintf(_AM_SYSTEM_MODULES_GROUP_ID, '<strong>' . $mygroup . '</strong>');
|
| 1034: | }
|
| 1035: | }
|
| 1036: |
|
| 1037: | if ($template != '') {
|
| 1038: | $tplfile = $tplfile_handler->create();
|
| 1039: | $tplfile->setVar('tpl_module', $dirname);
|
| 1040: | $tplfile->setVar('tpl_refid', $newbid);
|
| 1041: | $tplfile->setVar('tpl_source', $content, true);
|
| 1042: | $tplfile->setVar('tpl_tplset', 'default'); |
| 1043: | $tplfile->setVar('tpl_file', $block['template'], true);
|
| 1044: | $tplfile->setVar('tpl_type', 'block');
|
| 1045: | $tplfile->setVar('tpl_lastimported', time());
|
| 1046: | $tplfile->setVar('tpl_lastmodified', time());
|
| 1047: | $tplfile->setVar('tpl_desc', $block['description'], true);
|
| 1048: | if (!$tplfile_handler->insert($tplfile)) {
|
| 1049: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_ERROR, '<strong>' . $block['template'] . '</strong>') . '</span>';
|
| 1050: | } else {
|
| 1051: | $newid = $tplfile->getVar('tpl_id');
|
| 1052: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_ADD_DATA, '<strong>' . $block['template'] . '</strong>');
|
| 1053: | if ($xoopsConfig['template_set'] === 'default') {
|
| 1054: | if (!xoops_template_touch($newid)) {
|
| 1055: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_RECOMPILE_FAILD, '<strong>' . $block['template'] . '</strong>') . '</span>';
|
| 1056: | } else {
|
| 1057: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_TEMPLATE_RECOMPILE, '<strong>' . $block['template'] . '</strong>');
|
| 1058: | }
|
| 1059: | }
|
| 1060: | }
|
| 1061: | }
|
| 1062: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_BLOCK_CREATED, '<strong>' . $block['name'] . '</strong>') . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $newbid . '</strong>');
|
| 1063: | $sql = 'INSERT INTO ' . $xoopsDB->prefix('block_module_link') . ' (block_id, module_id) VALUES (' . $newbid . ', -1)';
|
| 1064: | $xoopsDB->query($sql);
|
| 1065: | }
|
| 1066: | }
|
| 1067: | }
|
| 1068: | }
|
| 1069: | $block_arr = XoopsBlock::getByModule($module->getVar('mid'));
|
| 1070: |
|
| 1071: | foreach ($block_arr as $block) {
|
| 1072: | if (!in_array($block->getVar('show_func'), $showfuncs) || !in_array($block->getVar('func_file'), $funcfiles)) {
|
| 1073: | $sql = sprintf('DELETE FROM %s WHERE bid = %u', $xoopsDB->prefix('newblocks'), $block->getVar('bid'));
|
| 1074: | if (!$xoopsDB->query($sql)) {
|
| 1075: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_BLOCK_DELETE_ERROR, '<strong>' . $block->getVar('name') . '</strong>') . sprintf(_AM_SYSTEM_MODULES_BLOCK_ID, '<strong>' . $block->getVar('bid') . '</strong>') . '</span>';
|
| 1076: | } else {
|
| 1077: | $msgs[] = ' Block <strong>' . $block->getVar('name') . '</strong> deleted. Block ID: <strong>' . $block->getVar('bid') . '</strong>';
|
| 1078: | if ($block->getVar('template') != '') {
|
| 1079: | $tplfiles = $tplfile_handler->find(null, 'block', $block->getVar('bid'));
|
| 1080: | if (is_array($tplfiles)) {
|
| 1081: | $btcount = count($tplfiles);
|
| 1082: | for ($k = 0; $k < $btcount; $k++) {
|
| 1083: | if (!$tplfile_handler->delete($tplfiles[$k])) {
|
| 1084: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_BLOCK_DEPRECATED_ERROR . '(ID: <strong>' . $tplfiles[$k]->getVar('tpl_id') . '</strong>)</span>';
|
| 1085: | } else {
|
| 1086: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_BLOCK_DEPRECATED, '<strong>' . $tplfiles[$k]->getVar('tpl_file') . '</strong>');
|
| 1087: | }
|
| 1088: | }
|
| 1089: | }
|
| 1090: | }
|
| 1091: | }
|
| 1092: | }
|
| 1093: | }
|
| 1094: | }
|
| 1095: |
|
| 1096: |
|
| 1097: |
|
| 1098: |
|
| 1099: |
|
| 1100: |
|
| 1101: |
|
| 1102: | $template = $clearTpl;
|
| 1103: | $template->setCompileId();
|
| 1104: |
|
| 1105: |
|
| 1106: |
|
| 1107: |
|
| 1108: |
|
| 1109: | $config_handler = xoops_getHandler('config');
|
| 1110: | $configs = $config_handler->getConfigs(new Criteria('conf_modid', $module->getVar('mid')));
|
| 1111: | $confcount = count($configs);
|
| 1112: | $config_delng = array();
|
| 1113: | if ($confcount > 0) {
|
| 1114: | $msgs[] = _AM_SYSTEM_MODULES_MODULE_DATA_DELETE;
|
| 1115: | for ($i = 0; $i < $confcount; $i++) {
|
| 1116: | if (!$config_handler->deleteConfig($configs[$i])) {
|
| 1117: | $msgs[] = ' <span style="color:#ff0000;">' . _AM_SYSTEM_MODULES_CONFIG_DATA_DELETE_ERROR . sprintf(_AM_SYSTEM_MODULES_GONFIG_ID, '<strong>' . $configs[$i]->getvar('conf_id') . '</strong>') . '</span>';
|
| 1118: |
|
| 1119: | $config_delng[] = $configs[$i]->getvar('conf_name');
|
| 1120: | } else {
|
| 1121: | $config_old[$configs[$i]->getvar('conf_name')]['value'] = $configs[$i]->getvar('conf_value', 'N');
|
| 1122: | $config_old[$configs[$i]->getvar('conf_name')]['formtype'] = $configs[$i]->getvar('conf_formtype');
|
| 1123: | $config_old[$configs[$i]->getvar('conf_name')]['valuetype'] = $configs[$i]->getvar('conf_valuetype');
|
| 1124: | $msgs[] = ' ' . _AM_SYSTEM_MODULES_GONFIG_DATA_DELETE . sprintf(_AM_SYSTEM_MODULES_GONFIG_ID, '<strong>' . $configs[$i]->getVar('conf_id') . '</strong>');
|
| 1125: | }
|
| 1126: | }
|
| 1127: | }
|
| 1128: |
|
| 1129: |
|
| 1130: | $configs = $module->getInfo('config');
|
| 1131: | if ($configs !== false) {
|
| 1132: | if ($module->getVar('hascomments') != 0) {
|
| 1133: | include_once XOOPS_ROOT_PATH . '/include/comment_constants.php';
|
| 1134: | array_push($configs, array(
|
| 1135: | 'name' => 'com_rule',
|
| 1136: | 'title' => '_CM_COMRULES',
|
| 1137: | 'description' => '',
|
| 1138: | 'formtype' => 'select',
|
| 1139: | 'valuetype' => 'int',
|
| 1140: | 'default' => 1,
|
| 1141: | 'options' => array(
|
| 1142: | '_CM_COMNOCOM' => XOOPS_COMMENT_APPROVENONE,
|
| 1143: | '_CM_COMAPPROVEALL' => XOOPS_COMMENT_APPROVEALL,
|
| 1144: | '_CM_COMAPPROVEUSER' => XOOPS_COMMENT_APPROVEUSER,
|
| 1145: | '_CM_COMAPPROVEADMIN' => XOOPS_COMMENT_APPROVEADMIN)));
|
| 1146: | array_push($configs, array(
|
| 1147: | 'name' => 'com_anonpost',
|
| 1148: | 'title' => '_CM_COMANONPOST',
|
| 1149: | 'description' => '',
|
| 1150: | 'formtype' => 'yesno',
|
| 1151: | 'valuetype' => 'int',
|
| 1152: | 'default' => 0));
|
| 1153: | }
|
| 1154: | } else {
|
| 1155: | if ($module->getVar('hascomments') != 0) {
|
| 1156: | $configs = array();
|
| 1157: | include_once XOOPS_ROOT_PATH . '/include/comment_constants.php';
|
| 1158: | $configs[] = array(
|
| 1159: | 'name' => 'com_rule',
|
| 1160: | 'title' => '_CM_COMRULES',
|
| 1161: | 'description' => '',
|
| 1162: | 'formtype' => 'select',
|
| 1163: | 'valuetype' => 'int',
|
| 1164: | 'default' => 1,
|
| 1165: | 'options' => array(
|
| 1166: | '_CM_COMNOCOM' => XOOPS_COMMENT_APPROVENONE,
|
| 1167: | '_CM_COMAPPROVEALL' => XOOPS_COMMENT_APPROVEALL,
|
| 1168: | '_CM_COMAPPROVEUSER' => XOOPS_COMMENT_APPROVEUSER,
|
| 1169: | '_CM_COMAPPROVEADMIN' => XOOPS_COMMENT_APPROVEADMIN));
|
| 1170: | $configs[] = array(
|
| 1171: | 'name' => 'com_anonpost',
|
| 1172: | 'title' => '_CM_COMANONPOST',
|
| 1173: | 'description' => '',
|
| 1174: | 'formtype' => 'yesno',
|
| 1175: | 'valuetype' => 'int',
|
| 1176: | 'default' => 0);
|
| 1177: | }
|
| 1178: | }
|
| 1179: |
|
| 1180: | if ($module->getVar('hasnotification') != 0) {
|
| 1181: | if (empty($configs)) {
|
| 1182: | $configs = array();
|
| 1183: | }
|
| 1184: |
|
| 1185: | include_once XOOPS_ROOT_PATH . '/include/notification_constants.php';
|
| 1186: | include_once XOOPS_ROOT_PATH . '/include/notification_functions.php';
|
| 1187: | $options = array();
|
| 1188: | $options['_NOT_CONFIG_DISABLE'] = XOOPS_NOTIFICATION_DISABLE;
|
| 1189: | $options['_NOT_CONFIG_ENABLEBLOCK'] = XOOPS_NOTIFICATION_ENABLEBLOCK;
|
| 1190: | $options['_NOT_CONFIG_ENABLEINLINE'] = XOOPS_NOTIFICATION_ENABLEINLINE;
|
| 1191: | $options['_NOT_CONFIG_ENABLEBOTH'] = XOOPS_NOTIFICATION_ENABLEBOTH;
|
| 1192: |
|
| 1193: |
|
| 1194: | $configs[] = array(
|
| 1195: | 'name' => 'notification_enabled',
|
| 1196: | 'title' => '_NOT_CONFIG_ENABLE',
|
| 1197: | 'description' => '_NOT_CONFIG_ENABLEDSC',
|
| 1198: | 'formtype' => 'select',
|
| 1199: | 'valuetype' => 'int',
|
| 1200: | 'default' => XOOPS_NOTIFICATION_ENABLEBOTH,
|
| 1201: | 'options' => $options);
|
| 1202: |
|
| 1203: |
|
| 1204: |
|
| 1205: | $options = array();
|
| 1206: | $categories =& notificationCategoryInfo('', $module->getVar('mid'));
|
| 1207: | foreach ($categories as $category) {
|
| 1208: | $events =& notificationEvents($category['name'], false, $module->getVar('mid'));
|
| 1209: | foreach ($events as $event) {
|
| 1210: | if (!empty($event['invisible'])) {
|
| 1211: | continue;
|
| 1212: | }
|
| 1213: | $option_name = $category['title'] . ' : ' . $event['title'];
|
| 1214: | $option_value = $category['name'] . '-' . $event['name'];
|
| 1215: | $options[$option_name] = $option_value;
|
| 1216: |
|
| 1217: | }
|
| 1218: | }
|
| 1219: | $configs[] = array(
|
| 1220: | 'name' => 'notification_events',
|
| 1221: | 'title' => '_NOT_CONFIG_EVENTS',
|
| 1222: | 'description' => '_NOT_CONFIG_EVENTSDSC',
|
| 1223: | 'formtype' => 'select_multi',
|
| 1224: | 'valuetype' => 'array',
|
| 1225: | 'default' => array_values($options),
|
| 1226: | 'options' => $options);
|
| 1227: | }
|
| 1228: |
|
| 1229: | if ($configs !== false) {
|
| 1230: | $msgs[] = 'Adding module config data...';
|
| 1231: |
|
| 1232: | $config_handler = xoops_getHandler('config');
|
| 1233: | $order = 0;
|
| 1234: | foreach ($configs as $config) {
|
| 1235: |
|
| 1236: | if (!in_array($config['name'], $config_delng)) {
|
| 1237: | $confobj = $config_handler->createConfig();
|
| 1238: | $confobj->setVar('conf_modid', $newmid);
|
| 1239: | $confobj->setVar('conf_catid', 0);
|
| 1240: | $confobj->setVar('conf_name', $config['name']);
|
| 1241: | $confobj->setVar('conf_title', $config['title'], true);
|
| 1242: | $confobj->setVar('conf_desc', $config['description'], true);
|
| 1243: | $confobj->setVar('conf_formtype', $config['formtype']);
|
| 1244: | if (isset($config['valuetype'])) {
|
| 1245: | $confobj->setVar('conf_valuetype', $config['valuetype']);
|
| 1246: | }
|
| 1247: | if (isset($config_old[$config['name']]['value']) && $config_old[$config['name']]['formtype'] == $config['formtype'] && $config_old[$config['name']]['valuetype'] == $config['valuetype']) {
|
| 1248: |
|
| 1249: |
|
| 1250: | $confobj->setVar('conf_value', $config_old[$config['name']]['value'], true);
|
| 1251: | } else {
|
| 1252: | $confobj->setConfValueForInput($config['default'], true);
|
| 1253: |
|
| 1254: |
|
| 1255: | }
|
| 1256: | $confobj->setVar('conf_order', $order);
|
| 1257: | $confop_msgs = '';
|
| 1258: | if (isset($config['options']) && \is_array($config['options'])) {
|
| 1259: | foreach ($config['options'] as $key => $value) {
|
| 1260: | $confop = $config_handler->createConfigOption();
|
| 1261: | $confop->setVar('confop_name', $key, true);
|
| 1262: | $confop->setVar('confop_value', $value, true);
|
| 1263: | $confobj->setConfOptions($confop);
|
| 1264: | $confop_msgs .= '<br> ' . _AM_SYSTEM_MODULES_CONFIG_ADD . _AM_SYSTEM_MODULES_NAME . ' <strong>' . (defined($key) ? constant($key) : $key) . '</strong> ' . _AM_SYSTEM_MODULES_VALUE . ' <strong>' . $value . '</strong> ';
|
| 1265: | unset($confop);
|
| 1266: | }
|
| 1267: | }
|
| 1268: | $order++;
|
| 1269: | if (false !== $config_handler->insertConfig($confobj)) {
|
| 1270: |
|
| 1271: | $msgs[] = ' ' . sprintf(_AM_SYSTEM_MODULES_CONFIG_DATA_ADD, '<strong>' . $config['name'] . '</strong>') . $confop_msgs;
|
| 1272: | } else {
|
| 1273: | $msgs[] = ' <span style="color:#ff0000;">' . sprintf(_AM_SYSTEM_MODULES_CONFIG_DATA_ADD_ERROR, '<strong>' . $config['name'] . '</strong>') . '</span>';
|
| 1274: | }
|
| 1275: | unset($confobj);
|
| 1276: | }
|
| 1277: | }
|
| 1278: | unset($configs);
|
| 1279: | }
|
| 1280: |
|
| 1281: |
|
| 1282: | if (function_exists('xoops_module_update_' . $dirname)) {
|
| 1283: | $func = 'xoops_module_update_' . $dirname;
|
| 1284: | if (!$func($module, $prev_version)) {
|
| 1285: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_EXECUTE, $func) . '</p>';
|
| 1286: | $msgs = array_merge($msgs, $module->getErrors());
|
| 1287: | } else {
|
| 1288: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILED_SUCESS, '<strong>' . $func . '</strong>') . '</p>';
|
| 1289: | $msgs += $module->getErrors();
|
| 1290: | }
|
| 1291: | }
|
| 1292: | $msgs[] = sprintf(_AM_SYSTEM_MODULES_OKUPD, '<strong>' . $module->getVar('name', 's') . '</strong>');
|
| 1293: | $msgs[] = '</div></div>';
|
| 1294: | $msgs[] = '<div class="center"><a href="admin.php?fct=modulesadmin">' . _AM_SYSTEM_MODULES_BTOMADMIN . '</a> | <a href="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/' . $module->getInfo('adminindex') . '">' . _AM_SYSTEM_MODULES_INSTALL_THISMODULE . '</a></div>';
|
| 1295: |
|
| 1296: |
|
| 1297: |
|
| 1298: | }
|
| 1299: |
|
| 1300: |
|
| 1301: |
|
| 1302: |
|
| 1303: |
|
| 1304: |
|
| 1305: |
|
| 1306: |
|
| 1307: |
|
| 1308: |
|
| 1309: |
|
| 1310: |
|
| 1311: |
|
| 1312: |
|
| 1313: |
|
| 1314: | $ret = implode('<br>', $msgs);
|
| 1315: |
|
| 1316: | return $ret;
|
| 1317: | }
|
| 1318: |
|
| 1319: | |
| 1320: | |
| 1321: | |
| 1322: | |
| 1323: |
|
| 1324: | function xoops_module_activate($mid)
|
| 1325: | {
|
| 1326: |
|
| 1327: |
|
| 1328: | $module_handler = xoops_getHandler('module');
|
| 1329: |
|
| 1330: | $module = $module_handler->get($mid);
|
| 1331: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
| 1332: | xoops_template_clear_module_cache($module->getVar('mid'));
|
| 1333: |
|
| 1334: | $msgs = array();
|
| 1335: | $msgs[] = '<div id="xo-module-log">';
|
| 1336: |
|
| 1337: | $logHeader = xoops_module_log_header($module, _AM_SYSTEM_MODULES_ACTIVATE);
|
| 1338: | $msgs[] = implode('<br>', $logHeader);
|
| 1339: |
|
| 1340: |
|
| 1341: | $module->setVar('isactive', 1);
|
| 1342: | if (!$module_handler->insert($module)) {
|
| 1343: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILACT, '<strong>' . $module->getVar('name', 's') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br>' . $module->getHtmlErrors() . '</p>';
|
| 1344: | } else {
|
| 1345: | $blocks = XoopsBlock::getByModule($module->getVar('mid'));
|
| 1346: | $bcount = count($blocks);
|
| 1347: | for ($i = 0; $i < $bcount; ++$i) {
|
| 1348: | $blocks[$i]->setVar('isactive', 1);
|
| 1349: | $blocks[$i]->store();
|
| 1350: | }
|
| 1351: |
|
| 1352: | $moduleName = $module->getVar('name', 's');
|
| 1353: | $moduleLink = '<a href="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/' . $module->getInfo('adminindex') . '">' . $moduleName . '</a>';
|
| 1354: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_OKACT, '<strong>' . $moduleLink . '</strong>') . '</p></div>';
|
| 1355: |
|
| 1356: | }
|
| 1357: |
|
| 1358: | $msgs[] = '<div class="center"><a href="admin.php?fct=modulesadmin">' . _AM_SYSTEM_MODULES_BTOMADMIN . '</a></div>';
|
| 1359: | $ret = implode('<br>', $msgs);
|
| 1360: |
|
| 1361: | return $ret;
|
| 1362: | }
|
| 1363: |
|
| 1364: | |
| 1365: | |
| 1366: | |
| 1367: | |
| 1368: |
|
| 1369: | function xoops_module_deactivate($mid)
|
| 1370: | {
|
| 1371: | global $xoopsConfig;
|
| 1372: |
|
| 1373: |
|
| 1374: | $module_handler = xoops_getHandler('module');
|
| 1375: | $module = $module_handler->get($mid);
|
| 1376: | include_once XOOPS_ROOT_PATH . '/class/template.php';
|
| 1377: | xoops_template_clear_module_cache($mid);
|
| 1378: |
|
| 1379: | $msgs = array();
|
| 1380: | $msgs[] = '<div id="xo-module-log">';
|
| 1381: |
|
| 1382: | $logHeader = xoops_module_log_header($module, _AM_SYSTEM_MODULES_DEACTIVATE);
|
| 1383: | $msgs[] = implode('<br>', $logHeader);
|
| 1384: |
|
| 1385: |
|
| 1386: | $module->setVar('isactive', 0);
|
| 1387: | if ($module->getVar('dirname') === 'system') {
|
| 1388: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILDEACT, '<strong>' . $module->getVar('name') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br> - ' . _AM_SYSTEM_MODULES_SYSNO . '</p>';
|
| 1389: | } elseif ($module->getVar('dirname') == $xoopsConfig['startpage']) {
|
| 1390: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILDEACT, '<strong>' . $module->getVar('name') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br> - ' . _AM_SYSTEM_MODULES_STRTNO . '</p>';
|
| 1391: | } else {
|
| 1392: | if (!$module_handler->insert($module)) {
|
| 1393: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILDEACT, '<strong>' . $module->getVar('name') . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br>' . $module->getHtmlErrors() . '</p>';
|
| 1394: | } else {
|
| 1395: | $blocks = XoopsBlock::getByModule($module->getVar('mid'));
|
| 1396: | $bcount = count($blocks);
|
| 1397: | for ($i = 0; $i < $bcount; ++$i) {
|
| 1398: | $blocks[$i]->setVar('isactive', 0);
|
| 1399: | $blocks[$i]->store();
|
| 1400: | }
|
| 1401: | $msgs[] = '<p>' . sprintf(_AM_SYSTEM_MODULES_OKDEACT, '<strong>' . $module->getVar('name') . '</strong>') . '</p>';
|
| 1402: | }
|
| 1403: | }
|
| 1404: | $msgs[] = '<div class="center"><a href="admin.php?fct=modulesadmin">' . _AM_SYSTEM_MODULES_BTOMADMIN . '</a></div>';
|
| 1405: | $ret = implode('<br>', $msgs);
|
| 1406: |
|
| 1407: | return $ret;
|
| 1408: | }
|
| 1409: |
|
| 1410: | |
| 1411: | |
| 1412: | |
| 1413: | |
| 1414: | |
| 1415: |
|
| 1416: | function xoops_module_change($mid, $name)
|
| 1417: | {
|
| 1418: |
|
| 1419: | $module_handler = xoops_getHandler('module');
|
| 1420: | $module = $module_handler->get($mid);
|
| 1421: | $module->setVar('name', $name);
|
| 1422: | $myts = \MyTextSanitizer::getInstance();
|
| 1423: | if (!$module_handler->insert($module)) {
|
| 1424: | $ret = '<p>' . sprintf(_AM_SYSTEM_MODULES_FAILORDER, '<strong>' . $myts->stripSlashesGPC($name) . '</strong>') . ' ' . _AM_SYSTEM_MODULES_ERRORSC . '<br>';
|
| 1425: | $ret .= $module->getHtmlErrors() . '</p>';
|
| 1426: |
|
| 1427: | return $ret;
|
| 1428: | }
|
| 1429: |
|
| 1430: | return '<p>' . sprintf(_AM_SYSTEM_MODULES_OKORDER, '<strong>' . $myts->stripSlashesGPC($name) . '</strong>') . '</p>';
|
| 1431: | }
|
| 1432: |
|
| 1433: | |
| 1434: | |
| 1435: | |
| 1436: | |
| 1437: | |
| 1438: |
|
| 1439: | function xoops_module_log_header($module, $title)
|
| 1440: | {
|
| 1441: | $msgs[] = '<div class="header">';
|
| 1442: | $msgs[] = $errs[] = '<h4>' . $title . $module->getInfo('name', 's') . '</h4>';
|
| 1443: |
|
| 1444: | if ($module->getInfo('image') !== false && trim($module->getInfo('image')) != '') {
|
| 1445: | if (_AM_SYSTEM_MODULES_ACTIVATE === $title) {
|
| 1446: | $msgs[] = '<a href="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/' . $module->getInfo('adminindex') . '"><img src="' . XOOPS_URL . '/modules/' . $module->getInfo('dirname', 'e') . '/' . trim($module->getInfo('image')) . '" alt="" /></a>';
|
| 1447: | } else {
|
| 1448: | $msgs[] = '<img src="' . XOOPS_URL . '/modules/' . $module->getVar('dirname') . '/' . trim($module->getInfo('image')) . '" alt="" />';
|
| 1449: | }
|
| 1450: | }
|
| 1451: | $msgs[] = '<strong>' . _VERSION . ':</strong> ' . $module->getInfo('version');
|
| 1452: | if ($module->getInfo('author') !== false && trim($module->getInfo('author')) != '') {
|
| 1453: | $msgs[] = '<strong>' . _AUTHOR . ':</strong> ' . htmlspecialchars(trim($module->getInfo('author')), ENT_QUOTES);
|
| 1454: | }
|
| 1455: | $msgs[] = '</div>';
|
| 1456: |
|
| 1457: | return $msgs;
|
| 1458: | }
|
| 1459: |
|
| 1460: | |
| 1461: | |
| 1462: | |
| 1463: | |
| 1464: | |
| 1465: | |
| 1466: | |
| 1467: | |
| 1468: | |
| 1469: |
|
| 1470: | function xoops_module_delayed_clean_cache($cacheList = null)
|
| 1471: | {
|
| 1472: | if (empty($cacheList)) {
|
| 1473: | $cacheList = array (1,2,3);
|
| 1474: | }
|
| 1475: | require_once XOOPS_ROOT_PATH . '/modules/system/class/maintenance.php';
|
| 1476: | $maintenance = new SystemMaintenance();
|
| 1477: | register_shutdown_function(array($maintenance, 'CleanCache'), $cacheList);
|
| 1478: | }
|
| 1479: | |