コード例 #1
0
ファイル: EmailEvent.php プロジェクト: rrsc/processmaker
    /**
     * Save Data for Email-Event
     * @var string $prj_uid. Uid for Process
     * @var string $arrayData. Data for Trigger
     *     
     * return array
     */
    public function save($prj_uid = '', $arrayData = array())
    {
        try {
            //Verify data
            $process = new \ProcessMaker\BusinessModel\Process();
            $validator = new \ProcessMaker\BusinessModel\Validator();

            $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
            $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");

            //Set data
            $arrayData = array_change_key_case($arrayData, CASE_UPPER);

            //Verify data
            $process->throwExceptionIfNotExistsProcess($prj_uid, "projectUid");

            //Create
            $db = \Propel::getConnection("workflow");

            try {
                $emailEvent = new \EmailEvent();
                
                $emailEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
                
                $emailEventUid = \ProcessMaker\Util\Common::generateUID();

                $emailEvent->setEmailEventUid($emailEventUid);
                $emailEvent->setPrjUid($prj_uid);

                $db->begin();
                $result = $emailEvent->save();
                $db->commit();
                
                return $this->getEmailEvent($emailEventUid);
            } catch (\Exception $e) {
                $db->rollback();
                throw $e;
            }
        } catch (\Exception $e) {
            throw $e;
        }    
    }
コード例 #2
0
ファイル: BpmnWorkflow.php プロジェクト: rrsc/processmaker
    /**
     * Update project from a struct defined.
     *
     * This function make add, update or delete of elements of a project
     * Actions is based on a diff from project save in Db and the given structure as param, by the following criteria.
     *
     * 1. Elements that are on the struct, but they are not in the Db will be created on Db
     * 2. Elements that are on the struct and they are found in db, will be compared, if they have been modified then will be updated on Db
     * 3. Elements found in Db but they are not present on the struct will be considered deleted, so they will be deleted from Db.
     *
     * Example Struct:
     *  array(
     *    "prj_uid" => "25111170353317e324d6e23073851309",
     *    "prj_name" => "example project",
     *    "prj_description" => "project desc.",
     *    ...
     *    "diagrams" => array(
     *      array(
     *        "dia_uid" => "94208559153317e325f1c24068030751",
     *        "dia_name" => "Example Diagram",
     *        ...
     *        "activities" => array(...),
     *        "events" => array(...),
     *        "gateways" => array(...),
     *        "flows" => array(...),
     *        "artifacts" => array(...),
     *        "laneset" => array(...),
     *        "lanes" => array(...)
     *      )
     *    )
     *  )
     *
     * Notes:
     *   1. All elements keys are in lowercase
     *   2. the "diagrams" element is an array of arrays
     *
     * @param $prjUid
     * @param $projectData
     * @return array
     */
    public static function updateFromStruct($prjUid, $projectData, $generateUid = true, $forceInsert = false)
    {
        $diagram = isset($projectData["diagrams"]) && isset($projectData["diagrams"][0]) ? $projectData["diagrams"][0] : array();
        $diagram["activities"] = isset($diagram["activities"])? $diagram["activities"]: array();
        $diagram["artifacts"]  = isset($diagram["artifacts"])? $diagram["artifacts"]: array();
        $diagram["gateways"] = isset($diagram["gateways"])? $diagram["gateways"]: array();
        $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["laneset"] = isset($diagram["laneset"])? $diagram["laneset"]: array();
        $diagram["lanes"] = isset($diagram["lanes"])? $diagram["lanes"]: array();

        $result = array();

        $projectData['prj_uid'] = $prjUid;

        $bwp = BpmnWorkflow::load($prjUid);

        $projectRecord = array_change_key_case($projectData, CASE_UPPER);

        $bwp->update($projectRecord);

        //Array - Set empty
        $bwp->arrayElementTaskRelation = array();

        //Element-Task-Relation - Get all records
        $criteria = new \Criteria("workflow");

        $criteria->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_UID);
        $criteria->addSelectColumn(\ElementTaskRelationPeer::TAS_UID);

        $criteria->add(\ElementTaskRelationPeer::PRJ_UID, $bwp->wp->getUid(), \Criteria::EQUAL);

        $rsCriteria = \ElementTaskRelationPeer::doSelectRS($criteria);
        $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);

        while ($rsCriteria->next()) {
            $row = $rsCriteria->getRow();

            //Array - Add element
            $bwp->arrayElementTaskRelation[$row["ELEMENT_UID"]] = $row["TAS_UID"];
        }

        /*
         * 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) {
                    //Generate and update UID
                    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->updateLaneset($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);

            //Update UIDs
            foreach ($result as $value) {
                if ($laneData["LNS_UID"] == $value["old_uid"]) {
                    $laneData["LNS_UID"] = $value["new_uid"];
                }
            }

            $dataObject = $bwp->getLane($laneData["LAN_UID"]);

            if ($forceInsert || is_null($dataObject)) {
                if ($generateUid) {
                    //Generate and update UID
                    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->updateLane($laneData["LAN_UID"], $laneData);
            } else {
                Util\Logger::log("Update Lane ({$laneData["LAN_UID"]}) Skipped - No changes required");
            }

            $diagram["lanes"][$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 Activities Handling
         */
        $whiteList = array();
        foreach ($diagram["activities"] as $i => $activityData) {
            $activityData = array_change_key_case($activityData, CASE_UPPER);
            unset($activityData["_EXTENDED"], $activityData["BOU_ELEMENT_ID"]);
            $activityData = Util\ArrayUtil::boolToIntValues($activityData);

            $activity = $bwp->getActivity($activityData["ACT_UID"]);

            if ($activity["BOU_CONTAINER"] != $activityData["BOU_CONTAINER"]) {
                $activity = null;
            }

            if ($forceInsert || is_null($activity)) {
                if ($generateUid) {
                    //Generate and update UID
                    $activityData = $bwp->updateBoundByArrayUid($activityData, $result);

                    $uidOld = $activityData["ACT_UID"];
                    $activityData["ACT_UID"] = Util\Common::generateUID();

                    $result[] = array(
                        "object"  => "activity",
                        "old_uid" => $uidOld,
                        "new_uid" => $activityData["ACT_UID"]
                    );
                }

                $bwp->addActivity($activityData);
            } elseif (! $bwp->isEquals($activity, $activityData)) {
                $bwp->updateActivity($activityData["ACT_UID"], $activityData);
            } else {
                Util\Logger::log("Update Activity ({$activityData["ACT_UID"]}) Skipped - No changes required");
            }

            $diagram["activities"][$i] = $activityData;
            $whiteList[] = $activityData["ACT_UID"];

        }

        $activities = $bwp->getActivities();

        // looking for removed elements
        foreach ($activities as $activityData) {
            if (! in_array($activityData["ACT_UID"], $whiteList)) {
                $bwp->removeActivity($activityData["ACT_UID"]);
            }
        }

        /*
         * Diagram's Artifacts Handling
         */
        $whiteList = array();
        foreach ($diagram["artifacts"] as $i => $artifactData) {
            $artifactData = array_change_key_case($artifactData, CASE_UPPER);
            unset($artifactData["_EXTENDED"]);

            $artifact = $bwp->getArtifact($artifactData["ART_UID"]);

            if ($artifact["BOU_CONTAINER"] != $artifactData["BOU_CONTAINER"]) {
                $artifact = null;
            }

            if ($forceInsert || is_null($artifact)) {
                if ($generateUid) {
                    //Generate and update UID
                    $artifactData = $bwp->updateBoundByArrayUid($artifactData, $result);

                    $uidOld = $artifactData["ART_UID"];
                    $artifactData["ART_UID"] = Util\Common::generateUID();

                    $result[] = array(
                        "object"  => "artifact",
                        "old_uid" => $uidOld,
                        "new_uid" => $artifactData["ART_UID"]
                    );
                }

                $bwp->addArtifact($artifactData);
            } elseif (! $bwp->isEquals($artifact, $artifactData)) {
                $bwp->updateArtifact($artifactData["ART_UID"], $artifactData);
            } else {
                Util\Logger::log("Update Artifact ({$artifactData["ART_UID"]}) Skipped - No changes required");
            }

            $diagram["artifacts"][$i] = $artifactData;
            $whiteList[] = $artifactData["ART_UID"];
        }

        $artifacts = $bwp->getArtifacts();
        // looking for removed elements
        foreach ($artifacts as $artifactData) {
            if (! in_array($artifactData["ART_UID"], $whiteList)) {
                $bwp->removeArtifact($artifactData["ART_UID"]);
            }
        }

        /*
         * Diagram's Gateways Handling
         */
        $arrayGatewayUid = array();
        $arrayGatewayParallelUid = array();
        $arrayGatewayUidToCheckConverging = array(); //PARALLEL, INCLUSIVE

        $whiteList = array();

        foreach ($diagram["gateways"] as $i => $gatewayData) {
            $gatewayData = array_change_key_case($gatewayData, CASE_UPPER);
            unset($gatewayData["_EXTENDED"]);

            $flagAddOrUpdate = false;

            $gateway = $bwp->getGateway($gatewayData["GAT_UID"]);

            if ($gateway["BOU_CONTAINER"] != $gatewayData["BOU_CONTAINER"]) {
                $gateway = null;
            }

            if ($forceInsert || is_null($gateway)) {
                if ($generateUid) {
                    //Generate and update UID
                    $gatewayData = $bwp->updateBoundByArrayUid($gatewayData, $result);

                    $uidOld = $gatewayData["GAT_UID"];
                    $gatewayData["GAT_UID"] = Util\Common::generateUID();

                    $result[] = array(
                        "object"  => "gateway",
                        "old_uid" => $uidOld,
                        "new_uid" => $gatewayData["GAT_UID"]
                    );
                }

                $bwp->addGateway($gatewayData);

                $flagAddOrUpdate = true;
            } elseif (! $bwp->isEquals($gateway, $gatewayData)) {
                $bwp->updateGateway($gatewayData["GAT_UID"], $gatewayData);

                $flagAddOrUpdate = true;
            } else {
                Util\Logger::log("Update Gateway ({$gatewayData["GAT_UID"]}) Skipped - No changes required");
            }

            if ($flagAddOrUpdate) {
                $arrayGatewayData = $bwp->getGateway($gatewayData["GAT_UID"]);

                switch ($arrayGatewayData["GAT_TYPE"]) {
                    case self::BPMN_GATEWAY_PARALLEL:
                        $arrayGatewayParallelUid[] = $gatewayData["GAT_UID"];
                        $arrayGatewayUidToCheckConverging[] = $gatewayData["GAT_UID"];
                        break;
                    case self::BPMN_GATEWAY_INCLUSIVE:
                        $arrayGatewayUidToCheckConverging[] = $gatewayData["GAT_UID"];
                        break;
                }
            }

            $arrayGatewayUid[$gatewayData["GAT_UID"]] = 1;

            $diagram["gateways"][$i] = $gatewayData;
            $whiteList[] = $gatewayData["GAT_UID"];
        }

        $gateways = $bwp->getGateways();

        // looking for removed elements
        foreach ($gateways as $gatewayData) {
            if (! in_array($gatewayData["GAT_UID"], $whiteList)) {
                $bwp->removeGateway($gatewayData["GAT_UID"]);
            }
        }

        /*
         * Diagram's Events Handling
         */
        $whiteList = array();
        foreach ($diagram["events"] as $i => $eventData) {
            $eventData = array_change_key_case($eventData, CASE_UPPER);

            unset($eventData["_EXTENDED"]);

            if (array_key_exists("EVN_CANCEL_ACTIVITY", $eventData)) {
                $eventData["EVN_CANCEL_ACTIVITY"] = $eventData["EVN_CANCEL_ACTIVITY"] ? 1 : 0;
            }

            if (array_key_exists("EVN_WAIT_FOR_COMPLETION", $eventData)) {
                $eventData["EVN_WAIT_FOR_COMPLETION"] = $eventData["EVN_WAIT_FOR_COMPLETION"] ? 1 : 0;
            }

            $event = $bwp->getEvent($eventData["EVN_UID"]);

            if ($event["BOU_CONTAINER"] != $eventData["BOU_CONTAINER"]) {
                $event = null;
            }

            if ($forceInsert || is_null($event)) {
                if ($generateUid) {
                    //Generate and update UID
                    $eventData = $bwp->updateBoundByArrayUid($eventData, $result);

                    $uidOld = $eventData["EVN_UID"];
                    $eventData["EVN_UID"] = Util\Common::generateUID();

                    $result[] = array(
                        "object"  => "event",
                        "old_uid" => $uidOld,
                        "new_uid" => $eventData["EVN_UID"]
                    );
                }

                $bwp->addEvent($eventData);
            } elseif (! $bwp->isEquals($event, $eventData)) {
                $bwp->updateEvent($eventData["EVN_UID"], $eventData);
            } else {
                Util\Logger::log("Update Event ({$eventData["EVN_UID"]}) Skipped - No changes required");
            }

            $diagram["events"][$i] = $eventData;
            $whiteList[] = $eventData["EVN_UID"];
        }

        $events = $bwp->getEvents();

        // looking for removed elements
        foreach ($events as $eventData) {
            if (! in_array($eventData["EVN_UID"], $whiteList)) {
                // If it is not in the white list, then remove them
                $bwp->removeEvent($eventData["EVN_UID"]);
            }
        }

        /*
         * Diagram's Data Handling
         */
        $whiteList = array();
        foreach ($diagram["data"] as $i => $dataObjectData) {
            $dataObjectData = array_change_key_case($dataObjectData, CASE_UPPER);
            unset($dataObjectData["_EXTENDED"]);

            $dataObject = $bwp->getData($dataObjectData["DAT_UID"]);

            if ($dataObject["BOU_CONTAINER"] != $dataObjectData["BOU_CONTAINER"]) {
                $dataObject = null;
            }

            if ($forceInsert || is_null($dataObject)) {
                if ($generateUid) {
                    //Generate and update UID
                    $dataObjectData = $bwp->updateBoundByArrayUid($dataObjectData, $result);

                    $uidOld = $dataObjectData["DAT_UID"];
                    $dataObjectData["DAT_UID"] = Util\Common::generateUID();

                    $result[] = array(
                        "object"  => "data",
                        "old_uid" => $uidOld,
                        "new_uid" => $dataObjectData["DAT_UID"]
                    );
                }

                $bwp->addData($dataObjectData);
            } elseif (! $bwp->isEquals($dataObject, $dataObjectData)) {
                $bwp->updateData($dataObjectData["DAT_UID"], $dataObjectData);
            } else {
                Util\Logger::log("Update Data ({$dataObjectData["DAT_UID"]}) Skipped - No changes required");
            }

            $diagram["data"][$i] = $dataObjectData;
            $whiteList[] = $dataObjectData["DAT_UID"];
        }

        $dataCollection = $bwp->getDataCollection();

        // looking for removed elements
        foreach ($dataCollection as $dataObjectData) {
            if (! in_array($dataObjectData["DAT_UID"], $whiteList)) {
                // If it is not in the white list, then remove them
                $bwp->removeData($dataObjectData["DAT_UID"]);
            }
        }

        /*
         * Diagram's Participant Handling
         */
        $whiteList = array();
        foreach ($diagram["participants"] as $i => $participantData) {
            $participantData = array_change_key_case($participantData, CASE_UPPER);
            unset($participantData["_EXTENDED"]);

            $participant = $bwp->getParticipant($participantData["PAR_UID"]);

            if ($participant["BOU_CONTAINER"] != $participantData["BOU_CONTAINER"]) {
                $participant = null;
            }

            if ($forceInsert || is_null($participant)) {
                if ($generateUid) {
                    //Generate and update UID
                    $participantData = $bwp->updateBoundByArrayUid($participantData, $result);

                    $uidOld = $participantData["PAR_UID"];
                    $participantData["PAR_UID"] = Util\Common::generateUID();

                    $result[] = array(
                        "object"  => "participant",
                        "old_uid" => $uidOld,
                        "new_uid" => $participantData["PAR_UID"]
                    );
                }

                $bwp->addParticipant($participantData);
            } elseif (! $bwp->isEquals($participant, $participantData)) {
                $bwp->updateParticipant($participantData["PAR_UID"], $participantData);
            } else {
                Util\Logger::log("Update Participant ({$participantData["PAR_UID"]}) Skipped - No changes required");
            }

            $diagram["participants"][$i] = $participantData;
            $whiteList[] = $participantData["PAR_UID"];
        }

        $dataCollection = $bwp->getParticipants();

        // looking for removed elements
        foreach ($dataCollection as $participantData) {
            if (! in_array($participantData["PAR_UID"], $whiteList)) {
                // If it is not in the white list, then remove them
                $bwp->removeParticipant($participantData["PAR_UID"]);
            }
        }

        /*
         * Diagram's Flows Handling
         */
        $arrayGatewayGatDefaultFlow = array();

        $whiteList = array();

        foreach ($diagram["flows"] as $i => $flowData) {
            $flowData = array_change_key_case($flowData, CASE_UPPER);

            // if it is a new flow record
            if ($forceInsert || ($generateUid && !\BpmnFlow::exists($flowData["FLO_UID"]))) {
                $uidOld = $flowData["FLO_UID"];
                $flowData["FLO_UID"] = Util\Common::generateUID();

                $result[] = array(
                    "object" => "flow",
                    "old_uid" => $uidOld,
                    "new_uid" => $flowData["FLO_UID"]
                );

                $mappedUid = self::mapUid($flowData["FLO_ELEMENT_ORIGIN"], $result);

                if ($mappedUid !== false) {
                    $flowData["FLO_ELEMENT_ORIGIN"] = $mappedUid;
                }

                $mappedUid = self::mapUid($flowData["FLO_ELEMENT_DEST"], $result);

                if ($mappedUid !== false) {
                    $flowData["FLO_ELEMENT_DEST"] = $mappedUid;
                }
            }

            //Update UIDs
            foreach ($result as $value) {
                if ($flowData["FLO_ELEMENT_ORIGIN"] == $value["old_uid"]) {
                    $flowData["FLO_ELEMENT_ORIGIN"] = $value["new_uid"];
                }

                if ($flowData["FLO_ELEMENT_DEST"] == $value["old_uid"]) {
                    $flowData["FLO_ELEMENT_DEST"] = $value["new_uid"];
                }
            }

            //Update condition
            if ($flowData["FLO_ELEMENT_ORIGIN_TYPE"] == "bpmnGateway" && in_array($flowData["FLO_ELEMENT_ORIGIN"], $arrayGatewayParallelUid)) {
                $flowData["FLO_CONDITION"] = "";
            }

            //Add element to array Gateway default flow
            if ($flowData["FLO_TYPE"] == "DEFAULT" && isset($arrayGatewayUid[$flowData["FLO_ELEMENT_ORIGIN"]])) {
                $arrayGatewayGatDefaultFlow[$flowData["FLO_ELEMENT_ORIGIN"]] = $flowData["FLO_UID"];
            }

            $diagram["flows"][$i] = $flowData;
            $whiteList[] = $flowData["FLO_UID"];
        }

        foreach ($diagram["flows"] as $flowData) {
            $flow = $bwp->getFlow($flowData["FLO_UID"]);
            if ($forceInsert || is_null($flow)) {
                $bwp->addFlow($flowData);
            } elseif (! $bwp->isEquals($flow, $flowData)) {
                $bwp->updateFlow($flowData["FLO_UID"], $flowData, $diagram["flows"]);
            } else {
                Util\Logger::log("Update Flow ({$flowData["FLO_UID"]}) Skipped - No changes required");
            }
        }

        $flows = $bwp->getFlows();

        // looking for removed elements
        foreach ($flows as $flowData) {
            if (! in_array($flowData["FLO_UID"], $whiteList)) {
                $bwp->removeFlow($flowData["FLO_UID"]);
            }
        }

        //Update BPMN_GATEWAY.GAT_DIRECTION
        foreach ($arrayGatewayUidToCheckConverging as $value) {
            $arrayGatewayData = $bwp->getGateway($value);

            if (!is_null($arrayGatewayData)) {
                $arrayFlow = \BpmnFlow::findAllBy(array(
                    \BpmnFlowPeer::FLO_TYPE              => array("MESSAGE", \Criteria::NOT_EQUAL),
                    \BpmnFlowPeer::FLO_ELEMENT_DEST      => $arrayGatewayData["GAT_UID"],
                    \BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE => "bpmnGateway"
                ));

                if (count($arrayFlow) > 1) {
                    $bwp->updateGateway($arrayGatewayData["GAT_UID"], array("GAT_DIRECTION" => "CONVERGING"));
                }
            }
        }

        //Update BPMN_GATEWAY.GAT_DEFAULT_FLOW
        foreach ($arrayGatewayGatDefaultFlow as $key => $value) {
            $bwp->updateGateway($key, array("GAT_DEFAULT_FLOW" => $value));
        }

        //Map Bpmn-Flows to Workflow-Routes
        $bwp->mapBpmnFlowsToWorkflowRoutes();

        //Return
        return $result;
    }
