BUG-12676 Workspace Restore action from ./processmaker is not working with strange characters.
Descripcion: The action "./processmaker workspace-restore -o workspace" is not working because the data has strange characters, and not permits to restore in other servers. Solucion: Para evitar el uso de la manipulacion del contenido del archivo sql, se tiene como primera opcion de restauracion el uso del intérprete de comandos ejecutando el comando "mysql" junto a los parametros necesarios. En que caso que el modo seguro del servidor este activado se optara por la opcion de obtener las lineas de cada sentencia sql dentro del archivo realizando un explode teniendo como parametro ";\n" y el contenido del archivo.
This commit is contained in:
@@ -1057,12 +1057,26 @@ class workspaceTools
|
||||
* @param string $filename the script filename
|
||||
* @param string $database the database to execute this script into
|
||||
*/
|
||||
private function executeSQLScript($database, $filename)
|
||||
private function executeSQLScript($database, $filename, $parameters)
|
||||
{
|
||||
mysql_query("CREATE DATABASE IF NOT EXISTS " . mysql_real_escape_string($database));
|
||||
// Check for safe mode
|
||||
if ( !ini_get('safe_mode') ) {
|
||||
$command = 'mysql'
|
||||
. ' --host=' . $parameters['dbHost']
|
||||
. ' --user=' . $parameters['dbUser']
|
||||
. ' --password=' . $parameters['dbPass']
|
||||
. ' --database=' . mysql_real_escape_string($database)
|
||||
. ' --execute="SOURCE '.$filename.'"';
|
||||
shell_exec($command);
|
||||
|
||||
} else {
|
||||
//If the safe mode of the server is actived
|
||||
try {
|
||||
mysql_select_db($database);
|
||||
$script = file_get_contents($filename);
|
||||
$lines = explode("\n", $script);
|
||||
|
||||
$lines = explode(";\n", $script);
|
||||
$previous = null;
|
||||
foreach ($lines as $j => $line) {
|
||||
// Remove comments from the script
|
||||
@@ -1090,6 +1104,13 @@ class workspaceTools
|
||||
throw new Exception("Error when running script '$filename', line $j, query '$line': " . mysql_error());
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
CLI::logging(CLI::error("Error:" . "There are problems running script '$filename': " . $e));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
static public function restoreLegacy($directory)
|
||||
@@ -1254,7 +1275,7 @@ class workspaceTools
|
||||
CLI::logging(CLI::error("Could not get the shared folder permissions, not changing workspace permissions") . "\n");
|
||||
}
|
||||
list ($dbHost, $dbUser, $dbPass) = @explode(SYSTEM_HASH, G::decrypt(HASH_INSTALLATION, SYSTEM_HASH));
|
||||
|
||||
$aParameters = array('dbHost'=>$dbHost,'dbUser'=>$dbUser,'dbPass'=>$dbPass);
|
||||
CLI::logging("> Connecting to system database in '$dbHost'\n");
|
||||
$link = mysql_connect($dbHost, $dbUser, $dbPass);
|
||||
@mysql_query("SET NAMES 'utf8';");
|
||||
@@ -1268,7 +1289,7 @@ class workspaceTools
|
||||
foreach ($metadata->databases as $db) {
|
||||
$dbName = $newDBNames[$db->name];
|
||||
CLI::logging("+> Restoring database {$db->name} to $dbName\n");
|
||||
$workspace->executeSQLScript($dbName, "$tempDirectory/{$db->name}.sql");
|
||||
$workspace->executeSQLScript($dbName, "$tempDirectory/{$db->name}.sql",$aParameters);
|
||||
$workspace->createDBUser($dbName, $db->pass, "localhost", $dbName);
|
||||
$workspace->createDBUser($dbName, $db->pass, "%", $dbName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user