Merged in cochalo/processmaker (pull request #300)
Adicion para validar eliminacion de dynaform con dependencias
This commit is contained in:
@@ -160,5 +160,30 @@ class CaseTrackerObject extends BaseCaseTrackerObject
|
|||||||
throw ($e);
|
throw ($e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* verify if a dynaform is assigned some steps
|
||||||
|
*
|
||||||
|
* @param string $proUid the uid of the process
|
||||||
|
* @param string $dynUid the uid of the dynaform
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function verifyDynaformAssigCaseTracker ($dynUid, $proUid)
|
||||||
|
{
|
||||||
|
$res = array();
|
||||||
|
$oCriteria = new Criteria();
|
||||||
|
$oCriteria->addSelectColumn( CaseTrackerObjectPeer::CTO_UID );
|
||||||
|
$oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $proUid );
|
||||||
|
$oCriteria->add( CaseTrackerObjectPeer::CTO_UID_OBJ, $dynUid );
|
||||||
|
$oCriteria->add( CaseTrackerObjectPeer::CTO_TYPE_OBJ, 'DYNAFORM' );
|
||||||
|
$oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria );
|
||||||
|
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
||||||
|
while($oDataset->next()) {
|
||||||
|
$res[] = $oDataset->getRow();
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -125,5 +125,29 @@ class ObjectPermission extends BaseObjectPermission
|
|||||||
$aRow = $oDataset->getRow();
|
$aRow = $oDataset->getRow();
|
||||||
return ($aRow);
|
return ($aRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* verify if a dynaform is assigned some steps
|
||||||
|
*
|
||||||
|
* @param string $proUid the uid of the process
|
||||||
|
* @param string $dynUid the uid of the dynaform
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function verifyDynaformAssigObjectPermission ($dynUid, $proUid)
|
||||||
|
{
|
||||||
|
$res = array();
|
||||||
|
$oCriteria = new Criteria();
|
||||||
|
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_UID );
|
||||||
|
$oCriteria->add( ObjectPermissionPeer::PRO_UID, $proUid );
|
||||||
|
$oCriteria->add( ObjectPermissionPeer::OP_OBJ_UID, $dynUid );
|
||||||
|
$oCriteria->add( ObjectPermissionPeer::OP_OBJ_TYPE, 'DYNAFORM' );
|
||||||
|
$oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria );
|
||||||
|
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
||||||
|
while($oDataset->next()) {
|
||||||
|
$res[] = $oDataset->getRow();
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ class Step extends BaseStep
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* verify if a dynaform is assigned some steps
|
* <DEPRECATE PM3> verify if a dynaform is assigned some steps
|
||||||
*
|
*
|
||||||
* @param string $sproUid the uid of the process
|
* @param string $sproUid the uid of the process
|
||||||
* @param string $sObjUID the uid of the dynaform
|
* @param string $sObjUID the uid of the dynaform
|
||||||
@@ -405,6 +405,35 @@ class Step extends BaseStep
|
|||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* verify if a dynaform is assigned some steps
|
||||||
|
*
|
||||||
|
* @param string $proUid the uid of the process
|
||||||
|
* @param string $dynUid the uid of the dynaform
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function verifyDynaformAssigStep ($dynUid, $proUid)
|
||||||
|
{
|
||||||
|
$res = array();
|
||||||
|
$oCriteria = new Criteria();
|
||||||
|
$oCriteria->addSelectColumn( StepPeer::TAS_UID );
|
||||||
|
$oCriteria->addSelectColumn( ContentPeer::CON_VALUE );
|
||||||
|
$oCriteria->addSelectColumn( StepPeer::STEP_POSITION );
|
||||||
|
$oCriteria->add( StepPeer::PRO_UID, $proUid );
|
||||||
|
$oCriteria->add( StepPeer::STEP_UID_OBJ, $dynUid );
|
||||||
|
$oCriteria->add( StepPeer::STEP_TYPE_OBJ, 'DYNAFORM' );
|
||||||
|
$oCriteria->add( ContentPeer::CON_CATEGORY, 'TAS_TITLE');
|
||||||
|
$oCriteria->add( ContentPeer::CON_LANG, SYS_LANG);
|
||||||
|
$oCriteria->addJoin( StepPeer::TAS_UID, ContentPeer::CON_ID, Criteria::INNER_JOIN);
|
||||||
|
$oDataset = StepPeer::doSelectRS( $oCriteria );
|
||||||
|
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
||||||
|
while($oDataset->next()) {
|
||||||
|
$res[] = $oDataset->getRow();
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
public function getAttribute ($node, $attName)
|
public function getAttribute ($node, $attName)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -224,5 +224,29 @@ class StepSupervisor extends BaseStepSupervisor
|
|||||||
$aRow = $oDataset->getRow();
|
$aRow = $oDataset->getRow();
|
||||||
return ($aRow);
|
return ($aRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* verify if a dynaform is assigned some steps
|
||||||
|
*
|
||||||
|
* @param string $proUid the uid of the process
|
||||||
|
* @param string $dynUid the uid of the dynaform
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function verifyDynaformAssigStepSupervisor ($dynUid, $proUid)
|
||||||
|
{
|
||||||
|
$res = array();
|
||||||
|
$oCriteria = new Criteria();
|
||||||
|
$oCriteria->addSelectColumn( StepSupervisorPeer::STEP_UID );
|
||||||
|
$oCriteria->add( StepSupervisorPeer::PRO_UID, $proUid );
|
||||||
|
$oCriteria->add( StepSupervisorPeer::STEP_UID_OBJ, $dynUid );
|
||||||
|
$oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM' );
|
||||||
|
$oDataset = StepSupervisorPeer::doSelectRS( $oCriteria );
|
||||||
|
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
||||||
|
while($oDataset->next()) {
|
||||||
|
$res[] = $oDataset->getRow();
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -139,20 +139,99 @@ class DynaForm
|
|||||||
*
|
*
|
||||||
* return bool Return true if a DynaForm is assigned some Steps, false otherwise
|
* return bool Return true if a DynaForm is assigned some Steps, false otherwise
|
||||||
*/
|
*/
|
||||||
public function dynaFormAssignedStep($dynaFormUid, $processUid)
|
public function dynaFormDepends($dynUid, $proUid)
|
||||||
{
|
{
|
||||||
try {
|
$oCriteria = new \Criteria();
|
||||||
$step = new \Step();
|
$oCriteria->addSelectColumn( \DynaformPeer::DYN_TYPE );
|
||||||
|
$oCriteria->add( \DynaformPeer::DYN_UID, $dynUid );
|
||||||
|
$oCriteria->add( \DynaformPeer::PRO_UID, $proUid );
|
||||||
|
$oDataset = \DynaformPeer::doSelectRS( $oCriteria );
|
||||||
|
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
|
||||||
|
$oDataset->next();
|
||||||
|
$dataDyna = $oDataset->getRow();
|
||||||
|
|
||||||
$arrayData = $step->loadInfoAssigDynaform($processUid, $dynaFormUid);
|
if ($dataDyna['DYN_TYPE'] == 'grid') {
|
||||||
|
$formsDepend = array();
|
||||||
|
\G::LoadSystem( 'dynaformhandler' );
|
||||||
|
|
||||||
if (is_array($arrayData)) {
|
$oCriteria = new \Criteria( 'workflow' );
|
||||||
return true;
|
$oCriteria->addSelectColumn( \DynaformPeer::DYN_UID );
|
||||||
} else {
|
$oCriteria->addSelectColumn( \ContentPeer::CON_VALUE );
|
||||||
return false;
|
$oCriteria->add( \DynaformPeer::PRO_UID, $proUid );
|
||||||
|
$oCriteria->add( \DynaformPeer::DYN_TYPE, "xmlform" );
|
||||||
|
$oCriteria->add( \ContentPeer::CON_CATEGORY, 'DYN_TITLE');
|
||||||
|
$oCriteria->add( \ContentPeer::CON_LANG, SYS_LANG);
|
||||||
|
$oCriteria->addJoin( \DynaformPeer::DYN_UID, \ContentPeer::CON_ID, \Criteria::INNER_JOIN);
|
||||||
|
$oDataset = \DynaformPeer::doSelectRS( $oCriteria );
|
||||||
|
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
|
||||||
|
|
||||||
|
while ($oDataset->next()) {
|
||||||
|
$dataForms = $oDataset->getRow();
|
||||||
|
$dynHandler = new \dynaFormHandler(PATH_DYNAFORM . $proUid . PATH_SEP . $dataForms["DYN_UID"] . ".xml");
|
||||||
|
$dynFields = $dynHandler->getFields();
|
||||||
|
foreach ($dynFields as $field) {
|
||||||
|
$sType = \Step::getAttribute( $field, 'type' );
|
||||||
|
if ($sType == 'grid') {
|
||||||
|
$sxmlgrid = \Step::getAttribute( $field, 'xmlgrid' );
|
||||||
|
$aGridInfo = explode( "/", $sxmlgrid );
|
||||||
|
if ($aGridInfo[0] == $proUid && $aGridInfo[1] == $dynUid) {
|
||||||
|
$formsDepend[] = $dataForms["CON_VALUE"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
if (!empty($formsDepend)) {
|
||||||
throw $e;
|
$message = "You can not delete the grid '$dynUid', because it is in the ";
|
||||||
|
$message .= (count($formsDepend) == 1) ? 'form' : 'forms';
|
||||||
|
$message .= ': ' . implode(', ', $formsDepend);
|
||||||
|
return $message;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$flagDepend = false;
|
||||||
|
$stepsDepends = \Step::verifyDynaformAssigStep($dynUid, $proUid);
|
||||||
|
|
||||||
|
$messageSteps = '(0) Depends in steps';
|
||||||
|
if (!empty($stepsDepends)) {
|
||||||
|
$flagDepend = true;
|
||||||
|
$countSteps = count($stepsDepends);
|
||||||
|
$messTemp = '';
|
||||||
|
foreach ($stepsDepends as $value) {
|
||||||
|
$messTemp .= ", the task '" . $value['CON_VALUE'] . "' position " . $value['STEP_POSITION'];
|
||||||
|
}
|
||||||
|
$messageSteps = "($countSteps) Depends in steps in" . $messTemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
$stepSupervisorsDepends = \StepSupervisor::verifyDynaformAssigStepSupervisor($dynUid, $proUid);
|
||||||
|
$messageStepsSupervisors = '(0) Depends in steps supervisor';
|
||||||
|
if (!empty($stepSupervisorsDepends)) {
|
||||||
|
$flagDepend = true;
|
||||||
|
$countSteps = count($stepSupervisorsDepends);
|
||||||
|
$messageStepsSupervisors = "($countSteps) Depends in steps supervisor";
|
||||||
|
}
|
||||||
|
|
||||||
|
$objectPermissionDepends = \ObjectPermission::verifyDynaformAssigObjectPermission($dynUid, $proUid);
|
||||||
|
$messageObjectPermission = '(0) Depends in permissions';
|
||||||
|
if (!empty($objectPermissionDepends)) {
|
||||||
|
$flagDepend = true;
|
||||||
|
$countSteps = count($objectPermissionDepends);
|
||||||
|
$messageObjectPermission = "($countSteps) Depends in permissions";
|
||||||
|
}
|
||||||
|
|
||||||
|
$caseTrackerDepends = \CaseTrackerObject::verifyDynaformAssigCaseTracker($dynUid, $proUid);
|
||||||
|
$messageCaseTracker = '(0) Depends in case traker';
|
||||||
|
if (!empty($caseTrackerDepends)) {
|
||||||
|
$flagDepend = true;
|
||||||
|
$countSteps = count($caseTrackerDepends);
|
||||||
|
$messageCaseTracker = "($countSteps) Depends in case traker";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($flagDepend) {
|
||||||
|
$message = "You can not delete the dynaform '$dynUid', because it has the following dependencies: \n\n";
|
||||||
|
$message .= $messageSteps . ".\n" . $messageStepsSupervisors . ".\n";
|
||||||
|
$message .= $messageObjectPermission . ".\n" . $messageCaseTracker;
|
||||||
|
return $message;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,9 +246,7 @@ class DynaForm
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$stepSupervisor = new \StepSupervisor();
|
$stepSupervisor = new \StepSupervisor();
|
||||||
|
|
||||||
$arrayData = $stepSupervisor->loadInfo($dynaFormUid);
|
$arrayData = $stepSupervisor->loadInfo($dynaFormUid);
|
||||||
|
|
||||||
if (is_array($arrayData)) {
|
if (is_array($arrayData)) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@@ -381,9 +458,10 @@ class DynaForm
|
|||||||
|
|
||||||
$processUid = $arrayDynaFormData["PRO_UID"];
|
$processUid = $arrayDynaFormData["PRO_UID"];
|
||||||
|
|
||||||
//Verify data
|
//Verify dependencies dynaforms
|
||||||
if ($this->dynaFormAssignedStep($dynaFormUid, $processUid)) {
|
$resultDependeds = $this->dynaFormDepends($dynaFormUid, $processUid);
|
||||||
throw (new \Exception("You cannot delete this Dynaform while it is assigned to a step"));
|
if ($resultDependeds != '') {
|
||||||
|
throw (new \Exception($resultDependeds));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Delete
|
//Delete
|
||||||
|
|||||||
Reference in New Issue
Block a user