diff --git a/application/controllers/CisHmvc/Cms.php b/application/controllers/CisHmvc/Cms.php index 7f2a03a0f..eed1a5fea 100755 --- a/application/controllers/CisHmvc/Cms.php +++ b/application/controllers/CisHmvc/Cms.php @@ -1,6 +1,7 @@ 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 + */ /** * @param boolean $infoscreen * @param string | null $studiengang_kz @@ -89,11 +101,48 @@ class Cms extends Auth_Controller */ 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); + $this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]); + } - if (isError($news)) - return $this->load->view('CisHmvc/Error', ['error' => getError($news)]); + public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true) + { + $get_page = intval($this->input->get('page', true)); + $get_page_size = intval($this->input->get('page_size', true)); + if ($get_page) { + $page = $get_page; + } + if ($get_page_size) { + $page_size = $get_page_size; + } else { + $page_size = $this->page_size; + } + $news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar, $page, $page_size); - $this->load->view('CisHmvc/Cms/Content', ['content' => getData($news)]); + if (isError($news)) { + $this->terminateWithJsonError(getError($news)); + } + $news = hasData($news) ? getData($news) : null; + if ($news) { + echo json_encode($news); + } else { + show_error("News: No data found"); + } + + } + + public function getNewsRowCount($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $fachbereich_kurzbz = null, $maxalter = 0, $edit = false, $sichtbar = true, $page = 1, $page_size = 10) + { + list($studiengang_kz, $semester) = $this->cmslib->getStgAndSem($studiengang_kz, $semester); + $all = $edit; + $num_rows = $this->NewsModel->countNewsWithContent(getSprache(), $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $this->page_size, $all, $mischen); + if (isError($num_rows)) { + $this->terminateWithJsonError(getError($num_rows)); + } + $num_rows = hasData($num_rows) ? getData($num_rows) : null; + if ($num_rows) { + echo json_encode($num_rows); + } else { + show_error("News number rows: No data found"); + } } } diff --git a/application/controllers/CisHtml/Cms.php b/application/controllers/CisHtml/Cms.php index 96057559f..f56b3eea3 100755 --- a/application/controllers/CisHtml/Cms.php +++ b/application/controllers/CisHtml/Cms.php @@ -1,6 +1,7 @@ loadPhrases([ 'global' ]); + + $this->load->model('content/News_model', 'NewsModel'); + + // setting up the papgination_size + $this->page_size = 10; } // ----------------------------------------------------------------------------------------------------------------- @@ -59,11 +66,48 @@ class Cms extends FHC_Controller */ 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); + $this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]); + } - if (isError($news)) - return $this->load->view('CisHtml/Error', ['error' => getError($news)]); + public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true) + { + $get_page = intval($this->input->get('page', true)); + $get_page_size = intval($this->input->get('page_size', true)); + if ($get_page) { + $page = $get_page; + } + if ($get_page_size) { + $page_size = $get_page_size; + } else { + $page_size = $this->page_size; + } + $news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar, $page, $page_size); - $this->load->view('CisHtml/Cms/Content', ['content' => getData($news)]); + if (isError($news)) { + $this->terminateWithJsonError(getError($news)); + } + $news = hasData($news) ? getData($news) : null; + if ($news) { + echo json_encode($news); + } else { + show_error("News: No data found"); + } + + } + + public function getNewsRowCount($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $fachbereich_kurzbz = null, $maxalter = 0, $edit = false, $sichtbar = true, $page = 1, $page_size = 10) + { + list($studiengang_kz, $semester) = $this->cmslib->getStgAndSem($studiengang_kz, $semester); + $all = $edit; + $num_rows = $this->NewsModel->countNewsWithContent(getSprache(), $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $this->page_size, $all, $mischen); + if (isError($num_rows)) { + $this->terminateWithJsonError(getError($num_rows)); + } + $num_rows = hasData($num_rows) ? getData($num_rows) : null; + if ($num_rows) { + echo json_encode($num_rows); + } else { + show_error("News number rows: No data found"); + } } } diff --git a/application/controllers/CisVue/Cms.php b/application/controllers/CisVue/Cms.php index 96057559f..2c1fa1fc6 100755 --- a/application/controllers/CisVue/Cms.php +++ b/application/controllers/CisVue/Cms.php @@ -1,6 +1,7 @@ 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 + */ /** * @param boolean $infoscreen * @param string | null $studiengang_kz @@ -59,11 +71,48 @@ class Cms extends FHC_Controller */ 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); + $this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]); + } - if (isError($news)) - return $this->load->view('CisHtml/Error', ['error' => getError($news)]); + public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true) + { + $get_page = intval($this->input->get('page', true)); + $get_page_size = intval($this->input->get('page_size', true)); + if ($get_page) { + $page = $get_page; + } + if ($get_page_size) { + $page_size = $get_page_size; + } else { + $page_size = $this->page_size; + } + $news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar, $page, $page_size); - $this->load->view('CisHtml/Cms/Content', ['content' => getData($news)]); + if (isError($news)) { + $this->terminateWithJsonError(getError($news)); + } + $news = hasData($news) ? getData($news) : null; + if ($news) { + echo json_encode($news); + } else { + show_error("News: No data found"); + } + + } + + public function getNewsRowCount($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $fachbereich_kurzbz = null, $maxalter = 0, $edit = false, $sichtbar = true, $page = 1, $page_size = 10) + { + list($studiengang_kz, $semester) = $this->cmslib->getStgAndSem($studiengang_kz, $semester); + $all = $edit; + $num_rows = $this->NewsModel->countNewsWithContent(getSprache(), $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $this->page_size, $all, $mischen); + if (isError($num_rows)) { + $this->terminateWithJsonError(getError($num_rows)); + } + $num_rows = hasData($num_rows) ? getData($num_rows) : null; + if ($num_rows) { + echo json_encode($num_rows); + } else { + show_error("News number rows: No data found"); + } } } diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index 79040dc66..901587893 100755 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -60,6 +60,9 @@ class DB_Model extends CI_Model protected $pk; // Name of the PrimaryKey for DB-Update, Load, ... protected $hasSequence; // False if this table has a composite primary key that is not using a sequence // True if this table has a primary key that uses a sequence + //protected $paginationOptions; // $page and $page_size together in an associative array + protected $page; + protected $page_size; private $executedQueryMetaData; private $executedQueryListFields; @@ -531,7 +534,7 @@ class DB_Model extends CI_Model if (!is_numeric($start) || (is_numeric($start) && $start <= 0)) return error('The start parameter is not valid', EXIT_MODEL); - if (is_numeric($end) && $end > $start) + if (is_numeric($end)) { $this->db->limit($start, $end); } @@ -1342,5 +1345,51 @@ class DB_Model extends CI_Model return $udfs; } + + /** + * addPagination + * adds a limit and an optional offset depending on the arguments passed to the function + * @param int $page page to be queried + * @param int $page_size page_size used to calculate the offset of the pagination + * @param int | null $num_rows used to calculate the total amout of pages that are available with the $page and $page_size arguments + * + * @return void + */ + function addPagination( $page, $page_size, $num_rows=null) + { + if (isset($page) && is_numeric($page) && isset($page_size) && is_numeric($page_size) && $page > 0 && $page_size > 0) { + + if (isset($num_rows) && is_numeric($num_rows) && $num_rows > 0) { + $floatMaxPageCount = $num_rows / $page_size; + $maxPageCount = ceil($floatMaxPageCount); + if($page > $maxPageCount){ + $page = $maxPageCount; + } + } + $offset = (($page-1) * $page_size); + $this->addLimit($page_size, $offset); + + } else { + $this->addLimit($page_size); + } + } + + /** + * getQueryNumRows + * returns the number of rows of the current build query of the codeigniter query builder instance + * @param bool $reset resets the select of the query + * + * @return Result_object $num_rows + */ + function getNumRows($reset=false) + { + // returns the number of rows when executing the current query without reseting the select statement of the query + $num_rows = $this->db->count_all_results($this->dbTable,$reset); + if($num_rows){ + return success($num_rows); + }else{ + return error($this->db->error(), EXIT_DATABASE); + } + } } diff --git a/application/libraries/CmsLib.php b/application/libraries/CmsLib.php index 4e27b94af..0fa3b0556 100755 --- a/application/libraries/CmsLib.php +++ b/application/libraries/CmsLib.php @@ -1,6 +1,7 @@ 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); @@ -72,11 +73,9 @@ class CmsLib return $content; // Legt einen Logeintrag für die Klickstatistik an - if (defined('LOG_CONTENT') && LOG_CONTENT) - { + if (defined('LOG_CONTENT') && LOG_CONTENT) { // Nur eingeloggte User werden geloggt, das sonst auch alle Infoscreenaufrufe und dgl. mitgeloggt werden - if (isLogged()) - { + if (isLogged()) { $request_data = 'content_id=' . $content_id; if ($version !== null) $request_data .= '&version=' . $version; @@ -174,6 +173,30 @@ class CmsLib ], true)); } + /** + * @param string $studiengang_kz + * @param string $semester + * + * @return array queried studiengang_kz and semester + */ + public function getStgAndSem($studiengang_kz, $semester) + { + $this->ci->load->model('crm/Student_model', 'StudentModel'); + + //Zum anzeigen der Studiengang-Details neben den News + $student = $this->ci->StudentModel->loadWhere(['student_uid' => getAuthUID()]); + 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; + } + return [$studiengang_kz, $semester]; + } + /** * @param boolean $infoscreen * @param string | null $studiengang_kz @@ -185,36 +208,21 @@ class CmsLib * * @return void */ - public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true) + public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true, $page = 1, $page_size = 10) { - $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; - } - } + list($studiengang_kz, $semester) = $this->getStgAndSem($studiengang_kz, $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); + $news = $this->ci->NewsModel->getNewsWithContent(getSprache(), $studiengang_kz, $semester, null, $sichtbar, 0, $page, $page_size, $all, $mischen); if (isError($news)) return $news; $news = getData($news); + //var_dump($news->maxPageCount); foreach ($news as $newsobj) { if ($studiengang_kz && $edit && !$newsobj->studiengang_kz) continue; @@ -225,17 +233,14 @@ class CmsLib $xml .= "" . $newsobj->content . $datum . $id . ""; } - if ($studiengang_kz != 0) - { + 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) - { + if ($stg_obj) { + if (!$edit && !$infoscreen) { $extras = $this->getNewsExtras($stg_obj, $semester); if (isError($extras)) return $extras; @@ -245,8 +250,7 @@ class CmsLib } } - if ($titel != '') - { + if ($titel != '') { $xml .= '' . $titel . ''; } @@ -260,7 +264,7 @@ class CmsLib $XML = new DOMDocument(); $XML->loadXML($xml); - + $xsltemplate = new DOMDocument(); $xsltemplate->loadXML($template->xslt_xhtml_c4); diff --git a/application/models/content/News_model.php b/application/models/content/News_model.php index 3199a0ac3..f4f98b601 100755 --- a/application/models/content/News_model.php +++ b/application/models/content/News_model.php @@ -23,10 +23,12 @@ class News_model extends DB_Model text IS NOT NULL AND datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date) ORDER BY datum DESC - LIMIT '. $this->escape($limit) + LIMIT ' . $this->escape($limit) ); } + + /** * @param string $sprache * @param string $studiengang_kz @@ -34,87 +36,86 @@ class News_model extends DB_Model * @param string $fachbereich_kurzbz * @param boolean $sichtbar * @param integer $maxalter - * @param integer $maxnews + * @param integer $page + * @param integer $page_size * @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) + protected function prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true) { + + $this->addOrder('datum', 'DESC'); + $studiengang_kz = trim($studiengang_kz); $fachbereich_kurzbz = trim($fachbereich_kurzbz); $where = []; - $params = []; - if (trim($maxalter) != '0') - { - $where[] = "(now()-datum) < interval ? days"; - $params[] = $maxalter; + if (trim($maxalter) != '0') { + $where[] = "(now()-datum) < interval " . $this->db->escape($maxalter) . " days"; + } - if (!$all) - { + if (!$all) { $where[] = "datum <= now()"; $where[] = "(datum_bis >= now()::date OR datum_bis IS NULL)"; } - if ($fachbereich_kurzbz != '*') - { - if ($fachbereich_kurzbz == '') - { + if ($fachbereich_kurzbz != '*') { + if ($fachbereich_kurzbz == '') { $where[] = "fachbereich_kurzbz IS NULL"; - } - else - { - $where[] = "fachbereich_kurzbz = ?"; - $params[] = $fachbereich_kurzbz; + } else { + $where[] = "fachbereich_kurzbz = " . $this->db->escape($fachbereich_kurzbz); + } } - if ($studiengang_kz == '0') - { - $where[] = "studiengang_kz = ?"; - $params[] = $studiengang_kz; + if ($studiengang_kz == '0') { + $where[] = "studiengang_kz = " . $this->db->escape($studiengang_kz); + if ($semester === NULL) $where[] = "semester IS NULL"; elseif ($semester === 0) $where[] = "semester = 0"; - } - elseif ($studiengang_kz != '') - { + } 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; + $where[] = "((studiengang_kz = " . $this->db->escape($studiengang_kz) . " AND semester = " . $this->db->escape($semester) . ") OR (studiengang_kz = " . $this->db->escape($studiengang_kz) . " AND semester = 0) OR (studiengang_kz = 0 AND semester = " . $this->db->escape($semester) . ")" . $add . ")"; + } $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[] = "cs.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=" . $this->db->escape($sprache) . ") THEN " . $this->db->escape($sprache) . " ELSE " . $this->db->escape(DEFAULT_LANGUAGE) . " END)"; + + + $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=" . $this->db->escape($sprache) . ") THEN " . $this->db->escape($sprache) . " ELSE " . $this->db->escape(DEFAULT_LANGUAGE) . " END))"; + $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); } + public function getNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true) + { + $this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen); + + // getting the number of rows of the query and adding pagination to the query result + $num_rows = $this->getNumRows(true); + $this->addPagination($page, $page_size, $num_rows); + + // preparing the query again because every call to get_compiled_select or cour_all_results will add the from clause to the query + $this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen); + + return $this->load(); + } + + public function countNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true) + { + $this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen); + return $this->getNumRows(); + } + + } diff --git a/application/views/CisHtml/Cms/Content.php b/application/views/CisHtml/Cms/Content.php index e750ea5a5..a27128d23 100755 --- a/application/views/CisHtml/Cms/Content.php +++ b/application/views/CisHtml/Cms/Content.php @@ -1,5 +1,6 @@ true, 'customJSModules' => ['public/js/apps/Cis/Cms.js'], 'customCSSs' => [ 'public/css/Cis4/Cms.css', @@ -11,8 +12,8 @@ $this->load->view('templates/CISHTML-Header', $includesArray); ?>
- + +
-load->view('templates/CISHTML-Footer', $includesArray); ?> - +load->view('templates/CISHTML-Footer', $includesArray); ?> \ No newline at end of file diff --git a/public/js/apps/Cis/Cms.js b/public/js/apps/Cis/Cms.js index 8f006ec27..cd2b5f6e9 100755 --- a/public/js/apps/Cis/Cms.js +++ b/public/js/apps/Cis/Cms.js @@ -1,20 +1,38 @@ import BsConfirm from "../../components/Bootstrap/Confirm.js"; +//import Pagination from "../../components/Pagination/Pagination.js"; +import Content from "../../components/Cis/Cms/Content.js"; +import Fhcapi from "../api/fhcapifactory.js"; -Vue.createApp({ - mounted() { - document.querySelectorAll('#cms [data-confirm]').forEach(el => { - el.addEventListener('click', evt => { - evt.preventDefault(); - BsConfirm.popup(el.dataset.confirm).then(() => { - Axios.get(el.href).then(res => { - // TODO(chris): check for success then show message and/or reload - location = location; - }).catch(err => console.error('ERROR:', err)); - }).catch(()=>{}); - }); - }); - document.querySelectorAll('#cms [data-href]').forEach(el => { - el.href = el.dataset.href.replace(/^ROOT\//, FHC_JS_DATA_STORAGE_OBJECT.app_root); - }); - } -}).mount('#cms [data-confirm], #cms [data-href]'); +Vue.$fhcapi = Fhcapi; + +const app = Vue.createApp({ + components: { + Content, + }, + mounted() { + document.querySelectorAll("#cms [data-confirm]").forEach((el) => { + el.addEventListener("click", (evt) => { + evt.preventDefault(); + BsConfirm.popup(el.dataset.confirm) + .then(() => { + Axios.get(el.href) + .then((res) => { + // TODO(chris): check for success then show message and/or reload + location = location; + }) + .catch((err) => console.error("ERROR:", err)); + }) + .catch(() => {}); + }); + }); + document.querySelectorAll("#cms [data-href]").forEach((el) => { + el.href = el.dataset.href.replace( + /^ROOT\//, + FHC_JS_DATA_STORAGE_OBJECT.app_root + ); + }); + }, +}); +app.use(primevue.config.default, { zIndex: { overlay: 9999 } }); +app.mount("#cms"); +//#cms [data-confirm], #cms [data-href] diff --git a/public/js/apps/api/cms.js b/public/js/apps/api/cms.js new file mode 100644 index 000000000..6fbb0e727 --- /dev/null +++ b/public/js/apps/api/cms.js @@ -0,0 +1,21 @@ +export default { + getNews: function (page = 1, page_size = 10) { + const url = + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + "/CisHtml/Cms/getNews"; + return axios.get(url, { + params: { + page, + page_size, + }, + }); + }, + getNewsRowCount: function () { + const url = + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + "/CisHtml/Cms/getNewsRowCount"; + return axios.get(url); + }, +}; diff --git a/public/js/apps/api/fhcapifactory.js b/public/js/apps/api/fhcapifactory.js index 9845d2fc5..9d4e3609a 100755 --- a/public/js/apps/api/fhcapifactory.js +++ b/public/js/apps/api/fhcapifactory.js @@ -1,4 +1,5 @@ import Search from "./search.js"; +import Cms from "./cms.js"; import UserData from "./userdata.js"; import ProfilUpdate from "./profilUpdate.js" @@ -6,4 +7,5 @@ export default { "Search": Search, "UserData": UserData, "ProfilUpdate": ProfilUpdate, + "Cms": Cms, }; diff --git a/public/js/components/Cis/Cms/Content.js b/public/js/components/Cis/Cms/Content.js new file mode 100644 index 000000000..bac28c23c --- /dev/null +++ b/public/js/components/Cis/Cms/Content.js @@ -0,0 +1,34 @@ +import Pagination from "../../Pagination/Pagination.js"; + +export default { + components: { + Pagination, + }, + data() { + return { + content: null, + maxPageCount: 0, + page_size: 10, + }; + }, + methods: { + loadNewPageContent: function (data) { + Vue.$fhcapi.Cms.getNews(data.page, data.rows).then((result) => { + this.content = result.data; + }); + }, + }, + created() { + Vue.$fhcapi.Cms.getNews(1, this.page_size).then((result) => { + this.content = result.data; + }); + + Vue.$fhcapi.Cms.getNewsRowCount().then((result) => { + this.maxPageCount = result.data; + }); + }, + template: /*html*/ ` + +
+
`, +}; diff --git a/public/js/components/Pagination/Pagination.js b/public/js/components/Pagination/Pagination.js new file mode 100644 index 000000000..8b2688834 --- /dev/null +++ b/public/js/components/Pagination/Pagination.js @@ -0,0 +1,33 @@ +export default { + components: { + paginator: primevue.paginator, + }, + emits: ["update:rows"], + props: { + maxPageCount: { + type: Number, + default: 0, + }, + page_size: { + type: Number, + required: true, + }, + }, + data() { + return {}; + }, + methods: { + newPageEvent: function (data) { + //console.log("hier", data.page); + }, + }, + mounted() {}, + template: /*html*/ ` + + + + Placeholder + + + `, +};