This commit is contained in:
cgfhtw
2022-11-29 08:48:50 +01:00
parent 546e55ed96
commit 266ba7523f
21 changed files with 1863 additions and 0 deletions
+2
View File
@@ -61,6 +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/ressource/[B|b]etriebsmittelperson/(:any)'] = 'api/v1/ressource/betriebsmittelperson2/$1';
$route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1'; $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
$route['cis'] = 'cis/dashboard';
// load routes from extensions // load routes from extensions
$subdir = 'application/config/extensions'; $subdir = 'application/config/extensions';
$dirlist = scandir($subdir); $dirlist = scandir($subdir);
+120
View File
@@ -0,0 +1,120 @@
<?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]);
}
}
+35
View File
@@ -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('cis/Dashboard.php');
}
}
@@ -11,4 +11,167 @@ class Content_model extends DB_Model
$this->dbTable = 'campus.tbl_content'; $this->dbTable = 'campus.tbl_content';
$this->pk = 'content_id'; $this->pk = 'content_id';
} }
/**
* Laedt den Content in der angegebenen Sprache
* Sollte der Content in dieser Sprache nicht vorhanden sein, wird der Content in der Default Sprache geladen
*
* @param integer $content_id
* @param string $sprache optional
* @param integer $version optional
* @param boolean | null $sichtbar optional
*
* @return stdClass
*/
public function getContent($content_id, $sprache=DEFAULT_LANGUAGE, $version=null, $sichtbar=null, $load_default_language=false)
{
$this->load->model('content/Contentsprache_model', 'ContentspracheModel');
$spracheExists = $this->ContentspracheModel->exists($content_id, $sprache, $version, $sichtbar);
if (isError($spracheExists))
return $spracheExists;
if(!getData($spracheExists))
{
if($load_default_language)
$sprache = DEFAULT_LANGUAGE;
else
return error('Der Content existiert in dieser Sprache nicht ');
}
$condition = ['content_id' => $content_id, 'sprache' => $sprache];
if ($sichtbar === true || $sichtbar === false)
$condition['sichtbar'] = $sichtbar;
if ($version)
$condition['version'] = $version;
$this->addSelect(['*', 'tbl_contentsprache.insertamum', 'tbl_contentsprache.insertvon', 'tbl_contentsprache.updateamum', 'tbl_contentsprache.updatevon']);
$this->addJoin('campus.tbl_contentsprache', 'content_id');
$this->addOrder('version', 'DESC');
$this->addLimit(1);
$result = $this->loadWhere($condition);
if (isError($result))
return $result;
if (!getData($result))
return error('Dieser Eintrag wurde nicht gefunden');
return success(current(getData($result)));
}
/**
* Laedt alle Content Eintraege unterhalb eines Contents
* (Ohne Newseintraege)
*
* @param integer $root_content_id
* @param string $uid
* @param string $sprache optional
*
* @return stdClass on success an array with menu objects
*/
public function getMenu($root_content_id, $uid, $sprache=DEFAULT_LANGUAGE)
{
$sql = "
SELECT
c.content_id,
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
c.content_id,
s.contentsprache_id
FROM
campus.tbl_content c
JOIN (SELECT s5.content_id, s5.contentsprache_id FROM (SELECT content_id, sprache, MAX(version) AS version FROM (SELECT c1.content_id, COALESCE(s1.sprache, ?) AS sprache FROM campus.tbl_content c1 LEFT JOIN campus.tbl_contentsprache s1 ON c1.content_id=s1.content_id AND s1.sprache=? WHERE sichtbar=true) s2 LEFT JOIN campus.tbl_contentsprache s3 USING(content_id, sprache) WHERE sichtbar=true GROUP BY content_id, sprache) s4 LEFT JOIN campus.tbl_contentsprache s5 USING(content_id, sprache, version) WHERE version IS NOT NULL) t USING (content_id)
JOIN
campus.tbl_contentsprache s USING (contentsprache_id)
WHERE
c.template_kurzbz<>'news'
AND
c.content_id IN (
WITH RECURSIVE childs(content_id, child_content_id) as
(
SELECT content_id, child_content_id FROM campus.tbl_contentchild
WHERE content_id=?
UNION ALL
SELECT cc.child_content_id, null FROM campus.tbl_contentchild cc, childs
WHERE cc.content_id=childs.content_id
)
SELECT content_id
FROM childs
GROUP BY content_id
)
GROUP BY c.content_id,
s.contentsprache_id
) m
JOIN
campus.tbl_content c USING(content_id)
JOIN
campus.tbl_contentsprache s USING(contentsprache_id)
LEFT JOIN
campus.tbl_contentchild k ON(m.content_id=k.content_id)
ORDER BY content_id, sort";
#DEFAULT_LANGUAGE, $sprache, $root_content_id
$result = $this->execQuery($sql, [DEFAULT_LANGUAGE, $sprache, $root_content_id]);
if (isError($result))
return $result;
$contents = getData($result) ?? [];
$result = [];
foreach ($contents as $content) {
if (!isset($result[$content->content_id])) {
$result[$content->content_id] = clone($content);
unset($result[$content->content_id]->child_content_id);
unset($result[$content->content_id]->sort);
$result[$content->content_id]->childs = [];
}
if ($content->child_content_id !== null)
$result[$content->content_id]->childs[] = $content->child_content_id;
}
foreach ($result as $content) {
foreach ($content->childs as $k => $v) {
if (isset($result[$v])) {
$content->childs[$k] = $result[$v];
} else {
unset($content->childs[$k]);
}
}
}
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";
}
} }
@@ -11,4 +11,50 @@ class Contentgruppe_model extends DB_Model
$this->dbTable = 'campus.tbl_contentgruppe'; $this->dbTable = 'campus.tbl_contentgruppe';
$this->pk = array('gruppe_kurzbz', 'content_id'); $this->pk = array('gruppe_kurzbz', 'content_id');
} }
/**
* Prueft ob der Zugriff auf den Content eingeschraenkt ist auf
* eine bestimmte Benutzergruppe
*
* @param int $content_id
*
* @return stdClass success(true) wenn eingeschraenkt sonst success(false)
*/
public function islocked($content_id)
{
$islocked = $this->loadWhere(['content_id' => $content_id]);
if (isError($islocked))
return $islocked;
return success(!!getData($islocked));
}
/**
* Prueft ob ein User die Berechtigung fuer das Anzeigen des
* Contents besitzt
*
* @param int $content_id ID des Contents
* @param string $uid User der versucht auf den Content zuzugreifen
*
* @return stdClass
*/
public function berechtigt($content_id, $uid)
{
$islocked = $this->islocked($content_id);
if (isError($islocked))
return $islocked;
$condition = ['uid' => $uid];
if (getData($islocked)) {
$condition['content_id'] = $content_id;
}
$this->addJoin('public.vw_gruppen', 'gruppe_kurzbz');
$result = $this->loadWhere($condition);
if (isError($result))
return $result;
return success(!!getData($result));
}
} }
@@ -11,4 +11,32 @@ class Contentsprache_model extends DB_Model
$this->dbTable = 'campus.tbl_contentsprache'; $this->dbTable = 'campus.tbl_contentsprache';
$this->pk = 'contentsprache_id'; $this->pk = 'contentsprache_id';
} }
/**
* Prueft ob der Content in der angegeben Sprache vorhanden ist
*
* @param int $content_id
* @param string $sprache
* @param int | null $version (optional)
* @param boolean | null $sichtbar (optional)
* @return stdClass
*/
public function exists($content_id, $sprache, $version=null, $sichtbar=null)
{
$condition = ['content_id' => $content_id, 'sprache' => $sprache];
if ($version)
$condition['version'] = $version;
if ($sichtbar !== null)
$condition['sichtbar'] = $sichtbar;
$result = $this->loadWhere($condition);
if (isError($result))
return $result;
return success(!!getData($result));
}
} }
+17
View File
@@ -0,0 +1,17 @@
<?php
$includesArray = array(
'customJSModules' => ['public/js/apps/Dashboard/Fhc.js'],
'customCSSs' => [
'public/css/components/dashboard.css'
],
);
$this->load->view('templates/CIS-Header', $includesArray);
?>
<div id="content">
<fhc-dashboard dashboard="CIS"/>
</div>
<?php $this->load->view('templates/CIS-Footer', $includesArray); ?>
+18
View File
@@ -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); ?>
+17
View File
@@ -0,0 +1,17 @@
<?php
$includesArray = array(
'customCSSs' => [
'public/css/Cis4/Cms.css',
#'skin/style.css.php'
]
);
$this->load->view('templates/CIS-Header', $includesArray);
?>
<div id="cms">
<?= $content; ?>
</div>
<?php $this->load->view('templates/CIS-Footer', $includesArray); ?>
@@ -0,0 +1,21 @@
<?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>
</div>
</div>
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
+161
View File
@@ -0,0 +1,161 @@
<?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,39 @@
<?php
$menu_id .= '-' . $entry->content_id;
switch ($entry->template_kurzbz) {
case 'redirect': {
$url = '';
$target = '';
$xml = new DOMDocument();
if($entry->content!='')
{
$xml->loadXML($entry->content);
if ($xml->getElementsByTagName('url')->item(0))
$url = $xml->getElementsByTagName('url')->item(0)->nodeValue;
// TODO(chris): get params
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 (strpos($url, '../') === 0)
$url = APP_ROOT . substr($url, 3);
}
if ($target == 'content')
$target = '';
$this->load->view('templates/CIS-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]);
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]);
break;
}
}
?>
@@ -0,0 +1,25 @@
<?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/CIS-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 } ?>
@@ -0,0 +1,4 @@
<div>
INCLUDE
</div>
+117
View File
@@ -0,0 +1,117 @@
@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;
}
@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;
}
}
#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;
}
#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-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-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-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-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-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-navigation-left .btn.dropdown-toggle {
padding-right: .5625rem;
display: flex;
justify-content: space-between;
align-items: center;
}
#cis-navigation-left .dropdown-toggle:after {
transition: all .2s ease-in-out;
}
#cis-navigation-left .dropdown-toggle.collapsed:after {
transform: rotate(-90deg);
}
File diff suppressed because it is too large Load Diff
+7
View File
@@ -0,0 +1,7 @@
import FhcSearchbar from "../components/searchbar/searchbar.js";
Vue.createApp({
components: {
FhcSearchbar
}
}).mount('#cis-navigation-top');
+12
View File
@@ -0,0 +1,12 @@
import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';
import DashboardAdmin from '../../components/Dashboard/Admin.js';
Vue.createApp({
data: () => ({
appSideMenuEntries: {}
}),
components: {
CoreNavigationCmpt,
DashboardAdmin
}
}).mount('#main');
+10
View File
@@ -0,0 +1,10 @@
import FhcDashboard from '../../components/Dashboard/Dashboard.js';
Vue.createApp({
data: () => ({
appSideMenuEntries: {}
}),
components: {
FhcDashboard
}
}).mount('#content');
+2
View File
@@ -350,6 +350,8 @@ $tabellen=array(
"wawi.tbl_aufteilung_default" => array("aufteilung_id","kostenstelle_id","oe_kurzbz","anteil","insertamum","insertvon","updateamum","updatevon"), "wawi.tbl_aufteilung_default" => array("aufteilung_id","kostenstelle_id","oe_kurzbz","anteil","insertamum","insertvon","updateamum","updatevon"),
); );
require_once('dbupdate_3.4/25999_cis4_cms.php');
$tabs=array_keys($tabellen); $tabs=array_keys($tabellen);
//print_r($tabs); //print_r($tabs);
$i=0; $i=0;
+17
View File
@@ -0,0 +1,17 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add index to system.tbl_log
if(!$result = @$db->db_query("SELECT xslt_xhtml_c4 FROM campus.tbl_template LIMIT 1"))
{
$qry = "ALTER TABLE campus.tbl_template ADD COLUMN xslt_xhtml_c4 xml;";
if(!$db->db_query($qry))
echo '<strong>campus.tbl_template: '.$db->db_last_error().'</strong><br>';
else
echo '<br>campus.tbl_template: Spalte xslt_xhtml_c4 hinzugefuegt';
// TODO(chris): add default values
}
$tabellen['campus.tbl_template'][] = 'xslt_xhtml_c4';