Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 /**
  * 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;
             }
         }
     }
 }