Merged in paulis/processmaker/HOR-1472 (pull request #4611)

HOR-1472
This commit is contained in:
Julio Cesar Laura Avendaño
2016-07-28 18:28:25 -04:00
7 changed files with 19 additions and 240 deletions

View File

@@ -63,12 +63,6 @@ pake_task('pack-plugin', 'project_exists');
pake_desc("generate basic CRUD files for an existing class\n args: <class-name> <table-name> <plugin-name>");
pake_task('propel-build-crud', 'project_exists');
pake_desc("backup a workspace\n args: [-c|--compress] <workspace> [<backup-name>|<backup-filename>]");
pake_task('workspace-backup', 'project_exists');
pake_desc("restore a previously backed-up workspace\n args: [-o|--overwrite] <filename> <workspace>");
pake_task('workspace-restore', 'project_exists');
/*----------------------------------********---------------------------------*/
pake_desc("check standard code\n args: <directory>");
pake_task('check-standard-code', 'project_exists' );
@@ -2108,25 +2102,6 @@ function run_workspace_backup($task, $args) {
if (!isset($gzipPath))
$tar->_compress = $compress;
/*** WORKFLOW DATABASE BACKUP ***/
$dbSettings = getDataBaseConfiguration($configuration['datasources']['workflow']['connection']);
backupDB($dbOpt[0], $dbOpt[1], $dbOpt[2], $dbSettings['dbname'], $tmpDir);
printf("Copying folder: %s \n", pakeColor::colorize( $tmpDir, 'INFO'));
backupAddTarFolder( $tar, $tmpDir . $dbSettings['dbname'] . PATH_SEP, $tmpDir );
/*** RBAC DATABASE BACKUP ***/
$dbSettings = getDataBaseConfiguration($configuration['datasources']['rbac']['connection']);
backupDB($dbOpt[0], $dbOpt[1], $dbOpt[2], $dbSettings['dbname'], $tmpDir);
printf("Copying folder: %s \n", pakeColor::colorize( $tmpDir, 'INFO'));
backupAddTarFolder( $tar, $tmpDir . $dbSettings['dbname'] . PATH_SEP, $tmpDir );
/*** RP DATABASE BACKUP ***/
$dbSettings = getDataBaseConfiguration($configuration['datasources']['rp']['connection']);
backupDB($dbOpt[0], $dbOpt[1], $dbOpt[2], $dbSettings['dbname'], $tmpDir);
printf("Copying folder: %s \n", pakeColor::colorize( $tmpDir, 'INFO'));
backupAddTarFolder( $tar, $tmpDir . $dbSettings['dbname'] . PATH_SEP, $tmpDir );
$pathSharedBase = PATH_DATA . 'sites' . PATH_SEP . $workspace . PATH_SEP;
printf("copying folder: %s \n", pakeColor::colorize($pathSharedBase, 'INFO'));
backupAddTarFolder($tar, $pathSharedBase, PATH_DATA . 'sites');
@@ -2167,17 +2142,6 @@ function run_workspace_backup($task, $args) {
}
}
function backupDB($host, $user, $passwd, $dbname, $tmpDir){
$oDbMaintainer = new DataBaseMaintenance($host, $user, $passwd);
//stablishing connetion with host
$oDbMaintainer->connect($dbname);
//set temporal dir. for maintenance for oDbMaintainer object
$oDbMaintainer->setTempDir($tmpDir . $dbname . PATH_SEP);
//create the backup
$oDbMaintainer->backupDataBaseSchema($oDbMaintainer->getTempDir() . "$dbname.sql");
$oDbMaintainer->backupSqlData();
}
/**
* Parse and get the database parameters from a dns connection
* dsn sample mysql://wf_os:w9j14dkf5v0m@localhost:3306/wf_os?encoding=utf8

View File

@@ -308,23 +308,6 @@ class DataBaseMaintenance
return true;
}
/**
* backupSqlData
*
* @return boolean true or false
*/
function backupSqlData ()
{
$aTables = $this->getTablesList();
foreach ($aTables as $table) {
$fsize = $this->dumpSqlInserts( $table );
$file = basename( $this->outfile );
}
return true;
}
/**
* restoreAllData
*
@@ -419,67 +402,6 @@ class DataBaseMaintenance
$mysqli->close();
}
function lockTables ()
{
$aTables = $this->getTablesList();
if (empty( $aTables ))
return false;
printf( "%-70s", "LOCK TABLES" );
if (@mysql_query( 'LOCK TABLES ' . implode( ' READ, ', $aTables ) . ' READ; ' )) {
echo " [OK]\n";
return true;
} else {
echo "[FAILED]\n" . mysql_error() . "\n";
return false;
}
}
function unlockTables ()
{
printf( "%-70s", "UNLOCK TABLES" );
if (@mysql_query( "UNLOCK TABLES;" )) {
echo " [OK]\n";
} else {
echo "[FAILED]\n" . mysql_error() . "\n";
}
}
/**
* dumpSqlInserts
*
* @param string $table
*
* @return integer $bytesSaved;
*/
function dumpSqlInserts ($table)
{
$bytesSaved = 0;
$result = @mysql_query( 'SELECT * FROM `'.$table.'`' );
$num_rows = mysql_num_rows( $result );
$num_fields = mysql_num_fields( $result );
$data = "";
for ($i = 0; $i < $num_rows; $i ++) {
$row = mysql_fetch_object( $result );
$data .= "INSERT INTO `$table` VALUES (";
for ($x = 0; $x < $num_fields; $x ++) {
$field_name = mysql_field_name( $result, $x );
$data .= ($row->$field_name === null) ? 'NULL' : "'" . mysql_real_escape_string( $row->$field_name ) . "'";
$data .= ($x < ($num_fields - 1)) ? ", " : false;
}
$data .= ");\n";
}
printf( "%-59s%20s", "Dump of table $table", strlen( $data ) . " Bytes Saved\n" );
return $data;
}
/**
* backupDataBaseSchema
*
@@ -638,23 +560,4 @@ class DataBaseMaintenance
$str = preg_replace( "/\#[\w\W]*\\n/", '', $str );
return $str;
}
}
/*
// Sample to use
$oDbMaintainer = new DataBaseMaintenance('localhost', 'root', 'atopml2005');
$oDbMaintainer->setTempDir('/home/erik/backs/');
$oDbMaintainer->setDbName('rb_os');
$oDbMaintainer->connect();
$oDbMaintainer->backupDataBaseSchema('/home/erik/backs/schema_os.sql');
$oDbMaintainer->backupSqlData();
$oDbMaintainer->createDb('neyek12', true);
$o2 = new DataBaseMaintenance('localhost', 'root', 'atopml2005');
$o2->setTempDir('/home/erik/backs/');
$o2->setDbName('neyek12');
$o2->connect();
$o2->restoreFromSql('/home/erik/backs/schema_os.sql');
$o2->restoreAllData('sql');
*/
}

