From c56b774d1d6291d387c74acea5b4b1cd6b9eb36a Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 15 Dec 2022 09:42:28 +0100 Subject: [PATCH] 3 Versions --- application/config/routes.php | 3 +- application/controllers/CisHmvc.php | 286 ++++++++++++ application/controllers/CisHmvc/Cms.php | 100 +++++ application/controllers/CisHtml/Cms.php | 70 +++ application/controllers/CisHtml/Dashboard.php | 35 ++ application/controllers/CisVue/Cms.php | 70 +++ .../controllers/{cis => CisVue}/Dashboard.php | 2 +- application/controllers/cis/Cms.php | 120 ----- application/controllers/components/CisVue.php | 43 ++ application/libraries/CisHmvc/Loader.php | 420 ++++++++++++++++++ application/libraries/CmsLib.php | 275 ++++++++++++ application/models/content/Content_model.php | 45 +- application/models/content/News_model.php | 91 ++++ .../models/organisation/Studiengang_model.php | 49 +- .../models/person/Benutzerfunktion_model.php | 32 ++ .../Cis/Cms/News/Xml/Address/Detailed.php | 11 + .../views/Cis/Cms/News/Xml/Address/Short.php | 6 + .../views/Cis/Cms/News/Xml/NewsExtras.php | 46 ++ application/views/CisHmvc/Cms/Content.php | 18 + application/views/CisHmvc/Cms/Legacy.php | 23 + application/views/{cis => CisHmvc}/Error.php | 0 application/views/CisHtml/Cms/Content.php | 17 + application/views/CisHtml/Dashboard.php | 19 + application/views/CisHtml/Error.php | 18 + .../views/{cis/cms => CisVue/Cms}/Content.php | 4 +- .../views/{cis => CisVue}/Dashboard.php | 6 +- application/views/templates/CIS-Header.php | 161 ------- .../views/templates/CISHMVC-Footer.php | 1 + .../views/templates/CISHMVC-Header.php | 37 ++ .../views/templates/CISHMVC-Menu/Entry.php | 37 ++ .../{CIS-Footer.php => CISHTML-Footer.php} | 4 +- .../views/templates/CISHTML-Header.php | 60 +++ .../{CIS-Menu => CISHTML-Menu}/Entry.php | 10 +- .../{CIS-Menu => CISHTML-Menu}/EntryBase.php | 2 +- .../EntryInclude.php | 0 application/views/templates/CISVUE-Footer.php | 19 + application/views/templates/CISVUE-Header.php | 23 + cis.php | 316 +++++++++++++ public/css/Cis4/Cis.css | 391 +++++++++++----- public/css/Cis4/Cms.css | 37 +- public/css/Cis4/Legacy.css | 4 + public/js/apps/Cis.js | 71 ++- public/js/components/Cis/Menu.js | 57 +++ public/js/components/Cis/Menu/Entry.js | 114 +++++ public/js/components/Cis/Navigation/Left.js | 88 ++++ public/js/components/Cis/Navigation/Top.js | 63 +++ public/js/components/Cis/Navigation/User.js | 22 + system/dbupdate_3.4/25999_cis4_cms.php | 13 + 48 files changed, 2909 insertions(+), 430 deletions(-) create mode 100644 application/controllers/CisHmvc.php create mode 100644 application/controllers/CisHmvc/Cms.php create mode 100644 application/controllers/CisHtml/Cms.php create mode 100644 application/controllers/CisHtml/Dashboard.php create mode 100644 application/controllers/CisVue/Cms.php rename application/controllers/{cis => CisVue}/Dashboard.php (91%) delete mode 100644 application/controllers/cis/Cms.php create mode 100644 application/controllers/components/CisVue.php create mode 100644 application/libraries/CisHmvc/Loader.php create mode 100644 application/libraries/CmsLib.php create mode 100644 application/views/Cis/Cms/News/Xml/Address/Detailed.php create mode 100644 application/views/Cis/Cms/News/Xml/Address/Short.php create mode 100644 application/views/Cis/Cms/News/Xml/NewsExtras.php create mode 100644 application/views/CisHmvc/Cms/Content.php create mode 100644 application/views/CisHmvc/Cms/Legacy.php rename application/views/{cis => CisHmvc}/Error.php (100%) create mode 100644 application/views/CisHtml/Cms/Content.php create mode 100644 application/views/CisHtml/Dashboard.php create mode 100644 application/views/CisHtml/Error.php rename application/views/{cis/cms => CisVue/Cms}/Content.php (53%) rename application/views/{cis => CisVue}/Dashboard.php (58%) delete mode 100644 application/views/templates/CIS-Header.php create mode 100644 application/views/templates/CISHMVC-Footer.php create mode 100644 application/views/templates/CISHMVC-Header.php create mode 100644 application/views/templates/CISHMVC-Menu/Entry.php rename application/views/templates/{CIS-Footer.php => CISHTML-Footer.php} (94%) create mode 100644 application/views/templates/CISHTML-Header.php rename application/views/templates/{CIS-Menu => CISHTML-Menu}/Entry.php (60%) rename application/views/templates/{CIS-Menu => CISHTML-Menu}/EntryBase.php (93%) rename application/views/templates/{CIS-Menu => CISHTML-Menu}/EntryInclude.php (100%) create mode 100644 application/views/templates/CISVUE-Footer.php create mode 100644 application/views/templates/CISVUE-Header.php create mode 100644 cis.php create mode 100644 public/css/Cis4/Legacy.css create mode 100644 public/js/components/Cis/Menu.js create mode 100644 public/js/components/Cis/Menu/Entry.js create mode 100644 public/js/components/Cis/Navigation/Left.js create mode 100644 public/js/components/Cis/Navigation/Top.js create mode 100644 public/js/components/Cis/Navigation/User.js 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; ?>@]]> + telefonklappe !== null) { ?> + kontakt ?: ''; ?> - 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; ?>@]]> + + 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_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'); ?> oe_kurzbz); ?>]]>'; + + view('Cis/Cms/News/Xml/Address/Short', ['obj' => $item]); ?> + + + p->t('global', 'jahrgangsvertretung'); ?> 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); +?> + +
+ +
+ +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); +?> + +
+ +
+ +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); ?>
-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) { ?> + + + titel); ?> + + +
+ class="btn btn-default rounded-0 text-start btn-level-"> + titel); ?> + + + Toggle Dropdown + +
+ + + + class="btn btn-default rounded-0 w-100 text-start btn-level-"> + 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 +
+ ` +}; \ 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='" . '' . "' WHERE template_kurzbz='redirect';"; + $qry .= "UPDATE campus.tbl_template SET xslt_xhtml_c4='" . '' . "' 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';