diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php
index c737bf338..ce50d9733 100755
--- a/workflow/engine/classes/class.processMap.php
+++ b/workflow/engine/classes/class.processMap.php
@@ -3149,18 +3149,78 @@ class processMap {
* @return object(Criteria) $oCriteria
*/
function listProcessesUser($sProcessUID) {
+ $aResp = array(
+ array(
+ 'LA_PU_UID' => 'char',
+ 'LA_PRO_UID' => 'char',
+ 'LA_USR_UID' => 'char',
+ 'LA_PU_NAME' => 'char',
+ 'LA_PU_TYPE_NAME' => 'char')
+ );
+ // Groups
+ $oCriteria = new Criteria('workflow');
+ $oCriteria->addSelectColumn(ProcessUserPeer::PU_UID);
+ $oCriteria->addSelectColumn(ProcessUserPeer::USR_UID);
+ $oCriteria->addSelectColumn(ProcessUserPeer::PRO_UID);
+ $oCriteria->addAsColumn('GRP_TITLE', ContentPeer::CON_VALUE);
+
+ $aConditions [] = array(ProcessUserPeer::USR_UID, ContentPeer::CON_ID);
+ $aConditions [] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter () . 'GRP_TITLE' . DBAdapter::getStringDelimiter ());
+ $aConditions [] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ());
+ $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $oCriteria->add(ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR');
+ $oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
+ $oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE);
+
+ $oDataset = ProcessUserPeer::doSelectRS($oCriteria);
+ $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $oDataset->next();
+
+ while ($aRow = $oDataset->getRow()) {
+ $aResp[] = array(
+ 'LA_PU_UID' => $aRow['PU_UID'],
+ 'LA_PRO_UID' => $aRow['PRO_UID'],
+ 'LA_USR_UID' => $aRow['USR_UID'],
+ 'LA_PU_NAME' => $aRow['GRP_TITLE'],
+ 'LA_PU_TYPE_NAME' => 'Group');
+ $oDataset->next();
+ }
+
+ // Users
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(ProcessUserPeer::PU_UID);
$oCriteria->addSelectColumn(ProcessUserPeer::USR_UID);
$oCriteria->addSelectColumn(ProcessUserPeer::PRO_UID);
- $oCriteria->addSelectColumn(ProcessUserPeer::PU_TYPE);
$oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);
$oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME);
$oCriteria->addSelectColumn(UsersPeer::USR_EMAIL);
$oCriteria->addJoin(ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN);
+ $oCriteria->add(ProcessUserPeer::PU_TYPE, 'SUPERVISOR');
$oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
- return $oCriteria;
+ $oCriteria->addAscendingOrderByColumn(UsersPeer::USR_FIRSTNAME);
+ $oDataset = ProcessUserPeer::doSelectRS($oCriteria);
+ $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $oDataset->next();
+
+ while ($aRow = $oDataset->getRow()) {
+ $aResp[] = array(
+ 'LA_PU_UID' => $aRow['PU_UID'],
+ 'LA_PRO_UID' => $aRow['PRO_UID'],
+ 'LA_USR_UID' => $aRow['USR_UID'],
+ 'LA_PU_NAME' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],
+ 'LA_PU_TYPE_NAME' => 'User');
+ $oDataset->next();
+ }
+
+ global $_DBArray;
+ $_DBArray['data'] = $aResp;
+ $_SESSION['_DBArray'] = $_DBArray;
+ $LiCriteria = new Criteria('dbarray');
+ $LiCriteria->setDBArrayTable('data');
+
+ return $LiCriteria;
}
/**
@@ -3175,16 +3235,54 @@ class processMap {
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(ProcessUserPeer::USR_UID);
+ $oCriteria->addSelectColumn(ProcessUserPeer::PU_TYPE);
$oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
- $oCriteria->add(ProcessUserPeer::PU_TYPE, 'SUPERVISOR');
+ $oCriteria->add(ProcessUserPeer::PU_TYPE, '%SUPERVISOR%', Criteria::LIKE);
$oDataset = ProcessUserPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$aUIDS = array();
+ $aGRUS = array();
while ($aRow = $oDataset->getRow()) {
- $aUIDS [] = $aRow ['USR_UID'];
+ if ($aRow['PU_TYPE'] == 'SUPERVISOR') {
+ $aUIDS [] = $aRow ['USR_UID'];
+ } else {
+ $aGRUS [] = $aRow ['USR_UID'];
+ }
$oDataset->next();
}
+
+ $aRespLi = array(
+ array(
+ 'UID' => 'char',
+ 'USER_GROUP' => 'char',
+ 'TYPE_UID' => 'char',
+ 'PRO_UID' => 'char')
+ );
+ $oCriteria = new Criteria('workflow');
+ $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID);
+ $oCriteria->addAsColumn('GRP_TITLE', ContentPeer::CON_VALUE);
+
+ $aConditions [] = array(GroupwfPeer::GRP_UID, ContentPeer::CON_ID);
+ $aConditions [] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter () . 'GRP_TITLE' . DBAdapter::getStringDelimiter ());
+ $aConditions [] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ());
+
+ $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+ $oCriteria->add(GroupwfPeer::GRP_UID, $aGRUS, Criteria::NOT_IN);
+
+ $oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE);
+ $oDataset = GroupwfPeer::doSelectRS($oCriteria);
+ $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $oDataset->next();
+
+ while ($aRow = $oDataset->getRow()) {
+ $aRespLi[] = array( 'UID' => $aRow['GRP_UID'],
+ 'USER_GROUP' => $aRow['GRP_TITLE'],
+ 'TYPE_UID' => 'Group',
+ 'PRO_UID' => $sProcessUID);
+ $oDataset->next();
+ }
+
$sDelimiter = DBAdapter::getStringDelimiter ();
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(UsersPeer::USR_UID);
@@ -3217,7 +3315,26 @@ class processMap {
$oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);
$oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME);
$oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::IN);
- return $oCriteria;
+ $oCriteria->addAscendingOrderByColumn(UsersPeer::USR_FIRSTNAME);
+ $oDataset = UsersPeer::doSelectRS($oCriteria);
+ $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $oDataset->next();
+
+ while ($aRow = $oDataset->getRow()) {
+ $aRespLi[] = array('UID' => $aRow['USR_UID'],
+ 'USER_GROUP' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],
+ 'TYPE_UID' => 'User',
+ 'PRO_UID' => $sProcessUID);
+ $oDataset->next();
+ }
+
+ global $_DBArray;
+ $_DBArray['data'] = $aRespLi;
+ $_SESSION['_DBArray'] = $_DBArray;
+ $LsCriteria = new Criteria('dbarray');
+ $LsCriteria->setDBArrayTable('data');
+
+ return $LsCriteria;
}
/**
@@ -3227,9 +3344,13 @@ class processMap {
* @param string $sUsrUID
* @return void
*/
- function assignProcessUser($sProcessUID, $sUsrUID) {
+ function assignProcessUser($sProcessUID, $sUsrUID, $sTypeUID) {
$oProcessUser = new ProcessUser ( );
- $oProcessUser->create(array('PU_UID' => G::generateUniqueID (), 'PRO_UID' => $sProcessUID, 'USR_UID' => $sUsrUID, 'PU_TYPE' => 'SUPERVISOR'));
+ $puType = 'SUPERVISOR';
+ if ($sTypeUID == 'Group') {
+ $puType = 'GROUP_SUPERVISOR';
+ }
+ $oProcessUser->create(array('PU_UID' => G::generateUniqueID (), 'PRO_UID' => $sProcessUID, 'USR_UID' => $sUsrUID, 'PU_TYPE' => $puType));
}
/**
diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php
index 0ef7c73f3..efccb691b 100755
--- a/workflow/engine/classes/model/AppCacheView.php
+++ b/workflow/engine/classes/model/AppCacheView.php
@@ -422,6 +422,7 @@ class AppCacheView extends BaseAppCacheView
public function getToRevise($userUid, $doCount)
{
require_once ('classes/model/ProcessUser.php');
+ require_once ('classes/model/GroupUser.php');
//adding configuration fields from the configuration options
//and forming the criteria object
@@ -438,6 +439,21 @@ class AppCacheView extends BaseAppCacheView
$oDataset->next();
}
+ $oCriteria = new Criteria('workflow');
+ $oCriteria->addSelectColumn(ProcessUserPeer::PRO_UID);
+ $oCriteria->add(ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR');
+ $oCriteria->addJoin(ProcessUserPeer::USR_UID, GroupUserPeer::USR_UID, Criteria::LEFT_JOIN);
+ $oCriteria->add(GroupUserPeer::USR_UID, $userUid);
+ $oDataset = ProcessUserPeer::doSelectRS($oCriteria);
+ $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $oDataset->next();
+
+ while ($aRow = $oDataset->getRow()) {
+ $aProcesses[] = $aRow['PRO_UID'];
+ $oDataset->next();
+ }
+
+
if ($doCount && !isset($this->confCasesList['PMTable']) && !empty($this->confCasesList['PMTable'])) {
$c = new Criteria('workflow');
} else {
diff --git a/workflow/engine/methods/processes/processes_Ajax.php b/workflow/engine/methods/processes/processes_Ajax.php
index bd89d286c..9f0bee2f7 100755
--- a/workflow/engine/methods/processes/processes_Ajax.php
+++ b/workflow/engine/methods/processes/processes_Ajax.php
@@ -106,10 +106,19 @@ try {
$oProcessMap->webEntry_new($oData->PRO_UID);
break;
case 'assignProcessUser':
- $oProcessMap->assignProcessUser($oData->PRO_UID, $oData->USR_UID);
+ $oProcessMap->assignProcessUser($oData->PRO_UID, $oData->USR_UID, $oData->TYPE_UID);
+ G::LoadClass('processMap');
+ $oProcessMap = new ProcessMap();
+ $oProcessMap->listProcessesUser($oData->PRO_UID);
break;
case 'removeProcessUser':
$oProcessMap->removeProcessUser($oData->PU_UID);
+ foreach ($_SESSION['_DBArray']['data'] as $key => $value) {
+ if ($value['LA_PU_UID'] == $oData->PU_UID) {
+ unset($_SESSION['_DBArray']['data'][$key]);
+ break;
+ }
+ }
break;
case 'supervisorDynaforms':
$oProcessMap->supervisorDynaforms($oData->pro_uid);
diff --git a/workflow/engine/methods/processes/processes_User.php b/workflow/engine/methods/processes/processes_User.php
index 5a3554ca3..26aa26b96 100755
--- a/workflow/engine/methods/processes/processes_User.php
+++ b/workflow/engine/methods/processes/processes_User.php
@@ -41,7 +41,7 @@ try {
G::LoadClass('processMap');
$oProcessMap = new ProcessMap();
$c = $oProcessMap->listProcessesUser($sProUid);
-
+
$oHeadPublisher =& headPublisher::getSingleton();
$oHeadPublisher->addScriptFile('/jscore/processmap/core/processUser.js');
diff --git a/workflow/engine/xmlform/processes/processes_Assignuser.xml b/workflow/engine/xmlform/processes/processes_Assignuser.xml
index 17c88b209..4c3c3322f 100755
--- a/workflow/engine/xmlform/processes/processes_Assignuser.xml
+++ b/workflow/engine/xmlform/processes/processes_Assignuser.xml
@@ -41,11 +41,11 @@ var availableProcessesUser = function(PRO_UID) {
oRPC.make();
};
-var assignProcessUser = function(sProcessUID, sUserUID) {
+var assignProcessUser = function(sProcessUID, sUserUID, sTypeUID) {
var oRPC = new leimnud.module.rpc.xmlhttp({
url : '../processes/processes_Ajax',
async: false,
- args : "action=assignProcessUser&data="+{PRO_UID:sProcessUID,USR_UID:sUserUID}.toJSONString()
+ args : "action=assignProcessUser&data="+{PRO_UID:sProcessUID,USR_UID:sUserUID,TYPE_UID:sTypeUID}.toJSONString()
});
oRPC.make();
oPanel1.remove();
diff --git a/workflow/engine/xmlform/processes/processes_User.xml b/workflow/engine/xmlform/processes/processes_User.xml
index bd3eb482b..17fb5d5c8 100755
--- a/workflow/engine/xmlform/processes/processes_User.xml
+++ b/workflow/engine/xmlform/processes/processes_User.xml
@@ -1,20 +1,20 @@
-
+
-
+
-
+
-
- First name
-
+
+ User or Group
+
-
- Last name
-
+
+ Type
+
-
+
\ No newline at end of file
diff --git a/workflow/engine/xmlform/processes/processes_availableProcessesUser.xml b/workflow/engine/xmlform/processes/processes_availableProcessesUser.xml
index e147e6ccd..09624e11a 100755
--- a/workflow/engine/xmlform/processes/processes_availableProcessesUser.xml
+++ b/workflow/engine/xmlform/processes/processes_availableProcessesUser.xml
@@ -1,12 +1,12 @@
-
+
-
-
- First name
-
-
- Last name
-
-
+
+
+ User or Group
+
+
+ Type
+
+
\ No newline at end of file