/** * Performs pre-populate conversions on a migration script * * @static * @param string $scriptName The uploaded / unpacked script file * $param array $args The installation varibables * @return converted filename on success, False on error * @since 1.5 */ function preMigrate($scriptName, &$args, $db) { $maxread = 0; jimport('joomla.filesystem.file'); if (function_exists('memory_get_usage')) { $memlimit = JInstallationHelper::return_bytes(ini_get('memory_limit')); $maxread = $memlimit / 16; // Read only a eigth of our max amount of memory, we could be up to a lot by now // By default this pegs us at 0.5MB } $buffer = ''; $newPrefix = $args['DBPrefix']; /* * search and replace table prefixes */ $oldPrefix = trim($args['oldPrefix']); $oldPrefix = rtrim($oldPrefix, '_') . '_'; $srcEncoding = $args['srcEncoding']; if (!is_file($scriptName)) { return false; } // not a file? $newFile = dirname($scriptName) . DS . 'converted.sql'; $tfilesize = filesize($scriptName); if ($maxread > 0 && $tfilesize > 0 && $maxread < $tfilesize) { $parts = ceil($tfilesize / $maxread); file_put_contents($newFile, ''); // cleanse the file first for ($i = 0; $i < $parts; $i++) { $buffer = JFile::read($scriptName, false, $maxread, $maxread, $i * $maxread); // Lets try and read a portion of the file JInstallationHelper::replaceBuffer($buffer, $oldPrefix, $newPrefix, $srcEncoding); JInstallationHelper::appendFile($buffer, $newFile); unset($buffer); } JFile::delete($scriptName); } else { /* * read script file into buffer */ if (is_file($scriptName)) { $buffer = file_get_contents($scriptName); } else { return false; } if ($buffer == false) { return false; } JInstallationHelper::replaceBuffer($buffer, $oldPrefix, $newPrefix, $srcEncoding); /* * write to file */ //$newFile = dirname( $scriptName ).DS.'converted.sql'; $ret = file_put_contents($newFile, $buffer); unset($buffer); // Release the memory used by the buffer jimport('joomla.filesystem.file'); JFile::delete($scriptName); } /* * Create two empty temporary tables */ $query = 'DROP TABLE IF EXISTS ' . $newPrefix . 'modules_migration'; $db->setQuery($query); $db->query(); $query = 'DROP TABLE IF EXISTS ' . $newPrefix . 'menu_migration'; $db->setQuery($query); $db->query(); $query = 'CREATE TABLE ' . $newPrefix . 'modules_migration SELECT * FROM ' . $newPrefix . 'modules WHERE 0'; $db->setQuery($query); $db->query(); $query = 'CREATE TABLE ' . $newPrefix . 'modules_migration_menu SELECT * FROM ' . $newPrefix . 'modules_menu WHERE 0'; $db->setQuery($query); $db->Query(); $query = 'CREATE TABLE ' . $newPrefix . 'menu_migration SELECT * FROM ' . $newPrefix . 'menu WHERE 0'; $db->setQuery($query); $db->query(); return $newFile; }