/**

     * this function remove all Process except the PROCESS ROW

     *

     * @param string $sProUid

     * @return boolean

     */

    public function removeProcessRows ($sProUid)

    {

        try {

            //Instance all classes necesaries

            $oProcess = new Process();

            $oDynaform = new Dynaform();

            $oInputDocument = new InputDocument();

            $oOutputDocument = new OutputDocument();

            $oTrigger = new Triggers();

            $oStepTrigger = new StepTrigger();

            $oRoute = new Route();

            $oStep = new Step();

            $oSubProcess = new SubProcess();

            $oCaseTracker = new CaseTracker();

            $oCaseTrackerObject = new CaseTrackerObject();

            $oObjectPermission = new ObjectPermission();

            $oSwimlaneElement = new SwimlanesElements();

            $oConnection = new DbSource();

            $oStage = new Stage();

            $oEvent = new Event();

            $oCaseScheduler = new CaseScheduler();

            $oConfig = new Configuration();



            //Delete the tasks of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( TaskPeer::PRO_UID, $sProUid );

            $oDataset = TaskPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            $oTask = new Task();

            while ($aRow = $oDataset->getRow()) {

                $oCriteria = new Criteria( 'workflow' );

                $oCriteria->add( StepTriggerPeer::TAS_UID, $aRow['TAS_UID'] );

                StepTriggerPeer::doDelete( $oCriteria );

                if ($oTask->taskExists( $aRow['TAS_UID'] )) {

                    $oTask->remove( $aRow['TAS_UID'] );

                }

                $oDataset->next();

            }



            //Delete the dynaforms of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( DynaformPeer::PRO_UID, $sProUid );

            $oDataset = DynaformPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '_tmp*';

                foreach (glob( $sWildcard ) as $fn) {

                    @unlink( $fn );

                }

                $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '.*';

                foreach (glob( $sWildcard ) as $fn) {

                    @unlink( $fn );

                }

                if ($oDynaform->dynaformExists( $aRow['DYN_UID'] )) {

                    $oDynaform->remove( $aRow['DYN_UID'] );

                }

                $oDataset->next();

            }



            //Delete the input documents of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( InputDocumentPeer::PRO_UID, $sProUid );

            $oDataset = InputDocumentPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oInputDocument->InputExists( $aRow['INP_DOC_UID'] )) {

                    $oInputDocument->remove( $aRow['INP_DOC_UID'] );

                }

                $oDataset->next();

            }



            //Delete the output documents of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProUid );

            $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oOutputDocument->OutputExists( $aRow['OUT_DOC_UID'] )) {

                    $oOutputDocument->remove( $aRow['OUT_DOC_UID'] );

                }

                $oDataset->next();

            }



            //Delete the steps

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( StepPeer::PRO_UID, $sProUid );

            $oDataset = StepPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                //Delete the steptrigger of process

                /*$oCriteria = new Criteria('workflow');

                  $oCriteria->add(StepTriggerPeer::STEP_UID, $aRow['STEP_UID']);

                  $oDataseti = StepTriggerPeer::doSelectRS($oCriteria);

                  $oDataseti->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                  $oDataseti->next();

                  while ($aRowi = $oDataseti->getRow()) {

                  if ($oStepTrigger->stepTriggerExists($aRowi['STEP_UID'], $aRowi['TAS_UID'], $aRowi['TRI_UID'], $aRowi['ST_TYPE']))

                  $oStepTrigger->remove($aRowi['STEP_UID'], $aRowi['TAS_UID'], $aRowi['TRI_UID'], $aRowi['ST_TYPE']);

                  $oDataseti->next();

                  }*/

                $oStep->remove( $aRow['STEP_UID'] );

                $oDataset->next();

            }



            //Delete the StepSupervisor

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProUid );

            $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oStep->StepExists( $aRow['STEP_UID'] )) {

                    $oStep->remove( $aRow['STEP_UID'] );

                }

                $oDataset->next();

            }



            //Delete the triggers of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( TriggersPeer::PRO_UID, $sProUid );

            $oDataset = TriggersPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oTrigger->TriggerExists( $aRow['TRI_UID'] )) {

                    $oTrigger->remove( $aRow['TRI_UID'] );

                }

                $oDataset->next();

            }

            //Delete the routes of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( RoutePeer::PRO_UID, $sProUid );

            $oDataset = RoutePeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oRoute->routeExists( $aRow['ROU_UID'] )) {

                    $oRoute->remove( $aRow['ROU_UID'] );

                }

                $oDataset->next();

            }

            //Delete the swimlanes elements of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProUid );

            $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oSwimlaneElement->swimlanesElementsExists( $aRow['SWI_UID'] )) {

                    $oSwimlaneElement->remove( $aRow['SWI_UID'] );

                }

                $oDataset->next();

            }



            //Delete the DB connections of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( DbSourcePeer::PRO_UID, $sProUid );

            $oDataset = DbSourcePeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oConnection->Exists( $aRow['DBS_UID'], $aRow['PRO_UID'] )) {

                    $oConnection->remove( $aRow['DBS_UID'], $aRow['PRO_UID'] );

                }

                $oDataset->next();

            }



            //Delete the sub process of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProUid );

            $oDataset = SubProcessPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oSubProcess->subProcessExists( $aRow['SP_UID'] )) {

                    $oSubProcess->remove( $aRow['SP_UID'] );

                }

                $oDataset->next();

            }



            //Delete the caseTracker of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProUid );

            $oDataset = CaseTrackerPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oCaseTracker->caseTrackerExists( $aRow['PRO_UID'] )) {

                    $oCaseTracker->remove( $aRow['PRO_UID'] );

                }

                $oDataset->next();

            }



            //Delete the caseTrackerObject of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProUid );

            $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oCaseTrackerObject->caseTrackerObjectExists( $aRow['CTO_UID'] )) {

                    $oCaseTrackerObject->remove( $aRow['CTO_UID'] );

                }

                $oDataset->next();

            }



            //Delete the ObjectPermission of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProUid );

            $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oObjectPermission->Exists( $aRow['OP_UID'] )) {

                    $oObjectPermission->remove( $aRow['OP_UID'] );

                }

                $oDataset->next();

            }



            //Delete the Stage of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( StagePeer::PRO_UID, $sProUid );

            $oDataset = StagePeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oStage->Exists( $aRow['STG_UID'] )) {

                    $oStage->remove( $aRow['STG_UID'] );

                }

                $oDataset->next();

            }



            //Delete the Event of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( EventPeer::PRO_UID, $sProUid );

            $oDataset = EventPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oEvent->Exists( $aRow['EVN_UID'] )) {

                    $oEvent->remove( $aRow['EVN_UID'] );

                }

                $oDataset->next();

                if ($oEvent->existsByTaskUidFrom( $aRow['TAS_UID'] )) {

                    $aRowEvent = $oEvent->getRowByTaskUidFrom( $aRow['TAS_UID'] );

                    $oEvent->remove( $aRowEvent['EVN_UID'] );

                }

                $oDataset->next();

            }



            //Delete the CaseScheduler of process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->add( CaseSchedulerPeer::PRO_UID, $sProUid );

            $oDataset = CaseSchedulerPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oCaseScheduler->Exists( $aRow['SCH_UID'] )) {

                    $oCaseScheduler->remove( $aRow['SCH_UID'] );

                }

                $oDataset->next();

            }



            //Delete the TaskExtraProperties of the process

            $oCriteria = new Criteria( 'workflow' );

            $oCriteria->addSelectColumn( ConfigurationPeer::CFG_UID );

            $oCriteria->addSelectColumn( ConfigurationPeer::OBJ_UID );

            $oCriteria->addSelectColumn( ConfigurationPeer::CFG_VALUE );

            $oCriteria->addSelectColumn( TaskPeer::PRO_UID );

            $oCriteria->addSelectColumn( ConfigurationPeer::USR_UID );

            $oCriteria->addSelectColumn( ConfigurationPeer::APP_UID );

            $oCriteria->add( TaskPeer::PRO_UID, $sProUid );

            $oCriteria->add( ConfigurationPeer::CFG_UID, 'TAS_EXTRA_PROPERTIES' );

            $oCriteria->addJoin( ConfigurationPeer::OBJ_UID, TaskPeer::TAS_UID );

            $oDataset = ConfigurationPeer::doSelectRS( $oCriteria );

            $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );

            $oDataset->next();

            while ($aRow = $oDataset->getRow()) {

                if ($oConfig->exists($aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID'])) {

                    $oConfig->remove( $aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID'] );

                }

                $oDataset->next();

            }



            return true;

        } catch (Exception $oError) {

            throw ($oError);

        }

    }
 /**
  * Verify if the InputDocument it's assigned in other objects
  *
  * @param string $inputDocumentUid Unique id of InputDocument
  *
  * return array Return array (true if it's assigned or false otherwise and data)
  */
 public function itsAssignedInOtherObjects($inputDocumentUid)
 {
     try {
         $flagAssigned = false;
         $arrayData = array();
         //Step
         $criteria = new \Criteria("workflow");
         $criteria->addSelectColumn(\StepPeer::STEP_UID);
         $criteria->add(\StepPeer::STEP_TYPE_OBJ, "INPUT_DOCUMENT", \Criteria::EQUAL);
         $criteria->add(\StepPeer::STEP_UID_OBJ, $inputDocumentUid, \Criteria::EQUAL);
         $rsCriteria = \StepPeer::doSelectRS($criteria);
         if ($rsCriteria->next()) {
             $flagAssigned = true;
             $arrayData[] = \G::LoadTranslation("ID_STEPS");
         }
         //StepSupervisor
         $criteria = new \Criteria("workflow");
         $criteria->addSelectColumn(\StepSupervisorPeer::STEP_UID);
         $criteria->add(\StepSupervisorPeer::STEP_TYPE_OBJ, "INPUT_DOCUMENT", \Criteria::EQUAL);
         $criteria->add(\StepSupervisorPeer::STEP_UID_OBJ, $inputDocumentUid, \Criteria::EQUAL);
         $rsCriteria = \StepSupervisorPeer::doSelectRS($criteria);
         if ($rsCriteria->next()) {
             $flagAssigned = true;
             $arrayData[] = \G::LoadTranslation("ID_CASES_MENU_ADMIN");
         }
         //ObjectPermission
         $criteria = new \Criteria("workflow");
         $criteria->addSelectColumn(\ObjectPermissionPeer::OP_UID);
         $criteria->add(\ObjectPermissionPeer::OP_OBJ_TYPE, "INPUT", \Criteria::EQUAL);
         $criteria->add(\ObjectPermissionPeer::OP_OBJ_UID, $inputDocumentUid, \Criteria::EQUAL);
         $rsCriteria = \ObjectPermissionPeer::doSelectRS($criteria);
         if ($rsCriteria->next()) {
             $flagAssigned = true;
             $arrayData[] = \G::LoadTranslation("ID_PROCESS_PERMISSIONS");
         }
         //Return
         return array($flagAssigned, $arrayData);
     } catch (\Exception $e) {
         throw $e;
     }
 }
 /**
  * Check if the user has permissions
  *
  * @param string $applicationUid   Unique id of Case
  * @param string $delIndex         Delegataion index
  * @param string $userUid          Unique id of User
  * @param string $inputDocumentUid
  *
  * return void Throw exception the user does not have permission to delete
  */
 public function throwExceptionIfHaventPermissionToDelete($applicationUid, $delIndex, $userUid, $appDocumentUid)
 {
     try {
         //Verify data inbox
         $case = new \ProcessMaker\BusinessModel\Cases();
         $arrayResult = $case->getStatusInfo($applicationUid, $delIndex, $userUid);
         $flagInbox = 1;
         if (empty($arrayResult) || !preg_match("/^(?:TO_DO|DRAFT)\$/", $arrayResult["APP_STATUS"])) {
             $flagInbox = 0;
         }
         //Verify data Supervisor
         $application = \ApplicationPeer::retrieveByPK($applicationUid);
         $flagSupervisor = 0;
         $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
         $processSupervisor = $supervisor->getProcessSupervisors($application->getProUid(), "ASSIGNED");
         $arraySupervisor = $processSupervisor["data"];
         foreach ($arraySupervisor as $value) {
             if ($value["usr_uid"] == $userUid) {
                 $flagSupervisor = 1;
                 break;
             }
         }
         if ($flagInbox == 0 && $flagSupervisor == 0) {
             throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION_DELETE_INPUT_DOCUMENT", array($userUid)));
         }
         //Verify data permission
         $flagPermission = 0;
         $criteria = new \Criteria("workflow");
         $criteria->addSelectColumn(\AppDocumentPeer::DOC_UID);
         $criteria->add(\AppDocumentPeer::APP_DOC_UID, $appDocumentUid, \Criteria::EQUAL);
         $criteria->add(\AppDocumentPeer::APP_UID, $applicationUid, \Criteria::EQUAL);
         $criteria->add(\AppDocumentPeer::APP_DOC_TYPE, "INPUT", \Criteria::EQUAL);
         $rsCriteria = \AppDocumentPeer::doSelectRS($criteria);
         $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
         if ($rsCriteria->next()) {
             $row = $rsCriteria->getRow();
             $inputDocumentUid = $row["DOC_UID"];
             //Criteria
             $criteria2 = new \Criteria("workflow");
             $criteria2->addSelectColumn(\ObjectPermissionPeer::OP_UID);
             $criteria2->add(\ObjectPermissionPeer::PRO_UID, $application->getProUid(), \Criteria::EQUAL);
             $criteria2->add(\ObjectPermissionPeer::OP_OBJ_TYPE, "INPUT", \Criteria::EQUAL);
             $criteria2->add($criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, $inputDocumentUid, \Criteria::EQUAL)->addOr($criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, "0", \Criteria::EQUAL))->addOr($criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, "", \Criteria::EQUAL)));
             $criteria2->add(\ObjectPermissionPeer::OP_ACTION, "DELETE", \Criteria::EQUAL);
             //User
             $criteriaU = clone $criteria2;
             $criteriaU->add(\ObjectPermissionPeer::OP_USER_RELATION, 1, \Criteria::EQUAL);
             $criteriaU->add(\ObjectPermissionPeer::USR_UID, $userUid, \Criteria::EQUAL);
             $rsCriteriaU = \ObjectPermissionPeer::doSelectRS($criteriaU);
             $rsCriteriaU->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
             if ($rsCriteriaU->next()) {
                 $flagPermission = 1;
             }
             //Group
             if ($flagPermission == 0) {
                 $criteriaG = clone $criteria2;
                 $criteriaG->add(\ObjectPermissionPeer::OP_USER_RELATION, 2, \Criteria::EQUAL);
                 $criteriaG->addJoin(\ObjectPermissionPeer::USR_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN);
                 $criteriaG->add(\GroupUserPeer::USR_UID, $userUid, \Criteria::EQUAL);
                 $rsCriteriaG = \ObjectPermissionPeer::doSelectRS($criteriaG);
                 $rsCriteriaG->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
                 if ($rsCriteriaG->next()) {
                     $flagPermission = 1;
                 }
             }
         }
         if ($flagPermission == 0) {
             throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION_DELETE_INPUT_DOCUMENT", array($userUid)));
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
    /**

     * Obtain all user permits for Dynaforms, Input and output documents from some action [VIEW, BLOCK, etc...]

     *

     * function getAllObjectsFrom ($PRO_UID, $APP_UID, $TAS_UID, $USR_UID, $ACTION)

     * @author Erik Amaru Ortiz <*****@*****.**>

     * @access public

     * @param  Process ID, Application ID, Task ID, User ID, Action, Delegation index

     * @return Array within all user permitions all objects' types

     */

    public function getAllObjectsFrom($PRO_UID, $APP_UID, $TAS_UID = "", $USR_UID = "", $ACTION = "", $delIndex = 0)

    {

        $aCase = $this->loadCase($APP_UID);



        if ($delIndex != 0) {

            $appDelay = new AppDelay();



            if ($appDelay->isPaused($APP_UID, $delIndex)) {

                $aCase["APP_STATUS"] = "PAUSED";

            }

        }



        $USER_PERMISSIONS = Array();

        $GROUP_PERMISSIONS = Array();

        $RESULT = Array(

            "DYNAFORM" => Array(),

            "INPUT" => Array(),

            "OUTPUT" => Array(),

            "CASES_NOTES" => 0,

            "MSGS_HISTORY" => Array()

        	/*----------------------------------********---------------------------------*/

        );



        //permissions per user

        $oCriteria = new Criteria('workflow');

        $oCriteria->add(

                $oCriteria->getNewCriterion(ObjectPermissionPeer::USR_UID, $USR_UID)->addOr(

                        $oCriteria->getNewCriterion(ObjectPermissionPeer::USR_UID, '')->addOr(

                                $oCriteria->getNewCriterion(ObjectPermissionPeer::USR_UID, '0')

                        )

                )

        );

        $oCriteria->add(ObjectPermissionPeer::PRO_UID, $PRO_UID);

        $oCriteria->add(ObjectPermissionPeer::OP_ACTION, $ACTION);

        $oCriteria->add(

                $oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, $TAS_UID)->addOr(

                        $oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '')->addOr(

                                $oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '0')

                        )

                )

        );



        $rs = ObjectPermissionPeer::doSelectRS($oCriteria);

        $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);



        while ($rs->next()) {

            $row = $rs->getRow();



            if ($row["OP_CASE_STATUS"] == "ALL" || $row["OP_CASE_STATUS"] == "" || $row["OP_CASE_STATUS"] == "0" ||

                $row["OP_CASE_STATUS"] == $aCase["APP_STATUS"]

            ) {

                array_push($USER_PERMISSIONS, $row);

            }

        }



        //permissions per group

        G::loadClass('groups');



        $gr = new Groups();

        $records = $gr->getActiveGroupsForAnUser($USR_UID);



        foreach ($records as $group) {

            $oCriteria = new Criteria('workflow');

            $oCriteria->add(ObjectPermissionPeer::USR_UID, $group);

            $oCriteria->add(ObjectPermissionPeer::PRO_UID, $PRO_UID);

            $oCriteria->add(ObjectPermissionPeer::OP_ACTION, $ACTION);

            $oCriteria->add(

                    $oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, $TAS_UID)->addOr(

                            $oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '')->addOr(

                                    $oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '0')

                            )

                    )

            );



            $rs = ObjectPermissionPeer::doSelectRS($oCriteria);

            $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);

            while ($rs->next()) {

                $row = $rs->getRow();



                if ($row["OP_CASE_STATUS"] == "ALL" || $row["OP_CASE_STATUS"] == "" || $row["OP_CASE_STATUS"] == "0" ||

                    $row["OP_CASE_STATUS"] == $aCase["APP_STATUS"]

                ) {

                    array_push($GROUP_PERMISSIONS, $row);

                }

            }

        }



        $PERMISSIONS = array_merge($USER_PERMISSIONS, $GROUP_PERMISSIONS);



        foreach ($PERMISSIONS as $row) {

            $USER = $row['USR_UID'];

            $USER_RELATION = $row['OP_USER_RELATION'];

            $TASK_SOURCE = $row['OP_TASK_SOURCE'];

            $PARTICIPATE = $row['OP_PARTICIPATE'];

            $O_TYPE = $row['OP_OBJ_TYPE'];

            $O_UID = $row['OP_OBJ_UID'];

            $ACTION = $row['OP_ACTION'];

            $CASE_STATUS = $row['OP_CASE_STATUS'];



            // here!,. we should verify $PARTICIPATE

            $sw_participate = false; // must be false for default

            if (($row['OP_CASE_STATUS'] != 'COMPLETED') && ($row['OP_CASE_STATUS'] != '') && ($row['OP_CASE_STATUS'] != '0')) {

                if ($PARTICIPATE == 1) {

                    $oCriteriax = new Criteria('workflow');

                    $oCriteriax->add(AppDelegationPeer::USR_UID, $USR_UID);

                    $oCriteriax->add(AppDelegationPeer::APP_UID, $APP_UID);



                    if (AppDelegationPeer::doCount($oCriteriax) == 0) {

                        $sw_participate = true;

                    }

                }

            }

            if (!$sw_participate) {

                switch ($O_TYPE) {

                    case 'ANY':

                        //for dynaforms

                        $oCriteria = new Criteria('workflow');

                        $oCriteria->add(ApplicationPeer::APP_UID, $APP_UID);

                        $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID);

                        $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID);

                        if ($aCase['APP_STATUS'] != 'COMPLETED') {

                            if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                $oCriteria->add(StepPeer::TAS_UID, $TASK_SOURCE);

                            }

                        }

                        $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM');

                        $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION);

                        $oCriteria->setDistinct();



                        $oDataset = DynaformPeer::doSelectRS($oCriteria);

                        $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                        $oDataset->next();



                        while ($aRow = $oDataset->getRow()) {

                            if (!in_array($aRow['DYN_UID'], $RESULT['DYNAFORM'])) {

                                array_push($RESULT['DYNAFORM'], $aRow['DYN_UID']);

                            }

                            $oDataset->next();

                        }



                        //InputDocuments and OutputDocuments

                        $oCriteria = new Criteria('workflow');

                        $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);

                        $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);



                        $arrayCondition = array();

                        $arrayCondition[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID, Criteria::EQUAL);

                        $arrayCondition[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX, Criteria::EQUAL);

                        $oCriteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);



                        $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);

                        $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);

                        if ($aCase['APP_STATUS'] != 'COMPLETED') {

                            if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);

                            }

                        }

                        $oCriteria->add(

                                $oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'INPUT')->

                                        addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'))->

                                        addOr($oCriteria->

                                                getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED'))

                        );



                        $oDataset = AppDelegationPeer::doSelectRS($oCriteria);

                        $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);



                        while ($oDataset->next()) {

                            $aRow = $oDataset->getRow();



                            if ($aRow['APP_DOC_TYPE'] == "ATTACHED") {

                                $aRow['APP_DOC_TYPE'] = "INPUT";

                            }

                            if (!in_array($aRow['APP_DOC_UID'], $RESULT[$aRow['APP_DOC_TYPE']])) {

                                array_push($RESULT[$aRow['APP_DOC_TYPE']], $aRow['APP_DOC_UID']);

                            }

                        }



                        $RESULT['CASES_NOTES'] = 1;

                        /*----------------------------------********---------------------------------*/



                        // Message History

                        $RESULT['MSGS_HISTORY'] = array('PERMISSION' => $ACTION);



                        $arrayDelIndex = array();



                        $oCriteria = new Criteria('workflow');

                        if ($USER_RELATION == 1) {

                            //Users

                            $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);

                            $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);

                            if ($aCase['APP_STATUS'] != 'COMPLETED') {

                                if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                    $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);

                                }

                            }

                            $oCriteria->add(AppDelegationPeer::USR_UID, $USER);



                            $oDataset = AppDelegationPeer::doSelectRS($oCriteria);

                            $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                            $oDataset->next();

                            while ($aRow = $oDataset->getRow()) {

                                $arrayDelIndex[] = $aRow["DEL_INDEX"];

                                $oDataset->next();

                            }

                        } else {

                            //Groups

                            $oCriteria->addJoin(GroupUserPeer::USR_UID, AppDelegationPeer::USR_UID, Criteria::LEFT_JOIN);

                            $oCriteria->add(GroupUserPeer::GRP_UID, $USER);

                            $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);

                            $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);

                            if ($aCase['APP_STATUS'] != 'COMPLETED') {

                                if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                    $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);

                                }

                            }



                            $oDataset = AppDelegationPeer::doSelectRS($oCriteria);

                            $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                            $oDataset->next();

                            while ($aRow = $oDataset->getRow()) {

                                $arrayDelIndex[] = $aRow["DEL_INDEX"];

                                $oDataset->next();

                            }

                        }

                        $RESULT["MSGS_HISTORY"] = array_merge(array("DEL_INDEX" => $arrayDelIndex), $RESULT["MSGS_HISTORY"]);

                        break;

                    case 'DYNAFORM':

                        $oCriteria = new Criteria('workflow');

                        $oCriteria->add(ApplicationPeer::APP_UID, $APP_UID);

                        if ($aCase['APP_STATUS'] != 'COMPLETED') {

                            if ($TASK_SOURCE != '' && $TASK_SOURCE != "0") {

                                $oCriteria->add(StepPeer::TAS_UID, $TASK_SOURCE);

                            }

                        }

                        if ($O_UID != '' && $O_UID != '0') {

                            $oCriteria->add(DynaformPeer::DYN_UID, $O_UID);

                        }

                        $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID);

                        $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID);

                        $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM');

                        $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION);

                        $oCriteria->setDistinct();



                        $oDataset = DynaformPeer::doSelectRS($oCriteria);

                        $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                        $oDataset->next();



                        while ($aRow = $oDataset->getRow()) {

                            if (!in_array($aRow['DYN_UID'], $RESULT['DYNAFORM'])) {

                                array_push($RESULT['DYNAFORM'], $aRow['DYN_UID']);

                            }

                            $oDataset->next();

                        }

                        break;

                    case 'INPUT':

                    case 'OUTPUT':

                        if ($row['OP_OBJ_TYPE'] == 'INPUT') {

                            $obj_type = 'INPUT';

                        } else {

                            $obj_type = 'OUTPUT';

                        }

                        $oCriteria = new Criteria('workflow');

                        $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);

                        $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);

                        $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);

                        $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);

                        if ($aCase['APP_STATUS'] != 'COMPLETED') {

                            if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);

                            }

                        }

                        if ($O_UID != '' && $O_UID != '0') {

                            $oCriteria->add(AppDocumentPeer::DOC_UID, $O_UID);

                        }

                        if ($obj_type == 'INPUT') {

                            $oCriteria->add(

                                    $oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, $obj_type)->

                                            addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED'))

                            );

                        } else {

                            $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, $obj_type);

                        }



                        $aConditions = Array();

                        $aConditions[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID);

                        $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX);

                        $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);



                        $oDataset = AppDocumentPeer::doSelectRS($oCriteria);

                        $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                        $oDataset->next();

                        while ($aRow = $oDataset->getRow()) {

                            if (!in_array($aRow['APP_DOC_UID'], $RESULT[$obj_type])) {

                                array_push($RESULT[$obj_type], $aRow['APP_DOC_UID']);

                            }

                            $oDataset->next();

                        }

                        if ($obj_type == 'INPUT') {

                            // For supervisor documents

                            $oCriteria = new Criteria('workflow');

                            $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);

                            $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);

                            $oCriteria->add(ApplicationPeer::APP_UID, $APP_UID);

                            $oCriteria->add(ApplicationPeer::PRO_UID, $PRO_UID);

                            if ($O_UID != '' && $O_UID != '0') {

                                $oCriteria->add(AppDocumentPeer::DOC_UID, $O_UID);

                            }

                            $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'INPUT');

                            $oCriteria->add(AppDocumentPeer::DEL_INDEX, 100000);



                            $oCriteria->addJoin(ApplicationPeer::APP_UID, AppDocumentPeer::APP_UID, Criteria::LEFT_JOIN);



                            $oDataset = AppDocumentPeer::doSelectRS($oCriteria);

                            $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                            $oDataset->next();

                            while ($aRow = $oDataset->getRow()) {

                                if (!in_array($aRow['APP_DOC_UID'], $RESULT['INPUT'])) {

                                    array_push($RESULT['INPUT'], $aRow['APP_DOC_UID']);

                                }

                                $oDataset->next();

                            }

                        }

                        break;

                    case 'CASES_NOTES':

                        $RESULT['CASES_NOTES'] = 1;

                        break;

                    /*----------------------------------********---------------------------------*/

                    case 'MSGS_HISTORY':

                        // Permission

                        $RESULT['MSGS_HISTORY'] = array('PERMISSION' => $ACTION);

                        $arrayDelIndex = array();

                        $oCriteria = new Criteria('workflow');

                        if ($USER_RELATION == 1) {

                            $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);

                            $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);

                            if ($aCase['APP_STATUS'] != 'COMPLETED') {

                                if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                    $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);

                                }

                            }

                            $oCriteria->add(AppDelegationPeer::USR_UID, $USER);

                            $oDataset = AppDelegationPeer::doSelectRS($oCriteria);

                            $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                            $oDataset->next();

                            while ($aRow = $oDataset->getRow()) {

                                $arrayDelIndex[] = $aRow["DEL_INDEX"];

                                $oDataset->next();

                            }

                        } else {

                            //Groups

                            $oCriteria->addJoin(GroupUserPeer::USR_UID, AppDelegationPeer::USR_UID, Criteria::LEFT_JOIN);

                            $oCriteria->add(GroupUserPeer::GRP_UID, $USER);

                            $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);

                            $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);

                            if ($aCase['APP_STATUS'] != 'COMPLETED') {

                                if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {

                                    $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);

                                }

                            }

                            $oDataset = AppDelegationPeer::doSelectRS($oCriteria);

                            $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);

                            $oDataset->next();

                            while ($aRow = $oDataset->getRow()) {

                                $arrayDelIndex[] = $aRow["DEL_INDEX"];

                                $oDataset->next();

                            }

                        }

                        $RESULT["MSGS_HISTORY"] = array_merge(array("DEL_INDEX" => $arrayDelIndex), $RESULT["MSGS_HISTORY"]);

                        break;



                }

            }

        }

        return Array(

            "DYNAFORMS" => $RESULT['DYNAFORM'],

            "INPUT_DOCUMENTS" => $RESULT['INPUT'],

            "OUTPUT_DOCUMENTS" => $RESULT['OUTPUT'],

            "CASES_NOTES" => $RESULT['CASES_NOTES'],

            "MSGS_HISTORY" => $RESULT['MSGS_HISTORY']

        	/*----------------------------------********---------------------------------*/

        );

    }
 /**
  * editObjectPermission
  *
  * @param string $sOP_UID
  * @param string $sProcessUID
  * @return void
  */
 public function editExtObjectPermission($sProcessUID, $sOP_UID)
 {
     $oCriteria = new Criteria();
     $oCriteria->add(ObjectPermissionPeer::OP_UID, $sOP_UID);
     $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria);
     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
     $oDataset->next();
     $aRows = $oDataset->getRow();
     $oCriteria = new Criteria();
     $oCriteria->add(GroupwfPeer::GRP_UID, $aRows['USR_UID']);
     if (GroupwfPeer::doCount($oCriteria) == 1) {
         $user = '******' . $aRows['USR_UID'];
     }
     $oCriteria = new Criteria();
     $oCriteria->add(UsersPeer::USR_UID, $aRows['USR_UID']);
     if (UsersPeer::doCount($oCriteria) == 1) {
         $user = '******' . $aRows['USR_UID'];
     }
     $aFields['LANG'] = SYS_LANG;
     $aFields['OP_UID'] = $aRows['OP_UID'];
     $aFields['PRO_UID'] = $aRows['PRO_UID'];
     $aFields['OP_CASE_STATUS'] = $aRows['OP_CASE_STATUS'];
     $aFields['TAS_UID'] = $aRows['TAS_UID'];
     $aFields['OP_GROUP_USER'] = $user;
     $aFields['OP_TASK_SOURCE'] = $aRows['OP_TASK_SOURCE'];
     $aFields['OP_PARTICIPATE'] = $aRows['OP_PARTICIPATE'];
     $aFields['OP_OBJ_TYPE'] = $aRows['OP_OBJ_TYPE'];
     $aFields['OP_ACTION'] = $aRows['OP_ACTION'];
     $lang = defined('SYS_LANG') ? SYS_LANG : 'en';
     $aFields['TASK_TARGET_NAME'] = Content::load('TAS_TITLE', '', $aRows['TAS_UID'], $lang);
     $aFields['TASK_SOURCE_NAME'] = Content::load('TAS_TITLE', '', $aRows['OP_TASK_SOURCE'], $lang);
     $oUser = UsersPeer::retrieveByPK($aRows['USR_UID']);
     if (!is_null($oUser)) {
         $aFields['USR_FULLNAME'] = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname();
     } else {
         throw new Exception("The row '" . $aRows['USR_UID'] . "' in table USER doesn't exist!");
     }
     switch ($aRows['OP_OBJ_TYPE']) {
         /*  case 'ANY':
                 $aFields['OP_OBJ_TYPE'] = '';
                 break;
             */
         case 'DYNAFORM':
             $aFields['DYNAFORM'] = $aRows['OP_OBJ_UID'];
             $aFields['DYNAFORM_NAME'] = Content::load('DYN_TITLE', '', $aRows['OP_OBJ_UID'], $lang);
             break;
         case 'INPUT':
             $aFields['INPUT'] = $aRows['OP_OBJ_UID'];
             $aFields['INPUT_NAME'] = Content::load('INP_DOC_TITLE', '', $aRows['OP_OBJ_UID'], $lang);
             break;
         case 'OUTPUT':
             $aFields['OUTPUT'] = $aRows['OP_OBJ_UID'];
             $aFields['OUTPUT_NAME'] = Content::load('OUT_DOC_TITLE', '', $aRows['OP_OBJ_UID'], $lang);
             break;
     }
     return $aFields;
 }
 /**
  * Obtain all user permits for Dynaforms, Input and output documents from some action [VIEW, BLOCK, etc...]
  *
  * function getAllObjectsFrom ($PRO_UID, $APP_UID, $TAS_UID, $USR_UID, $ACTION)
  * @author Erik Amaru Ortiz <*****@*****.**>
  * @access public
  * @param  Process ID, Application ID, Task ID, User ID, Action
  * @return Array within all user permitions all objects' types
  */
 public function getAllObjectsFrom($PRO_UID, $APP_UID, $TAS_UID = '', $USR_UID = '', $ACTION = '')
 {
     $aCase = $this->loadCase($APP_UID);
     $USER_PERMISSIONS = array();
     $GROUP_PERMISSIONS = array();
     $RESULT = array("DYNAFORM" => array(), "INPUT" => array(), "OUTPUT" => array(), "CASES_NOTES" => 0);
     //permissions per user
     $oCriteria = new Criteria('workflow');
     $oCriteria->add($oCriteria->getNewCriterion(ObjectPermissionPeer::USR_UID, $USR_UID)->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::USR_UID, '')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::USR_UID, '0'))));
     $oCriteria->add(ObjectPermissionPeer::PRO_UID, $PRO_UID);
     $oCriteria->add(ObjectPermissionPeer::OP_ACTION, $ACTION);
     $oCriteria->add($oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, $TAS_UID)->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '0'))));
     $oCriteria->add($oCriteria->getNewCriterion(ObjectPermissionPeer::OP_CASE_STATUS, 'ALL')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::OP_CASE_STATUS, '')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::OP_CASE_STATUS, '0'))));
     $rs = ObjectPermissionPeer::doSelectRS($oCriteria);
     $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
     $rs->next();
     while ($row = $rs->getRow()) {
         if ($aCase['APP_STATUS'] == $row['OP_CASE_STATUS'] || $row['OP_CASE_STATUS'] == '' || $row['OP_CASE_STATUS'] == 'ALL' || $row['OP_CASE_STATUS'] == '') {
             array_push($USER_PERMISSIONS, $row);
         }
         $rs->next();
     }
     //permissions per group
     G::loadClass('groups');
     $gr = new Groups();
     $records = $gr->getActiveGroupsForAnUser($USR_UID);
     foreach ($records as $group) {
         $oCriteria = new Criteria('workflow');
         $oCriteria->add(ObjectPermissionPeer::USR_UID, $group);
         $oCriteria->add(ObjectPermissionPeer::PRO_UID, $PRO_UID);
         $oCriteria->add(ObjectPermissionPeer::OP_ACTION, $ACTION);
         $oCriteria->add($oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, $TAS_UID)->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::TAS_UID, '0'))));
         $oCriteria->add($oCriteria->getNewCriterion(ObjectPermissionPeer::OP_CASE_STATUS, 'ALL')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::OP_CASE_STATUS, '')->addOr($oCriteria->getNewCriterion(ObjectPermissionPeer::OP_CASE_STATUS, '0'))));
         $rs = ObjectPermissionPeer::doSelectRS($oCriteria);
         $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
         while ($rs->next()) {
             array_push($GROUP_PERMISSIONS, $rs->getRow());
         }
     }
     $PERMISSIONS = array_merge($USER_PERMISSIONS, $GROUP_PERMISSIONS);
     foreach ($PERMISSIONS as $row) {
         $USER = $row['USR_UID'];
         $USER_RELATION = $row['OP_USER_RELATION'];
         $TASK_SOURCE = $row['OP_TASK_SOURCE'];
         $PARTICIPATE = $row['OP_PARTICIPATE'];
         $O_TYPE = $row['OP_OBJ_TYPE'];
         $O_UID = $row['OP_OBJ_UID'];
         $ACTION = $row['OP_ACTION'];
         $CASE_STATUS = $row['OP_CASE_STATUS'];
         // here!,. we should verify $PARTICIPATE
         $sw_participate = false;
         // must be false for default
         if ($row['OP_CASE_STATUS'] != 'COMPLETED' && $row['OP_CASE_STATUS'] != '' && $row['OP_CASE_STATUS'] != '0') {
             if ($PARTICIPATE == 1) {
                 $oCriteriax = new Criteria('workflow');
                 $oCriteriax->add(AppDelegationPeer::USR_UID, $USR_UID);
                 $oCriteriax->add(AppDelegationPeer::APP_UID, $APP_UID);
                 if (AppDelegationPeer::doCount($oCriteriax) == 0) {
                     $sw_participate = true;
                 }
             }
         }
         if (!$sw_participate) {
             switch ($O_TYPE) {
                 case 'ANY':
                     //for dynaforms
                     $oCriteria = new Criteria('workflow');
                     $oCriteria->add(ApplicationPeer::APP_UID, $APP_UID);
                     $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID);
                     $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID);
                     if ($aCase['APP_STATUS'] != 'COMPLETED') {
                         if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {
                             $oCriteria->add(StepPeer::TAS_UID, $TASK_SOURCE);
                         }
                     }
                     $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM');
                     $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION);
                     $oCriteria->setDistinct();
                     $oDataset = DynaformPeer::doSelectRS($oCriteria);
                     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
                     $oDataset->next();
                     while ($aRow = $oDataset->getRow()) {
                         if (!in_array($aRow['DYN_UID'], $RESULT['DYNAFORM'])) {
                             array_push($RESULT['DYNAFORM'], $aRow['DYN_UID']);
                         }
                         $oDataset->next();
                     }
                     //inputs
                     $oCriteria = new Criteria('workflow');
                     $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);
                     $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);
                     $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);
                     $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);
                     if ($aCase['APP_STATUS'] != 'COMPLETED') {
                         if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {
                             $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);
                         }
                     }
                     $oCriteria->add($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'INPUT')->addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'))->addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED')));
                     $aConditions = array();
                     $aConditions[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID);
                     $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX);
                     $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
                     $oDataset = DynaformPeer::doSelectRS($oCriteria);
                     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
                     $oDataset->next();
                     while ($aRow = $oDataset->getRow()) {
                         if ($aRow['APP_DOC_TYPE'] == "ATTACHED") {
                             $aRow['APP_DOC_TYPE'] = "INPUT";
                         }
                         if (!in_array($aRow['APP_DOC_UID'], $RESULT[$aRow['APP_DOC_TYPE']])) {
                             array_push($RESULT[$aRow['APP_DOC_TYPE']], $aRow['APP_DOC_UID']);
                         }
                         $oDataset->next();
                     }
                     $RESULT['CASES_NOTES'] = 1;
                     break;
                 case 'DYNAFORM':
                     $oCriteria = new Criteria('workflow');
                     $oCriteria->add(ApplicationPeer::APP_UID, $APP_UID);
                     if ($aCase['APP_STATUS'] != 'COMPLETED') {
                         if ($TASK_SOURCE != '' && $TASK_SOURCE != "0") {
                             $oCriteria->add(StepPeer::TAS_UID, $TASK_SOURCE);
                         }
                     }
                     if ($O_UID != '' && $O_UID != '0') {
                         $oCriteria->add(DynaformPeer::DYN_UID, $O_UID);
                     }
                     $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID);
                     $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID);
                     $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM');
                     $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION);
                     $oCriteria->setDistinct();
                     $oDataset = DynaformPeer::doSelectRS($oCriteria);
                     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
                     $oDataset->next();
                     while ($aRow = $oDataset->getRow()) {
                         if (!in_array($aRow['DYN_UID'], $RESULT['DYNAFORM'])) {
                             array_push($RESULT['DYNAFORM'], $aRow['DYN_UID']);
                         }
                         $oDataset->next();
                     }
                     break;
                 case 'INPUT':
                 case 'OUTPUT':
                     if ($row['OP_OBJ_TYPE'] == 'INPUT') {
                         $obj_type = 'INPUT';
                     } else {
                         $obj_type = 'OUTPUT';
                     }
                     $oCriteria = new Criteria('workflow');
                     $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);
                     $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);
                     $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID);
                     $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID);
                     if ($aCase['APP_STATUS'] != 'COMPLETED') {
                         if ($TASK_SOURCE != '' && $TASK_SOURCE != "0" && $TASK_SOURCE != 0) {
                             $oCriteria->add(AppDelegationPeer::TAS_UID, $TASK_SOURCE);
                         }
                     }
                     if ($O_UID != '' && $O_UID != '0') {
                         $oCriteria->add(AppDocumentPeer::DOC_UID, $O_UID);
                     }
                     if ($obj_type == 'INPUT') {
                         $oCriteria->add($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, $obj_type)->addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED')));
                     } else {
                         $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, $obj_type);
                     }
                     $aConditions = array();
                     $aConditions[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID);
                     $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX);
                     $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
                     $oDataset = DynaformPeer::doSelectRS($oCriteria);
                     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
                     $oDataset->next();
                     while ($aRow = $oDataset->getRow()) {
                         if (!in_array($aRow['APP_DOC_UID'], $RESULT[$obj_type])) {
                             array_push($RESULT[$obj_type], $aRow['APP_DOC_UID']);
                         }
                         $oDataset->next();
                     }
                     break;
                 case 'CASES_NOTES':
                     $RESULT['CASES_NOTES'] = 1;
                     break;
             }
         }
     }
     return array("DYNAFORMS" => $RESULT['DYNAFORM'], "INPUT_DOCUMENTS" => $RESULT['INPUT'], "OUTPUT_DOCUMENTS" => $RESULT['OUTPUT'], "CASES_NOTES" => $RESULT['CASES_NOTES']);
 }
 /**
  * Method to do selects.
  *
  * @param      Criteria $criteria The Criteria object used to build the SELECT statement.
  * @param      Connection $con
  * @return     array Array of selected Objects
  * @throws     PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function doSelect(Criteria $criteria, $con = null)
 {
     return ObjectPermissionPeer::populateObjects(ObjectPermissionPeer::doSelectRS($criteria, $con));
 }
 function loadInfo($sObjUID)
 {
     $oCriteria = new Criteria('workflow');
     $oCriteria->add(ObjectPermissionPeer::OP_OBJ_UID, $sObjUID);
     $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria);
     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
     $oDataset->next();
     $aRow = $oDataset->getRow();
     return $aRow;
 }
 /**
  * verify if a dynaform is assigned some steps
  *
  * @param string $proUid the uid of the process
  * @param string $dynUid the uid of the dynaform
  *
  * @return array
  */
 public function verifyDynaformAssigObjectPermission($dynUid, $proUid)
 {
     $res = array();
     $oCriteria = new Criteria();
     $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_UID);
     $oCriteria->add(ObjectPermissionPeer::PRO_UID, $proUid);
     $oCriteria->add(ObjectPermissionPeer::OP_OBJ_UID, $dynUid);
     $oCriteria->add(ObjectPermissionPeer::OP_OBJ_TYPE, 'DYNAFORM');
     $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria);
     $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
     while ($oDataset->next()) {
         $res[] = $oDataset->getRow();
     }
     return $res;
 }