Exemplo n.º 1
0
    /**

     * Update properties of an Task

     * @var string $prj_uid. Uid for Process

     * @var string $act_uid. Uid for Activity

     * @var array $arrayProperty. Data for properties of Activity

     *

     * @author Brayan Pereyra (Cochalo) <*****@*****.**>

     * @copyright Colosa - Bolivia

     *

     * return object

     */

    public function updateProperties($prj_uid, $act_uid, $arrayProperty)

    {

        //Copy of processmaker/workflow/engine/methods/tasks/tasks_Ajax.php //case "saveTaskData":

        try {

            if (isset($arrayProperty['properties'])) {

                $arrayProperty = array_change_key_case($arrayProperty['properties'], CASE_UPPER);

            }

            $prj_uid = $this->validateProUid($prj_uid);

            $act_uid = $this->validateActUid($act_uid);

            $arrayProperty["TAS_UID"] = $act_uid;

            $arrayProperty["PRO_UID"] = $prj_uid;



            $task = new \Task();

            $aTaskInfo = $task->load($arrayProperty["TAS_UID"]);



            $arrayResult = array();

            if ($arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == "1") {

                if (!is_numeric($arrayProperty["TAS_SELFSERVICE_TIME"]) || $arrayProperty["TAS_SELFSERVICE_TIME"]=='') {

                    throw (new \Exception("Invalid value specified for 'tas_selfservice_time'"));

                }

            }



            foreach ($arrayProperty as $k => $v) {

                $arrayProperty[$k] = str_replace("@amp@", "&", $v);

            }



            if (isset($arrayProperty["TAS_SEND_LAST_EMAIL"])) {

                $arrayProperty["TAS_SEND_LAST_EMAIL"] = ($arrayProperty["TAS_SEND_LAST_EMAIL"] == "TRUE")? "TRUE" : "FALSE";

            } else {

                if (isset($arrayProperty["SEND_EMAIL"])) {

                    $arrayProperty["TAS_SEND_LAST_EMAIL"] = ($arrayProperty["SEND_EMAIL"] == "TRUE")? "TRUE" : "FALSE";

                } else {

                    $arrayProperty["TAS_SEND_LAST_EMAIL"] = (is_null($aTaskInfo["TAS_SEND_LAST_EMAIL"]))? "FALSE" : $aTaskInfo["TAS_SEND_LAST_EMAIL"];

                }

            }



            //Validating TAS_ASSIGN_VARIABLE value

            if (!isset($arrayProperty["TAS_ASSIGN_TYPE"])) {

                $derivateType = $task->kgetassigType($arrayProperty["PRO_UID"], $arrayProperty["TAS_UID"]);



                if (is_null($derivateType)) {

                    $arrayProperty["TAS_ASSIGN_TYPE"] = "BALANCED";

                } else {

                    $arrayProperty["TAS_ASSIGN_TYPE"] = $derivateType["TAS_ASSIGN_TYPE"];

                }

            }



            switch ($arrayProperty["TAS_ASSIGN_TYPE"]) {

                case 'BALANCED':

                case 'MANUAL':

                case 'REPORT_TO':

                    $this->unsetVar($arrayProperty, "TAS_ASSIGN_VARIABLE");

                    $this->unsetVar($arrayProperty, "TAS_GROUP_VARIABLE");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIMEOUT");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION");

                    break;

                case 'EVALUATE':

                    if (empty($arrayProperty["TAS_ASSIGN_VARIABLE"])) {

                        throw (new \Exception("Invalid value specified for 'tas_assign_variable'"));

                    }

                    $this->unsetVar($arrayProperty, "TAS_GROUP_VARIABLE");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIMEOUT");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID");

                    $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION");

                    break;

                case 'SELF_SERVICE':

                case 'SELF_SERVICE_EVALUATE':

                    if ($arrayProperty["TAS_ASSIGN_TYPE"] == "SELF_SERVICE_EVALUATE") {

                        if (empty($arrayProperty["TAS_GROUP_VARIABLE"])) {

                            throw (new \Exception("Invalid value specified for 'tas_group_variable'"));

                        }

                    } else {

                        $arrayProperty["TAS_GROUP_VARIABLE"] = '';

                    }

                    $arrayProperty["TAS_ASSIGN_TYPE"] = "SELF_SERVICE";

                    if (!($arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == 0 || $arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == 1)) {

                        throw (new \Exception("Invalid value specified for 'tas_selfservice_timeout'"));

                    }



                    if ($arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == "1") {

                        if (empty($arrayProperty["TAS_SELFSERVICE_TIME"])) {

                            throw (new \Exception("Invalid value specified for 'tas_assign_variable'"));

                        }

                        if (empty($arrayProperty["TAS_SELFSERVICE_TIME_UNIT"])) {

                            throw (new \Exception("Invalid value specified for 'tas_selfservice_time_unit'"));

                        }

                        if (empty($arrayProperty["TAS_SELFSERVICE_TRIGGER_UID"])) {

                            throw (new \Exception("Invalid value specified for 'tas_selfservice_trigger_uid'"));

                        }

                        if (empty($arrayProperty["TAS_SELFSERVICE_EXECUTION"])) {

                            throw (new \Exception("Invalid value specified for 'tas_selfservice_execution'"));

                        }

                    } else {

                        $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME");

                        $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT");

                        $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID");

                        $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION");

                    }

                    break;

            }



            //Validating TAS_TRANSFER_FLY value

            if ($arrayProperty["TAS_TRANSFER_FLY"] == "FALSE") {

                if (!isset($arrayProperty["TAS_DURATION"])) {

                    throw (new \Exception("Invalid value specified for 'tas_duration'"));

                }

                $valuesTimeUnit = array('DAYS','HOURS','MINUTES');

                if ((!isset($arrayProperty["TAS_TIMEUNIT"])) ||

                    (!in_array($arrayProperty["TAS_TIMEUNIT"], $valuesTimeUnit))) {

                    throw (new \Exception("Invalid value specified for 'tas_timeunit'"));

                }

                $valuesTypeDay = array('1','2','');

                if ((!isset($arrayProperty["TAS_TYPE_DAY"])) ||

                    (!in_array($arrayProperty["TAS_TYPE_DAY"], $valuesTypeDay))) {

                    throw (new \Exception("Invalid value specified for 'tas_type_day'"));

                }

                if (!isset($arrayProperty["TAS_CALENDAR"])) {

                    throw (new \Exception("Invalid value specified for 'tas_calendar'"));

                }

            } else {

                $this->unsetVar($arrayProperty, "TAS_DURATION");

                $this->unsetVar($arrayProperty, "TAS_TIMEUNIT");

                $this->unsetVar($arrayProperty, "TAS_TYPE_DAY");

                $this->unsetVar($arrayProperty, "TAS_CALENDAR");

            }



            if ($arrayProperty["TAS_SEND_LAST_EMAIL"] == "TRUE") {

                if (empty($arrayProperty["TAS_DEF_SUBJECT_MESSAGE"])) {

                    throw (new \Exception("Invalid value specified for 'tas_def_subject_message'"));

                }

                $valuesDefMessageType = array('template','text');

                if ((!isset($arrayProperty["TAS_DEF_MESSAGE_TYPE"])) ||

                    (!in_array($arrayProperty["TAS_DEF_MESSAGE_TYPE"], $valuesDefMessageType))) {

                    throw (new \Exception("Invalid value specified for 'tas_def_message_type'"));

                }

                if ($arrayProperty["TAS_DEF_MESSAGE_TYPE"] == 'template') {

                    if (empty($arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"])) {

                        throw (new \Exception("Invalid value specified for 'tas_def_message_template'"));

                    }

                    $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE");

                } else {

                    if (empty($arrayProperty["TAS_DEF_MESSAGE"])) {

                        throw (new \Exception("Invalid value specified for 'tas_def_message'"));

                    }

                    $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE_TEMPLATE");

                }

                //Additional configuration

                if (isset($arrayProperty["TAS_DEF_MESSAGE_TYPE"])) {

                    \G::LoadClass("configuration");

                    $oConf = new \Configurations();

                    if (!isset($arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"])) {

                        $arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"] = "alert_message.html";

                    }

                    $oConf->aConfig = array("TAS_DEF_MESSAGE_TYPE" => $arrayProperty["TAS_DEF_MESSAGE_TYPE"], "TAS_DEF_MESSAGE_TEMPLATE" => $arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"]);

                    $oConf->saveConfig("TAS_EXTRA_PROPERTIES", $arrayProperty["TAS_UID"], "", "");

                }

            } else {

                $this->unsetVar($arrayProperty, "TAS_DEF_SUBJECT_MESSAGE");

                $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE_TYPE");

                $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE");

                $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE_TEMPLATE");

            }



            $result = $task->update($arrayProperty);

            if (!empty($arrayProperty['CONSOLIDATE_DATA'])) {

                if (!empty($arrayProperty['CONSOLIDATE_DATA']['consolidated_dynaform'])) {

                    G::LoadClass("consolidatedCases");

                    $consolidated = new \ConsolidatedCases();

                    $dataConso = array(

                        'con_status'    => $arrayProperty['CONSOLIDATE_DATA']['consolidated_enable'],

                        'tas_uid'       => $arrayProperty['TAS_UID'],

                        'dyn_uid'       => $arrayProperty['CONSOLIDATE_DATA']['consolidated_dynaform'],

                        'pro_uid'       => $arrayProperty['PRO_UID'],

                        'rep_uid'       => $arrayProperty['CONSOLIDATE_DATA']['consolidated_report_table'],

                        'table_name'    => $arrayProperty['CONSOLIDATE_DATA']['consolidated_table'],

                        'title'         => $arrayProperty['CONSOLIDATE_DATA']['consolidated_title']

                    );

                    $consolidated->saveConsolidated($dataConso);

                }

            }

            $arrayResult["status"] = "OK";



            if ($result == 3) {

                $arrayResult["status"] = "CRONCL";

            }

            return $arrayResult;

        } catch (Exception $e) {

            throw $e;

        }

    }
Exemplo n.º 2
0
 /**
  * Remove a Adhoc assignee of an activity
  *
  * @param string $sProcessUID {@min 32} {@max 32}
  * @param string $sTaskUID {@min 32} {@max 32}
  * @param string $sAssigneeUID {@min 32} {@max 32}
  *
  * @access public
  */
 public function removeTaskAdhocAssignee($sProcessUID, $sTaskUID, $sAssigneeUID)
 {
     try {
         Validator::proUid($sProcessUID, '$prj_uid');
         $this->validateActUid($sTaskUID);
         $iType = 2;
         $iRelation = '';
         $oCriteria = new \Criteria('workflow');
         $oCriteria->addSelectColumn(\TaskUserPeer::TU_RELATION);
         $oCriteria->add(\TaskUserPeer::USR_UID, $sAssigneeUID);
         $oCriteria->add(\TaskUserPeer::TAS_UID, $sTaskUID);
         $oCriteria->add(\TaskUserPeer::TU_TYPE, $iType);
         $oTaskUser = \TaskUserPeer::doSelectRS($oCriteria);
         $oTaskUser->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
         while ($oTaskUser->next()) {
             $aRow = $oTaskUser->getRow();
             $iRelation = $aRow['TU_RELATION'];
         }
         $oTaskUser = \TaskUserPeer::retrieveByPK($sTaskUID, $sAssigneeUID, $iType, $iRelation);
         if (!is_null($oTaskUser)) {
             \TaskUserPeer::doDelete($oCriteria);
             $arrayAux = $this->getTaskAssignees($sProcessUID, $sTaskUID, "ASSIGNEE", 2);
             $arrayTaskAdhocAssignees = $arrayAux["data"];
             if (empty($arrayTaskAdhocAssignees)) {
                 $task = new \Task();
                 $result = $task->update(array("TAS_UID" => $sTaskUID, "TAS_TYPE" => "NORMAL"));
             }
         } else {
             throw new \Exception(\G::LoadTranslation("ID_ROW_DOES_NOT_EXIST"));
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
Exemplo n.º 3
0
    /**
     * Create/Update Process
     *
     * @param string $option
     * @param array  $arrayDefineProcessData
     *
     * return array  Return data array with new UID for each element
     *
     * @access public
     */
    public function defineProcess($option, $arrayDefineProcessData)
    {
        if (!isset($arrayDefineProcessData["process"]) || count($arrayDefineProcessData["process"]) == 0) {
            throw (new \Exception("Process data do not exist"));
        }

        //Process
        $process = new \Process();

        $arrayProcessData = $arrayDefineProcessData["process"];

        unset($arrayProcessData["tasks"]);
        unset($arrayProcessData["routes"]);

        switch ($option) {
            case "CREATE":
                if (!isset($arrayProcessData["USR_UID"]) || trim($arrayProcessData["USR_UID"]) == "") {
                    throw (new \Exception("User data do not exist"));
                }

                if (!isset($arrayProcessData["PRO_TITLE"]) || trim($arrayProcessData["PRO_TITLE"]) == "") {
                    throw (new \Exception("Process title data do not exist"));
                }

                if (!isset($arrayProcessData["PRO_DESCRIPTION"])) {
                    throw (new \Exception("Process description data do not exist"));
                }

                if (!isset($arrayProcessData["PRO_CATEGORY"])) {
                    throw (new \Exception("Process category data do not exist"));
                }
                break;
            case "UPDATE":
                break;
        }

        if (isset($arrayProcessData["PRO_TITLE"])) {
            $arrayProcessData["PRO_TITLE"] = trim($arrayProcessData["PRO_TITLE"]);
        }

        if (isset($arrayProcessData["PRO_DESCRIPTION"])) {
            $arrayProcessData["PRO_DESCRIPTION"] = trim($arrayProcessData["PRO_DESCRIPTION"]);
        }

        if (isset($arrayProcessData["PRO_TITLE"]) && $process->existsByProTitle($arrayProcessData["PRO_TITLE"])) {
            throw (new \Exception(\G::LoadTranslation("ID_PROCESSTITLE_ALREADY_EXISTS", SYS_LANG, array("PRO_TITLE" => $arrayProcessData["PRO_TITLE"]))));
        }

        $arrayProcessData["PRO_DYNAFORMS"] = array ();
        $arrayProcessData["PRO_DYNAFORMS"]["PROCESS"] = (isset($arrayProcessData["PRO_SUMMARY_DYNAFORM"]))? $arrayProcessData["PRO_SUMMARY_DYNAFORM"] : "";

        unset($arrayProcessData["PRO_SUMMARY_DYNAFORM"]);

        switch ($option) {
            case "CREATE":
                $processUid = $process->create($arrayProcessData, false);

                //Call plugins
                //$arrayData = array(
                //    "PRO_UID"      => $processUid,
                //    "PRO_TEMPLATE" => (isset($arrayProcessData["PRO_TEMPLATE"]) && $arrayProcessData["PRO_TEMPLATE"] != "")? $arrayProcessData["PRO_TEMPLATE"] : "",
                //    "PROCESSMAP"   => $this //?
                //);
                //
                //$oPluginRegistry = &PMPluginRegistry::getSingleton();
                //$oPluginRegistry->executeTriggers(PM_NEW_PROCESS_SAVE, $arrayData);
                break;
            case "UPDATE":
                $result = $process->update($arrayProcessData);

                $processUid = $arrayProcessData["PRO_UID"];
                break;
        }

        //Process - Save Calendar ID for this process
        if (isset($arrayProcessData["PRO_CALENDAR"]) && $arrayProcessData["PRO_CALENDAR"] != "") {
            $calendar = new \Calendar();
            $calendar->assignCalendarTo($processUid, $arrayProcessData["PRO_CALENDAR"], "PROCESS");
        }

        $uidAux = $arrayDefineProcessData["process"]["PRO_UID"];
        $arrayDefineProcessData["process"]["PRO_UID"] = $processUid;
        $arrayDefineProcessData["process"]["PRO_UID_OLD"] = $uidAux;

        //Tasks
        if (isset($arrayDefineProcessData["process"]["tasks"]) && count($arrayDefineProcessData["process"]["tasks"]) > 0) {
            $arrayTaskData = $arrayDefineProcessData["process"]["tasks"];

            foreach ($arrayTaskData as $index => $value) {
                $t = $value;
                $t["PRO_UID"] = $processUid;

                $arrayData = $t;

                $action = $arrayData["_action"];

                unset($arrayData["_action"]);

                switch ($action) {
                    case "CREATE":
                        //Create task
                        $arrayDataAux = array(
                            "TAS_UID"   => $arrayData["TAS_UID"],
                            "PRO_UID"   => $arrayData["PRO_UID"],
                            "TAS_TITLE" => $arrayData["TAS_TITLE"],
                            "TAS_DESCRIPTION" => $arrayData["TAS_DESCRIPTION"],
                            "TAS_POSX"  => $arrayData["TAS_POSX"],
                            "TAS_POSY"  => $arrayData["TAS_POSY"],
                            "TAS_START" => $arrayData["TAS_START"]
                        );

                        $task = new \Task();

                        $taskUid = $task->create($arrayDataAux, false);

                        $uidAux = $arrayDefineProcessData["process"]["tasks"][$index]["TAS_UID"];
                        $arrayDefineProcessData["process"]["tasks"][$index]["TAS_UID"] = $taskUid;
                        $arrayDefineProcessData["process"]["tasks"][$index]["TAS_UID_OLD"] = $uidAux;

                        //Update task properties
                        $task2 = new \ProcessMaker\BusinessModel\Task();

                        $arrayResult = $task2->updateProperties($taskUid, $processUid, $arrayData);

                        //Update array routes
                        if (isset($arrayDefineProcessData["process"]["routes"]) && count($arrayDefineProcessData["process"]["routes"]) > 0) {
                            $arrayDefineProcessData["process"]["routes"] = $this->routeUpdateTaskUidInArray($arrayDefineProcessData["process"]["routes"], $taskUid, $t["TAS_UID"]);
                        }
                        break;
                    case "UPDATE":
                        //Update task
                        $task = new \Task();

                        $result = $task->update($arrayData);

                        //Update task properties
                        $task2 = new \ProcessMaker\BusinessModel\Task();

                        $arrayResult = $task2->updateProperties($arrayData["TAS_UID"], $processUid, $arrayData);
                        break;
                    case "DELETE":
                        $tasks = new \Tasks();

                        $tasks->deleteTask($arrayData["TAS_UID"]);
                        break;
                }
            }
        }

        //Routes
        if (isset($arrayDefineProcessData["process"]["routes"]) && count($arrayDefineProcessData["process"]["routes"]) > 0) {
            $arrayRouteData = $arrayDefineProcessData["process"]["routes"];

            foreach ($arrayRouteData as $index => $value) {
                $r = $value;

                $routeUid = $this->defineRoute( //***** New method
                    $processUid,
                    $r["TAS_UID"],
                    $r["ROU_NEXT_TASK"],
                    $r["ROU_TYPE"],
                    false
                );

                $uidAux = $arrayDefineProcessData["process"]["routes"][$index]["ROU_UID"];
                $arrayDefineProcessData["process"]["routes"][$index]["ROU_UID"] = $routeUid;
                $arrayDefineProcessData["process"]["routes"][$index]["ROU_UID_OLD"] = $uidAux;
            }
        }

        return $arrayDefineProcessData;
    }