menuAction();// like UI::menu() ? $userAcl = User::getAcl(); $acl = Core_AclHelper::getAclByNamespace('default_objects/UserProcess'); $userProcessList = $acl->getItems(); DBG::nicePrint($userProcessList, '$userProcessList'); $procesyInitGroup = $this->getUsedProcesInitGroupedList($userAcl); DBG::nicePrint($procesyInitGroup, '$procesyInitGroup'); if (empty($procesyInitGroup)) { echo '

' . "Brak przypisanych procesów." . '

'; return; } } catch (Exception $e) { UI::alert('danger', $e->getMessage()); } UI::dol(); } public function getUsedProcesInitGroupedList($userAcl) { $procesyInitGroup = array(); $procesyInitList = $this->getUserProcesInitList($userAcl); DBG::nicePrint($procesyInitList, '$procesyInitList'); if (empty($procesyInitList)) { return; } $sqlProcesyInitIds = implode(",", array_keys($procesyInitList)); $sql = "select p.`ID`, p.`PARENT_ID`, pp.`DESC` as pp__DESC from `CRM_PROCES` as p join `CRM_PROCES` as pp on(pp.`ID`=p.`PARENT_ID`) where p.`ID` in({$sqlProcesyInitIds}) "; $groupedProcesyInit = array(); $db = DB::getDB(); $res = $db->query($sql); while ($r = $db->fetch($res)) { if (!array_key_exists($r->PARENT_ID, $procesyInitGroup)) { $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>$r->PARENT_ID, 'label'=>$r->pp__DESC, 'sub'=>array()); } $procesyInitGroup[$r->PARENT_ID]->sub[$r->ID] = $procesyInitList[$r->ID]; $groupedProcesyInit[] = $r->ID; } $ungroupedProcesyInit = array_diff(array_keys($procesyInitList), $groupedProcesyInit); if (!empty($ungroupedProcesyInit)) { $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>null, 'label'=>"Pozostałe", 'sub'=>array()); foreach ($ungroupedProcesyInit as $nr) { $procesyInitGroup[$r->PARENT_ID]->sub[$nr] = $procesyInitList[$nr]; } } return $procesyInitGroup; } /** * List of Proces Init for user (skip filters) * TODO: read from CRM_PROCES_idx_GROUP_to_INIT_VIEW ? * TODO: read from CRM_PROCES_idx_USER_to_INIT_VIEW ? - slow * TODO: read from Schema_UserProcessStorageAcl ? - only for current logged in user */ public function getUserProcesInitList($userAcl) { $userProcesInitList = array(); $idUserGroupList = $userAcl->fetchGroups(); $sqlIdUserGroupList = implode(",", array_keys($idUserGroupList)); $sqlIdProcesListSql = <<query($fetchUserProcesInitListSql); while ($r = $db->fetch($res)) { $userProcesInitList[$r->ID] = $r->DESC; } return $userProcesInitList; } }