This commit is contained in:
Roly Rudy Gutierrez Pinto
2019-06-19 15:20:05 -04:00
parent b5e61179b6
commit f1b77aafcf
9 changed files with 777 additions and 28 deletions

View File

@@ -1919,14 +1919,19 @@ class Processes
/**
* Gets Input Documents Rows from aProcess.
* Gets Input Documents Rows from process.
*
* @param string $proUid
* @param boolean $unsetInpDocId
*
* @return array
* @throws Exception
*
* @see Processes::getWorkflowData()
* @see ProcessMaker\BusinessModel\Migrator\InputDocumentsMigrator::export()
* @see ProcessMaker\Importer\Importer::saveCurrentProcess()
*/
public function getInputRows($proUid)
public function getInputRows($proUid, $unsetInpDocId = true)
{
try {
$inputList = [];
@@ -1938,7 +1943,9 @@ class Processes
while ($row = $dataset->getRow()) {
$input = new InputDocument();
$infoInput = $input->load($row['INP_DOC_UID']);
unset($infoInput['INP_DOC_ID']);
if ($unsetInpDocId === true) {
unset($infoInput['INP_DOC_ID']);
}
$inputList[] = $infoInput;
$dataset->next();
}
@@ -1956,6 +1963,10 @@ class Processes
*
* @return void
* @throws Exception
*
* @see Processes::createProcessPropertiesFromData()
* @see Processes::updateProcessFromData()
* @see ProcessMaker\BusinessModel\Migrator\InputDocumentsMigrator::import()
*/
public function createInputRows($input)
{
@@ -1970,11 +1981,15 @@ class Processes
//Get the INP_DOC_ID column
$dataSet = BasePeer::doSelect($criteria, $con);
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($dataSet->next()) {
$inputInfo = $dataSet->getRow();
$row['INP_DOC_ID'] = $inputInfo['INP_DOC_ID'];
if (isset($row["__INP_DOC_ID_UPDATE__"]) && $row["__INP_DOC_ID_UPDATE__"] === false) {
unset($row["__INP_DOC_ID_UPDATE__"]);
} else {
$row['INP_DOC_ID'] = null;
if ($dataSet->next()) {
$inputInfo = $dataSet->getRow();
$row['INP_DOC_ID'] = $inputInfo['INP_DOC_ID'];
} else {
$row['INP_DOC_ID'] = null;
}
}
BasePeer::doDelete($criteria, $con);
//Prepare the insert
@@ -2102,11 +2117,16 @@ class Processes
* Gets the Output Documents Rows from a Process.
*
* @param string $proUid
* @param boolean $unsetOutDocId
*
* @return array
* @throws Exception
*
* @see Processes::getWorkflowData()
* @see ProcessMaker\BusinessModel\Migrator\OutputDocumentsMigrator::export()
* @see ProcessMaker\Importer\Importer::saveCurrentProcess()
*/
public function getOutputRows($proUid)
public function getOutputRows($proUid, $unsetOutDocId = true)
{
try {
$outputList = [];
@@ -2118,7 +2138,9 @@ class Processes
while ($row = $dataset->getRow()) {
$output = new OutputDocument();
$infoOutput = $output->Load($row['OUT_DOC_UID']);
unset($infoOutput['OUT_DOC_ID']);
if ($unsetOutDocId === true) {
unset($infoOutput['OUT_DOC_ID']);
}
$outputList[] = $infoOutput;
$dataset->next();
}
@@ -2136,6 +2158,10 @@ class Processes
*
* @return void
* @throws Exception
*
* @see Processes::createProcessPropertiesFromData()
* @see Processes::updateProcessFromData()
* @see ProcessMaker\BusinessModel\Migrator\OutputDocumentsMigrator::import()
*/
public function createOutputRows($output)
{
@@ -2150,11 +2176,15 @@ class Processes
//Get the OUT_DOC_ID column
$dataSet = BasePeer::doSelect($criteria, $con);
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($dataSet->next()) {
$outputInfo = $dataSet->getRow();
$row['OUT_DOC_ID'] = $outputInfo['OUT_DOC_ID'];
if (isset($row["__OUT_DOC_ID_UPDATE__"]) && $row["__OUT_DOC_ID_UPDATE__"] === false) {
unset($row["__OUT_DOC_ID_UPDATE__"]);
} else {
$row['OUT_DOC_ID'] = null;
if ($dataSet->next()) {
$outputInfo = $dataSet->getRow();
$row['OUT_DOC_ID'] = $outputInfo['OUT_DOC_ID'];
} else {
$row['OUT_DOC_ID'] = null;
}
}
BasePeer::doDelete($criteria, $con);
//Prepare the insert
@@ -2931,11 +2961,16 @@ class Processes
* Get Dynaform Rows from a Process
*
* @param string $proUid
* @param boolean $unsetDynId
*
* @return array
* @throws Exception
*
* @see Processes::getWorkflowData()
* @see ProcessMaker\BusinessModel\Migrator\DynaformsMigrator::export()
* @see ProcessMaker\Importer\Importer::saveCurrentProcess()
*/
public function getDynaformRows($proUid)
public function getDynaformRows($proUid, $unsetDynId = true)
{
try {
$dynaformList = [];
@@ -2947,7 +2982,9 @@ class Processes
while ($row = $dataset->getRow()) {
$dynaform = new Dynaform();
$infoDyn = $dynaform->Load($row['DYN_UID']);
unset($infoDyn['DYN_ID']);
if ($unsetDynId === true) {
unset($infoDyn['DYN_ID']);
}
$dynaformList[] = $infoDyn;
$dataset->next();
}
@@ -3077,12 +3114,16 @@ class Processes
}
/**
* Create dynaforms for a process
* Create dynaforms for a process.
*
* @param array $dynaforms
*
* @return void
* @throws Exception
*
* @see Processes::createProcessPropertiesFromData()
* @see Processes::updateProcessFromData()
* @see ProcessMaker\BusinessModel\Migrator\DynaformsMigrator::import()
*/
public function createDynaformRows($dynaforms)
{
@@ -3097,11 +3138,15 @@ class Processes
//Get the DYN_ID column
$dataSet = BasePeer::doSelect($criteria, $con);
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($dataSet->next()) {
$dynInfo = $dataSet->getRow();
$row['DYN_ID'] = $dynInfo['DYN_ID'];
if (isset($row["__DYN_ID_UPDATE__"]) && $row["__DYN_ID_UPDATE__"] === false) {
unset($row["__DYN_ID_UPDATE__"]);
} else {
$row['DYN_ID'] = null;
if ($dataSet->next()) {
$dynInfo = $dataSet->getRow();
$row['DYN_ID'] = $dynInfo['DYN_ID'];
} else {
$row['DYN_ID'] = null;
}
}
BasePeer::doDelete($criteria, $con);
//Prepare the insert

View File

@@ -300,6 +300,24 @@ abstract class Importer
$this->preserveEmailEventConfiguration($emailEvent);
}
}
if (isset($this->importData["tables"]["workflow"]["dynaforms"])) {
foreach ($this->importData["tables"]["workflow"]["dynaforms"] as &$dynaform) {
$this->preserveDynaformId($dynaform);
}
}
if (isset($this->importData["tables"]["workflow"]["inputs"])) {
foreach ($this->importData["tables"]["workflow"]["inputs"] as &$input) {
$this->preserveInputDocumentId($input);
}
}
if (isset($this->importData["tables"]["workflow"]["outputs"])) {
foreach ($this->importData["tables"]["workflow"]["outputs"] as &$output) {
$this->preserveOutputDocumentId($output);
}
}
$objectList = $granularObj->loadObjectsListSelected($this->importData, $newObjectArray);
if (sizeof($objectList) > 0 && $processGranulate) {
@@ -602,6 +620,18 @@ abstract class Importer
foreach ($arrayWorkflowTables["emailEvent"] as &$emailEvent) {
$this->preserveEmailEventConfiguration($emailEvent);
}
foreach ($arrayWorkflowTables["dynaforms"] as &$dynaform) {
$this->preserveDynaformId($dynaform);
}
foreach ($arrayWorkflowTables["inputs"] as &$input) {
$this->preserveInputDocumentId($input);
}
foreach ($arrayWorkflowTables["outputs"] as &$output) {
$this->preserveOutputDocumentId($output);
}
$this->importWfTables($arrayWorkflowTables);
@@ -862,6 +892,8 @@ abstract class Importer
* Saves the current objects before import.
*
* @param string $proUid
*
* @see ProcessMaker\Importer\Importer::import()
*/
public function saveCurrentProcess($proUid)
{
@@ -873,9 +905,9 @@ abstract class Importer
$result->tasks = $processes->getTaskRows($proUid);
$result->abeConfigurations = $processes->getActionsByEmail($proUid);
$result->emailEvents = $processes->getEmailEvent($proUid);
$result->dynaforms = $processes->getDynaformRows($proUid);
$result->inputs = $processes->getInputRows($proUid);
$result->outputs = $processes->getOutputRows($proUid);
$result->dynaforms = $processes->getDynaformRows($proUid, false);
$result->inputs = $processes->getInputRows($proUid, false);
$result->outputs = $processes->getOutputRows($proUid, false);
$this->setCurrentProcess($result);
}
@@ -948,4 +980,87 @@ abstract class Importer
}
}
/**
* Restore DYN_ID value for specific dynaform.
* The value of __DYN_ID_UPDATE__ only used like a reference.
*
* @param array $data
*
* @see ProcessMaker\Importer\Importer::import()
* @see ProcessMaker\Importer\Importer::doImport()
* @link https://wiki.processmaker.com/3.1/Importing_and_Exporting_Projects#Importing_a_Project
*/
public function preserveDynaformId(&$data)
{
$currentProccess = $this->getCurrentProcess();
if (!is_object($currentProccess)) {
return;
}
if (!is_array($currentProccess->dynaforms)) {
return;
}
foreach ($currentProccess->dynaforms as $dynaform) {
if ($data["DYN_UID"] === $dynaform["DYN_UID"]) {
$data["DYN_ID"] = $dynaform["DYN_ID"];
$data["__DYN_ID_UPDATE__"] = false;
break;
}
}
}
/**
* Restore INP_DOC_ID value for specific input document.
* The value of __INP_DOC_ID_UPDATE__ only used like a reference.
*
* @param array $data
*
* @see ProcessMaker\Importer\Importer::import()
* @see ProcessMaker\Importer\Importer::doImport()
* @link https://wiki.processmaker.com/3.1/Importing_and_Exporting_Projects#Importing_a_Project
*/
public function preserveInputDocumentId(&$data)
{
$currentProccess = $this->getCurrentProcess();
if (!is_object($currentProccess)) {
return;
}
if (!is_array($currentProccess->inputs)) {
return;
}
foreach ($currentProccess->inputs as $inputDocument) {
if ($data["INP_DOC_UID"] === $inputDocument["INP_DOC_UID"]) {
$data["INP_DOC_ID"] = $inputDocument["INP_DOC_ID"];
$data["__INP_DOC_ID_UPDATE__"] = false;
break;
}
}
}
/**
* Restore OUT_DOC_ID value for specific output document.
* The value of __OUT_DOC_ID_UPDATE__ only used like a reference.
*
* @param array $data
*
* @see ProcessMaker\Importer\Importer::import()
* @see ProcessMaker\Importer\Importer::doImport()
* @link https://wiki.processmaker.com/3.1/Importing_and_Exporting_Projects#Importing_a_Project
*/
public function preserveOutputDocumentId(&$data)
{
$currentProccess = $this->getCurrentProcess();
if (!is_object($currentProccess)) {
return;
}
if (!is_array($currentProccess->outputs)) {
return;
}
foreach ($currentProccess->outputs as $outputDocument) {
if ($data["OUT_DOC_UID"] === $outputDocument["OUT_DOC_UID"]) {
$data["OUT_DOC_ID"] = $outputDocument["OUT_DOC_ID"];
$data["__OUT_DOC_ID_UPDATE__"] = false;
break;
}
}
}
}

View File

@@ -14,8 +14,13 @@ use Illuminate\Support\Facades\DB;
class Dynaform extends Model
{
protected $table = 'DYNAFORM';
protected $primaryKey = "DYN_ID";
public $timestamps = false;
/**
* Return relation process.
* @return object
*/
public function process()
{
return $this->belongsTo(Process::class, 'PRO_UID', 'PRO_UID');

View File

@@ -0,0 +1,45 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
/**
* Represents a input document object in the system.
*/
class InputDocument extends Model
{
protected $table = 'INPUT_DOCUMENT';
protected $primaryKey = 'INP_DOC_ID';
public $timestamps = false;
/**
* Return relation process.
* @return object
*/
public function process()
{
return $this->belongsTo(Process::class, 'PRO_UID', 'PRO_UID');
}
/**
* Get input documents by PRO_UID
* @param string $proUid
* @return \Illuminate\Database\Eloquent\Collection
*/
public static function getByProUid($proUid)
{
return InputDocument::where('PRO_UID', '=', $proUid)->get();
}
/**
* Get input document by INP_DOC_UID
* @param type $inpDocUid
* @return Model
*/
public static function getByInpDocUid($inpDocUid)
{
return InputDocument::where('INP_DOC_UID', '=', $inpDocUid)->first();
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
/**
* Represents a output document object in the system.
*/
class OutputDocument extends Model
{
protected $table = 'OUTPUT_DOCUMENT';
protected $primaryKey = 'OUT_DOC_ID';
public $timestamps = false;
/**
* Return relation process.
* @return object
*/
public function process()
{
return $this->belongsTo(Process::class, 'PRO_UID', 'PRO_UID');
}
/**
* Get output documents by PRO_UID.
* @param string $proUid
* @return \Illuminate\Database\Eloquent\Collection
*/
public static function getByProUid($proUid)
{
return OutputDocument::where('PRO_UID', '=', $proUid)->get();
}
/**
* Get output document by OUT_DOC_UID.
* @param string $outDocUid
* @return Model
*/
public static function getByOutDocUid($outDocUid)
{
return OutputDocument::where('OUT_DOC_UID', '=', $outDocUid)->first();
}
}