diff --git a/application/controllers/api/frontend/v1/AuthInfo.php b/application/controllers/api/frontend/v1/AuthInfo.php new file mode 100644 index 000000000..1362aee18 --- /dev/null +++ b/application/controllers/api/frontend/v1/AuthInfo.php @@ -0,0 +1,52 @@ +. + */ + +if (!defined('BASEPATH')) exit('No direct script access allowed'); + +class AuthInfo extends FHCAPI_Controller +{ + + /** + * Object initialization + */ + public function __construct() + { + parent::__construct([ + 'getAuthUID' => self::PERM_LOGGED, + ]); + + $this->uid = getAuthUID(); + $this->pid = getAuthPersonID(); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * returns the uid of the currently logged in user + * @access public + * + */ + public function getAuthUID() + { + $this->terminateWithSuccess(['uid'=>$this->uid]); + } + + +} + diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 22a7ca604..0ea5b9328 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -181,7 +181,7 @@ class Studiensemester_model extends DB_Model $query = " SELECT studiensemester_kurzbz, start, ende FROM public.tbl_studiensemester - WHERE ( ende >= ?::date AND start <= ?::date ) OR ( ende >= ?::date + '45 days'::interval AND start <= ?::date + '45 days'::interval ) + WHERE ( ende >= ?::date AND start <= ?::date ) OR ( ende >= ?::date + '-45 days'::interval AND start <= ?::date + '-45 days'::interval ) ORDER BY start DESC LIMIT 1"; diff --git a/application/views/Cis/InfoTerminal.php b/application/views/Cis/InfoTerminal.php index e25368286..ed05d1857 100644 --- a/application/views/Cis/InfoTerminal.php +++ b/application/views/Cis/InfoTerminal.php @@ -10,7 +10,7 @@ $this->load->view( ); ?> - load->view('templates/CISVUE-Footer', $includesArray); ?> diff --git a/cis/infoterminal/index.php b/cis/infoterminal/index.php index 852526108..1b4c7d637 100644 --- a/cis/infoterminal/index.php +++ b/cis/infoterminal/index.php @@ -38,6 +38,14 @@ require_once('../../include/authentication.class.php'); require_once('../../include/addon.class.php'); require_once('../../include/'.EXT_FKT_PATH.'/serviceterminal.inc.php'); +// 2025-02-05 ma0080 add query parameter to force login e.g. when used in iframe in CIS4.0 begin +if( isset($_GET['forcelogin']) && !isset($_SERVER['PHP_AUTH_USER']) ) { + header('WWW-Authenticate: Basic Realm="' . AUTH_NAME . '"'); + http_response_code(401); + die(); +} +// 2025-02-05 ma0080 add query parameter to force login e.g. when used in iframe in CIS4.0 end + if (!$db = new basis_db()) $db=false; diff --git a/public/js/api/authinfo.js b/public/js/api/authinfo.js new file mode 100644 index 000000000..618cf2e26 --- /dev/null +++ b/public/js/api/authinfo.js @@ -0,0 +1,10 @@ + +export default { + getAuthUID() { + return this.$fhcApi.get( + '/api/frontend/v1/AuthInfo/getAuthUID', + { } + ); + }, + +}; \ No newline at end of file diff --git a/public/js/api/fhcapifactory.js b/public/js/api/fhcapifactory.js index 04744409b..378d979ab 100644 --- a/public/js/api/fhcapifactory.js +++ b/public/js/api/fhcapifactory.js @@ -35,7 +35,8 @@ import lehre from "./lehre.js"; import addons from "./addons.js"; import studiengang from "./studiengang.js"; import menu from "./menu.js"; -import dashboard from "./dashboard"; +import dashboard from "./dashboard.js"; +import authinfo from "./authinfo.js"; export default { search, @@ -59,4 +60,5 @@ export default { addons, studiengang, menu, + authinfo, }; diff --git a/public/js/components/Cis/Stundenplan/Stundenplan.js b/public/js/components/Cis/Stundenplan/Stundenplan.js index a8b7d0c99..d35c9c536 100644 --- a/public/js/components/Cis/Stundenplan/Stundenplan.js +++ b/public/js/components/Cis/Stundenplan/Stundenplan.js @@ -17,8 +17,12 @@ export const Stundenplan = { studiensemester_kurzbz:null, studiensemester_start:null, studiensemester_ende:null, + uid:null, } }, + props: [ + "viewData", + ], watch: { weekFirstDay: { handler: async function (newValue) { @@ -31,22 +35,19 @@ export const Stundenplan = { immediate: true, } }, - props: [ - "viewData", - ], components: { FhcCalendar, LvModal, LvMenu, LvInfo }, computed:{ downloadLinks: function(){ - if(!this.studiensemester_start || !this.studiensemester_ende)return; + if(!this.studiensemester_start || !this.studiensemester_ende || !this.uid )return; let start = new Date(this.studiensemester_start); start = Math.floor(start.getTime()/1000); let ende = new Date(this.studiensemester_ende); ende = Math.floor(ende.getTime() / 1000); - let download_link = (format, version = "", target = "") => `${FHC_JS_DATA_STORAGE_OBJECT.app_root}cis/private/lvplan/stpl_kalender.php?type=student&pers_uid=${this.viewData.uid}&begin=${start}&ende=${ende}&format=${format}${version ? '&version=' + version : ''}${target ? '&target=' + target : ''}`; - return [{ title: "excel", link: download_link('excel') }, { title: "csv", link: download_link('csv') }, { title: "ical1", link: download_link('ical', '1', 'ical') }, { title: "ical2", link: download_link('ical', '2', 'ical') }]; + let download_link = (format, version = "", target = "") => `${FHC_JS_DATA_STORAGE_OBJECT.app_root}cis/private/lvplan/stpl_kalender.php?type=student&pers_uid=${this.uid}&begin=${start}&ende=${ende}&format=${format}${version ? '&version=' + version : ''}${target ? '&target=' + target : ''}`; + return [{ title: "excel", icon: 'fa-solid fa-file-excel', link: download_link('excel') }, { title: "csv", icon: 'fa-solid fa-file-csv', link: download_link('csv') }, { title: "ical1", icon: 'fa-regular fa-calendar', link: download_link('ical', '1', 'ical') }, { title: "ical2", icon: 'fa-regular fa-calendar', link: download_link('ical', '2', 'ical') }]; }, lv_id() { // computed so we can theoretically change path/lva selection and reload without page refresh const pathParts = window.location.pathname.split('/').filter(Boolean); @@ -149,6 +150,10 @@ export const Stundenplan = { }, created() { + this.$fhcApi.factory.authinfo.getAuthUID().then((res) => res.data) + .then(data=>{ + this.uid = data.uid; + }) this.loadEvents(); }, beforeUnmount() { @@ -160,8 +165,13 @@ export const Stundenplan = {