コード例 #3
0
ファイル: Variable.php プロジェクト: emildev35/processmaker
 /**
  * Create Variable
  *
  * @param string $messageUid Unique id of Project
  * @param array  $arrayData  Data
  *
  * return array Return data of the new Message created
  */
 public function create($messageTypeUid, array $arrayData)
 {
     try {
         //Verify data
         $validator = new \ProcessMaker\BusinessModel\Validator();
         $messageType = new \ProcessMaker\BusinessModel\MessageType();
         $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
         $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
         //Set data
         $arrayData = array_change_key_case($arrayData, CASE_UPPER);
         unset($arrayData["MSGTV_UID"]);
         unset($arrayData["MSGT_UID"]);
         //Verify data
         $messageType->throwExceptionIfNotExistsMessageType($messageTypeUid, $this->arrayFieldNameForException["messageTypeUid"]);
         $this->throwExceptionIfDataIsInvalid("", $messageTypeUid, $arrayData);
         //Create
         $cnn = \Propel::getConnection("workflow");
         try {
             $messageTypeVariable = new \MessageTypeVariable();
             $messageTypeVariable->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
             $messageTypeVariableUid = \ProcessMaker\Util\Common::generateUID();
             $messageTypeVariable->setMsgtvUid($messageTypeVariableUid);
             $messageTypeVariable->setMsgtUid($messageTypeUid);
             if ($messageTypeVariable->validate()) {
                 $cnn->begin();
                 $result = $messageTypeVariable->save();
                 $cnn->commit();
                 //Return
                 return $this->getMessageTypeVariable($messageTypeVariableUid);
             } else {
                 $msg = "";
                 foreach ($messageTypeVariable->getValidationFailures() as $validationFailure) {
                     $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage();
                 }
                 throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : ""));
             }
         } catch (\Exception $e) {
             $cnn->rollback();
             throw $e;
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #4
0
ファイル: Project.php プロジェクト: hpx2206/processmaker-1
    /**
     * @url GET /:prj_uid/export
     *
     * @param string $prj_uid {@min 32}{@max 32}
     */
    public function export($prj_uid)
    {
        $exporter = new \ProcessMaker\Exporter\XmlExporter($prj_uid);
        $getProjectName = $exporter->truncateName($exporter->getProjectName(),false);

        $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP;
        $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1;
        $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx");

        $exporter->setMetadata("export_version", $version);
        $outputFilename = $outputDir.$exporter->saveExport($outputFilename);

        $httpStream = new \ProcessMaker\Util\IO\HttpStream();
        $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION);

        $httpStream->loadFromFile($outputFilename);
        $httpStream->setHeader("Content-Type", "application/xml; charset=UTF-8");
        $httpStream->send();
    }
