Merged in bugfix/PMCORE-3552 (pull request #8330)

PMCORE-3552

Approved-by: Julio Cesar Laura Avendaño
This commit is contained in:
Andrea Adamczyk
2021-12-21 23:20:53 +00:00
committed by Julio Cesar Laura Avendaño
3 changed files with 73 additions and 31 deletions

View File

@@ -222,7 +222,7 @@ abstract class Importer
foreach ($objectList as $rowObject) { foreach ($objectList as $rowObject) {
if ($rowObject['name'] === 'PROCESSDEFINITION') { if ($rowObject['name'] === 'PROCESSDEFINITION') {
$onlyDiagram = true; $onlyDiagram = true;
$this->removeProject($onlyDiagram); $this->removeProject($onlyDiagram, $objectsToImport);
} }
} }
} catch (\Exception $e) { } catch (\Exception $e) {
@@ -453,7 +453,14 @@ abstract class Importer
$project->setDisabled(); $project->setDisabled();
} }
public function removeProject($onlyDiagram = false) /**
* Remove the project
*
* @param bool $onlyDiagram
* @param array $objectsToImport
* @return void
*/
public function removeProject($onlyDiagram = false, $objectsToImport = [])
{ {
/* @var $process \Process */ /* @var $process \Process */
$processes = new \Processes(); $processes = new \Processes();
@@ -464,7 +471,7 @@ abstract class Importer
$process->load($this->metadata["uid"]); $process->load($this->metadata["uid"]);
$this->currentProcessTitle = $process->getProTitle(); $this->currentProcessTitle = $process->getProTitle();
$project = \ProcessMaker\Project\Adapter\BpmnWorkflow::load($this->metadata["uid"]); $project = \ProcessMaker\Project\Adapter\BpmnWorkflow::load($this->metadata["uid"]);
$project->remove(true, false, $onlyDiagram); $project->remove(true, false, $onlyDiagram, $objectsToImport);
} }
/** /**

View File

@@ -1248,10 +1248,19 @@ class BpmnWorkflow extends Project\Bpmn
} }
} }
public function remove($flagForceRemoveProject = false, $flagRemoveCases = true, $onlyDiagram = false) /**
* Remove Project
*
* @param bool $flagForceRemoveProject
* @param bool $flagRemoveCases
* @param bool $onlyDiagram
* @param array $objectsToImport
* @return void
*/
public function remove($flagForceRemoveProject = false, $flagRemoveCases = true, $onlyDiagram = false, $objectsToImport = [])
{ {
parent::remove($flagForceRemoveProject); parent::remove($flagForceRemoveProject);
$this->wp->remove($flagRemoveCases, $onlyDiagram); $this->wp->remove($flagRemoveCases, $onlyDiagram, $objectsToImport);
} }
public static function createFromStruct(array $projectData, $generateUid = true, $allData = null) public static function createFromStruct(array $projectData, $generateUid = true, $allData = null)

View File

@@ -2,20 +2,21 @@
namespace ProcessMaker\Project; namespace ProcessMaker\Project;
use Criteria; use Criteria;
use ProcessMaker\Plugins\PluginRegistry; use ObjectPermissionPeer;
use ResultSet;
use Process as ClassesProcess; use Process as ClassesProcess;
use Tasks; use ProcessMaker\Exception;
use Task as ClassesTask; use ProcessMaker\Model\ProcessCategory;
use ProcessMaker\Plugins\PluginRegistry;
use ProcessMaker\Util;
use ProcessMaker\Util\Common;
use ProcessUserPeer;
use ReportTables;
use ResultSet;
use Route; use Route;
use RoutePeer; use RoutePeer;
use StepSupervisorPeer;
use ProcessMaker\Model\ProcessCategory; use Tasks;
use ProcessMaker\Util\Common; use Task as ClassesTask;
use ProcessMaker\Exception;
use ProcessMaker\Util;
use ReportTables;
/** /**
* Class Workflow * Class Workflow
@@ -115,11 +116,20 @@ class Workflow extends Handler
$process->update($data); $process->update($data);
} }
public function remove($flagRemoveCases = true, $onlyDiagram = false) /**
* Remove project
*
* @param bool $flagRemoveCases
* @param bool $onlyDiagram
* @param array $objectsToImport
* @return void
* @throws \Exception
*/
public function remove($flagRemoveCases = true, $onlyDiagram = false, $objectsToImport = [])
{ {
try { try {
self::log("Remove Process with uid: {$this->proUid}"); self::log("Remove Process with uid: {$this->proUid}");
$this->deleteProcess($this->proUid, $flagRemoveCases, $onlyDiagram); $this->deleteProcess($this->proUid, $flagRemoveCases, $onlyDiagram, $objectsToImport);
self::log("Remove Process Success!"); self::log("Remove Process Success!");
} catch (\Exception $e) { } catch (\Exception $e) {
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
@@ -579,7 +589,17 @@ class Workflow extends Handler
} }
} }
public function deleteProcess($sProcessUID, $flagRemoveCases = true, $onlyDiagram = false) /**
* Delete process
*
* @param string $sProcessUID
* @param bool $flagRemoveCases
* @param bool $onlyDiagram
* @param array $objectsToImport
* @return bool
* @throws \Exception
*/
public function deleteProcess($sProcessUID, $flagRemoveCases = true, $onlyDiagram = false, $objectsToImport = [])
{ {
try { try {
@@ -761,18 +781,24 @@ class Workflow extends Handler
$oDataset->next(); $oDataset->next();
} }
} }
//Delete the supervisors if (array_search('SUPERVISORS', array_column($objectsToImport, 'id')) !== false || empty($objectsToImport)) {
$oCriteria = new Criteria('workflow'); //Delete the supervisors
$oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID); $oCriteria = new Criteria('workflow');
\ProcessUserPeer::doDelete($oCriteria); $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
//Delete the object permissions ProcessUserPeer::doDelete($oCriteria);
$oCriteria = new Criteria('workflow'); }
$oCriteria->add(\ObjectPermissionPeer::PRO_UID, $sProcessUID); if (array_search('PERMISSIONS', array_column($objectsToImport, 'id')) !== false || empty($objectsToImport)) {
\ObjectPermissionPeer::doDelete($oCriteria); //Delete the object permissions
//Delete the step supervisors $oCriteria = new Criteria('workflow');
$oCriteria = new Criteria('workflow'); $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProcessUID);
$oCriteria->add(\StepSupervisorPeer::PRO_UID, $sProcessUID); ObjectPermissionPeer::doDelete($oCriteria);
\StepSupervisorPeer::doDelete($oCriteria); }
if (array_search('SUPERVISORSOBJECTS', array_column($objectsToImport, 'id')) !== false || empty($objectsToImport)) {
//Delete the step supervisors
$oCriteria = new Criteria('workflow');
$oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID);
StepSupervisorPeer::doDelete($oCriteria);
}
//Delete the report tables //Delete the report tables
$oCriteria = new Criteria('workflow'); $oCriteria = new Criteria('workflow');
$oCriteria->add(\ReportTablePeer::PRO_UID, $sProcessUID); $oCriteria->add(\ReportTablePeer::PRO_UID, $sProcessUID);