mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
3 Versions
This commit is contained in:
@@ -61,7 +61,8 @@ $route['api/v1/organisation/[O|o]rganisationseinheit/(:any)'] = 'api/v1/organisa
|
||||
$route['api/v1/ressource/[B|b]etriebsmittelperson/(:any)'] = 'api/v1/ressource/betriebsmittelperson2/$1';
|
||||
$route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
|
||||
|
||||
$route['cis'] = 'cis/dashboard';
|
||||
$route['CisHtml'] = 'CisHtml/dashboard';
|
||||
$route['CisVue'] = 'CisVue/dashboard';
|
||||
|
||||
// load routes from extensions
|
||||
$subdir = 'application/config/extensions';
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class CisHmvc extends FHC_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->load->library('AuthLib');
|
||||
$this->load->library('PermissionLib');
|
||||
|
||||
$this->load->model('content/Content_model', 'ContentModel');
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param string $method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function _remap($method)
|
||||
{
|
||||
$this->index();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$path = explode('/', uri_string());
|
||||
array_shift($path); // NOTE(chris): remove cis4/
|
||||
|
||||
$menu = $this->ContentModel->getMenu(6739, get_uid());
|
||||
if (isError($menu)) {
|
||||
// TODO(chris): Error Handling
|
||||
return $this->load->view('CisHmvc/Error', ['error' => getError($menu)]);
|
||||
}
|
||||
$menu = getData($menu) ?? (object)['childs' => []];
|
||||
|
||||
$menu = $this->convertMenu($menu->childs, $path, APP_ROOT . 'index.ci.php/CisHmvc');
|
||||
$current = ['childs' => $menu];
|
||||
$params = $path;
|
||||
|
||||
foreach ($path as $key) {
|
||||
if (!isset($current['childs'][$key])) {
|
||||
if ($current['childs'] == $menu)
|
||||
$current = null;
|
||||
break;
|
||||
}
|
||||
$current = $current['childs'][$key];
|
||||
array_shift($params);
|
||||
}
|
||||
if (!$current) {
|
||||
return $this->notfound();
|
||||
}
|
||||
switch ($current['orig']->template_kurzbz) {
|
||||
case 'redirect': {
|
||||
list ($url, $target) = $this->getRedirectUrlAndTarget($current['orig']->content);
|
||||
if (substr($url, 0, 1) == '#')
|
||||
{
|
||||
$controller = 'CisHmvc';
|
||||
$action = 'notfound';
|
||||
break;
|
||||
}
|
||||
if ($target)
|
||||
{
|
||||
$controller = 'CisHmvc';
|
||||
$action = 'redirect';
|
||||
array_unshift($params, $url);
|
||||
break;
|
||||
}
|
||||
if (preg_match('/^(\.\.\/|\.\/)*index\.ci\.php\/(.*)$/', $url, $matches))
|
||||
{
|
||||
list ($controller, $action, $p) = $this->getControllerMethodAndParamsFromUrl($matches[2]);
|
||||
if (!$controller)
|
||||
{
|
||||
$controller = 'CisHmvc';
|
||||
$action = 'notfound';
|
||||
}
|
||||
else
|
||||
{
|
||||
while (count($p))
|
||||
array_unshift($params, array_pop($p));
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (preg_match('/^(\.\.\/|\.\/)*(addons|cms|cis)\/(.*)$/', $url, $matches))
|
||||
{
|
||||
$controller = 'CisHmvc/Cms';
|
||||
$action = 'legacy';
|
||||
array_unshift($params, $matches[2] . "/" . $matches[3]);
|
||||
break;
|
||||
}
|
||||
|
||||
$controller = 'CisHmvc/cms';
|
||||
$action = 'debug';
|
||||
array_unshift($params, $current['orig']);
|
||||
break;
|
||||
}
|
||||
case 'contentohnetitel':
|
||||
case 'contentmittitel': {
|
||||
$controller = 'CisHmvc/cms';
|
||||
$action = 'content';
|
||||
array_unshift($params, $current['orig']->content_id);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
$controller = 'CisHmvc/cms';
|
||||
$action = 'debug';
|
||||
array_unshift($params, $current['orig']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$className = ucfirst(basename($controller));
|
||||
$path = APPPATH . 'controllers/' . dirname($controller) . '/' . $className . '.php';
|
||||
|
||||
#var_dump(is_loaded());
|
||||
require_once $path;
|
||||
foreach (is_loaded() as $k => $v)
|
||||
if (!in_array($k, ['benchmark','hooks','config','log','utf8','uri','router','output','security','input','lang','loader']))
|
||||
unset(is_loaded()[$k]);
|
||||
|
||||
$this->router->directory = dirname($controller) . '/';
|
||||
$this->router->class = $className;
|
||||
$this->router->method = $action;
|
||||
|
||||
#var_dump($this->router->method);
|
||||
$controller = new $className();
|
||||
// NOTE(chris): this is needed because we loaded it in this controller and it can't be loaded twice
|
||||
$controller->ContentModel = $this->ContentModel;
|
||||
|
||||
$this->load->library('CisHmvc/Loader', [$menu, $this->load], 'Cis4Loader');
|
||||
$controller->load = $controller->Cis4Loader;
|
||||
call_user_func_array(array(&$controller, $action), $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function notfound()
|
||||
{
|
||||
set_status_header(404);
|
||||
$this->load->view('CisHmvc/Error', ['error' => '404: Site Not Found']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uri_string $url
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function redirect($url)
|
||||
{
|
||||
redirect($url);
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Protected methods (move to lib?)
|
||||
|
||||
protected function getControllerMethodAndParamsFromUrl($url) {
|
||||
$segments = explode('/', $url);
|
||||
$path = '';
|
||||
while ($possibleController = array_shift($segments)) {
|
||||
if (file_exists(APPPATH . 'controllers/' . $path . ucfirst($possibleController) . '.php'))
|
||||
return [$path . $possibleController, array_shift($segments) ?: 'index', $segments];
|
||||
$path .= $possibleController . '/';
|
||||
}
|
||||
return [null, null, null];
|
||||
}
|
||||
|
||||
protected function getRedirectUrlAndTarget($content) {
|
||||
if (!$content)
|
||||
return ['#', ''];
|
||||
|
||||
$url = '';
|
||||
$target = '';
|
||||
|
||||
$xml = new DOMDocument();
|
||||
$xml->loadXML($content);
|
||||
if ($xml->getElementsByTagName('url')->item(0))
|
||||
$url = $xml->getElementsByTagName('url')->item(0)->nodeValue;
|
||||
// TODO(chris): get params
|
||||
if (strpos($url, '$') !== FALSE)
|
||||
var_dump($url);
|
||||
if (isset($params) && is_array($params))
|
||||
foreach ($params as $key=>$value)
|
||||
$url = str_replace('$' . $key, addslashes($value), $url);
|
||||
if ($xml->getElementsByTagName('target')->item(0))
|
||||
$target = $xml->getElementsByTagName('target')->item(0)->nodeValue;
|
||||
|
||||
if (!$url)
|
||||
$url = '#';
|
||||
|
||||
if (substr($url, 0, 1) == '#')
|
||||
$target = '';
|
||||
|
||||
if ($target == 'content' || $target == '_self')
|
||||
$target = '';
|
||||
|
||||
return [$url, $target];
|
||||
}
|
||||
|
||||
protected function convertMenu($items, $path, $path_prefix) {
|
||||
$menu = [];
|
||||
$current_path = array_shift($path);
|
||||
foreach ($items as $item)
|
||||
{
|
||||
$entry = [];
|
||||
$entry['template_kurzbz'] = 'cis';
|
||||
$entry['content_id'] = $item->content_id;
|
||||
$entry['titel'] = $item->titel;
|
||||
|
||||
$slug = $this->createSlug($item->titel);
|
||||
|
||||
$entry['active'] = ($slug == $current_path);
|
||||
$entry['menu_open'] = $entry['active'];
|
||||
$entry['url'] = $path_prefix . '/' . $slug;
|
||||
$entry['target'] = '';
|
||||
|
||||
$entry['childs'] = $this->convertMenu($item->childs, $path, $entry['url']);
|
||||
|
||||
if ($entry['active'])
|
||||
$entry['orig'] = $item;
|
||||
|
||||
// TODO(chris): rewrite external and hash urls
|
||||
if ($item->template_kurzbz == 'redirect')
|
||||
{
|
||||
list ($url, $target) = $this->getRedirectUrlAndTarget($item->content);
|
||||
|
||||
if (substr($url, 0, 1) == '#')
|
||||
{
|
||||
$entry['url'] = $url;
|
||||
}
|
||||
elseif ($target)
|
||||
{
|
||||
$entry['url'] = $url;
|
||||
$entry['target'] = $target;
|
||||
}
|
||||
/*elseif (substr($url, 0, 7) != '../cis/' && substr($url, 0, 7) != '../cms/' && substr($url, 0, 10) != '../addons/' && substr($url, 0, 16) != '../index.ci.php/' && substr($url, 0, 1) != '?')
|
||||
{
|
||||
var_dump($entry['url']);
|
||||
}*/
|
||||
}
|
||||
|
||||
$menu[$slug] = $entry;
|
||||
}
|
||||
return $menu;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function used to create a slug associated to an "ugly" string.
|
||||
*
|
||||
* @param string $text the string to transform.
|
||||
*
|
||||
* @return string the resulting slug.
|
||||
*/
|
||||
protected function createSlug($text) {
|
||||
$table = [
|
||||
'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
|
||||
'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'Ae', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
|
||||
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
|
||||
'Õ'=>'O', 'Ö'=>'Oe', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'Ue', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
|
||||
'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'ae', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
|
||||
'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
|
||||
'ô'=>'o', 'õ'=>'o', 'ö'=>'oe', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ü'=>'ue', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
|
||||
'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', '/' => '-', ' ' => '-'
|
||||
];
|
||||
$text = preg_replace(['/\s{2,}/', '/[\t\n]/'], ' ', $text);
|
||||
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
|
||||
$text = strtr($text, $table);
|
||||
$text = preg_replace('~^[^a-z]~i', '', $text);
|
||||
return strtolower($text);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Cms extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'debug' => 'user:r',
|
||||
'legacy' => 'user:r',
|
||||
'content' => 'user:r',
|
||||
'news' => 'user:r'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads WidgetLib
|
||||
$this->load->library('CmsLib');
|
||||
#$this->load->library('WidgetLib');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases([
|
||||
'global'
|
||||
]);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param stdClass $content
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function debug($content)
|
||||
{
|
||||
$msg = $content->template_kurzbz . ' not yet implemented';
|
||||
if ($content->template_kurzbz == 'redirect') {
|
||||
$msg .= '<pre class="card p-1 mt-3">' . htmlentities($content->content) . '</pre>';
|
||||
}
|
||||
$this->load->view('CisHmvc/Error', ['error' => $msg]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function legacy($url)
|
||||
{
|
||||
$msg = $url;
|
||||
$this->load->view('CisHmvc/Cms/Legacy', ['url' => $url]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $content_id
|
||||
* @param int $version
|
||||
* @param string $sprache
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
|
||||
if (isError($content))
|
||||
return $this->load->view('CisHmvc/Error', ['error' => getError($content)]);
|
||||
|
||||
$this->load->view('CisHmvc/Cms/Content', ['content' => getData($content)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $infoscreen
|
||||
* @param string | null $studiengang_kz
|
||||
* @param int | null $semester
|
||||
* @param boolean $mischen
|
||||
* @param string $titel
|
||||
* @param boolean $edit
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar);
|
||||
|
||||
if (isError($news))
|
||||
return $this->load->view('CisHmvc/Error', ['error' => getError($news)]);
|
||||
|
||||
$this->load->view('CisHmvc/Cms/Content', ['content' => getData($news)]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Cms extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'content' => 'user:r',
|
||||
'news' => 'user:r'
|
||||
]);
|
||||
|
||||
// Loads Libraries
|
||||
$this->load->library('CmsLib');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases([
|
||||
'global'
|
||||
]);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param int $content_id
|
||||
* @param int $version
|
||||
* @param string $sprache
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
|
||||
if (isError($content))
|
||||
return $this->load->view('CisHtml/Error', ['error' => getError($content)]);
|
||||
|
||||
$this->load->view('CisHtml/Cms/Content', ['content' => getData($content)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $infoscreen
|
||||
* @param string | null $studiengang_kz
|
||||
* @param int | null $semester
|
||||
* @param boolean $mischen
|
||||
* @param string $titel
|
||||
* @param boolean $edit
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar);
|
||||
|
||||
if (isError($news))
|
||||
return $this->load->view('CisHtml/Error', ['error' => getError($news)]);
|
||||
|
||||
$this->load->view('CisHtml/Cms/Content', ['content' => getData($news)]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Dashboard extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'user:r'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('CisHtml/Dashboard.php');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Cms extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'content' => 'user:r',
|
||||
'news' => 'user:r'
|
||||
]);
|
||||
|
||||
// Loads Libraries
|
||||
$this->load->library('CmsLib');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases([
|
||||
'global'
|
||||
]);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param int $content_id
|
||||
* @param int $version
|
||||
* @param string $sprache
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
|
||||
if (isError($content))
|
||||
return $this->load->view('CisHtml/Error', ['error' => getError($content)]);
|
||||
|
||||
$this->load->view('CisHtml/Cms/Content', ['content' => getData($content)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $infoscreen
|
||||
* @param string | null $studiengang_kz
|
||||
* @param int | null $semester
|
||||
* @param boolean $mischen
|
||||
* @param string $titel
|
||||
* @param boolean $edit
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar);
|
||||
|
||||
if (isError($news))
|
||||
return $this->load->view('CisHtml/Error', ['error' => getError($news)]);
|
||||
|
||||
$this->load->view('CisHtml/Cms/Content', ['content' => getData($news)]);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -27,7 +27,7 @@ class Dashboard extends Auth_Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('cis/Dashboard.php');
|
||||
$this->load->view('CisVue/Dashboard.php');
|
||||
}
|
||||
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class Cms extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'content' => 'user:r'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads WidgetLib
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Load Models
|
||||
$this->load->model('content/Content_model', 'ContentModel');
|
||||
$this->load->model('content/Contentgruppe_model', 'ContentgruppeModel');
|
||||
$this->load->model('content/Template_model', 'TemplateModel');
|
||||
if (defined('LOG_CONTENT') && LOG_CONTENT)
|
||||
$this->load->model('system/Webservicelog_model', 'WebservicelogModel');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases(
|
||||
array()
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param int $content_id
|
||||
* @param int $version
|
||||
* @param string $sprache
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
if(!is_numeric($content_id))
|
||||
return $this->load->view('cis/Error.php', ['error' => 'ContentID ist ungueltig']);
|
||||
|
||||
if ($sprache === null)
|
||||
$sprache = getUserLanguage();
|
||||
|
||||
$islocked = $this->ContentgruppeModel->loadWhere(['content_id' => $content_id]);
|
||||
if (isError($islocked))
|
||||
return $this->load->view('cis/Error.php', ['error' => getError($islocked)]);
|
||||
|
||||
if (getData($islocked)) {
|
||||
$uid = getAuthUID();
|
||||
$isberechtigt = $this->ContentgruppeModel->berechtigt($content_id, $uid);
|
||||
if (isError($isberechtigt))
|
||||
return $this->load->view('cis/Error.php', ['error' => getError($isberechtigt)]);
|
||||
|
||||
if (!getData($isberechtigt))
|
||||
return $this->load->view('cis/Error.php', ['error' => 'global/keineBerechtigungFuerDieseSeite']);
|
||||
}
|
||||
|
||||
$content = $this->ContentModel->getContent($content_id, $sprache, $version, $sichtbar, true);
|
||||
|
||||
if (isError($content))
|
||||
return $this->load->view('cis/Error.php', ['error' => getError($content)]);
|
||||
|
||||
// Legt einen Logeintrag für die Klickstatistik an
|
||||
if (defined('LOG_CONTENT') && LOG_CONTENT)
|
||||
{
|
||||
// Nur eingeloggte User werden geloggt, das sonst auch alle Infoscreenaufrufe und dgl. mitgeloggt werden
|
||||
if (isLogged())
|
||||
{
|
||||
$request_data = 'content_id=' . $content_id;
|
||||
if ($version !== null)
|
||||
$request_data .= '&version=' . $version;
|
||||
if ($sichtbar !== true)
|
||||
$request_data .= '&sichtbar=' . $sichtbar;
|
||||
$this->WebservicelogModel->insert([
|
||||
'webservicetyp_kurzbz' => 'content',
|
||||
'request_id' => $content_id,
|
||||
'beschreibung' => 'content',
|
||||
'request_data' => $request_data . '&sprache=' . $sprache,
|
||||
'execute_time' => 'now()',
|
||||
'execute_user' => getAuthUID()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$content = getData($content);
|
||||
|
||||
//XSLT Vorlage laden
|
||||
$template = $this->TemplateModel->load($content->template_kurzbz);
|
||||
if (isError($template))
|
||||
return $this->load->view('cis/Error.php', ['error' => getError($template)]);
|
||||
$template = current(getData($template));
|
||||
|
||||
$XML = new \DOMDocument();
|
||||
$XML->loadXML($content->content);
|
||||
|
||||
$xsltemplate = new \DOMDocument();
|
||||
$xsltemplate->loadXML($template->xslt_xhtml_c4);
|
||||
|
||||
//Transformation
|
||||
$processor = new \XSLTProcessor();
|
||||
$processor->importStylesheet($xsltemplate);
|
||||
|
||||
$content = $processor->transformToXML($XML);
|
||||
$content = str_replace('dms.php', APP_ROOT . 'cms/dms.php', $content);
|
||||
|
||||
$this->load->view('cis/cms/Content.php', ['content' => $content]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the FilterCmptLib (back-end)
|
||||
* Provides data to the ajax get calls about the filter component
|
||||
* Listens to ajax post calls to change the filter data
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
* NOTE: extends the FHC_Controller instead of the Auth_Controller because the FilterCmpt has its
|
||||
* own permissions check
|
||||
*/
|
||||
class CisVue extends Auth_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'Menu' => 'user:r'
|
||||
]);
|
||||
|
||||
// Loads authentication library and starts authentication
|
||||
$this->load->library('AuthLib');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
*/
|
||||
public function Menu()
|
||||
{
|
||||
$this->load->model('content/Content_model', 'ContentModel');
|
||||
$result = $this->ContentModel->getMenu(6739, get_uid());
|
||||
$menu = getData($result) ?? (object)['childs' => []];
|
||||
|
||||
$this->outputJsonSuccess($menu);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,420 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
/**
|
||||
* Description of Cis4Loader
|
||||
*
|
||||
* @author chris
|
||||
*/
|
||||
class Loader extends CI_Loader
|
||||
{
|
||||
|
||||
const OVERWRITE_PARAMS = [
|
||||
'vue3' => true,
|
||||
'bootstrap5' => true,
|
||||
'bootstrap3' => false,
|
||||
'fontawesome6' => true,
|
||||
'fontawesome4' => false,
|
||||
'axios027' => true,
|
||||
'customJSModules' => [
|
||||
'public/js/apps/Cis.js'
|
||||
],
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Cis.css'
|
||||
]
|
||||
];
|
||||
protected $coreOptions = null;
|
||||
protected $loader = null;
|
||||
|
||||
public function __construct($params)
|
||||
{
|
||||
$this->loader = $params[1];
|
||||
$this->coreOptions = ['menu' => $params[0]];
|
||||
}
|
||||
|
||||
/**
|
||||
* View Loader
|
||||
*
|
||||
* Loads "view" files.
|
||||
*
|
||||
* @param string $view View name
|
||||
* @param array $vars An associative array of data
|
||||
* to be extracted for use in the view
|
||||
* @param bool $return Whether to return the view output
|
||||
* or leave it to the Output class
|
||||
* @return object|string
|
||||
*/
|
||||
public function view($view, $vars = array(), $return = FALSE)
|
||||
{
|
||||
if ($view == 'templates/FHC-Header' || $view == 'templates/FHC-Footer')
|
||||
{
|
||||
$overwrittenParams = array_merge($vars, self::OVERWRITE_PARAMS);
|
||||
foreach (['customJSModules', 'customCSSs'] as $key)
|
||||
if (isset($vars[$key]))
|
||||
$overwrittenParams[$key] = array_merge(self::OVERWRITE_PARAMS[$key], $vars[$key]);
|
||||
|
||||
if ($view == 'templates/FHC-Header')
|
||||
{
|
||||
$view1 = $view;
|
||||
$param1 = $overwrittenParams;
|
||||
$view2 = 'templates/CISHMVC-Header';
|
||||
$param2 = $this->coreOptions;
|
||||
}
|
||||
else
|
||||
{
|
||||
$view1 = 'templates/CISHMVC-Footer';
|
||||
$param1 = $this->coreOptions;
|
||||
$view2 = $view;
|
||||
$param2 = $overwrittenParams;
|
||||
}
|
||||
|
||||
if ($return)
|
||||
return $this->loader->view($view1, $param1, $return) . $this->loader->view($view2, $param2, $return);
|
||||
|
||||
$this->loader->view($view1, $param1, $return);
|
||||
$this->loader->view($view2, $param2, $return);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->loader->view($view, $vars, $return);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializer
|
||||
*
|
||||
* @todo Figure out a way to move this to the constructor
|
||||
* without breaking *package_path*() methods.
|
||||
* @uses CI_Loader::_ci_autoloader()
|
||||
* @used-by CI_Controller::__construct()
|
||||
* @return void
|
||||
*/
|
||||
public function initialize()
|
||||
{
|
||||
$this->loader->initialize();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Is Loaded
|
||||
*
|
||||
* A utility method to test if a class is in the self::$_ci_classes array.
|
||||
*
|
||||
* @used-by Mainly used by Form Helper function _get_validation_object().
|
||||
*
|
||||
* @param string $class Class name to check for
|
||||
* @return string|bool Class object name if loaded or FALSE
|
||||
*/
|
||||
public function is_loaded($class)
|
||||
{
|
||||
return $this->loader->is_loaded($class);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Library Loader
|
||||
*
|
||||
* Loads and instantiates libraries.
|
||||
* Designed to be called from application controllers.
|
||||
*
|
||||
* @param mixed $library Library name
|
||||
* @param array $params Optional parameters to pass to the library class constructor
|
||||
* @param string $object_name An optional object name to assign to
|
||||
* @return object
|
||||
*/
|
||||
public function library($library, $params = NULL, $object_name = NULL)
|
||||
{
|
||||
$this->loader->library($library, $params, $object_name);
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Model Loader
|
||||
*
|
||||
* Loads and instantiates models.
|
||||
*
|
||||
* @param mixed $model Model name
|
||||
* @param string $name An optional object name to assign to
|
||||
* @param bool $db_conn An optional database connection configuration to initialize
|
||||
* @return object
|
||||
*/
|
||||
public function model($model, $name = '', $db_conn = FALSE)
|
||||
{
|
||||
$this->loader->model($model, $name, $db_conn);
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Database Loader
|
||||
*
|
||||
* @param mixed $params Database configuration options
|
||||
* @param bool $return Whether to return the database object
|
||||
* @param bool $query_builder Whether to enable Query Builder
|
||||
* (overrides the configuration setting)
|
||||
*
|
||||
* @return object|bool Database object if $return is set to TRUE,
|
||||
* FALSE on failure, CI_Loader instance in any other case
|
||||
*/
|
||||
public function database($params = '', $return = FALSE, $query_builder = NULL)
|
||||
{
|
||||
$res = $this->loader->database($params, $return, $query_builder);
|
||||
return $res == $this->loader ? $this : $res;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Load the Database Utilities Class
|
||||
*
|
||||
* @param object $db Database object
|
||||
* @param bool $return Whether to return the DB Utilities class object or not
|
||||
* @return object
|
||||
*/
|
||||
public function dbutil($db = NULL, $return = FALSE)
|
||||
{
|
||||
$res = $this->loader->dbutil($db, $return);
|
||||
return $res === $this->loader ? $this : $res;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Load the Database Forge Class
|
||||
*
|
||||
* @param object $db Database object
|
||||
* @param bool $return Whether to return the DB Forge class object or not
|
||||
* @return object
|
||||
*/
|
||||
public function dbforge($db = NULL, $return = FALSE)
|
||||
{
|
||||
$res = $this->loader->dbforge($db, $return);
|
||||
return $res === $this->loader ? $this : $res;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Generic File Loader
|
||||
*
|
||||
* @param string $path File path
|
||||
* @param bool $return Whether to return the file output
|
||||
* @return object|string
|
||||
*/
|
||||
public function file($path, $return = FALSE)
|
||||
{
|
||||
$res = $this->loader->file($path, $return);
|
||||
return $res === $this->loader ? $this : $res;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Set Variables
|
||||
*
|
||||
* Once variables are set they become available within
|
||||
* the controller class and its "view" files.
|
||||
*
|
||||
* @param array|object|string $vars
|
||||
* An associative array or object containing values
|
||||
* to be set, or a value's name if string
|
||||
* @param string $val Value to set, only used if $vars is a string
|
||||
* @return object
|
||||
*/
|
||||
public function vars($vars, $val = '')
|
||||
{
|
||||
$res = $this->loader->vars($vars, $val);
|
||||
return $res === $this->loader ? $this : $res;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Clear Cached Variables
|
||||
*
|
||||
* Clears the cached variables.
|
||||
*
|
||||
* @return CI_Loader
|
||||
*/
|
||||
public function clear_vars()
|
||||
{
|
||||
$this->loader->clear_vars();
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get Variable
|
||||
*
|
||||
* Check if a variable is set and retrieve it.
|
||||
*
|
||||
* @param string $key Variable name
|
||||
* @return mixed The variable or NULL if not found
|
||||
*/
|
||||
public function get_var($key)
|
||||
{
|
||||
return $this->loader->get_var($key);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get Variables
|
||||
*
|
||||
* Retrieves all loaded variables.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_vars()
|
||||
{
|
||||
return $this->loader->get_vars();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Helper Loader
|
||||
*
|
||||
* @param string|string[] $helpers Helper name(s)
|
||||
* @return object
|
||||
*/
|
||||
public function helper($helpers = array())
|
||||
{
|
||||
$this->loader->helper($helpers);
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Load Helpers
|
||||
*
|
||||
* An alias for the helper() method in case the developer has
|
||||
* written the plural form of it.
|
||||
*
|
||||
* @uses CI_Loader::helper()
|
||||
* @param string|string[] $helpers Helper name(s)
|
||||
* @return object
|
||||
*/
|
||||
public function helpers($helpers = array())
|
||||
{
|
||||
return $this->helper($helpers);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Language Loader
|
||||
*
|
||||
* Loads language files.
|
||||
*
|
||||
* @param string|string[] $files List of language file names to load
|
||||
* @param string Language name
|
||||
* @return object
|
||||
*/
|
||||
public function language($files, $lang = '')
|
||||
{
|
||||
$this->loader->language($files, $lang);
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Config Loader
|
||||
*
|
||||
* Loads a config file (an alias for CI_Config::load()).
|
||||
*
|
||||
* @uses CI_Config::load()
|
||||
* @param string $file Configuration file name
|
||||
* @param bool $use_sections Whether configuration values should be loaded into their own section
|
||||
* @param bool $fail_gracefully Whether to just return FALSE or display an error message
|
||||
* @return bool TRUE if the file was loaded correctly or FALSE on failure
|
||||
*/
|
||||
public function config($file, $use_sections = FALSE, $fail_gracefully = FALSE)
|
||||
{
|
||||
return $this->loader->config($file, $use_sections, $fail_gracefully);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Driver Loader
|
||||
*
|
||||
* Loads a driver library.
|
||||
*
|
||||
* @param string|string[] $library Driver name(s)
|
||||
* @param array $params Optional parameters to pass to the driver
|
||||
* @param string $object_name An optional object name to assign to
|
||||
*
|
||||
* @return object|bool Object or FALSE on failure if $library is a string
|
||||
* and $object_name is set. CI_Loader instance otherwise.
|
||||
*/
|
||||
public function driver($library, $params = NULL, $object_name = NULL)
|
||||
{
|
||||
$res = $this->loader->driver($library, $params, $object_name);
|
||||
return $res === $this->loader ? $this : $res;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Add Package Path
|
||||
*
|
||||
* Prepends a parent path to the library, model, helper and config
|
||||
* path arrays.
|
||||
*
|
||||
* @see CI_Loader::$_ci_library_paths
|
||||
* @see CI_Loader::$_ci_model_paths
|
||||
* @see CI_Loader::$_ci_helper_paths
|
||||
* @see CI_Config::$_config_paths
|
||||
*
|
||||
* @param string $path Path to add
|
||||
* @param bool $view_cascade (default: TRUE)
|
||||
* @return object
|
||||
*/
|
||||
public function add_package_path($path, $view_cascade = TRUE)
|
||||
{
|
||||
$this->loader->add_package_path($path, $view_cascade);
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get Package Paths
|
||||
*
|
||||
* Return a list of all package paths.
|
||||
*
|
||||
* @param bool $include_base Whether to include BASEPATH (default: FALSE)
|
||||
* @return array
|
||||
*/
|
||||
public function get_package_paths($include_base = FALSE)
|
||||
{
|
||||
return $this->loader->get_package_paths($include_base);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Remove Package Path
|
||||
*
|
||||
* Remove a path from the library, model, helper and/or config
|
||||
* path arrays if it exists. If no path is provided, the most recently
|
||||
* added path will be removed removed.
|
||||
*
|
||||
* @param string $path Path to remove
|
||||
* @return object
|
||||
*/
|
||||
public function remove_package_path($path = '')
|
||||
{
|
||||
$this->remove_package_path($path);
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,275 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* TODO(chris): NEWS: edit & delete button links and confirm
|
||||
* TODO(chris): NEWS: news_infoscreen xlst
|
||||
*/
|
||||
class CmsLib
|
||||
{
|
||||
/**
|
||||
* @var object
|
||||
*/
|
||||
protected $ci;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->ci =& get_instance();
|
||||
|
||||
// Load Models
|
||||
$this->ci->load->model('content/Content_model', 'ContentModel');
|
||||
$this->ci->load->model('content/Contentgruppe_model', 'ContentgruppeModel');
|
||||
$this->ci->load->model('content/Template_model', 'TemplateModel');
|
||||
if (defined('LOG_CONTENT') && LOG_CONTENT)
|
||||
$this->ci->load->model('system/Webservicelog_model', 'WebservicelogModel');
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* @param int $content_id
|
||||
* @param int $version
|
||||
* @param string $sprache
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getContent($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
if(!is_numeric($content_id))
|
||||
return error('ContentID ist ungueltig');
|
||||
|
||||
if ($sprache === null)
|
||||
$sprache = getUserLanguage();
|
||||
|
||||
$islocked = $this->ci->ContentgruppeModel->loadWhere(['content_id' => $content_id]);
|
||||
if (isError($islocked))
|
||||
return $islocked;
|
||||
|
||||
if (getData($islocked)) {
|
||||
$uid = getAuthUID();
|
||||
$isberechtigt = $this->ci->ContentgruppeModel->berechtigt($content_id, $uid);
|
||||
if (isError($isberechtigt))
|
||||
return $isberechtigt;
|
||||
|
||||
if (!getData($isberechtigt))
|
||||
return error('global/keineBerechtigungFuerDieseSeite');
|
||||
}
|
||||
#$this->load->model('content/Content_model', 'ContentModel');
|
||||
$content = $this->ci->ContentModel->getContent($content_id, $sprache, $version, $sichtbar, true);
|
||||
|
||||
if (isError($content))
|
||||
return $content;
|
||||
|
||||
// Legt einen Logeintrag für die Klickstatistik an
|
||||
if (defined('LOG_CONTENT') && LOG_CONTENT)
|
||||
{
|
||||
// Nur eingeloggte User werden geloggt, das sonst auch alle Infoscreenaufrufe und dgl. mitgeloggt werden
|
||||
if (isLogged())
|
||||
{
|
||||
$request_data = 'content_id=' . $content_id;
|
||||
if ($version !== null)
|
||||
$request_data .= '&version=' . $version;
|
||||
if ($sichtbar !== true)
|
||||
$request_data .= '&sichtbar=' . $sichtbar;
|
||||
$this->ci->WebservicelogModel->insert([
|
||||
'webservicetyp_kurzbz' => 'content',
|
||||
'request_id' => $content_id,
|
||||
'beschreibung' => 'content',
|
||||
'request_data' => $request_data . '&sprache=' . $sprache,
|
||||
'execute_time' => 'now()',
|
||||
'execute_user' => getAuthUID()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$content = getData($content);
|
||||
|
||||
//XSLT Vorlage laden
|
||||
$template = $this->ci->TemplateModel->load($content->template_kurzbz);
|
||||
if (isError($template))
|
||||
return $template;
|
||||
$template = current(getData($template));
|
||||
|
||||
$XML = new \DOMDocument();
|
||||
$XML->loadXML($content->content);
|
||||
|
||||
$xsltemplate = new \DOMDocument();
|
||||
$xsltemplate->loadXML($template->xslt_xhtml_c4);
|
||||
|
||||
//Transformation
|
||||
$processor = new \XSLTProcessor();
|
||||
$processor->importStylesheet($xsltemplate);
|
||||
|
||||
$content = $processor->transformToXML($XML);
|
||||
$content = str_replace('dms.php', APP_ROOT . 'cms/dms.php', $content);
|
||||
|
||||
return success($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param stdClass $stg_obj
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
protected function getNewsExtras($stg_obj, $semester)
|
||||
{
|
||||
$this->ci->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
|
||||
$stg_ltg = $this->ci->StudiengangModel->getLeitungDetailed($stg_obj->studiengang_kz);
|
||||
if (isError($stg_ltg))
|
||||
return $stg_ltg;
|
||||
$stg_ltg = getData($stg_ltg) ?: [];
|
||||
|
||||
$gf_ltg = $this->ci->BenutzerfunktionModel->getBenutzerFunktionenDetailed('gLtg', $stg_obj->oe_kurzbz);
|
||||
if (isError($gf_ltg))
|
||||
return $gf_ltg;
|
||||
$gf_ltg = getData($gf_ltg) ?: [];
|
||||
|
||||
$stv_ltg = $this->ci->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stvLtg', $stg_obj->oe_kurzbz);
|
||||
if (isError($stv_ltg))
|
||||
return $stv_ltg;
|
||||
$stv_ltg = getData($stv_ltg) ?: [];
|
||||
|
||||
$ass = $this->ci->BenutzerfunktionModel->getBenutzerFunktionenDetailed('ass', $stg_obj->oe_kurzbz);
|
||||
if (isError($ass))
|
||||
return $ass;
|
||||
$ass = getData($ass) ?: [];
|
||||
|
||||
$hochschulvertr = $this->ci->BenutzerfunktionModel->getBenutzerFunktionenDetailed('hsv');
|
||||
if (isError($hochschulvertr))
|
||||
return $hochschulvertr;
|
||||
$hochschulvertr = getData($hochschulvertr) ?: [];
|
||||
|
||||
$stdv = $this->ci->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stdv', $stg_obj->oe_kurzbz);
|
||||
if (isError($stdv))
|
||||
return $stdv;
|
||||
$stdv = getData($stdv) ?: [];
|
||||
|
||||
$jahrgangsvertr = $this->ci->BenutzerfunktionModel->getBenutzerFunktionenDetailed('jgv', $stg_obj->oe_kurzbz, $semester);
|
||||
if (isError($jahrgangsvertr))
|
||||
return $jahrgangsvertr;
|
||||
$jahrgangsvertr = getData($jahrgangsvertr) ?: [];
|
||||
|
||||
return success($this->ci->load->view('Cis/Cms/News/Xml/NewsExtras', [
|
||||
'studiengang' => $stg_obj,
|
||||
'semester' => $semester,
|
||||
'stg_ltg' => $stg_ltg,
|
||||
'gf_ltg' => $gf_ltg,
|
||||
'stv_ltg' => $stv_ltg,
|
||||
'ass' => $ass,
|
||||
'hochschulvertr' => $hochschulvertr,
|
||||
'stdv' => $stdv,
|
||||
'jahrgangsvertr' => $jahrgangsvertr
|
||||
], true));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $infoscreen
|
||||
* @param string | null $studiengang_kz
|
||||
* @param int | null $semester
|
||||
* @param boolean $mischen
|
||||
* @param string $titel
|
||||
* @param boolean $edit
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$this->ci->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
|
||||
if (!$infoscreen && ($studiengang_kz === null || $semester === null))
|
||||
{
|
||||
//Zum anzeigen der Studiengang-Details neben den News
|
||||
$student = $this->ci->StudentModel->loadWhere(['student_uid' => get_uid()]);
|
||||
if (isError($student))
|
||||
return $student;
|
||||
if (getData($student)) {
|
||||
$student = current(getData($student));
|
||||
if ($studiengang_kz === null)
|
||||
$studiengang_kz = $student->studiengang_kz;
|
||||
if ($semester === null)
|
||||
$semester = $student->semester;
|
||||
}
|
||||
}
|
||||
$all = $edit;
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><content>';
|
||||
|
||||
$this->ci->load->model('content/News_model', 'NewsModel');
|
||||
$news = $this->ci->NewsModel->getNewsWithContent(getSprache(), $studiengang_kz, $semester, null, $sichtbar, 0, 0, $all, $mischen);
|
||||
|
||||
if (isError($news))
|
||||
return $news;
|
||||
|
||||
$news = getData($news);
|
||||
foreach ($news as $newsobj) {
|
||||
if ($studiengang_kz && $edit && !$newsobj->studiengang_kz)
|
||||
continue;
|
||||
$date = new \DateTime($newsobj->datum);
|
||||
$datum = '<datum><![CDATA[' . $date->format('d.m.Y') . ']]></datum>';
|
||||
$datum .= '<datumdetail><![CDATA[' . $date->format('Y-m-d H:i') . ']]></datumdetail>';
|
||||
$id = $edit ? '<news_id><![CDATA[' . $newsobj->news_id . ']]></news_id>' : '';
|
||||
$xml .= "<newswrapper>" . $newsobj->content . $datum . $id . "</newswrapper>";
|
||||
}
|
||||
|
||||
if ($studiengang_kz != 0)
|
||||
{
|
||||
$stg_obj = $this->ci->StudiengangModel->load($studiengang_kz);
|
||||
if (isError($stg_obj))
|
||||
return $stg_obj;
|
||||
$stg_obj = current(getData($stg_obj) ?: []);
|
||||
|
||||
if ($stg_obj)
|
||||
{
|
||||
if (!$edit && !$infoscreen)
|
||||
{
|
||||
$extras = $this->getNewsExtras($stg_obj, $semester);
|
||||
if (isError($extras))
|
||||
return $extras;
|
||||
$xml .= getData($extras);
|
||||
}
|
||||
$xml .= '<studiengang_bezeichnung><![CDATA[' . $stg_obj->bezeichnung . ']]></studiengang_bezeichnung>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($titel != '')
|
||||
{
|
||||
$xml .= '<news_titel>' . $titel . '</news_titel>';
|
||||
}
|
||||
|
||||
$xml .= '</content>';
|
||||
|
||||
//XSLT Vorlage laden
|
||||
$template = $this->ci->TemplateModel->load($infoscreen ? 'news_infoscreen' : 'news');
|
||||
if (isError($template))
|
||||
return $template;
|
||||
$template = current(getData($template));
|
||||
|
||||
$XML = new \DOMDocument();
|
||||
$XML->loadXML($xml);
|
||||
|
||||
$xsltemplate = new \DOMDocument();
|
||||
$xsltemplate->loadXML($template->xslt_xhtml_c4);
|
||||
|
||||
//Transformation
|
||||
$processor = new \XSLTProcessor();
|
||||
$processor->importStylesheet($xsltemplate);
|
||||
|
||||
$content = $processor->transformToDoc($XML);
|
||||
$content->formatOutput = true;
|
||||
|
||||
$content = $content->saveHTML();
|
||||
$content = str_replace('dms.php', APP_ROOT . 'cms/dms.php', $content);
|
||||
|
||||
return success($content);
|
||||
}
|
||||
}
|
||||
@@ -78,21 +78,8 @@ class Content_model extends DB_Model
|
||||
c.template_kurzbz,
|
||||
s.titel,
|
||||
s.content,
|
||||
"./*c.oe_kurzbz,
|
||||
s.sprache,
|
||||
s.contentsprache_id,
|
||||
s.version,
|
||||
s.sichtbar,
|
||||
s.reviewvon,
|
||||
s.reviewamum,
|
||||
s.updateamum,
|
||||
s.updatevon,
|
||||
s.insertamum,
|
||||
s.insertvon, */"
|
||||
c.menu_open,
|
||||
c.aktiv,
|
||||
"./*s.gesperrt_uid,
|
||||
c.beschreibung,*/"
|
||||
k.child_content_id,
|
||||
k.sort FROM (
|
||||
SELECT
|
||||
@@ -128,10 +115,23 @@ class Content_model extends DB_Model
|
||||
campus.tbl_contentsprache s USING(contentsprache_id)
|
||||
LEFT JOIN
|
||||
campus.tbl_contentchild k ON(m.content_id=k.content_id)
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_contentgruppe
|
||||
JOIN public.vw_gruppen USING(gruppe_kurzbz)
|
||||
WHERE (
|
||||
tbl_contentgruppe.content_id=c.content_id
|
||||
OR NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_contentgruppe
|
||||
WHERE content_id=c.content_id
|
||||
)
|
||||
)
|
||||
AND vw_gruppen.uid=?
|
||||
)
|
||||
ORDER BY content_id, sort";
|
||||
|
||||
#DEFAULT_LANGUAGE, $sprache, $root_content_id
|
||||
$result = $this->execQuery($sql, [DEFAULT_LANGUAGE, $sprache, $root_content_id]);
|
||||
$result = $this->execQuery($sql, [DEFAULT_LANGUAGE, $sprache, $root_content_id, $uid]);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
@@ -158,20 +158,7 @@ class Content_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
return success($result[$root_content_id]);
|
||||
|
||||
# !LOCKED ||
|
||||
$berechtigt = "SELECT
|
||||
1
|
||||
FROM
|
||||
campus.tbl_contentgruppe
|
||||
JOIN public.vw_gruppen USING(gruppe_kurzbz)
|
||||
WHERE
|
||||
(tbl_contentgruppe.content_id=$content_id
|
||||
OR NOT EXISTS (SELECT 1 FROM campus.tbl_contentgruppe WHERE content_id=$content_id))
|
||||
AND vw_gruppen.uid=$uid";
|
||||
|
||||
|
||||
return success(isset($result[$root_content_id]) ? $result[$root_content_id] : null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,4 +26,95 @@ class News_model extends DB_Model
|
||||
LIMIT '. $this->escape($limit)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sprache
|
||||
* @param string $studiengang_kz
|
||||
* @param integer | null $semester
|
||||
* @param string $fachbereich_kurzbz
|
||||
* @param boolean $sichtbar
|
||||
* @param integer $maxalter
|
||||
* @param integer $maxnews
|
||||
* @param boolean $all
|
||||
* @param boolean $mischen
|
||||
*
|
||||
* TODO(chris): this is not a good function -> the params are all over the place
|
||||
*
|
||||
* @return stdObj
|
||||
*/
|
||||
public function getNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $maxnews = 0, $all = false, $mischen = true)
|
||||
{
|
||||
$studiengang_kz = trim($studiengang_kz);
|
||||
$fachbereich_kurzbz = trim($fachbereich_kurzbz);
|
||||
|
||||
$where = [];
|
||||
$params = [];
|
||||
if (trim($maxalter) != '0')
|
||||
{
|
||||
$where[] = "(now()-datum) < interval ? days";
|
||||
$params[] = $maxalter;
|
||||
}
|
||||
if (!$all)
|
||||
{
|
||||
$where[] = "datum <= now()";
|
||||
$where[] = "(datum_bis >= now()::date OR datum_bis IS NULL)";
|
||||
}
|
||||
if ($fachbereich_kurzbz != '*')
|
||||
{
|
||||
if ($fachbereich_kurzbz == '')
|
||||
{
|
||||
$where[] = "fachbereich_kurzbz IS NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = "fachbereich_kurzbz = ?";
|
||||
$params[] = $fachbereich_kurzbz;
|
||||
}
|
||||
}
|
||||
if ($studiengang_kz == '0')
|
||||
{
|
||||
$where[] = "studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
if ($semester === NULL)
|
||||
$where[] = "semester IS NULL";
|
||||
elseif ($semester === 0)
|
||||
$where[] = "semester = 0";
|
||||
}
|
||||
elseif ($studiengang_kz != '')
|
||||
{
|
||||
$add = $mischen === true ? " OR (studiengang_kz = 0 AND semester IS NULL)" : "";
|
||||
$where[] = "((studiengang_kz = ? AND semester = ?) OR (studiengang_kz = ? AND semester = 0) OR (studiengang_kz = 0 AND semester = ?)" . $add . ")";
|
||||
$params[] = $studiengang_kz;
|
||||
$params[] = $semester;
|
||||
$params[] = $studiengang_kz;
|
||||
$params[] = $semester;
|
||||
}
|
||||
$this->addJoin('campus.tbl_contentsprache cs', 'content_id');
|
||||
|
||||
$where[] = "cs.sichtbar = " . ($sichtbar ? "true" : "false");
|
||||
|
||||
$where[] = "cs.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=?) THEN ? ELSE ? END)";
|
||||
$params[] = $sprache;
|
||||
$params[] = $sprache;
|
||||
$params[] = DEFAULT_LANGUAGE;
|
||||
|
||||
$where[] = "cs.version = (SELECT MAX(version) FROM campus.tbl_contentsprache cs3 WHERE cs3.content_id=" . $this->dbTable . ".content_id AND cs3.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=?) THEN ? ELSE ? END))";
|
||||
$params[] = $sprache;
|
||||
$params[] = $sprache;
|
||||
$params[] = DEFAULT_LANGUAGE;
|
||||
|
||||
$where = implode(" AND ", $where);
|
||||
|
||||
$this->addOrder('datum', 'DESC');
|
||||
if ($maxnews)
|
||||
$this->addLimit($maxnews);
|
||||
|
||||
|
||||
$this->db->where($where, NULL, FALSE);
|
||||
|
||||
$sql = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
return $this->execQuery($sql, $params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -457,7 +457,7 @@ class Studiengang_model extends DB_Model
|
||||
*/
|
||||
public function getLeitung($studiengang_kz = null)
|
||||
{
|
||||
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email');
|
||||
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email, titelpre, titelpost, alias');
|
||||
$this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer', 'uid');
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
@@ -493,6 +493,53 @@ class Studiengang_model extends DB_Model
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Studiengangsleitung/en of Studiengang/Studiengaenge. With Details
|
||||
*
|
||||
* @param null $studiengang_kz Numeric or Array
|
||||
* @return array
|
||||
*/
|
||||
public function getLeitungDetailed($studiengang_kz = null)
|
||||
{
|
||||
$this->addSelect('studiengang_kz, email, f.oe_kurzbz, b.uid, b.alias, b.aktiv, p.vorname, p.nachname, p.titelpre, p.titelpost, m.telefonklappe, k.kontakt, o.planbezeichnung');
|
||||
$this->addJoin('public.tbl_benutzerfunktion f', 'oe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer b', 'uid');
|
||||
$this->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->addJoin('public.tbl_mitarbeiter m', 'mitarbeiter_uid=uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_kontakt k', 'k.standort_id=m.standort_id AND kontakttyp=\'telefon\'', 'LEFT');
|
||||
$this->addJoin('public.tbl_ort o', 'ort_kurzbz', 'LEFT');
|
||||
|
||||
if (!is_numeric($studiengang_kz) && !is_array($studiengang_kz))
|
||||
{
|
||||
return error('Studiengangskennzahl ungültig');
|
||||
}
|
||||
|
||||
if (is_null($studiengang_kz))
|
||||
{
|
||||
$condition = '
|
||||
funktion_kurzbz = \'Leitung\'
|
||||
AND ( datum_von <= NOW() OR datum_von IS NULL )
|
||||
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
|
||||
';
|
||||
}
|
||||
elseif (is_numeric($studiengang_kz) || is_array($studiengang_kz))
|
||||
{
|
||||
if (is_array($studiengang_kz))
|
||||
{
|
||||
$studiengang_kz = array_map(array($this,'escape'), $studiengang_kz);
|
||||
$studiengang_kz = implode(', ', $studiengang_kz);
|
||||
}
|
||||
$condition = '
|
||||
funktion_kurzbz = \'Leitung\'
|
||||
AND ( datum_von <= NOW() OR datum_von IS NULL )
|
||||
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
|
||||
AND studiengang_kz IN (' . $studiengang_kz. ')';
|
||||
;
|
||||
}
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
public function getStudiengaengeWithOrgForm($typ, $semester)
|
||||
{
|
||||
$query = "SELECT DISTINCT (UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz)) AS Studiengang
|
||||
|
||||
@@ -147,6 +147,38 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Benutzer with details for a given Benutzerfunktion and optionally specified Oe and semester
|
||||
*
|
||||
* @param string $funktion_kurzbz
|
||||
* @param string $oe_kurzbz
|
||||
* @param integer | null $semester
|
||||
* @return array|null
|
||||
*/
|
||||
public function getBenutzerFunktionenDetailed($funktion_kurzbz, $oe_kurzbz = null, $semester = null)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.funktion_kurzbz, ' . $this->dbTable . '.oe_kurzbz, ' . $this->dbTable . '.semester, ' . $this->dbTable . '.bezeichnung, f.beschreibung, b.uid, b.alias, b.aktiv, p.vorname, p.nachname, p.titelpre, p.titelpost, m.telefonklappe, k.kontakt, o.planbezeichnung');
|
||||
$this->addJoin('public.tbl_funktion f', 'funktion_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer b', 'uid');
|
||||
$this->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->addJoin('public.tbl_mitarbeiter m', 'mitarbeiter_uid=uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_kontakt k', 'k.standort_id=m.standort_id AND kontakttyp=\'telefon\'', 'LEFT');
|
||||
$this->addJoin('public.tbl_ort o', 'ort_kurzbz', 'LEFT');
|
||||
|
||||
$this->addOrder('LOWER(uid)');
|
||||
|
||||
$where = [$this->dbTable . '.funktion_kurzbz' => $funktion_kurzbz];
|
||||
if ($oe_kurzbz !== null)
|
||||
$where[$this->dbTable . '.oe_kurzbz'] = $oe_kurzbz;
|
||||
if ($semester !== null)
|
||||
$where[$this->dbTable . '.semester'] = $semester;
|
||||
|
||||
$this->db->where('(' . $this->dbTable . '.datum_bis >= NOW() OR ' . $this->dbTable . '.datum_bis IS NULL)', NULL, FALSE);
|
||||
$this->db->where('(' . $this->dbTable . '.datum_von <= NOW() OR ' . $this->dbTable . '.datum_von IS NULL)', NULL, FALSE);
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active Studiengangsleitung(en) of the user by UID.
|
||||
* @param $uid
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php if ($obj->aktiv) { ?>
|
||||
<uid><![CDATA[ <?= $obj->uid; ?>]]></uid>
|
||||
<name><![CDATA[ <?= $obj->titelpre . ' ' . $obj->vorname . ' ' . $obj->nachname . ' ' . $obj->titelpost; ?>]]></name>
|
||||
<email><![CDATA[<?= $obj->alias ?: $obj->uid; ?>@<?= DOMAIN; ?>]]></email>
|
||||
<?php if ($obj->telefonklappe !== null) { ?>
|
||||
<telefon><![CDATA[<?= $obj->kontakt ?: ''; ?> - <?= $obj->telefonklappe; ?>]]></telefon>
|
||||
<?php } ?>
|
||||
<?php if ($obj->planbezeichnung) { ?>
|
||||
<ort><![CDATA[<?= $obj->planbezeichnung; ?>]]></ort>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?php if ($obj->aktiv) { ?>
|
||||
<uid><![CDATA[ <?= $obj->uid; ?>]]></uid>
|
||||
<email><![CDATA[<?= $obj->uid; ?>@<?= DOMAIN; ?>]]></email>
|
||||
|
||||
<name><![CDATA[ <?= $obj->titelpre . ' ' . $obj->vorname . ' ' . $obj->nachname . ' ' . $obj->titelpost; ?><?php if ($obj->bezeichnung != '' && $obj->bezeichnung != $obj->beschreibung) echo ' (' . $obj->bezeichnung . ')'; ?>]]></name>
|
||||
<?php } ?>
|
||||
@@ -0,0 +1,46 @@
|
||||
<stg_extras>
|
||||
<stg_kz><?= $studiengang->studiengang_kz; ?></stg_kz>
|
||||
<stg_ltg_name><![CDATA[<?= $this->p->t('global', 'studiengangsleitung'); ?>]]></stg_ltg_name>';
|
||||
<?php foreach ($stg_ltg as $item) { ?>
|
||||
<stg_ltg> <?php $this->view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?></stg_ltg>
|
||||
<?php } ?>
|
||||
<gf_ltg_name><![CDATA[<?= $this->p->t('global', 'geschaeftsfuehrendeltg'); ?>]]></gf_ltg_name>';
|
||||
<?php foreach ($gf_ltg as $item) { ?>
|
||||
<gf_ltg> <?php $this->view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?></gf_ltg>
|
||||
<?php } ?>
|
||||
<stv_ltg_name><![CDATA[<?= $this->p->t('global', 'stellvertreter'); ?>]]></stv_ltg_name>';
|
||||
<?php foreach ($stv_ltg as $item) { ?>
|
||||
<stv_ltg> <?php $this->view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?></stv_ltg>
|
||||
<?php } ?>
|
||||
<ass_name><![CDATA[<?= $this->p->t('global', 'sekretariat'); ?>]]></ass_name>';
|
||||
<?php foreach ($ass as $item) { ?>
|
||||
<ass> <?php $this->view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?></ass>
|
||||
<?php } ?>
|
||||
|
||||
<zusatzinfo><![CDATA[<?= $studiengang->zusatzinfo_html; ?>]]></zusatzinfo>
|
||||
|
||||
<hochschulvertr_name><![CDATA[<?= $this->p->t('global', 'hochschulvertretung'); ?>]]></hochschulvertr_name>';
|
||||
<?php foreach ($hochschulvertr as $item) { ?>
|
||||
<hochschulvertr> <?php $this->view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?></hochschulvertr>
|
||||
<?php } ?>
|
||||
|
||||
<stdv_name><![CDATA[<?= $this->p->t('global', 'studentenvertreter'); ?> <?= strtoupper($studiengang->oe_kurzbz); ?>]]></stdv_name>';
|
||||
<?php foreach ($stdv as $item) { ?>
|
||||
<stdv> <?php $this->view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?></stdv>
|
||||
<?php } ?>
|
||||
|
||||
<jahrgangsvertr_name><![CDATA[<?= $this->p->t('global', 'jahrgangsvertretung'); ?><?= $semester; ?> <?= $this->p->t('global', 'semester'); ?>]]></jahrgangsvertr_name>';
|
||||
<?php foreach ($jahrgangsvertr as $item) { ?>
|
||||
<jahrgangsvertr> <?php $this->view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?></jahrgangsvertr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (defined("CIS_EXT_MENU") && CIS_EXT_MENU) { ?>
|
||||
<cis_ext_menu>
|
||||
<download_name><![CDATA[<?= $this->p->t('global', 'allgemeinerdownload'); ?>]]></download_name>
|
||||
<kurzbz><![CDATA[<?= strtolower($studiengang->typ . $studiengang->kurzbz); ?>]]></kurzbz>
|
||||
<kurzbzlang><![CDATA[<?= strtolower($studiengang->kurzbzlang); ?>]]></kurzbzlang>
|
||||
<stg_kz><![CDATA[<?= $studiengang->studiengang_kz; ?>]]></stg_kz>
|
||||
</cis_ext_menu>';
|
||||
<?php } ?>
|
||||
|
||||
</stg_extras>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => 'FH-Complete',
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Cms.css',
|
||||
#'skin/style.css.php'
|
||||
]
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="cms">
|
||||
<?= $content; ?>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => 'FH-Complete',
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Legacy.css'
|
||||
]
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
function resizeIframe(obj) {
|
||||
// NOTE(chris): this only works on sites on the same domain which is always the case in this template
|
||||
obj.style.height = (obj.contentWindow.document.scrollingElement.scrollHeight) + 'px';
|
||||
// TODO(chris): add trigger on window.resize
|
||||
}
|
||||
</script>
|
||||
|
||||
<iframe src="<?= base_url($url); ?>" onload="resizeIframe(this)"></iframe>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Cms.css',
|
||||
#'skin/style.css.php'
|
||||
]
|
||||
);
|
||||
|
||||
$this->load->view('templates/CISHTML-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="cms">
|
||||
<?= $content; ?>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CISHTML-Footer', $includesArray); ?>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'customJSModules' => ['public/js/apps/Dashboard/Fhc.js'],
|
||||
'customCSSs' => [
|
||||
'public/css/components/dashboard.css'
|
||||
],
|
||||
);
|
||||
|
||||
$this->load->view('templates/CISHTML-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="content">
|
||||
<h2>Dashboard</h2>
|
||||
<hr>
|
||||
<fhc-dashboard dashboard="CIS"/>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CISHTML-Footer', $includesArray); ?>
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => 'FH-Complete',
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6' => true,
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="wrapper">
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<?= $error; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
|
||||
@@ -6,12 +6,12 @@ $includesArray = array(
|
||||
]
|
||||
);
|
||||
|
||||
$this->load->view('templates/CIS-Header', $includesArray);
|
||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="cms">
|
||||
<?= $content; ?>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CIS-Footer', $includesArray); ?>
|
||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
||||
|
||||
@@ -6,12 +6,14 @@ $includesArray = array(
|
||||
],
|
||||
);
|
||||
|
||||
$this->load->view('templates/CIS-Header', $includesArray);
|
||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="content">
|
||||
<h2>Dashboard</h2>
|
||||
<hr>
|
||||
<fhc-dashboard dashboard="CIS"/>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CIS-Footer', $includesArray); ?>
|
||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
||||
|
||||
@@ -1,161 +0,0 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => $title ?? 'FH-Complete',
|
||||
'vue3' => true,
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6' => true,
|
||||
'axios027' => true,
|
||||
'customJSModules' => array_merge([
|
||||
'public/js/apps/Cis.js'
|
||||
], $customJSModules ?? []),
|
||||
'customCSSs' => array_merge([
|
||||
'public/css/Cis4/Cis.css'
|
||||
], $customCSSs ?? [])
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
|
||||
|
||||
$ci =& get_instance(); // get CI instance
|
||||
$ci->load->model('content/Content_model', 'ContentModel');
|
||||
$result = $ci->ContentModel->getMenu(6739, null);
|
||||
$menu = getData($result) ?? (object)['childs' => []];
|
||||
|
||||
?>
|
||||
|
||||
<div id="cis4">
|
||||
<header>
|
||||
<div id="cis-navigation-top" class="navbar navbar-expand-lg fixed-top navbar-dark bg-primary p-0">
|
||||
<button class="navbar-toggler border-0" type="button" data-bs-toggle="offcanvas" data-bs-target="#cis-navigation-top-offcanvas">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<a class="navbar-brand col-auto col-lg-2 px-3 py-0 m-0" href="<?= site_url('cis'); ?>">
|
||||
<img src="<?= base_url('/public/images/logo-300x160.png'); ?>" width="90">
|
||||
</a>
|
||||
<div id="cis-navigation-top-offcanvas" class="offcanvas offcanvas-start align-items-stretch mt-lg-0 w-100 px-3 px-lg-0 d-flex flex-column flex-lg-row bg-dark border-0 pt-3 pt-lg-0" tabindex="-1" data-bs-backdrop="false">
|
||||
<fhc-searchbar class="fhc-searchbar w-100" :searchoptions="{types:[],actions:{}}" :searchfunction="search"></fhc-searchbar>
|
||||
<ul class="navbar-nav flex-grow-1">
|
||||
<!-- TODO(chris): foreach menu -->
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">Mein CIS</a>
|
||||
</li>
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">FHTW Campus</a>
|
||||
</li>
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">FHTW Services</a>
|
||||
</li>
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="<?= site_url('cis/cms/content/10012'); ?>">COVID 19</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<div class="dropdown pe-lg-3">
|
||||
<a class="nav-link" href="#" id="dropdown01" data-bs-toggle="dropdown" data-bs-reference="parent" aria-expanded="false">
|
||||
<img src="<?= base_url('/cis/public/bild.php?src=person&person_id=' . getAuthPersonId()); ?>" class="avatar rounded-circle" width="45" height="45"/>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end m-0" aria-labelledby="dropdown01">
|
||||
<!-- TODO(chris): foreach menu -->
|
||||
<li><a class="dropdown-item" href="#" id="menu-profil">Profil</a></li>
|
||||
<li><a class="dropdown-item" href="#">Ampeln</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="#">Logout</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="container-fluid px-0 flex-grow-1 row mx-0">
|
||||
<nav id="cis-navigation-left" class="d-none d-lg-block position-sticky col-lg-2 px-0 bg-secondary">
|
||||
<div class="btn btn-dark text-muted rounded-0 w-100 text-start"><small>MAIN MENU</small></div>
|
||||
<?php foreach($menu->childs as $entry)
|
||||
$this->load->view('templates/CIS-Menu/Entry', ['entry' => $entry, 'menu_id' => 'menu']);
|
||||
?>
|
||||
</nav>
|
||||
<!--nav class="list-group list-group-flush d-none d-lg-block position-sticky col-lg-2 px-0">
|
||||
< !-- Separator with title -- >
|
||||
<div class="list-group-item sidebar-separator-title text-muted d-flex align-items-center menu-collapsed">
|
||||
<small>MAIN MENU</small>
|
||||
</div>
|
||||
< !-- /end Separator -- >
|
||||
<a href="#submenu1" data-bs-toggle="collapse" aria-expanded="true" class="bg-primary text-white list-group-item list-group-item-action flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">Mein CIS</span>
|
||||
</div>
|
||||
</a>
|
||||
<div id='submenu1' class="collapse show sidebar-submenu">
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark active" id="menu-mein-bereich">
|
||||
<span class="menu-collapsed">Mein Bereich</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Studium</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark" id="menu-lvplan">
|
||||
<span class="menu-collapsed">LV Plan</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Campus Life</span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#submenu2" data-bs-toggle="collapse" aria-expanded="false" class="bg-primary text-white list-group-item list-group-item-action flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">FHTW Hochschule</span>
|
||||
</div>
|
||||
</a>
|
||||
<div id='submenu2' class="collapse sidebar-submenu">
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark" id="menu-organisation">
|
||||
<span class="menu-collapsed">Organisation</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Studiengänge</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Forschung & Entwicklung</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Technikum Wien Acadamy</span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#submenu3" data-bs-toggle="collapse" aria-expanded="false" class="bg-primary text-white list-group-item flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">FHTW Services</span>
|
||||
</div>
|
||||
</a>
|
||||
<div id='submenu3' class="collapse sidebar-submenu">
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Teaching & Learning Center</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">International Office</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">Bibliothek</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark">
|
||||
<span class="menu-collapsed">IT-Services</span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#submenu4" data-bs-toggle="collapse" aria-expanded="false" class="bg-primary text-white list-group-item flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">Links & Downloads</span>
|
||||
</div>
|
||||
</a>
|
||||
<div class="list-group-item sidebar-separator-title text-muted d-flex align-items-center menu-collapsed">
|
||||
<small>AKTUELL</small>
|
||||
</div>
|
||||
<a href="<?= site_url('cis/cms/content/10012'); ?>" class="bg-primary text-white list-group-item">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-medkit fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">COVID 19</span>
|
||||
</div>
|
||||
</a>
|
||||
<div class="list-group-item sidebar-separator menu-collapsed"></div>
|
||||
</ul>
|
||||
</nav-->
|
||||
<main class="ms-sm-auto col-lg-10 px-md-4 p-4 overflow-hidden">
|
||||
@@ -0,0 +1 @@
|
||||
</main>
|
||||
@@ -0,0 +1,37 @@
|
||||
<header id="cis-header" class="navbar-dark">
|
||||
<button id="nav-main-btn" class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#nav-main" aria-controls="nav-main" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<a id="nav-logo" href="<?= site_url('CisHmvc'); ?>">
|
||||
<img src="<?= base_url('/public/images/logo-300x160.png'); ?>" alt="Logo">
|
||||
</a>
|
||||
<nav id="nav-main" class="offcanvas offcanvas-start bg-dark" tabindex="-1" aria-labelledby="nav-main-btn" data-bs-backdrop="false">
|
||||
<div id="nav-main-toggle" class="position-static d-none d-lg-block bg-dark">
|
||||
<button type="button" class="btn bg-dark text-light rounded-0 p-1 d-flex align-items-center" data-bs-toggle="collapse" data-bs-target="#nav-main-menu" aria-expanded="true" aria-controls="nav-main-menu">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="offcanvas-body p-0">
|
||||
<fhc-searchbar id="nav-search" class="fhc-searchbar w-100" :searchoptions="searchbaroptions" :searchfunction="searchfunction"></fhc-searchbar>
|
||||
<button id="nav-user-btn" class="btn btn-link rounded-0" type="button" data-bs-toggle="collapse" data-bs-target="#nav-user-menu" aria-expanded="false" aria-controls="nav-user-menu">
|
||||
<img src="<?= base_url('/cis/public/bild.php?src=person&person_id=' . getAuthPersonId()); ?>" class="avatar rounded-circle"/>
|
||||
</button>
|
||||
<ul id="nav-user-menu" class="collapse list-unstyled" aria-labelledby="nav-user-btn">
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#" id="menu-profil">Profil</a></li>
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#">Ampeln</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#">Logout</a></li>
|
||||
</ul>
|
||||
<div id="nav-main-menu" class="collapse collapse-horizontal show">
|
||||
<div>
|
||||
<?php
|
||||
foreach($menu as $entry) {
|
||||
$this->load->view('templates/CISHMVC-Menu/Entry', ['entry' => $entry, 'menu_id' => 'menu']);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main id="cis-main" class="flex-grow-1 overflow-scroll p-4">
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
if (is_array($entry) && isset($entry['content_id']))
|
||||
$entry = (object)$entry;
|
||||
$menu_id .= '-' . $entry->content_id;
|
||||
|
||||
// TODO(chris): remove! DEBUG
|
||||
#$entry->menu_open = false;
|
||||
|
||||
$link = $entry->url;
|
||||
$target = $entry->target;
|
||||
|
||||
?>
|
||||
<?php if ($entry->childs) { ?>
|
||||
<?php if (substr($link, 0, 1) == '#') { ?>
|
||||
<a href="#<?= $menu_id; ?>" data-bs-toggle="collapse" aria-expanded="<?= $entry->menu_open ? 'true' : 'false'; ?>" class="btn btn-default rounded-0 w-100 text-start dropdown-toggle btn-level-<?= substr_count($menu_id, '-'); ?><?= $entry->menu_open ? '' : ' collapsed'; ?>">
|
||||
<span><?= htmlspecialchars($entry->titel); ?></span>
|
||||
</a>
|
||||
<?php } else { ?>
|
||||
<div class="btn-group w-100">
|
||||
<a<?= $link ? ' href="' . $link . '"' : ''; ?><?= $target ? ' target="' . $target . '"' : ''; ?> class="btn btn-default rounded-0 text-start btn-level-<?= substr_count($menu_id, '-'); ?>">
|
||||
<?= htmlspecialchars($entry->titel); ?>
|
||||
</a>
|
||||
<a href="#<?= $menu_id; ?>" data-bs-toggle="collapse" aria-expanded="<?= $entry->menu_open ? 'true' : 'false'; ?>"class="btn btn-default rounded-0 dropdown-toggle dropdown-toggle-split flex-grow-0<?= $entry->menu_open ? '' : ' collapsed'; ?>" >
|
||||
<span class="visually-hidden">Toggle Dropdown</span>
|
||||
</a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<ul id="<?= $menu_id; ?>" class="nav w-100 collapse<?= $entry->menu_open ? ' show' : ''; ?>">
|
||||
<?php foreach ($entry->childs as $child)
|
||||
$this->load->view('templates/CISHMVC-Menu/Entry', ['entry' => $child, 'menu_id' => $menu_id]);
|
||||
?>
|
||||
</ul>
|
||||
<?php } else { ?>
|
||||
<a<?= $link ? ' href="' . $link . '"' : ''; ?><?= $target ? ' target="' . $target . '"' : ''; ?> class="btn btn-default rounded-0 w-100 text-start btn-level-<?= substr_count($menu_id, '-'); ?>">
|
||||
<?= htmlspecialchars($entry->titel); ?>
|
||||
</a>
|
||||
<?php } ?>
|
||||
+1
-3
@@ -14,8 +14,6 @@ $includesArray = array(
|
||||
);
|
||||
?>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => $title ?? 'FH-Complete',
|
||||
'vue3' => true,
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6' => true,
|
||||
'axios027' => true,
|
||||
'customJSModules' => array_merge([
|
||||
'public/js/apps/Cis.js'
|
||||
], $customJSModules ?? []),
|
||||
'customCSSs' => array_merge([
|
||||
'public/css/Cis4/Cis.css'
|
||||
], $customCSSs ?? [])
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
|
||||
if (!isset($menu)) {
|
||||
$ci =& get_instance(); // get CI instance
|
||||
$ci->load->model('content/Content_model', 'ContentModel');
|
||||
$result = $ci->ContentModel->getMenu(6739, get_uid());
|
||||
$menu = getData($result) ?? (object)['childs' => []];
|
||||
}
|
||||
?>
|
||||
|
||||
<header id="cis-header" class="navbar-dark">
|
||||
<button id="nav-main-btn" class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#nav-main" aria-controls="nav-main" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<a id="nav-logo" href="<?= site_url('CisHtml'); ?>">
|
||||
<img src="<?= base_url('/public/images/logo-300x160.png'); ?>" alt="Logo">
|
||||
</a>
|
||||
<nav id="nav-main" class="offcanvas offcanvas-start bg-dark" tabindex="-1" aria-labelledby="nav-main-btn" data-bs-backdrop="false">
|
||||
<div id="nav-main-toggle" class="position-static d-none d-lg-block bg-dark">
|
||||
<button type="button" class="btn bg-dark text-light rounded-0 p-1 d-flex align-items-center" data-bs-toggle="collapse" data-bs-target="#nav-main-menu" aria-expanded="true" aria-controls="nav-main-menu">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="offcanvas-body p-0">
|
||||
<fhc-searchbar id="nav-search" class="fhc-searchbar w-100" :searchoptions="searchbaroptions" :searchfunction="searchfunction"></fhc-searchbar>
|
||||
<button id="nav-user-btn" class="btn btn-link rounded-0" type="button" data-bs-toggle="collapse" data-bs-target="#nav-user-menu" aria-expanded="false" aria-controls="nav-user-menu">
|
||||
<img src="<?= base_url('/cis/public/bild.php?src=person&person_id=' . getAuthPersonId()); ?>" class="avatar rounded-circle"/>
|
||||
</button>
|
||||
<ul id="nav-user-menu" class="collapse list-unstyled" aria-labelledby="nav-user-btn">
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#" id="menu-profil">Profil</a></li>
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#">Ampeln</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#">Logout</a></li>
|
||||
</ul>
|
||||
<div id="nav-main-menu" class="collapse collapse-horizontal show">
|
||||
<div>
|
||||
<?php foreach($menu->childs as $entry)
|
||||
$this->load->view('templates/CISHTML-Menu/Entry', ['entry' => $entry, 'menu_id' => 'menu']);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main id="cis-main" class="flex-grow-1 overflow-scroll p-4">
|
||||
+6
-4
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
if (is_array($entry) && isset($entry['content_id']))
|
||||
$entry = (object)$entry;
|
||||
$menu_id .= '-' . $entry->content_id;
|
||||
|
||||
switch ($entry->template_kurzbz) {
|
||||
@@ -6,7 +8,7 @@ switch ($entry->template_kurzbz) {
|
||||
$url = '';
|
||||
$target = '';
|
||||
$xml = new DOMDocument();
|
||||
if($entry->content!='')
|
||||
if($entry->content != '')
|
||||
{
|
||||
$xml->loadXML($entry->content);
|
||||
if ($xml->getElementsByTagName('url')->item(0))
|
||||
@@ -24,15 +26,15 @@ switch ($entry->template_kurzbz) {
|
||||
if ($target == 'content')
|
||||
$target = '';
|
||||
|
||||
$this->load->view('templates/CIS-Menu/EntryBase', ['entry' => $entry, 'menu_id' => $menu_id, 'link' => $url, 'target' => $target]);
|
||||
$this->load->view('templates/CISHTML-Menu/EntryBase', ['entry' => $entry, 'menu_id' => $menu_id, 'link' => $url, 'target' => $target]);
|
||||
break;
|
||||
}
|
||||
case 'include': {
|
||||
$this->load->view('templates/CIS-Menu/EntryInclude', ['entry' => $entry, 'menu_id' => $menu_id . '-' . $entry->content_id]);
|
||||
$this->load->view('templates/CISHTML-Menu/EntryInclude', ['entry' => $entry, 'menu_id' => $menu_id]);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
$this->load->view('templates/CIS-Menu/EntryBase', ['entry' => $entry, 'menu_id' => $menu_id, 'link' => APP_ROOT . 'index.ci.php/cis/cms/content/' . $entry->content_id]);
|
||||
$this->load->view('templates/CISHTML-Menu/EntryBase', ['entry' => $entry, 'menu_id' => $menu_id, 'link' => APP_ROOT . 'index.ci.php/CisHtml/Cms/content/' . $entry->content_id]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
<?php } ?>
|
||||
<ul id="<?= $menu_id; ?>" class="nav w-100 collapse<?= $entry->menu_open ? ' show' : ''; ?>">
|
||||
<?php foreach ($entry->childs as $child)
|
||||
$this->load->view('templates/CIS-Menu/Entry', ['entry' => $child, 'menu_id' => $menu_id]);
|
||||
$this->load->view('templates/CISHTML-Menu/Entry', ['entry' => $child, 'menu_id' => $menu_id]);
|
||||
?>
|
||||
</ul>
|
||||
<?php } else { ?>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => $title ?? 'FH-Complete',
|
||||
'vue3' => true,
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6' => true,
|
||||
'axios027' => true,
|
||||
'customJSModules' => array_merge([
|
||||
'public/js/apps/Cis.js'
|
||||
], $customJSModules ?? []),
|
||||
'customCSSs' => array_merge([
|
||||
'public/css/Cis4/Cis.css'
|
||||
], $customCSSs ?? [])
|
||||
);
|
||||
?>
|
||||
|
||||
</main>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => $title ?? 'FH-Complete',
|
||||
'vue3' => true,
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6' => true,
|
||||
'axios027' => true,
|
||||
'customJSModules' => array_merge([
|
||||
'public/js/apps/Cis.js'
|
||||
], $customJSModules ?? []),
|
||||
'customCSSs' => array_merge([
|
||||
'public/css/Cis4/Cis.css'
|
||||
], $customCSSs ?? [])
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
|
||||
?>
|
||||
|
||||
<header id="cis-header" class="navbar-dark">
|
||||
<cis-menu root-url="<?= site_url('CisVue'); ?>" logo-url="<?= base_url('/public/images/logo-300x160.png'); ?>" avatar-url="<?= base_url('/cis/public/bild.php?src=person&person_id=' . getAuthPersonId()); ?>" :searchbaroptions="searchbaroptions" :searchfunction="searchfunction" />
|
||||
</header>
|
||||
<main id="cis-main" class="flex-grow-1 overflow-scroll p-4">
|
||||
@@ -0,0 +1,316 @@
|
||||
<?php
|
||||
/**
|
||||
* CodeIgniter
|
||||
*
|
||||
* An open source application development framework for PHP
|
||||
*
|
||||
* This content is released under the MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014 - 2015, British Columbia Institute of Technology
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
* @package CodeIgniter
|
||||
* @author EllisLab Dev Team
|
||||
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (http://ellislab.com/)
|
||||
* @copyright Copyright (c) 2014 - 2015, British Columbia Institute of Technology (http://bcit.ca/)
|
||||
* @license http://opensource.org/licenses/MIT MIT License
|
||||
* @link http://codeigniter.com
|
||||
* @since Version 1.0.0
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------
|
||||
* APPLICATION ENVIRONMENT
|
||||
*---------------------------------------------------------------
|
||||
*
|
||||
* You can load different configurations depending on your
|
||||
* current environment. Setting the environment also influences
|
||||
* things like logging and error reporting.
|
||||
*
|
||||
* This can be set to anything, but default usage is:
|
||||
*
|
||||
* development
|
||||
* testing
|
||||
* production
|
||||
*
|
||||
* NOTE: If you change these, also change the error_reporting() code below
|
||||
*
|
||||
*/
|
||||
|
||||
// Loads FHC config files
|
||||
require_once 'config/global.config.inc.php';
|
||||
require_once 'config/cis.config.inc.php';
|
||||
|
||||
// Check if the CI_ENVIRONMENT constants is set and eventually use it to set the CI_ENV environment variable
|
||||
if (defined('CI_ENVIRONMENT')) $_SERVER['CI_ENV'] = CI_ENVIRONMENT;
|
||||
|
||||
// If the CI_ENV environment variable is not set then use "development" as default
|
||||
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------
|
||||
* ERROR REPORTING
|
||||
*---------------------------------------------------------------
|
||||
*
|
||||
* Different environments will require different levels of error reporting.
|
||||
* By default development will show errors but testing and live will hide them.
|
||||
*/
|
||||
switch (ENVIRONMENT)
|
||||
{
|
||||
case 'development':
|
||||
error_reporting(-1);
|
||||
ini_set('display_errors', 1);
|
||||
break;
|
||||
|
||||
case 'testing':
|
||||
case 'production':
|
||||
ini_set('display_errors', 0);
|
||||
if (version_compare(PHP_VERSION, '5.3', '>='))
|
||||
{
|
||||
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
|
||||
}
|
||||
else
|
||||
{
|
||||
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
|
||||
echo 'The application environment is not set correctly.';
|
||||
exit(1); // EXIT_ERROR
|
||||
}
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------
|
||||
* SYSTEM FOLDER NAME
|
||||
*---------------------------------------------------------------
|
||||
*
|
||||
* This variable must contain the name of your "system" folder.
|
||||
* Include the path if the folder is not in the same directory
|
||||
* as this file.
|
||||
*
|
||||
*/
|
||||
$system_path = dirname(__FILE__).'/vendor/codeigniter/framework/system';
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------
|
||||
* APPLICATION FOLDER NAME
|
||||
*---------------------------------------------------------------
|
||||
*
|
||||
* If you want this front controller to use a different "application"
|
||||
* folder than the default one you can set its name here. The folder
|
||||
* can also be renamed or relocated anywhere on your server. If
|
||||
* you do, use a full server path. For more info please see the user guide:
|
||||
* http://codeigniter.com/user_guide/general/managing_apps.html
|
||||
*
|
||||
* NO TRAILING SLASH!
|
||||
*
|
||||
*/
|
||||
$application_folder = dirname(__FILE__).'/application';
|
||||
|
||||
/*
|
||||
*---------------------------------------------------------------
|
||||
* VIEW FOLDER NAME
|
||||
*---------------------------------------------------------------
|
||||
*
|
||||
* If you want to move the view folder out of the application
|
||||
* folder set the path to the folder here. The folder can be renamed
|
||||
* and relocated anywhere on your server. If blank, it will default
|
||||
* to the standard location inside your application folder. If you
|
||||
* do move this, use the full server path to this folder.
|
||||
*
|
||||
* NO TRAILING SLASH!
|
||||
*/
|
||||
$view_folder = '';
|
||||
|
||||
|
||||
/*
|
||||
* --------------------------------------------------------------------
|
||||
* DEFAULT CONTROLLER
|
||||
* --------------------------------------------------------------------
|
||||
*
|
||||
* Normally you will set your default controller in the routes.php file.
|
||||
* You can, however, force a custom routing by hard-coding a
|
||||
* specific controller class/function here. For most applications, you
|
||||
* WILL NOT set your routing here, but it's an option for those
|
||||
* special instances where you might want to override the standard
|
||||
* routing in a specific front controller that shares a common CI installation.
|
||||
*
|
||||
* IMPORTANT: If you set the routing here, NO OTHER controller will be
|
||||
* callable. In essence, this preference limits your application to ONE
|
||||
* specific controller. Leave the function name blank if you need
|
||||
* to call functions dynamically via the URI.
|
||||
*
|
||||
* Un-comment the $routing array below to use this feature
|
||||
*
|
||||
*/
|
||||
// The directory name, relative to the "controllers" folder. Leave blank
|
||||
// if your controller is not in a sub-folder within the "controllers" folder
|
||||
// $routing['directory'] = '';
|
||||
|
||||
// The controller class file name. Example: mycontroller
|
||||
// $routing['controller'] = '';
|
||||
|
||||
// The controller function you wish to be called.
|
||||
// $routing['function'] = '';
|
||||
|
||||
|
||||
/*
|
||||
* -------------------------------------------------------------------
|
||||
* CUSTOM CONFIG VALUES
|
||||
* -------------------------------------------------------------------
|
||||
*
|
||||
* The $assign_to_config array below will be passed dynamically to the
|
||||
* config class when initialized. This allows you to set custom config
|
||||
* items or override any default config values found in the config.php file.
|
||||
* This can be handy as it permits you to share one application between
|
||||
* multiple front controller files, with each file containing different
|
||||
* config values.
|
||||
*
|
||||
* Un-comment the $assign_to_config array below to use this feature
|
||||
*
|
||||
*/
|
||||
// $assign_to_config['name_of_config_item'] = 'value of config item';
|
||||
|
||||
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* ---------------------------------------------------------------
|
||||
* Resolve the system path for increased reliability
|
||||
* ---------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Set the current directory correctly for CLI requests
|
||||
if (defined('STDIN'))
|
||||
{
|
||||
chdir(dirname(__FILE__));
|
||||
}
|
||||
|
||||
if (($_temp = realpath($system_path)) !== FALSE)
|
||||
{
|
||||
$system_path = $_temp.'/';
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ensure there's a trailing slash
|
||||
$system_path = rtrim($system_path, '/').'/';
|
||||
}
|
||||
|
||||
// Is the system path correct?
|
||||
if ( ! is_dir($system_path))
|
||||
{
|
||||
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
|
||||
echo 'Your system folder path does not appear to be set correctly. Please open the following file and correct this: '.pathinfo(__FILE__, PATHINFO_BASENAME);
|
||||
exit(3); // EXIT_CONFIG
|
||||
}
|
||||
|
||||
/*
|
||||
* -------------------------------------------------------------------
|
||||
* Now that we know the path, set the main path constants
|
||||
* -------------------------------------------------------------------
|
||||
*/
|
||||
// The name of THIS file
|
||||
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
|
||||
|
||||
// Path to the system folder
|
||||
define('BASEPATH', str_replace('\\', '/', $system_path));
|
||||
|
||||
// Path to the front controller (this file)
|
||||
define('FHCPATH', dirname(__FILE__).'/');
|
||||
|
||||
// Name of the "system folder"
|
||||
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));
|
||||
|
||||
|
||||
// The path to the "application" folder
|
||||
if (is_dir($application_folder))
|
||||
{
|
||||
if (($_temp = realpath($application_folder)) !== FALSE)
|
||||
{
|
||||
$application_folder = $_temp;
|
||||
}
|
||||
|
||||
define('APPPATH', $application_folder.DIRECTORY_SEPARATOR);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ! is_dir(BASEPATH.$application_folder.DIRECTORY_SEPARATOR))
|
||||
{
|
||||
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
|
||||
echo 'Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
|
||||
exit(3); // EXIT_CONFIG
|
||||
}
|
||||
|
||||
define('APPPATH', BASEPATH.$application_folder.DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
// The path to the "views" folder
|
||||
if ( ! is_dir($view_folder))
|
||||
{
|
||||
if ( ! empty($view_folder) && is_dir(APPPATH.$view_folder.DIRECTORY_SEPARATOR))
|
||||
{
|
||||
$view_folder = APPPATH.$view_folder;
|
||||
}
|
||||
elseif ( ! is_dir(APPPATH.'views'.DIRECTORY_SEPARATOR))
|
||||
{
|
||||
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
|
||||
echo 'Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
|
||||
exit(3); // EXIT_CONFIG
|
||||
}
|
||||
else
|
||||
{
|
||||
$view_folder = APPPATH.'views';
|
||||
}
|
||||
}
|
||||
|
||||
if (($_temp = realpath($view_folder)) !== FALSE)
|
||||
{
|
||||
$view_folder = $_temp.DIRECTORY_SEPARATOR;
|
||||
}
|
||||
else
|
||||
{
|
||||
$view_folder = rtrim($view_folder, '/\\').DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
define('VIEWPATH', $view_folder);
|
||||
|
||||
/*
|
||||
* --------------------------------------------------------------------
|
||||
* LOAD THE BOOTSTRAP FILE
|
||||
* --------------------------------------------------------------------
|
||||
*
|
||||
* And away we go...
|
||||
*
|
||||
*/
|
||||
|
||||
// ... and the vendor autoload
|
||||
include_once 'vendor/autoload.php';
|
||||
|
||||
// Autoload custom controllers, models, etc that are present in the application/core directory
|
||||
require_once 'application/config/core_includes.php';
|
||||
|
||||
// Now the bootstrap file
|
||||
require_once BASEPATH.'core/CodeIgniter.php';
|
||||
+288
-101
@@ -1,117 +1,304 @@
|
||||
/* variables */
|
||||
@import '../components/searchbar.css';
|
||||
|
||||
#cis-navigation-top .fhc-searchbar > .input-group {
|
||||
margin: 0!important;
|
||||
}
|
||||
#cis-navigation-top .fhc-searchbar > .input-group > * {
|
||||
border-radius: 0!important;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
object-fit: cover;
|
||||
height: 45px;
|
||||
width: 45px;
|
||||
}
|
||||
|
||||
#cis4 {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
#cis4 > header {
|
||||
height: 48px;
|
||||
}
|
||||
/*body {
|
||||
padding-top: 48px;
|
||||
}*/
|
||||
#cis-navigation-top.navbar-expand-lg .offcanvas {
|
||||
margin-top: 48px;
|
||||
:root {
|
||||
--fhc-cis-primary: #00649c;
|
||||
--fhc-cis-header-px: 1rem;
|
||||
--fhc-cis-header-py: .5rem;
|
||||
--fhc-cis-main-px: 1rem;
|
||||
--fhc-cis-main-py: 1rem;
|
||||
--fhc-cis-menu-lvl-1-bg: #00649c;
|
||||
--fhc-cis-menu-lvl-1-color: #fff;
|
||||
--fhc-cis-menu-lvl-1-bg-hover: #005585;
|
||||
--fhc-cis-menu-lvl-1-color-hover: #fff;
|
||||
--fhc-cis-menu-lvl-2-bg: #343a40;
|
||||
--fhc-cis-menu-lvl-2-color: #fff;
|
||||
--fhc-cis-menu-lvl-2-bg-hover: #2c3136;
|
||||
--fhc-cis-menu-lvl-2-color-hover: #fff;
|
||||
--fhc-cis-menu-lvl-3-bg: #72777A;
|
||||
--fhc-cis-menu-lvl-3-color: #fff;
|
||||
--fhc-cis-menu-lvl-3-bg-hover: #616568;
|
||||
--fhc-cis-menu-lvl-3-color-hover: #fff;
|
||||
--fhc-cis-menu-lvl-4-bg: #ced4da;
|
||||
--fhc-cis-menu-lvl-4-color: #000;
|
||||
--fhc-cis-menu-lvl-4-bg-hover: #d5dae0;
|
||||
--fhc-cis-menu-lvl-4-color-hover: #000;
|
||||
--fhc-cis-menu-lvl-5-bg: #e9ecef;
|
||||
--fhc-cis-menu-lvl-5-color: #000;
|
||||
--fhc-cis-menu-lvl-5-bg-hover: #eceff1;
|
||||
--fhc-cis-menu-lvl-5-color-hover: #000;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
#cis4 > header {
|
||||
height: 61px;
|
||||
}
|
||||
/*body {
|
||||
padding-top: 61px;
|
||||
}*/
|
||||
#cis-navigation-top.navbar-expand-lg .offcanvas {
|
||||
background-color: transparent!important;
|
||||
position: initial;
|
||||
}
|
||||
:root {
|
||||
--fhc-cis-menu-width: 300px;
|
||||
--fhc-cis-header-height: 60px;
|
||||
--fhc-cis-menu-bg: #72777A;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
:root {
|
||||
--fhc-cis-menu-width: 400px;
|
||||
--fhc-cis-header-height: 40px;
|
||||
--fhc-cis-menu-bg: #343a40;
|
||||
}
|
||||
}
|
||||
|
||||
#cis-navigation-left {
|
||||
--fhc-menu-level-1-bg: #0d6efd;
|
||||
--fhc-menu-level-1-color: #fff;
|
||||
--fhc-menu-level-1-border: #0d6efd;
|
||||
--fhc-menu-level-1-hover-bg: #0b5ed7;
|
||||
--fhc-menu-level-1-hover-color: #fff;
|
||||
--fhc-menu-level-1-hover-border: #0a58ca;
|
||||
--fhc-menu-level-2-bg: #6c757d;
|
||||
--fhc-menu-level-2-color: #fff;
|
||||
--fhc-menu-level-2-border: #6c757d;
|
||||
--fhc-menu-level-2-hover-bg: #5c636a;
|
||||
--fhc-menu-level-2-hover-color: #fff;
|
||||
--fhc-menu-level-2-hover-border: #565e64;
|
||||
--fhc-menu-level-3-bg: #212529;
|
||||
--fhc-menu-level-3-color: #fff;
|
||||
--fhc-menu-level-3-border: #212529;
|
||||
--fhc-menu-level-3-hover-bg: #1c1f23;
|
||||
--fhc-menu-level-3-hover-color: #fff;
|
||||
--fhc-menu-level-3-hover-border: #1a1e21;
|
||||
/* buttons */
|
||||
#cis-header .btn-level-1,
|
||||
#cis-header .btn-level-1 + .btn,
|
||||
#cis-nav .btn-level-1,
|
||||
#cis-nav .btn-level-1 + .btn {
|
||||
color: var(--fhc-cis-menu-lvl-1-color);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-1-border); */
|
||||
background-color: var(--fhc-cis-menu-lvl-1-bg);
|
||||
}
|
||||
#cis-navigation-left .btn-level-1,
|
||||
#cis-navigation-left .btn-level-1 + .btn {
|
||||
color: var(--fhc-menu-level-1-color);
|
||||
border-color: var(--fhc-menu-level-1-border);
|
||||
background-color: var(--fhc-menu-level-1-bg);
|
||||
#cis-header .btn-level-1:hover, #cis-header .btn-level-1:focus,
|
||||
#cis-header .btn-level-1 + .btn:hover,
|
||||
#cis-header .btn-level-1 + .btn:focus,
|
||||
#cis-nav .btn-level-1:hover,
|
||||
#cis-nav .btn-level-1:focus,
|
||||
#cis-nav .btn-level-1 + .btn:hover,
|
||||
#cis-nav .btn-level-1 + .btn:focus {
|
||||
color: var(--fhc-cis-menu-lvl-1-color-hover);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-1-border-hover); */
|
||||
background-color: var(--fhc-cis-menu-lvl-1-bg-hover);
|
||||
}
|
||||
#cis-navigation-left .btn-level-1:hover,
|
||||
#cis-navigation-left .btn-level-1:focus,
|
||||
#cis-navigation-left .btn-level-1 + .btn:hover,
|
||||
#cis-navigation-left .btn-level-1 + .btn:focus {
|
||||
color: var(--fhc-menu-level-1-hover-color);
|
||||
border-color: var(--fhc-menu-level-1-hover-border);
|
||||
background-color: var(--fhc-menu-level-1-hover-bg);
|
||||
#cis-header .btn-level-2,
|
||||
#cis-header .btn-level-2 + .btn,
|
||||
#cis-nav .btn-level-2,
|
||||
#cis-nav .btn-level-2 + .btn {
|
||||
color: var(--fhc-cis-menu-lvl-2-color);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-2-border); */
|
||||
background-color: var(--fhc-cis-menu-lvl-2-bg);
|
||||
}
|
||||
#cis-navigation-left .btn-level-2,
|
||||
#cis-navigation-left .btn-level-2 + .btn {
|
||||
color: var(--fhc-menu-level-2-color);
|
||||
border-color: var(--fhc-menu-level-2-border);
|
||||
background-color: var(--fhc-menu-level-2-bg);
|
||||
#cis-header .btn-level-2:hover, #cis-header .btn-level-2:focus,
|
||||
#cis-header .btn-level-2 + .btn:hover,
|
||||
#cis-header .btn-level-2 + .btn:focus,
|
||||
#cis-nav .btn-level-2:hover,
|
||||
#cis-nav .btn-level-2:focus,
|
||||
#cis-nav .btn-level-2 + .btn:hover,
|
||||
#cis-nav .btn-level-2 + .btn:focus {
|
||||
color: var(--fhc-cis-menu-lvl-2-color-hover);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-2-border-hover); */
|
||||
background-color: var(--fhc-cis-menu-lvl-2-bg-hover);
|
||||
}
|
||||
#cis-navigation-left .btn-level-2:hover,
|
||||
#cis-navigation-left .btn-level-2:focus,
|
||||
#cis-navigation-left .btn-level-2 + .btn:hover,
|
||||
#cis-navigation-left .btn-level-2 + .btn:focus {
|
||||
color: var(--fhc-menu-level-2-hover-color);
|
||||
border-color: var(--fhc-menu-level-2-hover-border);
|
||||
background-color: var(--fhc-menu-level-2-hover-bg);
|
||||
#cis-header .btn-level-3,
|
||||
#cis-header .btn-level-3 + .btn,
|
||||
#cis-nav .btn-level-3,
|
||||
#cis-nav .btn-level-3 + .btn {
|
||||
color: var(--fhc-cis-menu-lvl-3-color);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-3-border); */
|
||||
background-color: var(--fhc-cis-menu-lvl-3-bg);
|
||||
}
|
||||
#cis-navigation-left .btn-level-3,
|
||||
#cis-navigation-left .btn-level-3 + .btn {
|
||||
color: var(--fhc-menu-level-3-color);
|
||||
border-color: var(--fhc-menu-level-3-border);
|
||||
background-color: var(--fhc-menu-level-3-bg);
|
||||
#cis-header .btn-level-3:hover, #cis-header .btn-level-3:focus,
|
||||
#cis-header .btn-level-3 + .btn:hover,
|
||||
#cis-header .btn-level-3 + .btn:focus,
|
||||
#cis-nav .btn-level-3:hover,
|
||||
#cis-nav .btn-level-3:focus,
|
||||
#cis-nav .btn-level-3 + .btn:hover,
|
||||
#cis-nav .btn-level-3 + .btn:focus {
|
||||
color: var(--fhc-cis-menu-lvl-3-color-hover);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-3-border-hover); */
|
||||
background-color: var(--fhc-cis-menu-lvl-3-bg-hover);
|
||||
}
|
||||
#cis-navigation-left .btn-level-3:hover,
|
||||
#cis-navigation-left .btn-level-3:focus,
|
||||
#cis-navigation-left .btn-level-3 + .btn:hover,
|
||||
#cis-navigation-left .btn-level-3 + .btn:focus {
|
||||
color: var(--fhc-menu-level-3-hover-color);
|
||||
border-color: var(--fhc-menu-level-3-hover-border);
|
||||
background-color: var(--fhc-menu-level-3-hover-bg);
|
||||
#cis-header .btn-level-4,
|
||||
#cis-header .btn-level-4 + .btn,
|
||||
#cis-nav .btn-level-4,
|
||||
#cis-nav .btn-level-4 + .btn {
|
||||
color: var(--fhc-cis-menu-lvl-4-color);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-4-border); */
|
||||
background-color: var(--fhc-cis-menu-lvl-4-bg);
|
||||
}
|
||||
#cis-header .btn-level-4:hover, #cis-header .btn-level-4:focus,
|
||||
#cis-header .btn-level-4 + .btn:hover,
|
||||
#cis-header .btn-level-4 + .btn:focus,
|
||||
#cis-nav .btn-level-4:hover,
|
||||
#cis-nav .btn-level-4:focus,
|
||||
#cis-nav .btn-level-4 + .btn:hover,
|
||||
#cis-nav .btn-level-4 + .btn:focus {
|
||||
color: var(--fhc-cis-menu-lvl-4-color-hover);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-4-border-hover); */
|
||||
background-color: var(--fhc-cis-menu-lvl-4-bg-hover);
|
||||
}
|
||||
#cis-header .btn-level-5,
|
||||
#cis-header .btn-level-5 + .btn,
|
||||
#cis-nav .btn-level-5,
|
||||
#cis-nav .btn-level-5 + .btn {
|
||||
color: var(--fhc-cis-menu-lvl-5-color);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-5-border); */
|
||||
background-color: var(--fhc-cis-menu-lvl-5-bg);
|
||||
}
|
||||
#cis-header .btn-level-5:hover, #cis-header .btn-level-5:focus,
|
||||
#cis-header .btn-level-5 + .btn:hover,
|
||||
#cis-header .btn-level-5 + .btn:focus,
|
||||
#cis-nav .btn-level-5:hover,
|
||||
#cis-nav .btn-level-5:focus,
|
||||
#cis-nav .btn-level-5 + .btn:hover,
|
||||
#cis-nav .btn-level-5 + .btn:focus {
|
||||
color: var(--fhc-cis-menu-lvl-5-color-hover);
|
||||
/* border-color: var(--fhc-cis-menu-lvl-5-border-hover); */
|
||||
background-color: var(--fhc-cis-menu-lvl-5-bg-hover);
|
||||
}
|
||||
#cis-header .btn.dropdown-toggle,
|
||||
#cis-nav .btn.dropdown-toggle {
|
||||
padding-right: 0.5625rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
#cis-header .btn.dropdown-toggle:after,
|
||||
#cis-nav .btn.dropdown-toggle:after {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#cis-header .btn.dropdown-toggle.collapsed:after,
|
||||
#cis-nav .btn.dropdown-toggle.collapsed:after {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
#cis-navigation-left .btn.dropdown-toggle {
|
||||
padding-right: .5625rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
/* searchbar */
|
||||
#nav-search {
|
||||
z-index: 1;
|
||||
}
|
||||
#cis-navigation-left .dropdown-toggle:after {
|
||||
transition: all .2s ease-in-out;
|
||||
#nav-search.me-3 {
|
||||
margin: 0 !important;
|
||||
}
|
||||
#cis-navigation-left .dropdown-toggle.collapsed:after {
|
||||
transform: rotate(-90deg);
|
||||
#nav-search > .input-group {
|
||||
margin: 0 !important;
|
||||
}
|
||||
#nav-search > .input-group > * {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
#nav-search .searchbar_results {
|
||||
top: 100% !important;
|
||||
left: 0;
|
||||
right: 0 !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
/* desktop */
|
||||
@media (min-width: 992px) {
|
||||
body {
|
||||
display: flex;
|
||||
padding-top: var(--fhc-cis-header-height);
|
||||
width: 100vw;
|
||||
/* overflow: visible !important; */
|
||||
}
|
||||
#cis-header nav {
|
||||
position: initial;
|
||||
transform: none;
|
||||
width: auto;
|
||||
visibility: visible !important;
|
||||
height: 100%;
|
||||
transition: none;
|
||||
border-right: none;
|
||||
min-height: calc(100vh - var(--fhc-cis-header-height));
|
||||
}
|
||||
#nav-main-btn {
|
||||
display: none;
|
||||
}
|
||||
#nav-logo {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: var(--fhc-cis-header-height);
|
||||
width: var(--fhc-cis-menu-width);
|
||||
background-color: var(--fhc-cis-primary);
|
||||
padding: var(--fhc-cis-header-py) var(--fhc-cis-header-px);
|
||||
z-index: 2;
|
||||
}
|
||||
#nav-logo img {
|
||||
object-fit: contain;
|
||||
object-position: left;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#nav-main-toggle {
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
#nav-main-toggle .fa-arrow-circle-left {
|
||||
transition: all 0.5s ease-in-out;
|
||||
}
|
||||
#nav-main-toggle .collapsed .fa-arrow-circle-left {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
#nav-search {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: var(--fhc-cis-menu-width);
|
||||
height: var(--fhc-cis-header-height);
|
||||
right: calc(var(--fhc-cis-header-height) + 2 * var(--fhc-cis-header-px) - 2 * var(--fhc-cis-header-py));
|
||||
width: auto !important;
|
||||
}
|
||||
#nav-user-btn {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
border-width: 0;
|
||||
padding: var(--fhc-cis-header-py) var(--fhc-cis-header-px);
|
||||
background-color: var(--fhc-cis-primary);
|
||||
}
|
||||
#nav-user-btn img {
|
||||
object-fit: cover;
|
||||
height: calc(var(--fhc-cis-header-height) - 2 * var(--fhc-cis-header-py));
|
||||
width: calc(var(--fhc-cis-header-height) - 2 * var(--fhc-cis-header-py));
|
||||
}
|
||||
#nav-user-menu {
|
||||
position: absolute;
|
||||
top: var(--fhc-cis-header-height);
|
||||
right: 0;
|
||||
min-width: var(--fhc-cis-menu-width);
|
||||
background-color: var(--fhc-cis-menu-lvl-2-bg);
|
||||
}
|
||||
#nav-main-menu {
|
||||
height: 100%;
|
||||
background-color: var(--fhc-cis-menu-bg);
|
||||
}
|
||||
#nav-main-menu > div {
|
||||
width: var(--fhc-cis-menu-width);
|
||||
}
|
||||
}
|
||||
/* mobile */
|
||||
@media (max-width: 991.98px) {
|
||||
#cis-main {
|
||||
padding-left: var(--fhc-cis-main-px);
|
||||
}
|
||||
#cis-header {
|
||||
background-color: var(--fhc-cis-primary);
|
||||
height: var(--fhc-cis-header-height);
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
z-index: 1;
|
||||
}
|
||||
#cis-header nav {
|
||||
top: var(--fhc-cis-header-height);
|
||||
background-color: var(--fhc-cis-menu-bg);
|
||||
border-right: none;
|
||||
min-height: calc(100vh - var(--fhc-cis-header-height));
|
||||
}
|
||||
#nav-logo img {
|
||||
height: var(--fhc-cis-header-height);
|
||||
width: auto;
|
||||
}
|
||||
#nav-search {
|
||||
position: relative;
|
||||
}
|
||||
#nav-user-btn {
|
||||
width: 100%;
|
||||
}
|
||||
#nav-user-btn img {
|
||||
object-fit: cover;
|
||||
height: 1.5rem;
|
||||
width: 1.5rem;
|
||||
}
|
||||
#nav-user-menu {
|
||||
position: relative !important;
|
||||
transform: none !important;
|
||||
}
|
||||
#nav-main-menu {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=Cis.css.map */
|
||||
|
||||
+36
-1
@@ -1,3 +1,38 @@
|
||||
|
||||
/* New */
|
||||
#cms article.news-list-item img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
#cms article.news-list-item footer > a:last-child {
|
||||
margin-inline-end: 0 !important;
|
||||
}
|
||||
#cms article.news-list-item footer > a:first-child {
|
||||
margin-inline-start: 0 !important;
|
||||
}
|
||||
#cms a.btn-outline-primary {
|
||||
color: var(--fhc-cis-primary);
|
||||
border-color: var(--fhc-cis-primary);
|
||||
}
|
||||
#cms a.btn-outline-primary:hover,
|
||||
#cms a.btn-outline-primary:focus {
|
||||
color: #fff;
|
||||
background-color: var(--fhc-cis-primary);
|
||||
border-color: var(--fhc-cis-primary);
|
||||
}
|
||||
#cms a.btn-primary {
|
||||
color: var(--fhc-cis-menu-lvl-1-color);
|
||||
background-color: var(--fhc-cis-menu-lvl-1-bg);
|
||||
border-color: var(--fhc-cis-menu-lvl-1-bg);
|
||||
}
|
||||
#cms a.btn-primary:hover,
|
||||
#cms a.btn-primary:focus {
|
||||
color: var(--fhc-cis-menu-lvl-1-color-hover);
|
||||
background-color: var(--fhc-cis-menu-lvl-1-bg-hover);
|
||||
border-color: var(--fhc-cis-menu-lvl-1-bg-hover);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Allgemein */
|
||||
#cms {
|
||||
background-color: white;
|
||||
@@ -56,7 +91,7 @@
|
||||
margin-left: 6px;
|
||||
}
|
||||
#cms ul li {
|
||||
list-style-image:url(images/square_blue.png);
|
||||
list-style-image:url(../../../skin/images/square_blue.png);
|
||||
padding-left: 0px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
iframe {
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
}
|
||||
+69
-2
@@ -1,7 +1,74 @@
|
||||
import FhcSearchbar from "../components/searchbar/searchbar.js";
|
||||
import CisMenu from "../components/Cis/Menu.js";
|
||||
|
||||
import fhcapifactory from "./api/fhcapifactory.js";
|
||||
Vue.$fhcapi = fhcapifactory;
|
||||
|
||||
Vue.createApp({
|
||||
data: function() {
|
||||
return {
|
||||
searchbaroptions: {
|
||||
types: [
|
||||
"mitarbeiter",
|
||||
"raum",
|
||||
"organisationunit"
|
||||
],
|
||||
actions: {
|
||||
employee: {
|
||||
defaultaction: {
|
||||
type: "function",
|
||||
action: function(data) {
|
||||
alert('employee defaultaction ' + JSON.stringify(data));
|
||||
}
|
||||
},
|
||||
childactions: []
|
||||
},
|
||||
raum: {
|
||||
defaultaction: {
|
||||
type: "function",
|
||||
action: function(data) {
|
||||
alert('raum defaultaction ' + JSON.stringify(data));
|
||||
}
|
||||
},
|
||||
childactions: [
|
||||
{
|
||||
label: "Rauminformation",
|
||||
icon: "fas fa-info-circle",
|
||||
type: "link",
|
||||
action: function(data) {
|
||||
return data.infolink;
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "Raumreservierung",
|
||||
icon: "fas fa-bookmark",
|
||||
type: "link",
|
||||
action: function(data) {
|
||||
return data.booklink;
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
organisationunit: {
|
||||
defaultaction: {
|
||||
type: "function",
|
||||
action: function(data) {
|
||||
alert('organisationunit defaultaction ' + JSON.stringify(data));
|
||||
}
|
||||
},
|
||||
childactions: []
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
searchfunction: function(searchsettings) {
|
||||
return Vue.$fhcapi.Search.search(searchsettings);
|
||||
}
|
||||
},
|
||||
components: {
|
||||
FhcSearchbar
|
||||
FhcSearchbar,
|
||||
CisMenu
|
||||
}
|
||||
}).mount('#cis-navigation-top');
|
||||
}).mount('#cis-header');
|
||||
@@ -0,0 +1,57 @@
|
||||
import CisMenuEntry from "./Menu/Entry.js";
|
||||
import FhcSearchbar from "../searchbar/searchbar.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CisMenuEntry,
|
||||
FhcSearchbar
|
||||
},
|
||||
props: {
|
||||
rootUrl: String,
|
||||
logoUrl: String,
|
||||
avatarUrl: String,
|
||||
searchbaroptions: Object,
|
||||
searchfunction: Function
|
||||
},
|
||||
data: () => {
|
||||
return {
|
||||
entries: []
|
||||
};
|
||||
},
|
||||
created() {
|
||||
axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/CisVue/Menu').then(res => {
|
||||
this.entries = res.data.retval.childs;
|
||||
});
|
||||
},
|
||||
template: `
|
||||
<button id="nav-main-btn" class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#nav-main" aria-controls="nav-main" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<a id="nav-logo" :href="rootUrl">
|
||||
<img :src="logoUrl" alt="Logo">
|
||||
</a>
|
||||
<nav id="nav-main" class="offcanvas offcanvas-start bg-dark" tabindex="-1" aria-labelledby="nav-main-btn" data-bs-backdrop="false">
|
||||
<div id="nav-main-toggle" class="position-static d-none d-lg-block bg-dark">
|
||||
<button type="button" class="btn bg-dark text-light rounded-0 p-1 d-flex align-items-center" data-bs-toggle="collapse" data-bs-target="#nav-main-menu" aria-expanded="true" aria-controls="nav-main-menu">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="offcanvas-body p-0">
|
||||
<fhc-searchbar id="nav-search" class="fhc-searchbar w-100" :searchoptions="searchbaroptions" :searchfunction="searchfunction"></fhc-searchbar>
|
||||
<button id="nav-user-btn" class="btn btn-link rounded-0" type="button" data-bs-toggle="collapse" data-bs-target="#nav-user-menu" aria-expanded="false" aria-controls="nav-user-menu">
|
||||
<img :src="avatarUrl" class="avatar rounded-circle"/>
|
||||
</button>
|
||||
<ul id="nav-user-menu" class="collapse list-unstyled" aria-labelledby="nav-user-btn">
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#" id="menu-profil">Profil</a></li>
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#">Ampeln</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="btn btn-level-2 rounded-0 d-block" href="#">Logout</a></li>
|
||||
</ul>
|
||||
<div id="nav-main-menu" class="collapse collapse-horizontal show">
|
||||
<div>
|
||||
<cis-menu-entry v-for="entry in entries" :key="entry.content_id" :entry="entry" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>`
|
||||
};
|
||||
@@ -0,0 +1,114 @@
|
||||
export default {
|
||||
name: 'CisMenuEntry',
|
||||
props: {
|
||||
entry: Object,
|
||||
level: {
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
},
|
||||
data: () => {
|
||||
return {
|
||||
collapse: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
link() {
|
||||
if (this.entry.template_kurzbz == 'redirect') {
|
||||
if (!this.entry.content)
|
||||
return '';
|
||||
let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,"text/xml");
|
||||
let url = xmlDoc.getElementsByTagName('url')[0];
|
||||
if (!url)
|
||||
return '';
|
||||
// TODO(chris): replace get params
|
||||
url = url.childNodes[0].nodeValue + "";
|
||||
url = url.replace(/^\.\.\//, FHC_JS_DATA_STORAGE_OBJECT.app_root);
|
||||
return url;
|
||||
}
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content/' + this.entry.content_id;
|
||||
},
|
||||
target() {
|
||||
if (this.entry.template_kurzbz == 'redirect') {
|
||||
if (!this.entry.content)
|
||||
return '';
|
||||
let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,"text/xml");
|
||||
let target = xmlDoc.getElementsByTagName('target')[0];
|
||||
if (!target)
|
||||
return '';
|
||||
|
||||
target = target.childNodes[0].nodeValue + "";
|
||||
if (target == 'content' || target == '_self')
|
||||
target = "";
|
||||
return target;
|
||||
}
|
||||
return ''
|
||||
},
|
||||
hasChilds() {
|
||||
return this.entry.childs && this.entry.childs.length !== 0;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleCollapse(evt) {
|
||||
if (this.collapse !== null) {
|
||||
this.entry.menu_open = !this.entry.menu_open;
|
||||
this.collapse.toggle(evt.target);
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (this.$refs.children) {
|
||||
if (this.entry.menu_open)
|
||||
this.$refs.children.className += ' show';
|
||||
this.collapse = new bootstrap.Collapse(this.$refs.children, { toggle: false });
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<div v-if="entry.template_kurzbz == 'include'">
|
||||
INCLUDE
|
||||
</div>
|
||||
<template v-else>
|
||||
<template v-if="hasChilds">
|
||||
<a v-if="link.substr(0, 1) == '#'"
|
||||
@click.prevent="toggleCollapse"
|
||||
:aria-expanded="entry.menu_open"
|
||||
:href="link"
|
||||
:class="{
|
||||
'btn btn-default rounded-0 w-100 text-start dropdown-toggle': true,
|
||||
['btn-level-' + level]: true,
|
||||
collapsed: !entry.menu_open
|
||||
}">
|
||||
<span>{{ entry.titel }}</span>
|
||||
</a>
|
||||
<div v-else class="btn-group w-100">
|
||||
<a :href="link" :target="target"
|
||||
:class="{
|
||||
'btn btn-default rounded-0 text-start': true,
|
||||
['btn-level-' + level]: true
|
||||
}">
|
||||
{{ entry.titel }}
|
||||
</a>
|
||||
<button @click.prevent="toggleCollapse" :aria-expanded="entry.menu_open"
|
||||
:class="{
|
||||
'btn btn-default rounded-0 dropdown-toggle dropdown-toggle-split flex-grow-0': true,
|
||||
collapsed: !entry.menu_open
|
||||
}">
|
||||
<span class="visually-hidden">Toggle Dropdown</span>
|
||||
</button>
|
||||
</div>
|
||||
<ul ref="children"
|
||||
class="nav w-100 collapse">
|
||||
<cis-menu-entry v-for="child in entry.childs" :key="child" :entry="child" :level="level + 1"/>
|
||||
</ul>
|
||||
</template>
|
||||
<a v-else
|
||||
:href="link"
|
||||
:target="target"
|
||||
:class="{
|
||||
'btn btn-default rounded-0 w-100 text-start': true,
|
||||
['btn-level-' + level]: true
|
||||
}">
|
||||
{{ entry.titel }}
|
||||
</a>
|
||||
</template>`
|
||||
};
|
||||
@@ -0,0 +1,88 @@
|
||||
export default {
|
||||
template: `
|
||||
<div id="sidebar-container" class="d-none d-lg-block position-sticky">
|
||||
<ul class="list-group list-group-flush">
|
||||
<!-- Separator with title -->
|
||||
<li class="list-group-item sidebar-separator-title text-muted d-flex align-items-center menu-collapsed">
|
||||
<small>MAIN MENU</small>
|
||||
</li>
|
||||
<!-- /end Separator -->
|
||||
<a href="#submenu1" data-bs-toggle="collapse" aria-expanded="true" class="bg-primary list-group-item list-group-item-action flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">Mein CIS</span>
|
||||
</div>
|
||||
</a>
|
||||
<div id='submenu1' class="collapse show sidebar-submenu">
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white active" id="menu-mein-bereich">
|
||||
<span class="menu-collapsed">Mein Bereich</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Studium</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white" id="menu-lvplan">
|
||||
<span class="menu-collapsed">LV Plan</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Campus Life</span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#submenu2" data-bs-toggle="collapse" aria-expanded="false" class="bg-primary list-group-item list-group-item-action flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">FHTW Hochschule</span>
|
||||
</div>
|
||||
</a>
|
||||
<div id='submenu2' class="collapse sidebar-submenu">
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white" id="menu-organisation">
|
||||
<span class="menu-collapsed">Organisation</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Studiengänge</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Forschung & Entwicklung</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Technikum Wien Acadamy</span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#submenu3" data-bs-toggle="collapse" aria-expanded="false" class="bg-primary list-group-item flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">FHTW Services</span>
|
||||
</div>
|
||||
</a>
|
||||
<div id='submenu3' class="collapse sidebar-submenu">
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Teaching & Learning Center</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">International Office</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">Bibliothek</span>
|
||||
</a>
|
||||
<a href="#" class="list-group-item list-group-item-action list-group-item-dark text-white">
|
||||
<span class="menu-collapsed">IT-Services</span>
|
||||
</a>
|
||||
</div>
|
||||
<a href="#submenu4" data-bs-toggle="collapse" aria-expanded="false" class="bg-primary list-group-item flex-column align-items-start">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-user fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">Links & Downloads</span>
|
||||
</div>
|
||||
</a>
|
||||
<li class="list-group-item sidebar-separator-title text-muted d-flex align-items-center menu-collapsed">
|
||||
<small>AKTUELL</small>
|
||||
</li>
|
||||
<a href="#" class="bg-primary list-group-item">
|
||||
<div class="d-flex w-100 justify-content-start align-items-center">
|
||||
<i class="fa fa-medkit fa-fw me-3"></i>
|
||||
<span class="menu-collapsed">COVID 19</span>
|
||||
</div>
|
||||
</a>
|
||||
<li class="list-group-item sidebar-separator menu-collapsed"></li>
|
||||
</ul>
|
||||
</div>`
|
||||
};
|
||||
@@ -0,0 +1,63 @@
|
||||
import FhcSearchbar from "../../searchbar/searchbar.js";
|
||||
import CisNavigationUser from "./User.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
FhcSearchbar,
|
||||
CisNavigationUser
|
||||
},
|
||||
data: () => {
|
||||
return {
|
||||
nav: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
rootUrl() {
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/cis';
|
||||
},
|
||||
logoImg() {
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'public/images/logo-300x160.png';
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openNav() {
|
||||
if (this.nav)
|
||||
this.nav.toggle();
|
||||
},
|
||||
async search() {
|
||||
return {data: {data: []}};
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.nav = new bootstrap.Offcanvas(this.$refs.nav, {backdrop: false});
|
||||
},
|
||||
template: `
|
||||
<div class="cis-navigation-top navbar navbar-expand-lg fixed-top navbar-dark bg-primary p-0">
|
||||
<button class="navbar-toggler border-0" type="button" @click="openNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<a class="navbar-brand col-auto col-lg-2 px-3 py-0 m-0" :href="rootUrl">
|
||||
<img :src="logoImg" width="90">
|
||||
</a>
|
||||
<div ref="nav" class="offcanvas offcanvas-start align-items-stretch mt-lg-0 w-100 px-3 px-lg-0 d-flex flex-column flex-lg-row bg-dark" tabindex="-1">
|
||||
<fhc-searchbar class="fhc-searchbar w-100 me-0" :searchoptions="{types:[],actions:{}}" :searchfunction="search"></fhc-searchbar>
|
||||
<ul class="navbar-nav flex-grow-1">
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">Mein CIS</a>
|
||||
</li>
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">FHTW Campus</a>
|
||||
</li>
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">FHTW Services</a>
|
||||
</li>
|
||||
<li class="nav-item d-lg-none">
|
||||
<a class="nav-link" href="#">COVID 19</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<cis-navigation-user></cis-navigation-user>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>`
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
export default {
|
||||
data: () => {
|
||||
return {
|
||||
imgSrc: FHC_JS_DATA_STORAGE_OBJECT.app_root + '/cis/public/bild.php'
|
||||
}
|
||||
},
|
||||
created() {
|
||||
axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/cis/navigation/user').then(res => {this.imgSrc += '?src=person&person_id=' + res.data.retval});
|
||||
},
|
||||
template: `
|
||||
<div class="dropdown dropstart">
|
||||
<a class="dropdown-toggle nav-link" href="#" id="dropdown01" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<img :src="imgSrc" class="avatar rounded-circle" width="45" height="45"/>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-dark m-0" aria-labelledby="dropdown01">
|
||||
<li><a class="dropdown-item" href="#" id="menu-profil">Profil</a></li>
|
||||
<li><a class="dropdown-item" href="#">Ampeln</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="#">Logout</a></li>
|
||||
</ul>
|
||||
</div>`
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user