コード例 #5
0
ファイル: Importer.php プロジェクト: hpx2206/processmaker-1
    /**
     * Set source from Global Http Request resource
     * @param $varName
     * @throws \Exception
     */
    public function setSourceFromGlobals($varName)
    {
        if (! array_key_exists($varName, $_FILES)) {
            throw new \Exception(\G::LoadTranslation("ID_IMPORTER_COULD_NOT_FIND_SPECIFIED_SOURCE_IN_PHP_GLOBALS", array($varName)));
        }

        $data = $_FILES[$varName];

        if ($data["error"] != 0) {
            throw new \Exception(\G::LoadTranslation("ID_IMPORTER_ERROR_WHILE_UPLOADING_FILE", array($data["error"])));
        }

        if (! is_dir($this->getSaveDir())) {
            Util\Common::mk_dir($this->getSaveDir());
        }

        $this->filename = $this->getSaveDir() . $data["name"];

        $oldUmask = umask(0);
        move_uploaded_file($data["tmp_name"], $this->filename);
        @chmod($this->filename, 0755);
        umask($oldUmask);
    }
コード例 #6
0
ファイル: Workflow.php プロジェクト: emildev35/processmaker
 public function getData($processUid)
 {
     try {
         $process = new \Processes();
         //Get data
         $workflowData = (array) $process->getWorkflowData($processUid);
         $workflowData["process"]["PRO_DYNAFORMS"] = empty($workflowData["process"]["PRO_DYNAFORMS"]) ? "" : serialize($workflowData["process"]["PRO_DYNAFORMS"]);
         $workflowData["process"] = array($workflowData["process"]);
         $workflowData["processCategory"] = empty($workflowData["processCategory"]) ? array() : array($workflowData["processCategory"]);
         //Get files
         $workflowFile = array();
         //Getting DynaForms
         foreach ($workflowData["dynaforms"] as $dynaform) {
             $dynFile = PATH_DYNAFORM . $dynaform["DYN_FILENAME"] . ".xml";
             $workflowFile["DYNAFORMS"][] = array("filename" => $dynaform["DYN_TITLE"], "filepath" => $dynaform["DYN_FILENAME"] . ".xml", "file_content" => file_get_contents($dynFile));
             $htmlFile = PATH_DYNAFORM . $dynaform["DYN_FILENAME"] . ".html";
             if (file_exists($htmlFile)) {
                 $workflowFile["DYNAFORMS"][] = array("filename" => $dynaform["DYN_FILENAME"] . ".html", "filepath" => $dynaform["DYN_FILENAME"] . ".html", "file_content" => file_get_contents($htmlFile));
             }
         }
         //Get public files to exclude
         $arrayPublicFileToExclude = array("wsClient.php");
         //WebEntry
         $criteria = new \Criteria("workflow");
         $criteria->addSelectColumn(\WebEntryPeer::WE_DATA);
         $criteria->add(\WebEntryPeer::PRO_UID, $processUid, \Criteria::EQUAL);
         $criteria->add(\WebEntryPeer::WE_METHOD, "WS", \Criteria::EQUAL);
         $rsCriteria = \WebEntryPeer::doSelectRS($criteria);
         $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
         while ($rsCriteria->next()) {
             $row = $rsCriteria->getRow();
             $arrayPublicFileToExclude[] = $row["WE_DATA"];
             $arrayPublicFileToExclude[] = preg_replace("/^(.+)\\.php\$/", "\$1Post.php", $row["WE_DATA"]);
         }
         //Get templates and public files
         $workspaceTargetDirs = array("TEMPLATES" => "mailTemplates", "PUBLIC" => "public");
         $workspaceDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP;
         foreach ($workspaceTargetDirs as $target => $workspaceTargetDir) {
             $templatesDir = $workspaceDir . $workspaceTargetDir . PATH_SEP . $processUid;
             $templatesFiles = Util\Common::rglob("{$templatesDir}/*", 0, true);
             foreach ($templatesFiles as $templatesFile) {
                 if (is_dir($templatesFile)) {
                     continue;
                 }
                 $filename = basename($templatesFile);
                 if ($target == "PUBLIC" && in_array($filename, $arrayPublicFileToExclude)) {
                     continue;
                 }
                 $workflowFile[$target][] = array("filename" => $filename, "filepath" => $processUid . PATH_SEP . $filename, "file_content" => file_get_contents($templatesFile));
             }
         }
         //Return
         self::log("Getting Workflow data Success!");
         return array($workflowData, $workflowFile);
     } catch (\Exception $e) {
         self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
         throw $e;
     }
 }
コード例 #7
0
ファイル: Dynaform.php プロジェクト: emildev35/processmaker
 /**
  *
  *
  * Creates a Dynaform based on a PMTable
  *
  * @name createFromPMTable
  * @author gustavo cruz gustavo[at]colosa[dot]com
  * @param array $aData Fields with :
  * $aData['DYN_UID'] the dynaform id
  * $aData['USR_UID'] the userid
  * string $pmTableUid uid of the PMTable
  *
  */
 public function createFromPMTable($aData, $pmTableUid)
 {
     $this->create($aData, $pmTableUid);
     $aData['DYN_UID'] = $this->getDynUid();
     //krumo(BasePeer::getFieldnames('Content'));
     $fields = array();
     //$oCriteria = new Criteria('workflow');
     $pmTable = AdditionalTablesPeer::retrieveByPK($pmTableUid);
     $addTabName = $pmTable->getAddTabName();
     $keys = '';
     if (isset($aData['FIELDS'])) {
         foreach ($aData['FIELDS'] as $iRow => $row) {
             if ($keys != '') {
                 $keys = $keys . '|' . $row['PRO_VARIABLE'];
             } else {
                 $keys = $row['PRO_VARIABLE'];
             }
         }
     } else {
         $keys = ' ';
     }
     //      $addTabKeys = $pmTable->getAddTabDynavars();
     //      $addTabKeys = unserialize($addTabKeys);
     //      $keys = '';
     //      foreach ( $addTabKeys as $addTabKey ){
     //        if (trim($addTabKey['CASE_VARIABLE'])!=''&&$keys!=''){
     //            $keys = $keys.'|'.$addTabKey['CASE_VARIABLE'];
     //        } else {
     //            $keys = $addTabKey['CASE_VARIABLE'];
     //        }
     //
     //      }
     // Determines the engine to use
     // For a description of a table
     $sDataBase = 'database_' . strtolower(DB_ADAPTER);
     if (G::LoadSystemExist($sDataBase)) {
         G::LoadSystem($sDataBase);
         $oDataBase = new database();
         $sql = $oDataBase->getTableDescription($addTabName);
     } else {
         $sql = 'DESC ' . $addTabName;
     }
     $dbh = Propel::getConnection(AdditionalTablesPeer::DATABASE_NAME);
     $sth = $dbh->createStatement();
     $res = $sth->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
     $file = $aData['PRO_UID'] . '/' . $aData['DYN_UID'];
     $dbc = new DBConnection(PATH_DYNAFORM . $file . '.xml', '', '', '', 'myxml');
     $ses = new DBSession($dbc);
     $fieldXML = new DynaFormField($dbc);
     $pmConnectionName = $addTabName . '_CONNECTION';
     if ($aData['DYN_TYPE'] == 'xmlform') {
         $labels = array();
         $options = array();
         $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => $pmConnectionName, 'TYPE' => 'pmconnection', 'PMTABLE' => $pmTableUid, 'KEYS' => $keys);
         $fieldXML->Save($attributes, $labels, $options);
     }
     $keyRequered = '';
     $countKeys = 0;
     while ($res->next()) {
         if ($res->get('Key') != '') {
             $countKeys++;
         }
         if ($res->get('Extra') == 'auto_increment') {
             $keyRequered .= $res->get('Field');
         }
     }
     $dbh = Propel::getConnection(AdditionalTablesPeer::DATABASE_NAME);
     $sth = $dbh->createStatement();
     $res = $sth->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
     while ($res->next()) {
         // if(strtoupper($res->get('Null'))=='NO') {
         if (strtoupper($res->get($oDataBase->getFieldNull())) == 'NO') {
             if ($countKeys == 1 && $res->get('Field') == $keyRequered) {
                 $required = '0';
             } else {
                 $required = '1';
             }
         } else {
             $required = '0';
         }
         $fieldName = $res->get('Field');
         $defaultValue = $res->get('Default');
         $labels = array(SYS_LANG => $fieldName);
         $options = array();
         $type = explode('(', $res->get('Type'));
         switch ($type[0]) {
             case 'text':
                 $type = 'textarea';
                 break;
             case 'date':
                 $type = 'date';
                 break;
             default:
                 $type = 'text';
                 break;
         }
         if ($aData['DYN_TYPE'] == 'xmlform') {
             $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => $fieldName, 'TYPE' => $type, 'PMCONNECTION' => $pmConnectionName, 'PMFIELD' => $fieldName, 'REQUIRED' => $required, 'DEFAULTVALUE' => $defaultValue);
         } else {
             $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => $fieldName, 'TYPE' => $type, 'REQUIRED' => $required, 'DEFAULTVALUE' => $defaultValue);
         }
         $fieldXML->Save($attributes, $labels, $options);
     }
     $labels = array(SYS_LANG => 'Submit');
     $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => 'SUBMIT', 'TYPE' => 'submit');
     $fieldXML->Save($attributes, $labels, $options);
     //update content if version is 2
     if ($this->getDynVersion() === 2) {
         $items = array();
         $variables = array();
         $res = $sth->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
         while ($res->next()) {
             //data type
             $type = "text";
             $dataType = explode('(', $res->get('Type'));
             error_log(print_r($dataType, true));
             switch ($dataType[0]) {
                 case 'bigint':
                     $type = 'text';
                     $dataType = 'integer';
                     break;
                 case 'int':
                     $type = 'text';
                     $dataType = 'integer';
                     break;
                 case 'smallint':
                     $type = 'text';
                     $dataType = 'integer';
                     break;
                 case 'tinyint':
                     $type = 'text';
                     $dataType = 'integer';
                     break;
                 case 'decimal':
                     $type = 'text';
                     $dataType = 'float';
                     break;
                 case 'double':
                     $type = 'text';
                     $dataType = 'float';
                     break;
                 case 'float':
                     $type = 'text';
                     $dataType = 'float';
                     break;
                 case 'datetime':
                     $type = 'datetime';
                     $dataType = 'datetime';
                     break;
                 case 'date':
                     $type = 'datetime';
                     $dataType = 'datetime';
                     break;
                 case 'time':
                     $type = 'datetime';
                     $dataType = 'datetime';
                     break;
                 case 'char':
                     $type = 'text';
                     $dataType = 'string';
                     break;
                 case 'varchar':
                     $type = 'text';
                     $dataType = 'string';
                     break;
                 case 'mediumtext':
                     $type = 'textarea';
                     $dataType = 'string';
                     break;
                 default:
                     $type = "text";
                     $dataType = 'string';
                     break;
             }
             //variables
             $arrayData = array("var_name" => $res->get('Field'), "var_label" => $res->get('Field'), "var_field_type" => $dataType, "var_field_size" => 10, "var_null" => 1, "var_dbconnection" => "none", "var_sql" => "", "var_options_control" => "", "var_default" => "", "var_accepted_values" => array());
             $objVariable = new \ProcessMaker\BusinessModel\Variable();
             try {
                 $objVariable->existsName($this->getProUid(), $res->get('Field'));
                 $variable = $objVariable->create($this->getProUid(), $arrayData);
             } catch (\Exception $e) {
                 $data = $objVariable->getVariables($this->getProUid());
                 foreach ($data as $datavariable) {
                     if ($datavariable["var_name"] === $res->get('Field')) {
                         $variable = $datavariable;
                         break;
                     }
                 }
             }
             array_push($variables, $variable);
             array_push($items, array(array("type" => $type, "dataType" => $dataType, "id" => $res->get('Field'), "name" => $res->get('Field'), "label" => $res->get('Field'), "hint" => "", "required" => false, "defaultValue" => "", "dependentFields" => array(), "textTransform" => "none", "validate" => "any", "mask" => "", "maxLength" => 1000, "formula" => "", "mode" => "parent", "var_uid" => $variable["var_uid"], "var_name" => $variable["var_name"], "colSpan" => 12)));
         }
         //submit button
         array_push($items, array(array("type" => "submit", "id" => "FormDesigner-" . \ProcessMaker\Util\Common::generateUID(), "name" => "submit", "label" => "submit", "colSpan" => 12)));
         $json = array("name" => $this->getDynTitle(), "description" => $this->getDynDescription(), "items" => array(array("type" => "form", "id" => $this->getDynUid(), "name" => $this->getDynTitle(), "description" => $this->getDynDescription(), "mode" => "edit", "script" => "", "items" => $items, "variables" => $variables)));
         $aData = $this->Load($this->getDynUid());
         $aData["DYN_CONTENT"] = G::json_encode($json);
         $this->update($aData);
     }
 }
