diff --git a/application/config/routes.php b/application/config/routes.php
index 0dc1ecc73..63f9ab61e 100644
--- a/application/config/routes.php
+++ b/application/config/routes.php
@@ -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';
diff --git a/application/controllers/CisHmvc.php b/application/controllers/CisHmvc.php
new file mode 100644
index 000000000..4d981d1e6
--- /dev/null
+++ b/application/controllers/CisHmvc.php
@@ -0,0 +1,286 @@
+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);
+ }
+
+}
diff --git a/application/controllers/CisHmvc/Cms.php b/application/controllers/CisHmvc/Cms.php
new file mode 100644
index 000000000..267543908
--- /dev/null
+++ b/application/controllers/CisHmvc/Cms.php
@@ -0,0 +1,100 @@
+ '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 .= '
' . htmlentities($content->content) . '
';
+ }
+ $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)]);
+ }
+}
diff --git a/application/controllers/CisHtml/Cms.php b/application/controllers/CisHtml/Cms.php
new file mode 100644
index 000000000..9ec22bea0
--- /dev/null
+++ b/application/controllers/CisHtml/Cms.php
@@ -0,0 +1,70 @@
+ '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)]);
+ }
+}
diff --git a/application/controllers/CisHtml/Dashboard.php b/application/controllers/CisHtml/Dashboard.php
new file mode 100644
index 000000000..aa2d45a7d
--- /dev/null
+++ b/application/controllers/CisHtml/Dashboard.php
@@ -0,0 +1,35 @@
+ 'user:r'
+ )
+ );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * @return void
+ */
+ public function index()
+ {
+ $this->load->view('CisHtml/Dashboard.php');
+ }
+
+
+
+}
diff --git a/application/controllers/CisVue/Cms.php b/application/controllers/CisVue/Cms.php
new file mode 100644
index 000000000..9ec22bea0
--- /dev/null
+++ b/application/controllers/CisVue/Cms.php
@@ -0,0 +1,70 @@
+ '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)]);
+ }
+}
diff --git a/application/controllers/cis/Dashboard.php b/application/controllers/CisVue/Dashboard.php
similarity index 91%
rename from application/controllers/cis/Dashboard.php
rename to application/controllers/CisVue/Dashboard.php
index d81536bec..0b964fe21 100644
--- a/application/controllers/cis/Dashboard.php
+++ b/application/controllers/CisVue/Dashboard.php
@@ -27,7 +27,7 @@ class Dashboard extends Auth_Controller
*/
public function index()
{
- $this->load->view('cis/Dashboard.php');
+ $this->load->view('CisVue/Dashboard.php');
}
diff --git a/application/controllers/cis/Cms.php b/application/controllers/cis/Cms.php
deleted file mode 100644
index 4698bc462..000000000
--- a/application/controllers/cis/Cms.php
+++ /dev/null
@@ -1,120 +0,0 @@
- '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/components/CisVue.php b/application/controllers/components/CisVue.php
new file mode 100644
index 000000000..b1a33ff69
--- /dev/null
+++ b/application/controllers/components/CisVue.php
@@ -0,0 +1,43 @@
+ '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);
+ }
+
+}
diff --git a/application/libraries/CisHmvc/Loader.php b/application/libraries/CisHmvc/Loader.php
new file mode 100644
index 000000000..9bb93a7b2
--- /dev/null
+++ b/application/libraries/CisHmvc/Loader.php
@@ -0,0 +1,420 @@
+ 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;
+ }
+
+}
diff --git a/application/libraries/CmsLib.php b/application/libraries/CmsLib.php
new file mode 100644
index 000000000..896b15a1b
--- /dev/null
+++ b/application/libraries/CmsLib.php
@@ -0,0 +1,275 @@
+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 = '';
+
+ $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 = 'format('d.m.Y') . ']]>';
+ $datum .= 'format('Y-m-d H:i') . ']]>';
+ $id = $edit ? 'news_id . ']]>' : '';
+ $xml .= "" . $newsobj->content . $datum . $id . "";
+ }
+
+ 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 .= 'bezeichnung . ']]>';
+ }
+ }
+
+ if ($titel != '')
+ {
+ $xml .= '' . $titel . '';
+ }
+
+ $xml .= '';
+
+ //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);
+ }
+}
diff --git a/application/models/content/Content_model.php b/application/models/content/Content_model.php
index f36425169..c0d3c52f5 100644
--- a/application/models/content/Content_model.php
+++ b/application/models/content/Content_model.php
@@ -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);
}
}
diff --git a/application/models/content/News_model.php b/application/models/content/News_model.php
index 472eb2e56..904b512f1 100644
--- a/application/models/content/News_model.php
+++ b/application/models/content/News_model.php
@@ -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);
+ }
+
}
diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php
index e848cb4c2..4fb520430 100644
--- a/application/models/organisation/Studiengang_model.php
+++ b/application/models/organisation/Studiengang_model.php
@@ -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
diff --git a/application/models/person/Benutzerfunktion_model.php b/application/models/person/Benutzerfunktion_model.php
index 27f9b6184..887021f20 100644
--- a/application/models/person/Benutzerfunktion_model.php
+++ b/application/models/person/Benutzerfunktion_model.php
@@ -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
diff --git a/application/views/Cis/Cms/News/Xml/Address/Detailed.php b/application/views/Cis/Cms/News/Xml/Address/Detailed.php
new file mode 100644
index 000000000..934b5ba93
--- /dev/null
+++ b/application/views/Cis/Cms/News/Xml/Address/Detailed.php
@@ -0,0 +1,11 @@
+aktiv) { ?>
+ uid; ?>]]>
+ titelpre . ' ' . $obj->vorname . ' ' . $obj->nachname . ' ' . $obj->titelpost; ?>]]>
+ alias ?: $obj->uid; ?>@= DOMAIN; ?>]]>
+ telefonklappe !== null) { ?>
+ kontakt ?: ''; ?> - = $obj->telefonklappe; ?>]]>
+
+ planbezeichnung) { ?>
+ planbezeichnung; ?>]]>
+
+
\ No newline at end of file
diff --git a/application/views/Cis/Cms/News/Xml/Address/Short.php b/application/views/Cis/Cms/News/Xml/Address/Short.php
new file mode 100644
index 000000000..61888fb7e
--- /dev/null
+++ b/application/views/Cis/Cms/News/Xml/Address/Short.php
@@ -0,0 +1,6 @@
+aktiv) { ?>
+ uid; ?>]]>
+ uid; ?>@= DOMAIN; ?>]]>
+
+ titelpre . ' ' . $obj->vorname . ' ' . $obj->nachname . ' ' . $obj->titelpost; ?>bezeichnung != '' && $obj->bezeichnung != $obj->beschreibung) echo ' (' . $obj->bezeichnung . ')'; ?>]]>
+
diff --git a/application/views/Cis/Cms/News/Xml/NewsExtras.php b/application/views/Cis/Cms/News/Xml/NewsExtras.php
new file mode 100644
index 000000000..b3b86e567
--- /dev/null
+++ b/application/views/Cis/Cms/News/Xml/NewsExtras.php
@@ -0,0 +1,46 @@
+
+ = $studiengang->studiengang_kz; ?>
+ p->t('global', 'studiengangsleitung'); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?>
+
+ p->t('global', 'geschaeftsfuehrendeltg'); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?>
+
+ p->t('global', 'stellvertreter'); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?>
+
+ p->t('global', 'sekretariat'); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Detailed', ['obj' => $item]); ?>
+
+
+ zusatzinfo_html; ?>]]>
+
+ p->t('global', 'hochschulvertretung'); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?>
+
+
+ p->t('global', 'studentenvertreter'); ?> = strtoupper($studiengang->oe_kurzbz); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?>
+
+
+ p->t('global', 'jahrgangsvertretung'); ?>= $semester; ?> = $this->p->t('global', 'semester'); ?>]]>';
+
+ view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?>
+
+
+
+
+ p->t('global', 'allgemeinerdownload'); ?>]]>
+ typ . $studiengang->kurzbz); ?>]]>
+ kurzbzlang); ?>]]>
+ studiengang_kz; ?>]]>
+ ';
+
+
+
diff --git a/application/views/CisHmvc/Cms/Content.php b/application/views/CisHmvc/Cms/Content.php
new file mode 100644
index 000000000..e96060e51
--- /dev/null
+++ b/application/views/CisHmvc/Cms/Content.php
@@ -0,0 +1,18 @@
+ 'FH-Complete',
+ 'customCSSs' => [
+ 'public/css/Cis4/Cms.css',
+ #'skin/style.css.php'
+ ]
+);
+
+$this->load->view('templates/FHC-Header', $includesArray);
+?>
+
+
+ = $content; ?>
+
+
+load->view('templates/FHC-Footer', $includesArray); ?>
+
diff --git a/application/views/CisHmvc/Cms/Legacy.php b/application/views/CisHmvc/Cms/Legacy.php
new file mode 100644
index 000000000..3013cded8
--- /dev/null
+++ b/application/views/CisHmvc/Cms/Legacy.php
@@ -0,0 +1,23 @@
+ 'FH-Complete',
+ 'customCSSs' => [
+ 'public/css/Cis4/Legacy.css'
+ ]
+);
+
+$this->load->view('templates/FHC-Header', $includesArray);
+?>
+
+
+
+
+
+load->view('templates/FHC-Footer', $includesArray); ?>
+
diff --git a/application/views/cis/Error.php b/application/views/CisHmvc/Error.php
similarity index 100%
rename from application/views/cis/Error.php
rename to application/views/CisHmvc/Error.php
diff --git a/application/views/CisHtml/Cms/Content.php b/application/views/CisHtml/Cms/Content.php
new file mode 100644
index 000000000..8742720b7
--- /dev/null
+++ b/application/views/CisHtml/Cms/Content.php
@@ -0,0 +1,17 @@
+ [
+ 'public/css/Cis4/Cms.css',
+ #'skin/style.css.php'
+ ]
+);
+
+$this->load->view('templates/CISHTML-Header', $includesArray);
+?>
+
+
+ = $content; ?>
+
+
+load->view('templates/CISHTML-Footer', $includesArray); ?>
+
diff --git a/application/views/CisHtml/Dashboard.php b/application/views/CisHtml/Dashboard.php
new file mode 100644
index 000000000..adb038a35
--- /dev/null
+++ b/application/views/CisHtml/Dashboard.php
@@ -0,0 +1,19 @@
+ ['public/js/apps/Dashboard/Fhc.js'],
+ 'customCSSs' => [
+ 'public/css/components/dashboard.css'
+ ],
+);
+
+$this->load->view('templates/CISHTML-Header', $includesArray);
+?>
+
+
+
Dashboard
+
+
+
+
+load->view('templates/CISHTML-Footer', $includesArray); ?>
+
diff --git a/application/views/CisHtml/Error.php b/application/views/CisHtml/Error.php
new file mode 100644
index 000000000..7b6a6beb2
--- /dev/null
+++ b/application/views/CisHtml/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/CisVue/Cms/Content.php
similarity index 53%
rename from application/views/cis/cms/Content.php
rename to application/views/CisVue/Cms/Content.php
index b8f0aa45a..fafe1a593 100644
--- a/application/views/cis/cms/Content.php
+++ b/application/views/CisVue/Cms/Content.php
@@ -6,12 +6,12 @@ $includesArray = array(
]
);
-$this->load->view('templates/CIS-Header', $includesArray);
+$this->load->view('templates/CISVUE-Header', $includesArray);
?>
= $content; ?>
-load->view('templates/CIS-Footer', $includesArray); ?>
+load->view('templates/CISVUE-Footer', $includesArray); ?>
diff --git a/application/views/cis/Dashboard.php b/application/views/CisVue/Dashboard.php
similarity index 58%
rename from application/views/cis/Dashboard.php
rename to application/views/CisVue/Dashboard.php
index 48e9f1dc9..06c2620cc 100644
--- a/application/views/cis/Dashboard.php
+++ b/application/views/CisVue/Dashboard.php
@@ -6,12 +6,14 @@ $includesArray = array(
],
);
-$this->load->view('templates/CIS-Header', $includesArray);
+$this->load->view('templates/CISVUE-Header', $includesArray);
?>
+
Dashboard
+
-load->view('templates/CIS-Footer', $includesArray); ?>
+load->view('templates/CISVUE-Footer', $includesArray); ?>
diff --git a/application/views/templates/CIS-Header.php b/application/views/templates/CIS-Header.php
deleted file mode 100644
index 7b5c78c3f..000000000
--- a/application/views/templates/CIS-Header.php
+++ /dev/null
@@ -1,161 +0,0 @@
- $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/CISHMVC-Footer.php b/application/views/templates/CISHMVC-Footer.php
new file mode 100644
index 000000000..0f4bf453e
--- /dev/null
+++ b/application/views/templates/CISHMVC-Footer.php
@@ -0,0 +1 @@
+
diff --git a/application/views/templates/CISHMVC-Header.php b/application/views/templates/CISHMVC-Header.php
new file mode 100644
index 000000000..f9302d902
--- /dev/null
+++ b/application/views/templates/CISHMVC-Header.php
@@ -0,0 +1,37 @@
+
+
diff --git a/application/views/templates/CISHMVC-Menu/Entry.php b/application/views/templates/CISHMVC-Menu/Entry.php
new file mode 100644
index 000000000..9242ba595
--- /dev/null
+++ b/application/views/templates/CISHMVC-Menu/Entry.php
@@ -0,0 +1,37 @@
+content_id;
+
+// TODO(chris): remove! DEBUG
+#$entry->menu_open = false;
+
+$link = $entry->url;
+$target = $entry->target;
+
+?>
+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-Footer.php b/application/views/templates/CISHTML-Footer.php
similarity index 94%
rename from application/views/templates/CIS-Footer.php
rename to application/views/templates/CISHTML-Footer.php
index 24fcc8b98..e36b7ddcd 100644
--- a/application/views/templates/CIS-Footer.php
+++ b/application/views/templates/CISHTML-Footer.php
@@ -14,8 +14,6 @@ $includesArray = array(
);
?>
-
-
-
+
load->view('templates/FHC-Footer', $includesArray); ?>
\ No newline at end of file
diff --git a/application/views/templates/CISHTML-Header.php b/application/views/templates/CISHTML-Header.php
new file mode 100644
index 000000000..af175a95d
--- /dev/null
+++ b/application/views/templates/CISHTML-Header.php
@@ -0,0 +1,60 @@
+ $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' => []];
+}
+?>
+
+
+
diff --git a/application/views/templates/CIS-Menu/Entry.php b/application/views/templates/CISHTML-Menu/Entry.php
similarity index 60%
rename from application/views/templates/CIS-Menu/Entry.php
rename to application/views/templates/CISHTML-Menu/Entry.php
index 01e5ab67f..2f9c7e60f 100644
--- a/application/views/templates/CIS-Menu/Entry.php
+++ b/application/views/templates/CISHTML-Menu/Entry.php
@@ -1,4 +1,6 @@
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;
}
}
diff --git a/application/views/templates/CIS-Menu/EntryBase.php b/application/views/templates/CISHTML-Menu/EntryBase.php
similarity index 93%
rename from application/views/templates/CIS-Menu/EntryBase.php
rename to application/views/templates/CISHTML-Menu/EntryBase.php
index 610c1e580..16caa4c78 100644
--- a/application/views/templates/CIS-Menu/EntryBase.php
+++ b/application/views/templates/CISHTML-Menu/EntryBase.php
@@ -15,7 +15,7 @@
diff --git a/application/views/templates/CIS-Menu/EntryInclude.php b/application/views/templates/CISHTML-Menu/EntryInclude.php
similarity index 100%
rename from application/views/templates/CIS-Menu/EntryInclude.php
rename to application/views/templates/CISHTML-Menu/EntryInclude.php
diff --git a/application/views/templates/CISVUE-Footer.php b/application/views/templates/CISVUE-Footer.php
new file mode 100644
index 000000000..e36b7ddcd
--- /dev/null
+++ b/application/views/templates/CISVUE-Footer.php
@@ -0,0 +1,19 @@
+ $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/CISVUE-Header.php b/application/views/templates/CISVUE-Header.php
new file mode 100644
index 000000000..c3c093028
--- /dev/null
+++ b/application/views/templates/CISVUE-Header.php
@@ -0,0 +1,23 @@
+ $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);
+
+?>
+
+
+
diff --git a/cis.php b/cis.php
new file mode 100644
index 000000000..fbb182185
--- /dev/null
+++ b/cis.php
@@ -0,0 +1,316 @@
+='))
+ {
+ 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';
diff --git a/public/css/Cis4/Cis.css b/public/css/Cis4/Cis.css
index 0e6a93d5f..599403665 100644
--- a/public/css/Cis4/Cis.css
+++ b/public/css/Cis4/Cis.css
@@ -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);
-}
\ No newline at end of file
+#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 */
diff --git a/public/css/Cis4/Cms.css b/public/css/Cis4/Cms.css
index b35d04d6b..6091ee720 100644
--- a/public/css/Cis4/Cms.css
+++ b/public/css/Cis4/Cms.css
@@ -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;
diff --git a/public/css/Cis4/Legacy.css b/public/css/Cis4/Legacy.css
new file mode 100644
index 000000000..055abba45
--- /dev/null
+++ b/public/css/Cis4/Legacy.css
@@ -0,0 +1,4 @@
+iframe {
+ width: 100%;
+ min-height: 100%;
+}
\ No newline at end of file
diff --git a/public/js/apps/Cis.js b/public/js/apps/Cis.js
index 09896e521..7b11c2cfa 100644
--- a/public/js/apps/Cis.js
+++ b/public/js/apps/Cis.js
@@ -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');
\ No newline at end of file
+}).mount('#cis-header');
\ No newline at end of file
diff --git a/public/js/components/Cis/Menu.js b/public/js/components/Cis/Menu.js
new file mode 100644
index 000000000..7a75886c6
--- /dev/null
+++ b/public/js/components/Cis/Menu.js
@@ -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: `
+
+
+
+
+ `
+};
\ No newline at end of file
diff --git a/public/js/components/Cis/Menu/Entry.js b/public/js/components/Cis/Menu/Entry.js
new file mode 100644
index 000000000..0299e00a4
--- /dev/null
+++ b/public/js/components/Cis/Menu/Entry.js
@@ -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: `
+
+ INCLUDE
+
+
+
+
+ {{ entry.titel }}
+
+
+
+
+
+ {{ entry.titel }}
+
+ `
+};
\ No newline at end of file
diff --git a/public/js/components/Cis/Navigation/Left.js b/public/js/components/Cis/Navigation/Left.js
new file mode 100644
index 000000000..fa70b2307
--- /dev/null
+++ b/public/js/components/Cis/Navigation/Left.js
@@ -0,0 +1,88 @@
+export default {
+ template: `
+ `
+};
\ No newline at end of file
diff --git a/public/js/components/Cis/Navigation/Top.js b/public/js/components/Cis/Navigation/Top.js
new file mode 100644
index 000000000..9df1fefa1
--- /dev/null
+++ b/public/js/components/Cis/Navigation/Top.js
@@ -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: `
+
+
+
+
+
+
+
`
+};
diff --git a/public/js/components/Cis/Navigation/User.js b/public/js/components/Cis/Navigation/User.js
new file mode 100644
index 000000000..4cf78d422
--- /dev/null
+++ b/public/js/components/Cis/Navigation/User.js
@@ -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: `
+ `
+};
\ No newline at end of file
diff --git a/system/dbupdate_3.4/25999_cis4_cms.php b/system/dbupdate_3.4/25999_cis4_cms.php
index 5ff40d1d0..7f7fda4c8 100644
--- a/system/dbupdate_3.4/25999_cis4_cms.php
+++ b/system/dbupdate_3.4/25999_cis4_cms.php
@@ -12,6 +12,19 @@ if(!$result = @$db->db_query("SELECT xslt_xhtml_c4 FROM campus.tbl_template LIMI
echo '
campus.tbl_template: Spalte xslt_xhtml_c4 hinzugefuegt';
// TODO(chris): add default values
+ $qry = "";
+ $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4='" . '
' . "' WHERE template_kurzbz='contentmittitel';";
+ $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4='" . '' . "' WHERE template_kurzbz='contentohnetitel';";
+ $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4='" . 'Sie werden automatisch weitergeleitet. Sollte dies nicht der Fall sein, klicken sie bitte
hier ' . "' WHERE template_kurzbz='redirect';";
+ $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4='" . 'Diese Seite sollte nicht direkt aufgerufen werden!
' . "' WHERE template_kurzbz='include';";
+ $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4='" . 'News
Telefon:
Raum:
E-mail:
' . "' WHERE template_kurzbz='news';";
+
+ $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4=xslt_xhtml WHERE xslt_xhtml_c4 IS NULL";
+
+ if(!$db->db_query($qry))
+ echo 'campus.tbl_template: '.$db->db_last_error().'
';
+ else
+ echo '
campus.tbl_template: Spalte xslt_xhtml_c4 Defaultwerte eingefügt';
}
$tabellen['campus.tbl_template'][] = 'xslt_xhtml_c4';