/** * Get list for Process Permissions * * @var string $pro_uid. Uid for Process * @var string $op_uid. Uid for Process Permission * * @access public * @author Brayan Pereyra (Cochalo) <*****@*****.**> * @copyright Colosa - Bolivia * * @return array */ public function getProcessPermissions($pro_uid, $op_uid = '') { $pro_uid = $this->validateProUid($pro_uid); if ($op_uid != '') { $op_uid = $this->validateOpUid($op_uid); } G::LoadClass('case'); Cases::verifyTable(); $aObjectsPermissions = array(); $oCriteria = new \Criteria('workflow'); $oCriteria->add(ObjectPermissionPeer::PRO_UID, $pro_uid); if ($op_uid != '') { $oCriteria->add(ObjectPermissionPeer::OP_UID, $op_uid); } $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { //Obtain task target if ($aRow['TAS_UID'] != '' && $aRow['TAS_UID'] != '0') { try { $oTask = new \Task(); $aFields = $oTask->load($aRow['TAS_UID']); $sTaskTarget = $aFields['TAS_TITLE']; } catch (\Exception $oError) { $sTaskTarget = 'All Tasks'; } } else { $sTaskTarget = G::LoadTranslation('ID_ANY_TASK'); } //Obtain user or group if ($aRow['OP_USER_RELATION'] == 1) { $oUser = new \Users(); $aFields = $oUser->load($aRow['USR_UID']); $sUserGroup = $aFields['USR_FIRSTNAME'] . ' ' . $aFields['USR_LASTNAME'] . ' (' . $aFields['USR_USERNAME'] . ')'; } else { $oGroup = new \Groupwf(); if ($aRow['USR_UID'] != '') { try { $aFields = $oGroup->load($aRow['USR_UID']); $sUserGroup = $aFields['GRP_TITLE']; } catch (\Exception $oError) { $sUserGroup = '(GROUP DELETED)'; } } else { $sUserGroup = G::LoadTranslation('ID_ANY'); } } //Obtain task source if ($aRow['OP_TASK_SOURCE'] != '' && $aRow['OP_TASK_SOURCE'] != '0') { try { $oTask = new \Task(); $aFields = $oTask->load($aRow['OP_TASK_SOURCE']); $sTaskSource = $aFields['TAS_TITLE']; } catch (\Exception $oError) { $sTaskSource = 'All Tasks'; } } else { $sTaskSource = G::LoadTranslation('ID_ANY_TASK'); } //Obtain object and type switch ($aRow['OP_OBJ_TYPE']) { case 'ALL': $sObjectType = G::LoadTranslation('ID_ALL'); $sObject = G::LoadTranslation('ID_ALL'); break; case 'ANY': //For backward compatibility (some process with ANY instead of ALL $sObjectType = G::LoadTranslation('ID_ALL'); $sObject = G::LoadTranslation('ID_ALL'); break; /* case 'ANY_DYNAFORM': $sObjectType = G::LoadTranslation('ID_ANY_DYNAFORM'); $sObject = G::LoadTranslation('ID_ALL'); break; case 'ANY_INPUT': $sObjectType = G::LoadTranslation('ID_ANY_INPUT'); $sObject = G::LoadTranslation('ID_ALL'); break; case 'ANY_OUTPUT': $sObjectType = G::LoadTranslation('ID_ANY_OUTPUT'); $sObject = G::LoadTranslation('ID_ALL'); break; */ /* case 'ANY_DYNAFORM': $sObjectType = G::LoadTranslation('ID_ANY_DYNAFORM'); $sObject = G::LoadTranslation('ID_ALL'); break; case 'ANY_INPUT': $sObjectType = G::LoadTranslation('ID_ANY_INPUT'); $sObject = G::LoadTranslation('ID_ALL'); break; case 'ANY_OUTPUT': $sObjectType = G::LoadTranslation('ID_ANY_OUTPUT'); $sObject = G::LoadTranslation('ID_ALL'); break; */ case 'DYNAFORM': $sObjectType = G::LoadTranslation('ID_DYNAFORM'); if ($aRow['OP_OBJ_UID'] != '' && $aRow['OP_OBJ_UID'] != '0') { $oDynaform = new \Dynaform(); $aFields = $oDynaform->load($aRow['OP_OBJ_UID']); $sObject = $aFields['DYN_TITLE']; } else { $sObject = G::LoadTranslation('ID_ALL'); } break; case 'INPUT': $sObjectType = G::LoadTranslation('ID_INPUT_DOCUMENT'); if ($aRow['OP_OBJ_UID'] != '' && $aRow['OP_OBJ_UID'] != '0') { $oInputDocument = new \InputDocument(); $aFields = $oInputDocument->load($aRow['OP_OBJ_UID']); $sObject = $aFields['INP_DOC_TITLE']; } else { $sObject = G::LoadTranslation('ID_ALL'); } break; case 'OUTPUT': $sObjectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT'); if ($aRow['OP_OBJ_UID'] != '' && $aRow['OP_OBJ_UID'] != '0') { $oOutputDocument = new \OutputDocument(); $aFields = $oOutputDocument->load($aRow['OP_OBJ_UID']); $sObject = $aFields['OUT_DOC_TITLE']; } else { $sObject = G::LoadTranslation('ID_ALL'); } break; case 'CASES_NOTES': $sObjectType = G::LoadTranslation('ID_CASES_NOTES'); $sObject = 'N/A'; break; case 'MSGS_HISTORY': $sObjectType = G::LoadTranslation('MSGS_HISTORY'); $sObject = G::LoadTranslation('ID_ALL'); break; default: $sObjectType = G::LoadTranslation('ID_ALL'); $sObject = G::LoadTranslation('ID_ALL'); break; } //Participated if ($aRow['OP_PARTICIPATE'] == 0) { $sParticipated = G::LoadTranslation('ID_NO'); } else { $sParticipated = G::LoadTranslation('ID_YES'); } //Obtain action (permission) $sAction = G::LoadTranslation('ID_' . $aRow['OP_ACTION']); //Add to array $arrayTemp = array(); $arrayTemp = array_merge($aRow, array('OP_UID' => $aRow['OP_UID'], 'TASK_TARGET' => $sTaskTarget, 'GROUP_USER' => $sUserGroup, 'TASK_SOURCE' => $sTaskSource, 'OBJECT_TYPE' => $sObjectType, 'OBJECT' => $sObject, 'PARTICIPATED' => $sParticipated, 'ACTION' => $sAction, 'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS'])); $aObjectsPermissions[] = array_change_key_case($arrayTemp, CASE_LOWER); $oDataset->next(); } if ($op_uid != '' && empty($aObjectsPermissions)) { throw new \Exception(\G::LoadTranslation("ID_ROW_DOES_NOT_EXIST")); } elseif ($op_uid != '' && !empty($aObjectsPermissions)) { $aObjectsPermissions = array_change_key_case($aObjectsPermissions, CASE_LOWER); return current($aObjectsPermissions); } $aObjectsPermissions = array_change_key_case($aObjectsPermissions, CASE_LOWER); return $aObjectsPermissions; }
public function getAllGeneratedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID) { \G::LoadClass("configuration"); $conf = new \Configurations(); $confEnvSetting = $conf->getFormats(); //verifica si la tabla OBJECT_PERMISSION $cases = new \cases(); $cases->verifyTable(); $listing = false; $oPluginRegistry = & \PMPluginRegistry::getSingleton(); if ($oPluginRegistry->existsTrigger(PM_CASE_DOCUMENT_LIST)) { $folderData = new \folderData(null, null, $sApplicationUID, null, $sUserUID); $folderData->PMType = "OUTPUT"; $folderData->returnList = true; //$oPluginRegistry = & PMPluginRegistry::getSingleton(); $listing = $oPluginRegistry->executeTriggers(PM_CASE_DOCUMENT_LIST, $folderData); } $aObjectPermissions = $cases->getAllObjects($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID); if (!is_array($aObjectPermissions)) { $aObjectPermissions = array('DYNAFORMS' => array(-1),'INPUT_DOCUMENTS' => array(-1),'OUTPUT_DOCUMENTS' => array(-1)); } if (!isset($aObjectPermissions['DYNAFORMS'])) { $aObjectPermissions['DYNAFORMS'] = array(-1); } else { if (!is_array($aObjectPermissions['DYNAFORMS'])) { $aObjectPermissions['DYNAFORMS'] = array(-1); } } if (!isset($aObjectPermissions['INPUT_DOCUMENTS'])) { $aObjectPermissions['INPUT_DOCUMENTS'] = array(-1); } else { if (!is_array($aObjectPermissions['INPUT_DOCUMENTS'])) { $aObjectPermissions['INPUT_DOCUMENTS'] = array(-1); } } if (!isset($aObjectPermissions['OUTPUT_DOCUMENTS'])) { $aObjectPermissions['OUTPUT_DOCUMENTS'] = array(-1); } else { if (!is_array($aObjectPermissions['OUTPUT_DOCUMENTS'])) { $aObjectPermissions['OUTPUT_DOCUMENTS'] = array(-1); } } $aDelete = $cases->getAllObjectsFrom($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID, 'DELETE'); $oAppDocument = new \AppDocument(); $oCriteria = new \Criteria('workflow'); $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); //$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], \Criteria::IN)->addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, $sUserUID, \Criteria::EQUAL)) ); $aConditions = array(); $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aOutputDocuments = array(); $aOutputDocuments[] = array( 'APP_DOC_UID' => 'char', 'DOC_UID' => 'char', 'APP_DOC_COMMENT' => 'char', 'APP_DOC_FILENAME' => 'char', 'APP_DOC_INDEX' => 'integer' ); $oUser = new \Users(); while ($aRow = $oDataset->getRow()) { $oCriteria2 = new \Criteria('workflow'); $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); $oTask = new \Task(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { $aTask = array('TAS_TITLE' => '(TASK DELETED)'); } $lastVersion = $oAppDocument->getLastDocVersion($aRow['DOC_UID'], $sApplicationUID); if ($lastVersion == $aRow['DOC_VERSION']) { //Only show last document Version $aAux = $oAppDocument->load($aRow['APP_DOC_UID'], $aRow['DOC_VERSION']); //Get output Document information $oOutputDocument = new \OutputDocument(); $aGields = $oOutputDocument->load($aRow['DOC_UID']); //OUTPUTDOCUMENT $outDocTitle = $aGields['OUT_DOC_TITLE']; switch ($aGields['OUT_DOC_GENERATE']) { //G::LoadTranslation(ID_DOWNLOAD) case "PDF": $fileDoc = 'javascript:alert("NO DOC")'; $fileDocLabel = " "; $filePdf = 'cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=pdf&random=' . rand(); $filePdfLabel = ".pdf"; if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "PDF")) { $filePdfLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; $filePdf = $folderitem->downloadScript; continue; } } } break; case "DOC": $fileDoc = 'cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=doc&random=' . rand(); $fileDocLabel = ".doc"; $filePdf = 'javascript:alert("NO PDF")'; $filePdfLabel = " "; if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "DOC")) { $fileDocLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .doc"; $fileDoc = $folderitem->downloadScript; continue; } } } break; case "BOTH": $fileDoc = 'cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=doc&random=' . rand(); $fileDocLabel = ".doc"; if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "DOC")) { $fileDocLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .doc"; $fileDoc = $folderitem->downloadScript; continue; } } } $filePdf = 'cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=pdf&random=' . rand(); $filePdfLabel = ".pdf"; if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "PDF")) { $filePdfLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; $filePdf = $folderitem->downloadScript; continue; } } } break; } try { $aAux1 = $oUser->load($aAux['USR_UID']); $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (\Exception $oException) { $sUser = '******'; } //if both documents were generated, we choose the pdf one, only if doc was //generate then choose the doc file. $firstDocLink = $filePdf; $firstDocLabel = $filePdfLabel; if ($aGields['OUT_DOC_GENERATE'] == 'DOC') { $firstDocLink = $fileDoc; $firstDocLabel = $fileDocLabel; } $aFields = array( 'APP_DOC_UID' => $aAux['APP_DOC_UID'], 'DOC_UID' => $aAux['DOC_UID'], 'APP_DOC_COMMENT' => $aAux['APP_DOC_COMMENT'], 'APP_DOC_FILENAME' => $aAux['APP_DOC_FILENAME'], 'APP_DOC_INDEX' => $aAux['APP_DOC_INDEX'], 'ORIGIN' => $aTask['TAS_TITLE'], 'CREATE_DATE' => $aAux['APP_DOC_CREATE_DATE'], 'CREATED_BY' => $sUser, 'FILEDOC' => $fileDoc, 'FILEPDF' => $filePdf, 'OUTDOCTITLE' => $outDocTitle, 'DOC_VERSION' => $aAux['DOC_VERSION'], 'TYPE' => $aAux['APP_DOC_TYPE'] . ' ' . $aGields['OUT_DOC_GENERATE'], 'DOWNLOAD_LINK' => $firstDocLink, 'DOWNLOAD_FILE' => $aAux['APP_DOC_FILENAME'] . $firstDocLabel ); if (trim($fileDocLabel) != '') { $aFields['FILEDOCLABEL'] = $fileDocLabel; } if (trim($filePdfLabel) != '') { $aFields['FILEPDFLABEL'] = $filePdfLabel; } if ($aFields['APP_DOC_FILENAME'] != '') { $aFields['TITLE'] = $aFields['APP_DOC_FILENAME']; } else { $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aObjectPermissions['OUTPUT_DOCUMENTS'])) { if (in_array($aRow['APP_DOC_UID'], $aDelete['OUTPUT_DOCUMENTS'])) { $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); } } $aOutputDocuments[] = $aFields; } $oDataset->next(); } global $_DBArray; $_DBArray['outputDocuments'] = $aOutputDocuments; \G::LoadClass('ArrayPeer'); $oCriteria = new \Criteria('dbarray'); $oCriteria->setDBArrayTable('outputDocuments'); $oCriteria->addDescendingOrderByColumn('CREATE_DATE'); return $oCriteria; }
/** * Delete a output document of a project * * @param string $sProcessUID * @param string $sOutputDocumentUID * * @access public */ public function deleteOutputDocument($sProcessUID, $sOutputDocumentUID) { try { require_once PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "OutputDocument.php"; require_once PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "ObjectPermission.php"; require_once PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Step.php"; $this->throwExceptionIfItsAssignedInOtherObjects($sOutputDocumentUID, "outputDocumentUid"); \G::LoadClass('processMap'); $oOutputDocument = new \OutputDocument(); $fields = $oOutputDocument->load($sOutputDocumentUID); $oOutputDocument->remove($sOutputDocumentUID); $oStep = new \Step(); $oStep->removeStep('OUTPUT_DOCUMENT', $sOutputDocumentUID); $oOP = new \ObjectPermission(); $oOP->removeByObject('OUTPUT', $sOutputDocumentUID); //refresh dbarray with the last change in outputDocument $oMap = new \processMap(); $oCriteria = $oMap->getOutputDocumentsCriteria($fields['PRO_UID']); } catch (\Exception $e) { throw $e; } }