mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-18 07:22:17 +00:00
Merge branch 'feature-40309/Cis_News_widget' into feature-25999/C4
This commit is contained in:
@@ -69,12 +69,21 @@ class Cms extends Auth_Controller
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
// return early if the content_id for the content is missing
|
||||
if(!isset($content_id))
|
||||
$this->terminateWithError("content_id is missing");
|
||||
|
||||
$content = $this->ContentModel->load($content_id);
|
||||
if (isError($content))
|
||||
return $this->load->view('CisHmvc/Error', ['error' => getError($content)]);
|
||||
$this->terminateWithError(getError($content));
|
||||
|
||||
$this->load->view('CisHmvc/Cms/Content', ['content' => getData($content)]);
|
||||
$content = getData($content);
|
||||
if(NULL === $content)
|
||||
$this->terminateWithError("Content not found");
|
||||
|
||||
$content = current($content);
|
||||
|
||||
$this->load->view('CisVue/Cms/Content', ['content_id' => $content_id, 'template_kurzbz'=>$content->template_kurzbz , 'version' => $version, 'sprache' => $sprache, 'sichtbar' => $sichtbar]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,48 +110,6 @@ class Cms extends Auth_Controller
|
||||
*/
|
||||
public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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");
|
||||
}
|
||||
$this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar, "template_kurzbz"=>"news"]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,10 +26,6 @@ class Cms extends FHC_Controller
|
||||
'global'
|
||||
]);
|
||||
|
||||
$this->load->model('content/News_model', 'NewsModel');
|
||||
|
||||
// setting up the papgination_size
|
||||
$this->page_size = 10;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
@@ -45,12 +41,21 @@ class Cms extends FHC_Controller
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
// return early if the content_id for the content is missing
|
||||
if(!isset($content_id))
|
||||
$this->terminateWithError("content_id is missing");
|
||||
|
||||
$content = $this->ContentModel->load($content_id);
|
||||
if (isError($content))
|
||||
return $this->load->view('CisHtml/Error', ['error' => getError($content)]);
|
||||
$this->terminateWithError(getError($content));
|
||||
|
||||
$this->load->view('CisHtml/Cms/Content', ['content' => getData($content)]);
|
||||
$content = getData($content);
|
||||
if(NULL === $content)
|
||||
$this->terminateWithError("Content not found");
|
||||
|
||||
$content = current($content);
|
||||
|
||||
$this->load->view('CisVue/Cms/Content', ['content_id' => $content_id, 'template_kurzbz'=>$content->template_kurzbz , 'version' => $version, 'sprache' => $sprache, 'sichtbar' => $sichtbar]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,48 +71,7 @@ class Cms extends FHC_Controller
|
||||
*/
|
||||
public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]);
|
||||
$this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar, "template_kurzbz"=>"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);
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ class Cms extends FHC_Controller
|
||||
$this->loadPhrases([
|
||||
'global'
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
@@ -39,25 +40,15 @@ class Cms extends FHC_Controller
|
||||
*/
|
||||
public function content($content_id, $version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
$content = $this->ContentModel->load($content_id);
|
||||
|
||||
$content = $this->getDataOrTerminateWithError($content);
|
||||
|
||||
$content = current($content);
|
||||
|
||||
if (isError($content))
|
||||
return $this->load->view('CisHtml/Error', ['error' => getError($content)]);
|
||||
|
||||
$this->load->view('CisHtml/Cms/Content', ['content' => getData($content)]);
|
||||
$this->load->view('CisVue/Cms/Content', ['content_id' => $content_id, 'template_kurzbz'=>$content->template_kurzbz , 'version' => $version, 'sprache' => $sprache, 'sichtbar' => $sichtbar]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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
|
||||
@@ -71,48 +62,7 @@ class Cms extends FHC_Controller
|
||||
*/
|
||||
public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
$this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]);
|
||||
$this->load->view('CisHtml/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar, "template_kurzbz"=>"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);
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the SearchBarLib (back-end)
|
||||
* Provides data to the ajax get calls about the searchbar component
|
||||
* This controller works with JSON calls on the HTTP GET and the output is always JSON
|
||||
*/
|
||||
class Cms extends FHCAPI_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// NOTE(chris): additional permission checks will be done in SearchBarLib
|
||||
parent::__construct([
|
||||
'ContentID' => self::PERM_LOGGED,
|
||||
'getOrtKurzbzContent' => self::PERM_LOGGED,
|
||||
'content' => self::PERM_LOGGED,
|
||||
'news' => self::PERM_LOGGED,
|
||||
'getNewsRowCount' => self::PERM_LOGGED,
|
||||
'getNews' => self::PERM_LOGGED,
|
||||
|
||||
]);
|
||||
|
||||
$this->load->model('content/News_model', 'NewsModel');
|
||||
|
||||
// setting up the papgination_size
|
||||
$this->page_size = 10;
|
||||
|
||||
$this->load->library('CmsLib');
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* fetches the content with the content_id and additional parameters
|
||||
*/
|
||||
public function content()
|
||||
{
|
||||
// form validation
|
||||
$this->load->library('form_validation');
|
||||
$this->form_validation->set_data($_GET);
|
||||
$this->form_validation->set_rules('content_id','Content ID','required|is_natural');
|
||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
// getting the get parameters
|
||||
$content_id = $this->input->get("content_id",TRUE);
|
||||
$version = $this->input->get("version",TRUE);
|
||||
$sprache = $this->input->get("sprache",TRUE);
|
||||
$sichtbar = $this->input->get("sichtbar",TRUE);
|
||||
|
||||
$content = $this->cmslib->getContent($content_id);
|
||||
|
||||
$content = $this->getDataOrTerminateWithError($content);
|
||||
|
||||
$this->terminateWithSuccess($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a JSON body via HTTP POST and provides the parameters
|
||||
*/
|
||||
public function ContentID()
|
||||
{
|
||||
// form validation
|
||||
$this->load->library('form_validation');
|
||||
$this->form_validation->set_data($_GET);
|
||||
$this->form_validation->set_rules('ort_kurzbz', 'Ort', 'required');
|
||||
if ($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$ort_kurzbz = $this->input->get('ort_kurzbz',TRUE);
|
||||
|
||||
$content_id = $this->OrtModel->getContentID($ort_kurzbz);
|
||||
|
||||
$content_id = current($this->getDataOrTerminateWithError($content_id))->content_id;
|
||||
|
||||
$this->terminateWithSuccess($content_id);
|
||||
}
|
||||
|
||||
//todo: there is the method news and getNews but only one should exist
|
||||
public function news()
|
||||
{
|
||||
// form validation
|
||||
$this->load->library('form_validation');
|
||||
$this->form_validation->set_data($_GET);
|
||||
$this->form_validation->set_rules('limit','Limit','required|is_natural_no_zero');
|
||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$this->load->model('content/news_model', 'NewsModel');
|
||||
|
||||
$limit = $this->input->get('limit',TRUE);
|
||||
|
||||
//query the news
|
||||
$news = $this->NewsModel->getAll($limit);
|
||||
|
||||
//get the data or terminate with error
|
||||
$news = $this->getDataOrTerminateWithError($news);
|
||||
|
||||
// collect the content of the news
|
||||
foreach($news as $news_element){
|
||||
$this->addMeta("content_id",$news_element->content_id);
|
||||
|
||||
$content = $this->cmslib->getContent($news_element->content_id);
|
||||
|
||||
$content = $this->getDataOrTerminateWithError($content);
|
||||
|
||||
$news_element->content_obj = $content;
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($news);
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
$this->load->model('content/News_model','NewsModel');
|
||||
|
||||
$num_rows = $this->NewsModel->countNewsWithContent(getSprache(), $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
|
||||
$num_rows = $this->getDataOrTerminateWithError($num_rows);
|
||||
|
||||
$this->terminateWithSuccess($num_rows);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function getNews($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true)
|
||||
{
|
||||
//form validation
|
||||
$this->load->library('form_validation');
|
||||
$this->form_validation->set_data($_GET);
|
||||
$this->form_validation->set_rules('page','Page','required|is_natural');
|
||||
$this->form_validation->set_rules('page_size', 'PageSize', 'is_natural');
|
||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
// getting the GET parameters
|
||||
$page = intval($this->input->get('page', true));
|
||||
$page_size = intval($this->input->get('page_size', true));
|
||||
|
||||
// default value for the page_size is 10
|
||||
$page_size = $page_size ?? 10;
|
||||
|
||||
$news = $this->cmslib->getNews($infoscreen, $studiengang_kz, $semester, $mischen, $titel, $edit, $sichtbar, $page, $page_size);
|
||||
|
||||
$news = $this->getDataOrTerminateWithError($news);
|
||||
|
||||
$this->terminateWithSuccess($news);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the SearchBarLib (back-end)
|
||||
* Provides data to the ajax get calls about the searchbar component
|
||||
* This controller works with JSON calls on the HTTP GET and the output is always JSON
|
||||
*/
|
||||
class Ort extends FHCAPI_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Object initialization
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// NOTE(chris): additional permission checks will be done in SearchBarLib
|
||||
parent::__construct([
|
||||
'ContentID' => self::PERM_LOGGED,
|
||||
'getOrtKurzbzContent' => self::PERM_LOGGED,
|
||||
]);
|
||||
|
||||
$this->load->model('ressource/Ort_model', 'OrtModel');
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Gets a JSON body via HTTP POST and provides the parameters
|
||||
*/
|
||||
public function ContentID()
|
||||
{
|
||||
// if error
|
||||
//$this->terminateWithError(SearchBarLib::ERROR_WRONG_JSON, self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$ort_kurzbz = $this->input->get('ort_kurzbz',TRUE);
|
||||
|
||||
if(!$ort_kurzbz){
|
||||
$this->terminateWithError("missing ort_kurzbz parameter", self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$result = $this->OrtModel->getContentID($ort_kurzbz);
|
||||
|
||||
if(isError($result)){
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$result = hasData($result) ? current(getData($result)) : null;
|
||||
|
||||
$this->terminateWithSuccess($result->content_id ?? NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $version
|
||||
* @param string $sprache
|
||||
* @param boolean $sichtbar
|
||||
*
|
||||
* @return $content
|
||||
*/
|
||||
public function getOrtKurzbzContent($version = null, $sprache = null, $sichtbar = true)
|
||||
{
|
||||
$content_id = $this->input->get("content_id",TRUE);
|
||||
|
||||
$this->load->library('CmsLib');
|
||||
|
||||
$content = $this->cmslib->getContent($content_id, $version, $sprache, $sichtbar);
|
||||
|
||||
if (isError($content))
|
||||
$this->terminateWithError(getError($content), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$content = hasData($content) ? getData($content) : null;
|
||||
|
||||
$this->terminateWithSuccess($content);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,6 @@ class CmsLib
|
||||
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))
|
||||
@@ -103,6 +102,12 @@ class CmsLib
|
||||
$XML = new DOMDocument();
|
||||
$XML->loadXML($content->content);
|
||||
|
||||
if($content->titel){
|
||||
$betreff = $content->titel;
|
||||
}else{
|
||||
$betreff = $XML->getElementsByTagName('betreff');
|
||||
}
|
||||
|
||||
$xsltemplate = new DOMDocument();
|
||||
$xsltemplate->loadXML($template->xslt_xhtml_c4);
|
||||
|
||||
@@ -110,10 +115,15 @@ class CmsLib
|
||||
$processor = new XSLTProcessor();
|
||||
$processor->importStylesheet($xsltemplate);
|
||||
|
||||
$content = $processor->transformToXML($XML);
|
||||
$content = str_replace('dms.php', APP_ROOT . 'cms/dms.php', $content);
|
||||
|
||||
$transformed_content = $processor->transformToXML($XML);
|
||||
$transformed_content = str_replace('dms.php', APP_ROOT . 'cms/dms.php', $transformed_content);
|
||||
|
||||
return success($content);
|
||||
return success([
|
||||
"betreff"=>$betreff,
|
||||
"type"=>$content->template_kurzbz,
|
||||
"content"=>$transformed_content
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,14 +19,27 @@ class News_model extends DB_Model
|
||||
*/
|
||||
public function getAll($limit = null)
|
||||
{
|
||||
return $this->loadWhere('
|
||||
text IS NOT NULL
|
||||
AND datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
|
||||
$this->addJoin("campus.tbl_content","content_id");
|
||||
return $this->execReadOnlyQuery('
|
||||
SELECT *
|
||||
FROM campus.tbl_news
|
||||
JOIN campus.tbl_content content ON content.content_id = campus.tbl_news.content_id
|
||||
WHERE
|
||||
--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)
|
||||
);
|
||||
}
|
||||
|
||||
public function getNewsContentIDs($limit=10){
|
||||
$this->addSelect(['content_id']);
|
||||
return $this->loadWhere("datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
|
||||
ORDER BY datum DESC
|
||||
LIMIT " . $this->escape($limit));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,4 +20,16 @@ class Ort_model extends DB_Model
|
||||
|
||||
return $this->OrtModel->loadWhere(array("raumtyp_kurzbz" => $raumtyp_kurzbz));
|
||||
}
|
||||
|
||||
public function getContentID($ort_kurzbz)
|
||||
{
|
||||
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT content_id
|
||||
FROM public.tbl_ort
|
||||
WHERE ort_kurzbz = ?;
|
||||
",[$ort_kurzbz]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,10 +8,10 @@ $includesArray = array(
|
||||
$this->load->view('templates/CISHTML-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<div id="content">
|
||||
<div >
|
||||
<h2>Stundenplan</h2>
|
||||
<hr>
|
||||
<fhc-calendar :events="events" initial-mode="week" show-weeks></fhc-calendar>
|
||||
<div id="content"></div>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CISHTML-Footer', $includesArray); ?>
|
||||
|
||||
@@ -1,20 +1,29 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'title' => 'FH-Complete',
|
||||
'customJSModules' => ['public/js/apps/Cis/Cms.js'],
|
||||
'primevue3'=>true,
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Cms.css',
|
||||
#'skin/style.css.php'
|
||||
]
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
switch($template_kurzbz){
|
||||
case 'raum_contentmittitel':
|
||||
$includesArray['tabulator5'] = true;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
||||
?>
|
||||
|
||||
|
||||
<h2 ><?php echo isset($content_id)? "Content" : "News" ?></h2>
|
||||
<hr/>
|
||||
<div id="cms">
|
||||
<?php echo (isset($content) ? $content : '<content/>'); ?>
|
||||
<?php echo (isset($content_id) ? '<cms-content :content_id="'.$content_id.'" :version="'.$version.'" :sprache="'.$sprache.'" :sichtbar="'.$sichtbar.'" />' : '<cms-news/>'); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
|
||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
||||
|
||||
|
||||
@@ -1,19 +1,28 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'primevue3' => true,
|
||||
'customJSModules' => ['public/js/apps/Cis/Cms.js'],
|
||||
'primevue3'=>true,
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Cms.css',
|
||||
#'skin/style.css.php'
|
||||
]
|
||||
);
|
||||
|
||||
switch($template_kurzbz){
|
||||
case 'raum_contentmittitel':
|
||||
$includesArray['tabulator5'] = true;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->load->view('templates/CISHTML-Header', $includesArray);
|
||||
?>
|
||||
|
||||
<h2><?php echo isset($content_id)? "Content" : "News" ?></h2>
|
||||
<hr/>
|
||||
<div id="cms">
|
||||
<?php echo (isset($content) ? $content : '<content/>'); ?>
|
||||
|
||||
<?php echo (isset($content_id) ? '<cms-content :content_id="'.$content_id.'" :version="'.$version.'" :sprache="'.$sprache.'" :sichtbar="'.$sichtbar.'" />' : '<cms-news/>'); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CISHTML-Footer', $includesArray); ?>
|
||||
<?php $this->load->view('templates/CISHTML-Footer', $includesArray); ?>
|
||||
|
||||
|
||||
@@ -1,17 +1,28 @@
|
||||
<?php
|
||||
$includesArray = array(
|
||||
'customJSModules' => ['public/js/apps/Cis/Cms.js'],
|
||||
'primevue3'=>true,
|
||||
'customCSSs' => [
|
||||
'public/css/Cis4/Cms.css',
|
||||
#'skin/style.css.php'
|
||||
]
|
||||
);
|
||||
|
||||
switch($template_kurzbz){
|
||||
case 'raum_contentmittitel':
|
||||
$includesArray['tabulator5'] = true;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->load->view('templates/CISVUE-Header', $includesArray);
|
||||
?>
|
||||
|
||||
|
||||
<h2 ><?php echo isset($content_id)? "Content" : "News" ?></h2>
|
||||
<hr/>
|
||||
<div id="cms">
|
||||
<?php echo (isset($content) ? $content : '<content/>'); ?>
|
||||
<?php echo (isset($content_id) ? '<cms-content :content_id="'.$content_id.'" :version="'.$version.'" :sprache="'.$sprache.'" :sichtbar="'.$sichtbar.'" />' : '<cms-news/>'); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
@import './calendar.css';
|
||||
@import './dashboard/news.css';
|
||||
|
||||
.empty-tile-hover {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
.widgets-news .card-header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start !important;
|
||||
|
||||
}
|
||||
|
||||
:root{
|
||||
--news-widget-height: 1;
|
||||
}
|
||||
|
||||
.widgets-news .news-content > div,
|
||||
.widgets-news .news-content .row:nth-child(1),
|
||||
.widgets-news .news-content .news-list,
|
||||
.widgets-news .news-content .news-list-item,
|
||||
.widgets-news .news-content .card-body
|
||||
{
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.widgets-news .card-body{
|
||||
|
||||
/*max-height: calc(var(--news-widget-height)*var(--fhc-dg-row-height)); */
|
||||
overflow:scroll;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
export default {
|
||||
content(content_id, version=null, sprache=null, sichtbar=null) {
|
||||
return this.$fhcApi.get(
|
||||
"/api/frontend/v1/Cms/content",
|
||||
{
|
||||
content_id: content_id,
|
||||
...(version?{version}:{}),
|
||||
...(sprache?{sprache}:{}),
|
||||
...(sichtbar?{sichtbar}:{}),
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
news(limit) {
|
||||
return this.$fhcApi.get(
|
||||
"/api/frontend/v1/Cms/news",
|
||||
{
|
||||
limit: limit
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
getNews(page = 1, page_size = 10) {
|
||||
return this.$fhcApi.get(
|
||||
"/api/frontend/v1/Cms/getNews",
|
||||
{
|
||||
page,
|
||||
page_size,
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
getNewsRowCount: function () {
|
||||
return this.$fhcApi.get(
|
||||
"/api/frontend/v1/Cms/getNewsRowCount",
|
||||
{}
|
||||
);
|
||||
},
|
||||
|
||||
}
|
||||
@@ -27,6 +27,8 @@ import stv from "./stv.js";
|
||||
import notiz from "./notiz.js";
|
||||
import betriebsmittel from "./betriebsmittel.js";
|
||||
import ampeln from "./ampeln.js";
|
||||
import ort from "./ort.js";
|
||||
import cms from "./cms.js";
|
||||
|
||||
export default {
|
||||
search,
|
||||
@@ -41,4 +43,6 @@ export default {
|
||||
notiz,
|
||||
betriebsmittel
|
||||
ampeln,
|
||||
ort,
|
||||
cms,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
getContentID(ort_kurbz) {
|
||||
return this.$fhcApi.get(
|
||||
FHC_JS_DATA_STORAGE_OBJECT.app_root +
|
||||
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
|
||||
"/api/frontend/v1/Ort/ContentID",
|
||||
{ ort_kurzbz: ort_kurbz }
|
||||
);
|
||||
},
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
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";
|
||||
import CmsNews from "../../components/Cis/Cms/News.js";
|
||||
import CmsContent from "../../components/Cis/Cms/Content.js";
|
||||
import Phrasen from "../../plugin/Phrasen.js";
|
||||
|
||||
Vue.$fhcapi = Fhcapi;
|
||||
|
||||
const app = Vue.createApp({
|
||||
components: {
|
||||
Content,
|
||||
CmsNews,
|
||||
CmsContent,
|
||||
},
|
||||
mounted() {
|
||||
document.querySelectorAll("#cms [data-confirm]").forEach((el) => {
|
||||
@@ -34,5 +35,6 @@ const app = Vue.createApp({
|
||||
},
|
||||
});
|
||||
app.use(primevue.config.default, { zIndex: { overlay: 9999 } });
|
||||
app.use(Phrasen);
|
||||
app.mount("#cms");
|
||||
//#cms [data-confirm], #cms [data-href]
|
||||
|
||||
@@ -1,16 +1,28 @@
|
||||
import FhcCalendar from "../../components/Calendar/Calendar.js";
|
||||
import CalendarModal from '../../components/Calendar/CalendarModal.js';
|
||||
import Phrasen from "../../plugin/Phrasen.js";
|
||||
|
||||
const app = Vue.createApp({
|
||||
components: {
|
||||
FhcCalendar
|
||||
FhcCalendar,
|
||||
CalendarModal
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
stunden: [],
|
||||
events: null
|
||||
events: null,
|
||||
currentlySelectedEvent:null,
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
selectEvent: function(event){
|
||||
this.currentlySelectedEvent = event;
|
||||
Vue.nextTick(()=>{
|
||||
this.$refs.calendarModal.show();
|
||||
})
|
||||
|
||||
},
|
||||
},
|
||||
created() {
|
||||
axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Stundenplan/Stunden').then(res => {
|
||||
res.data.retval.forEach(std => {
|
||||
@@ -48,7 +60,10 @@ const app = Vue.createApp({
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
template:`
|
||||
<calendar-modal v-if="currentlySelectedEvent" :event="currentlySelectedEvent" ref="calendarModal" ></calendar-modal>
|
||||
<fhc-calendar @select:event="selectEvent" :events="events" initial-mode="week" show-weeks></fhc-calendar>`
|
||||
});
|
||||
app.config.unwrapInjectedRef = true;
|
||||
app.use(Phrasen);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';
|
||||
import DashboardAdmin from '../../components/Dashboard/Admin.js';
|
||||
import Phrasen from "../../plugin/Phrasen.js";
|
||||
import FhcApi from '../../plugin/FhcApi.js';
|
||||
import Phrasen from '../../plugin/Phrasen.js';
|
||||
|
||||
const app = Vue.createApp({
|
||||
data: () => ({
|
||||
@@ -12,5 +13,6 @@ const app = Vue.createApp({
|
||||
}
|
||||
});
|
||||
app.config.unwrapInjectedRef = true;
|
||||
app.use(FhcApi);
|
||||
app.use(Phrasen);
|
||||
app.mount('#main');
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import FhcDashboard from '../../components/Dashboard/Dashboard.js';
|
||||
import Phrasen from "../../plugin/Phrasen.js";
|
||||
import FhcApi from '../../plugin/FhcApi.js';
|
||||
import Phrasen from '../../plugin/Phrasen.js';
|
||||
|
||||
const app = Vue.createApp({
|
||||
data: () => ({
|
||||
@@ -10,5 +11,6 @@ const app = Vue.createApp({
|
||||
}
|
||||
});
|
||||
app.config.unwrapInjectedRef = true;
|
||||
app.use(FhcApi);
|
||||
app.use(Phrasen);
|
||||
app.mount('#content');
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
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);
|
||||
},
|
||||
};
|
||||
@@ -1,7 +1,5 @@
|
||||
import Search from "./search.js";
|
||||
import Cms from "./cms.js";
|
||||
|
||||
export default {
|
||||
"Search": Search,
|
||||
"Cms": Cms,
|
||||
};
|
||||
|
||||
@@ -109,7 +109,7 @@ export default {
|
||||
document.body.appendChild(wrapper);
|
||||
});
|
||||
},
|
||||
template: `<div ref="modal" class="bootstrap-modal modal" tabindex="-1" @[\`hide.bs.modal\`]="$emit('hideBsModal', $event)" @[\`hidden.bs.modal\`]="$emit('hiddenBsModal', $event)" @[\`hidePrevented.bs.modal\`]="$emit('hidePreventedBsModal', $event)" @[\`show.bs.modal\`]="$emit('showBsModal', $event)" @[\`shown.bs.modal\`]="$emit('shownBsModal', $event)">
|
||||
template: `<div ref="modal" class="bootstrap-modal modal" tabindex="-1" @[\`hide.bs.modal\`]="$emit('hideBsModal')" @[\`hidden.bs.modal\`]="$emit('hiddenBsModal')" @[\`hidePrevented.bs.modal\`]="$emit('hidePreventedBsModal')" @[\`show.bs.modal\`]="$emit('showBsModal')" >
|
||||
<div class="modal-dialog" :class="dialogClass">
|
||||
<div class="modal-content">
|
||||
<div v-if="$slots.title" class="modal-header">
|
||||
|
||||
@@ -5,7 +5,7 @@ import CalendarWeek from './Week.js';
|
||||
import CalendarWeeks from './Weeks.js';
|
||||
import CalendarMinimized from './Minimized.js';
|
||||
import CalendarDate from '../../composables/CalendarDate.js';
|
||||
import CalendarModal from './CalendarModal.js';
|
||||
|
||||
|
||||
// TODO(chris): week/month toggle
|
||||
|
||||
@@ -17,7 +17,6 @@ export default {
|
||||
CalendarWeek,
|
||||
CalendarWeeks,
|
||||
CalendarMinimized,
|
||||
CalendarModal
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
@@ -105,15 +104,6 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleInput(day) {
|
||||
// set the event when clicking on the lernveranstaltung in the data
|
||||
this.currentlySelectedEvent = day[1];
|
||||
console.log(this.currentlySelectedEvent)
|
||||
// showing the modal
|
||||
Vue.nextTick(()=>{
|
||||
this.$refs.calendarModal.show();
|
||||
})
|
||||
|
||||
console.log(day,"this is the day")
|
||||
this.$emit(day[0], day[1]);
|
||||
}
|
||||
},
|
||||
@@ -145,9 +135,8 @@ export default {
|
||||
}).observe(this.$refs.container);
|
||||
}
|
||||
},
|
||||
template: `
|
||||
template: /*html*/`
|
||||
<div ref="container" class="fhc-calendar card" :class="sizeClass">
|
||||
<calendar-modal v-if="currentlySelectedEvent" :event="currentlySelectedEvent" ref="calendarModal" />
|
||||
<component v-slot="{event}" :is="'calendar-' + mode" @update:mode="mode=$event" @change:range="$emit('change:range',$event)" @input="handleInput" >
|
||||
<!--Week Page layout-->
|
||||
<slot :event="event">
|
||||
|
||||
@@ -1,34 +1,62 @@
|
||||
import Pagination from "../../Pagination/Pagination.js";
|
||||
import raum_contentmittitel from './Content_types/Raum_contentmittitel.js'
|
||||
import general from './Content_types/General.js'
|
||||
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Pagination,
|
||||
props:{
|
||||
content_id:{
|
||||
type:Number,
|
||||
required:true,
|
||||
},
|
||||
version:{
|
||||
type:[String, Number],
|
||||
default: null,
|
||||
},
|
||||
sprache:{
|
||||
type:[String, Number],
|
||||
default: null,
|
||||
},
|
||||
sichtbar:{
|
||||
type:[String, Number],
|
||||
default: null,
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
components:{
|
||||
raum_contentmittitel,
|
||||
general,
|
||||
},
|
||||
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;
|
||||
});
|
||||
computed:{
|
||||
computeContentType: function(){
|
||||
switch(this.content_type){
|
||||
|
||||
case "raum_contentmittitel":
|
||||
return "raum_contentmittitel";
|
||||
default:
|
||||
return "general";
|
||||
};
|
||||
},
|
||||
},
|
||||
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;
|
||||
this.$fhcApi.factory.cms.content(this.content_id,this.version, this.sprache, this.sichtbar).then(res =>{
|
||||
this.content = res.data.content;
|
||||
this.content_type=res.data.type;
|
||||
});
|
||||
},
|
||||
mounted(){
|
||||
|
||||
},
|
||||
template: /*html*/ `
|
||||
<pagination :page_size="page_size" @page="loadNewPageContent" :maxPageCount="maxPageCount">
|
||||
<div v-html="content"></div>
|
||||
</pagination>`,
|
||||
<!-- div that contains the content -->
|
||||
<component :is="computeContentType" v-if="content" :content="content" />
|
||||
<p v-else>No content is available to display</p>
|
||||
|
||||
`,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import BsModal from "../../Bootstrap/Modal";
|
||||
|
||||
|
||||
export default {
|
||||
|
||||
|
||||
mixins:[BsModal],
|
||||
|
||||
components:{
|
||||
BsModal,
|
||||
},
|
||||
props:{
|
||||
contentID:{
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
ort_kurzbz:{
|
||||
type: String,
|
||||
required: true,
|
||||
}
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
result: false,
|
||||
content: null,
|
||||
};
|
||||
},
|
||||
|
||||
methods:{
|
||||
modalHidden: function(){
|
||||
// reseting the content of the modal
|
||||
this.content = null;
|
||||
},
|
||||
// this method is always called when the modal is shown
|
||||
modalShown: function(){
|
||||
|
||||
if(this.contentID){
|
||||
this.$fhcApi.factory.cms.content(this.contentID).then(res =>{
|
||||
this.content = res.data;
|
||||
|
||||
})
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted(){
|
||||
this.modal = this.$refs.modalContainer;
|
||||
|
||||
},
|
||||
|
||||
template:/*html*/`
|
||||
<bs-modal @hideBsModal="modalHidden" @showBsModal="modalShown" ref="modalContainer" dialogClass="modal-lg">
|
||||
<template #title>
|
||||
<span v-if="ort_kurzbz">{{ort_kurzbz}}</span>
|
||||
<span v-else>Raum Informationen</span>
|
||||
</template>
|
||||
<template #default>
|
||||
<div v-if="content" v-html="content"></div>
|
||||
<div v-else>Der Content für diesen Raum konnte nicht geladen werden</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</template>
|
||||
</bs-modal>
|
||||
`
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
|
||||
export default {
|
||||
props:{
|
||||
content:{
|
||||
type:String,
|
||||
required:true,
|
||||
},
|
||||
},
|
||||
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
|
||||
);
|
||||
});
|
||||
},
|
||||
template: /*html*/ `
|
||||
<!-- div that contains the content -->
|
||||
<div v-html="content" v-if="content" :content="content" />
|
||||
<p v-else>Content was not found</p>
|
||||
`,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
|
||||
export default {
|
||||
props:{
|
||||
content:{
|
||||
type:String,
|
||||
required:true,
|
||||
},
|
||||
},
|
||||
mounted(){
|
||||
let tables = document.getElementsByClassName("tablesorter");
|
||||
|
||||
for(let table of tables){
|
||||
new Tabulator(table, {
|
||||
layout:"fitDataStretch",
|
||||
|
||||
columnDefaults:{
|
||||
formatter:"html",
|
||||
resizable:false,
|
||||
minWidth: "100px",
|
||||
}
|
||||
})
|
||||
|
||||
table.classList.add("mx-auto");
|
||||
table.style.width="30em";
|
||||
}
|
||||
},
|
||||
template: /*html*/ `
|
||||
<!-- div that contains the content -->
|
||||
<div v-html="content" v-if="content" :content="content" />
|
||||
<p v-else>Content was not found</p>
|
||||
`,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import Pagination from "../../Pagination/Pagination.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Pagination,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
content: null,
|
||||
maxPageCount: 0,
|
||||
page_size: 10,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
loadNewPageContent: function (data) {
|
||||
this.$fhcApi.factory.cms.getNews(data.page, data.rows)
|
||||
.then(res => res.data)
|
||||
.then(result => {
|
||||
this.content = result;
|
||||
});
|
||||
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.$fhcApi.factory.cms.getNews(1, this.page_size)
|
||||
.then(res => res.data)
|
||||
.then(result => {
|
||||
this.content = result;
|
||||
});
|
||||
|
||||
this.$fhcApi.factory.cms.getNewsRowCount()
|
||||
.then(res => res.data)
|
||||
.then(result => {
|
||||
this.maxPageCount = result;
|
||||
});
|
||||
},
|
||||
template: /*html*/ `
|
||||
<pagination :page_size="page_size" @page="loadNewPageContent" :maxPageCount="maxPageCount">
|
||||
<div v-html="content"></div>
|
||||
</pagination>`,
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
import BsModal from "../../Bootstrap/Modal";
|
||||
|
||||
export default {
|
||||
|
||||
|
||||
data(){
|
||||
return {
|
||||
// reactive data
|
||||
items:["lehrveranstaltungsInformationen","Notenlisten","Moodle","Gesamtnote","E-mail","Pinboard","Alle Termine der LV","Anrechnung","Evaluierung","Neue Einmeldung"],
|
||||
lehreinheit:null,
|
||||
stg:null,
|
||||
lv:null,
|
||||
|
||||
result: false,
|
||||
}
|
||||
},
|
||||
mixins:[BsModal],
|
||||
components:{
|
||||
BsModal,
|
||||
},
|
||||
mounted(){
|
||||
this.modal = this.$refs.modalContainer;
|
||||
},
|
||||
template:/*html*/`
|
||||
<bs-modal ref="modalContainer" dialogClass="modal-lg">
|
||||
<template #title>
|
||||
<span v-if="lv ">
|
||||
{{lv + (stg?' / ' + stg:'')}}
|
||||
</span>
|
||||
<span v-else>
|
||||
Lehrveranstaltungs Übersicht
|
||||
</span>
|
||||
</template>
|
||||
<template #default>
|
||||
<div :style="{'display':'grid', 'row-gap':'10px', 'column-gap':'10px', 'grid-template-columns':'repeat(3,minmax(100px,1fr))', 'grid-template-rows':'repeat('+Math.ceil(items.length / 3)+',minmax(100px,1fr))'} ">
|
||||
<div class="d-flex flex-column align-items-center justify-content-center" v-for="item in items" :key="item">
|
||||
<span>{{item}}</span>
|
||||
<i class="fa fa-file"></i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</template>
|
||||
</bs-modal>
|
||||
`,
|
||||
};
|
||||
@@ -154,7 +154,8 @@ export default {
|
||||
this.modal = this.$refs.modalContainer.modal;
|
||||
},
|
||||
popup(options) {
|
||||
return BsModal.popup.bind(this)(null, options);
|
||||
BsModal.popup.bind(this);
|
||||
return BsModal.popup(null, options);
|
||||
},
|
||||
template: /*html*/ `
|
||||
<bs-modal v-show="!loading" ref="modalContainer" v-bind="$props" body-class="" dialog-class="modal-lg" class="bootstrap-alert" backdrop="false" >
|
||||
|
||||
@@ -3,116 +3,97 @@ import BsModal from '../Bootstrap/Modal';
|
||||
const MAX_LOADED_NEWS = 10;
|
||||
|
||||
export default {
|
||||
name: 'WidgetsNews',
|
||||
components: { BsModal },
|
||||
data: () => ({
|
||||
allNewsList: [],
|
||||
singleNews: {}
|
||||
}),
|
||||
mixins: [
|
||||
AbstractWidget
|
||||
],
|
||||
computed: {
|
||||
newsList(){
|
||||
//Return news amount depending on widget width and size
|
||||
let quantity = this.width;
|
||||
name: "WidgetsNews",
|
||||
components: { BsModal },
|
||||
data: () => ({
|
||||
allNewsList: [],
|
||||
singleNews: {},
|
||||
}),
|
||||
mixins: [AbstractWidget],
|
||||
computed: {
|
||||
newsList() {
|
||||
//Return news amount depending on widget width and size
|
||||
let quantity = this.width;
|
||||
|
||||
if (this.width === 1) {
|
||||
quantity = this.height === 1 ? 4 : 10;
|
||||
}
|
||||
if (this.width === 1) {
|
||||
quantity = this.height === 1 ? 4 : 10;
|
||||
}
|
||||
|
||||
return this.allNewsList.slice(0, quantity);
|
||||
},
|
||||
placeHolderImgURL: function() {
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + 'skin/images/fh_technikum_wien_illustration_klein.png';
|
||||
}
|
||||
},
|
||||
created(){
|
||||
axios
|
||||
.get(this.apiurl + '/dashboard/Api/getNews', {params: {limit: MAX_LOADED_NEWS}})
|
||||
.then(res => { this.allNewsList = res.data })
|
||||
.catch(err => { console.error('ERROR: ', err.response.data) });
|
||||
return this.allNewsList.slice(0, quantity);
|
||||
},
|
||||
placeHolderImgURL: function () {
|
||||
return (
|
||||
FHC_JS_DATA_STORAGE_OBJECT.app_root +
|
||||
"skin/images/fh_technikum_wien_illustration_klein.png"
|
||||
);
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.$fhcApi.factory.cms
|
||||
.news(MAX_LOADED_NEWS)
|
||||
.then((res) => {
|
||||
this.allNewsList = res.data;
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("ERROR: ", err.response.data);
|
||||
});
|
||||
|
||||
this.$emit('setConfig', false);
|
||||
},
|
||||
methods: {
|
||||
setSingleNews(singleNews){
|
||||
this.singleNews = singleNews;
|
||||
this.$refs.newsModal.show();
|
||||
}
|
||||
},
|
||||
template: `<div class="widgets-news w-100 h-100">
|
||||
<div class="d-flex flex-column h-100">
|
||||
this.$emit("setConfig", false);
|
||||
},
|
||||
methods: {
|
||||
contentURI: function (content_id) {
|
||||
return (
|
||||
FHC_JS_DATA_STORAGE_OBJECT.app_root +
|
||||
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
|
||||
"/CisVue/Cms/content/" +
|
||||
content_id
|
||||
);
|
||||
},
|
||||
allNewsURI: function () {
|
||||
return (
|
||||
FHC_JS_DATA_STORAGE_OBJECT.app_root +
|
||||
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
|
||||
"/CisVue/Cms/news"
|
||||
);
|
||||
},
|
||||
setSingleNews(singleNews) {
|
||||
this.singleNews = singleNews;
|
||||
this.$refs.newsModal.show();
|
||||
},
|
||||
},
|
||||
template: /*html*/ `<div class="widgets-news w-100 h-100">
|
||||
|
||||
<div class="d-flex flex-column h-100 ">
|
||||
<div class="d-flex">
|
||||
<header><b>Top News</b></header>
|
||||
<a href="#allNewsModal" data-bs-toggle="modal" class="ms-auto mb-2">
|
||||
<i class="fa fa-arrow-up-right-from-square me-1"></i>Alle News</a>
|
||||
<header><b>{{$p.t('news','topNews')}}</b></header>
|
||||
<a :href="allNewsURI()" class="ms-auto mb-2">
|
||||
<i class="fa fa-arrow-up-right-from-square me-1"></i>{{$p.t('news','allNews')}}</a>
|
||||
</div>
|
||||
<div v-if="width == 1">
|
||||
<div v-for="news in newsList" :key="news.id" class="mt-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<a href="#newsModal" class="stretched-link" @click="setSingleNews(news)">{{ news.betreff }}</a><br>
|
||||
<div class="h-100 overflow-scroll" v-if="width == 1">
|
||||
<div v-for="news in newsList" :key="news.id" class="mt-2">
|
||||
<div class="card">
|
||||
<div class=" card-body">
|
||||
<a :href="contentURI(news.content_id)" class="stretched-link" >{{ news.content_obj.betreff?news.content_obj.betreff:getDate(news.insertamum) }}</a><br>
|
||||
<span class="small text-muted">{{ formatDateTime(news.insertamum) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="width > 1 && height === 1" class="h-100" :class="'row row-cols-' + width">
|
||||
<div v-for="news in newsList" :key="news.id">
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<a href="#newsModal" class="card-title h5 stretched-link" @click="setSingleNews(news)">{{ news.betreff }}</a><br>
|
||||
<span class="small text-muted">{{ formatDateTime(news.insertamum) }} </span>
|
||||
<p class="card-text pt-3" style="overflow: hidden; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical;">{{ news.text }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="h-100" v-for="news in newsList" :key="news.id">
|
||||
|
||||
<div class="news-content h-100" :style="'--news-widget-height: '+height" ref="htmlContent" v-html="news.content_obj.content"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="h-100" :class="'row row-cols-' + width">
|
||||
<div v-for="news in newsList" :key="news.id">
|
||||
<div class="card h-100">
|
||||
<img :src="placeHolderImgURL" class="card-img-top">
|
||||
<div class="card-footer"><span class="card-subtitle small text-muted">{{ formatDateTime(news.insertamum) }}</span></div>
|
||||
<div class="card-body">
|
||||
<a href="#newsModal" class="card-title h5 stretched-link" @click="setSingleNews(news)">{{ news.betreff }}</a><br>
|
||||
<p class="card-text pt-3">{{ news.text }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="h-100" v-for="news in newsList" :key="news.id">
|
||||
|
||||
<div class="news-content h-100" :style="'--news-widget-height: '+height" ref="htmlContent" v-html="news.content_obj.content"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- News Modal -->
|
||||
<BsModal ref="newsModal" id="newsModal" dialog-class="modal-lg">
|
||||
<template #title>
|
||||
<div class="row">
|
||||
<div class="col-5"><img :src="placeHolderImgURL" class="img-fluid rounded-start"></div>
|
||||
<div class="col-7 d-flex align-items-end">
|
||||
<p>{{ singleNews.betreff }}<br><small class="text-muted">{{ formatDateTime(singleNews.insertamum) }}</small></p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #default>{{ singleNews.text }}</template>
|
||||
</BsModal>
|
||||
|
||||
<!-- All News Modal -->
|
||||
<BsModal ref="allNewsModal" id="allNewsModal" dialog-class="modal-fullscreen">
|
||||
<template #title>Alle News</template>
|
||||
<template #default>
|
||||
<div class="row row-cols-md-2 row-cols-lg-3 row-cols-xl-5 g-4 h-100 px-5">
|
||||
<div v-for="news in allNewsList" :key="news.id">
|
||||
<div class="card h-100">
|
||||
<img :src="placeHolderImgURL" class="card-img-top">
|
||||
<div class="card-footer"><span class="card-subtitle small">{{ formatDateTime(news.insertamum) }}</span></div>
|
||||
<div class="card-body">
|
||||
<a href="" class="card-title h5 stretched-link" @click="setSingleNews1(news)">{{ news.betreff }}</a><br>
|
||||
<p class="card-text">{{ news.text }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</BsModal>`
|
||||
}
|
||||
</div>`,
|
||||
};
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import Phrasen from '../../mixins/Phrasen.js';
|
||||
import AbstractWidget from './Abstract.js';
|
||||
import FhcCalendar from '../Calendar/Calendar.js';
|
||||
import LvUebersicht from '../Cis/Mylv/LvUebersicht.js';
|
||||
import ContentModal from '../Cis/Cms/ContentModal.js';
|
||||
|
||||
export default {
|
||||
mixins: [
|
||||
@@ -8,17 +10,23 @@ export default {
|
||||
AbstractWidget
|
||||
],
|
||||
components: {
|
||||
FhcCalendar
|
||||
FhcCalendar,
|
||||
LvUebersicht,
|
||||
ContentModal,
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
stunden: [],
|
||||
minimized: true,
|
||||
events: null,
|
||||
currentDay: new Date()
|
||||
currentDay: new Date(),
|
||||
roomInfoContentID: null,
|
||||
ort_kurzbz: null,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
||||
currentEvents() {
|
||||
return (this.events || []).filter(evt => evt.end < this.dayAfterCurrentDay && evt.start >= this.currentDay);
|
||||
},
|
||||
@@ -29,12 +37,54 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
showRoomInfoModal: function(ort_kurzbz){
|
||||
|
||||
// getting the content_id of the ort_kurzbz
|
||||
this.$fhcApi.factory.ort.getContentID(ort_kurzbz).then(res =>{
|
||||
this.roomInfoContentID = res.data;
|
||||
this.ort_kurzbz = ort_kurzbz;
|
||||
|
||||
// only showing the modal after vue was able to set the reactive data
|
||||
Vue.nextTick(()=>{this.$refs.contentModal.show();});
|
||||
|
||||
|
||||
}).catch(err =>{
|
||||
console.err(err);
|
||||
this.ort_kurzbz = null;
|
||||
this.roomInfoContentID = null;
|
||||
});
|
||||
|
||||
},
|
||||
showLvUebersicht: function (event){
|
||||
|
||||
this.$refs.lvUebersicht.lehreinheit = event.lehreinheit_id;
|
||||
this.$refs.lvUebersicht.lv = event.title;
|
||||
this.$refs.lvUebersicht.stg = event.stg_typ + event.stg_kurzbz + (event.verband?'-' + event.verband:'' );
|
||||
this.$refs.lvUebersicht.show();
|
||||
},
|
||||
|
||||
selectDay(day) {
|
||||
this.currentDay = day;
|
||||
this.minimized = true;
|
||||
},
|
||||
// this function was the alternative of showing the room information in the content component instead of showing the room information inside a modal
|
||||
showRoomInfo: function($ort_kurzbz){
|
||||
|
||||
this.$fhcApi.factory.ort.getContentID($ort_kurzbz).then(res =>{
|
||||
|
||||
window.location.href = FHC_JS_DATA_STORAGE_OBJECT.app_root +
|
||||
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
|
||||
"/CisHtml/Cms/content/" + res.data;
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
},
|
||||
created() {
|
||||
|
||||
|
||||
|
||||
this.$emit('setConfig', false);
|
||||
axios
|
||||
.get(this.apiurl + '/components/Cis/Stundenplan/Stunden').then(res => {
|
||||
@@ -59,19 +109,23 @@ export default {
|
||||
})
|
||||
.catch(err => { console.error('ERROR: ', err.response.data) });
|
||||
},
|
||||
template: `
|
||||
template: /*html*/`
|
||||
<div class="dashboard-widget-stundenplan d-flex flex-column h-100">
|
||||
<lv-uebersicht ref="lvUebersicht" />
|
||||
<content-modal :contentID="roomInfoContentID" :ort_kurzbz="" dialogClass="modal-lg" ref="contentModal"/>
|
||||
<fhc-calendar :initial-date="currentDay" class="border-0" class-header="p-0" @select:day="selectDay" v-model:minimized="minimized" :events="events" no-week-view :show-weeks="false" />
|
||||
<div v-show="minimized" class="flex-grow-1 overflow-scroll">
|
||||
<div v-if="events === null" class="d-flex h-100 justify-content-center align-items-center">
|
||||
<i class="fa-solid fa-spinner fa-pulse fa-3x"></i>
|
||||
</div>
|
||||
<div v-else-if="currentEvents.length" class="list-group list-group-flush">
|
||||
<div class="" v-for="evt in currentEvents" :key="evt.id" class="list-group-item small" :style="{'background-color':evt.color}">
|
||||
<div role="button" @click="showLvUebersicht(evt)" class="" v-for="evt in currentEvents" :key="evt.id" class="list-group-item small" :style="{'background-color':evt.color}">
|
||||
<b>{{evt.title}}</b>
|
||||
<br>
|
||||
<small class="d-flex w-100 justify-content-between">
|
||||
<span>{{evt.ort_kurzbz}}</span>
|
||||
<!-- event modifier stop to prevent opening the modal for the lv Uebersicht when clicking on the ort_kurzbz -->
|
||||
<!-- old event: showRoomInfo(evt.ort_kurzbz) -->
|
||||
<span @click.stop="showRoomInfoModal(evt.ort_kurzbz)" style="text-decoration:underline" type="button">{{evt.ort_kurzbz}}</span>
|
||||
<span>{{evt.start.toLocaleTimeString(undefined, {hour:'numeric',minute:'numeric'})}}-{{evt.end.toLocaleTimeString(undefined, {hour:'numeric',minute:'numeric'})}}</span>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
Executable → Regular
+61
@@ -33313,6 +33313,67 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
// NEWS PHRASEN ---------------------------------------------------------------------------
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'news',
|
||||
'phrase' => 'allNews',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Alle News',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'All News',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'news',
|
||||
'phrase' => 'topNews',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Top Nachrichten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Top News',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'news',
|
||||
'phrase' => 'noSubject',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Kein Betreff vorhanden',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'No Subject available',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user