mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-25 07:59:28 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d1ef2e4f74 | |||
| b0fea017f2 | |||
| 861623750d | |||
| 51d73c862b |
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
$config['stv_menu'] = array(
|
||||
'library' => 'treemenu/TreeMenuLib',
|
||||
'children' => array(
|
||||
'stg' => array(
|
||||
'library' => 'treemenu/StgLib',
|
||||
'children' => array(
|
||||
/*
|
||||
'pre' => array(
|
||||
'library' => 'treemenu/PrestudentLib'
|
||||
),
|
||||
'sem' => array(
|
||||
'library' => 'treemenu/AusbSemesterLib',
|
||||
'children' => array(
|
||||
'vbd' => array(
|
||||
'library' => 'treemenu/VerbandLib'
|
||||
)
|
||||
)
|
||||
),
|
||||
*/
|
||||
'orgform' => array(
|
||||
'library' => 'treemenu/OrgFormLib',
|
||||
'children' => array(
|
||||
/*
|
||||
'pre' => array(
|
||||
'library' => 'treemenu/PrestudentLib'
|
||||
),
|
||||
'sem' => array(
|
||||
'library' => 'treemenu/AusbSemesterLib',
|
||||
'children' => array(
|
||||
'vbd' => array(
|
||||
'library' => 'treemenu/VerbandLib'
|
||||
)
|
||||
)
|
||||
)
|
||||
*/
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
'inout' => array(
|
||||
'library' => 'treemenu/InOutLib'
|
||||
),
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about verbände
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class TreeMenu extends FHCAPI_Controller
|
||||
{
|
||||
protected $treemenuconfig;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'fullMenu' => ['admin:r', 'assistenz:r'],
|
||||
'partMenu' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
}
|
||||
|
||||
public function fullMenu($treemenu=null)
|
||||
{
|
||||
$includeSubMenu = true;
|
||||
$this->getMenu($treemenu, $includeSubMenu);
|
||||
}
|
||||
|
||||
public function partMenu($treemenu=null)
|
||||
{
|
||||
$includeSubMenu = false;
|
||||
$this->getMenu($treemenu, $includeSubMenu);
|
||||
}
|
||||
|
||||
protected function getMenu($treemenu=null, $includeSubMenu=false)
|
||||
{
|
||||
if(is_null($treemenu))
|
||||
{
|
||||
$this->terminateWithError('missing parameter treemenu.');
|
||||
}
|
||||
|
||||
$this->loadMenuConfig($treemenu);
|
||||
|
||||
$uri = $this->uri->uri_to_assoc(7);
|
||||
$startconfig = $this->findStartLib($this->treemenuconfig, array_keys($uri));
|
||||
|
||||
$libpath = $startconfig['library'];
|
||||
$children = isset($startconfig['children']) ? $startconfig['children'] : array();
|
||||
$libname = basename($startconfig['library']);
|
||||
|
||||
$this->load->library(
|
||||
$libpath,
|
||||
$children,
|
||||
$libname
|
||||
);
|
||||
|
||||
$bhdebug = (object) array(
|
||||
'treemenu' => $treemenu,
|
||||
'treemenuconfig' => $this->treemenuconfig,
|
||||
'uri' => $uri,
|
||||
'libpath' => $libpath,
|
||||
'libname' => $libname,
|
||||
'children' => $children,
|
||||
'startconfig' => $startconfig
|
||||
);
|
||||
$this->addMeta('bhdebug', $bhdebug);
|
||||
//$this->addMeta('bhci', $this);
|
||||
|
||||
$this->$libname->init($uri, $includeSubMenu);
|
||||
$data = $this->$libname->getSubMenu();
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
protected function findStartLib($config, $uri)
|
||||
{
|
||||
$level = array_shift($uri);
|
||||
if(is_null($level)) {
|
||||
return $config;
|
||||
}
|
||||
return $this->findStartLib($config['children'][$level], $uri);
|
||||
}
|
||||
|
||||
protected function loadMenuConfig($treemenu)
|
||||
{
|
||||
$this->config->load('treemenu/' . $treemenu . '.php');
|
||||
$this->treemenuconfig = $this->config->item($treemenu);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
require_once APPPATH . 'libraries/treemenu/TreeMenuLib.php';
|
||||
|
||||
/**
|
||||
* Description of InOutLib
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class InOutLib extends TreeMenuLib
|
||||
{
|
||||
public function getNodes($params=array(), $includeSubMenu=false)
|
||||
{
|
||||
return [
|
||||
[
|
||||
'name' => 'International',
|
||||
'link' => 'inout',
|
||||
'children' => [
|
||||
[
|
||||
'name' => 'Incoming',
|
||||
'link' => 'inout/incoming',
|
||||
'leaf' => true
|
||||
],
|
||||
[
|
||||
'name' => 'Outgoing',
|
||||
'link' => 'inout/outgoing',
|
||||
'leaf' => true
|
||||
],
|
||||
[
|
||||
'name' => 'Gemeinsame Studien',
|
||||
'link' => 'inout/gemeinsamestudien',
|
||||
'leaf' => true
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
require_once APPPATH . 'libraries/treemenu/TreeMenuLib.php';
|
||||
|
||||
/**
|
||||
* Description of OrgFormLib
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class OrgFormLib extends TreeMenuLib
|
||||
{
|
||||
public function getData()
|
||||
{
|
||||
if(!isset($this->params['stg']))
|
||||
{
|
||||
throw new Exception(self::class . ' Missing Parameter stg.');
|
||||
}
|
||||
|
||||
$this->ci->load->model('codex/Orgform_model', 'OrgFormModel');
|
||||
|
||||
$sql = <<<EOSQL
|
||||
select
|
||||
o.*
|
||||
from
|
||||
bis.tbl_orgform o
|
||||
join (
|
||||
SELECT
|
||||
tl.orgform_kurzbz
|
||||
FROM
|
||||
public.tbl_lehrverband AS tl
|
||||
WHERE
|
||||
studiengang_kz = {$this->ci->OrgFormModel->escape($this->params['stg'])}
|
||||
and
|
||||
orgform_kurzbz IS NOT null
|
||||
group by
|
||||
orgform_kurzbz
|
||||
) v on o.orgform_kurzbz = v.orgform_kurzbz
|
||||
order by
|
||||
o.orgform_kurzbz
|
||||
EOSQL;
|
||||
|
||||
$res = $this->ci->OrgFormModel->execReadonlyQuery($sql);
|
||||
$orgforms = hasData($res) ? getData($res) : array();
|
||||
|
||||
$this->ci->addMeta('bhorgform_' . $this->params['stg'] , $orgforms);
|
||||
|
||||
return $orgforms;
|
||||
}
|
||||
|
||||
protected function getParamsForNextLevel($element=null)
|
||||
{
|
||||
if($element)
|
||||
{
|
||||
$paramsstg = array_merge($this->params, array('orgform' => $element->orgform_kurzbz));
|
||||
return $paramsstg;
|
||||
}
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
protected function getName($element)
|
||||
{
|
||||
$name = $element->orgform_kurzbz . ' ' . $element->bezeichnung;
|
||||
return $name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
require_once APPPATH . 'libraries/treemenu/TreeMenuLib.php';
|
||||
|
||||
/**
|
||||
* Description of PreStudentLib
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class PreStudentLib extends TreeMenuLib
|
||||
{
|
||||
public function getNodes($params=array())
|
||||
{
|
||||
return [
|
||||
[
|
||||
'name' => 'International',
|
||||
'link' => 'inout',
|
||||
'children' => [
|
||||
[
|
||||
'name' => 'Incoming',
|
||||
'link' => 'inout/incoming',
|
||||
'leaf' => true
|
||||
],
|
||||
[
|
||||
'name' => 'Outgoing',
|
||||
'link' => 'inout/outgoing',
|
||||
'leaf' => true
|
||||
],
|
||||
[
|
||||
'name' => 'Gemeinsame Studien',
|
||||
'link' => 'inout/gemeinsamestudien',
|
||||
'leaf' => true
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
require_once APPPATH . 'libraries/treemenu/TreeMenuLib.php';
|
||||
|
||||
/**
|
||||
* Description of InOutLib
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class StgLib extends TreeMenuLib
|
||||
{
|
||||
protected function getData()
|
||||
{
|
||||
$this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->ci->StudiengangModel->addOrder('typ');
|
||||
$this->ci->StudiengangModel->addOrder('kurzbz');
|
||||
$res = $this->ci->StudiengangModel->loadWhere(array('aktiv' => true));
|
||||
$stgs = hasData($res) ? getData($res) : array();
|
||||
|
||||
$this->ci->addMeta('bhstg', $stgs);
|
||||
|
||||
return $stgs;
|
||||
}
|
||||
|
||||
protected function getParamsForNextLevel($element=null)
|
||||
{
|
||||
if($element)
|
||||
{
|
||||
$paramsstg = array_merge($this->params, array('stg' => $element->studiengang_kz));
|
||||
return $paramsstg;
|
||||
}
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
protected function getName($element)
|
||||
{
|
||||
$name = strtoupper($element->typ . $element->kurzbz) . ' ' . $element->bezeichnung;
|
||||
return $name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
require_once APPPATH . 'libraries/treemenu/TreeMenuLib.php';
|
||||
/**
|
||||
* Description of StvMenuLib
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class StvMenuLib extends TreeMenuLib
|
||||
{
|
||||
public function getNodes($params=array(), $includeSubMenu=false)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Scripting/PHPClass.php to edit this template
|
||||
*/
|
||||
|
||||
/**
|
||||
* Description of InOutLib
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class TreeMenuLib
|
||||
{
|
||||
protected $ci;
|
||||
protected $children_config;
|
||||
protected $params;
|
||||
protected $includeSubMenu;
|
||||
|
||||
public function __construct($children_config)
|
||||
{
|
||||
$this->ci =& get_instance();
|
||||
$this->children_config = $children_config;
|
||||
$this->params = array();
|
||||
$this->includeSubMenu = false;
|
||||
|
||||
foreach($this->children_config as $child_config)
|
||||
{
|
||||
$grandchildren_config = isset($child_config['children']) ? $child_config['children'] : [];
|
||||
$this->ci->load->library($child_config['library'], $grandchildren_config, basename($child_config['library']));
|
||||
}
|
||||
}
|
||||
|
||||
public function init($params=array(), $includeSubMenu=false)
|
||||
{
|
||||
$this->params = $params;
|
||||
$this->includeSubMenu = $includeSubMenu;
|
||||
}
|
||||
|
||||
public function getNodes()
|
||||
{
|
||||
$data = $this->getData();
|
||||
|
||||
$nodes = array();
|
||||
foreach($data as $element)
|
||||
{
|
||||
$node = array(
|
||||
'name' => $this->getName($element),
|
||||
'link' => $this->getLink($element),
|
||||
'leaf' => $this->isLeaf()
|
||||
);
|
||||
if($this->includeSubMenu)
|
||||
{
|
||||
$node['children'] = $this->getSubMenu($element);
|
||||
}
|
||||
$nodes[] = $node;
|
||||
};
|
||||
|
||||
return $nodes;
|
||||
}
|
||||
|
||||
public function getSubMenu($element=null)
|
||||
{
|
||||
$nodes = array();
|
||||
|
||||
foreach($this->children_config as $childconfig)
|
||||
{
|
||||
$childlib = basename($childconfig['library']);
|
||||
$this->ci->$childlib->init(
|
||||
$this->getParamsForNextLevel($element),
|
||||
$this->includeSubMenu
|
||||
);
|
||||
$childnodes = $this->ci->$childlib->getNodes();
|
||||
$nodes = array_merge($nodes, $childnodes);
|
||||
}
|
||||
|
||||
return $nodes;
|
||||
}
|
||||
|
||||
protected function getData()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
protected function getParamsForNextLevel($element=null)
|
||||
{
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
protected function getName($element)
|
||||
{
|
||||
return __METHOD__ . 'NOT IMPLEMENTED';
|
||||
}
|
||||
|
||||
protected function getLink($element)
|
||||
{
|
||||
$link = $this->ci->uri->assoc_to_uri($this->getParamsForNextLevel($element));
|
||||
return $link;
|
||||
}
|
||||
|
||||
protected function isLeaf()
|
||||
{
|
||||
if(count($this->children_config) === 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user