UserTest.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. $procesyInitGroup = $this->getUsedProcesInitGroupedList($userAcl);
  17. DBG::nicePrint($procesyInitGroup);
  18. if (empty($procesyInitGroup)) {
  19. echo '<p>' . "Brak przypisanych procesów." . '</p>';
  20. return;
  21. }
  22. } catch (Exception $e) {
  23. UI::alert('danger', $e->getMessage());
  24. }
  25. UI::dol();
  26. }
  27. public function getUsedProcesInitGroupedList($userAcl) {
  28. $procesyInitGroup = array();
  29. $procesyInitList = $this->getUserProcesInitList($userAcl);
  30. if (empty($procesyInitList)) {
  31. return;
  32. }
  33. $sqlProcesyInitIds = implode(",", array_keys($procesyInitList));
  34. $sql = "select p.`ID`, p.`PARENT_ID`, pp.`DESC` as pp__DESC
  35. from `CRM_PROCES` as p
  36. join `CRM_PROCES` as pp on(pp.`ID`=p.`PARENT_ID`)
  37. where p.`ID` in({$sqlProcesyInitIds})
  38. ";
  39. $groupedProcesyInit = array();
  40. $db = DB::getDB();
  41. $res = $db->query($sql);
  42. while ($r = $db->fetch($res)) {
  43. if (!array_key_exists($r->PARENT_ID, $procesyInitGroup)) {
  44. $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>$r->PARENT_ID, 'label'=>$r->pp__DESC, 'sub'=>array());
  45. }
  46. $procesyInitGroup[$r->PARENT_ID]->sub[$r->ID] = $procesyInitList[$r->ID];
  47. $groupedProcesyInit[] = $r->ID;
  48. }
  49. $ungroupedProcesyInit = array_diff(array_keys($procesyInitList), $groupedProcesyInit);
  50. if (!empty($ungroupedProcesyInit)) {
  51. $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>null, 'label'=>"Pozostałe", 'sub'=>array());
  52. foreach ($ungroupedProcesyInit as $nr) {
  53. $procesyInitGroup[$r->PARENT_ID]->sub[$nr] = $procesyInitList[$nr];
  54. }
  55. }
  56. return $procesyInitGroup;
  57. }
  58. /**
  59. * List of Proces Init for user (skip filters)
  60. * TODO: read from CRM_PROCES_idx_GROUP_to_INIT_VIEW ?
  61. * TODO: read from CRM_PROCES_idx_USER_to_INIT_VIEW ? - slow
  62. * TODO: read from Schema_UserProcessStorageAcl ? - only for current logged in user
  63. */
  64. public function getUserProcesInitList($userAcl) {
  65. $userProcesInitList = array();
  66. $idUserGroupList = $userAcl->fetchGroups();
  67. $sqlIdUserGroupList = implode(",", array_keys($idUserGroupList));
  68. $sqlIdProcesListSql = <<<SQL
  69. select gi.`ID_PROCES`
  70. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  71. where gi.`ID_GROUP` in({$sqlIdUserGroupList})
  72. SQL;
  73. $fetchUserProcesInitListSql = <<<SQL
  74. select p.`ID`, p.`DESC`
  75. from `CRM_PROCES_idx` i
  76. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  77. where i.`ID_PROCES` in({$sqlIdProcesListSql})
  78. group by p.`ID`
  79. order by p.`SORT_PRIO`
  80. SQL;
  81. $db = DB::getDB();
  82. $res = $db->query($fetchUserProcesInitListSql);
  83. while ($r = $db->fetch($res)) {
  84. $userProcesInitList[$r->ID] = $r->DESC;
  85. }
  86. return $userProcesInitList;
  87. }
  88. }