/** * installSQLAutomatically * * @param XoopsModule &$module * @param Legacy_ModuleInstallLog &$log * * @return bool **/ public static function installSQLAutomatically(&$module, &$log) { $sqlFileInfo =& $module->getInfo('sqlfile'); if (!isset($sqlFileInfo[XOOPS_DB_TYPE])) { return true; } $sqlFile = $sqlFileInfo[XOOPS_DB_TYPE]; $dirname = $module->getVar('dirname'); $sqlFilePath = sprintf('%s/%s/%s', XOOPS_MODULE_PATH, $dirname, $sqlFile); if (!file_exists($sqlFilePath)) { $sqlFilePath = sprintf('%s/modules/%s/%s', XOOPS_TRUST_PATH, $module->modinfo['trust_dirname'], $sqlFile); } require_once XOOPS_MODULE_PATH . '/legacy/admin/class/Legacy_SQLScanner.class.php'; // TODO will be use other class? $scanner = new Legacy_SQLScanner(); $scanner->setDB_PREFIX(XOOPS_DB_PREFIX); $scanner->setDirname($dirname); if (!$scanner->loadFile($sqlFilePath)) { $log->addError(XCube_Utils::formatString(_MI_LEIMG_INSTALL_ERROR_SQL_FILE_NOT_FOUND, $sqlFile)); return false; } $scanner->parse(); $root =& XCube_Root::getSingleton(); $db =& $root->mController->getDB(); foreach ($scanner->getSQL() as $sql) { if (!$db->query($sql)) { $log->addError($db->error()); return false; } } $log->addReport(_MI_LEIMG_INSTALL_MSG_DB_SETUP_FINISHED); return true; }
function update041() { $this->mLog->addReport(_AD_LEGACY_MESSAGE_UPDATE_STARTED); //Add Table $sqlfileInfo = $this->_mTargetXoopsModule->getInfo('sqlfile'); $dirname = $this->_mTargetXoopsModule->getVar('dirname'); $sqlfile = $sqlfileInfo[XOOPS_DB_TYPE]; $sqlfilepath = XOOPS_MODULE_PATH . '/' . $dirname . '/' . $sqlfile; require_once XOOPS_MODULE_PATH . '/legacy/admin/class/Legacy_SQLScanner.class.php'; $scanner = new Legacy_SQLScanner(); $scanner->setDB_PREFIX(XOOPS_DB_PREFIX); $scanner->setDirname($this->_mTargetXoopsModule->get('dirname')); if (!$scanner->loadFile($sqlfilepath)) { $this->mLog->addError(XCube_Utils::formatMessage(_AD_LEGACY_ERROR_SQL_FILE_NOT_FOUND, $sqlfile)); return false; } $scanner->parse(); $sqls = $scanner->getSQL(); $root = XCube_Root::getSingleton(); $db = $root->mController->getDB(); foreach ($sqls as $sql) { if (strpos($sql, '_message_users') !== false) { if (!$db->query($sql)) { $this->mLog->addError($db->error()); return false; } } } $this->mLog->addReport(_AD_LEGACY_MESSAGE_DATABASE_SETUP_FINISHED); //add table $this->updatemain(); return true; }
/** * Executes SQL file which xoops_version of $module specifies. This * function is usefull for installers, but it's impossible to control * for detail. * * @static * @param XoopsModule $module * @param Legacy_ModuleInstallLog $log * @note FOR THE CUSTOM-INSTALLER */ function installSQLAutomatically(&$module, &$log) { $sqlfileInfo =& $module->getInfo('sqlfile'); $dirname = $module->getVar('dirname'); if (!isset($sqlfileInfo[XOOPS_DB_TYPE])) { return; } $sqlfile = $sqlfileInfo[XOOPS_DB_TYPE]; $sqlfilepath = XOOPS_MODULE_PATH . "/{$dirname}/{$sqlfile}"; if (isset($module->modinfo['cube_style']) && $module->modinfo['cube_style'] == true) { require_once XOOPS_MODULE_PATH . "/legacy/admin/class/Legacy_SQLScanner.class.php"; $scanner = new Legacy_SQLScanner(); $scanner->setDB_PREFIX(XOOPS_DB_PREFIX); $scanner->setDirname($module->get('dirname')); if (!$scanner->loadFile($sqlfilepath)) { $log->addError(XCube_Utils::formatMessage(_AD_LEGACY_ERROR_SQL_FILE_NOT_FOUND, $sqlfile)); return false; } $scanner->parse(); $sqls = $scanner->getSQL(); $root =& XCube_Root::getSingleton(); $db =& $root->mController->getDB(); // // TODO The following variable exists for rollback, but it is not implemented. // foreach ($sqls as $sql) { if (!$db->query($sql)) { $log->addError($db->error()); return; } } $log->addReport(_AD_LEGACY_MESSAGE_DATABASE_SETUP_FINISHED); } else { require_once XOOPS_ROOT_PATH . '/class/database/sqlutility.php'; $reservedTables = array('avatar', 'avatar_users_link', 'block_module_link', 'xoopscomments', 'config', 'configcategory', 'configoption', 'image', 'imagebody', 'imagecategory', 'imgset', 'imgset_tplset_link', 'imgsetimg', 'groups', 'groups_users_link', 'group_permission', 'online', 'bannerclient', 'banner', 'bannerfinish', 'priv_msgs', 'ranks', 'session', 'smiles', 'users', 'newblocks', 'modules', 'tplfile', 'tplset', 'tplsource', 'xoopsnotifications'); $root =& XCube_Root::getSingleton(); $db =& $root->mController->mDB; $sql_query = fread(fopen($sqlfilepath, 'r'), filesize($sqlfilepath)); $sql_query = trim($sql_query); SqlUtility::splitMySqlFile($pieces, $sql_query); $created_tables = array(); foreach ($pieces as $piece) { // [0] contains the prefixed query // [4] contains unprefixed table name $prefixed_query = SqlUtility::prefixQuery($piece, $db->prefix()); if (!$prefixed_query) { $log->addError("{$piece} is not a valid SQL!"); return; } // check if the table name is reserved if (!in_array($prefixed_query[4], $reservedTables)) { // not reserved, so try to create one if (!$db->query($prefixed_query[0])) { $log->addError($db->error()); return; } else { if (!in_array($prefixed_query[4], $created_tables)) { $log->addReport(' Table ' . $db->prefix($prefixed_query[4]) . ' created.'); $created_tables[] = $prefixed_query[4]; } else { $log->addReport(' Data inserted to table ' . $db->prefix($prefixed_query[4])); } } } else { // the table name is reserved, so halt the installation $log->addError($prefixed_query[4] . " is a reserved table!"); return; } } } }