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'])];
}
}