コード例 #8
0
ファイル: TimerEvent.php プロジェクト: emildev35/processmaker
 /**
  * Single create Timer-Event
  *
  * @param string $projectUid Unique id of Project
  * @param array  $arrayData  Data
  *
  * return string Return unique id of Timer-Event
  */
 public function singleCreate($projectUid, array $arrayData)
 {
     try {
         $cnn = \Propel::getConnection("workflow");
         try {
             $timerEvent = new \TimerEvent();
             $timerEventUid = \ProcessMaker\Util\Common::generateUID();
             $timerEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
             $timerEvent->setTmrevnUid($timerEventUid);
             $timerEvent->setPrjUid($projectUid);
             if ($timerEvent->validate()) {
                 $cnn->begin();
                 $result = $timerEvent->save();
                 $cnn->commit();
                 //Return
                 return $timerEventUid;
             } else {
                 $msg = "";
                 foreach ($timerEvent->getValidationFailures() as $validationFailure) {
                     $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage();
                 }
                 throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : ""));
             }
         } catch (\Exception $e) {
             $cnn->rollback();
             throw $e;
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #9
0
    /**
     * Create/Update CaseScheduler
     *
     * @param string $caseSchedulerUid      Unique id of CaseScheduler
     * @param string $projectUid            Unique id of Project
     * @param string $userUidCreatorUpdater Unique id of creator/updater User
     * @param array  $arrayData             Data
     * @param array  $arrayDataPlugin       Data plugin
     *
     * return void
     */
    public function createUpdate($caseSchedulerUid, $projectUid, $userUidCreatorUpdater, array $arrayData, array $arrayDataPlugin = array())
    {
        try {
            //Set variables
            $flagInsert = ($caseSchedulerUid == "")? true : false;
            $option = ($flagInsert)? "INS" : "UPD";

            //Set data
            if ($flagInsert) {
                $caseSchedulerUid = \ProcessMaker\Util\Common::generateUID();
            }

            foreach ($arrayData as $key => $value) {
                if (is_array($value)) {
                    foreach ($value as $key2 => $value2) {
                        $arrayData[$key][$key2] = trim($value2);
                    }
                } else {
                    $arrayData[$key] = trim($value);
                }
            }

            $arrayCaseSchedulerData = array();
            $arrayCaseSchedulerData["SCH_UID"]  = $caseSchedulerUid;
            $arrayCaseSchedulerData["SCH_NAME"] = $arrayData["SCH_NAME"];
            $arrayCaseSchedulerData["PRO_UID"]  = $projectUid;
            $arrayCaseSchedulerData["TAS_UID"]  = $arrayData["TAS_UID"];

            $arrayCaseSchedulerData["SCH_DEL_USER_UID"] = $arrayData["SCH_USER_UID"];
            $arrayCaseSchedulerData["SCH_DEL_USER_NAME"] = $arrayData["SCH_USER_NAME"];

            switch ($option) {
                case "INS":
                    $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);

                    $arrayCaseSchedulerData["SCH_STATE"] = "ACTIVE";
                    $arrayCaseSchedulerData["SCH_LAST_STATE"] = "CREATED";

                    $sDateTmp = ($arrayData["SCH_START_DATE"] != "")? $arrayData["SCH_START_DATE"] : date("Y-m-d");
                    break;
                case "UPD":
                    if ($arrayData["SCH_USER_PASSWORD"] != "DefaultPM") {
                        $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);
                    }

                    $sDateTmp = $arrayData["SCH_START_DATE"];
                    break;
            }

            $caseSchedulerOption = (int)($arrayData["SCH_OPTION"]);

            $arrayCaseSchedulerData["USR_UID"] = $userUidCreatorUpdater;
            $arrayCaseSchedulerData["SCH_OPTION"] = $caseSchedulerOption;
            $arrayCaseSchedulerData["SCH_START_TIME"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));
            $arrayCaseSchedulerData["SCH_START_DATE"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));

            $sValue = "";
            $sDaysPerformTask = "";
            $sWeeks = "";
            $sMonths = "";
            $sStartDay = "";

            switch ($option) {
                case "INS":
                    $arrayCaseSchedulerData["SCH_START_DAY"] = "";
                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = "";
                    $arrayCaseSchedulerData["SCH_REPEAT_UNTIL"] = "";
                    $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = "";
                    break;
                case "UPD":
                    break;
            }

            switch ($caseSchedulerOption) {
                case 1:
                    //Option 1
                    $sValue = $arrayData["SCH_DAYS_PERFORM_TASK"];

                    switch ($sValue) {
                        case "1":
                            $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|1";
                            break;
                        case "2":
                            $arrayCaseSchedulerData["SCH_OPTION"] = "2";
                            $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = "1";
                            $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = "1|2|3|4|5|";
                            break;
                        case "3":
                            //Every [n] Days
                            $sDaysPerformTask = $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
                            $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|" . $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
                            break;
                    }
                    break;
                case 2:
                    //If the option is zero, set by default 1
                    $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = (empty($arrayData["SCH_EVERY_DAYS"]))? 1 : $arrayData["SCH_EVERY_DAYS"];

                    $sWeeks = "";

                    if (!empty($arrayData["SCH_WEEK_DAYS"])) {
                        $aWeekDays = $arrayData["SCH_WEEK_DAYS"];

                        foreach ($aWeekDays as $value) {
                            $sWeeks = $sWeeks . $value . "|";
                        }
                    }

                    if (!empty($arrayData["SCH_WEEK_DAYS_2"])) {
                        $aWeekDays2 = $arrayData["SCH_WEEK_DAYS_2"];

                        foreach ($aWeekDays2 as $value) {
                            $sWeeks = $sWeeks . $value . "|";
                        }
                    }

                    $sStartTime = $arrayData["SCH_START_TIME"];
                    $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = $sWeeks;
                    break;
                case 3:
                    $nStartDay = $arrayData["SCH_START_DAY"];

                    if ($nStartDay == 1) {
                        $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_1"];
                    } else {
                        $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_2_WEEKS"] . "|" . $arrayData["SCH_START_DAY_OPT_2_DAYS_WEEK"];
                    }

                    $sMonths = "";

                    if (!empty($arrayData["SCH_MONTHS"])) {
                        $aMonths = $arrayData["SCH_MONTHS"];

                        foreach ($aMonths as $value) {
                            $sMonths = $sMonths . $value . "|";
                        }
                    }

                    if (!empty($arrayData["SCH_MONTHS_2"])) {
                        $aMonths2 = $arrayData["SCH_MONTHS_2"];

                        foreach ($aMonths2 as $value) {
                            $sMonths = $sMonths . $value . "|";
                        }
                    }

                    if (!empty($arrayData["SCH_MONTHS_3"])) {
                        $aMonths3 = $arrayData["SCH_MONTHS_3"];

                        foreach ($aMonths3 as $value) {
                            $sMonths = $sMonths . $value . "|";
                        }
                    }

                    $arrayCaseSchedulerData["SCH_MONTHS"] = $sMonths;
                    $sStartDay = $arrayCaseSchedulerData["SCH_START_DAY"];
                    $sValue = $nStartDay;
                    break;
            }

            $caseScheduler = new \CaseScheduler();

            switch ($option) {
                case "INS":
                    break;
                case "UPD":
                    $arrayDataAux = $caseScheduler->load($caseSchedulerUid);

                    if ($arrayData["SCH_END_DATE"] != "") {
                        $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
                    }

                    //If the start date has changed then recalculate the next run time
                    $recalculateDate = ($arrayData["SCH_START_DATE"] == $arrayData["PREV_SCH_START_DATE"])? false : true;
                    $recalculateTime = (date("H:i:s", strtotime($arrayData["SCH_START_TIME"])) == date("H:i:s", strtotime($arrayData["PREV_SCH_START_TIME"])))? false : true;
                    break;
            }

            $nActualTime = $arrayData["SCH_START_TIME"];

            if ($caseSchedulerOption != 1 && $caseSchedulerOption != 4 && $caseSchedulerOption != 5) {
                if ($sStartDay == "") {
                    $sStartDay = date("Y-m-d");
                }

                $dCurrentDay = (int)(date("d"));
                $dCurrentMonth = (int)(date("m"));

                $aStartDay = explode("|", $arrayCaseSchedulerData["SCH_START_DAY"]);

                if ($caseSchedulerOption == 3 && $aStartDay[0] == "1") {
                    $monthsArray = explode("|", $sMonths);

                    foreach ($monthsArray as $row) {
                        switch ($option) {
                            case "INS":
                                if ((int)($row) == $dCurrentMonth && $dCurrentDay <= (int)($aStartDay[1])) {
                                    $startTime = $arrayData["SCH_START_TIME"] . ":00";
                                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime;
                                    break;
                                } else {
                                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                                }
                                break;
                            case "UPD":
                                if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) {
                                    $startTime = $arrayData["SCH_START_TIME"] . ":00";

                                    if ($recalculateDate) {
                                        $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime;
                                    } else {
                                        if ($recalculateTime) {
                                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                                        }
                                    }
                                    break;
                                } else {
                                    if ($recalculateDate) {
                                        $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                                    } else {
                                        if ($recalculateTime) {
                                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                                        }
                                    }
                                }
                                break;
                        }
                    }
                } else {
                    switch ($option) {
                        case "INS":
                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                            break;
                        case "UPD":
                            if ($recalculateDate) {
                                $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false);
                            } else {
                                if ($recalculateTime) {
                                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                                }
                            }
                            break;
                    }
                }
            } else {
                if ($caseSchedulerOption == 4) {
                    $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                }

                switch ($option) {
                    case "INS":
                        $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                        break;
                    case "UPD":
                        if ($recalculateDate) {
                            $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                        } else {
                            if ($recalculateTime) {
                                $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00";
                            }
                        }
                        break;
                }

                if ($caseSchedulerOption == 5) {
                    switch ($option) {
                        case "INS":
                            $arrayCaseSchedulerData["SCH_START_TIME"] = time();
                            $arrayCaseSchedulerData["SCH_START_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];

                            $date = $arrayCaseSchedulerData["SCH_START_TIME"];
                            break;
                        case "UPD":
                            $date = $caseScheduler->getSchLastRunTime();

                            if (is_null($date)) {
                                $date = $caseScheduler->getSchStartTime();
                            }

                            $date = strtotime($date);
                            break;
                    }

                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"]  = $arrayData["SCH_REPEAT_EVERY"];
                    $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y-m-d H:i", $date + (((int)($arrayData["SCH_REPEAT_EVERY"])) * 60 * 60));
                }
            }

            switch ($option) {
                case "INS":
                    if ($arrayData["SCH_END_DATE"] != "") {
                        $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
                    }
                    break;
                case "UPD":
                    break;
            }

            if (!empty($arrayData["SCH_REPEAT_TASK_CHK"])) {
                if ($arrayData["SCH_REPEAT_EVERY_OPT"] . "" == "2") {
                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ((int)($arrayData["SCH_REPEAT_EVERY"])) * 60;
                } else {
                    $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = (int)($arrayData["SCH_REPEAT_EVERY"]);
                }
            }

            //Create/Update
            switch ($option) {
                case "INS":
                    if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
                        $arrayCaseSchedulerData["CASE_SH_PLUGIN_UID"] = $arrayData["CASE_SH_PLUGIN_UID"];
                    }

                    $caseScheduler->create($arrayCaseSchedulerData);
                    break;
                case "UPD":
                    $caseScheduler->update($arrayCaseSchedulerData);
                    break;
            }

            //Plugin
            if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
                $oPluginRegistry = &\PMPluginRegistry::getSingleton();
                $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins();

                $params = explode("--", $arrayData["CASE_SH_PLUGIN_UID"]);

                foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPluginDetail) {
                    if ($caseSchedulerPluginDetail->sNamespace == $params[0] && $caseSchedulerPluginDetail->sActionId == $params[1]) {
                        $caseSchedulerSelected = $caseSchedulerPluginDetail;
                    }
                }

                if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) {
                    //Save the form
                    $arrayDataPlugin["SCH_UID"] = $arrayCaseSchedulerData["SCH_UID"];
                    $oPluginRegistry->executeMethod($caseSchedulerPluginDetail->sNamespace, $caseSchedulerPluginDetail->sActionSave, $arrayDataPlugin);
                }
            }
        } catch (\Exception $e) {
            throw $e;
        }
    }
