UserTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. class Route_UserTest extends RouteBase {
  4. public function handleAuth() {
  5. if (!User::logged()) {
  6. User::authByRequest();
  7. }
  8. }
  9. public function defaultAction() {
  10. UI::gora();
  11. UI::menu();
  12. try {
  13. $procesMenu = ProcesMenu::getInstance();
  14. // $procesMenu->menuAction();// like UI::menu() ?
  15. $userAcl = User::getAcl();
  16. $acl = Core_AclHelper::getAclByNamespace('default_objects/UserProcess');
  17. $userProcessList = $acl->getItems();
  18. DBG::nicePrint($userProcessList, '$userProcessList');
  19. $procesyInitGroup = $this->getUsedProcesInitGroupedList($userAcl);
  20. DBG::nicePrint($procesyInitGroup, '$procesyInitGroup');
  21. if (empty($procesyInitGroup)) {
  22. echo '<p>' . "Brak przypisanych procesów." . '</p>';
  23. return;
  24. }
  25. } catch (Exception $e) {
  26. UI::alert('danger', $e->getMessage());
  27. }
  28. UI::dol();
  29. }
  30. public function getUsedProcesInitGroupedList($userAcl) {
  31. $procesyInitGroup = array();
  32. $procesyInitList = $this->getUserProcesInitList($userAcl);
  33. DBG::nicePrint($procesyInitList, '$procesyInitList');
  34. if (empty($procesyInitList)) {
  35. return;
  36. }
  37. $sqlProcesyInitIds = implode(",", array_keys($procesyInitList));
  38. $sql = "select p.`ID`, p.`PARENT_ID`, pp.`DESC` as pp__DESC
  39. from `CRM_PROCES` as p
  40. join `CRM_PROCES` as pp on(pp.`ID`=p.`PARENT_ID`)
  41. where p.`ID` in({$sqlProcesyInitIds})
  42. ";
  43. $groupedProcesyInit = array();
  44. $db = DB::getDB();
  45. $res = $db->query($sql);
  46. while ($r = $db->fetch($res)) {
  47. if (!array_key_exists($r->PARENT_ID, $procesyInitGroup)) {
  48. $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>$r->PARENT_ID, 'label'=>$r->pp__DESC, 'sub'=>array());
  49. }
  50. $procesyInitGroup[$r->PARENT_ID]->sub[$r->ID] = $procesyInitList[$r->ID];
  51. $groupedProcesyInit[] = $r->ID;
  52. }
  53. $ungroupedProcesyInit = array_diff(array_keys($procesyInitList), $groupedProcesyInit);
  54. if (!empty($ungroupedProcesyInit)) {
  55. $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>null, 'label'=>"Pozostałe", 'sub'=>array());
  56. foreach ($ungroupedProcesyInit as $nr) {
  57. $procesyInitGroup[$r->PARENT_ID]->sub[$nr] = $procesyInitList[$nr];
  58. }
  59. }
  60. return $procesyInitGroup;
  61. }
  62. /**
  63. * List of Proces Init for user (skip filters)
  64. * TODO: read from CRM_PROCES_idx_GROUP_to_INIT_VIEW ?
  65. * TODO: read from CRM_PROCES_idx_USER_to_INIT_VIEW ? - slow
  66. * TODO: read from Schema_UserProcessStorageAcl ? - only for current logged in user
  67. */
  68. public function getUserProcesInitList($userAcl) {
  69. $userProcesInitList = array();
  70. $idUserGroupList = $userAcl->fetchGroups();
  71. $sqlIdUserGroupList = implode(",", array_keys($idUserGroupList));
  72. $sqlIdProcesListSql = <<<SQL
  73. select gi.`ID_PROCES`
  74. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  75. where gi.`ID_GROUP` in({$sqlIdUserGroupList})
  76. SQL;
  77. $fetchUserProcesInitListSql = <<<SQL
  78. select p.`ID`, p.`DESC`
  79. from `CRM_PROCES_idx` i
  80. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  81. where i.`ID_PROCES` in({$sqlIdProcesListSql})
  82. group by p.`ID`
  83. order by p.`SORT_PRIO`
  84. SQL;
  85. $db = DB::getDB();
  86. $res = $db->query($fetchUserProcesInitListSql);
  87. while ($r = $db->fetch($res)) {
  88. $userProcesInitList[$r->ID] = $r->DESC;
  89. }
  90. return $userProcesInitList;
  91. }
  92. }