db = $db; $this->parent = $parent; } public function setSource($source) { $this->source = $source; } protected function getItems() { $sql = " SELECT DISTINCT sys_menuitem.id, title, tooltip, module, page, priority, module IS NULL AND page IS NULL AS submenu FROM sys_menuitem JOIN sys_group_menuitem ON sys_menuitem.id = sys_menuitem_id JOIN sys_group ON sys_group.id = sys_group_menuitem.sys_group_id JOIN sys_group_user ON sys_group.id = sys_group_user.sys_group_id WHERE parent = %d AND shadow = 0 AND sys_user_id = %d ORDER BY priority "; $sql = sprintf($sql, $this->parent, $_SESSION['sys']['uid']); return $this->db->fetchObjectList($sql); } public function getTitle() { if (empty($this->parent)) return 'Hauptmenü'; $sql = sprintf("SELECT title FROM sys_menuitem WHERE id = %d", $this->parent); return $this->db->fetchValue($sql); } protected function getParent() { $sql = sprintf("SELECT parent FROM sys_menuitem WHERE id = %d", $this->parent); return $this->db->fetchValue($sql); } public function render() { $result = array(); if (empty($this->parent)) $result[] = sprintf('Start', $this->source == 'start' ? ' class="current"' : '', Hallinta::instance()->urlbase()); $rows = $this->getItems(); foreach ($rows as $row) { if ($row->submenu) { $result[] = sprintf('
  • %s...
  • ', $row->id, $row->tooltip, $row->title); } else { if (defined('REWRITE_URLS') && REWRITE_URLS) $url = sprintf('%s%s/%s', Hallinta::instance()->urlbase(), $row->module, $row->page); else $url = sprintf('./?mask=%s__%s', $row->module, $row->page); $result[] = sprintf('%s', $this->source == ($row->module.'__'.$row->page) ? ' class="current"' : '', $url, $row->tooltip, $row->title); } } if (empty($this->parent)) $result[] = sprintf('
  • Logout
  • ', Hallinta::instance()->urlbase()); else $result[] = sprintf('
  • Zurück
  • ', $this->getParent()); if (!count($result)) return ''; return ''; } public function getMenus() { $sql = "SELECT id,title AS text FROM sys_menuitem WHERE module IS NULL AND page IS NULL"; return $this->db->fetchAssocList($sql); } public function getModules() { $list = []; $dir = Hallinta::instance()->basedir() . HALLINTA_MODULEDIR; foreach (new DirectoryIterator($dir) as $fileInfo) { if ($fileInfo->isDot()) continue; if (!$fileInfo->isDir()) continue; if (file_exists($dir . '/' . $fileInfo->getFileName() . '/' . '.moduleignore')) continue; $list[] = ['id' => $fileInfo->getFileName(), 'text' => $fileInfo->getFileName()]; } usort($list, function($a, $b){ return strcmp($a['text'], $b['text']); }); return $list; } public function getPages($module) { $list = []; $module = str_replace('/', '', $module); $dir = Hallinta::instance()->basedir() . HALLINTA_MODULEDIR . '/' . $module; if (!is_dir($dir)) return []; foreach (new DirectoryIterator($dir) as $fileInfo) { if ($fileInfo->isDot()) continue; if (!$fileInfo->isFile()) continue; if (substr($fileInfo->getFileName(), -4) != '.php') continue; $page = substr($fileInfo->getFileName(),0,-4); $list[] = ['id' => $page, 'text' => $page]; } usort($list, function($a, $b){ return strcmp($a['text'], $b['text']); }); return $list; } public function hasPermission() { $hallinta = Hallinta::instance(); $sql = <<db->quote($hallinta->module()), $this->db->quote($hallinta->page())); return $this->db->fetchValue($sql) > 0; } public function mayEdit() { $hallinta = Hallinta::instance(); $sql = <<db->quote($hallinta->module()), $this->db->quote($hallinta->page())); return $this->db->fetchValue($sql) > 0; } public function isRegular() { $hallinta = Hallinta::instance(); $sql = <<db->quote($hallinta->module()), $this->db->quote($hallinta->page())); return $this->db->fetchValue($sql) > 0; } public function ajaxGetParent(Array $data) { return ['list' => $this->getMenus()]; } public function ajaxGetModules(Array $data) { return ['list' => $this->getModules()]; } public function ajaxGetPages(Array $data) { return ['list' => $this->getPages($data['module'])]; } }