/** * Uploads a sql script and executes it. Script can be text file or zip/gz packed * * @static * @param array The installation variables * @param boolean true if the script is a migration script * @return string Success or error messages * @since 1.5 */ function uploadSql(&$args, $migration = false, $preconverted = false) { global $mainframe; $archive = ''; $script = ''; /* * Check for iconv */ if ($migration && !$preconverted && !function_exists('iconv')) { return JText::_('WARNICONV'); } /* * Get the uploaded file information */ if ($migration) { $sqlFile = JRequest::getVar('migrationFile', '', 'files', 'array'); } else { $sqlFile = JRequest::getVar('sqlFile', '', 'files', 'array'); } /* * Make sure that file uploads are enabled in php */ if (!(bool) ini_get('file_uploads')) { return JText::_('WARNINSTALLFILE'); } /* * Make sure that zlib is loaded so that the package can be unpacked */ if (!extension_loaded('zlib')) { return JText::_('WARNINSTALLZLIB'); } /* * If there is no uploaded file, we have a problem... */ if (!is_array($sqlFile) || $sqlFile['size'] < 1) { return JText::_('WARNNOFILE'); } /* * Move uploaded file */ // Set permissions for tmp dir JInstallationHelper::_chmod(JPATH_SITE . DS . 'tmp', 0777); jimport('joomla.filesystem.file'); $uploaded = JFile::upload($sqlFile['tmp_name'], JPATH_SITE . DS . 'tmp' . DS . $sqlFile['name']); if (!$uploaded) { return JText::_('WARNUPLOADFAILURE'); } if (!eregi('.sql$', $sqlFile['name'])) { $archive = JPATH_SITE . DS . 'tmp' . DS . $sqlFile['name']; } else { $script = JPATH_SITE . DS . 'tmp' . DS . $sqlFile['name']; } // unpack archived sql files if ($archive) { $package = JInstallationHelper::unpack($archive, $args); if ($package === false) { return JText::_('WARNUNPACK'); } $script = $package['folder'] . DS . $package['script']; } $db =& JInstallationHelper::getDBO($args['DBtype'], $args['DBhostname'], $args['DBuserName'], $args['DBpassword'], $args['DBname'], $args['DBPrefix']); /* * If migration perform manipulations on script file before population */ if ($migration) { $script = JInstallationHelper::preMigrate($script, $args, $db); if ($script == false) { return JText::_('Script operations failed'); } } $errors = null; $msg = ''; $result = JInstallationHelper::populateDatabase($db, $script, $errors); /* * If migration, perform post population manipulations (menu table construction) */ $migErrors = null; if ($migration) { $migResult = JInstallationHelper::postMigrate($db, $migErrors, $args); if ($migResult != 0) { /* * Merge populate and migrate processing errors */ if ($result == 0) { $result = $migResult; $errors = $migErrors; } else { $result += $migResult; $errors = array_merge($errors, $migErrors); } } } /* * prepare sql error messages if returned from populate and migrate */ if (!is_null($errors)) { foreach ($errors as $error) { $msg .= stripslashes($error['msg']); $msg .= chr(13) . "-------------" . chr(13); $txt = '<textarea cols="40" rows="4" name="instDefault" readonly="readonly" >' . JText::_("Database Errors Reported") . chr(13) . $msg . '</textarea>'; } } else { // consider other possible errors from populate $msg = $result == 0 ? JText::_('SQL script installed successfully') : JText::_('Error installing SQL script'); $txt = '<input size="50" value="' . $msg . '" readonly="readonly" />'; } /* * Clean up */ if ($archive) { JFile::delete($archive); JFolder::delete($package['folder']); } else { JFile::delete($script); } return $txt; }
function checkUpload() { // pie $vars =& $this->getVars(); //print_r($vars); $sqlFile = JRequest::getVar('sqlFile', '', 'files', 'array'); if (JRequest::getVar('sqlUploaded', 0, 'post', 'bool') == false) { /* * Move uploaded file */ // Set permissions for tmp dir JInstallationHelper::_chmod(JPATH_SITE . DS . 'tmp', 0777); jimport('joomla.filesystem.file'); $uploaded = JFile::upload($sqlFile['tmp_name'], JPATH_SITE . DS . 'tmp' . DS . $sqlFile['name']); if (!$uploaded) { $this->setError(JText::_('WARNUPLOADFAILURE')); return false; } if (!eregi('.sql$', $sqlFile['name'])) { $archive = JPATH_SITE . DS . 'tmp' . DS . $sqlFile['name']; } else { $script = JPATH_SITE . DS . 'tmp' . DS . $sqlFile['name']; } // unpack archived sql files if (isset($archive) && $archive) { $package = JInstallationHelper::unpack($archive, $vars); if ($package === false) { $this->setError(JText::_('WARNUNPACK')); return false; } $script = $package['folder'] . DS . $package['script']; } } else { $script = JPATH_BASE . DS . 'sql' . DS . 'migration' . DS . 'migrate.sql'; } $migration = JRequest::getVar('migration', 0, 'post', 'bool'); /* * If migration perform manipulations on script file before population */ if ($migration == true) { $db =& JInstallationHelper::getDBO($vars['DBtype'], $vars['DBhostname'], $vars['DBuserName'], $vars['DBpassword'], $vars['DBname'], $vars['DBPrefix']); $script = JInstallationHelper::preMigrate($script, $vars, $db); if ($script == false) { $this->setError(JText::_('Script operations failed')); return false; } } // Disable in testing */ // Ensure the script is always in the same location if ($script != JPATH_BASE . DS . 'sql' . DS . 'migration' . DS . 'migrate.sql') { JFile::move($script, JPATH_BASE . DS . 'sql' . DS . 'migration' . DS . 'migrate.sql'); } //$this->setData('scriptpath',$script); $vars['dataloaded'] = '1'; $vars['loadchecked'] = '1'; $vars['migration'] = $migration; return true; }