UserTest.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. session_write_close();
  13. try {
  14. $procesMenu = ProcesMenu::getInstance();
  15. // $procesMenu->menuAction();// like UI::menu() ?
  16. $acl = Core_AclHelper::getAclByNamespace('default_objects/UserTestStats');// default_objects/UserProcess
  17. $userTestStatsList = $acl->getItems();
  18. UI::setTitle("Testy - Moje");
  19. $this->userTestsView($userTestStatsList);
  20. } catch (Exception $e) {
  21. UI::alert('danger', $e->getMessage());
  22. }
  23. UI::dol();
  24. }
  25. public function adminUserTestAction() {// TODO: replace POST from admin menu to view another user tests
  26. UI::gora();
  27. UI::menu();
  28. session_write_close();
  29. try {
  30. $idUser = V::get('_user_id', 0, $_REQUEST, 'int');
  31. $user = [];// $user = Core_AclHelper::getAclByNamespace('default_db/ADMIN_USERS')->getItem($idUser);
  32. $user['name'] = "TODO: user name({$idUser})";
  33. $acl = Core_AclHelper::getAclByNamespace('default_objects/UserTestStats');// default_objects/UserProcess
  34. $acl->setIdUser($idUser);
  35. $userTestStatsList = $acl->getItems();
  36. UI::setTitle("Testy - pracownika {$user['name']}");
  37. $this->userTestsView($userTestStatsList);
  38. } catch (Exception $e) {
  39. UI::alert('danger', $e->getMessage());
  40. }
  41. UI::dol();
  42. }
  43. public function userTestsView($userTestStatsList) {
  44. $activeFiltrProcessId = User::getAcl()->getPermsFiltrProcesId();
  45. ?>
  46. <style type="text/css">
  47. .tbl-wyniki-testow {}
  48. .tbl-wyniki-testow td {vertical-align:top;font-size:small;}
  49. .tbl-wyniki-testow .proces-box {padding:0 6px;background:#f00;color:#fff;font-weight:bold;font-family:arial;text-decoration:none}
  50. .tbl-wyniki-testow .proces-title {padding:0 3px;}
  51. .tbl-wyniki-testow .wynik-cell .wyniki-cell-header {height:56px;overflow:hidden;}
  52. .tbl-wyniki-testow .wynik-cell {padding:0 3px;}
  53. .tbl-wyniki-testow .wynik-BRAK_TESTU .proces-box {background-color:silver;}
  54. .tbl-wyniki-testow .wynik-BRAK_PYTAN .proces-box {background-color:#51B7D5;}
  55. .tbl-wyniki-testow .wynik-DOBRY .proces-box {background-color:lightgreen;}
  56. .tbl-wyniki-testow .wynik-DOSTATECZNY .proces-box {background-color:#FFFFB1; color:#777;}
  57. .tbl-wyniki-testow .wynik-NIEDOSTATECZNY .proces-box {background-color:#FC5151;}
  58. .tbl-wyniki-testow .wynik-IDEALNY .proces-box {background-color:gold;}
  59. .tbl-wyniki-testow .wynik-NIEAKTUALNY .proces-box {background-color:silver;}
  60. </style>
  61. <?php
  62. $procesyInitList = [];
  63. foreach ($userTestStatsList as $row) {
  64. $procesyInitList[ $row['ID'] ] = $row['nazwa'];
  65. }
  66. $parentIdList = array_filter(
  67. array_map(function ($row) {
  68. return (int)$row['PARENT_ID'];
  69. }, $userTestStatsList),
  70. function ($id) { return $id > 0; }
  71. );
  72. $sqlProcesyInitIds = (!empty($parentIdList)) ? implode(",", $parentIdList) : '';
  73. $parentProcessList = DB::getPDO()->fetchAll("
  74. select p.ID, p.PARENT_ID, p.DESC as nazwa
  75. from CRM_PROCES as p
  76. where p.ID in({$sqlProcesyInitIds})
  77. ");
  78. foreach ($parentProcessList as $parentProcess) {
  79. UI::startContainer(['class'=>"tbl-wyniki-testow page-header"]);
  80. $linkProcessTree = "procesy5.php?task=CRM_PROCES&amp;filtr_id={$parentProcess['ID']}";
  81. UI::tag('h3', [], "{$parentProcess['nazwa']} <small><a href=\"{$linkProcessTree}\">{{$parentProcess['ID']}}</a></small>");
  82. UI::endContainer();
  83. UI::startContainer(['class'=>"tbl-wyniki-testow"]);
  84. UI::startTag('div', ['class'=>"row"]);
  85. $i = 0;
  86. foreach ($userTestStatsList as $testStats) {
  87. if ($testStats['PARENT_ID'] != $parentProcess['ID']) continue;
  88. UI::startTag('div', ['class'=>"col-md-3 wynik-cell wynik-{$testStats['wynik_teoretyczny']}"]);
  89. UI::startTag('div', ['class'=>"panel panel-default"]);
  90. UI::startTag('div', ['class'=>"panel-heading"]);
  91. UI::tag('span', ['title'=>htmlspecialchars($testStats['nazwa']), 'data-toggle'=>"tooltip"], V::strShortUtf8($testStats['nazwa'], 80), " ");
  92. $linkProcesView = "procesy5.php?task=PROCES_VIEW&id_proces={$testStats['ID']}";
  93. UI::tag('a', ['href'=>$linkProcesView, 'title'=>"zobacz instrukcję do procesu {$testStats['ID']}", 'target'=>"_blank"], "{{$testStats['ID']}}");
  94. UI::endTag('div');// .panel-heading
  95. UI::startTag('div', ['class'=>"panel-body"]);
  96. UI::startTag('ul', ['style' => "padding-left:20px"]);
  97. UI::startTag('li');
  98. if ($activeFiltrProcessId == $testStats['ID']) {
  99. UI::tag('a', ['href'=>"index.php?FUNCTION_INIT=MENU_SELECT_PROCES&_action=setPermsAll", 'style'=>"font-weight:bold"], "Wyłącz filtr uprawnien dla", " ");
  100. } else {
  101. UI::tag('a', ['href'=>"index.php?FUNCTION_INIT=MENU_SELECT_PROCES&_action=setPermsByProces&id_proces={$testStats['ID']}"], "Uruchom filtr uprawnien dla", " ");
  102. }
  103. echo "{$testStats['ID']}";
  104. UI::endTag('li');
  105. UI::startTag('li');
  106. UI::tag('a', ['href'=>"procesy5.php?task=CRM_TESTY__ADD_TEST&test_type=TEORETYCZNY&proces_id={$testStats['ID']}"], "Wykonaj test teoretyczny dla", " ");
  107. echo "{$testStats['ID']}";
  108. UI::endTag('li');
  109. UI::startTag('li');
  110. echo "Test teoretyczny: ";
  111. UI::startTag('span', ['class'=>"proces-box"]);
  112. echo " {$testStats['wynik_teoretyczny']} ";
  113. if ($testStats['wynik_teoretyczny_value']) UI::tag('em', null, $testStats['wynik_teoretyczny_value']);
  114. UI::endTag('span');
  115. UI::endTag('li');
  116. UI::tag('li', ['class'=>"wynik-{$testStats['wynik_praktyczny']}"], "Test praktyczny: {$testStats['wynik_praktyczny']}");
  117. UI::endTag('ul');
  118. $tagFixTest = ($testStats['link_popraw_test'])
  119. ? "<a class=\"btn btn-xs btn-primary\" href=\"{$testStats['link_popraw_test']}\">popraw</a>"
  120. : '';
  121. if ($testStats['wynik_unactual']) {
  122. UI::alert('danger', "
  123. <b>Uwaga! Test nieaktualny:</b>
  124. {$tagFixTest}
  125. <br>" . substr($testStats['last_test_end'], 0, 10) . " - zakończenie testu
  126. <br>" . substr($testStats['last_update_date'], 0, 10) . " - ostatnia zmiana w procesie
  127. ");
  128. }
  129. UI::endTag('div');// .panel-body
  130. UI::endTag('div');// .panel
  131. UI::endTag('div');// .wynik-cell
  132. if (++$i >= 4) {
  133. $i = 0;
  134. UI::endTag('div');// .row
  135. UI::startTag('div', ['class'=>"row"]);
  136. }
  137. }
  138. UI::endTag('div');// .row
  139. UI::endContainer();
  140. }
  141. }
  142. }