View File

@@ -99,10 +99,10 @@ class PgSQLTableInfo extends TableInfo {
FROM pg_attribute att
JOIN pg_type ty ON ty.oid=att.atttypid
LEFT OUTER JOIN pg_attrdef def ON adrelid=att.attrelid AND adnum=att.attnum
WHERE att.attrelid = %d AND att.attnum > 0
WHERE att.attrelid = $1 AND att.attnum > 0
AND att.attisdropped IS FALSE
ORDER BY att.attnum";
$result = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $this->oid));
$result = $this->executePgQuery($this->conn->getResource(), $query, $this->oid);
if (!$result) {
throw new SQLException("Could not list fields for table: " . $this->name, pg_last_error($this->conn->getResource()));
@@ -235,9 +235,9 @@ class PgSQLTableInfo extends TableInfo {
INNER JOIN pg_type b ON b.oid = CASE WHEN d.typndims > 0 then d.typelem ELSE d.typbasetype END
WHERE
d.typtype = 'd'
AND d.typname = '%s'
AND d.typname = '$1'
ORDER BY d.typname";
$result = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $strDomain));
$result = $this->executePgQuery($this->conn->getResource(), $query, $strDomain);
if (!$result) {
throw new SQLException("Query for domain [" . $strDomain . "] failed.", pg_last_error($this->conn->getResource()));
@@ -291,11 +291,11 @@ class PgSQLTableInfo extends TableInfo {
LEFT JOIN pg_catalog.pg_attribute a2 ON a2.attrelid = ct.conrelid
WHERE
contype='f'
AND conrelid = %d
AND conrelid = $1
AND a2.attnum = ct.conkey[1]
AND a1.attnum = ct.confkey[1]
ORDER BY conname";
$result = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $this->oid));
$result = $this->executePgQuery($this->conn->getResource(), $query, $this->oid);
if (!$result) {
throw new SQLException("Could not list foreign keys for table: " . $this->name, pg_last_error($this->conn->getResource()));
}
@@ -379,9 +379,9 @@ class PgSQLTableInfo extends TableInfo {
indisunique
FROM pg_index idx
JOIN pg_class cls ON cls.oid=indexrelid
WHERE indrelid = %d AND NOT indisprimary
WHERE indrelid = $1 AND NOT indisprimary
ORDER BY cls.relname";
$result = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $this->oid));
$result = $this->executePgQuery($this->conn->getResource(), $query, $this->oid);
if (!$result) {
@@ -411,9 +411,9 @@ class PgSQLTableInfo extends TableInfo {
$query = "SELECT a.attname
FROM pg_catalog.pg_class c JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid
WHERE c.oid = '%s' AND a.attnum = %d AND NOT a.attisdropped
WHERE c.oid = '$1' AND a.attnum = $2 AND NOT a.attisdropped
ORDER BY a.attnum";
$result2 = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $this->oid, $intColNum));
$result2 = $this->executePgQuery($this->conn->getResource(), $query, array($this->oid, $intColNum));
if (!$result2)
{
throw new SQLException("Could not list indexes keys for table: " . $this->name, pg_last_error($this->conn->getResource()));
@@ -454,9 +454,9 @@ class PgSQLTableInfo extends TableInfo {
indisunique
FROM pg_index idx
JOIN pg_class cls ON cls.oid=indexrelid
WHERE indrelid = %s AND indisprimary
WHERE indrelid = $1 AND indisprimary
ORDER BY cls.relname";
$result = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $this->oid));
$result = $this->executePgQuery($this->conn->getResource(), $query, $this->oid);
if (!$result) {
throw new SQLException("Could not list primary keys for table: " . $this->name, pg_last_error($this->conn->getResource()));
}
@@ -483,9 +483,9 @@ class PgSQLTableInfo extends TableInfo {
$query = "SELECT a.attname
FROM pg_catalog.pg_class c JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid
WHERE c.oid = '%s' AND a.attnum = %d AND NOT a.attisdropped
WHERE c.oid = '$1' AND a.attnum = $2 AND NOT a.attisdropped
ORDER BY a.attnum";
$result2 = $this->executePgQuery($this->conn->getResource(), sprintf ($filter->preventSqlInjection($query), $this->oid, $intColNum));
$result2 = $this->executePgQuery($this->conn->getResource(), $query, array($this->oid, $intColNum));
if (!$result2)
{
throw new SQLException("Could not list indexes keys for table: " . $this->name, pg_last_error($this->conn->getResource()));
@@ -500,8 +500,8 @@ class PgSQLTableInfo extends TableInfo {
$this->pkLoaded = true;
}
function executePgQuery($conn, $query){
$result = pg_query($conn, $query);
function executePgQuery($conn, $var, $values = array()){
$result = pg_query_params($conn, $var, $values);
return $result;
}

View File

@@ -123,8 +123,8 @@ class SQLiteTableInfo extends TableInfo {
$this->indexes[$name] = new IndexInfo($name);
// get columns for that index
$query = "PRAGMA index_info('".$name."')";
$res2 = sqlite_query($this->conn->getResource(), $filter->preventSqlInjection($query));
$var = "PRAGMA index_info('".$name."')";
$res2 = sqlite_query($this->conn->getResource(), $var);
while($row2 = sqlite_fetch_array($res2, SQLITE_ASSOC)) {
$colname = $row2['name'];
$this->indexes[$name]->addColumn($this->columns[ $colname ]);

View File

@@ -617,54 +617,6 @@
return ($new && !$existing_col) ? "201 Created" : "204 No Content";
}
/**
* PROPPATCH method handler
*
* @param array general parameter passing array
* @return bool true on success
*/
function PROPPATCH(&$options)
{
global $prefs, $tab;
$msg = "";
$path = $options["path"];
$dir = dirname($path)."/";
$base = basename($path);
if (!class_exists('G')) {
$realdocuroot = str_replace( '\\', '/', $_SERVER['DOCUMENT_ROOT'] );
$docuroot = explode( '/', $realdocuroot );
array_pop( $docuroot );
$pathhome = implode( '/', $docuroot ) . '/';
array_pop( $docuroot );
$pathTrunk = implode( '/', $docuroot ) . '/';
require_once($pathTrunk.'gulliver/system/class.g.php');
}
G::LoadSystem('inputfilter');
$filter = new InputFilter();
foreach($options["props"] as $key => $prop) {
if ($prop["ns"] == "DAV:") {
$options["props"][$key]['status'] = "403 Forbidden";
} else {
if (isset($prop["val"])) {
$query = "REPLACE INTO properties SET path = '%s', name = '%s', ns= '%s', value = '%s'";
$query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns'],$prop['val']));
error_log($query);
} else {
$query = "DELETE FROM properties WHERE path = '%s' AND name = '%s' AND ns = '%s'";
$query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns']));
}
mysql_query($query);
}
}
return "";
}
/**
* LOCK method handler

View File

@@ -886,44 +886,6 @@ class ProcessMakerWebDav extends HTTP_WebDAV_Server
return ($new && !$existing_col) ? "201 Created" : "204 No Content";
}
/**
* PROPPATCH method handler
*
* @param array general parameter passing array
* @return bool true on success
*/
public function PROPPATCH(&$options)
{
global $prefs, $tab;
$msg = "";
$path = $options["path"];
$dir = dirname($path) . "/";
$base = basename($path);
G::LoadSystem('inputfilter');
$filter = new InputFilter();
foreach ($options["props"] as $key => $prop) {
if ($prop["ns"] == "DAV:") {
$options["props"][$key]['status'] = "403 Forbidden";
} else {
if (isset($prop["val"])) {
$query = "REPLACE INTO properties SET path = '%s', name = '%s', ns= '%s', value = '%s'";
$query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns'],$prop['val']));
error_log($query);
} else {
$query = "DELETE FROM properties WHERE path = '%s' AND name = '%s' AND ns = '%s'";
$query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns']));
}
mysql_query($query);
}
}
return "";
}
/**
* LOCK method handler
*

View File

@@ -1136,10 +1136,8 @@ class workspaceTools
$oDbMaintainer = new DataBaseMaintenance($dbInfo["host"], $dbInfo["user"], $dbInfo["pass"]);
CLI::logging("Saving database {$dbInfo["name"]}\n");
$oDbMaintainer->connect($dbInfo["name"]);
$oDbMaintainer->lockTables();
$oDbMaintainer->setTempDir($path . "/");
$oDbMaintainer->backupDataBase($oDbMaintainer->getTempDir() . $dbInfo["name"] . ".sql");
$oDbMaintainer->unlockTables();
$dbNames[] = $dbInfo;
}
return $dbNames;