dbTable = 'campus.tbl_content'; $this->pk = 'content_id'; } /** * Laedt den Content in der angegebenen Sprache * Sollte der Content in dieser Sprache nicht vorhanden sein, wird der Content in der Default Sprache geladen * * @param integer $content_id * @param string $sprache optional * @param integer $version optional * @param boolean | null $sichtbar optional * * @return stdClass */ public function getContent($content_id, $sprache = DEFAULT_LANGUAGE, $version = null, $sichtbar = null, $load_default_language = false) { $this->load->model('content/Contentsprache_model', 'ContentspracheModel'); $spracheExists = $this->ContentspracheModel->exists($content_id, $sprache, $version, $sichtbar); if (isError($spracheExists)) return $spracheExists; if(!getData($spracheExists)) { if($load_default_language) $sprache = DEFAULT_LANGUAGE; else return error('Der Content existiert in dieser Sprache nicht '); } $condition = ['content_id' => $content_id, 'sprache' => $sprache]; if ($sichtbar === true || $sichtbar === false) $condition['sichtbar'] = $sichtbar; if ($version) $condition['version'] = $version; $this->addSelect([ '*', 'tbl_contentsprache.insertamum', 'tbl_contentsprache.insertvon', 'tbl_contentsprache.updateamum', 'tbl_contentsprache.updatevon' ]); $this->addJoin('campus.tbl_contentsprache', 'content_id'); $this->addOrder('version', 'DESC'); $this->addLimit(1); $result = $this->loadWhere($condition); if (isError($result)) return $result; if (!getData($result)) return error('Dieser Eintrag wurde nicht gefunden'); return success(current(getData($result))); } /** * Sucht die content_id fuer den CIS4_Root Menu content * * @return integer|null content_id of the Cis4_Root Menu */ public function getMenuContentID(){ // early return if the CIS4_MENU_ENTRY constant is defined if(defined('CIS4_MENU_ENTRY')) { return CIS4_MENU_ENTRY; } // load the CIS4 Menu content_id from the database using the column 'beschreibugn' of the campus.tbl_content table $CIS4_ROOT_CONTENT = $this->loadWhere(["beschreibung"=>"CIS4_ROOT"]); if(isError($CIS4_ROOT_CONTENT)) { return null; } $CIS4_ROOT_CONTENT = getData($CIS4_ROOT_CONTENT); if(count($CIS4_ROOT_CONTENT) > 0) { return current($CIS4_ROOT_CONTENT)->content_id ?? null; } else { return null; } } /** * Laedt alle Content Eintraege unterhalb eines Contents * (Ohne Newseintraege) * * @param integer $root_content_id * @param string $uid * @param string $sprache optional * * @return stdClass on success an array with menu objects */ public function getMenu($root_content_id, $uid, $sprache = DEFAULT_LANGUAGE) { /*, { "content_id": 1000007, "template_kurzbz": "redirect", "titel": "Anrechnung", "content": "", "menu_open": false, "aktiv": true, "childs": [] } */ /* { "content_id": 1000003, "template_kurzbz": "redirect", "titel": "COVID-19", "content": "", "menu_open": false, "aktiv": true, "childs": [] }, */ if ($root_content_id === null) { $res = json_decode('{ "content_id": 1000000, "template_kurzbz": "contentmittitel", "titel": "CIS4", "content": "", "menu_open": true, "aktiv": true, "childs": [ { "content_id": 1000001, "template_kurzbz": "redirect", "titel": "News", "content": "", "menu_open": false, "aktiv": true, "childs": [] }, { "content_id": 1000002, "template_kurzbz": "redirect", "titel": "Profil", "content": "", "menu_open": false, "aktiv": true, "childs": [] }, { "content_id": 1000004, "template_kurzbz": "redirect", "titel": "Meine LV", "content": "", "menu_open": false, "aktiv": true, "childs": [] }, { "content_id": 1000005, "template_kurzbz": "redirect", "titel": "Stundenplan", "content": "", "menu_open": false, "aktiv": true, "childs": [] }, { "content_id": 1000006, "template_kurzbz": "redirect", "titel": "Dokumente", "content": "", "menu_open": false, "aktiv": true, "childs": [] }, { "content_id": 1000007, "template_kurzbz": "redirect", "titel": "Studierendenstatus", "content": "", "menu_open": false, "aktiv": true, "childs": [] } ] }'); return success($res); } $sql = " SELECT c.content_id, c.template_kurzbz, s.titel, s.content, c.menu_open, c.aktiv, k.child_content_id, k.sort FROM ( SELECT c.content_id, s.contentsprache_id FROM campus.tbl_content c JOIN ( SELECT s5.content_id, s5.contentsprache_id FROM ( SELECT content_id, sprache, MAX(version) AS version FROM ( SELECT c1.content_id, COALESCE(s1.sprache, ?) AS sprache FROM campus.tbl_content c1 LEFT JOIN campus.tbl_contentsprache s1 ON c1.content_id=s1.content_id AND s1.sprache=? WHERE sichtbar=true ) s2 LEFT JOIN campus.tbl_contentsprache s3 USING(content_id, sprache) WHERE sichtbar=true GROUP BY content_id, sprache ) s4 LEFT JOIN campus.tbl_contentsprache s5 USING(content_id, sprache, version) WHERE version IS NOT NULL ) t USING (content_id) JOIN campus.tbl_contentsprache s USING (contentsprache_id) WHERE c.template_kurzbz<>'news' AND c.content_id IN ( WITH RECURSIVE childs(content_id, child_content_id) as ( SELECT content_id, child_content_id FROM campus.tbl_contentchild WHERE content_id=? UNION ALL SELECT cc.child_content_id, null FROM campus.tbl_contentchild cc, childs WHERE cc.content_id=childs.content_id ) SELECT content_id FROM childs GROUP BY content_id ) GROUP BY c.content_id, s.contentsprache_id ) m JOIN campus.tbl_content c USING(content_id) JOIN campus.tbl_contentsprache s USING(contentsprache_id) LEFT JOIN campus.tbl_contentchild k ON(m.content_id=k.content_id) 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"; $result = $this->execQuery($sql, [DEFAULT_LANGUAGE, $sprache, $root_content_id, $uid]); if (isError($result)) return $result; $contents = getData($result) ?? []; $result = []; foreach ($contents as $content) { if (!isset($result[$content->content_id])) { $result[$content->content_id] = clone($content); unset($result[$content->content_id]->child_content_id); unset($result[$content->content_id]->sort); $result[$content->content_id]->childs = []; } if ($content->child_content_id !== null) $result[$content->content_id]->childs[] = $content->child_content_id; } foreach ($result as $content) { foreach ($content->childs as $k => $v) { if (isset($result[$v])) { $content->childs[$k] = $result[$v]; } else { unset($content->childs[$k]); } } } return success(isset($result[$root_content_id]) ? $result[$root_content_id] : null); } }