| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?php
- Lib::loadClass('RouteBase');
- Lib::loadClass('UserBookmarks');
- Lib::loadClass('Response');
- Lib::loadClass('ProcesHelper');
- class Route_P5Menu extends RouteBase {
- public function getVersion() {
- return 2;
- }
- public function defaultAction() {
- Response::sendTryCatchJson(array($this, 'getMenuData'), $args = 'JSON_FROM_REQUEST_BODY');
- }
- public function getRawLabel($zasobObj) { // { ID, DESC, DESC_PL, OPIS } // TODO: move to ProcesHelper::getZasobTableInfo ?
- $posLimit = 20;
- if (!empty($zasobObj->DESC_PL)) return $zasobObj->DESC_PL;
- if (empty($zasobObj->OPIS)) return $zasobObj->DESC;
- $opis = $zasobObj->OPIS;
- $label = $opis;
- if (mb_strlen($opis) > $posLimit) {
- $pos = strpos($opis, ' - ');
- if ($pos > $posLimit || $pos < 5) {
- $pos = $posLimit;
- $label = mb_substr($opis, 0, $posLimit, 'utf-8') . '...';
- } else {
- $label = mb_substr($opis, 0, $pos, 'utf-8');
- }
- }
- return (empty($label))
- ? $zasobObj->DESC
- : $label;
- }
- public function getMenuData($args = []) {
- if ($postTask = V::get('_postTask', '', $args)) {
- DBG::log($args, 'array', "exec '{$postTask}'");
- if (!method_exists($this, "{$postTask}PostTask")) throw new Exception("Post Task not exists!");
- $this->{"{$postTask}PostTask"}($args);
- }
- $userAcl = User::getAcl();
- $listObjects = $userAcl->getTablesAcl();
- $listUrls = $userAcl->getUrls();
- // DBG::log($listUrls, 'array', "\$listUrls");
- $bookmarks = UserBookmarks::getInstance()->getBookmarks();
- $makeShortLabel = [ $this, 'getRawLabel' ];
- return [
- 'type' => 'success',
- 'msg' => "OK",
- 'body' => [
- 'version' => $this->getVersion(),
- 'objects' => array_map(function ($acl, $idZasob) use ($makeShortLabel) {
- if (!$acl) return [
- 'id' => $idZasob,
- 'TODO' => 'TODO'
- ];
- $zasobObj = ProcesHelper::getZasobTableInfo($acl->getID());
- return [
- 'id' => $acl->getID(),
- 'namespace' => $acl->getNamespace(),
- 'name' => $acl->getName(),
- 'desc' => $zasobObj->DESC,
- 'label' => ($zasobObj->DESC_PL) ? htmlspecialchars($zasobObj->DESC_PL) : $zasobObj->DESC,
- 'short_label' => $makeShortLabel($zasobObj),
- 'opis' => htmlspecialchars($zasobObj->OPIS),
- // 'raw_zasob_obj' => $zasobObj,
- ];
- }, array_values($listObjects), array_keys($listObjects)),
- 'urls' => array_map(function ($label, $idZasob) {
- return [
- 'id' => $idZasob,
- 'label' => (mb_strlen($label, 'utf-8') > 100) ? mb_substr($label, 0, 100, 'utf-8') . '...' : $label,
- 'raw_label' => $label,
- ];
- }, array_values($listUrls), array_keys($listUrls)),
- 'bookmarks' => // array_filter(
- array_map(function ($cls, $idZasob) use ($listObjects, $listUrls) {
- if (array_key_exists($idZasob, $listObjects)) {
- $acl = $listObjects[$idZasob];
- return [
- 'id' => $idZasob,
- 'namespace' => $acl->getNamespace(),
- 'name' => $acl->getName(),
- 'label' => $acl->getRawLabel(),
- 'opis' => $acl->getOpis(),
- 'type' => 'menu',
- 'class' => $cls
- ];
- }
- else if (array_key_exists($idZasob, $listUrls)) {
- return [
- 'id' => $idZasob,
- 'name' => $listUrls[$idZasob],
- 'type' => 'url',
- 'class' => $cls
- ];
- }
- return null;
- }, array_values($bookmarks), array_keys($bookmarks)),
- // , function ($bookmark) { return null !== $bookmark; }),
- 'idsBookmarks' => array_keys($bookmarks),
- ]
- ];
- }
- public function addBookmarkPostTask($args) {
- $zasobID = V::get('_zasobID', 0, $args, 'int');
- if ($zasobID <= 0) throw new Exception('Missing _zasobID');
- UserBookmarks::getInstance()->addBookmark($zasobID);
- User::saveProfile();
- }
- public function removeBookmarkPostTask($args) {
- $zasobID = V::get('_zasobID', 0, $args, 'int');
- if ($zasobID <= 0) throw new Exception('Missing _zasobID');
- UserBookmarks::getInstance()->removeBookmark($zasobID);
- User::saveProfile();
- $this->getMenuData();
- }
- public function changeBookmarkPostTask($args) {
- $zasobID = V::get('_zasobID', 0, $args, 'int');
- if ($zasobID <= 0) throw new Exception('Missing _zasobID');
- $btnCls = V::get('btnCls', '', $args);
- if (empty($btnCls)) {
- die('Error: no button class');
- }
- UserBookmarks::getInstance()->changeBookmark($zasobID, $btnCls);
- User::saveProfile();
- }
- public function sortBookmarksPostTask($args) {
- $idsOrdered = V::get('ids', array(), $args, 'array', array('V', 'filterPositiveInteger'));
- if (empty($idsOrdered)) throw new Exception('Missing ids');
- UserBookmarks::getInstance()->sortBookmarks($idsOrdered);
- User::saveProfile();
- }
- }
|