/lib/IWmenu/Api/User.php

https://github.com/intraweb-modules13/IWmenu · PHP · 100 lines · 70 code · 18 blank · 12 comment · 22 complexity · e1e5dfe14e1ceeb4f4e174273b45b291 MD5 · raw file

  1. <?php
  2. class IWmenu_Api_User extends Zikula_AbstractApi {
  3. /**
  4. * Gets from the database all the items in first level menu
  5. * @author: Albert Perez Monfort (aperezm@xtec.cat)
  6. * @return: And array with the items information
  7. */
  8. public function getMenuStructure($args) {
  9. $values = array();
  10. // Security check
  11. if (!SecurityUtil::checkPermission('IWmenu::', '::', ACCESS_READ)) {
  12. return LogUtil::registerPermissionError();
  13. }
  14. $uid = is_null(UserUtil::getVar('uid')) ? '-1' : UserUtil::getVar('uid');
  15. $id = isset($args['id_parent']) ? $args['id_parent'] : 0;
  16. $pntable = DBUtil::getTables();
  17. $c = $pntable['IWmenu_column'];
  18. $where = "$c[id_parent]=$id AND $c[active]=1";
  19. $orderby = "$c[iorder]";
  20. // get the objects from the db
  21. $items = DBUtil::selectObjectArray('IWmenu', $where, $orderby);
  22. // Check for an error with the database code, and if so set an appropriate
  23. // error message and return
  24. if ($items === false) {
  25. return LogUtil::registerError($this->__('Error! Could not load items.'));
  26. }
  27. if (count($items) <= 0)
  28. return false;
  29. $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
  30. $iconbase = 'index.php?module=IWmenu&func=getFile&fileName=' . ModUtil::getVar('IWmenu', 'imagedir') . '/';
  31. $menuitems = Array();
  32. $numitem = 0;
  33. // get current lang code
  34. $currentLang = ZLanguage::getLanguageCode();
  35. foreach ($items as $item) {
  36. $itemTextArray = unserialize($item['text']);
  37. $item['text'] = (isset($itemTextArray[$currentLang])) ? $itemTextArray[$currentLang] : '';
  38. $itemUrlArray = unserialize($item['url']);
  39. $item['url'] = (isset($itemUrlArray[$currentLang])) ? $itemUrlArray[$currentLang] : '';
  40. $groups_vector = explode("$", $item['groups']);
  41. foreach ($groups_vector as $group) {
  42. $isMember = false;
  43. if ($group != '') {
  44. $gids = explode("|", $group);
  45. if ($uid != '-1') {
  46. $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
  47. $isMember = ModUtil::func('IWmain', 'user', 'isMember', array('uid' => $uid,
  48. 'gid' => $gids[0],
  49. 'sv' => $sv));
  50. }
  51. if ($item['text'] != '') {
  52. if ($isMember || ($gids[0] == '-1' && $uid == '-1')) {
  53. // Put target in detic_portal if available and selected
  54. unset($menuitem);
  55. $menuitem['text'] = $item['text'];
  56. if (!empty($item['icon']))
  57. $menuitem['icon'] = $iconbase . $item['icon'];
  58. if ($item['target'] == 1) {
  59. $menuitem['url'] = $item['url'];
  60. $menuitem['target'] = ' target="_blank"';
  61. } else if ($item['target'] == 2 && ModUtil::available('IWwebbox')) {
  62. $url = str_replace('?', '**', $item['url']);
  63. $url = str_replace('&', '*', $url);
  64. $menuitem['url'] = 'index.php?module=IWwebbox&url=' . $url;
  65. $menuitem['target'] = '';
  66. } else {
  67. $menuitem['url'] = $item['url'];
  68. $menuitem['target'] = '';
  69. }
  70. $menuitem['is_parent'] = ($menuitem['children'] = ModUtil::apiFunc('IWmenu', 'user', 'getMenuStructure', array('id_parent' => $item['mid']))) ? 1 : 0;
  71. $menuitems[$numitem] = $menuitem;
  72. $numitem++;
  73. break;
  74. }
  75. }
  76. }
  77. }
  78. }
  79. // Return the items
  80. return $menuitems;
  81. }
  82. }