diff --git a/application/config/routes.php b/application/config/routes.php
index 15da5698f..0dc1ecc73 100644
--- a/application/config/routes.php
+++ b/application/config/routes.php
@@ -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/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
+$route['cis'] = 'cis/dashboard';
+
// load routes from extensions
$subdir = 'application/config/extensions';
$dirlist = scandir($subdir);
diff --git a/application/controllers/cis/Cms.php b/application/controllers/cis/Cms.php
new file mode 100644
index 000000000..4698bc462
--- /dev/null
+++ b/application/controllers/cis/Cms.php
@@ -0,0 +1,120 @@
+ '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]);
+ }
+}
diff --git a/application/controllers/cis/Dashboard.php b/application/controllers/cis/Dashboard.php
new file mode 100644
index 000000000..d81536bec
--- /dev/null
+++ b/application/controllers/cis/Dashboard.php
@@ -0,0 +1,35 @@
+ 'user:r'
+ )
+ );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * @return void
+ */
+ public function index()
+ {
+ $this->load->view('cis/Dashboard.php');
+ }
+
+
+
+}
diff --git a/application/models/content/Content_model.php b/application/models/content/Content_model.php
index ee4315ebd..f36425169 100644
--- a/application/models/content/Content_model.php
+++ b/application/models/content/Content_model.php
@@ -11,4 +11,167 @@ class Content_model extends DB_Model
$this->dbTable = 'campus.tbl_content';
$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";
+
+
+ }
+
}
diff --git a/application/models/content/Contentgruppe_model.php b/application/models/content/Contentgruppe_model.php
index 03efc87b1..23dc897a1 100644
--- a/application/models/content/Contentgruppe_model.php
+++ b/application/models/content/Contentgruppe_model.php
@@ -11,4 +11,50 @@ class Contentgruppe_model extends DB_Model
$this->dbTable = 'campus.tbl_contentgruppe';
$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));
+ }
+
}
diff --git a/application/models/content/Contentsprache_model.php b/application/models/content/Contentsprache_model.php
index eb7e257b2..80b053e28 100644
--- a/application/models/content/Contentsprache_model.php
+++ b/application/models/content/Contentsprache_model.php
@@ -11,4 +11,32 @@ class Contentsprache_model extends DB_Model
$this->dbTable = 'campus.tbl_contentsprache';
$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));
+ }
+
}
diff --git a/application/views/cis/Dashboard.php b/application/views/cis/Dashboard.php
new file mode 100644
index 000000000..48e9f1dc9
--- /dev/null
+++ b/application/views/cis/Dashboard.php
@@ -0,0 +1,17 @@
+ ['public/js/apps/Dashboard/Fhc.js'],
+ 'customCSSs' => [
+ 'public/css/components/dashboard.css'
+ ],
+);
+
+$this->load->view('templates/CIS-Header', $includesArray);
+?>
+
+
+
+
+
+load->view('templates/CIS-Footer', $includesArray); ?>
+
diff --git a/application/views/cis/Error.php b/application/views/cis/Error.php
new file mode 100644
index 000000000..7b6a6beb2
--- /dev/null
+++ b/application/views/cis/Error.php
@@ -0,0 +1,18 @@
+ 'FH-Complete',
+ 'bootstrap5' => true,
+ 'fontawesome6' => true,
+ );
+
+ $this->load->view('templates/FHC-Header', $includesArray);
+?>
+
+
+
+load->view('templates/FHC-Footer', $includesArray); ?>
+
diff --git a/application/views/cis/cms/Content.php b/application/views/cis/cms/Content.php
new file mode 100644
index 000000000..b8f0aa45a
--- /dev/null
+++ b/application/views/cis/cms/Content.php
@@ -0,0 +1,17 @@
+ [
+ 'public/css/Cis4/Cms.css',
+ #'skin/style.css.php'
+ ]
+);
+
+$this->load->view('templates/CIS-Header', $includesArray);
+?>
+
+
+ = $content; ?>
+
+
+load->view('templates/CIS-Footer', $includesArray); ?>
+
diff --git a/application/views/templates/CIS-Footer.php b/application/views/templates/CIS-Footer.php
new file mode 100644
index 000000000..24fcc8b98
--- /dev/null
+++ b/application/views/templates/CIS-Footer.php
@@ -0,0 +1,21 @@
+ $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 ?? [])
+);
+?>
+
+
+
+
+
+load->view('templates/FHC-Footer', $includesArray); ?>
\ No newline at end of file
diff --git a/application/views/templates/CIS-Header.php b/application/views/templates/CIS-Header.php
new file mode 100644
index 000000000..7b5c78c3f
--- /dev/null
+++ b/application/views/templates/CIS-Header.php
@@ -0,0 +1,161 @@
+ $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' => []];
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/application/views/templates/CIS-Menu/Entry.php b/application/views/templates/CIS-Menu/Entry.php
new file mode 100644
index 000000000..01e5ab67f
--- /dev/null
+++ b/application/views/templates/CIS-Menu/Entry.php
@@ -0,0 +1,39 @@
+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;
+ }
+}
+?>
diff --git a/application/views/templates/CIS-Menu/EntryBase.php b/application/views/templates/CIS-Menu/EntryBase.php
new file mode 100644
index 000000000..610c1e580
--- /dev/null
+++ b/application/views/templates/CIS-Menu/EntryBase.php
@@ -0,0 +1,25 @@
+childs) { ?>
+
+
+
+
+
+
+
+ = $target ? ' target="' . $target . '"' : ''; ?> class="btn btn-default rounded-0 w-100 text-start btn-level-= substr_count($menu_id, '-'); ?>">
+ = htmlspecialchars($entry->titel); ?>
+
+
diff --git a/application/views/templates/CIS-Menu/EntryInclude.php b/application/views/templates/CIS-Menu/EntryInclude.php
new file mode 100644
index 000000000..0fd9f7b16
--- /dev/null
+++ b/application/views/templates/CIS-Menu/EntryInclude.php
@@ -0,0 +1,4 @@
+
+
+ INCLUDE
+
diff --git a/public/css/Cis4/Cis.css b/public/css/Cis4/Cis.css
new file mode 100644
index 000000000..0e6a93d5f
--- /dev/null
+++ b/public/css/Cis4/Cis.css
@@ -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);
+}
\ No newline at end of file
diff --git a/public/css/Cis4/Cms.css b/public/css/Cis4/Cms.css
new file mode 100644
index 000000000..b35d04d6b
--- /dev/null
+++ b/public/css/Cis4/Cms.css
@@ -0,0 +1,1002 @@
+/* Allgemein */
+#cms {
+ background-color: white;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ width: 100%;
+ height: 100%;
+ margin:0px;
+ border-width:0px;
+ border-style:none;
+ padding:0px;
+}
+#cms.main /* Workaround fuer Farbverlauf im IE statt ShadowBox */ {
+ background-color: white;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ height: 100%;
+ width: 100%;
+ margin:0px;
+ border-width: 2px;
+ border-style: none;
+ padding:0px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc',endColorstr='#ffffff');
+}
+#cms iframe {
+ margin:0px;
+ padding:0px;
+ height: 100%;
+
+ /* border-width:1px;
+ border-style:solid; */
+}
+#cms textarea {
+ font-family: Arial, Helvetica, sans-serif;
+}
+#cms form {
+ font-family: Arial, Helvetica, sans-serif;
+}
+#cms p {
+ margin-top: 0px;
+}
+#cms hr {
+ color:#CCCCCC;
+ height:1px;
+}
+#cms ul {
+ padding-left: 0px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ margin-left: 6px;
+}
+#cms ol {
+ padding-left: 13px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ margin-left: 6px;
+}
+#cms ul li {
+ list-style-image:url(images/square_blue.png);
+ padding-left: 0px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ margin-left: 6px;
+}
+#cms li.ui-menu-item {
+ list-style-image:none;
+}
+#cms .btn-testtool {
+ width: 200px;
+ margin-top: 20px;
+}
+#cms #menue {
+ bottom: 2%;
+ width: 17%;
+ height: 81%;
+ z-index: 10;
+ padding: 0px;
+ margin: 0px;
+}
+#cms #menue {
+ position:absolute;
+}
+
+#cms #content {
+ bottom: 2%;
+ width:81%;
+ height:81%;
+ z-index: 10;
+ left:18%;
+ padding: 0px;
+ margin: 0px;
+}
+#cms #content /* Hack für IE8 */ {
+ *width: 75\%;
+ *left: 21\%;
+}
+#cms #content {
+ position:absolute;
+}
+
+/* Druckausgabe */
+@media print
+{
+ #cms #menue {
+ display:none;
+ }
+ #cms #content {
+ width:98%;
+ z-index: 10;
+ left:1%;
+ }
+}
+#cms input.TextBox {
+ background-color: White;
+}
+/*
+==== Formularfelder und Buttons ====
+*/
+
+/* Such-Feld CIS-Suche */
+#cms input.search input.text {
+ background-color: #E9ECEE;
+ border-width: 1px;
+ border-style:solid;
+ border-color: #A5AFB6;
+}
+#cms #globalsearch {
+ background-color: #E9ECEE;
+ border-width: 1px;
+ border-style:solid;
+ border-color: #A5AFB6;
+ height: 25px;
+}
+/* Login-Button CIS-Seite */
+#cms input.cis_login {
+ cursor: pointer;
+ color: #666666;
+ border: 1px solid #A5AFB6;
+ background-color: #E9ECEE;
+ width: 150px;
+ height: 35px;
+ font-size: 20px;
+}
+#cms #GlobalMenu {
+ margin-top: 3px;
+ text-align: right;
+}
+#cms .home_logo {
+ background-image:url(styles/tw/TWLogo_klein.jpg);
+ background-repeat: no-repeat;
+ width:170px;
+ height:53px;
+}
+
+#cms div.tip {
+ position: absolute;
+ display: none;
+ width: 300px;
+ background-color: #f7f7ee;
+ padding: 3px 7px 4px 6px;
+ border: 1px solid #336;
+ background-color: #f7f7ee;
+ text-align: left;
+}
+#cms #header {
+ vertical-align:middle;
+}
+
+/*
+==== Links ====
+*/
+#cms a /*allgmeiner Link, Hauptmenuelinks*/ {
+ color: #0086CC; /*tw-blau*/
+ text-decoration: none;
+ cursor: pointer;
+}
+#cms a:hover /*link ohne Item-Definition*/ {
+ color: #0086CC; /*tw-blau*/
+ text-decoration: underline;
+}
+#cms a.ItemTesttool {
+ color: #000;
+ line-height: 25px;
+ display:block;
+ padding: 5px 10px 5px 10px;
+}
+
+#cms a.ItemTesttool.navButton {
+ background-color: #0a629c;
+ color: white;
+ padding: 10px;
+}
+#cms a.ItemTesttoolAktiv {
+ color: #000;
+ line-height: 25px;
+ display:block;
+ padding: 5px 10px 5px 10px;
+ text-decoration: none;
+}
+#cms a.ItemTesttoolBeendet {
+ color: #C7C8C9;
+ line-height: 25px;
+ display:block;
+ padding: 5px 10px 5px 10px;
+ cursor: default;
+ text-decoration: none;
+}
+#cms a:hover.ItemTesttool {
+ color: #000;
+ line-height: 25px;
+ text-decoration: none;
+ padding: 5px 10px 5px 10px;
+}
+#cms a:hover.ItemTesttool.navButton {
+ background-color: steelblue;
+ color: white;
+ padding: 10px;
+}
+#cms a.HyperItem /* ? */ {
+ color: Black; text-decoration: none;
+ font-weight: bold;
+}
+#cms a:hover.HyperItem /* ? */ {
+ color: #008381; text-decoration: none;
+ font-weight: bold;
+}
+#cms a[onClick]:hover.Item /* ? */ {
+ color: Black; text-decoration: none;
+}
+#cms a:hover.Item /*allgemeine Links, Hauptmenuelink*/ {
+ color: #0086CC; /*tw-blau*/
+ text-decoration: underline;
+}
+#cms a.Item2 /* zB in den Lehrveranstaltungen (Buttons) verwendet bei den Lektoren */ {
+ color: Black; text-decoration: none;
+}
+#cms a:hover.Item2 /* zB in den Lehrveranstaltungen (Buttons) verwendet bei den Lektoren */ {
+ color: #008381; text-decoration: none;
+}
+#cms a.MenuItem /* Hauptmenuelink zum aufklappen */ {
+ color: #0086CC; text-decoration: none;
+ font-weight: bold;
+}
+#cms a:hover.MenuItem /* Hauptmenuelink zum aufklappen */ {
+ color: #0086CC; /*tw-blau*/
+ text-decoration: none;
+ font-weight: bold;
+}
+#cms a:focus.MenuItem /* Hauptmenuelink zum aufklappen */ {
+ color: #0086CC; /*tw-blau*/
+ text-decoration: none;
+ font-weight: bold;
+}
+#cms A.stpl_detail {
+ font-size:x-small;
+ color:#000000;
+ text-decoration:none;
+}
+#cms A.stpl_detail:hover {
+ font-size:x-small;
+ color:#000000;
+ text-decoration:underline;
+ /*cursor:hand;*/
+}
+#cms a.head {
+ color:#ffffff;
+}
+#cms a.head:hover {
+ color:#000000;
+}
+
+
+/*
+==== Tables ====
+*/
+#cms TABLE {
+ font-size: 13px;
+}
+#cms TABLE.header {
+ width:100%;
+ height:100%;
+ /* background-image:url(../skin/images/header.png); */
+ /* background-repeat:no-repeat; */
+ background-color: white;
+ position: relative;
+}
+#cms TABLE.header_content {
+ height: 13%;
+ width: 100%;
+ position: absolute;
+ z-index:4;
+}
+/* Firefox Hack, da er den absolute-Wert der position als einziger nicht richtig dargestellt hat*/
+#cms @-moz-document url-prefix() {
+ TABLE.header_content
+ #cms {
+ height: 13%;
+ width: 100%;
+ position: relative;
+ z-index:4;
+ }
+}
+#cms TABLE.cmstable /* Die Haupttable aller CMS-Contentseiten */ {
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ width: 100%;
+}
+#cms TABLE.tabcontent {
+ margin: 0px;
+ padding: 0px;
+ border-style: none;
+ width: 100%;
+ background-color: white;
+ vertical-align: top;
+ border-spacing:0;
+}
+#cms TABLE.menue {
+ margin: 0px;
+ padding: 0px;
+ border-style: none;
+ width: 100%;
+}
+#cms TABLE.menue TD {
+ padding-bottom: 2px;
+ padding-top: 2px;
+}
+#cms TABLE.tabcontent2 {
+ margin: 0px;
+ padding: 0px;
+ border-style: none;
+}
+#cms TABLE.tabborder {
+ width: 100%;
+ /*border: 1px solid black; foo*/
+}
+#cms TABLE#tabterm {
+ margin:auto;
+}
+
+#cms .well {
+ background-color: white;
+ border: 2px solid #add4ea;
+}
+#cms td.rand /* Seitenraender des CIS */ {
+ font-size: 11px;
+ padding-top: 0px;
+ padding-left: 6px;
+ width: 3%;
+ height: 100%;
+ vertical-align: middle;
+}
+#cms td.boxshadow /* Farbverlauf im Hintergrund der CIS*/ {
+ position: relative;
+ width:94%;
+ height: 100%;
+ box-shadow: 0px 100px 0px 0px #FFFFFF, /* Unterer weisser Rand bei sehr kleinen Aufloesungen */
+ 0px 0px 5px 5px #888, /* schmaler dunkler Schatten */
+ /*0px 300px 5px 5px #888, /* schmaler dunkler Schatten unten bei sehr kleinen Aufloesungen*/
+ 20px 20px 70px 30px #DDDDDD, /* heller Verlauf rechts */
+ -20px 20px 70px 30px #DDDDDD; /* heller Verlauf links */
+}
+#cms td.ContentHeader {
+ background-color: #A5AFB6; /*#DCE4EF;*/
+ font-weight: bold;
+ height: 19px;
+}
+#cms td.ContentHeader2 {
+ color: #0086CC; /*tw-blau */
+ font-weight: normal;
+}
+#cms td.ContentHeader3 {
+ color: #0086CC;; /*tw-blau */
+ font-weight: bold;
+}
+#cms td.MarkLine {
+ background-color: #F2F2F2; /*wie EEEEEE; also grau fast weiss */
+}
+#cms td.HeaderTesttool /*fuer die Button-Optik beim Testtool*/ {
+ color: #FFFFFF;
+ background-color: #00639C;
+ white-space:nowrap;
+ line-height: 25px;
+ box-shadow: inset 0 0 2px #FFFFFF;
+ padding: 10px;
+ width: 170px;
+}
+#cms td.HeaderTesttoolSTG /*fuer die Button-Optik der Quereinstiegs-Studiengänge beim Testtool*/ {
+ color: white;
+ border: 2px solid #73a9d6;
+ padding: 10px;
+ max-width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: normal;
+}
+#cms td.Inaktiv /*fuer Inaktive Items bei der Raumbeschreibung */ {
+ background-color: #F2F2F2; /*wie EEEEEE; also grau fast weiss */
+ color: #CFCFCF;
+ text-decoration: line-through;
+}
+#cms td.ItemTesttool /*fuer die Button-Optik beim Testtool*/ {
+ color: #000;
+ white-space: initial;
+ box-shadow: inset 0 0 2px #00639C;
+ width: 170px;
+ display: inline-block;
+}
+#cms td:hover.ItemTesttool {
+ color: #000;
+ white-space: initial;
+ box-shadow: inset 0px 0px 2px 2px #00639C;
+ width: 170px;
+ display: inline-block;
+}
+#cms td.ItemTesttoolAktiv /*fuer die Button-Optik beim Testtool*/ {
+ color: #000;
+ white-space: initial;
+ box-shadow: 0px 0px 2px 2px #00639C;
+}
+#cms td.ItemTesttoolBeendet /*fuer die Button-Optik beim Testtool*/ {
+ background-color: #FFFFFF;
+ white-space: initial;
+ box-shadow: inset 0px 0px 2px 2px #EAECED;
+}
+#cms td:hover.ItemTesttoolBeendet {
+ color: #EAECED;
+ background-color: #FFFFFF;
+ white-space: initial;
+ box-shadow: inset 0px 0px 2px 2px #EAECED;
+}
+#cms div.TesttoolTitle /* Ueberschrift auf den Titelfolien */ {
+ font-size: 400%;
+ font-family: Helvetica, Arial, sans-serif;
+ text-transform: uppercase;
+ color: #FFFFFF;
+ white-space: nowrap;
+ text-shadow: -1px 0 #00639C, 0 1px #00639C, 1px 0 #00639C, 0 -1px #00639C;
+ margin: 0 0 20px 0;
+}
+#cms td.tdwidth10 {
+ width: 5px;
+ /* width: 10px; */
+}
+#cms td.tdwidth30 {
+ width: 30px;
+}
+#cms td.tdgreen {
+ background-color: #CCFFCC;
+}
+#cms td.tdborder {
+ text-align: center;
+ border:2px solid black;
+ background-color: #ffffff;
+}
+#cms td.tdwrap {
+ white-space: nowrap;
+ color: #0086CC;
+}
+#cms td.tdvertical /* Für Ausrichtung der Icons bei der LV-Übersicht */ {
+ vertical-align: top;
+ padding: 10px 0 10px 0;
+ width: 33.33%;
+ /* height: 100px; */
+}
+#cms td.menubox /* Navigationsboxen in den CIS-Contentseiten */ {
+ width: 20%;
+ height: 10px;
+ background-color: #eeeeee;
+ padding: 20px 15px 20px 15px;
+ vertical-align: middle;
+}
+#cms td.menubox p {
+ line-height: 110%;
+}
+#cms td.cmscontent {
+ vertical-align: top;
+ padding-right: 25px;
+ padding-left: 0px;
+}
+#cms td.teambox {
+ vertical-align: top;
+ padding-top: 20px;
+}
+#cms TR.liste {
+ background-color: #D3DCE3; /*grau wie #DDDDDD*/
+}
+#cms TR.liste0 {
+ background-color: #FFFFFF; /*wei�*/
+}
+#cms TR.liste1 {
+ background-color: #EEEEEE; /*grau fast wei�*/
+}
+#cms TR.tryellow {
+ background-color: #FFFF99;
+}
+
+/* private/profile/zeitsperre.php */
+#cms TABLE#zeitsperren {
+ /*border: 1px solid black; foo*/
+ width:100%;
+}
+#cms TABLE#zeitsperren TH {
+ background-color: #DDDDDD; /*hellgrau*/
+}
+#cms TABLE#zeitsperren TH.feiertag {
+ background-color: #FFFF00; /*grelles gelb*/
+}
+#cms TABLE#zeitsperren TD.feiertag {
+ background-color: #FFFF22; /*bissi helleres gelb*/
+}
+#cms TABLE#zeitsperren TD {
+ background-color: #EEEEEE; /*grau fast wei�*/
+}
+
+/*
+==== Stundenplan ====
+*/
+
+#cms TABLE.stdplan {
+ margin: 0px;
+ padding: 0px;
+ /* border: 1px solid; */
+ width: 100%;
+ background-color: white;
+ vertical-align: top;
+ border-spacing:1;
+}
+#cms TABLE.stdplan TH {
+ background-color: #A5AFB6;
+}
+#cms TABLE.stdplan TD {
+ background-color: #E9ECEE;
+}
+
+/*reservation delete-"x"*/
+#cms TABLE.stdplan div.reservdelete {
+ text-align: right;
+ margin-bottom:-4px;
+ padding-top: 2px;
+ padding-right: 2px;
+}
+
+#cms .row-even { /*liste1*/
+ background-color:#f2f2f2;
+}
+
+#cms .row-odd { /*liste0*/
+ background-color:#ffffff;
+}
+
+/*lecturer reservation rows*/
+#cms td.lecturercell {
+ border: 1px solid;
+}
+
+#cms td.lecturercell div.lecturercellname {
+ width: 95%;
+ float: left;
+}
+
+#cms td.lecturercell div.lecturercelldelete {
+ width: 5%;
+ float: left;
+ text-align: right;
+ cursor: pointer;
+}
+
+/*
+==== Fonts ====
+*/
+
+#cms h1 {
+ color: black;
+ padding: 0px;
+ padding-bottom: 20px;
+ /* padding-left: 10px; */
+ /* width:20%; */
+ margin:0px;
+ white-space:nowrap;
+ font-size: 20px;
+ /* letter-spacing: 2px;
+ border-bottom:solid 1px #0086CC;*/
+ font-weight:normal;
+}
+#cms h1 td {
+ color: #ffffff;
+ background-color: #009e84;
+}
+#cms h2 {
+ margin: 0px;
+ padding-top: 0px;
+ padding-bottom: 15px;
+ /* padding-left: 10px; */
+ font-weight: bold;
+ font-size: 15px;
+}
+#cms h3 {
+ margin: 0px;
+ padding-top: 0px; /* 20px */
+ padding-bottom: 2px;
+ font-weight: bold;
+ font-size:13px;
+}
+#cms h4 {
+ margin: 0px;
+ padding: 0px;
+ text-decoration: underline;
+ font-weight: normal;
+ font-size:13px;
+}
+#cms .error {
+ color: #ff0000;
+}
+#cms #news .news {
+ width: 99%;
+ background-color: #A5AFB6; /* grauvariante A5AFB6 */
+}
+#cms #news .news .titel table {
+ padding: 3px 10px 3px 10px;
+ color: #ffffff;
+ font-weight: 500;
+ border-collapse: initial;
+}
+#cms #news .news .text {
+ background-color: #E9ECEE; /* grauvariante E9ECEE */
+ padding: 10px;
+}
+
+/* Margin von ersten und letzten P tag entfernen, da sonst
+ breite Raender entstehen koenne*/
+#cms #news .news .text p:first-child {
+ margin-top:0px;
+
+}
+#cms #news .news .text p:last-child {
+ margin-bottom:0px;
+}
+
+/*
+==== Images ====
+*/
+#cms img.testtoolfrage {
+ max-width:400px;
+ max-height:300px;
+}
+#cms img.testtoolvorschlag {
+ max-width:200px;
+ max-height:150px;
+}
+#cms img {
+ border: 0;
+}
+#cms img.lvplanbutton {
+ border:0;
+ vertical-align: bottom;
+}
+#cms img#layout {
+ border: 1px solid #AAAAAA;
+}
+#cms img.lv {
+ width: 40px;
+ height: 40px;
+ padding-bottom: 5px;
+}
+#cms /*img.header_left {
+ position: absolute;
+ left: 0px;
+ z-index: 1;
+ max-width: 100%;
+ height: 16%;
+}
+#cms img.header_right {
+ position: absolute;
+ right: 0px;
+ z-index: 2;
+ max-width: 100%;
+ height: 16%;
+}*/
+#cms img.header_logo {
+ position: absolute;
+ left: 16px;
+ top: 3%;
+ z-index: 5000;
+ height: 8%;
+}
+#cms img.screenshot_boxshadow {
+ border: 1px solid grey;
+ box-shadow: 0px 0px 5px 5px #888888;
+ margin-left: 10px;
+}
+#cms a:hover img.screenshot_boxshadow {
+ border: 1px solid grey;
+ box-shadow: 0px 0px 5px 5px #0086CC;
+ margin-left: 10px;
+}
+/*
+==== Farben ====
+*/
+
+#cms .grey {
+ color: #999999;
+}
+#cms #bgcolor0 {
+ background-color: #CC0000;
+}
+#cms #bgcolor1 {
+ background-color: #FF2200;
+}
+#cms #bgcolor2 {
+ background-color: #FF9922;
+}
+#cms #bgcolor3 {
+ background-color: #FFFF55;
+}
+#cms #bgcolor4 {
+ background-color: #88FF88;
+}
+#cms #bgcolor5 {
+ background-color: #AAFFAA;
+}
+#cms #bgcolor6 {
+ background-color: #CCFFCC;
+}
+#cms .studentnote {
+ font-weight:bold;
+}
+#cms .benotungstool_tabs {
+ border-top: 1px solid gray;
+ border-left: 1px solid gray;
+ border-right: 1px solid gray;
+ text-align: center;
+}
+#cms .benotungstool_tabs_active {
+ border-top: 2px solid gray;
+ border-left: 2px solid gray;
+ border-right: 2px solid gray;
+ background-color: #eeeeee;
+ text-align: center;
+}
+#cms .benotungstool_subtab {
+ border-top: 1px solid gray;
+ border-bottom: 1px solid gray;
+}
+#cms .ok {
+ color: green;
+}
+#cms .ausblenden {display:none;}
+#cms .einblenden {display:block;}
+
+/* Inaktive Elemente in einem DropDown */
+#cms option.inactive {
+ text-decoration:line-through;
+}
+
+/* Difference Engine */
+#cms .diffchange-inline {
+ background-color: yellow;
+}
+#cms .diff-deletedline {
+ background-color: lightgray;
+}
+#cms .diff-marker {
+ background-color: none;
+}
+#cms .diff-addedline {
+ background-color: lightgreen;
+}
+
+#cms .suchmarker {
+ font-weight: bold;
+ text-decoration: underline;
+ font-size: medium;
+}
+#cms .suchergebnis:hover {
+ background-color: #EEEEEE;
+}
+#cms .suchergebnis a {
+ font-weight: bold;
+}
+#cms .suchergebnis {
+ padding-bottom: 15px;
+}
+#cms .suchicon {
+ margin:0px;
+ height: 14px;
+}
+#cms .suchicon:hover {
+ cursor:pointer;
+ cursor:hand;
+}
+
+/*
+==== Kalender-Jump-Effekt im LV-Plan ====
+*/
+#cms div.hoverbox div.preview div.hoverbox_inhalt {
+ display:none;
+ vertical-align: top;
+}
+#cms div.preview {
+ position: relative;
+ vertical-align: top;
+}
+#cms div.hoverbox div.preview:hover div.hoverbox_inhalt {
+ display: block;
+ position: absolute;
+ top: 15px;
+ left: -190px;
+ z-index: 2;
+ border:1px;
+ border-color:grey;
+ background-color:white;
+}
+#cms table.hoverbox {
+ border:1px;
+ border-style:solid;
+ border-color:grey;
+ padding: 5px;
+}
+
+/*
+==== Gestaltung des Hauptmenues ====
+*/
+
+#cms ul.menu {
+ padding:0;
+ margin:0;
+ font-family:Arial, Helvetica, sans-serif;
+ color:#0086CC;
+ font-size:13px;
+ line-height:15px;
+ width:200px;
+ list-style-type:none;
+}
+#cms #menu {
+ padding:0;
+ margin:0;
+ font-family:Arial, Helvetica, sans-serif;
+ color:#0086CC;
+ font-size:13px;
+ line-height:18px;
+ width:200px;
+ list-style-type:none;
+}
+#cms #menu a {
+ display:block;
+ padding:0 0 0 5px;
+ outline:none;
+ text-decoration:none;
+}
+#cms #menu li {
+ margin:0 0 0 10px;
+ padding: 5px 0 0 0;
+ display:block;
+ border:1px solid #FFFFFF;
+}
+#cms #menu a.selected {
+ padding:0 0 0 5px;
+}
+#cms #menu a:hover {
+ text-decoration: underline;
+}
+#cms #menu a.leaf {
+ color: #616B71;
+ padding-left: 5px;
+}
+
+
+/* LV Angebot im Studienplan */
+#cms .angebot {
+ border: 1px solid #edd400;
+}
+
+/* Empfehlung im Studienplan */
+#cms .empfehlung {
+ border: 1px solid green;
+}
+
+/*
+==== Menubox-Effekt am Seitenrand. Nettes Feature aber dzt. nicht sinnvoll einsetzbar ====
+*/
+
+#cms.bewerbung table,
+#cms.anwesenheit table {
+ border-collapse: collapse;
+ width: 100%;
+}
+
+#cms.bewerbung table.reihungstest,
+#cms.anwesenheit table {
+ table-layout: fixed;
+}
+
+#cms.bewerbung table th,
+#cms.bewerbung table td,
+#cms.anwesenheit table th,
+#cms.anwesenheit table td {
+ padding: 3px;
+ border: 1px solid black;
+ text-align: center;
+}
+
+#cms.bewerbung table.reihungstest td:nth-child(5) {
+ text-align: left;
+}
+
+#cms.bewerbung .ui-tabs-vertical .ui-tabs-panel {
+ width: 75em;
+}
+
+#cms.bewerbung table.reihungstest th:nth-child(1),
+#cms.bewerbung table.reihungstest th:nth-child(2),
+#cms.bewerbung table.reihungstest th:nth-child(3),
+#cms.bewerbung table.reihungstest th:nth-child(4),
+#cms.bewerbung table.reihungstest th:nth-child(6) {
+ width: 10%;
+}
+
+#cms.bewerbung table.reihungstest th:nth-child(5) {
+ width: 50%;
+}
+
+#cms.anwesenheit {
+ padding-bottom: 20px;
+}
+
+#cms.anwesenheit div.lv {
+ margin: 10px;
+ padding-top: 10px;
+ padding-left: 10px;
+ background-color: #f2f8ff;
+ border: 1px solid #2353b2;
+}
+
+#cms.anwesenheit div.lv + div.lv {
+/* border-top: 1px dashed rgb(193,193,193);*/
+}
+
+#cms.anwesenheit div.lv > div {
+ width: 300px;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+#cms.anwesenheit div.progress-wrapper {
+ border: 1px solid black;
+}
+
+#cms.anwesenheit div.progress {
+ height: 20px;
+}
+
+#cms.anwesenheit div.progress.green {
+ background-color: #008000;
+}
+
+#cms.anwesenheit div.progress.yellow {
+ background-color: #ffa500;
+}
+
+#cms.anwesenheit div.progress.red {
+ background-color: #dc143c;
+}
+
+#cms.anwesenheit span.fehlstunden-details {
+ cursor: pointer;
+ font-weight: bold;
+}
+
+#cms.anwesenheit table {
+ margin: 5px;
+}
+
+#cms.anwesenheit form {
+ margin: 10px;
+}
+
+#cms div.header_logo {
+ position: absolute;
+ left: 16px;
+ top: 3%;
+ z-index: 5000;
+
+ background-image:url(styles/tw/logo_250x130.png);
+ background-repeat: no-repeat;
+ width:170px;
+ height:51px;
+ background-size: contain;
+}
+
+#cms td.headerbar {
+ background-image: url(styles/tw/header.png);
+ background-position: top;
+ background-repeat: repeat-x;"
+}
+
+#cms div.cis_logo {
+ background-image:url(styles/tw/cis_logo_text_400x78.png);
+ background-repeat: no-repeat;
+ width: 400px;
+ height: 78px;
+}
diff --git a/public/js/apps/Cis.js b/public/js/apps/Cis.js
new file mode 100644
index 000000000..09896e521
--- /dev/null
+++ b/public/js/apps/Cis.js
@@ -0,0 +1,7 @@
+import FhcSearchbar from "../components/searchbar/searchbar.js";
+
+Vue.createApp({
+ components: {
+ FhcSearchbar
+ }
+}).mount('#cis-navigation-top');
\ No newline at end of file
diff --git a/public/js/apps/Dashboard/Admin.js b/public/js/apps/Dashboard/Admin.js
new file mode 100644
index 000000000..05734fb28
--- /dev/null
+++ b/public/js/apps/Dashboard/Admin.js
@@ -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');
diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js
new file mode 100644
index 000000000..661d6ebb2
--- /dev/null
+++ b/public/js/apps/Dashboard/Fhc.js
@@ -0,0 +1,10 @@
+import FhcDashboard from '../../components/Dashboard/Dashboard.js';
+
+Vue.createApp({
+ data: () => ({
+ appSideMenuEntries: {}
+ }),
+ components: {
+ FhcDashboard
+ }
+}).mount('#content');
diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php
index 28366d073..8e4c19d40 100644
--- a/system/dbupdate_3.4.php
+++ b/system/dbupdate_3.4.php
@@ -350,6 +350,8 @@ $tabellen=array(
"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);
//print_r($tabs);
$i=0;
diff --git a/system/dbupdate_3.4/25999_cis4_cms.php b/system/dbupdate_3.4/25999_cis4_cms.php
new file mode 100644
index 000000000..5ff40d1d0
--- /dev/null
+++ b/system/dbupdate_3.4/25999_cis4_cms.php
@@ -0,0 +1,17 @@
+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 'campus.tbl_template: '.$db->db_last_error().'
';
+ else
+ echo '
campus.tbl_template: Spalte xslt_xhtml_c4 hinzugefuegt';
+
+ // TODO(chris): add default values
+}
+
+$tabellen['campus.tbl_template'][] = 'xslt_xhtml_c4';