コード例 #10
0
ファイル: Bpmn.php プロジェクト: hpx2206/processmaker-1
    public function addLaneset($data)
    {
        // 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();
    }
コード例 #11
0
 /**
  * Create Category
  *
  * @param array $arrayData Data
  *
  * return array Return data of the new Category created
  */
 public function create(array $arrayData)
 {
     try {
         //Verify data
         $process = new \ProcessMaker\BusinessModel\Process();
         $validator = new \ProcessMaker\BusinessModel\Validator();
         $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
         //Set data
         $arrayData = array_change_key_case($arrayData, CASE_UPPER);
         unset($arrayData["CAT_UID"]);
         //Verify data
         $this->throwExceptionIfDataIsInvalid("", $arrayData);
         //Create
         $category = new \ProcessCategory();
         $categoryUid = \ProcessMaker\Util\Common::generateUID();
         $category->setNew(true);
         $category->setCategoryUid($categoryUid);
         $category->setCategoryName($arrayData["CAT_NAME"]);
         $result = $category->save();
         //Return
         return $this->getCategory($categoryUid);
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #12
0
 /**
  * Create Email Server by data
  *
  * @param array $arrayData Data
  *
  * return array Return data of the new Email Server created
  */
 public function create2(array $arrayData)
 {
     try {
         //Create
         $cnn = \Propel::getConnection("workflow");
         try {
             $emailServer = new \EmailServer();
             $emailServer->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
             $emailServerUid = \ProcessMaker\Util\Common::generateUID();
             $emailServer->setMessUid($emailServerUid);
             if ($emailServer->validate()) {
                 $cnn->begin();
                 $result = $emailServer->save();
                 $cnn->commit();
                 if (isset($arrayData["MESS_DEFAULT"]) && (int) $arrayData["MESS_DEFAULT"] == 1) {
                     $this->setEmailServerDefaultByUid($emailServerUid);
                 }
                 //Return
                 return $this->getEmailServer($emailServerUid);
             } else {
                 $msg = "";
                 foreach ($emailServer->getValidationFailures() as $validationFailure) {
                     $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage();
                 }
                 throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : ""));
             }
         } catch (\Exception $e) {
             $cnn->rollback();
             throw $e;
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #13
0
ファイル: Variable.php プロジェクト: emildev35/processmaker
 /**
  * Create Variable for a Process
  *
  * @param string $processUid Unique id of Process
  * @param array  $arrayData  Data
  *
  * return array Return data of the new Variable created
  */
 public function create($processUid, array $arrayData)
 {
     try {
         //Verify data
         Validator::proUid($processUid, '$prj_uid');
         $arrayData = array_change_key_case($arrayData, CASE_UPPER);
         $this->existsName($processUid, $arrayData["VAR_NAME"], "");
         $this->throwExceptionFieldDefinition($arrayData);
         //Create
         $cnn = \Propel::getConnection("workflow");
         try {
             $variable = new \ProcessVariables();
             $sPkProcessVariables = \ProcessMaker\Util\Common::generateUID();
             $variable->setVarUid($sPkProcessVariables);
             $variable->setPrjUid($processUid);
             if ($variable->validate()) {
                 $cnn->begin();
                 if (isset($arrayData["VAR_NAME"])) {
                     $variable->setVarName($arrayData["VAR_NAME"]);
                 } else {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_name')));
                 }
                 if (isset($arrayData["VAR_FIELD_TYPE"])) {
                     $variable->setVarFieldType($arrayData["VAR_FIELD_TYPE"]);
                 } else {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_field_type')));
                 }
                 if (isset($arrayData["VAR_FIELD_SIZE"])) {
                     $variable->setVarFieldSize($arrayData["VAR_FIELD_SIZE"]);
                 }
                 if (isset($arrayData["VAR_LABEL"])) {
                     $variable->setVarLabel($arrayData["VAR_LABEL"]);
                 } else {
                     throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_label')));
                 }
                 if (isset($arrayData["VAR_DBCONNECTION"])) {
                     $variable->setVarDbconnection($arrayData["VAR_DBCONNECTION"]);
                 } else {
                     $variable->setVarDbconnection("");
                 }
                 if (isset($arrayData["VAR_SQL"])) {
                     $variable->setVarSql($arrayData["VAR_SQL"]);
                 } else {
                     $variable->setVarSql("");
                 }
                 if (isset($arrayData["VAR_NULL"])) {
                     $variable->setVarNull($arrayData["VAR_NULL"]);
                 } else {
                     $variable->setVarNull(0);
                 }
                 if (isset($arrayData["VAR_DEFAULT"])) {
                     $variable->setVarDefault($arrayData["VAR_DEFAULT"]);
                 }
                 if (isset($arrayData["VAR_ACCEPTED_VALUES"])) {
                     $encodeAcceptedValues = \G::json_encode($arrayData["VAR_ACCEPTED_VALUES"]);
                     $variable->setVarAcceptedValues($encodeAcceptedValues);
                 }
                 if (isset($arrayData["INP_DOC_UID"])) {
                     $variable->setInpDocUid($arrayData["INP_DOC_UID"]);
                 }
                 $variable->save();
                 $cnn->commit();
             } else {
                 $msg = "";
                 foreach ($variable->getValidationFailures() as $validationFailure) {
                     $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage();
                 }
                 throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . "\n" . $msg);
             }
         } catch (\Exception $e) {
             $cnn->rollback();
             throw $e;
         }
         //Return
         $variable = $this->getVariable($processUid, $sPkProcessVariables);
         return $variable;
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #14
0
 /**
  * @inherits
  */
 public function saveExport($outputFile)
 {
     $parentDir = dirname($outputFile);
     if (!is_dir($parentDir)) {
         Util\Common::mk_dir($parentDir, 0775);
     }
     $outputFile = $this->Truncatename($outputFile);
     file_put_contents($outputFile, $this->export());
     chmod($outputFile, 0755);
     return basename($outputFile);
 }
コード例 #15
0
    /**
     * Create Message-Application for the Case
     *
     * @param string $applicationUid       Unique id of Case
     * @param string $projectUid           Unique id of Project
     * @param string $eventUidThrow        Unique id of Event (throw)
     * @param array  $arrayApplicationData Case data
     *
     * return bool Return true if been created, false otherwise
     */
    public function create($applicationUid, $projectUid, $eventUidThrow, array $arrayApplicationData)
    {
        try {
            $flagCreate = true;

            //Set data
            //Message-Event-Relation - Get unique id of Event (catch)
            $messageEventRelation = new \ProcessMaker\BusinessModel\MessageEventRelation();

            $arrayMessageEventRelationData = $messageEventRelation->getMessageEventRelationWhere(
                array(
                    \MessageEventRelationPeer::PRJ_UID       => $projectUid,
                    \MessageEventRelationPeer::EVN_UID_THROW => $eventUidThrow
                ),
                true
            );

            if (!is_null($arrayMessageEventRelationData)) {
                $eventUidCatch = $arrayMessageEventRelationData["EVN_UID_CATCH"];
            } else {
                $flagCreate = false;
            }

            //Message-Application - Get data ($eventUidThrow)
            $messageEventDefinition = new \ProcessMaker\BusinessModel\MessageEventDefinition();

            if ($messageEventDefinition->existsEvent($projectUid, $eventUidThrow)) {
                $arrayMessageEventDefinitionData = $messageEventDefinition->getMessageEventDefinitionByEvent($projectUid, $eventUidThrow, true);

                $arrayMessageApplicationVariables = $arrayMessageEventDefinitionData["MSGED_VARIABLES"];
                $messageApplicationCorrelation = \G::replaceDataField($arrayMessageEventDefinitionData["MSGED_CORRELATION"], $arrayApplicationData["APP_DATA"]);

                foreach ($arrayMessageApplicationVariables as $key => $value) {
                    $arrayMessageApplicationVariables[$key] = \G::replaceDataField($value, $arrayApplicationData["APP_DATA"]);
                }
            } else {
                $flagCreate = false;
            }

            if (!$flagCreate) {
                //Return
                return false;
            }

            //Create
            $cnn = \Propel::getConnection("workflow");

            try {
                $messageApplication = new \MessageApplication();

                $messageApplicationUid = \ProcessMaker\Util\Common::generateUID();

                $messageApplication->setMsgappUid($messageApplicationUid);
                $messageApplication->setAppUid($applicationUid);
                $messageApplication->setPrjUid($projectUid);
                $messageApplication->setEvnUidThrow($eventUidThrow);
                $messageApplication->setEvnUidCatch($eventUidCatch);
                $messageApplication->setMsgappVariables(serialize($arrayMessageApplicationVariables));
                $messageApplication->setMsgappCorrelation($messageApplicationCorrelation);
                $messageApplication->setMsgappThrowDate("now");

                if ($messageApplication->validate()) {
                    $cnn->begin();

                    $result = $messageApplication->save();

                    $cnn->commit();

                    //Return
                    return true;
                } else {
                    $msg = "";

                    foreach ($messageApplication->getValidationFailures() as $validationFailure) {
                        $msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
                    }

                    throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : ""));
                }
            } catch (\Exception $e) {
                $cnn->rollback();

                throw $e;
            }
        } catch (\Exception $e) {
            throw $e;
        }
    }
コード例 #16
0
ファイル: Importer.php プロジェクト: rrsc/processmaker
    public function saveAs($prj_uid, $prj_name, $prj_description, $prj_category)
    {
        try {
            $exporter = new \ProcessMaker\Exporter\XmlExporter($prj_uid);
            $getProjectName = $exporter->truncateName($exporter->getProjectName(), false);

            $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP;
            $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1;
            $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx");

            $exporter->setMetadata("export_version", $version);
            $outputFilename = $outputDir . $exporter->saveExport($outputFilename);

            $httpStream = new \ProcessMaker\Util\IO\HttpStream();
            $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION);

            $this->setSourceFile($outputFilename);
            $this->prepare();
            $this->importData["tables"]["bpmn"]["project"][0]["prj_name"] = $prj_name;
            $this->importData["tables"]["bpmn"]["project"][0]["prj_description"] = $prj_description;
            $this->importData["tables"]["bpmn"]["diagram"][0]["dia_name"] = $prj_name;
            $this->importData["tables"]["bpmn"]["process"][0]["pro_name"] = $prj_name;
            $this->importData["tables"]["workflow"]["process"][0]["PRO_TITLE"] = $prj_name;
            $this->importData["tables"]["workflow"]["process"][0]["PRO_DESCRIPTION"] = $prj_description;
            $this->importData["tables"]["workflow"]["process"][0]["PRO_CATEGORY"] = $prj_category;
            $this->importData["tables"]["workflow"]["process"][0]["PRO_CATEGORY_LABEL"] = null;
            $this->importData["tables"]["workflow"]["process"][0]["PRO_UPDATE_DATE"] = null;
            $this->importData["tables"]["workflow"]["process"] = $this->importData["tables"]["workflow"]["process"][0];
            return array("prj_uid" => $this->doImport());
        } catch (\Exception $e) {
            return $e->getMessage();
        }
    }
コード例 #17
0
    /**

     * make_site

     *

     * @return array $test

     */

    private function make_site()

    {

        $test = $this->create_site_test();



        if ($test["created"] == true || $this->options["advanced"]["ao_db_drop"] == true) {

            /* Check if the hostname is local (localhost or 127.0.0.1) */

            $islocal = (strcmp(substr($this->options['database']['hostname'], 0, strlen('localhost')), 'localhost') === 0) || (strcmp(substr($this->options['database']['hostname'], 0, strlen('127.0.0.1')), '127.0.0.1') === 0);



            $this->wf_site_name = $wf = $this->options['advanced']['ao_db_wf'];



            $this->rbac_site_name = $rb = $this->options['advanced']['ao_db_rb'];

            $this->report_site_name = $rp = $this->options['advanced']['ao_db_rp'];



            $schema = "schema.sql";

            $values = "insert.sql";



            if ($this->options['advanced']['ao_db_drop'] === true) {

                //Delete workspace directory if exists

                //Drop databases

                $this->run_query("DROP DATABASE IF EXISTS " . $wf, "Drop database $wf");

            }



            $this->run_query("CREATE DATABASE IF NOT EXISTS " . $wf . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", "Create database $wf");



            if ($this->cc_status == 1) {

                $host = ($islocal) ? "localhost" : "%";

                $this->run_query("GRANT ALL PRIVILEGES ON `$wf`.* TO $wf@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", "Grant privileges for user $wf on database $wf");

            }



            /* Dump schema workflow && data  */



            $this->log("Import database schema:\n");

            $myPortA = explode(":", $this->options['database']['hostname']);

            if (count($myPortA) < 2) {

                $myPortA[1] = "3306";

            }

            $myPort = $myPortA[1];

            $this->options['database']['hostname'] = $myPortA[0];



            mysql_select_db($wf, $this->connection_database);

            $pws = PATH_WORKFLOW_MYSQL_DATA . $schema;

            $qws = $this->query_sql_file(PATH_WORKFLOW_MYSQL_DATA . $schema, $this->connection_database);

            $this->log($qws, isset($qws['errors']));

            $qwv = $this->query_sql_file(PATH_WORKFLOW_MYSQL_DATA . $values, $this->connection_database);

            $this->log($qwv, isset($qwv['errors']));



            $http = (G::is_https() == true) ? 'https' : 'http';

            $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en';

            $host = $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != '80' ? ':' . $_SERVER['SERVER_PORT'] : '');

            $workspace = $this->options['name'];



            $endpoint = sprintf(

            		'%s://%s/sys%s/%s/%s/oauth2/grant',

            		$http,

            		$host,

            		$workspace,

            		$lang,

            		SYS_SKIN

            );



            // inserting the outh_client

            $query = ( "INSERT INTO OAUTH_CLIENTS (CLIENT_ID,CLIENT_SECRET,CLIENT_NAME,CLIENT_DESCRIPTION,CLIENT_WEBSITE,REDIRECT_URI,USR_UID ) VALUES

            		   ('x-pm-local-client','179ad45c6ce2cb97cf1029e212046e81','PM Web Designer','ProcessMaker Web Designer App','www.processmaker.com','" . $endpoint . "','00000000000000000000000000000001' )");

            $this->run_query( $query );



            /* Dump schema rbac && data  */

            $pws = PATH_RBAC_MYSQL_DATA . $schema;

            mysql_select_db($rb, $this->connection_database);

            $qrs = $this->query_sql_file(PATH_RBAC_MYSQL_DATA . $schema, $this->connection_database);

            $this->log($qrs, isset($qrs['errors']));

            $qrv = $this->query_sql_file(PATH_RBAC_MYSQL_DATA . $values, $this->connection_database);

            $this->log($qrv, isset($qrv['errors']));



            mysql_select_db($wf, $this->connection_database);



            require_once ("propel/Propel.php");

            require_once ('classes/model/AppCacheView.php');



            $appCache = new AppCacheView();

            $appCache->setPathToAppCacheFiles(PATH_METHODS . 'setup/setupSchemas/');

            $triggers = $appCache->getTriggers("en");

            $this->log("Create 'cases list cache' triggers");

            foreach ($triggers as $triggerName => $trigger) {

                $this->run_query($trigger, "-> Trigger $triggerName");

            }



            $path_site = $this->options['path_data'] . "/sites/" . $this->options['name'] . "/";

            $db_file = $path_site . "db.php";

            @mkdir($path_site, 0777, true);

            @mkdir($path_site . "files/", 0777, true);

            @mkdir($path_site . "mailTemplates/", 0777, true);

            @mkdir($path_site . "public/", 0777, true);

            @mkdir($path_site . "reports/", 0777, true);

            @mkdir($path_site . "xmlForms", 0777, true);



            $db_text = "<?php\n" . "// Processmaker configuration\n" . "define ('DB_ADAPTER', 'mysql' );\n" . "define ('DB_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_NAME', '" . $wf . "' );\n" . "define ('DB_USER', '" . (($this->cc_status == 1) ? $wf : $this->options['database']['username']) . "' );\n" . "define ('DB_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "define ('DB_RBAC_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_RBAC_NAME', '" . $rb . "' );\n" . "define ('DB_RBAC_USER', '" . (($this->cc_status == 1) ? $rb : $this->options['database']['username']) . "' );\n" . "define ('DB_RBAC_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "define ('DB_REPORT_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_REPORT_NAME', '" . $rp . "' );\n" . "define ('DB_REPORT_USER', '" . (($this->cc_status == 1) ? $rp : $this->options['database']['username']) . "' );\n" . "define ('DB_REPORT_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n";

            if (defined('PARTNER_FLAG') || isset($_REQUEST['PARTNER_FLAG'])) {

                $db_text .= "define ('PARTNER_FLAG', " . ((defined('PARTNER_FLAG') && PARTNER_FLAG != '') ? PARTNER_FLAG : ((isset($_REQUEST['PARTNER_FLAG'])) ? $_REQUEST['PARTNER_FLAG']:'false')) . ");\n";

                if (defined('SYSTEM_NAME')) {

                    $db_text .= "  define ('SYSTEM_NAME', '" . SYSTEM_NAME . "');\n";

                }

            }

            $db_text .="?>";

            $fp = @fopen($db_file, "w");

            $this->log("Create: " . $db_file . "  => " . ((!$fp) ? $fp : "OK") . "\n", $fp === false);

            $ff = @fputs($fp, $db_text, strlen($db_text));

            $this->log("Write: " . $db_file . "  => " . ((!$ff) ? $ff : "OK") . "\n", $ff === false);



            fclose($fp);

            $this->setPartner();

            $this->setAdmin();



            $querySql = "INSERT INTO EMAIL_SERVER(MESS_UID, MESS_ENGINE) VALUES('" . \ProcessMaker\Util\Common::generateUID() . "', 'MAIL')";



            $this->run_query($querySql);

        }

        return $test;

    }
コード例 #18
0
ファイル: WebEntry.php プロジェクト: emildev35/processmaker
 /**
  * Create Web Entry for a Process
  *
  * @param string $processUid     Unique id of Process
  * @param string $userUidCreator Unique id of creator User
  * @param array  $arrayData      Data
  *
  * return array Return data of the new Web Entry created
  */
 public function create($processUid, $userUidCreator, array $arrayData)
 {
     try {
         //Verify data
         $process = new \ProcessMaker\BusinessModel\Process();
         $validator = new \ProcessMaker\BusinessModel\Validator();
         $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
         $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
         //Set data
         $arrayData = array_change_key_case($arrayData, CASE_UPPER);
         unset($arrayData["WE_UID"]);
         unset($arrayData["WE_DATA"]);
         //Verify data
         $process->throwExceptionIfNotExistsProcess($processUid, $this->arrayFieldNameForException["processUid"]);
         $this->throwExceptionIfDataIsInvalid("", $processUid, $arrayData);
         //Create
         $cnn = \Propel::getConnection("workflow");
         try {
             $webEntry = new \WebEntry();
             $webEntry->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
             $webEntryUid = \ProcessMaker\Util\Common::generateUID();
             $webEntry->setWeUid($webEntryUid);
             $webEntry->setProUid($processUid);
             $webEntry->setWeCreateUsrUid($userUidCreator);
             $webEntry->setWeCreateDate("now");
             if ($webEntry->validate()) {
                 $cnn->begin();
                 $result = $webEntry->save();
                 $cnn->commit();
                 //Set WE_TITLE
                 if (isset($arrayData["WE_TITLE"])) {
                     $result = \Content::addContent("WE_TITLE", "", $webEntryUid, SYS_LANG, $arrayData["WE_TITLE"]);
                 }
                 if (isset($arrayData["WE_DESCRIPTION"])) {
                     $result = \Content::addContent("WE_DESCRIPTION", "", $webEntryUid, SYS_LANG, $arrayData["WE_DESCRIPTION"]);
                 }
                 //Set WE_DATA
                 $this->setWeData($webEntryUid);
                 //Return
                 return $this->getWebEntry($webEntryUid);
             } else {
                 $msg = "";
                 foreach ($webEntry->getValidationFailures() as $validationFailure) {
                     $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage();
                 }
                 throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : ""));
             }
         } catch (\Exception $e) {
             $cnn->rollback();
             throw $e;
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #19
0
ファイル: installer.php プロジェクト: nhenderson/processmaker
    public function createMSSQLWorkspace ()

    {

        G::LoadSystem('inputfilter');

        $filter = new InputFilter();

        ini_set( 'max_execution_time', '0' );



        $info = new stdClass();

        $info->result = false;

        $info->message = '';



        $db_hostname = trim( $_REQUEST['db_hostname'] );

        $db_hostname = $filter->validateInput($db_hostname);

        $db_port = trim( $_REQUEST['db_port'] );

        $db_port = $filter->validateInput($db_port);

        $db_username = trim( $_REQUEST['db_username'] );

        $db_username = $filter->validateInput($db_username);

        $db_password = trim( $_REQUEST['db_password'] );

        $db_password = $filter->validateInput($db_password);

        $wf = trim( $_REQUEST['wfDatabase'] );

        $rb = trim( $_REQUEST['wfDatabase'] );

        $rp = trim( $_REQUEST['wfDatabase'] );

        $workspace = trim( $_REQUEST['workspace'] );

        $pathConfig = trim( $_REQUEST['pathConfig'] );

        $pathLanguages = trim( $_REQUEST['pathLanguages'] );

        $pathPlugins = trim( $_REQUEST['pathPlugins'] );

        $pathShared = trim( $_REQUEST['pathShared'] );

        $pathXmlforms = trim( $_REQUEST['pathXmlforms'] );

        $adminPassword = trim( $_REQUEST['adminPassword'] );

        $adminUsername = trim( $_REQUEST['adminUsername'] );

        $deleteDB = ($_REQUEST['deleteDB'] == 'true');



        if (substr( $pathShared, - 1 ) != '/') {

            $pathShared .= '/';

        }



        $this->installLog( '-------------------------------------------' );

        $this->installLog( G::LoadTranslation('ID_CREATING_WORKSPACE', SYS_LANG, Array($workspace) ) );



        try {

            $db_host = ($db_port != '' && $db_port != 1433) ? $db_hostname . ':' . $db_port : $db_hostname;

            $db_host = $filter->validateInput($db_host);

            $db_username = $filter->validateInput($db_username);

            $db_password = $filter->validateInput($db_password);

            $this->link = @mssql_connect( $db_host, $db_username, $db_password );

            $this->installLog( G::LoadTranslation('ID_CONNECT_TO_SERVER', SYS_LANG, Array( $db_hostname, $db_port, $db_username )) );



            $this->mssqlQuery( 'USE [master]' );



            // DROP databases wf_workflow, rb_workflow and rp_workflow

            if ($deleteDB) {

                $q = sprintf( "IF EXISTS (SELECT name FROM sys.databases WHERE name='%s' ) DROP DATABASE %s", $wf, $wf );

                $this->mssqlQuery( $q );

            }



            // CREATE databases wf_workflow, rb_workflow and rp_workflow

            $q = sprintf( "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name='%s' ) CREATE DATABASE %s", $wf, $wf );

            $this->mssqlQuery( $q );



            //CREATE users and GRANT Privileges

            $wfPass = G::generate_password( 12 );

            $this->setGrantPrivilegesMSSQL( $wf, $wfPass, $wf );



            //Generate the db.php file and folders

            $path_site = $pathShared . "/sites/" . $workspace . "/";

            $db_file = $path_site . "db.php";

            mkdir( $path_site, 0777, true );

            @mkdir( $path_site . "files/", 0777, true );

            @mkdir( $path_site . "mailTemplates/", 0777, true );

            @mkdir( $path_site . "public/", 0777, true );

            @mkdir( $path_site . "reports/", 0777, true );

            @mkdir( $path_site . "xmlForms", 0777, true );



            $dbText = "<?php\n";

            $dbText .= sprintf( "// Processmaker configuration\n" );

            $dbText .= sprintf( "  define ('DB_ADAPTER',     '%s' );\n", 'mssql' );

            $dbText .= sprintf( "  define ('DB_HOST',        '%s' );\n", $db_host );

            $dbText .= sprintf( "  define ('DB_NAME',        '%s' );\n", $wf );

            $dbText .= sprintf( "  define ('DB_USER',        '%s' );\n", $wf );

            $dbText .= sprintf( "  define ('DB_PASS',        '%s' );\n", $wfPass );

            $dbText .= sprintf( "  define ('DB_RBAC_HOST',   '%s' );\n", $db_host );

            $dbText .= sprintf( "  define ('DB_RBAC_NAME',   '%s' );\n", $wf );

            $dbText .= sprintf( "  define ('DB_RBAC_USER',   '%s' );\n", $wf );

            $dbText .= sprintf( "  define ('DB_RBAC_PASS',   '%s' );\n", $wfPass );

            $dbText .= sprintf( "  define ('DB_REPORT_HOST', '%s' );\n", $db_host );

            $dbText .= sprintf( "  define ('DB_REPORT_NAME', '%s' );\n", $wf );

            $dbText .= sprintf( "  define ('DB_REPORT_USER', '%s' );\n", $wf );

            $dbText .= sprintf( "  define ('DB_REPORT_PASS', '%s' );\n", $wfPass );

            if (defined('PARTNER_FLAG') || isset($_REQUEST['PARTNER_FLAG'])) {

                $dbText .= "\n";

                $dbText .= "  define ('PARTNER_FLAG', " . ((defined('PARTNER_FLAG')) ? PARTNER_FLAG : ((isset($_REQUEST['PARTNER_FLAG'])) ? $_REQUEST['PARTNER_FLAG']:'false')) . ");\n";

                if ($this->systemName != '') {

                    $dbText .= "  define ('SYSTEM_NAME', '" . $this->systemName . "');\n";

                }

            }



            $this->installLog( G::LoadTranslation('ID_CREATING', SYS_LANG, Array($db_file) ));

            file_put_contents( $db_file, $dbText );



            // Generate the databases.php file

            $databases_file = $path_site . 'databases.php';

            $dbData = sprintf( "\$dbAdapter    = '%s';\n", 'mssql' );

            $dbData .= sprintf( "\$dbHost       = '%s';\n", $db_host );

            $dbData .= sprintf( "\$dbName       = '%s';\n", $wf );

            $dbData .= sprintf( "\$dbUser       = '******';\n", $wf );

            $dbData .= sprintf( "\$dbPass       = '******';\n", $wfPass );

            $dbData .= sprintf( "\$dbRbacHost   = '%s';\n", $db_host );

            $dbData .= sprintf( "\$dbRbacName   = '%s';\n", $wf );

            $dbData .= sprintf( "\$dbRbacUser   = '******';\n", $wf );

            $dbData .= sprintf( "\$dbRbacPass   = '******';\n", $wfPass );

            $dbData .= sprintf( "\$dbReportHost = '%s';\n", $db_host );

            $dbData .= sprintf( "\$dbReportName = '%s';\n", $wf );

            $dbData .= sprintf( "\$dbReportUser = '******';\n", $wf );

            $dbData .= sprintf( "\$dbReportPass = '******';\n", $wfPass );

            $databasesText = str_replace( '{dbData}', $dbData, @file_get_contents( PATH_HOME . 'engine/templates/installer/databases.tpl' ) );



            $this->installLog( G::LoadTranslation('ID_CREATING', SYS_LANG, Array($databases_file) ));

            file_put_contents( $databases_file, $databasesText );



            //execute scripts to create and populates databases

            $query = sprintf( "USE %s;", $wf );

            $this->mssqlQuery( $query );



            $this->mssqlFileQuery( PATH_RBAC_HOME . 'engine/data/mssql/schema.sql' );

            $this->mssqlFileQuery( PATH_RBAC_HOME . 'engine/data/mssql/insert.sql' );



            $query = sprintf( "USE %s;", $wf );

            $this->mssqlQuery( $query );

            $this->mssqlFileQuery( PATH_HOME . 'engine/data/mssql/schema.sql' );

            $this->mssqlFileQuery( PATH_HOME . 'engine/data/mssql/insert.sql' );



            // Create the triggers

            if (file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationInsert.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationUpdate.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationUpdate.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationDelete.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerContentUpdate.sql' )) {

                $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationInsert.sql' ) );

                $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationUpdate.sql' ) );

                $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationUpdate.sql' ) );

                $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationDelete.sql' ) );

                $this->mysqlQuery(@file_get_contents(PATH_HOME . "engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql"));

                $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerContentUpdate.sql' ) );

                $this->mssqlQuery( "INSERT INTO CONFIGURATION (

                            CFG_UID,

                            CFG_VALUE

                           )

                           VALUES (

                             'APP_CACHE_VIEW_ENGINE',

                             '" . addslashes( serialize( array ('LANG' => 'en','STATUS' => 'active'

                ) ) ) . "'

                           )" );



                $this->mssqlQuery("INSERT INTO EMAIL_SERVER(MESS_UID, MESS_ENGINE) VALUES('" . \ProcessMaker\Util\Common::generateUID() . "','MAIL')");

            }



            //change admin user

            $query = sprintf( "USE %s;", $wf );

            $this->mssqlQuery( $query );



            $query = sprintf( "UPDATE USERS SET USR_USERNAME = '******', USR_PASSWORD = '******' WHERE USR_UID = '00000000000000000000000000000001' ", $adminUsername, G::encryptOld( $adminPassword ) );

            $this->mssqlQuery( $query );



            $query = sprintf( "USE %s;", $wf );

            $this->mssqlQuery( $query );



            $query = sprintf( "UPDATE RBAC_USERS SET USR_USERNAME = '******', USR_PASSWORD = '******' WHERE USR_UID = '00000000000000000000000000000001' ", $adminUsername, G::encryptOld( $adminPassword ) );

            $this->mssqlQuery( $query );



            // Write the paths_installed.php file (contains all the information configured so far)

            if (! file_exists( FILE_PATHS_INSTALLED )) {

                $sh = G::encryptOld( filemtime( PATH_GULLIVER . '/class.g.php' ) );

                $h = G::encrypt( $db_hostname . $sh . $db_username . $sh . $db_password . '1', $sh );

                $dbText = "<?php\n";

                $dbText .= sprintf( "  define ('PATH_DATA',        '%s' );\n", $pathShared );

                $dbText .= sprintf( "  define ('PATH_C',           '%s' );\n", $pathShared . 'compiled/' );

                $dbText .= sprintf( "  define ('HASH_INSTALLATION', '%s' );\n", $h );

                $dbText .= sprintf( "  define ('SYSTEM_HASH',       '%s' );\n", $sh );

                $this->installLog( G::LoadTranslation('ID_CREATING', SYS_LANG, Array(FILE_PATHS_INSTALLED) ));

                file_put_contents( FILE_PATHS_INSTALLED, $dbText );

            }

            $this->installLog( G::LoadTranslation('ID_INSTALL_SUCESS') );

            $info->result = true;

            $info->message = G::LoadTranslation('ID_INSTALL_SUCESS');

            $info->url = '/sys' . $_REQUEST['workspace'] . '/en/neoclassic/login/login';

            $info->messageFinish = G::LoadTranslation('ID_PROCESSMAKER_SUCCESS_INSTALLED', SYS_LANG, Array($workspace));;

        } catch (Exception $e) {

            $info->result = false;

            $info->message = $e->getMessage();

        }

        return $info;

    }
コード例 #20
0
 /**
  * Create/Update CaseScheduler
  *
  * @param string $caseSchedulerUid      Unique id of CaseScheduler
  * @param string $projectUid            Unique id of Project
  * @param string $userUidCreatorUpdater Unique id of creator/updater User
  * @param array  $arrayData             Data
  * @param array  $arrayDataPlugin       Data plugin
  *
  * return void
  */
 public function createUpdate($caseSchedulerUid, $projectUid, $userUidCreatorUpdater, array $arrayData, array $arrayDataPlugin = array())
 {
     try {
         //Set variables
         $flagInsert = $caseSchedulerUid == "" ? true : false;
         $option = $flagInsert ? "INS" : "UPD";
         //Set data
         if ($flagInsert) {
             $caseSchedulerUid = \ProcessMaker\Util\Common::generateUID();
         }
         foreach ($arrayData as $key => $value) {
             if (is_array($value)) {
                 foreach ($value as $key2 => $value2) {
                     $arrayData[$key][$key2] = trim($value2);
                 }
             } else {
                 $arrayData[$key] = trim($value);
             }
         }
         $arrayCaseSchedulerData = array();
         $arrayCaseSchedulerData["SCH_UID"] = $caseSchedulerUid;
         $arrayCaseSchedulerData["SCH_NAME"] = $arrayData["SCH_NAME"];
         $arrayCaseSchedulerData["PRO_UID"] = $projectUid;
         $arrayCaseSchedulerData["TAS_UID"] = $arrayData["TAS_UID"];
         $arrayCaseSchedulerData["SCH_DEL_USER_UID"] = $arrayData["SCH_USER_UID"];
         $arrayCaseSchedulerData["SCH_DEL_USER_NAME"] = $arrayData["SCH_USER_NAME"];
         switch ($option) {
             case "INS":
                 $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);
                 $arrayCaseSchedulerData["SCH_STATE"] = "ACTIVE";
                 $arrayCaseSchedulerData["SCH_LAST_STATE"] = "CREATED";
                 $sDateTmp = $arrayData["SCH_START_DATE"] != "" ? $arrayData["SCH_START_DATE"] : date("Y-m-d");
                 break;
             case "UPD":
                 if ($arrayData["SCH_USER_PASSWORD"] != "DefaultPM") {
                     $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]);
                 }
                 $sDateTmp = $arrayData["SCH_START_DATE"];
                 break;
         }
         $caseSchedulerOption = (int) $arrayData["SCH_OPTION"];
         $arrayCaseSchedulerData["USR_UID"] = $userUidCreatorUpdater;
         $arrayCaseSchedulerData["SCH_OPTION"] = $caseSchedulerOption;
         $arrayCaseSchedulerData["SCH_START_TIME"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));
         $arrayCaseSchedulerData["SCH_START_DATE"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"]));
         $sValue = "";
         $sDaysPerformTask = "";
         $sWeeks = "";
         $sMonths = "";
         switch ($option) {
             case "INS":
                 $arrayCaseSchedulerData["SCH_START_DAY"] = "";
                 $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = "";
                 $arrayCaseSchedulerData["SCH_REPEAT_UNTIL"] = "";
                 $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = "";
                 break;
             case "UPD":
                 break;
         }
         switch ($caseSchedulerOption) {
             case 1:
                 //Option 1
                 $sValue = $arrayData["SCH_DAYS_PERFORM_TASK"];
                 switch ($sValue) {
                     case "1":
                         $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|1";
                         break;
                     case "2":
                         $arrayCaseSchedulerData["SCH_OPTION"] = "2";
                         $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = "1";
                         $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = "1|2|3|4|5|";
                         break;
                     case "3":
                         //Every [n] Days
                         $sDaysPerformTask = $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
                         $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|" . $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"];
                         break;
                 }
                 break;
             case 2:
                 //If the option is zero, set by default 1
                 $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = empty($arrayData["SCH_EVERY_DAYS"]) ? 1 : $arrayData["SCH_EVERY_DAYS"];
                 $sWeeks = "";
                 if (!empty($arrayData["SCH_WEEK_DAYS"])) {
                     $aWeekDays = $arrayData["SCH_WEEK_DAYS"];
                     foreach ($aWeekDays as $value) {
                         $sWeeks = $sWeeks . $value . "|";
                     }
                 }
                 if (!empty($arrayData["SCH_WEEK_DAYS_2"])) {
                     $aWeekDays2 = $arrayData["SCH_WEEK_DAYS_2"];
                     foreach ($aWeekDays2 as $value) {
                         $sWeeks = $sWeeks . $value . "|";
                     }
                 }
                 $sStartTime = $arrayData["SCH_START_TIME"];
                 $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = $sWeeks;
                 break;
             case 3:
                 $nStartDay = $arrayData["SCH_START_DAY"];
                 if ($nStartDay == 1) {
                     $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_1"];
                 } else {
                     $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_2_WEEKS"] . "|" . $arrayData["SCH_START_DAY_OPT_2_DAYS_WEEK"];
                 }
                 $sMonths = "";
                 if (!empty($arrayData["SCH_MONTHS"])) {
                     $aMonths = $arrayData["SCH_MONTHS"];
                     foreach ($aMonths as $value) {
                         $sMonths = $sMonths . $value . "|";
                     }
                 }
                 if (!empty($arrayData["SCH_MONTHS_2"])) {
                     $aMonths2 = $arrayData["SCH_MONTHS_2"];
                     foreach ($aMonths2 as $value) {
                         $sMonths = $sMonths . $value . "|";
                     }
                 }
                 if (!empty($arrayData["SCH_MONTHS_3"])) {
                     $aMonths3 = $arrayData["SCH_MONTHS_3"];
                     foreach ($aMonths3 as $value) {
                         $sMonths = $sMonths . $value . "|";
                     }
                 }
                 $arrayCaseSchedulerData["SCH_MONTHS"] = $sMonths;
                 $sValue = $nStartDay;
                 break;
         }
         $caseScheduler = new \CaseScheduler();
         $recalculateDate = false;
         $recalculateTime = false;
         switch ($option) {
             case "INS":
                 $recalculateDate = true;
                 $recalculateTime = true;
                 break;
             case "UPD":
                 $arrayDataAux = $caseScheduler->load($caseSchedulerUid);
                 $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"] != "" ? $arrayData["SCH_END_DATE"] : null;
                 //If the start date has changed then recalculate the next run time
                 $recalculateDate = $arrayData["SCH_START_DATE"] != $arrayData["PREV_SCH_START_DATE"] ? true : false;
                 $recalculateTime = date("H:i:s", strtotime($arrayData["SCH_START_TIME"])) != date("H:i:s", strtotime($arrayData["PREV_SCH_START_TIME"])) ? true : false;
                 break;
         }
         switch ($caseSchedulerOption) {
             case 4:
                 //$arrayCaseSchedulerData["SCH_END_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                 break;
             case 5:
                 switch ($option) {
                     case "INS":
                         $arrayCaseSchedulerData["SCH_START_TIME"] = time();
                         $arrayCaseSchedulerData["SCH_START_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"];
                         break;
                     case "UPD":
                         break;
                 }
                 $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = $arrayData["SCH_REPEAT_EVERY"];
                 break;
         }
         switch ($option) {
             case "INS":
                 $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y-m-d") . " " . ($caseSchedulerOption != 5 ? $arrayData["SCH_START_TIME"] . ":00" : date("H:i:s"));
                 if ($arrayData["SCH_END_DATE"] != "") {
                     $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"];
                 }
                 break;
             case "UPD":
                 break;
         }
         //if (!empty($arrayData["SCH_REPEAT_TASK_CHK"])) {
         //    if ($arrayData["SCH_REPEAT_EVERY_OPT"] . "" == "2") {
         //        $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ((int)($arrayData["SCH_REPEAT_EVERY"])) * 60;
         //    } else {
         //        $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = (int)($arrayData["SCH_REPEAT_EVERY"]);
         //    }
         //}
         //Create/Update
         $caseSchedulerAux = new \CaseScheduler();
         $caseSchedulerUid = "";
         $arrayCaseSchedulerDataOld = array();
         switch ($option) {
             case "INS":
                 if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
                     $arrayCaseSchedulerData["CASE_SH_PLUGIN_UID"] = $arrayData["CASE_SH_PLUGIN_UID"];
                 }
                 $result = $caseScheduler->create($arrayCaseSchedulerData);
                 $caseSchedulerUid = $caseScheduler->getSchUid();
                 $arrayCaseSchedulerDataOld = $caseSchedulerAux->load($caseSchedulerUid);
                 break;
             case "UPD":
                 $caseSchedulerUid = $caseScheduler->getSchUid();
                 $arrayCaseSchedulerDataOld = $caseSchedulerAux->load($caseSchedulerUid);
                 $result = $caseScheduler->update($arrayCaseSchedulerData);
                 break;
         }
         //Update the SCH_TIME_NEXT_RUN field
         $caseScheduler = new \CaseScheduler();
         $arrayCaseSchedulerData = $caseScheduler->load($caseSchedulerUid);
         $flagUpdateTimeNextRun = false;
         switch ((int) $arrayCaseSchedulerData["SCH_OPTION"]) {
             case 1:
                 //Daily
                 $flagUpdateTimeNextRun = $recalculateDate || $recalculateTime;
                 break;
             case 2:
                 //Weekly
                 $flagUpdateTimeNextRun = $recalculateDate || $recalculateTime || $arrayCaseSchedulerData["SCH_WEEK_DAYS"] != $arrayCaseSchedulerDataOld["SCH_WEEK_DAYS"];
                 break;
             case 3:
                 //Monthly
                 $flagUpdateTimeNextRun = $recalculateDate || $recalculateTime || $arrayCaseSchedulerData["SCH_START_DAY"] != $arrayCaseSchedulerDataOld["SCH_START_DAY"] || $arrayCaseSchedulerData["SCH_MONTHS"] != $arrayCaseSchedulerDataOld["SCH_MONTHS"];
                 break;
             case 4:
                 //One time only
                 $flagUpdateTimeNextRun = $recalculateTime || $arrayCaseSchedulerData["SCH_START_TIME"] != $arrayCaseSchedulerDataOld["SCH_START_TIME"];
                 break;
             case 5:
                 //Every
                 $flagUpdateTimeNextRun = $option == "INS" || $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] != $arrayCaseSchedulerDataOld["SCH_REPEAT_EVERY"];
                 break;
         }
         if ($flagUpdateTimeNextRun) {
             $caseSchedulerTimeNextRunNew = $caseScheduler->getTimeNextRunByDate($arrayCaseSchedulerData, date("Y-m-d H:i:s"));
         }
         //Plugin
         if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") {
             $oPluginRegistry =& \PMPluginRegistry::getSingleton();
             $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins();
             $params = explode("--", $arrayData["CASE_SH_PLUGIN_UID"]);
             foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPluginDetail) {
                 if ($caseSchedulerPluginDetail->sNamespace == $params[0] && $caseSchedulerPluginDetail->sActionId == $params[1]) {
                     $caseSchedulerSelected = $caseSchedulerPluginDetail;
                 }
             }
             if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) {
                 //Save the form
                 $arrayDataPlugin["SCH_UID"] = $arrayCaseSchedulerData["SCH_UID"];
                 $oPluginRegistry->executeMethod($caseSchedulerPluginDetail->sNamespace, $caseSchedulerPluginDetail->sActionSave, $arrayDataPlugin);
             }
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #21
0
ファイル: BpmnLane.php プロジェクト: emildev35/processmaker
 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);
 }
