P5Menu.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('UserBookmarks');
  4. Lib::loadClass('Response');
  5. Lib::loadClass('ProcesHelper');
  6. class Route_P5Menu extends RouteBase {
  7. public function getVersion() {
  8. return 2;
  9. }
  10. public function defaultAction() {
  11. Response::sendTryCatchJson(array($this, 'getMenuData'), $args = 'JSON_FROM_REQUEST_BODY');
  12. }
  13. public function getRawLabel($zasobObj) { // { ID, DESC, DESC_PL, OPIS } // TODO: move to ProcesHelper::getZasobTableInfo ?
  14. $posLimit = 20;
  15. if (!empty($zasobObj->DESC_PL)) return $zasobObj->DESC_PL;
  16. if (empty($zasobObj->OPIS)) return $zasobObj->DESC;
  17. $opis = $zasobObj->OPIS;
  18. $label = $opis;
  19. if (mb_strlen($opis) > $posLimit) {
  20. $pos = strpos($opis, ' - ');
  21. if ($pos > $posLimit || $pos < 5) {
  22. $pos = $posLimit;
  23. $label = mb_substr($opis, 0, $posLimit, 'utf-8') . '...';
  24. } else {
  25. $label = mb_substr($opis, 0, $pos, 'utf-8');
  26. }
  27. }
  28. return (empty($label))
  29. ? $zasobObj->DESC
  30. : $label;
  31. }
  32. public function getMenuData($args = []) {
  33. if ($postTask = V::get('_postTask', '', $args)) {
  34. DBG::log($args, 'array', "exec '{$postTask}'");
  35. if (!method_exists($this, "{$postTask}PostTask")) throw new Exception("Post Task not exists!");
  36. $this->{"{$postTask}PostTask"}($args);
  37. }
  38. $userAcl = User::getAcl();
  39. $listObjects = $userAcl->getTablesAcl();
  40. $listUrls = $userAcl->getUrls();
  41. // DBG::log($listUrls, 'array', "\$listUrls");
  42. $bookmarks = UserBookmarks::getInstance()->getBookmarks();
  43. $makeShortLabel = [ $this, 'getRawLabel' ];
  44. return [
  45. 'type' => 'success',
  46. 'msg' => "OK",
  47. 'body' => [
  48. 'version' => $this->getVersion(),
  49. 'objects' => array_map(function ($acl, $idZasob) use ($makeShortLabel) {
  50. if (!$acl) return [
  51. 'id' => $idZasob,
  52. 'TODO' => 'TODO'
  53. ];
  54. $zasobObj = ProcesHelper::getZasobTableInfo($acl->getID());
  55. return [
  56. 'id' => $acl->getID(),
  57. 'namespace' => $acl->getNamespace(),
  58. 'name' => $acl->getName(),
  59. 'desc' => $zasobObj->DESC,
  60. 'label' => ($zasobObj->DESC_PL) ? htmlspecialchars($zasobObj->DESC_PL) : $zasobObj->DESC,
  61. 'short_label' => $makeShortLabel($zasobObj),
  62. 'opis' => htmlspecialchars($zasobObj->OPIS),
  63. // 'raw_zasob_obj' => $zasobObj,
  64. ];
  65. }, array_values($listObjects), array_keys($listObjects)),
  66. 'urls' => array_map(function ($label, $idZasob) {
  67. return [
  68. 'id' => $idZasob,
  69. 'label' => (mb_strlen($label, 'utf-8') > 100) ? mb_substr($label, 0, 100, 'utf-8') . '...' : $label,
  70. 'raw_label' => $label,
  71. ];
  72. }, array_values($listUrls), array_keys($listUrls)),
  73. 'bookmarks' => // array_filter(
  74. array_map(function ($cls, $idZasob) use ($listObjects, $listUrls) {
  75. if (array_key_exists($idZasob, $listObjects)) {
  76. $acl = $listObjects[$idZasob];
  77. return [
  78. 'id' => $idZasob,
  79. 'namespace' => $acl->getNamespace(),
  80. 'name' => $acl->getName(),
  81. 'label' => $acl->getRawLabel(),
  82. 'opis' => $acl->getOpis(),
  83. 'type' => 'menu',
  84. 'class' => $cls
  85. ];
  86. }
  87. else if (array_key_exists($idZasob, $listUrls)) {
  88. return [
  89. 'id' => $idZasob,
  90. 'name' => $listUrls[$idZasob],
  91. 'type' => 'url',
  92. 'class' => $cls
  93. ];
  94. }
  95. return null;
  96. }, array_values($bookmarks), array_keys($bookmarks)),
  97. // , function ($bookmark) { return null !== $bookmark; }),
  98. 'idsBookmarks' => array_keys($bookmarks),
  99. ]
  100. ];
  101. }
  102. public function addBookmarkPostTask($args) {
  103. $zasobID = V::get('_zasobID', 0, $args, 'int');
  104. if ($zasobID <= 0) throw new Exception('Missing _zasobID');
  105. UserBookmarks::getInstance()->addBookmark($zasobID);
  106. User::saveProfile();
  107. }
  108. public function removeBookmarkPostTask($args) {
  109. $zasobID = V::get('_zasobID', 0, $args, 'int');
  110. if ($zasobID <= 0) throw new Exception('Missing _zasobID');
  111. UserBookmarks::getInstance()->removeBookmark($zasobID);
  112. User::saveProfile();
  113. $this->getMenuData();
  114. }
  115. public function changeBookmarkPostTask($args) {
  116. $zasobID = V::get('_zasobID', 0, $args, 'int');
  117. if ($zasobID <= 0) throw new Exception('Missing _zasobID');
  118. $btnCls = V::get('btnCls', '', $args);
  119. if (empty($btnCls)) {
  120. die('Error: no button class');
  121. }
  122. UserBookmarks::getInstance()->changeBookmark($zasobID, $btnCls);
  123. User::saveProfile();
  124. }
  125. public function sortBookmarksPostTask($args) {
  126. $idsOrdered = V::get('ids', array(), $args, 'array', array('V', 'filterPositiveInteger'));
  127. if (empty($idsOrdered)) throw new Exception('Missing ids');
  128. UserBookmarks::getInstance()->sortBookmarks($idsOrdered);
  129. User::saveProfile();
  130. }
  131. }