diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index 6c243430d..2c5947bb9 100755 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -3347,20 +3347,79 @@ class processMap * @param string $sProcessUID * @return object(Criteria) $oCriteria */ - public function listProcessesUser ($sProcessUID) - { + public 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') + ); - $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::PRO_UID, $sProcessUID ); - return $oCriteria; + // 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(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); + $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; } /** @@ -3371,54 +3430,111 @@ class processMap */ public function listNoProcessesUser ($sProcessUID) { - G::LoadSystem( 'rbac' ); - $memcache = & PMmemcached::getSingleton( SYS_SYS ); + G::LoadSystem('rbac'); + $memcache = & PMmemcached::getSingleton(SYS_SYS); - $oCriteria = new Criteria( 'workflow' ); - $oCriteria->addSelectColumn( ProcessUserPeer::USR_UID ); - $oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID ); - $oCriteria->add( ProcessUserPeer::PU_TYPE, 'SUPERVISOR' ); - $oDataset = ProcessUserPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $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%', Criteria::LIKE); + $oDataset = ProcessUserPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); - $aUIDS = array (); + $aUIDS = array(); + $aGRUS = array(); while ($aRow = $oDataset->getRow()) { - $aUIDS[] = $aRow['USR_UID']; - $oDataset->next(); + if ($aRow['PU_TYPE'] == 'SUPERVISOR') { + $aUIDS [] = $aRow ['USR_UID']; + } else { + $aGRUS [] = $aRow ['USR_UID']; + } + $oDataset->next(); } - $sDelimiter = DBAdapter::getStringDelimiter(); - $oCriteria = new Criteria( 'workflow' ); - $oCriteria->addSelectColumn( UsersPeer::USR_UID ); - $oCriteria->add( UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN ); - $oDataset = UsersPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $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(); - $aUIDS = array (); - $oRBAC = RBAC::getSingleton(); + while ($aRow = $oDataset->getRow()) { - $memKey = 'rbacSession' . session_id(); - if (($oRBAC->aUserInfo = $memcache->get( $memKey )) === false) { - $oRBAC->loadUserRolePermission( $oRBAC->sSystem, $aRow['USR_UID'] ); - $memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS ); - } - $aPermissions = $oRBAC->aUserInfo[$oRBAC->sSystem]['PERMISSIONS']; - $bInclude = false; - foreach ($aPermissions as $aPermission) { - if ($aPermission['PER_CODE'] == 'PM_SUPERVISOR') { - $bInclude = true; - } - } - if ($bInclude) { - $aUIDS[] = $aRow['USR_UID']; - } - $oDataset->next(); + $aRespLi[] = array( 'UID' => $aRow['GRP_UID'], + 'USER_GROUP' => $aRow['GRP_TITLE'], + 'TYPE_UID' => 'Group', + 'PRO_UID' => $sProcessUID); + $oDataset->next(); } - $oCriteria = new Criteria( 'workflow' ); - $oCriteria->addSelectColumn( UsersPeer::USR_UID ); - $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); - $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); - $oCriteria->add( UsersPeer::USR_UID, $aUIDS, Criteria::IN ); - return $oCriteria; + + $sDelimiter = DBAdapter::getStringDelimiter (); + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(UsersPeer::USR_UID); + $oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN); + $oDataset = UsersPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aUIDS = array(); + $oRBAC = RBAC::getSingleton (); + while ($aRow = $oDataset->getRow()) { + $memKey = 'rbacSession' . session_id(); + if ( ($oRBAC->aUserInfo = $memcache->get($memKey)) === false ) { + $oRBAC->loadUserRolePermission($oRBAC->sSystem, $aRow ['USR_UID']); + $memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS ); + } + $aPermissions = $oRBAC->aUserInfo [$oRBAC->sSystem] ['PERMISSIONS']; + $bInclude = false; + foreach ($aPermissions as $aPermission) { + if ($aPermission ['PER_CODE'] == 'PM_SUPERVISOR') { + $bInclude = true; + } + } + if ($bInclude) { + $aUIDS [] = $aRow ['USR_UID']; + } + $oDataset->next(); + } + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(UsersPeer::USR_UID); + $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::IN); + $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; } /** @@ -3428,11 +3544,14 @@ class processMap * @param string $sUsrUID * @return void */ - public function assignProcessUser ($sProcessUID, $sUsrUID) + public function assignProcessUser($sProcessUID, $sUsrUID, $sTypeUID) { - $oProcessUser = new ProcessUser(); - $oProcessUser->create( array ('PU_UID' => G::generateUniqueID(),'PRO_UID' => $sProcessUID,'USR_UID' => $sUsrUID,'PU_TYPE' => 'SUPERVISOR' - ) ); + $oProcessUser = new ProcessUser ( ); + $puType = 'SUPERVISOR'; + if ($sTypeUID == 'Group') { + $puType = 'GROUP_SUPERVISOR'; + } + $oProcessUser->create(array('PU_UID' => G::generateUniqueID (), 'PRO_UID' => $sProcessUID, 'USR_UID' => $sUsrUID, 'PU_TYPE' => $puType)); } /**