コード例 #22
0
ファイル: Role.php プロジェクト: emildev35/processmaker
 /**
  * Create Role
  *
  * @param array $arrayData Data
  *
  * return array Return data of the new Role created
  */
 public function create(array $arrayData)
 {
     try {
         //Verify data
         $process = new \ProcessMaker\BusinessModel\Process();
         $validator = new \ProcessMaker\BusinessModel\Validator();
         $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
         //Set data
         $arrayData = array_change_key_case($arrayData, CASE_UPPER);
         unset($arrayData["ROL_UID"]);
         $arrayData["ROL_SYSTEM"] = "00000000000000000000000000000002";
         //PROCESSMAKER
         //Verify data
         $this->throwExceptionIfDataIsInvalid("", $arrayData);
         //Create
         $role = new \Roles();
         $roleUid = \ProcessMaker\Util\Common::generateUID();
         $arrayData["ROL_UID"] = $roleUid;
         $arrayData["ROL_STATUS"] = isset($arrayData["ROL_STATUS"]) ? $arrayData["ROL_STATUS"] == "ACTIVE" ? 1 : 0 : 1;
         $arrayData["ROL_CREATE_DATE"] = date("Y-M-d H:i:s");
         $result = $role->createRole($arrayData);
         //Return
         return $this->getRole($roleUid);
     } catch (\Exception $e) {
         throw $e;
     }
 }
