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