Merge remote-tracking branch 'upstream/3.1' into HOR-998

This commit is contained in:
dheeyi william
2016-07-19 10:12:49 -04:00
60 changed files with 1659 additions and 915 deletions

View File

@@ -493,7 +493,7 @@ class InputDocument
*
* return array Return an array with data of an InputDocument
*/
public function addCasesInputDocument($applicationUid, $taskUid, $appDocComment, $inputDocumentUid, $userUid)
public function addCasesInputDocument($applicationUid, $taskUid, $appDocComment, $inputDocumentUid, $userUid, $runningWorkflow = true)
{
try {
if ((isset( $_FILES['form'] )) && ($_FILES['form']['error'] != 0)) {
@@ -535,7 +535,60 @@ class InputDocument
$appDocType = 'INPUT';
$case = new \Cases();
$delIndex = \AppDelegation::getCurrentIndex($applicationUid);
$case->thisIsTheCurrentUser($applicationUid, $delIndex, $userUid, "REDIRECT", "casesListExtJs");
if ($runningWorkflow) {
$case->thisIsTheCurrentUser($applicationUid, $delIndex, $userUid, 'REDIRECT', 'casesListExtJs');
} else {
$criteria = new \Criteria('workflow');
$criteria->add(\AppDelegationPeer::APP_UID, $applicationUid);
$criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex);
$criteria->add(\AppDelegationPeer::USR_UID, $userUid);
$rsCriteria = \ProcessUserPeer::doSelectRS($criteria);
if (!$rsCriteria->next()) {
$case2 = new \ProcessMaker\BusinessModel\Cases();
$arrayApplicationData = $case2->getApplicationRecordByPk($applicationUid, [], false);
$msg = '';
$supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
$flagps = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $userUid);
if ($flagps == false) {
$msg = \G::LoadTranslation('ID_USER_NOT_IT_BELONGS_CASE_OR_NOT_SUPERVISOR');
}
if ($msg == '') {
$criteria = new \Criteria('workflow');
$criteria->add(\StepSupervisorPeer::PRO_UID, $arrayApplicationData['PRO_UID'], \Criteria::EQUAL);
$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()) {
$msg = \G::LoadTranslation('ID_USER_IS_SUPERVISOR_DOES_NOT_ASSOCIATED_INPUT_DOCUMENT');
}
}
if ($msg != '') {
if ($runningWorkflow) {
\G::SendMessageText($msg, 'ERROR');
$backUrlObj = explode('sys' . SYS_SYS, $_SERVER['HTTP_REFERER']);
\G::header('location: ' . '/sys' . SYS_SYS . $backUrlObj[1]);
exit(0);
} else {
throw new \Exception($msg);
}
}
}
}
//Load the fields
$arrayField = $case->loadCase($applicationUid);
$arrayField["APP_DATA"] = array_merge($arrayField["APP_DATA"], \G::getSystemConstants());

View File

@@ -179,10 +179,13 @@ class NotificationDevice
}
$userIds = $arrayTaskUser;
//sub process
$taskAssignType = (isset($nextDel["TAS_ASSIGN_TYPE"])) ? $nextDel["TAS_ASSIGN_TYPE"] : $nextDel["SP_TYPE"];
$message = '#' . $appFields['APP_NUMBER'] . ' : ' . $appFields['APP_TITLE'];
$data = array(
'processId' => $appFields['PRO_UID'],
'taskId' => $nextDel["TAS_UID"],
'taskAssignType' => $taskAssignType,
'caseId' => $appFields['APP_UID'],
'caseTitle' => $appFields['APP_TITLE'],
'delIndex' => $iNewDelIndex,
@@ -281,5 +284,4 @@ class NotificationDevice
return $arrayTaskUser;
}
}

View File

@@ -100,17 +100,19 @@ class PushMessageIOS
// $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
// if (!$fp)
// exit("Failed to connect: $err $errstr" . PHP_EOL);
$alert = new \stdClass();
$alert->{'loc-key'} = $data['taskAssignType'];
$alert->{'loc-args'} = array($message);
// Create the payload body
if (!is_null($data)) {
$body['aps'] = array(
'alert' => $message,
'alert' => $alert,
'sound' => 'default',
'data' => $data
);
} else {
$body['aps'] = array(
'alert' => $message,
'alert' => $alert,
'sound' => 'default'
);
}

View File

