UserTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. $acl = Core_AclHelper::getAclByNamespace('default_objects/UserProcess');
  16. $userProcessList = $acl->getItems();
  17. $this->userTestsView($userProcessList);
  18. } catch (Exception $e) {
  19. UI::alert('danger', $e->getMessage());
  20. }
  21. UI::dol();
  22. }
  23. public function adminUserTestAction() {// TODO: replace POST from admin menu to view another user tests
  24. UI::gora();
  25. UI::menu();
  26. try {
  27. $idUser = V::get('_user_id', 0, $_REQUEST, 'int');
  28. $acl = Core_AclHelper::getAclByNamespace('default_objects/UserProcess');
  29. $acl->setIdUser($idUser);
  30. $userProcessList = $acl->getItems();
  31. $this->userTestsView($userProcessList);
  32. } catch (Exception $e) {
  33. UI::alert('danger', $e->getMessage());
  34. }
  35. UI::dol();
  36. }
  37. public function userTestsView($userProcessList) {
  38. DBG::nicePrint($userProcessList, '$userProcessList');
  39. // old way
  40. $userAcl = User::getAcl();
  41. $procesyInitGroup = $this->getUsedProcesInitGroupedList($userAcl);
  42. DBG::nicePrint($procesyInitGroup, '$procesyInitGroup');
  43. if (empty($procesyInitGroup)) {
  44. echo '<p>' . "Brak przypisanych procesów." . '</p>';
  45. return;
  46. }
  47. }
  48. public function getUsedProcesInitGroupedList($userAcl) {
  49. $procesyInitGroup = array();
  50. $procesyInitList = $this->getUserProcesInitList($userAcl);
  51. DBG::nicePrint($procesyInitList, '$procesyInitList');
  52. if (empty($procesyInitList)) {
  53. return;
  54. }
  55. $sqlProcesyInitIds = implode(",", array_keys($procesyInitList));
  56. $sql = "select p.`ID`, p.`PARENT_ID`, pp.`DESC` as pp__DESC
  57. from `CRM_PROCES` as p
  58. join `CRM_PROCES` as pp on(pp.`ID`=p.`PARENT_ID`)
  59. where p.`ID` in({$sqlProcesyInitIds})
  60. ";
  61. $groupedProcesyInit = array();
  62. $db = DB::getDB();
  63. $res = $db->query($sql);
  64. while ($r = $db->fetch($res)) {
  65. if (!array_key_exists($r->PARENT_ID, $procesyInitGroup)) {
  66. $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>$r->PARENT_ID, 'label'=>$r->pp__DESC, 'sub'=>array());
  67. }
  68. $procesyInitGroup[$r->PARENT_ID]->sub[$r->ID] = $procesyInitList[$r->ID];
  69. $groupedProcesyInit[] = $r->ID;
  70. }
  71. $ungroupedProcesyInit = array_diff(array_keys($procesyInitList), $groupedProcesyInit);
  72. if (!empty($ungroupedProcesyInit)) {
  73. $procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>null, 'label'=>"Pozostałe", 'sub'=>array());
  74. foreach ($ungroupedProcesyInit as $nr) {
  75. $procesyInitGroup[$r->PARENT_ID]->sub[$nr] = $procesyInitList[$nr];
  76. }
  77. }
  78. return $procesyInitGroup;
  79. }
  80. /**
  81. * List of Proces Init for user (skip filters)
  82. * TODO: read from CRM_PROCES_idx_GROUP_to_INIT_VIEW ?
  83. * TODO: read from CRM_PROCES_idx_USER_to_INIT_VIEW ? - slow
  84. * TODO: read from Schema_UserProcessStorageAcl ? - only for current logged in user
  85. */
  86. public function getUserProcesInitList($userAcl) {
  87. $userProcesInitList = array();
  88. $idUserGroupList = $userAcl->fetchGroups();
  89. $sqlIdUserGroupList = implode(",", array_keys($idUserGroupList));
  90. $sqlIdProcesListSql = <<<SQL
  91. select gi.`ID_PROCES`
  92. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  93. where gi.`ID_GROUP` in({$sqlIdUserGroupList})
  94. SQL;
  95. $fetchUserProcesInitListSql = <<<SQL
  96. select p.`ID`, p.`DESC`
  97. from `CRM_PROCES_idx` i
  98. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  99. where i.`ID_PROCES` in({$sqlIdProcesListSql})
  100. group by p.`ID`
  101. order by p.`SORT_PRIO`
  102. SQL;
  103. $db = DB::getDB();
  104. $res = $db->query($fetchUserProcesInitListSql);
  105. while ($r = $db->fetch($res)) {
  106. $userProcesInitList[$r->ID] = $r->DESC;
  107. }
  108. return $userProcesInitList;
  109. }
  110. }