Merged in bugfix/HOR-3509 (pull request #5816)
HOR-3509 Approved-by: Julio Cesar Laura Avendaño <contact@julio-laura.com>
This commit is contained in:
@@ -329,6 +329,22 @@ CLI::taskOpt("lang", "", "lLANG", "lang=LANG");
|
||||
CLI::taskArg('workspace');
|
||||
CLI::taskRun("cliListIds");
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
CLI::taskName('regenerate-pmtable-classes');
|
||||
CLI::taskDescription(<<<EOT
|
||||
Regenerate the class with incorrect reference
|
||||
|
||||
This method recursively finds all PHP files that reference the path PATH_DATA
|
||||
incorrectly, which is caused by importing processes where the data directory
|
||||
of ProcessMaker has different routes. Modified files are backed up with the
|
||||
extension '.backup' in the same directory.
|
||||
EOT
|
||||
);
|
||||
CLI::taskArg('workspace');
|
||||
CLI::taskRun("regenerate_pmtable_classes");
|
||||
|
||||
/**
|
||||
* Function run_info
|
||||
* access public
|
||||
@@ -1081,3 +1097,31 @@ function run_migrate_indexing_acv($args, $opts) {
|
||||
$stop = microtime(true);
|
||||
CLI::logging("<*> Migrating and populating indexing for avoiding the use of table APP_CACHE_VIEW process took " . ($stop - $start) . " seconds.\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* This method recursively finds all PHP files that reference the path PATH_DATA
|
||||
* incorrectly, which is caused by importing processes where the data directory
|
||||
* of ProcessMaker has different routes. Modified files are backed up with the
|
||||
* extension '.backup' in the same directory.
|
||||
*
|
||||
* @param array $args
|
||||
* @param array $opts
|
||||
* @throws Exception
|
||||
* @return void
|
||||
*/
|
||||
function regenerate_pmtable_classes($args, $opts)
|
||||
{
|
||||
if (sizeof($args) > 0) {
|
||||
$start = microtime(true);
|
||||
CLI::logging("> Updating generated class files for PM Tables...\n");
|
||||
|
||||
Bootstrap::setConstantsRelatedWs($args[0]);
|
||||
$workspaceTools = new workspaceTools($args[0]);
|
||||
$workspaceTools->fixReferencePathFiles(PATH_DATA_SITE . "classes", PATH_DATA);
|
||||
|
||||
$stop = microtime(true);
|
||||
CLI::logging("<*> Updating generated class files for PM Tables took " . ($stop - $start) . " seconds.\n");
|
||||
} else {
|
||||
throw new Exception("No workspace specified for updating generated class files.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +113,17 @@ class PmTable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param string $adapter
|
||||
* @return void
|
||||
*/
|
||||
public function setDbConfigAdapter($adapter)
|
||||
{
|
||||
$this->dbConfig->adapter = $adapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Backward compatibility function
|
||||
* Resolve a propel data source
|
||||
|
||||
@@ -17,7 +17,7 @@ class ConsolidatedCases
|
||||
$RepTabUid = $data['rep_uid'];
|
||||
$TableName = $data['table_name'];
|
||||
$Title = $data['title'];
|
||||
if($this->isUpdateFields($data) && $Status) {
|
||||
if ($this->isUpdateFields($data) && $Status) {
|
||||
return true;
|
||||
}
|
||||
if ($this->existTable && $Status) {
|
||||
@@ -26,14 +26,14 @@ class ConsolidatedCases
|
||||
|
||||
if ($RepTabUid != '') {
|
||||
$this->deleteRepTab($RepTabUid, $Status, $TasUid, $TableName);
|
||||
if(!$Status){
|
||||
if (!$Status) {
|
||||
return true;
|
||||
}
|
||||
$RepTabUid = '';
|
||||
}
|
||||
|
||||
$_POST['form']['PRO_UID'] = $ProUid;
|
||||
$_POST['form']['REP_TAB_UID'] = $RepTabUid;
|
||||
$_POST['form']['REP_TAB_UID'] = $RepTabUid;
|
||||
$_POST['form']['REP_TAB_NAME'] = $TableName;
|
||||
$_POST['form']['REP_TAB_TYPE'] = "NORMAL";
|
||||
$_POST['form']['REP_TAB_GRID'] = '';
|
||||
@@ -43,7 +43,7 @@ class ConsolidatedCases
|
||||
$_POST['form']['REP_TAB_TITLE'] = $Title;
|
||||
$_POST['form']['FIELDS'] = array();
|
||||
|
||||
$sOldTableName = $_POST['form']['REP_TAB_NAME'];
|
||||
$sOldTableName = $_POST['form']['REP_TAB_NAME'];
|
||||
$sOldConnection = $_POST['form']['REP_TAB_CONNECTION'];
|
||||
|
||||
$_POST['form']['REP_TAB_UID'] = $this->createReportTable($_POST['form']);
|
||||
@@ -174,7 +174,7 @@ class ConsolidatedCases
|
||||
if ($this->existTableName) {
|
||||
$diff = array_diff($data, $this->rowRepTab);
|
||||
}
|
||||
if ($this->existCaseConsolidate){
|
||||
if ($this->existCaseConsolidate) {
|
||||
$diff = array_diff($diff, $this->rowCaseConsCore);
|
||||
}
|
||||
return count($diff) <= 0;
|
||||
@@ -213,9 +213,40 @@ class ConsolidatedCases
|
||||
return $oReportTable->getRepTabUid();
|
||||
}
|
||||
|
||||
public function createReportVariables($RepTabUid, $ProUid, $formFields)
|
||||
/**
|
||||
* Create a record to 'ReportVar', this function uses the fields generated by
|
||||
* the function 'buildReportVariables'.
|
||||
*
|
||||
* @param string $repTabUid
|
||||
* @param string $proUid
|
||||
* @param array $formFields
|
||||
* @return array
|
||||
*/
|
||||
public function createReportVariables($repTabUid, $proUid, $formFields)
|
||||
{
|
||||
list($fieldsClass, $fields) = $this->buildReportVariables($formFields, function ($repVarName, $repVarType) use ($repTabUid, $proUid) {
|
||||
$reportVar = new ReportVar();
|
||||
$reportVar->create(array(
|
||||
'REP_TAB_UID' => $repTabUid,
|
||||
'PRO_UID' => $proUid,
|
||||
'REP_VAR_NAME' => $repVarName,
|
||||
'REP_VAR_TYPE' => $repVarType)
|
||||
);
|
||||
});
|
||||
|
||||
return array($fieldsClass, $fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the fields for 'Report Tables', the second parameter is a 'callback'
|
||||
* that receives as arguments the name and type of the field.
|
||||
*
|
||||
* @param array $formFields
|
||||
* @param function $callbackFunction
|
||||
* @return array
|
||||
*/
|
||||
public function buildReportVariables($formFields, $callbackFunction = null)
|
||||
{
|
||||
$oReportVar = new ReportVar();
|
||||
$fieldsClass = array();
|
||||
$fields = array();
|
||||
$i = 1;
|
||||
@@ -224,7 +255,7 @@ class ConsolidatedCases
|
||||
$fieldsClass[$i]['FLD_KEY'] = 'on';
|
||||
$fieldsClass[$i]['FLD_AUTO_INCREMENT'] = 'off';
|
||||
$fieldsClass[$i]['FLD_DESCRIPTION'] = '';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ;
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = 32;
|
||||
$i++;
|
||||
$fieldsClass[$i]['FLD_NAME'] = 'APP_NUMBER';
|
||||
@@ -232,26 +263,26 @@ class ConsolidatedCases
|
||||
$fieldsClass[$i]['FLD_KEY'] = 'on';
|
||||
$fieldsClass[$i]['FLD_AUTO_INCREMENT'] = 'off';
|
||||
$fieldsClass[$i]['FLD_DESCRIPTION'] = '';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ;
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = 255;
|
||||
|
||||
foreach ($formFields as $sField) {
|
||||
$aField = explode('-', $sField);
|
||||
if ($aField[1] == 'title' || $aField[1] == 'submit') {
|
||||
foreach ($formFields as $field) {
|
||||
$fieldProperty = explode('-', $field);
|
||||
if ($fieldProperty[1] == 'title' || $fieldProperty[1] == 'submit') {
|
||||
continue;
|
||||
}
|
||||
$i++;
|
||||
$fieldsClass[$i]['FLD_NAME'] = $aField[0];
|
||||
$fieldsClass[$i]['FLD_NAME'] = $fieldProperty[0];
|
||||
$fieldsClass[$i]['FLD_NULL'] = 'off';
|
||||
$fieldsClass[$i]['FLD_KEY'] = 'off';
|
||||
$fieldsClass[$i]['FLD_AUTO_INCREMENT'] = 'off';
|
||||
$fieldsClass[$i]['FLD_DESCRIPTION'] = '';
|
||||
|
||||
switch ($aField[1]) {
|
||||
switch ($fieldProperty[1]) {
|
||||
case 'currency':
|
||||
case 'percentage':
|
||||
$sType = 'number';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'FLOAT' ;
|
||||
$type = 'number';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'FLOAT';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = 255;
|
||||
break;
|
||||
case 'text':
|
||||
@@ -262,34 +293,32 @@ class ConsolidatedCases
|
||||
case 'radiogroup':
|
||||
case 'hidden':
|
||||
case "link":
|
||||
$sType = 'char';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ;
|
||||
$type = 'char';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = 255;
|
||||
break;
|
||||
case 'textarea':
|
||||
$sType = 'text';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'TEXT' ;
|
||||
$type = 'text';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'TEXT';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = '';
|
||||
break;
|
||||
case 'date':
|
||||
$sType = 'date';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'DATE' ;
|
||||
$type = 'date';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'DATE';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = '';
|
||||
break;
|
||||
default:
|
||||
$sType = 'char';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR' ;
|
||||
$type = 'char';
|
||||
$fieldsClass[$i]['FLD_TYPE'] = 'VARCHAR';
|
||||
$fieldsClass[$i]['FLD_SIZE'] = 255;
|
||||
break;
|
||||
}
|
||||
|
||||
$oReportVar->create(array(
|
||||
'REP_TAB_UID' => $RepTabUid,
|
||||
'PRO_UID' => $ProUid,
|
||||
'REP_VAR_NAME' => $aField[0],
|
||||
'REP_VAR_TYPE' => $sType)
|
||||
);
|
||||
$fields[] = array('sFieldName' => $aField[0], 'sType' => $sType);
|
||||
if (!empty($callbackFunction) && is_callable($callbackFunction)) {
|
||||
$callbackFunction($fieldProperty[0], $type);
|
||||
}
|
||||
|
||||
$fields[] = array('sFieldName' => $fieldProperty[0], 'sType' => $type);
|
||||
}
|
||||
return array($fieldsClass, $fields);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
241
workflow/engine/src/ProcessMaker/Util/FixReferencePath.php
Normal file
241
workflow/engine/src/ProcessMaker/Util/FixReferencePath.php
Normal file
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Util;
|
||||
|
||||
use Configurations;
|
||||
use Criteria;
|
||||
use ResultSet;
|
||||
use FieldsPeer;
|
||||
use ReportTablePeer;
|
||||
use CaseConsolidatedCorePeer;
|
||||
use ConsolidatedCases;
|
||||
use AdditionalTablesPeer;
|
||||
use PmTable;
|
||||
use ReportVarPeer;
|
||||
use AdditionalTables;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
* This class regenerates the 'Propel' classes that are necessary for the
|
||||
* administration of a 'Report Table', this is caused by the import of processes
|
||||
* where the data directory of ProcessMaker has different routes.
|
||||
*/
|
||||
class FixReferencePath
|
||||
{
|
||||
private $modeDebug = false;
|
||||
private $resumeDebug = "";
|
||||
|
||||
/**
|
||||
* Get property modeDebug.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function getModeDebug()
|
||||
{
|
||||
return $this->modeDebug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set property modeDebug.
|
||||
*
|
||||
* @param boolean $modeDebug
|
||||
*/
|
||||
public function setModeDebug($modeDebug)
|
||||
{
|
||||
$this->modeDebug = $modeDebug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get property resumeDebug.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getResumeDebug()
|
||||
{
|
||||
return $this->resumeDebug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set property resumeDebug.
|
||||
*
|
||||
* @param string $resumeDebug
|
||||
*/
|
||||
public function setResumeDebug($resumeDebug)
|
||||
{
|
||||
$this->resumeDebug = $resumeDebug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find all PHP type files recursively.
|
||||
* The '$pathData' argument is the path to be replaced with the path found
|
||||
* as incorrect.
|
||||
*
|
||||
* @param string $directory
|
||||
* @param string $pathData
|
||||
* @return void
|
||||
*/
|
||||
public function runProcess($directory, $pathData)
|
||||
{
|
||||
try {
|
||||
//This variable is not defined and does not involve its value in this
|
||||
//task, it is removed at the end of the method.
|
||||
$_SERVER["REQUEST_URI"] = "";
|
||||
if (!defined("SYS_SKIN")) {
|
||||
$conf = new Configurations();
|
||||
define("SYS_SKIN", $conf->getConfiguration('SKIN_CRON', ''));
|
||||
}
|
||||
|
||||
$criteria = new Criteria("workflow");
|
||||
$criteria->addSelectColumn(ReportTablePeer::REP_TAB_UID);
|
||||
$criteria->addSelectColumn(CaseConsolidatedCorePeer::TAS_UID);
|
||||
$criteria->addSelectColumn(ReportTablePeer::REP_TAB_NAME);
|
||||
$criteria->addJoin(ReportTablePeer::REP_TAB_UID, CaseConsolidatedCorePeer::REP_TAB_UID, Criteria::JOIN);
|
||||
$criteria->add(CaseConsolidatedCorePeer::CON_STATUS, "ACTIVE", Criteria::EQUAL);
|
||||
$doSelect = ReportTablePeer::doSelectRS($criteria);
|
||||
$doSelect->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
$consolidatedCases = new ConsolidatedCases();
|
||||
while ($doSelect->next()) {
|
||||
$row = $doSelect->getRow();
|
||||
$fields = $this->getReportTableFields($row["REP_TAB_UID"]);
|
||||
list($fields, $outFields) = $consolidatedCases->buildReportVariables($fields);
|
||||
try {
|
||||
$this->regeneratePropelClasses($row["REP_TAB_NAME"], $row["REP_TAB_NAME"], $fields, $row["TAS_UID"]);
|
||||
$this->outVerboseln("* Regenerate classes for table: " . $row["REP_TAB_NAME"]);
|
||||
} catch (Exception $e) {
|
||||
CLI::logging(CLI::error("Error:" . "Error in regenerate classes for table: " . $row["REP_TAB_NAME"] . ". " . $e));
|
||||
}
|
||||
}
|
||||
|
||||
$criteria = new Criteria("workflow");
|
||||
$criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID);
|
||||
$criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME);
|
||||
$criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_CLASS_NAME);
|
||||
$criteria->addSelectColumn(AdditionalTablesPeer::DBS_UID);
|
||||
$doSelect = AdditionalTablesPeer::doSelectRS($criteria);
|
||||
$doSelect->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
while ($doSelect->next()) {
|
||||
$row = $doSelect->getRow();
|
||||
$fields = $this->getAdditionalTablesFields($row["ADD_TAB_UID"]);
|
||||
try {
|
||||
$pmTable = new PmTable($row["ADD_TAB_NAME"]);
|
||||
$pmTable->setDbConfigAdapter("mysql");
|
||||
$pmTable->setColumns($fields);
|
||||
$pmTable->prepare();
|
||||
$pmTable->preparePropelIniFile();
|
||||
$pmTable->buildSchema();
|
||||
$pmTable->phingbuildModel();
|
||||
$this->outVerboseln("* Regenerate classes for table: " . $row["ADD_TAB_NAME"]);
|
||||
} catch (Exception $e) {
|
||||
CLI::logging(CLI::error("Error:" . "Error in regenerate classes for table: " . $row["ADD_TAB_NAME"] . ". " . $e));
|
||||
}
|
||||
}
|
||||
|
||||
unset($_SERVER["REQUEST_URI"]);
|
||||
} catch (Exception $e) {
|
||||
CLI::logging(CLI::error("Error:" . "Error in regenerate classes files, proceed to regenerate manually: " . $e));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the fields of the 'Report Table'.
|
||||
*
|
||||
* @param string $repTabUid
|
||||
* @return array
|
||||
*/
|
||||
public function getReportTableFields($repTabUid)
|
||||
{
|
||||
$fields = array();
|
||||
$criteria = new Criteria("workflow");
|
||||
$criteria->addSelectColumn(ReportVarPeer::REP_VAR_NAME);
|
||||
$criteria->addSelectColumn(ReportVarPeer::REP_VAR_TYPE);
|
||||
$criteria->add(ReportVarPeer::REP_TAB_UID, $repTabUid, Criteria::EQUAL);
|
||||
$doSelect = ReportVarPeer::doSelectRS($criteria);
|
||||
$doSelect->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
while ($doSelect->next()) {
|
||||
$row = $doSelect->getRow();
|
||||
$fields[] = $row['REP_VAR_NAME'] . '-' . $row['REP_VAR_TYPE'];
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the fields of the 'Additional Table'.
|
||||
*
|
||||
* @param string $addTabUid
|
||||
* @return object
|
||||
*/
|
||||
public function getAdditionalTablesFields($addTabUid)
|
||||
{
|
||||
$fields = array();
|
||||
$criteria = new Criteria("workflow");
|
||||
$criteria->add(FieldsPeer::ADD_TAB_UID, $addTabUid);
|
||||
$doSelect = FieldsPeer::doSelectRS($criteria);
|
||||
$doSelect->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
while ($doSelect->next()) {
|
||||
$row = $doSelect->getRow();
|
||||
$object = new stdClass();
|
||||
$object->field_index = $row["FLD_INDEX"];
|
||||
$object->field_name = $row["FLD_NAME"];
|
||||
$object->field_description = $row["FLD_DESCRIPTION"];
|
||||
$object->field_type = $row["FLD_TYPE"];
|
||||
$object->field_size = $row["FLD_SIZE"];
|
||||
$object->field_null = $row["FLD_NULL"];
|
||||
$object->field_autoincrement = $row["FLD_AUTO_INCREMENT"];
|
||||
$object->field_key = $row["FLD_KEY"];
|
||||
$fields[] = $object;
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Regenerate 'Propel' classes for 'Report Tables'. The name of the 'Report Table',
|
||||
* the fields and the related task are required.
|
||||
*
|
||||
* @param string $repTabName
|
||||
* @param array $fields
|
||||
* @param string $guid
|
||||
* @return void
|
||||
*/
|
||||
public function regeneratePropelClasses($repTabName, $className, $fields, $guid)
|
||||
{
|
||||
$sourcePath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP;
|
||||
|
||||
@unlink($sourcePath . $className . '.php');
|
||||
@unlink($sourcePath . $className . 'Peer.php');
|
||||
@unlink($sourcePath . PATH_SEP . 'map' . PATH_SEP . $className . 'MapBuilder.php');
|
||||
@unlink($sourcePath . PATH_SEP . 'om' . PATH_SEP . 'Base' . $className . '.php');
|
||||
@unlink($sourcePath . PATH_SEP . 'om' . PATH_SEP . 'Base' . $className . 'Peer.php');
|
||||
|
||||
$additionalTables = new AdditionalTables();
|
||||
$additionalTables->createPropelClasses($repTabName, $className, $fields, $guid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the output found, the message is not displayed if the value of the
|
||||
* 'modeVerbose' property is false.
|
||||
*
|
||||
* @param string $message
|
||||
* @return void
|
||||
*/
|
||||
private function outVerbose($message)
|
||||
{
|
||||
$this->resumeDebug = $this->resumeDebug . $message;
|
||||
if ($this->modeDebug === true) {
|
||||
echo $message;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows on the screen the output found with line break.
|
||||
*
|
||||
* @param string $message
|
||||
* @return void
|
||||
*/
|
||||
private function outVerboseln($message)
|
||||
{
|
||||
$this->outVerbose($message . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user