コード例 #23
0
ファイル: class.processes.php プロジェクト: rrsc/processmaker
    /**

     * Get an unused unique id for Message-Type-Variable

     *

     * @return string $uid

     */

    public function getUnusedMessageTypeVariableUid()

    {

        try {

            $variable = new \ProcessMaker\BusinessModel\MessageType\Variable();



            do {

                $newUid = \ProcessMaker\Util\Common::generateUID();

            } while ($variable->exists($newUid));



            return $newUid;

        } catch (Exception $e) {

            throw $e;

        }



    }
コード例 #24
0
 /**
  * Create Message-Event-Definition for a Project
  *
  * @param string $projectUid Unique id of Project
  * @param array  $arrayData  Data
  *
  * return array Return data of the new Message-Event-Definition created
  */
 public function create($projectUid, array $arrayData, $flagValidateArrayData = true)
 {
     try {
         //Verify data
         $process = new \ProcessMaker\BusinessModel\Process();
         $validator = new \ProcessMaker\BusinessModel\Validator();
         $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
         $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
         //Set data
         $arrayData = array_change_key_case($arrayData, CASE_UPPER);
         unset($arrayData["MSGED_UID"]);
         unset($arrayData["PRJ_UID"]);
         //Verify data
         $process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
         if ($flagValidateArrayData) {
             $this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData);
         }
         //Create
         $cnn = \Propel::getConnection("workflow");
         try {
             $messageEventDefinition = new \MessageEventDefinition();
             if (!isset($arrayData["MSGT_UID"]) || $arrayData["MSGT_UID"] . "" == "") {
                 $arrayData["MSGT_UID"] = "";
                 $arrayData["MSGED_VARIABLES"] = array();
             }
             if (!isset($arrayData["MSGED_VARIABLES"])) {
                 $arrayData["MSGED_VARIABLES"] = array();
             }
             $messageEventDefinitionUid = \ProcessMaker\Util\Common::generateUID();
             if (isset($arrayData["MSGED_VARIABLES"])) {
                 $arrayData["MSGED_VARIABLES"] = serialize($arrayData["MSGED_VARIABLES"]);
             }
             $messageEventDefinition->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
             $messageEventDefinition->setMsgedUid($messageEventDefinitionUid);
             $messageEventDefinition->setPrjUid($projectUid);
             $messageEventDefinition->setMsgedUsrUid("00000000000000000000000000000001");
             //admin
             if ($messageEventDefinition->validate()) {
                 $cnn->begin();
                 $result = $messageEventDefinition->save();
                 $cnn->commit();
                 //Return
                 return $this->getMessageEventDefinition($messageEventDefinitionUid);
             } else {
                 $msg = "";
                 foreach ($messageEventDefinition->getValidationFailures() as $validationFailure) {
                     $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage();
                 }
                 throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : ""));
             }
         } catch (\Exception $e) {
             $cnn->rollback();
             throw $e;
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }