Merge branch 'develop' of bitbucket.org:colosa/processmaker into bugfix/PMCORE-1335
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use ProcessMaker\BusinessModel\Task as BusinessModelTask;
|
||||
use ProcessMaker\BusinessModel\User as BusinessModelUser;
|
||||
use ProcessMaker\BusinessModel\WebEntryEvent;
|
||||
use ProcessMaker\Cases\CasesTrait;
|
||||
@@ -110,14 +111,16 @@ class Cases
|
||||
}
|
||||
|
||||
/**
|
||||
* get user starting tasks
|
||||
* @param string $sUIDUser
|
||||
* @return $rows
|
||||
* Get user's starting tasks
|
||||
*
|
||||
* @param string $uidUser
|
||||
* @param bool $withoutDummyTasks
|
||||
* @return array
|
||||
*/
|
||||
public function getStartCases($sUIDUser = '')
|
||||
public function getStartCases($uidUser = '', $withoutDummyTasks = false)
|
||||
{
|
||||
$rows[] = array('uid' => 'char', 'value' => 'char');
|
||||
$tasks = array();
|
||||
$rows = [['uid' => 'char', 'value' => 'char']];
|
||||
$tasks = [];
|
||||
|
||||
$c = new Criteria();
|
||||
$c->clearSelectColumns();
|
||||
@@ -127,7 +130,7 @@ class Cases
|
||||
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
|
||||
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
|
||||
$c->add(TaskPeer::TAS_START, 'TRUE');
|
||||
$c->add(TaskUserPeer::USR_UID, $sUIDUser);
|
||||
$c->add(TaskUserPeer::USR_UID, $uidUser);
|
||||
$c->add(TaskUserPeer::TU_TYPE, 1);
|
||||
$rs = TaskPeer::doSelectRS($c);
|
||||
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
@@ -142,7 +145,7 @@ class Cases
|
||||
|
||||
//check groups
|
||||
$group = new Groups();
|
||||
$aGroups = $group->getActiveGroupsForAnUser($sUIDUser);
|
||||
$groups = $group->getActiveGroupsForAnUser($uidUser);
|
||||
|
||||
$c = new Criteria();
|
||||
$c->clearSelectColumns();
|
||||
@@ -152,7 +155,7 @@ class Cases
|
||||
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
|
||||
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
|
||||
$c->add(TaskPeer::TAS_START, 'TRUE');
|
||||
$c->add(TaskUserPeer::USR_UID, $aGroups, Criteria::IN);
|
||||
$c->add(TaskUserPeer::USR_UID, $groups, Criteria::IN);
|
||||
$c->add(TaskUserPeer::TU_TYPE, 1);
|
||||
$rs = TaskPeer::doSelectRS($c);
|
||||
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
@@ -172,17 +175,21 @@ class Cases
|
||||
$c->addSelectColumn(ProcessPeer::PRO_TITLE);
|
||||
$c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
|
||||
$c->add(TaskPeer::TAS_UID, $tasks, Criteria::IN);
|
||||
// Include or not the dummy tasks
|
||||
if ($withoutDummyTasks) {
|
||||
$c->add(TaskPeer::TAS_TYPE, BusinessModelTask::getDummyTypes(), Criteria::NOT_IN);
|
||||
}
|
||||
$c->addAscendingOrderByColumn(ProcessPeer::PRO_TITLE);
|
||||
$c->addAscendingOrderByColumn(TaskPeer::TAS_TITLE);
|
||||
$rs = TaskPeer::doSelectRS($c);
|
||||
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
while ($row = $rs->getRow()) {
|
||||
$rows[] = array(
|
||||
$rows[] = [
|
||||
'uid' => $row['TAS_UID'],
|
||||
'value' => $row['PRO_TITLE'] . ' (' . $row['TAS_TITLE'] . ')',
|
||||
'pro_uid' => $row['PRO_UID']
|
||||
);
|
||||
];
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
|
||||
@@ -226,16 +226,11 @@ class DbConnections
|
||||
// Not TNS, build a standard configuration
|
||||
$dbsPort = ($externalDb->DBS_PORT == '') ? ('') : (':' . $externalDb->DBS_PORT);
|
||||
$encoding = (trim($externalDb->DBS_ENCODE) == '') ? '' : '?encoding=' . $externalDb->DBS_ENCODE;
|
||||
if (strpos($externalDb->DBS_SERVER, "\\") && $externalDb->DBS_TYPE == 'mssql') {
|
||||
// This is a microsoft SQL server which is using a netbios connection string
|
||||
$conf['datasources'][$externalDb->DBS_UID]['connection'] = $externalDb->DBS_TYPE . '://'
|
||||
. $externalDb->DBS_USERNAME . ':' . $passw . '@' . $externalDb->DBS_SERVER . '/'
|
||||
. $externalDb->DBS_DATABASE_NAME . $encoding;
|
||||
} else {
|
||||
$conf['datasources'][$externalDb->DBS_UID]['connection'] = $externalDb->DBS_TYPE . '://'
|
||||
. $externalDb->DBS_USERNAME . ':' . $passw . '@' . $externalDb->DBS_SERVER . $dbsPort . '/'
|
||||
. $externalDb->DBS_DATABASE_NAME . $encoding;
|
||||
}
|
||||
|
||||
$conf['datasources'][$externalDb->DBS_UID]['connection'] = $externalDb->DBS_TYPE . '://'
|
||||
. $externalDb->DBS_USERNAME . ':' . $passw . '@' . $externalDb->DBS_SERVER . $dbsPort . '/'
|
||||
. $externalDb->DBS_DATABASE_NAME . $encoding;
|
||||
|
||||
$laravelConfig = [
|
||||
'driver' => $externalDb->DBS_TYPE === 'mssql' ? 'sqlsrv' : $externalDb->DBS_TYPE, // MSSQL driver is not supported anymore, only SQLSRV
|
||||
'host' => $externalDb->DBS_SERVER,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use ProcessMaker\Core\System;
|
||||
use ProcessMaker\BusinessModel\DynaForm\SuggestTrait;
|
||||
use ProcessMaker\BusinessModel\Cases;
|
||||
@@ -1043,6 +1044,16 @@ class PmDynaform
|
||||
$dt[$key]["alias"] = "";
|
||||
}
|
||||
if ($key == 0) {
|
||||
//compatibility with table name alias when uses the sentence 'AS'
|
||||
if (strtoupper($dt[$key]["alias"]) === 'AS') {
|
||||
$parser = new Parser($sql);
|
||||
if (isset($parser->statements[$key]) && isset($parser->statements[$key]->from[$key])) {
|
||||
$obj1 = $parser->statements[$key]->from[$key];
|
||||
if (!empty($obj1->alias)) {
|
||||
$dt[$key]["alias"] = $dt[$key]["alias"] . ' ' . $obj1->alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
$from .= $dt[$key]["table"]
|
||||
. ($dt[$key]["table"] == $dt[$key]["alias"] ? "" : " " . $dt[$key]["alias"]);
|
||||
} else {
|
||||
|
||||
@@ -270,7 +270,8 @@ class AppDelegation extends BaseAppDelegation
|
||||
if ($resultAbe->next()) {
|
||||
$dataAbe = $resultAbe->getRow();
|
||||
$flagActionsByEmail = false;
|
||||
if ($dataAbe['ABE_TYPE']!='' && $data->USR_UID!='') {
|
||||
// These validations are important for the the action by email
|
||||
if (!empty($dataAbe['ABE_TYPE']) && !empty($data->USR_UID) && $data->DEL_INDEX > 1) {
|
||||
$actionsByEmail = new ActionsByEmailCoreClass();
|
||||
$actionsByEmail->sendActionsByEmail($data, $dataAbe);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ global $RBAC;
|
||||
$rbacUser = new RbacUsers();
|
||||
$user = new Users();
|
||||
$data['USR_USERNAME'] = strip_tags($data['USR_USERNAME']);
|
||||
$data['USR_EMAIL'] = strtolower($data['USR_EMAIL']);
|
||||
$userData = $rbacUser->getByUsername($data['USR_USERNAME']);
|
||||
$userExists = $userData === false ? false : true;
|
||||
|
||||
@@ -102,4 +103,3 @@ if ($userExists === true && $userData['USR_EMAIL'] != '' && $userData['USR_EMAIL
|
||||
G::SendTemporalMessage($msg, "warning", 'string');
|
||||
G::header('location: forgotPassword');
|
||||
}
|
||||
|
||||
|
||||
5
workflow/engine/methods/users/usersAjax.php
Normal file → Executable file
5
workflow/engine/methods/users/usersAjax.php
Normal file → Executable file
@@ -5,6 +5,7 @@ use ProcessMaker\BusinessModel\User as BmUser;
|
||||
// Sanitizing the values sent in the global variables
|
||||
$filter = new InputFilter();
|
||||
$_POST = $filter->xssFilterHard($_POST);
|
||||
|
||||
if (isset($_SESSION['USER_LOGGED'])) {
|
||||
$_SESSION['USER_LOGGED'] = $filter->xssFilterHard($_SESSION['USER_LOGGED']);
|
||||
}
|
||||
@@ -145,6 +146,10 @@ try {
|
||||
$permissionsToSaveData = $user->getPermissionsForEdit();
|
||||
$form = $user->checkPermissionForEdit($_SESSION['USER_LOGGED'], $permissionsToSaveData, $form);
|
||||
|
||||
if (!empty($form["USR_EMAIL"])) {
|
||||
$form["USR_EMAIL"] = strtolower($form["USR_EMAIL"]);
|
||||
}
|
||||
|
||||
switch ($_POST['action']) {
|
||||
case 'saveUser':
|
||||
if (!$user->checkPermission($_SESSION['USER_LOGGED'], 'PM_USERS')) {
|
||||
|
||||
@@ -2,8 +2,15 @@
|
||||
|
||||
namespace ProcessMaker\BusinessModel;
|
||||
|
||||
use \G;
|
||||
use Cases;
|
||||
use Criteria;
|
||||
use Exception;
|
||||
use G;
|
||||
use GroupUserPeer;
|
||||
use ProcessMaker\Core\System;
|
||||
use ResultSet;
|
||||
use TaskPeer;
|
||||
use TaskUserPeer;
|
||||
|
||||
class ProjectUser
|
||||
{
|
||||
@@ -90,71 +97,75 @@ class ProjectUser
|
||||
}
|
||||
|
||||
/**
|
||||
* Return starting task
|
||||
* Return starting tasks
|
||||
*
|
||||
* @param string $sProcessUID {@min 32} {@max 32}
|
||||
* @param string $processUid
|
||||
*
|
||||
* return array
|
||||
* @return array
|
||||
*
|
||||
* @throws Exception
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function getProjectStartingTasks($sProcessUID)
|
||||
public function getProjectStartingTasks($processUid)
|
||||
{
|
||||
try {
|
||||
Validator::proUid($sProcessUID, '$prj_uid');
|
||||
$aUsers = array();
|
||||
$usersIds = array();
|
||||
Validator::proUid($processUid, '$prj_uid');
|
||||
$users = [];
|
||||
$usersIds = [];
|
||||
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\TaskUserPeer::USR_UID);
|
||||
$oCriteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID);
|
||||
$oCriteria->add(\TaskUserPeer::TU_TYPE, 1);
|
||||
$oCriteria->add(\TaskUserPeer::TU_RELATION, 1);
|
||||
$oDataset = \TaskUserPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
while ($oDataset->next()) {
|
||||
$aRow = $oDataset->getRow();
|
||||
if (!in_array($aRow['USR_UID'], $usersIds)) {
|
||||
$usersIds[] = $aRow['USR_UID'];
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->addSelectColumn(TaskUserPeer::USR_UID);
|
||||
$criteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->add(TaskPeer::PRO_UID, $processUid);
|
||||
$criteria->add(TaskUserPeer::TU_TYPE, 1);
|
||||
$criteria->add(TaskUserPeer::TU_RELATION, 1);
|
||||
$dataSet = TaskUserPeer::doSelectRS($criteria);
|
||||
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
while ($dataSet->next()) {
|
||||
$row = $dataSet->getRow();
|
||||
if (!in_array($row['USR_UID'], $usersIds)) {
|
||||
$usersIds[] = $row['USR_UID'];
|
||||
}
|
||||
}
|
||||
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\GroupUserPeer::USR_UID);
|
||||
$oCriteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN);
|
||||
$oCriteria->addJoin(\TaskUserPeer::USR_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID);
|
||||
$oCriteria->add(\TaskUserPeer::TU_TYPE, 1);
|
||||
$oCriteria->add(\TaskUserPeer::TU_RELATION, 2);
|
||||
$oDataset = \TaskUserPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
while ($oDataset->next()) {
|
||||
$aRow = $oDataset->getRow();
|
||||
if (!in_array($aRow['USR_UID'], $usersIds)) {
|
||||
$usersIds[] = $aRow['USR_UID'];
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->addSelectColumn(GroupUserPeer::USR_UID);
|
||||
$criteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->addJoin(TaskUserPeer::USR_UID, GroupUserPeer::GRP_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->add(TaskPeer::PRO_UID, $processUid);
|
||||
$criteria->add(TaskUserPeer::TU_TYPE, 1);
|
||||
$criteria->add(TaskUserPeer::TU_RELATION, 2);
|
||||
$dataSet = TaskUserPeer::doSelectRS($criteria);
|
||||
$dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
while ($dataSet->next()) {
|
||||
$row = $dataSet->getRow();
|
||||
if (!in_array($row['USR_UID'], $usersIds)) {
|
||||
$usersIds[] = $row['USR_UID'];
|
||||
}
|
||||
}
|
||||
|
||||
foreach($usersIds as $value) {
|
||||
$oCase = new \Cases();
|
||||
$startTasks = $oCase->getStartCases( $value );
|
||||
$cases = new Cases();
|
||||
$startTasks = $cases->getStartCases($value, true);
|
||||
foreach ($startTasks as $task) {
|
||||
if ((isset( $task['pro_uid'] )) && ($task['pro_uid'] == $sProcessUID) ) {
|
||||
$taskValue = explode( '(', $task['value'] );
|
||||
$tasksLastIndex = count( $taskValue ) - 1;
|
||||
$taskValue = explode( ')', $taskValue[$tasksLastIndex] );
|
||||
$aUsers[] = array('act_name' => $taskValue[0],
|
||||
'act_uid' => $task['uid']);
|
||||
if ((isset($task['pro_uid'])) && ($task['pro_uid'] == $processUid)) {
|
||||
$taskValue = explode('(', $task['value']);
|
||||
$tasksLastIndex = count($taskValue) - 1;
|
||||
$taskValue = explode(')', $taskValue[$tasksLastIndex]);
|
||||
$users[] = [
|
||||
'act_name' => $taskValue[0],
|
||||
'act_uid' => $task['uid']
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
$new = array();
|
||||
$exclude = array("");
|
||||
for ($i = 0; $i<=count($aUsers)-1; $i++) {
|
||||
if (!in_array(trim($aUsers[$i]["act_uid"]) ,$exclude)) {
|
||||
$new[] = $aUsers[$i];
|
||||
$exclude[] = trim($aUsers[$i]["act_uid"]);
|
||||
$new = [];
|
||||
$exclude = [""];
|
||||
for ($i = 0; $i <= count($users) - 1; $i++) {
|
||||
if (!in_array(trim($users[$i]["act_uid"]) ,$exclude)) {
|
||||
$new[] = $users[$i];
|
||||
$exclude[] = trim($users[$i]["act_uid"]);
|
||||
}
|
||||
}
|
||||
return $new;
|
||||
|
||||
@@ -133,6 +133,9 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU
|
||||
prepareData: function(data){
|
||||
var i;
|
||||
data.user = _FNF(data.USR_EMAIL, data.USR_FIRSTNAME, data.USR_LASTNAME);
|
||||
//the 'NOTE_CONTENT' is used directly in an HTML template, so reserved characters
|
||||
//must be converted to HTML entities.
|
||||
data.NOTE_CONTENT = Ext.util.Format.htmlEncode(data.NOTE_CONTENT);
|
||||
data.NOTE_CONTENT = data.NOTE_CONTENT.replace(/\n/g,' <br/>');
|
||||
data.files = "";
|
||||
for (i = 0; i < data.attachments.length; i += 1) {
|
||||
|
||||
@@ -21,6 +21,7 @@ setFlag = function (val) {
|
||||
flagRefresh = val;
|
||||
};
|
||||
|
||||
Ext.BLANK_IMAGE_URL = "data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==";
|
||||
Ext.onReady(function(){
|
||||
new Ext.KeyMap(document, {
|
||||
key: Ext.EventObject.F5,
|
||||
|
||||
@@ -216,7 +216,7 @@ Ext.onReady(function() {
|
||||
maskRe: /^\d*$/,
|
||||
enableKeyEvents: true,
|
||||
|
||||
minValue: 90,
|
||||
minValue: 30,
|
||||
maxValue: 14400,
|
||||
|
||||
listeners: {
|
||||
|
||||
Reference in New Issue
Block a user