@@ -1523,5 +1523,57 @@ class ProcessSupervisor
$oCriteria->setStepPosition($pos);
$oCriteria->save();
}
}
/**
* Validate if the user is supervisor of the process
*
* @param string $projectUid Unique id of process
* @param string $userUid Unique id of User
*
* @return bool Return
*/
public function isUserProcessSupervisor($projectUid, $userUid)
{
try {
$criteria = new \Criteria('workflow');
$criteria->add(\ProcessUserPeer::USR_UID, $userUid, \Criteria::EQUAL);
$criteria->add(\ProcessUserPeer::PRO_UID, $projectUid, \Criteria::EQUAL);
$criteria->add(\ProcessUserPeer::PU_TYPE, 'SUPERVISOR', \Criteria::EQUAL);
$rsCriteria = \ProcessUserPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
return true;
}
$criteria = new \Criteria('workflow');
$criteria->addSelectColumn(\ProcessUserPeer::USR_UID);
$criteria->add(\ProcessUserPeer::PRO_UID, $projectUid, \Criteria::EQUAL);
$criteria->add(\ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR', \Criteria::EQUAL);
$rsCriteria = \ProcessUserPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$record = $rsCriteria->getRow();
$groupUid = $record['USR_UID'];
$obj = \GroupUserPeer::retrieveByPK($groupUid, $userUid);
if (!is_null($obj)) {
return true;
}
}
//Return
return false;
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -150,8 +150,12 @@ class Table
*
* @return array
*/
public function getTableData($tab_uid, $pro_uid = '', $reportFlag = false)
public function getTableData($tab_uid, $pro_uid = '', $filter = null, $reportFlag = false)
{
//Validation
$inputFilter = new \InputFilter();
$filter = $inputFilter->sanitizeInputValue($filter, 'nosql');
//VALIDATION
if ($reportFlag) {
$pro_uid = $this->validateProUid($pro_uid);
@@ -160,7 +164,7 @@ class Table
$additionalTables = new AdditionalTables();
$table = $additionalTables->load($tab_uid, true);
$result = $additionalTables->getAllData($tab_uid);
$result = $additionalTables->getAllData($tab_uid, null, null, null, $filter);
$primaryKeys = $additionalTables->getPrimaryKeys();
if (is_array($result['rows'])) {
foreach ($result['rows'] as $i => $row) {

View File

@@ -922,6 +922,7 @@ class Variable
$sqlOrderBy = " ORDER BY " . $sFieldSel;
}
$start = 0;
$sqlLimit = "";
if ($start >= 0) {
$sqlLimit = " LIMIT " . $start;
@@ -943,17 +944,43 @@ class Variable
$row = $ds->getRow();
if (isset($row["DBS_TYPE"])) {
if ($row["DBS_TYPE"] === "pgsql") {
$sqlLimit = $this->limitPgsql($start, $limit);
if ($start >= 0) {
$sqlLimit = " OFFSET " . $start;
}
if ($limit !== "") {
$sqlLimit = $sqlLimit . " LIMIT " . $limit;
}
}
if ($row["DBS_TYPE"] === "mssql") {
return $this->limitMssqlOracle($sqlSelect, $sqlFrom, $sqlWhere, $sqlGroupBy, $sqlHaving, $sqlOrderBy, $start, $limit, true);
$sqlLimit = "";
if ($limit !== "") {
$wordsSearch = [" DISTINCT ", " ALL "];
$wordsSearchCount = count($wordsSearch);
for ($i = 0; $i < $wordsSearchCount; $i++) {
$stringSearch = $wordsSearch[$i];
$stringPosition = strpos($sqlSelect, $stringSearch);
if ($stringPosition !== false) {
$stringLength = strlen($stringSearch);
$string1 = substr($sqlSelect, 0, $stringPosition + $stringLength);
$string2 = substr($sqlSelect, $stringPosition + $stringLength);
$sqlSelect = $string1 . "TOP(" . $limit . ") " . $string2;
}
}
}
}
if ($row["DBS_TYPE"] === "oracle") {
return $this->limitMssqlOracle($sqlSelect, $sqlFrom, $sqlWhere, $sqlGroupBy, $sqlHaving, $sqlOrderBy, $start, $limit, false);
$sqlLimit = "";
if ($limit !== "") {
if (strpos($sqlWhere, "WHERE ") === false) {
$sqlWhere = " WHERE ROWNUM <= " . $limit;
} else {
$sqlWhere = $sqlWhere . " AND ROWNUM <= " . $limit;
}
}
}
}
return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . $sqlOrderBy . $sqlLimit;
return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . " " . $sqlOrderBy . $sqlLimit;
}
if (!empty($sqlParsed['CALL'])) {
$sCall = "CALL ";
@@ -981,36 +1008,6 @@ class Variable
}
}
public function limitPgsql($start = 0, $limit = "")
{
$sqlLimit = "";
if ($start >= 0) {
$sqlLimit = " OFFSET " . $start;
}
if ($limit !== "") {
$sqlLimit = $sqlLimit . " LIMIT " . $limit;
}
return $sqlLimit;
}
public function limitMssqlOracle($sqlSelect = "", $sqlFrom = "", $sqlWhere = "", $sqlGroupBy = "", $sqlHaving = "", $sqlOrderBy = "", $start = 0, $limit = "", $isMssql = true)
{
$sqlLimit = "";
if ($start >= 0) {
$sqlLimit = "WHERE rn >= " . $start;
}
if ($start >= 0 && $limit != "") {
$sqlLimit = "WHERE rn BETWEEN " . $start . " AND " . $limit;
}
$sql = ""
. "SELECT * FROM ("
. " " . $sqlSelect . ", ROW_NUMBER() OVER( " . $sqlOrderBy . " desc )-1 " . ($isMssql ? " AS " : "") . " rn "
. " " . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving
. ")" . ($isMssql ? " AS A " : "")
. $sqlLimit;
return $sql;
}
public function getVariableTypeByName($processUid, $variableName)
{
try {