P5Menu.php 3.5 KB

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