From 7b9e7fffeb3c74ba4e4a6c33f5f1f13caf6515ff Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Mon, 29 Sep 2014 14:44:37 -0400 Subject: [PATCH 01/17] Se adiciona funcionalidad de lanes y lanesets para project --- .../engine/classes/model/BpmnActivity.php | 11 +- .../engine/classes/model/BpmnArtifact.php | 11 +- workflow/engine/classes/model/BpmnData.php | 11 +- workflow/engine/classes/model/BpmnEvent.php | 11 +- workflow/engine/classes/model/BpmnGateway.php | 11 +- workflow/engine/classes/model/BpmnLane.php | 157 +++++++++++++++++ workflow/engine/classes/model/BpmnLaneset.php | 165 ++++++++++++++++++ .../engine/classes/model/BpmnParticipant.php | 11 +- .../Project/Adapter/BpmnWorkflow.php | 95 ++++++++++ .../engine/src/ProcessMaker/Project/Bpmn.php | 146 ++++++++++++++-- 10 files changed, 600 insertions(+), 29 deletions(-) diff --git a/workflow/engine/classes/model/BpmnActivity.php b/workflow/engine/classes/model/BpmnActivity.php index 1c4d1e626..841c8586b 100644 --- a/workflow/engine/classes/model/BpmnActivity.php +++ b/workflow/engine/classes/model/BpmnActivity.php @@ -32,8 +32,6 @@ class BpmnActivity extends BaseBpmnActivity private function setBoundDefaults() { $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); $this->bound->setPrjUid($this->getPrjUid()); $this->bound->setElementUid($this->getActUid()); @@ -41,7 +39,16 @@ class BpmnActivity extends BaseBpmnActivity $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } } } diff --git a/workflow/engine/classes/model/BpmnArtifact.php b/workflow/engine/classes/model/BpmnArtifact.php index 2c9adde16..ccefa79ec 100644 --- a/workflow/engine/classes/model/BpmnArtifact.php +++ b/workflow/engine/classes/model/BpmnArtifact.php @@ -32,8 +32,6 @@ class BpmnArtifact extends BaseBpmnArtifact private function setBoundDefaults() { $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); $this->bound->setPrjUid($this->getPrjUid()); $this->bound->setElementUid($this->getArtUid()); @@ -41,7 +39,16 @@ class BpmnArtifact extends BaseBpmnArtifact $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } } } diff --git a/workflow/engine/classes/model/BpmnData.php b/workflow/engine/classes/model/BpmnData.php index d64d88b50..b8385d626 100644 --- a/workflow/engine/classes/model/BpmnData.php +++ b/workflow/engine/classes/model/BpmnData.php @@ -32,8 +32,6 @@ class BpmnData extends BaseBpmnData private function setBoundDefaults() { $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); $this->bound->setPrjUid($this->getPrjUid()); $this->bound->setElementUid($this->getDatUid()); @@ -41,7 +39,16 @@ class BpmnData extends BaseBpmnData $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } } } diff --git a/workflow/engine/classes/model/BpmnEvent.php b/workflow/engine/classes/model/BpmnEvent.php index 57859f34c..d799dd0ea 100644 --- a/workflow/engine/classes/model/BpmnEvent.php +++ b/workflow/engine/classes/model/BpmnEvent.php @@ -32,8 +32,6 @@ class BpmnEvent extends BaseBpmnEvent private function setBoundDefaults() { $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); $this->bound->setPrjUid($this->getPrjUid()); $this->bound->setElementUid($this->getEvnUid()); @@ -41,7 +39,16 @@ class BpmnEvent extends BaseBpmnEvent $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } } } diff --git a/workflow/engine/classes/model/BpmnGateway.php b/workflow/engine/classes/model/BpmnGateway.php index c402532e7..6d9a43107 100644 --- a/workflow/engine/classes/model/BpmnGateway.php +++ b/workflow/engine/classes/model/BpmnGateway.php @@ -32,8 +32,6 @@ class BpmnGateway extends BaseBpmnGateway private function setBoundDefaults() { $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); $this->bound->setPrjUid($this->getPrjUid()); $this->bound->setElementUid($this->getGatUid()); @@ -41,7 +39,16 @@ class BpmnGateway extends BaseBpmnGateway $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } } } diff --git a/workflow/engine/classes/model/BpmnLane.php b/workflow/engine/classes/model/BpmnLane.php index bc7152374..d80dcd539 100644 --- a/workflow/engine/classes/model/BpmnLane.php +++ b/workflow/engine/classes/model/BpmnLane.php @@ -16,4 +16,161 @@ require_once 'classes/model/om/BaseBpmnLane.php'; */ class BpmnLane extends BaseBpmnLane { + private $bound; + + public function __construct($generateUid = true) + { + $this->bound = new BpmnBound(); + $this->setBoundDefaults(); + } + + public function getBound() + { + return $this->bound; + } + + private function setBoundDefaults() + { + $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); + + $this->bound->setPrjUid($this->getPrjUid()); + $this->bound->setElementUid($this->getLanUid()); + + $project = BpmnProjectPeer::retrieveByPK($this->getPrjUid()); + + if (is_object($project)) { + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(BpmnProcessPeer::DIA_UID); + $criteria->add(BpmnProcessPeer::PRJ_UID, $this->getPrjUid(), \Criteria::EQUAL); + $rsCriteria = BpmnProcessPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + $row = $rsCriteria->getRow(); + $this->bound->setDiaUid($row["DIA_UID"]); + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($row["DIA_UID"]); + } + } + + public static function findOneBy($field, $value) + { + $rows = self::findAllBy($field, $value); + + return empty($rows) ? null : $rows[0]; + } + + public static function findAllBy($field, $value) + { + $c = new Criteria('workflow'); + $c->add($field, $value, Criteria::EQUAL); + + return BpmnLanePeer::doSelect($c); + } + + public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER) + { + $c = new Criteria('workflow'); + $c->addSelectColumn("BPMN_LANE.*"); + $c->addSelectColumn("BPMN_BOUND.*"); + $c->addJoin(BpmnLanePeer::LAN_UID, BpmnBoundPeer::ELEMENT_UID, Criteria::LEFT_JOIN); + + if (! is_null($prjUid)) { + $c->add(BpmnLanePeer::PRJ_UID, $prjUid, Criteria::EQUAL); + } + + $rs = BpmnLanePeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + $lanes = array(); + + while ($rs->next()) { + $lanes[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow(); + } + + return $lanes; + } + + // OVERRIDES + + public function setLanUid($actUid) + { + parent::setLanUid($actUid); + $this->bound->setElementUid($this->getLanUid()); + } + + public function setPrjUid($prjUid) + { + parent::setPrjUid($prjUid); + $this->bound->setPrjUid($this->getPrjUid()); + } + + public function save($con = null) + { + parent::save($con); + + $this->setBoundDefaults(); + + if ($this->bound->getBouUid() == "") { + $this->bound->setBouUid(\ProcessMaker\Util\Common::generateUID()); + } + + $this->bound->save($con); + } + + public function delete($con = null) + { + // first, delete the related bound object + if (! is_object($this->bound) || $this->bound->getBouUid() == "") { + $this->bound = BpmnBound::findByElement('Lane', $this->getLanUid()); + } + + if (is_object($this->bound)) { + $this->bound->delete($con); + } + + parent::delete($con); + } + + public function fromArray($data, $type = BasePeer::TYPE_FIELDNAME) + { + parent::fromArray($data, $type); + + $bound = BpmnBound::findByElement('Lane', $this->getLanUid()); + + if (is_object($bound)) { + $this->bound = $bound; + } else { + $this->bound = new BpmnBound(); + $this->bound->setBouUid(ProcessMaker\Util\Common::generateUID()); + } + + $this->bound->fromArray($data, BasePeer::TYPE_FIELDNAME); + } + + public function toArray($type = BasePeer::TYPE_FIELDNAME) + { + $data = parent::toArray($type); + $bouUid = $this->bound->getBouUid(); + + if (empty($bouUid)) { + $bound = BpmnBound::findByElement('Lane', $this->getLanUid()); + + if (is_object($bound)) { + $this->bound = $bound; + } + } + + $data = array_merge($data, $this->bound->toArray($type)); + + return $data; + } + + public static function exists($actUid) + { + $c = new Criteria("workflow"); + $c->add(BpmnlanesPeer::LAN_UID, $actUid); + + return BpmnlanesPeer::doCount($c) > 0 ? true : false; + } + } // BpmnLane diff --git a/workflow/engine/classes/model/BpmnLaneset.php b/workflow/engine/classes/model/BpmnLaneset.php index ce8823e77..46d332ac9 100644 --- a/workflow/engine/classes/model/BpmnLaneset.php +++ b/workflow/engine/classes/model/BpmnLaneset.php @@ -15,5 +15,170 @@ require_once 'classes/model/om/BaseBpmnLaneset.php'; * @package classes.model */ class BpmnLaneset extends BaseBpmnLaneset { + private $bound; + + public function __construct($generateUid = true) + { + $this->bound = new BpmnBound(); + $this->setBoundDefaults(); + } + + public function getBound() + { + return $this->bound; + } + + private function setBoundDefaults() + { + $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); + + $this->bound->setPrjUid($this->getPrjUid()); + $this->bound->setElementUid($this->getLnsUid()); + + $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); + + if (is_object($process)) { + + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } + } + } + + public static function findOneBy($field, $value) + { + $rows = self::findAllBy($field, $value); + + return empty($rows) ? null : $rows[0]; + } + + public static function findAllBy($field, $value) + { + $c = new Criteria('workflow'); + $c->add($field, $value, Criteria::EQUAL); + + return BpmnLanesetPeer::doSelect($c); + } + + public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER) + { + $c = new Criteria('workflow'); + $c->addSelectColumn("BPMN_LANESET.*"); + $c->addSelectColumn("BPMN_BOUND.*"); + $c->addJoin(BpmnLanesetPeer::LNS_UID, BpmnBoundPeer::ELEMENT_UID, Criteria::LEFT_JOIN); + + if (! is_null($prjUid)) { + $c->add(BpmnLanesetPeer::PRJ_UID, $prjUid, Criteria::EQUAL); + } + + $rs = BpmnLanesetPeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + $laneSet = array(); + + while ($rs->next()) { + $laneSet[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow(); + } + + return $laneSet; + } + + // OVERRIDES + + public function setLnsUid($actUid) + { + parent::setLnsUid($actUid); + $this->bound->setElementUid($this->getLnsUid()); + } + + public function setPrjUid($prjUid) + { + parent::setPrjUid($prjUid); + $this->bound->setPrjUid($this->getPrjUid()); + } + + public function setProUid($proUid) + { + parent::setProUid($proUid); + + $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); + $this->bound->setDiaUid($process->getDiaUid()); + } + + public function save($con = null) + { + parent::save($con); + + $this->setBoundDefaults(); + + if ($this->bound->getBouUid() == "") { + $this->bound->setBouUid(\ProcessMaker\Util\Common::generateUID()); + } + + $this->bound->save($con); + } + + public function delete($con = null) + { + // first, delete the related bound object + if (! is_object($this->bound) || $this->bound->getBouUid() == "") { + $this->bound = BpmnBound::findByElement('LaneSet', $this->getLnsUid()); + } + + if (is_object($this->bound)) { + $this->bound->delete($con); + } + + parent::delete($con); + } + + public function fromArray($data, $type = BasePeer::TYPE_FIELDNAME) + { + parent::fromArray($data, $type); + + $bound = BpmnBound::findByElement('LaneSet', $this->getLnsUid()); + + if (is_object($bound)) { + $this->bound = $bound; + } else { + $this->bound = new BpmnBound(); + $this->bound->setBouUid(ProcessMaker\Util\Common::generateUID()); + } + + $this->bound->fromArray($data, BasePeer::TYPE_FIELDNAME); + } + + public function toArray($type = BasePeer::TYPE_FIELDNAME) + { + $data = parent::toArray($type); + $bouUid = $this->bound->getBouUid(); + + if (empty($bouUid)) { + $bound = BpmnBound::findByElement('LaneSet', $this->getLnsUid()); + + if (is_object($bound)) { + $this->bound = $bound; + } + } + + $data = array_merge($data, $this->bound->toArray($type)); + + return $data; + } + + public static function exists($actUid) + { + $c = new Criteria("workflow"); + $c->add(BpmnLanesetPeer::LNS_UID, $actUid); + + return BpmnLanesetPeer::doCount($c) > 0 ? true : false; + } + } // BpmnLaneset diff --git a/workflow/engine/classes/model/BpmnParticipant.php b/workflow/engine/classes/model/BpmnParticipant.php index b74b2245e..33659ec60 100644 --- a/workflow/engine/classes/model/BpmnParticipant.php +++ b/workflow/engine/classes/model/BpmnParticipant.php @@ -32,8 +32,6 @@ class BpmnParticipant extends BaseBpmnParticipant private function setBoundDefaults() { $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); $this->bound->setPrjUid($this->getPrjUid()); $this->bound->setElementUid($this->getParUid()); @@ -41,7 +39,16 @@ class BpmnParticipant extends BaseBpmnParticipant $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + + if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); + } else { + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->bound->getBouElement()); + } } } diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index d84b383e1..3eca7e1b1 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -671,6 +671,8 @@ class BpmnWorkflow extends Project\Bpmn $diagram["lanes"] = $bwp->getLanes($configList); $diagram["data"] = $bwp->getDataCollection($configList); $diagram["participants"] = $bwp->getParticipants($configList); + $diagram["lanesets"] = $bwp->getLanesets($configList); + $diagram["lanes"] = $bwp->getLanes($configList); $project["diagrams"][] = $diagram; } @@ -726,6 +728,8 @@ class BpmnWorkflow extends Project\Bpmn $diagram["events"] = isset($diagram["events"])? $diagram["events"]: array(); $diagram["data"] = isset($diagram["data"])? $diagram["data"]: array(); $diagram["participants"] = isset($diagram["participants"])? $diagram["participants"]: array(); + $diagram["lanesets"] = isset($diagram["lanesets"])? $diagram["lanesets"]: array(); + $diagram["lanes"] = isset($diagram["lanes"])? $diagram["lanes"]: array(); $result = array(); $projectData['prj_uid'] = $prjUid; @@ -1032,6 +1036,97 @@ class BpmnWorkflow extends Project\Bpmn } } + //// + /* + * Diagram's Laneset Handling + */ + $whiteList = array(); + foreach ($diagram["laneset"] as $i => $lanesetData) { + $lanesetData = array_change_key_case($lanesetData, CASE_UPPER); + + $dataObject = $bwp->getLaneset($lanesetData["LNS_UID"]); + + if ($forceInsert || is_null($dataObject)) { + if ($generateUid) { + //Laneset + unset($lanesetData["BOU_UID"]); + + $uidOld = $lanesetData["LNS_UID"]; + $lanesetData["LNS_UID"] = Util\Common::generateUID(); + + $result[] = array( + "object" => "laneset", + "old_uid" => $uidOld, + "new_uid" => $lanesetData["LNS_UID"] + ); + } + $bwp->addLaneset($lanesetData); + } elseif (! $bwp->isEquals($dataObject, $lanesetData)) { + $bwp->updateLanseset($lanesetData["LNS_UID"], $lanesetData); + } else { + Util\Logger::log("Update Laneset ({$lanesetData["LNS_UID"]}) Skipped - No changes required"); + } + + $diagram["laneset"][$i] = $lanesetData; + $whiteList[] = $lanesetData["LNS_UID"]; + } + + $dataCollection = $bwp->getLanesets(); + + // looking for removed elements + foreach ($dataCollection as $lanesetData) { + if (! in_array($lanesetData["LNS_UID"], $whiteList)) { + // If it is not in the white list, then remove them + $bwp->removeLaneset($lanesetData["LNS_UID"]); + } + } + + //// + /* + * Diagram's Lane Handling + */ + $whiteList = array(); + foreach ($diagram["lanes"] as $i => $laneData) { + $laneData = array_change_key_case($laneData, CASE_UPPER); + + $dataObject = $bwp->getLane($laneData["LAN_UID"]); + + if ($forceInsert || is_null($dataObject)) { + if ($generateUid) { + //Laneset + unset($laneData["BOU_UID"]); + + $uidOld = $laneData["LAN_UID"]; + $laneData["LAN_UID"] = Util\Common::generateUID(); + + $result[] = array( + "object" => "lane", + "old_uid" => $uidOld, + "new_uid" => $laneData["LAN_UID"] + ); + } + $bwp->addLane($laneData); + } elseif (! $bwp->isEquals($dataObject, $laneData)) { + $bwp->updateLanse($laneData["LAN_UID"], $laneData); + } else { + Util\Logger::log("Update Lane ({$laneData["LAN_UID"]}) Skipped - No changes required"); + } + + $diagram["lane"][$i] = $laneData; + $whiteList[] = $laneData["LAN_UID"]; + } + + $dataCollection = $bwp->getLanes(); + + // looking for removed elements + foreach ($dataCollection as $laneData) { + if (! in_array($laneData["LAN_UID"], $whiteList)) { + // If it is not in the white list, then remove them + $bwp->removeLane($laneData["LAN_UID"]); + } + } + + /* * Diagram's Flows Handling */ diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index f330f9091..9ddfdd72e 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -4,8 +4,6 @@ namespace ProcessMaker\Project; use \BpmnProject as Project; use \BpmnProcess as Process; use \BpmnDiagram as Diagram; -use \BpmnLaneset as Laneset; -use \BpmnLane as Lane; use \BpmnActivity as Activity; use \BpmnBound as Bound; use \BpmnEvent as Event; @@ -16,8 +14,7 @@ use \BpmnArtifact as Artifact; use \BpmnProjectPeer as ProjectPeer; use \BpmnProcessPeer as ProcessPeer; use \BpmnDiagramPeer as DiagramPeer; -use \BpmnLanesetPeer as LanesetPeer; -use \BpmnLanePeer as LanePeer; + use \BpmnActivityPeer as ActivityPeer; use \BpmnBoundPeer as BoundPeer; use \BpmnEventPeer as EventPeer; @@ -26,6 +23,10 @@ use \BpmnFlowPeer as FlowPeer; use \BpmnArtifactPeer as ArtifactPeer; use \BpmnParticipant as Participant; use \BpmnParticipantPeer as ParticipantPeer; +use \BpmnLaneset as Laneset; +use \BpmnLanesetPeer as LanesetPeer; +use \BpmnLane as Lane; +use \BpmnLanePeer as LanePeer; use \BasePeer; use \Criteria as Criteria; @@ -78,6 +79,8 @@ class Bpmn extends Handler "flow" => array("PRJ_UID", "DIA_UID", "FLO_ELEMENT_DEST_PORT", "FLO_ELEMENT_ORIGIN_PORT"), "data" => array("PRJ_UID"), "participant" => array("PRJ_UID"), + "laneset" => array(), + "lane" => array() ); @@ -179,7 +182,12 @@ class Bpmn extends Handler foreach ($this->getParticipants() as $participant) { $this->removeParticipant($participant["PAR_UID"]); } - + foreach ($this->getLanesets() as $laneset) { + $this->removeLaneset($laneset["LNS_UID"]); + } + foreach ($this->getLanes() as $lane) { + $this->removeLane($lane["LAN_UID"]); + } if ($process = $this->getProcess("object")) { $process->delete(); } @@ -635,6 +643,8 @@ class Bpmn extends Handler case "bpmnArtifact": $class = "BpmnArtifact"; break; case "bpmnData": $class = "BpmnData"; break; case "bpmnParticipant": $class = "BpmnParticipant"; break; + case "bpmnLaneset": $class = "BpmnLaneset"; break; + case "bpmnLane": $class = "BpmnLane"; break; default: throw new \RuntimeException(sprintf("Invalid Object type, accepted types: [%s|%s|%s|%s], given %s.", "BpmnActivity", "BpmnBpmnGateway", "BpmnEvent", "bpmnArtifact", $data["FLO_ELEMENT_ORIGIN_TYPE"] @@ -655,6 +665,8 @@ class Bpmn extends Handler case "bpmnArtifact": $class = "BpmnArtifact"; break; case "bpmnData": $class = "BpmnData"; break; case "bpmnParticipant": $class = "BpmnParticipant"; break; + case "bpmnLaneset": $class = "BpmnLaneset"; break; + case "bpmnLane": $class = "BpmnLane"; break; default: throw new \RuntimeException(sprintf("Invalid Object type, accepted types: [%s|%s|%s|%s], given %s.", "BpmnActivity", "BpmnBpmnGateway", "BpmnEvent", "bpmnArtifact", $data["FLO_ELEMENT_DEST_TYPE"] @@ -1005,36 +1017,136 @@ class Bpmn extends Handler public function addLane($data) { - // TODO: Implement update() method. + // setting defaults + $processUid = $this->getProcess("object")->getProUid(); + + $data['LAN_UID'] = array_key_exists('LAN_UID', $data) ? $data['LAN_UID'] : Common::generateUID(); + $data["PRO_UID"] = $processUid; + + try { + self::log("Add Lane with data: ", $data); + $lane = new Lane(); + $lane->fromArray($data, BasePeer::TYPE_FIELDNAME); + $lane->setPrjUid($this->getUid()); + //$lane->setProUid($this->getProcess("object")->getProUid()); + $lane->save(); + self::log("Add Lane Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } + + return $lane->getLanUid(); } - public function getLane($lanUid) + public function getLane($lanUid, $retType = 'array') { - // TODO: Implement update() method. + $lane = LanePeer::retrieveByPK($lanUid); + + if ($retType != "object" && ! empty($lane)) { + $lane = $lane->toArray(); + $lane = self::filterArrayKeys($lane, self::$excludeFields["lane"]); + } + + return $lane; } - public function getLanes() + public function getLanes($start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER) { - // TODO: Implement update() method. - return array(); + if (is_array($start)) { + extract($start); + } + + $filter = $changeCaseTo != CASE_UPPER ? array_map("strtolower", self::$excludeFields["lane"]) : self::$excludeFields["lane"]; + + return self::filterCollectionArrayKeys( + Lane::getAll($this->getUid(), $start, $limit, $filter, $changeCaseTo), + $filter + ); + } + + public function removeLane($lanUid) + { + try { + self::log("Remove Lane: $lanUid"); + + $lane = LanePeer::retrieveByPK($lanUid); + $lane->delete(); + + // remove related object (flows) + Flow::removeAllRelated($lanUid); + + self::log("Remove Lane Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } } public function addLaneset($data) { - // TODO: Implement update() method. + // setting defaults + $processUid = $this->getProcess("object")->getProUid(); + $data['LNS_UID'] = array_key_exists('LNS_UID', $data) ? $data['LNS_UID'] : Common::generateUID(); + $data["PRO_UID"] = $processUid; + + try { + self::log("Add Laneset with data: ", $data); + $laneset = new Laneset(); + $laneset->fromArray($data, BasePeer::TYPE_FIELDNAME); + $laneset->setPrjUid($this->getUid()); + $laneset->setProUid($this->getProcess("object")->getProUid()); + $laneset->save(); + self::log("Add Laneset Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } + + return $laneset->getLnsUid(); } - public function getLaneset($lnsUid) + public function getLaneset($lnsUid, $retType = 'array') { - // TODO: Implement update() method. + $laneset = LanesetPeer::retrieveByPK($lnsUid); + + if ($retType != "object" && ! empty($laneset)) { + $laneset = $laneset->toArray(); + $laneset = self::filterArrayKeys($laneset, self::$excludeFields["laneset"]); + } + + return $laneset; } - public function getLanesets() + public function getLanesets($start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER) { - // TODO: Implement update() method. - return array(); + if (is_array($start)) { + extract($start); + } + $filter = $changeCaseTo != CASE_UPPER ? array_map("strtolower", self::$excludeFields["laneset"]) : self::$excludeFields["laneset"]; + return self::filterCollectionArrayKeys( + Laneset::getAll($this->getUid(), $start, $limit, $filter, $changeCaseTo), + $filter + ); } + public function removeLaneset($lnsUid) + { + try { + self::log("Remove Laneset: $lnsUid"); + + $laneset = LanesetPeer::retrieveByPK($lnsUid); + $laneset->delete(); + + // remove related object (flows) + Flow::removeAllRelated($lnsUid); + + self::log("Remove Laneset Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } + } public function isModified($element, $uid, $newData) { From 2802cc51f1006065bdcb012ac172bbbe19c7093b Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Fri, 3 Oct 2014 13:36:14 -0400 Subject: [PATCH 02/17] Fix. Adicion de funcionalidad de lanes y lanesets para project --- workflow/engine/classes/model/BpmnActivity.php | 12 +++++------- workflow/engine/classes/model/BpmnArtifact.php | 12 +++++------- workflow/engine/classes/model/BpmnData.php | 12 +++++------- workflow/engine/classes/model/BpmnEvent.php | 12 +++++------- workflow/engine/classes/model/BpmnGateway.php | 12 +++++------- workflow/engine/classes/model/BpmnLane.php | 5 +++-- workflow/engine/classes/model/BpmnLaneset.php | 10 ++-------- workflow/engine/classes/model/BpmnParticipant.php | 12 +++++------- 8 files changed, 35 insertions(+), 52 deletions(-) diff --git a/workflow/engine/classes/model/BpmnActivity.php b/workflow/engine/classes/model/BpmnActivity.php index 841c8586b..c33319b3b 100644 --- a/workflow/engine/classes/model/BpmnActivity.php +++ b/workflow/engine/classes/model/BpmnActivity.php @@ -39,16 +39,14 @@ class BpmnActivity extends BaseBpmnActivity $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { - $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { + if (isset($this->getLnsUid)) { $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); + $this->bound->setBouElement($this->getLnsUid()); + } else { + $this->bound->setBouContainer('bpmnDiagram'); } + $this->bound->setBouElement($process->getDiaUid()); } } diff --git a/workflow/engine/classes/model/BpmnArtifact.php b/workflow/engine/classes/model/BpmnArtifact.php index ccefa79ec..4b72b42a2 100644 --- a/workflow/engine/classes/model/BpmnArtifact.php +++ b/workflow/engine/classes/model/BpmnArtifact.php @@ -39,16 +39,14 @@ class BpmnArtifact extends BaseBpmnArtifact $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { - $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { + if (isset($this->getLnsUid)) { $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); + $this->bound->setBouElement($this->getLnsUid()); + } else { + $this->bound->setBouContainer('bpmnDiagram'); } + $this->bound->setBouElement($process->getDiaUid()); } } diff --git a/workflow/engine/classes/model/BpmnData.php b/workflow/engine/classes/model/BpmnData.php index b8385d626..cdb43fa84 100644 --- a/workflow/engine/classes/model/BpmnData.php +++ b/workflow/engine/classes/model/BpmnData.php @@ -39,16 +39,14 @@ class BpmnData extends BaseBpmnData $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { - $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { + if (isset($this->getLnsUid)) { $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); + $this->bound->setBouElement($this->getLnsUid()); + } else { + $this->bound->setBouContainer('bpmnDiagram'); } + $this->bound->setBouElement($process->getDiaUid()); } } diff --git a/workflow/engine/classes/model/BpmnEvent.php b/workflow/engine/classes/model/BpmnEvent.php index d799dd0ea..080b7e5f3 100644 --- a/workflow/engine/classes/model/BpmnEvent.php +++ b/workflow/engine/classes/model/BpmnEvent.php @@ -39,16 +39,14 @@ class BpmnEvent extends BaseBpmnEvent $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { - $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { + if (isset($this->getLnsUid)) { $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); + $this->bound->setBouElement($this->getLnsUid()); + } else { + $this->bound->setBouContainer('bpmnDiagram'); } + $this->bound->setBouElement($process->getDiaUid()); } } diff --git a/workflow/engine/classes/model/BpmnGateway.php b/workflow/engine/classes/model/BpmnGateway.php index 6d9a43107..a9a21e18e 100644 --- a/workflow/engine/classes/model/BpmnGateway.php +++ b/workflow/engine/classes/model/BpmnGateway.php @@ -39,16 +39,14 @@ class BpmnGateway extends BaseBpmnGateway $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { - $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { + if (isset($this->getLnsUid)) { $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); + $this->bound->setBouElement($this->getLnsUid()); + } else { + $this->bound->setBouContainer('bpmnDiagram'); } + $this->bound->setBouElement($process->getDiaUid()); } } diff --git a/workflow/engine/classes/model/BpmnLane.php b/workflow/engine/classes/model/BpmnLane.php index d80dcd539..11efc59f3 100644 --- a/workflow/engine/classes/model/BpmnLane.php +++ b/workflow/engine/classes/model/BpmnLane.php @@ -39,6 +39,7 @@ class BpmnLane extends BaseBpmnLane { $project = BpmnProjectPeer::retrieveByPK($this->getPrjUid()); if (is_object($project)) { + $criteria = new Criteria('workflow'); $criteria->addSelectColumn(BpmnProcessPeer::DIA_UID); $criteria->add(BpmnProcessPeer::PRJ_UID, $this->getPrjUid(), \Criteria::EQUAL); @@ -47,8 +48,8 @@ class BpmnLane extends BaseBpmnLane { $rsCriteria->next(); $row = $rsCriteria->getRow(); $this->bound->setDiaUid($row["DIA_UID"]); - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($row["DIA_UID"]); + $this->bound->setBouContainer('bpmnLane'); + $this->bound->setBouElement($this->getLnsUid()); } } diff --git a/workflow/engine/classes/model/BpmnLaneset.php b/workflow/engine/classes/model/BpmnLaneset.php index 46d332ac9..3a7674cce 100644 --- a/workflow/engine/classes/model/BpmnLaneset.php +++ b/workflow/engine/classes/model/BpmnLaneset.php @@ -40,14 +40,8 @@ class BpmnLaneset extends BaseBpmnLaneset { if (is_object($process)) { $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { - $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); - } + $this->bound->setBouContainer('bpmnDiagram'); + $this->bound->setBouElement($process->getDiaUid()); } } diff --git a/workflow/engine/classes/model/BpmnParticipant.php b/workflow/engine/classes/model/BpmnParticipant.php index 33659ec60..856f106f0 100644 --- a/workflow/engine/classes/model/BpmnParticipant.php +++ b/workflow/engine/classes/model/BpmnParticipant.php @@ -39,16 +39,14 @@ class BpmnParticipant extends BaseBpmnParticipant $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); if (is_object($process)) { - $this->bound->setDiaUid($process->getDiaUid()); - - if ($this->bound->getBouElement() == null && $this->bound->getBouElement() == '' && $this->bound->getBouElement() == $process->getDiaUid()) { - $this->bound->setBouContainer('bpmnDiagram'); - $this->bound->setBouElement($process->getDiaUid()); - } else { + if (isset($this->getLnsUid)) { $this->bound->setBouContainer('bpmnLane'); - $this->bound->setBouElement($this->bound->getBouElement()); + $this->bound->setBouElement($this->getLnsUid()); + } else { + $this->bound->setBouContainer('bpmnDiagram'); } + $this->bound->setBouElement($process->getDiaUid()); } } From f5f47f36805e7e2c31a75a6f8a50f80667a1e0f2 Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Mon, 6 Oct 2014 17:26:45 -0400 Subject: [PATCH 03/17] Adicion de endpoint para steps. --- .../src/ProcessMaker/BusinessModel/Step.php | 239 ++++++++++++++++++ .../BusinessModel/Step/Trigger.php | 156 ++++++++++++ .../Services/Api/Project/Activity/Step.php | 61 ++++- 3 files changed, 455 insertions(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Step.php b/workflow/engine/src/ProcessMaker/BusinessModel/Step.php index c5c4d4cf1..15e239284 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Step.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Step.php @@ -450,6 +450,7 @@ class Step public function delete($stepUid) { try { + //Verify data $this->throwExceptionIfNotExistsStep($stepUid); @@ -916,5 +917,243 @@ class Step $oStep = new \Step(); $oStep->update($data); } + + /** + * Create Steps for a Task + * + * @param string $taskUid Unique id of Task + * @param string $processUid Unique id of Process + * @param array $arrayData Data + * + * return array Return data of the new Steps created + */ + public function createAll($taskUid, $processUid, $arrayData) + { + try { + $stepTrigger = new \ProcessMaker\BusinessModel\Step\Trigger(); + + $arrayData = array_change_key_case($arrayData, CASE_UPPER); + + unset($arrayData["STEP_UID"]); + + //Verify data + $this->throwExceptionIfNotExistsTask($taskUid); + + $this->throwExceptionIfNotExistsProcess($processUid); + + if (!isset($arrayData["STEP_TYPE_OBJ"])) { + throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepTypeObj"]))); + } + + $arrayData["STEP_TYPE_OBJ"] = trim($arrayData["STEP_TYPE_OBJ"]); + + if ($arrayData["STEP_TYPE_OBJ"] == "") { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepTypeObj"]))); + } + + if (!isset($arrayData["STEP_UID_OBJ"])) { + throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepUidObj"]))); + } + + $arrayData["STEP_UID_OBJ"] = trim($arrayData["STEP_UID_OBJ"]); + + if ($arrayData["STEP_UID_OBJ"] == "") { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepUidObj"]))); + } + + if (!isset($arrayData["STEP_MODE"])) { + throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepMode"]))); + } + + $arrayData["STEP_MODE"] = trim($arrayData["STEP_MODE"]); + + if ($arrayData["STEP_MODE"] == "") { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepMode"]))); + } + + $this->throwExceptionIfHaveInvalidValueInTypeObj($arrayData["STEP_TYPE_OBJ"]); + + $this->throwExceptionIfHaveInvalidValueInMode($arrayData["STEP_MODE"]); + + $msg = $this->existsObjectUid($arrayData["STEP_TYPE_OBJ"], $arrayData["STEP_UID_OBJ"], $this->arrayParamException["stepUidObj"]); + + if ($msg != "") { + throw new \Exception($msg); + } + + if ($this->existsRecord($taskUid, $arrayData["STEP_TYPE_OBJ"], $arrayData["STEP_UID_OBJ"])) { + throw new \Exception(\G::LoadTranslation("ID_RECORD_EXISTS_IN_TABLE", array($taskUid . ", " . $arrayData["STEP_TYPE_OBJ"] . ", " . $arrayData["STEP_UID_OBJ"], "STEP"))); + } + + //Create + $step = new \Step(); + + $stepUid = $step->create(array( + "PRO_UID" => $processUid, + "TAS_UID" => $taskUid, + "STEP_POSITION" => $arrayData["STEP_POSITION"] + )); + + if (!isset($arrayData["STEP_POSITION"]) || $arrayData["STEP_POSITION"] == "") { + unset($arrayData["STEP_POSITION"]); + } + + $arrayData = $this->updateAll($stepUid, $arrayData); + + //Return + unset($arrayData["STEP_UID"]); + + $arrayData = array_merge(array("STEP_UID" => $stepUid), $arrayData); + + if (!$this->formatFieldNameInUppercase) { + $arrayData = array_change_key_case($arrayData, CASE_LOWER); + } + + return $arrayData; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Update Steps of a Task + * + * @param string $stepUid Unique id of Step + * @param array $arrayData Data + * + * return array Return data of the Steps updated + */ + public function updateAll($stepUid, $arrayData) + { + try { + $arrayData = array_change_key_case($arrayData, CASE_UPPER); + + //Verify data + $this->throwExceptionIfNotExistsStep($stepUid); + + //Load Step + $step = new \Step(); + $arrayStepData = $step->load($stepUid); + + $taskUid = $arrayStepData["TAS_UID"]; + $proUid = $arrayStepData["PRO_UID"]; + + //Verify data + if (isset($arrayData["STEP_TYPE_OBJ"]) && !isset($arrayData["STEP_UID_OBJ"])) { + throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepUidObj"]))); + } + + if (!isset($arrayData["STEP_TYPE_OBJ"]) && isset($arrayData["STEP_UID_OBJ"])) { + throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepTypeObj"]))); + } + + if (isset($arrayData["STEP_TYPE_OBJ"])) { + $arrayData["STEP_TYPE_OBJ"] = trim($arrayData["STEP_TYPE_OBJ"]); + + if ($arrayData["STEP_TYPE_OBJ"] == "") { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepTypeObj"]))); + } + } + + if (isset($arrayData["STEP_UID_OBJ"])) { + $arrayData["STEP_UID_OBJ"] = trim($arrayData["STEP_UID_OBJ"]); + + if ($arrayData["STEP_UID_OBJ"] == "") { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepUidObj"]))); + } + } + + if (isset($arrayData["STEP_MODE"])) { + $arrayData["STEP_MODE"] = trim($arrayData["STEP_MODE"]); + + if ($arrayData["STEP_MODE"] == "") { + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepMode"]))); + } + } + + if (isset($arrayData["STEP_TYPE_OBJ"])) { + $this->throwExceptionIfHaveInvalidValueInTypeObj($arrayData["STEP_TYPE_OBJ"]); + } + + if (isset($arrayData["STEP_MODE"])) { + $this->throwExceptionIfHaveInvalidValueInMode($arrayData["STEP_MODE"]); + } + + if (isset($arrayData["STEP_TYPE_OBJ"]) && isset($arrayData["STEP_UID_OBJ"])) { + $msg = $this->existsObjectUid($arrayData["STEP_TYPE_OBJ"], $arrayData["STEP_UID_OBJ"], $this->arrayParamException["stepUidObj"]); + + if ($msg != "") { + throw new \Exception($msg); + } + + if ($this->existsRecord($taskUid, $arrayData["STEP_TYPE_OBJ"], $arrayData["STEP_UID_OBJ"], 0, $stepUid)) { + throw new \Exception(\G::LoadTranslation("ID_RECORD_EXISTS_IN_TABLE", array($taskUid . ", " . $arrayData["STEP_TYPE_OBJ"] . ", " . $arrayData["STEP_UID_OBJ"], "STEP"))); + } + } + + //Update + $step = new \Step(); + + $arrayData["STEP_UID"] = $stepUid; + $result = $step->update($arrayData); + + //Return + unset($arrayData["STEP_UID"]); + + if (!$this->formatFieldNameInUppercase) { + $arrayData = array_change_key_case($arrayData, CASE_LOWER); + } + + return $arrayData; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Delete Steps and triggers of a Task + * + * @param string $stepUid Unique id of Step + * @param string $taskUid Unique id of Step + * + * return void + */ + public function deleteAll($taskUid) + { + try { + $step = new \Step(); + $stepTrigger = new \ProcessMaker\BusinessModel\Step\Trigger(); + + $criteriaTrigger = new \Criteria("workflow"); + $criteriaTrigger->addSelectColumn(\StepTriggerPeer::STEP_UID); + $criteriaTrigger->addSelectColumn(\StepTriggerPeer::ST_TYPE); + $criteriaTrigger->addSelectColumn(\StepTriggerPeer::TRI_UID); + $criteriaTrigger->add(\StepTriggerPeer::TAS_UID, $taskUid, \Criteria::EQUAL); + $rsCriteriaTrigger = \StepTriggerPeer::doSelectRS($criteriaTrigger); + $rsCriteriaTrigger->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteriaTrigger->next(); + + while ($aRowTrigger = $rsCriteriaTrigger->getRow()) { + + $stepTrigger->delete($aRowTrigger['STEP_UID'], $aRowTrigger['ST_TYPE'], $taskUid, $aRowTrigger['TRI_UID']); + $rsCriteriaTrigger->next(); + } + + $criteria = new \Criteria("workflow"); + $criteria->addSelectColumn(\StepPeer::STEP_UID); + $criteria->add(\StepPeer::TAS_UID, $taskUid, \Criteria::EQUAL); + $rsCriteria = \StepPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + + while ($aRow = $rsCriteria->getRow()) { + $step->remove($aRow['STEP_UID']); + $rsCriteria->next(); + } + + } catch (\Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Step/Trigger.php b/workflow/engine/src/ProcessMaker/BusinessModel/Step/Trigger.php index 4beb7c2fc..cc63a642c 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Step/Trigger.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Step/Trigger.php @@ -451,5 +451,161 @@ class Trigger $StepTrigger = new \StepTrigger(); $StepTrigger->update($data); } + + /** + * Assign Trigger to a Step + * + * @param string $stepUid Unique id of Step + * @param string $type Type (BEFORE, AFTER, BEFORE_ASSIGNMENT, BEFORE_ROUTING, AFTER_ROUTING) + * @param string $taskUid Unique id of Task + * @param string $triggerUid Unique id of Trigger + * @param array $arrayData Data + * + * return array Data of the Trigger assigned to a Step + */ + public function createAll($stepUid, $type, $taskUid, $triggerUid, $arrayData) + { + try { + $stepUidIni = $stepUid; + $typeIni = $type; + + $flagStepAssignTask = 0; + + if ($stepUid == "") { + $flagStepAssignTask = 1; + + switch ($type) { + case "BEFORE_ASSIGNMENT": + $stepUid = "-1"; + $type = "BEFORE"; + break; + case "BEFORE_ROUTING": + $stepUid = "-2"; + $type = "BEFORE"; + break; + case "AFTER_ROUTING": + $stepUid = "-2"; + $type = "AFTER"; + break; + } + } + + //Verify data + if ($flagStepAssignTask == 0) { + $step = new \Step(); + + if (!$step->StepExists($stepUid)) { + throw new \Exception(\G::LoadTranslation("ID_STEP_DOES_NOT_EXIST", array("step_uid", $stepUid))); + } + } + + $task = new \Task(); + + if (!$task->taskExists($taskUid)) { + throw new \Exception(\G::LoadTranslation("ID_ACTIVITY_DOES_NOT_EXIST", array("act_uid", $taskUid))); + } + + $trigger = new \Triggers(); + + if (!$trigger->TriggerExists($triggerUid)) { + throw new \Exception(\G::LoadTranslation("ID_TRIGGER_DOES_NOT_EXIST", array("tri_uid", $triggerUid))); + } + + if ($this->existsRecord($stepUid, $type, $taskUid, $triggerUid)) { + throw new \Exception(\G::LoadTranslation("ID_RECORD_EXISTS_IN_TABLE", array($stepUid . ", " . $type . ", " . $taskUid . ", " . $triggerUid, "STEP_TRIGGER"))); + } + + //Create + $stepTrigger = new \StepTrigger(); +// $posIni = $stepTrigger->getNextPosition($stepUid, $type, $taskUid); + + $stepTrigger->createRow(array( + "STEP_UID" => $stepUid, + "TAS_UID" => $taskUid, + "TRI_UID" => $triggerUid, + "ST_TYPE" => $type, + "ST_CONDITION" => (isset($arrayData['st_condition'])) ? $arrayData['st_condition'] : '', + "ST_POSITION" => $arrayData['st_position'] + )); + + $arrayData = $this->updateAll($stepUid, $typeIni, $taskUid, $triggerUid, $arrayData); + + return $arrayData; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Update Trigger of a Step + * + * @param string $stepUid Unique id of Step + * @param string $type Type (BEFORE, AFTER, BEFORE_ASSIGNMENT, BEFORE_ROUTING, AFTER_ROUTING) + * @param string $taskUid Unique id of Task + * @param string $triggerUid Unique id of Trigger + * @param array $arrayData Data + * + * return array Data updated of the Trigger assigned to a Step + */ + public function updateAll($stepUid, $type, $taskUid, $triggerUid, $arrayData) + { + try { + $flagStepAssignTask = 0; + + if (($stepUid == "") || ($stepUid == "-1") || ($stepUid == "-2")) { + $flagStepAssignTask = 1; + + switch ($type) { + case "BEFORE_ASSIGNMENT": + $stepUid = "-1"; + $type = "BEFORE"; + break; + case "BEFORE_ROUTING": + $stepUid = "-2"; + $type = "BEFORE"; + break; + case "AFTER_ROUTING": + $stepUid = "-2"; + $type = "AFTER"; + break; + } + } + + //Verify data + if ($flagStepAssignTask == 0) { + $step = new \Step(); + + if (!$step->StepExists($stepUid)) { + throw new \Exception(\G::LoadTranslation("ID_STEP_DOES_NOT_EXIST", array("step_uid", $stepUid))); + } + } + + $trigger = new \Triggers(); + + if (!$trigger->TriggerExists($triggerUid)) { + throw new \Exception(\G::LoadTranslation("ID_TRIGGER_DOES_NOT_EXIST", array("tri_uid", $triggerUid))); + } + + //Update + $stepTrigger = new \StepTrigger(); + + $arrayUpdateData = array(); + + $arrayUpdateData["STEP_UID"] = $stepUid; + $arrayUpdateData["TAS_UID"] = $taskUid; + $arrayUpdateData["TRI_UID"] = $triggerUid; + $arrayUpdateData["ST_TYPE"] = $type; + + if (isset($arrayData["st_condition"])) { + $arrayUpdateData["ST_CONDITION"] = $arrayData["st_condition"]; + } + + $stepTrigger->update($arrayUpdateData); + + return array_change_key_case($arrayUpdateData, CASE_LOWER); + } catch (\Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity/Step.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity/Step.php index 285fd4930..69ef59c9b 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity/Step.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity/Step.php @@ -216,5 +216,64 @@ class Step extends Api throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } -} + /** + * @url POST /:prj_uid/activity/:act_uid/step/all + * + * @param string $act_uid {@min 32}{@max 32} + * @param string $prj_uid {@min 32}{@max 32} + * @param array $request_data + * @param string $step_type_obj {@from body}{@choice DYNAFORM,INPUT_DOCUMENT,OUTPUT_DOCUMENT,EXTERNAL}{@required true} + * @param string $step_uid_obj {@from body}{@min 32}{@max 32}{@required true} + * @param string $step_condition {@from body} + * @param int $step_position {@from body}{@min 1} + * @param string $step_mode {@from body}{@choice EDIT,VIEW}{@required true} + * + * @status 201 + */ + public function doPostActivityStepAll( + $act_uid, + $prj_uid, + $request_data, + $step_type_obj = "DYNAFORM", + $step_uid_obj = "00000000000000000000000000000000", + $step_condition = "", + $step_position = 1, + $step_mode = "EDIT" + ) { + try { + + $step = new \ProcessMaker\BusinessModel\Step(); + $stepTrigger = new \ProcessMaker\BusinessModel\Step\Trigger(); + + $step->deleteAll($act_uid); + + foreach ($request_data as $key => $valueRequest) { + if (array_key_exists('tri_uid', $valueRequest)) { + + $response[] = $stepTrigger->createAll("", $valueRequest["st_type"], $act_uid, $valueRequest["tri_uid"], $valueRequest); + + } else { + + $step->setFormatFieldNameInUppercase(false); + $step->setArrayParamException(array("stepUid" => "step_uid", "taskUid" => "act_uid", "processUid" => "prj_uid")); + + $arrayData[] = $step->createAll($act_uid, $prj_uid, $valueRequest); + + if (array_key_exists('triggers', $valueRequest)) { + + foreach ($valueRequest["triggers"] as $key => $valueTrigger) { + $response["triggers"] = $stepTrigger->createAll($arrayData[0]["step_uid"], $valueTrigger["st_type"], + $act_uid, $valueTrigger["tri_uid"], $valueTrigger); + } + } + $response = $arrayData; + } + } + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } +} From d482cece7f6843136936a3145aabcaca02b5135a Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Tue, 7 Oct 2014 14:39:40 -0400 Subject: [PATCH 04/17] Modificacion de queries para doble conexion --- gulliver/system/class.rbac.php | 2 +- rbac/engine/classes/model/RbacUsers.php | 16 ++++----- workflow/engine/classes/class.processMap.php | 36 +++++++++---------- workflow/engine/classes/class.sessions.php | 2 +- workflow/engine/classes/model/Process.php | 24 ++++++------- workflow/engine/classes/model/Users.php | 2 +- workflow/engine/controllers/appProxy.php | 4 +-- .../engine/methods/cases/casesListExtJs.php | 4 +-- .../engine/methods/cases/casesList_Ajax.php | 2 +- .../engine/methods/cases/proxyProcessList.php | 2 +- .../engine/methods/users/data_usersList.php | 2 +- workflow/engine/methods/users/users_Ajax.php | 2 +- 12 files changed, 49 insertions(+), 49 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index d487006b8..307be6668 100755 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -224,7 +224,7 @@ class RBAC $oCriteria = new Criteria( 'rbac' ); $oCriteria->add( AuthenticationSourcePeer::AUTH_SOURCE_PROVIDER, $sClassName ); $oCriteria->addAscendingOrderByColumn( AuthenticationSourcePeer::AUTH_SOURCE_NAME ); - $oDataset = AuthenticationSourcePeer::doSelectRS( $oCriteria ); + $oDataset = AuthenticationSourcePeer::doSelectRS( $oCriteria, Propel::getDbConnection('rbac_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); diff --git a/rbac/engine/classes/model/RbacUsers.php b/rbac/engine/classes/model/RbacUsers.php index 928d3dc7d..eeabea11c 100755 --- a/rbac/engine/classes/model/RbacUsers.php +++ b/rbac/engine/classes/model/RbacUsers.php @@ -76,7 +76,7 @@ class RbacUsers extends BaseRbacUsers try { $c = new Criteria('rbac'); $c->add(RbacUsersPeer::USR_USERNAME, $sUsername); - $rs = RbacUsersPeer::doSelect($c); + $rs = RbacUsersPeer::doSelect($c, Propel::getDbConnection('rbac_ro')); if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') { $aFields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME); //verify password with md5, and md5 format @@ -118,7 +118,7 @@ class RbacUsers extends BaseRbacUsers try { $c = new Criteria('rbac'); $c->add(RbacUsersPeer::USR_USERNAME, $sUsername); - $rs = RbacUsersPeer::doSelect($c); + $rs = RbacUsersPeer::doSelect($c, Propel::getDbConnection('rbac_ro')); if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') { //return the row for futher check of which Autentificacion method belongs this user $this->fields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME); @@ -142,7 +142,7 @@ class RbacUsers extends BaseRbacUsers try { $c = new Criteria('rbac'); $c->add(RbacUsersPeer::USR_USERNAME, $sUsername); - $rs = RbacUsersPeer::doSelect($c); + $rs = RbacUsersPeer::doSelect($c, Propel::getDbConnection('rbac_ro')); if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') { $aFields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME); @@ -165,7 +165,7 @@ class RbacUsers extends BaseRbacUsers try { $c = new Criteria('rbac'); $c->add(RbacUsersPeer::USR_UID, $sUserId); - $rs = RbacUsersPeer::doSelect($c); + $rs = RbacUsersPeer::doSelect($c, Propel::getDbConnection('rbac_ro')); if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') { return 1; } else { @@ -182,7 +182,7 @@ class RbacUsers extends BaseRbacUsers try { $c = new Criteria('rbac'); $c->add(RbacUsersPeer::USR_UID, $sUsrUid); - $rs = RbacUsersPeer::doSelect($c); + $rs = RbacUsersPeer::doSelect($c, Propel::getDbConnection('rbac_ro')); if (is_array($rs) && isset($rs[0]) && is_object($rs[0]) && get_class($rs[0]) == 'RbacUsers') { $aFields = $rs[0]->toArray(BasePeer::TYPE_FIELDNAME); return $aFields; @@ -261,7 +261,7 @@ class RbacUsers extends BaseRbacUsers $oCriteria->addSelectColumn('COUNT(*) AS CNT'); $oCriteria->add(RbacUsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); $oCriteria->addGroupByColumn(RbacUsersPeer::UID_AUTH_SOURCE); - $oDataset = RbacUsersPeer::doSelectRS($oCriteria); + $oDataset = RbacUsersPeer::doSelect($oCriteria, Propel::getDbConnection('rbac_ro')); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $aAuth = Array(); @@ -287,7 +287,7 @@ class RbacUsers extends BaseRbacUsers $oCriteria->add(RbacUsersPeer::UID_AUTH_SOURCE, $auth_source, Criteria::EQUAL); } $oCriteria->add(RbacUsersPeer::USR_STATUS, 0, Criteria::NOT_EQUAL); - $oDataset = RbacUsersPeer::doSelectRS($oCriteria); + $oDataset = RbacUsersPeer::doSelect($oCriteria, Propel::getDbConnection('rbac_ro')); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $aUsers = array(); while ($oDataset->next()) { @@ -308,7 +308,7 @@ class RbacUsers extends BaseRbacUsers $c->addSelectColumn ( RolesPeer::ROL_STATUS ); $c->addJoin ( UsersRolesPeer::ROL_UID, RolesPeer::ROL_UID ); $c->add ( UsersRolesPeer::USR_UID, $UsrUid ); - $rs = UsersRolesPeer::doSelectRs( $c ); + $rs = UsersRolesPeer::doSelectRs( $c , Propel::getDbConnection('rbac_ro')); $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC); $rs->next(); $row = $rs->getRow(); diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index c1918c3d7..de9d57fea 100755 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -110,7 +110,7 @@ class processMap $aConditions[] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() ); $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(TaskPeer::PRO_UID, $sProcessUID); - $oDataset = TaskPeer::doSelectRS($oCriteria); + $oDataset = TaskPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); @@ -140,7 +140,7 @@ class processMap $tasTitleConds[] = array('C1.CON_LANG', $del . SYS_LANG . $del); $oCriteria->addJoinMC($tasTitleConds, Criteria::LEFT_JOIN); - $oDatasetX = SubProcessPeer::doSelectRS($oCriteria); + $oDatasetX = SubProcessPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDatasetX->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDatasetX->next(); $aRowx = $oDatasetX->getRow(); @@ -162,7 +162,7 @@ class processMap $oCriteria = new Criteria('workflow'); $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); $oCriteria->add(RoutePeer::TAS_UID, $aRow1['TAS_UID']); - $oDataset2 = RoutePeer::doSelectRS($oCriteria); + $oDataset2 = RoutePeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); while ($aRow2 = $oDataset2->getRow()) { @@ -205,7 +205,7 @@ class processMap $oCriteria->addSelectColumn('MIN(DEL_FINISH_DATE) AS FINISH'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); @@ -214,7 +214,7 @@ class processMap $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow3 = $oDataset2->getRow(); @@ -266,7 +266,7 @@ class processMap $oCriteria->addSelectColumn('MIN(DEL_FINISH_DATE) AS FINISH'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); @@ -275,7 +275,7 @@ class processMap $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null); - $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow3 = $oDataset2->getRow(); @@ -391,7 +391,7 @@ class processMap $aConditions[] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() ); $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProcessUID); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); + $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -804,7 +804,7 @@ class processMap $oCriteria = new Criteria('workflow'); $oCriteria->add(StepPeer::TAS_UID, $sTaskUID); $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION); - $oDataset = StepPeer::doSelectRS($oCriteria); + $oDataset = StepPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -945,7 +945,7 @@ class processMap $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); $oCriteria->add(DynaformPeer::DYN_UID, $sUIDs, Criteria::NOT_IN); $oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform'); - $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset = DynaformPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $i = 0; @@ -973,7 +973,7 @@ class processMap $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); $oCriteria->add(InputDocumentPeer::INP_DOC_UID, $sUIDs, Criteria::NOT_IN); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); + $oDataset = InputDocumentPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -996,7 +996,7 @@ class processMap $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); $oCriteria->add(OutputDocumentPeer::OUT_DOC_UID, $sUIDs, Criteria::NOT_IN); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); + $oDataset = OutputDocumentPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -1156,7 +1156,7 @@ class processMap $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); $oCriteria->add(TaskUserPeer::TU_RELATION, 2); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); + $oDataset = TaskUserPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $c = 0; @@ -1189,7 +1189,7 @@ class processMap $oCriteria->add(TaskUserPeer::TAS_UID, $sTaskUID); $oCriteria->add(TaskUserPeer::TU_TYPE, $iType); $oCriteria->add(TaskUserPeer::TU_RELATION, 1); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); + $oDataset = TaskUserPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -1914,7 +1914,7 @@ class processMap $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); $oCriteria->addAscendingOrderByColumn('DYN_TITLE'); - $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset = DynaformPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $dynaformArray = array(); @@ -1964,7 +1964,7 @@ class processMap $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(DynaformPeer::PRO_UID, $sProcessUID); - $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset = DynaformPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $dynaformArray = array(); @@ -2034,7 +2034,7 @@ class processMap $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProcessUID); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); + $oDataset = OutputDocumentPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $outputDocArray = array(); @@ -2110,7 +2110,7 @@ class processMap $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(InputDocumentPeer::PRO_UID, $sProcessUID); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); + $oDataset = InputDocumentPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $inputDocArray = ""; diff --git a/workflow/engine/classes/class.sessions.php b/workflow/engine/classes/class.sessions.php index e4912f36b..6cd403807 100755 --- a/workflow/engine/classes/class.sessions.php +++ b/workflow/engine/classes/class.sessions.php @@ -117,7 +117,7 @@ class Sessions $oCriteria->add( SessionPeer::SES_STATUS, 'ACTIVE' ); $oCriteria->add( SessionPeer::SES_DUE_DATE, $date, Criteria::GREATER_EQUAL ); - $oDataset = SessionPeer::doSelectRS( $oCriteria ); + $oDataset = SessionPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index d9a0422ab..ee751a663 100755 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -274,7 +274,7 @@ class Process extends BaseProcess if (! $getAllLang) { $c->add( ContentPeer::CON_LANG, $lang ); } - $rs = ProcessPeer::doSelectRS( $c ); + $rs = ProcessPeer::doSelectRS( $c, Propel::getDbConnection('workflow_ro') ); $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $rs->next(); $row = $rs->getRow(); @@ -352,7 +352,7 @@ class Process extends BaseProcess $oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); //execute the query - $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $processes = Array (); $uids = array (); @@ -369,7 +369,7 @@ class Process extends BaseProcess $c->add( ContentPeer::CON_LANG, defined( 'SYS_LANG' ) ? SYS_LANG : 'en', Criteria::EQUAL ); $c->add( ContentPeer::CON_ID, $uids, Criteria::IN ); - $dt = ContentPeer::doSelectRS( $c ); + $dt = ContentPeer::doSelectRS( $c, Propel::getDbConnection('workflow_ro') ); $dt->setFetchmode( ResultSet::FETCHMODE_ASSOC ); while ($dt->next()) { @@ -484,7 +484,7 @@ class Process extends BaseProcess // validate if the category exists $criteria = new Criteria( 'workflow' ); $criteria->add( ProcessCategoryPeer::CATEGORY_UID, $aData['PRO_CATEGORY'] ); - $ds = ProcessCategoryPeer::doSelectRS( $criteria ); + $ds = ProcessCategoryPeer::doSelectRS( $criteria, Propel::getDbConnection('workflow_ro') ); $ds->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $ds->next(); // if it is not set, set value as empty "No Category" @@ -576,7 +576,7 @@ class Process extends BaseProcess $oCriteria->add( ContentPeer::CON_CATEGORY, 'PRO_TITLE' ); $oCriteria->add( ContentPeer::CON_LANG, SYS_LANG ); $oCriteria->add( ContentPeer::CON_VALUE, $PRO_TITLE ); - $oDataset = ContentPeer::doSelectRS( $oCriteria ); + $oDataset = ContentPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); @@ -590,7 +590,7 @@ class Process extends BaseProcess $c = $this->tmpCriteria; $c->clearSelectColumns(); $c->addSelectColumn( 'COUNT(*)' ); - $oDataset = ProcessPeer::doSelectRS( $c ); + $oDataset = ProcessPeer::doSelectRS( $c, Propel::getDbConnection('workflow_ro') ); $oDataset->next(); $aRow = $oDataset->getRow(); @@ -660,7 +660,7 @@ class Process extends BaseProcess // getting bpmn projects $c = new Criteria('workflow'); $c->addSelectColumn(BpmnProjectPeer::PRJ_UID); - $ds = ProcessPeer::doSelectRS($c); + $ds = ProcessPeer::doSelectRS($c, Propel::getDbConnection('workflow_ro') ); $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); $bpmnProjects = array(); @@ -690,7 +690,7 @@ class Process extends BaseProcess $c->add( ContentPeer::CON_LANG, defined( 'SYS_LANG' ) ? SYS_LANG : 'en', Criteria::EQUAL ); $c->add( ContentPeer::CON_ID, $uids, Criteria::IN ); - $dt = ContentPeer::doSelectRS( $c ); + $dt = ContentPeer::doSelectRS( $c, Propel::getDbConnection('workflow_ro') ); $dt->setFetchmode( ResultSet::FETCHMODE_ASSOC ); while ($dt->next()) { @@ -807,7 +807,7 @@ class Process extends BaseProcess $oCriteria->addGroupByColumn( ApplicationPeer::PRO_UID ); $oCriteria->addGroupByColumn( ApplicationPeer::APP_STATUS ); - $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $aProcesses = Array (); @@ -825,7 +825,7 @@ class Process extends BaseProcess $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( 'COUNT(*) AS TOTAL_CASES' ); $oCriteria->add( ApplicationPeer::PRO_UID, $pro_uid ); - $oDataset = ApplicationPeer::doSelectRS( $oCriteria ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); @@ -839,7 +839,7 @@ class Process extends BaseProcess $oCriteria->addSelectColumn( ProcessPeer::PRO_CATEGORY ); $oCriteria->addSelectColumn( 'COUNT(*) AS CNT' ); $oCriteria->addGroupByColumn( ProcessPeer::PRO_CATEGORY ); - $oDataSet = ProcessPeer::doSelectRS( $oCriteria ); + $oDataSet = ProcessPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataSet->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $aProc = Array (); while ($oDataSet->next()) { @@ -883,7 +883,7 @@ class Process extends BaseProcess $oCriteria->addSelectColumn( TriggersPeer::TRI_WEBBOT ); $oCriteria->addJoin( $var, TriggersPeer::TRI_UID, Criteria::LEFT_JOIN ); $oCriteria->add( ProcessPeer::PRO_UID, $proUid ); - $oDataSet = ProcessPeer::doSelectRS( $oCriteria ); + $oDataSet = ProcessPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $oDataSet->setFetchmode( ResultSet::FETCHMODE_ASSOC ); if ($oDataSet->next()) { diff --git a/workflow/engine/classes/model/Users.php b/workflow/engine/classes/model/Users.php index 30e42c4a4..e988b508a 100755 --- a/workflow/engine/classes/model/Users.php +++ b/workflow/engine/classes/model/Users.php @@ -212,7 +212,7 @@ class Users extends BaseUsers public function loadByUsernameInArray ($sUsername) { $c = $this->loadByUsername( $sUsername ); - $rs = UsersPeer::doSelectRS( $c ); + $rs = UsersPeer::doSelectRS( $c, Propel::getDbConnection('workflow_ro') ); $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $rs->next(); $row = $rs->getRow(); diff --git a/workflow/engine/controllers/appProxy.php b/workflow/engine/controllers/appProxy.php index b9e985a8a..0d10c55f1 100644 --- a/workflow/engine/controllers/appProxy.php +++ b/workflow/engine/controllers/appProxy.php @@ -188,7 +188,7 @@ class AppProxy extends HttpProxyController $criteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); $criteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); if (AppDelegationPeer::doCount($criteria) > 0) { - $dataset = AppDelegationPeer::doSelectRS($criteria); + $dataset = AppDelegationPeer::doSelectRS($criteria, Propel::getDbConnection('workflow_ro')); $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $row = $dataset->getRow(); @@ -243,7 +243,7 @@ class AppProxy extends HttpProxyController $criteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); $criteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); if (AppDelegationPeer::doCount($criteria) > 0) { - $dataset = AppDelegationPeer::doSelectRS($criteria); + $dataset = AppDelegationPeer::doSelectRS($criteria, Propel::getDbConnection('workflow_ro') ); $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $row = $dataset->getRow(); diff --git a/workflow/engine/methods/cases/casesListExtJs.php b/workflow/engine/methods/cases/casesListExtJs.php index 4e699202c..f6b0cd525 100755 --- a/workflow/engine/methods/cases/casesListExtJs.php +++ b/workflow/engine/methods/cases/casesListExtJs.php @@ -216,7 +216,7 @@ function getAllUsersArray ($action) } $cUsers->addAscendingOrderByColumn( AppCacheViewPeer::APP_CURRENT_USER ); - $oDataset = AppCacheViewPeer::doSelectRS( $cUsers ); + $oDataset = AppCacheViewPeer::doSelectRS( $cUsers , Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { @@ -282,7 +282,7 @@ function getStatusArray ($action, $userUid) $cStatus->clearSelectColumns(); $cStatus->setDistinct(); $cStatus->addSelectColumn( AppCacheViewPeer::APP_STATUS ); - $oDataset = AppCacheViewPeer::doSelectRS( $cStatus ); + $oDataset = AppCacheViewPeer::doSelectRS( $cStatus, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { diff --git a/workflow/engine/methods/cases/casesList_Ajax.php b/workflow/engine/methods/cases/casesList_Ajax.php index 23ff93b49..5ee66a725 100755 --- a/workflow/engine/methods/cases/casesList_Ajax.php +++ b/workflow/engine/methods/cases/casesList_Ajax.php @@ -178,7 +178,7 @@ if ($actionAjax == "processListExtJs") { $cProcess->addAscendingOrderByColumn(AppCacheViewPeer::APP_PRO_TITLE); - $oDataset = AppCacheViewPeer::doSelectRS( $cProcess ); + $oDataset = AppCacheViewPeer::doSelectRS( $cProcess, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); diff --git a/workflow/engine/methods/cases/proxyProcessList.php b/workflow/engine/methods/cases/proxyProcessList.php index 90d66f679..9f7256d30 100755 --- a/workflow/engine/methods/cases/proxyProcessList.php +++ b/workflow/engine/methods/cases/proxyProcessList.php @@ -45,7 +45,7 @@ try { $Criteria->addAscendingOrderByColumn( $sort ); } } - $oDataset = AppCacheViewPeer::doSelectRS( $Criteria ); + $oDataset = AppCacheViewPeer::doSelectRS( $Criteria, Propel::getDbConnection('workflow_ro') ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); diff --git a/workflow/engine/methods/users/data_usersList.php b/workflow/engine/methods/users/data_usersList.php index 2fb6e9a26..791b8a048 100755 --- a/workflow/engine/methods/users/data_usersList.php +++ b/workflow/engine/methods/users/data_usersList.php @@ -58,7 +58,7 @@ if ($filter != '') { //echo $oCriteria->toString(); } -$rs = UsersPeer::DoSelectRs( $oCriteria ); +$rs = UsersPeer::DoSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $rows = Array (); diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index 85beae03c..f155fe69b 100644 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -59,7 +59,7 @@ try { G::LoadClass('Users'); $oUser = new Users(); $oCriteria = $oUser->loadByUsername($_POST['sUsername']); - $oDataset = UsersPeer::doSelectRS($oCriteria); + $oDataset = UsersPeer::doSelectRs($oCriteria, Propel::getDbConnection('workflow_ro')); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); From ba3f26463647db4dcc262ca87ec21863cfc0a395 Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Thu, 9 Oct 2014 15:22:40 -0400 Subject: [PATCH 05/17] Adicion end point suggest field --- .../ProcessMaker/BusinessModel/Variable.php | 97 ++++++++++++++++++- .../Services/Api/Project/Variable.php | 22 +++++ 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index b2e1c9ff9..bbb04fa55 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -481,7 +481,6 @@ class Variable $rsCriteria = \ProcessVariablesPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - if ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -586,5 +585,101 @@ class Variable throw $e; } } + + /** + * Get all records by execute SQL suggest + * + * @param string $processUid Unique id of Process + * @param string $variableName Variable name + * @param array $arrayVariable The variables + * + * return array Return an array with all records + */ + public function executeSqlSuggest($processUid, $variableName, array $arrayVariable = array()) + { + try { + $arrayRecord = array(); + + //Verify data + $process = new \ProcessMaker\BusinessModel\Process(); + + $process->throwExceptionIfNotExistsProcess($processUid, strtolower("PRJ_UID")); + + //Set data + $variableDbConnectionUid = ""; + $variableSql = ""; + $sqlLimit = ""; + $variableSqlLimit = ""; + + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_DBCONNECTION); + $criteria->addSelectColumn(\ProcessVariablesPeer::VAR_SQL); + $criteria->add(\ProcessVariablesPeer::PRJ_UID, $processUid, \Criteria::EQUAL); + $criteria->add(\ProcessVariablesPeer::VAR_NAME, $variableName, \Criteria::EQUAL); + + $rsCriteria = \ProcessVariablesPeer::doSelectRS($criteria); + + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $variableDbConnectionUid = $row["VAR_DBCONNECTION"]; + $variableSql = $row["VAR_SQL"]; + } else { + throw new \Exception(\G::LoadTranslation("ID_PROCESS_VARIABLE_DOES_NOT_EXIST", array(strtolower("VAR_NAME"), $variableName))); + } + + //Verify data + $this->throwExceptionIfSomeRequiredVariableSqlIsMissingInVariables($variableName, $variableSql, $arrayVariable); + + //Get data + $_SESSION["PROCESS"] = $processUid; + + $cnn = \Propel::getConnection(($variableDbConnectionUid . "" != "")? $variableDbConnectionUid : "workflow"); + $stmt = $cnn->createStatement(); + + $rs = $stmt->executeQuery(\G::replaceDataField($variableSql, $arrayVariable), \ResultSet::FETCHMODE_NUM); + + + foreach ($arrayVariable as $keyRequest => $valueRequest) { + $keyRequest = strtoupper($keyRequest); + + if ($keyRequest == 'LIMIT') { + if (strpos($variableSql, 'LIMIT')) { + $variableSqlLimit = explode("LIMIT", $variableSql); + $sqlLimit = " LIMIT " . $variableSqlLimit[1]; + $variableSql = $variableSqlLimit[0]; + } else { + $sqlLimit = " LIMIT ". 0 . ", " . $valueRequest; + } + } else { + if (strpos($variableSql, 'WHERE')) { + $sqlConditionLike = " AND " . $keyRequest . " LIKE '%" . $valueRequest . "%'"; + } else { + $sqlConditionLike = " WHERE " . $keyRequest . " LIKE '%" . $valueRequest . "%'"; + } + } + } + + $sqlQuery = $variableSql . $sqlConditionLike . $sqlLimit; + + $rs = $stmt->executeQuery(\G::replaceDataField($sqlQuery, $arrayVariable), \ResultSet::FETCHMODE_NUM); + + while ($rs->next()) { + $row = $rs->getRow(); + + $arrayRecord[] = array( + strtolower("VALUE") => $row[0], + strtolower("TEXT") => $row[1] + ); + } + + //Return + return $arrayRecord; + } catch (\Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/Variable.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/Variable.php index d1479fc83..4904841b1 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/Variable.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/Variable.php @@ -129,5 +129,27 @@ class Variable extends Api throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } + + /** + * @url POST /:prj_uid/process-variable/:var_name/execute-query-suggest + * + * @param string $prj_uid {@min 32}{@max 32} + * @param string $var_name + * @param array $request_data + */ + public function doPostVariableExecuteSqlSuggest($prj_uid, $var_name, $request_data) + { + try { + $variable = new \ProcessMaker\BusinessModel\Variable(); + + $arrayData = ($request_data != null)? $variable->executeSqlSuggest($prj_uid, $var_name, $request_data) : $variable->executeSqlSuggest($prj_uid, $var_name); + + $response = $arrayData; + + return $response; + } catch (\Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + } } From a9f6405f30a8a8f05d9e95624a5073494ab5f4fc Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Fri, 10 Oct 2014 11:59:49 -0400 Subject: [PATCH 06/17] Fix. Adicion end point suggest field --- .../engine/src/ProcessMaker/BusinessModel/Variable.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index bbb04fa55..d253dd5ef 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -636,12 +636,6 @@ class Variable //Get data $_SESSION["PROCESS"] = $processUid; - $cnn = \Propel::getConnection(($variableDbConnectionUid . "" != "")? $variableDbConnectionUid : "workflow"); - $stmt = $cnn->createStatement(); - - $rs = $stmt->executeQuery(\G::replaceDataField($variableSql, $arrayVariable), \ResultSet::FETCHMODE_NUM); - - foreach ($arrayVariable as $keyRequest => $valueRequest) { $keyRequest = strtoupper($keyRequest); @@ -664,6 +658,9 @@ class Variable $sqlQuery = $variableSql . $sqlConditionLike . $sqlLimit; + $cnn = \Propel::getConnection(($variableDbConnectionUid . "" != "")? $variableDbConnectionUid : "workflow"); + $stmt = $cnn->createStatement(); + $rs = $stmt->executeQuery(\G::replaceDataField($sqlQuery, $arrayVariable), \ResultSet::FETCHMODE_NUM); while ($rs->next()) { From 27a72d746339a9c3ef0010d89fdbb7355a764a0d Mon Sep 17 00:00:00 2001 From: jennylee Date: Mon, 13 Oct 2014 15:48:12 -0400 Subject: [PATCH 07/17] Fix for a strict notice for PHP 5.4 We removed the & (ampersand) symbol, because the new operator returns a reference automatically, so assigning the result of new by reference results in an E_STRICT message. --- gulliver/system/class.g.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index e07d8e4f2..a4ad2e100 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5279,7 +5279,7 @@ class G $sflagAudit = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); $ipClient = G::getIpAddress(); - $licensedFeatures = & PMLicensedFeatures::getSingleton(); + $licensedFeatures = PMLicensedFeatures::getSingleton(); if ($sflagAudit && $licensedFeatures->verifyfeature('vtSeHNhT0JnSmo1bTluUVlTYUxUbUFSVStEeXVqc1pEUG5EeXc0MGd2Q3ErYz0=')) { $workspace = defined('SYS_SYS') ? SYS_SYS : 'Wokspace Undefined'; $username = isset($_SESSION['USER_LOGGED']) && $_SESSION['USER_LOGGED'] != '' ? $_SESSION['USER_LOGGED'] : 'Unknow User'; From ab4f94d8466d813a82d8fe361489c75f5e42484e Mon Sep 17 00:00:00 2001 From: norahmollo Date: Mon, 13 Oct 2014 16:10:40 -0400 Subject: [PATCH 08/17] BUG-12021 Audit Log Records Audit Log Records --- rbac/engine/classes/model/Roles.php | 4 ++-- workflow/engine/classes/class.groups.php | 2 +- workflow/engine/classes/model/Department.php | 2 +- workflow/engine/classes/model/GroupUser.php | 2 +- workflow/engine/methods/users/users_Ajax.php | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rbac/engine/classes/model/Roles.php b/rbac/engine/classes/model/Roles.php index 1b0293aae..26fd87cd9 100755 --- a/rbac/engine/classes/model/Roles.php +++ b/rbac/engine/classes/model/Roles.php @@ -517,7 +517,7 @@ class Roles extends BaseRoles { $rol = $this->load($aData['ROL_UID']); $oUsersRbac = new RbacUsers(); $user = $oUsersRbac->load($aData['USR_UID']); - G::auditLog("AssignUsersToRole", "Assign user ".$user['USR_USERNAME']." (".$aData['USR_UID'].") to Role ".$rol['ROL_NAME']." (".$aData['ROL_UID'].") "); + G::auditLog("AssignUserToRole", "Assign user ".$user['USR_USERNAME']." (".$aData['USR_UID'].") to Role ".$rol['ROL_NAME']." (".$aData['ROL_UID'].") "); } function deleteUserRole($ROL_UID, $USR_UID) { @@ -532,7 +532,7 @@ class Roles extends BaseRoles { $oUsersRbac = new RbacUsers(); $user = $oUsersRbac->load($USR_UID); - G::auditLog("DeleteUsersToRole", "Delete user ".$user['USR_USERNAME']." (".$USR_UID.") to Role ".$rol['ROL_NAME']." (".$ROL_UID.") "); + G::auditLog("DeleteUserToRole", "Delete user ".$user['USR_USERNAME']." (".$USR_UID.") to Role ".$rol['ROL_NAME']." (".$ROL_UID.") "); } function getRolePermissions($ROL_UID, $filter='', $status=null) { diff --git a/workflow/engine/classes/class.groups.php b/workflow/engine/classes/class.groups.php index 7c73bb19a..e0c8241e4 100755 --- a/workflow/engine/classes/class.groups.php +++ b/workflow/engine/classes/class.groups.php @@ -122,7 +122,7 @@ class Groups $oUsr = new Users(); $usrName = $oUsr->load($UsrUid); - G::auditLog("AssignUsersToGroup", "Assign user ". $usrName['USR_USERNAME'] ." (".$UsrUid.") to group ".$grpName['CON_VALUE']." (".$GrpUid.") "); + G::auditLog("AssignUserToGroup", "Assign user ". $usrName['USR_USERNAME'] ." (".$UsrUid.") to group ".$grpName['CON_VALUE']." (".$GrpUid.") "); } } catch (exception $oError) { throw ($oError); diff --git a/workflow/engine/classes/model/Department.php b/workflow/engine/classes/model/Department.php index fcd1880e2..2138fc837 100755 --- a/workflow/engine/classes/model/Department.php +++ b/workflow/engine/classes/model/Department.php @@ -402,7 +402,7 @@ class Department extends BaseDepartment if (is_object( $oUser ) && get_class( $oUser ) == 'Users') { $oUser->setDepUid( $depId ); $oUser->save(); - G::auditLog("AssignUsersToDepartament", "Assign user ".$user['USR_USERNAME']." (".$userId.") to departament ".$dptoTitle['DEPO_TITLE']." (".$depId.") "); + G::auditLog("AssignUserToDepartament", "Assign user ".$user['USR_USERNAME']." (".$userId.") to departament ".$dptoTitle['DEPO_TITLE']." (".$depId.") "); } //if the user is a manager update Department Table diff --git a/workflow/engine/classes/model/GroupUser.php b/workflow/engine/classes/model/GroupUser.php index fe5b45059..5bf2e6980 100755 --- a/workflow/engine/classes/model/GroupUser.php +++ b/workflow/engine/classes/model/GroupUser.php @@ -98,7 +98,7 @@ class GroupUser extends BaseGroupUser $oUsr = new Users(); $usrName = $oUsr->load($sUserUid); - G::auditLog("AssignUsersToGroup", "Remove user: ".$usrName['USR_USERNAME'] ." (".$sUserUid.") from group ".$grpName['CON_VALUE']." (".$sGrpUid.") "); + G::auditLog("AssignUserToGroup", "Remove user: ".$usrName['USR_USERNAME'] ." (".$sUserUid.") from group ".$grpName['CON_VALUE']." (".$sGrpUid.") "); return $iResult; } else { diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index 9cc5005ba..7574185af 100644 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -230,7 +230,7 @@ try { $userData['USR_STATUS'] = $_REQUEST['NEW_USR_STATUS']; $userInstance->update($userData); - $msg = $_REQUEST['NEW_USR_STATUS'] == 'ACTIVE'? "Enable User" : "Disable User"; + $msg = $_REQUEST['NEW_USR_STATUS'] == 'ACTIVE'? "EnableUser" : "DisableUser"; G::auditLog($msg, "User Name: ".$userData['USR_USERNAME']." User ID: (".$userData['USR_UID'].") "); $response->status = 'OK'; } else { @@ -357,7 +357,7 @@ try { } $aData['USR_AUTH_USER_DN'] = $auth_dn; $RBAC->updateUser($aData); - g::auditLog("AssignAuthenticationSource", "User Name: ".$aData['USR_USERNAME'].' User ID: ('.$aData['USR_UID'].') assign to '.$aData['USR_AUTH_TYPE']); + G::auditLog("AssignAuthenticationSource", "User Name: ".$aData['USR_USERNAME'].' User ID: ('.$aData['USR_UID'].') assign to '.$aData['USR_AUTH_TYPE']); echo '{success: true}'; break; case 'usersList': From 7fa2ada95617d24a7a4672eda38561beac2cfc35 Mon Sep 17 00:00:00 2001 From: Julio Cesar Laura Date: Mon, 13 Oct 2014 16:33:39 -0400 Subject: [PATCH 09/17] Fix strict notices for PHP 5.4 --- gulliver/system/class.g.php | 6 +++--- gulliver/system/class.logger.php | 2 +- workflow/engine/classes/class.pmLicenseManager.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index e07d8e4f2..a2a709fef 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -2296,7 +2296,7 @@ class G * @param string $sText * @return string strtolower($sText) */ - public function toLower ($sText) + public static function toLower ($sText) { return strtolower( $sText ); } @@ -5260,12 +5260,12 @@ class G * @param type $pathData * @param type $file */ - public function log($message, $pathData = PATH_DATA, $file = 'cron.log') + public static function log($message, $pathData = PATH_DATA, $file = 'cron.log') { $config = System::getSystemConfiguration(); G::LoadSystem('logger'); - $oLogger =& Logger::getSingleton($pathData, PATH_SEP, $file); + $oLogger = Logger::getSingleton($pathData, PATH_SEP, $file); $oLogger->limitFile = $config['number_log_file']; $oLogger->limitSize = $config['size_log_file']; $oLogger->write($message); diff --git a/gulliver/system/class.logger.php b/gulliver/system/class.logger.php index c107dd71d..080c62b93 100644 --- a/gulliver/system/class.logger.php +++ b/gulliver/system/class.logger.php @@ -46,7 +46,7 @@ class Logger $this->filePath = $this->path . $this->fullName; } - public function getSingleton($pathData, $pathSep, $file = 'cron.log') + public static function getSingleton($pathData, $pathSep, $file = 'cron.log') { if (self::$instance == null) { self::$instance = new Logger($pathData, $pathSep, $file); diff --git a/workflow/engine/classes/class.pmLicenseManager.php b/workflow/engine/classes/class.pmLicenseManager.php index ace704336..a92aec915 100644 --- a/workflow/engine/classes/class.pmLicenseManager.php +++ b/workflow/engine/classes/class.pmLicenseManager.php @@ -19,7 +19,7 @@ class pmLicenseManager //to do: this files probably needs to be in core, since they are GPL2 //include_once (PATH_PLUGINS . 'enterprise' . PATH_SEP . 'classes' . PATH_SEP . 'class.license.lib.php'); //include_once (PATH_PLUGINS . 'enterprise' . PATH_SEP . 'classes' . PATH_SEP . 'class.license.app.php'); - + require_once PATH_CORE . 'classes' . PATH_SEP . 'class.license.lib.php'; require_once PATH_CORE . 'classes' . PATH_SEP . 'class.license.app.php'; @@ -113,7 +113,7 @@ class pmLicenseManager $this->activateFeatures (); } - public function &getSingleton() + public static function getSingleton() { if (self::$instance == null) { self::$instance = new pmLicenseManager (); From 56528e01823d30b5fb74f967bbd47d6b0f4a2dc8 Mon Sep 17 00:00:00 2001 From: Julio Cesar Laura Date: Mon, 13 Oct 2014 16:46:18 -0400 Subject: [PATCH 10/17] Fix strict notices for PHP 5.4 --- gulliver/system/class.g.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index a2a709fef..9a490c097 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1403,7 +1403,7 @@ class G * * @return string $ret */ - public function getformatedDate ($date, $format = 'yyyy-mm-dd', $lang = '') + public static function getformatedDate ($date, $format = 'yyyy-mm-dd', $lang = '') { /** * ****************************************************************************************************** @@ -1528,7 +1528,7 @@ class G * @author Erik Amaru Ortiz * @name complete_field($string, $lenght, $type={1:number/2:string/3:float}) */ - public function complete_field ($campo, $long, $tipo) + public static function complete_field ($campo, $long, $tipo) { $campo = trim( $campo ); switch ($tipo) { From db9c943ada728ebf0f6554463a9f90c1428582d2 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Mon, 13 Oct 2014 17:01:03 -0400 Subject: [PATCH 11/17] BUG-12021 Audit Log correction Audit Log correction --- workflow/engine/methods/setup/loginSettingsAjax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/methods/setup/loginSettingsAjax.php b/workflow/engine/methods/setup/loginSettingsAjax.php index 67aa16a79..0b7a1362c 100755 --- a/workflow/engine/methods/setup/loginSettingsAjax.php +++ b/workflow/engine/methods/setup/loginSettingsAjax.php @@ -35,7 +35,7 @@ switch ($request) { $memcache->delete( 'flagForgotPassword' ); $response->success = true; - G::auditLog("UpdateLoginSettings", "DefaultLanguage->".$lang." EnableForgotPassword->".$_REQUEST['forgotPasswd']); + G::auditLog("UpdateLoginSettings", "DefaultLanguage->".$lang." EnableForgotPassword->".$conf->aConfig['login_enableForgotPassword']); echo G::json_encode( $response ); From 6dc32d899056f8fc611980102246fb44ad07c547 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Mon, 13 Oct 2014 17:12:58 -0400 Subject: [PATCH 12/17] BUG-12021 AuditLog correction AuditLog correction --- workflow/engine/classes/model/Department.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/model/Department.php b/workflow/engine/classes/model/Department.php index 2138fc837..1745da1e0 100755 --- a/workflow/engine/classes/model/Department.php +++ b/workflow/engine/classes/model/Department.php @@ -369,8 +369,10 @@ class Department extends BaseDepartment if ($managerId) { $user = $oUser->loadDetailed ($managerId); - $dptoTitle = $oDept->Load($depId); - G::auditLog("AssignManagerToDepartament", "Assign Manager ".$user['USR_USERNAME']." (".$managerId.") to ".$dptoTitle['DEPO_TITLE']." (".$depId.") "); + if (is_object( $oDept ) && get_class( $oDept ) == 'Department') { + $dptoTitle = $oDept->Load($depId); + G::auditLog("AssignManagerToDepartament", "Assign Manager ".$user['USR_USERNAME']." (".$managerId.") to ".$dptoTitle['DEPO_TITLE']." (".$depId.") "); + } } // get children departments to update the reportsTo of these children $childrenCriteria = new Criteria( 'workflow' ); From c1faa36d0addae319b38cb59068cae2d8ad0e6a9 Mon Sep 17 00:00:00 2001 From: Julio Cesar Laura Date: Mon, 13 Oct 2014 17:28:28 -0400 Subject: [PATCH 13/17] Fix strict notices for PHP 5.4 --- workflow/engine/classes/class.licensedFeatures.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.licensedFeatures.php b/workflow/engine/classes/class.licensedFeatures.php index 9b543c487..c7e1469e6 100644 --- a/workflow/engine/classes/class.licensedFeatures.php +++ b/workflow/engine/classes/class.licensedFeatures.php @@ -68,7 +68,7 @@ class PMLicensedFeatures if (!class_exists("pmLicenseManager")) { require_once ("classes" . PATH_SEP . "class.pmLicenseManager.php"); } - $licenseManager = &pmLicenseManager::getSingleton(); + $licenseManager = pmLicenseManager::getSingleton(); $_SESSION['__sw__'] = true; $padl = new padl(); From 7e0d396558e0ab2c5de9df2bfb0a5f5aaef5cb1b Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Mon, 13 Oct 2014 17:46:40 -0400 Subject: [PATCH 14/17] PM-599 "Se pierde sesion al ingresar a history case en el case tracker..." SOLVED Issue: En los listados se pierde sesion al tratar de ordenar las columnas (esto en: MY CASE FORMS AND DOCUMENTS, MY CASE HISTORY, MY HISTORY MESSAGES) Cause: El "case tracker" es un modulo que no se inicia con un usuario de ProcessMaker, el script "propelTableAjax" es el encargado de generar los listado, a este script se debe acceder "without session started", lo cual no ocurre por lo que se redirecciona al login Solution: Se ha agregado en sysGeneric a "propelTableAjax" para que este en el grupo de scripts "without session started" Se ha validado la variable $_SESSION["USER_LOGGED"] si esta definida o no. --- gulliver/methods/propelTableAjax.php | 19 ++++++++++++------- workflow/public_html/sysGeneric.php | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/gulliver/methods/propelTableAjax.php b/gulliver/methods/propelTableAjax.php index a0f06a5cc..d76a17f72 100755 --- a/gulliver/methods/propelTableAjax.php +++ b/gulliver/methods/propelTableAjax.php @@ -78,7 +78,7 @@ //order by $orderBy = get_ajax_value('order'); if (isset($orderBy)) { - $orderBy = urldecode($orderBy); + $orderBy = urldecode($orderBy); $ntable->orderBy = $orderBy; } @@ -126,11 +126,16 @@ return ; } - $ntable->renderTable( 'content' ); +$ntable->renderTable("content"); - G::LoadClass('configuration'); - $conf = new Configurations(); - $conf->setConfig($ntable->__Configuration,$ntable,$conf->aConfig); - $conf->saveConfig('pagedTable',$ntable->__OBJ_UID,'',$_SESSION['USER_LOGGED'],''); +G::LoadClass("configuration"); + +$conf = new Configurations(); +$conf->setConfig($ntable->__Configuration, $ntable, $conf->aConfig); + +if (isset($_SESSION["USER_LOGGED"])) { + $conf->saveConfig("pagedTable", $ntable->__OBJ_UID, "", $_SESSION["USER_LOGGED"], ""); +} else { + $conf->saveConfig("pagedTable", $ntable->__OBJ_UID); +} -?> diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 4fe42dff7..56514f8fb 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -892,6 +892,7 @@ if (! defined( 'EXECUTE_BY_CRON' )) { $noLoginFiles[] = 'cases_NextStep'; $noLoginFiles[] = 'genericAjax'; $noLoginFiles[] = 'casesSaveDataView'; + $noLoginFiles[] = "propelTableAjax"; $noLoginFolders[] = 'services'; $noLoginFolders[] = 'tracker'; From 20040dc443c0023a61a7115a09fe422c8b07c688 Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Tue, 14 Oct 2014 09:20:52 -0400 Subject: [PATCH 15/17] Fix. Modificacion de queries para doble conexion --- rbac/engine/classes/model/RbacUsers.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rbac/engine/classes/model/RbacUsers.php b/rbac/engine/classes/model/RbacUsers.php index eeabea11c..8861e4f6f 100755 --- a/rbac/engine/classes/model/RbacUsers.php +++ b/rbac/engine/classes/model/RbacUsers.php @@ -261,7 +261,7 @@ class RbacUsers extends BaseRbacUsers $oCriteria->addSelectColumn('COUNT(*) AS CNT'); $oCriteria->add(RbacUsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); $oCriteria->addGroupByColumn(RbacUsersPeer::UID_AUTH_SOURCE); - $oDataset = RbacUsersPeer::doSelect($oCriteria, Propel::getDbConnection('rbac_ro')); + $oDataset = RbacUsersPeer::doSelectRS($oCriteria, Propel::getDbConnection('rbac_ro')); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $aAuth = Array(); @@ -287,7 +287,7 @@ class RbacUsers extends BaseRbacUsers $oCriteria->add(RbacUsersPeer::UID_AUTH_SOURCE, $auth_source, Criteria::EQUAL); } $oCriteria->add(RbacUsersPeer::USR_STATUS, 0, Criteria::NOT_EQUAL); - $oDataset = RbacUsersPeer::doSelect($oCriteria, Propel::getDbConnection('rbac_ro')); + $oDataset = RbacUsersPeer::doSelectRS($oCriteria, Propel::getDbConnection('rbac_ro')); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $aUsers = array(); while ($oDataset->next()) { From e9a789dec2269c89c87454347d7fc12d1b40bf1b Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Tue, 14 Oct 2014 16:43:45 -0400 Subject: [PATCH 16/17] BUG 606 "Los campos: Initial Task Initial Dynaform..." SOLVED - Los campos: Initial Task Initial Dynaform en web entry son requeridos deberias tener (*) - Problema resuelto, en el Dynaform Web Entry en los labels "Initial Task" y "Initial Dynaform" se ha agregado el "*" como campos requeridos. --- workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml b/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml index d831de2b8..5a5433b4a 100755 --- a/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml +++ b/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml @@ -5,13 +5,13 @@ - - Date: Tue, 14 Oct 2014 17:38:50 -0400 Subject: [PATCH 17/17] PM-604 Listado de Report Tables(old version) dentro de Designer. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROBLEMA: El listado de RT dentro de un proceso tenia 2 problemas: 1. Los RT generados con el generador antiguo (Old Version) siempre se listaban sin diferencia en la paginacion. En todas las paginas aparecian los mismos RT(old version) 2. Los RT generados con el generador antiguo (Old Version) siempre se listaban al hacer una busqueda. En todas las busquedas siempre se incluian todos los RT(old version) sin excluir a los que no cumplian con el filtro de la busqueda. Ambos problemas sucedian porque la inclusion de los RT(old version) en el listado a mostrarse, se realizaba solo por la busqueda del processUID, nunca se incluian otros filtros (esto porq la funcion que lista a los RT(old version) solo acepta el UID del proceso) y siempre se aniadian este listado al listado que si usa filtros de RT(new version). SOLUCION: Se agrego una validacion para usar el filtro en las busquedas y una validacion para que los RT(Old version solo se añn al final del listado total de R RT del proceso). --- workflow/engine/controllers/pmTablesProxy.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 1238b7ea0..2641d8334 100755 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -53,9 +53,19 @@ class pmTablesProxy extends HttpProxyController } $addTables['count'] += count( $reportTablesOldList ); - foreach ($reportTablesOldList as $i => $oldRepTab) { - $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' ); - } + if(($start+$limit) > $addTables['count']){ + foreach ($reportTablesOldList as $i => $oldRepTab) { + if($filter != ''){ + $oldTableName = strtolower($oldRepTab['REP_TAB_NAME']); + $oldTableDesc = strtolower($oldRepTab['REP_TAB_TITLE']); + if((strpos($oldTableName, $filter) !== false) || (strpos($oldTableDesc, $filter) !== false)){ + $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' ); + } + } else { + $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' ); + } + } + } } else { $addTables = AdditionalTables::getAll( $start, $limit, $filter ); }