diff --git a/application/controllers/api/frontend/v1/CisMenu.php b/application/controllers/api/frontend/v1/CisMenu.php
index 4f4f2573e..163c337ae 100644
--- a/application/controllers/api/frontend/v1/CisMenu.php
+++ b/application/controllers/api/frontend/v1/CisMenu.php
@@ -16,12 +16,13 @@
* along with this program. If not, see .
*/
-if (! defined('BASEPATH')) exit('No direct script access allowed');
+if (!defined('BASEPATH'))
+ exit('No direct script access allowed');
class CisMenu extends FHCAPI_Controller
{
-
+
/**
* Object initialization
*/
@@ -31,28 +32,95 @@ class CisMenu extends FHCAPI_Controller
'getMenu' => self::PERM_LOGGED,
]);
-
+
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
- /**
+ /**
* fetches the menu for CIS from the database based on the userLanguage
*/
- public function getMenu()
+ public function getMenu()
{
$this->load->model('content/Content_model', 'ContentModel');
$this->load->config('cis');
- $cis4_content_id =$this->config->item('cis_menu_root_content_id');
- $result = $this->ContentModel->getMenu($cis4_content_id, getAuthUID(),getUserLanguage());
+ $cis4_content_id = $this->config->item('cis_menu_root_content_id');
+ $result = $this->ContentModel->getMenu($cis4_content_id, getAuthUID(), getUserLanguage());
$result = $this->getDataOrTerminateWithError($result);
$menu = $result->childs ?? [];
- $this->terminateWithSuccess($menu);
- }
-
-
+ $menu = $this->generateUrlsForMenuItems($menu);
+ $this->terminateWithSuccess($menu);
+ }
+
+ private function generateUrlsForMenuItems($menuItems)
+ {
+ return array_map(
+ function ($menuItem) {
+ return $this->generateUrlForMenuItem($menuItem);
+ },
+ $menuItems
+ );
+ }
+
+ private function generateUrlForMenuItem($menuItem)
+ {
+ $menuItem->url = $this->menuItemUrlHelper($menuItem);
+ unset($menuItem->content);
+
+ if ($menuItem->childs && count($menuItem->childs)) {
+ $menuItem->childs = $this->generateUrlsForMenuItems($menuItem->childs);
+ }
+
+ return $menuItem;
+ }
+
+ private function menuItemUrlHelper($menuItem)
+ {
+ if ($menuItem->template_kurzbz !== 'redirect') {
+ return site_url("/CisVue/Cms/content/" . $menuItem->content_id);
+ }
+
+ if (!$menuItem->content || !mb_strlen($menuItem->content)) {
+ return '';
+ }
+
+ $doc = new DOMDocument();
+ $doc->loadXML($menuItem->content);
+ $urlElem = $doc->getElementsByTagName('url')->item(0);
+
+ if (!$urlElem) {
+ return '';
+ }
+
+ $url = $urlElem->textContent;
+
+ if (strpos($url, '../cms/news.php') !== false) {
+ $newsRegex = '/^\.\.\/cms\/news\.php/';
+ $url = preg_replace($newsRegex, site_url("/CisVue/Cms/news"), $url);
+ }
+
+ if (strpos($url, '../cms/content.php?') !== false) {
+ $contentRegex = '/^\.\.\/cms\/content\.php\?content_id=([0-9]+)/';
+ $matches = [];
+ preg_match($contentRegex, $url, $matches);
+ $url = site_url('/CisVue/Cms/content/' . $matches[1]);
+ }
+
+ if (strpos($url, '../index.ci.php') !== false) {
+ $indexRegex = '/^\.\.\/index\.ci\.php/';
+ $url = preg_replace($indexRegex, site_url(), $url);
+ }
+
+ if (strpos($url, '../') !== false) {
+ $relativeRegex = '/^\.\.\//';
+ $url = preg_replace($relativeRegex, base_url(), $url);
+ }
+
+ return $url;
+ }
+
}
diff --git a/public/js/components/Cis/Menu/Entry.js b/public/js/components/Cis/Menu/Entry.js
index cc4ad2df5..a48173d8d 100644
--- a/public/js/components/Cis/Menu/Entry.js
+++ b/public/js/components/Cis/Menu/Entry.js
@@ -68,41 +68,8 @@ export default {
return false;
}
},
- 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 + "";
- if (url.includes("../cms/news.php")) {
- let news_regex = new RegExp("^\.\./cms/news\.php");
- url = url.replace(news_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news');
- }
- else if (url.includes("../cms/content.php?")) {
- let content_regex = new RegExp("^\.\./cms/content.php\\?content_id=([0-9]+)");
- let content_regex_result = content_regex.exec(url);
- // content_regex_result[1] will be the first matched group
- return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content/' + content_regex_result[1];
- }
- else if(url.includes("../index.ci.php")){
- let index_regex = new RegExp("^\.\./index\.ci\.php");
- url = url.replace(index_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router);
- }
- else if (url.includes("../")) {
- let relative_regex = new RegExp("^\.\./");
- url = url.replace(relative_regex, 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;
- },
hasFullLink() {
- return this.link.startsWith(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router)
+ return this.entry.url.startsWith(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router)
},
target() {
if (this.entry.template_kurzbz == 'redirect') {
@@ -145,7 +112,7 @@ export default {
this.addUrlCount(count);
},
checkActiveUrl(url){
- this.getUrlMatchPoints(url,this.link);
+ this.getUrlMatchPoints(url,this.entry.url);
let url_hash_spaceSymbol_regex = new RegExp("%20","gi");
let url_hash_sharpSymbol_regex = new RegExp("^#");
@@ -155,7 +122,7 @@ export default {
// if the url hash contains the titel of the menu
// or if the url equals the link of a menu
// then set the menu active
- if (url_hash == this.entry.titel || url.href == this.link) {
+ if (url_hash == this.entry.titel || url.href == this.entry.url) {
this.setActiveEntry(this.entry.content_id);
}
},
@@ -204,7 +171,7 @@ export default {