mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-14 13:32:53 +00:00
Compare commits
29 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b217681ee5 | |||
| 7841a73fc0 | |||
| 2064008f9e | |||
| 19b9906c86 | |||
| 2c3913a763 | |||
| 9111edf442 | |||
| b1c47da3c3 | |||
| 67eb238876 | |||
| a139cc8d2e | |||
| 35ecbdefa8 | |||
| 5f0b1ace51 | |||
| b891d8baa5 | |||
| 5dbcf9ce70 | |||
| c26db6cc40 | |||
| 8548b93ddc | |||
| bdc4782e9d | |||
| 0583990870 | |||
| 5972764731 | |||
| 2933a525c1 | |||
| 5694ba7325 | |||
| bbec7de8de | |||
| 1d14e58d8f | |||
| db2beeb51f | |||
| e4f43cc820 | |||
| fe195f4080 | |||
| 335753be8c | |||
| 8862f050e8 | |||
| 0a4906c5ac | |||
| 29f9b226ab |
@@ -108,10 +108,8 @@ class LvPlan extends FHCAPI_Controller
|
||||
$result = $this->stundenplanlib->getEventsUser($start_date, $end_date, $uid);
|
||||
$lvplanEvents = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if ($uid && $uid !== getAuthUID()) {
|
||||
// fetching moodle events
|
||||
$moodleEvents = $this->fetchMoodleEvents($start_date, $end_date, $uid);
|
||||
}
|
||||
// fetching moodle events
|
||||
$moodleEvents = $this->fetchMoodleEvents($start_date, $end_date, $uid);
|
||||
|
||||
// fetching ferien events
|
||||
$ferienEvents = $this->fetchFerienEvents($start_date, $end_date, $uid);
|
||||
@@ -420,6 +418,10 @@ class LvPlan extends FHCAPI_Controller
|
||||
*/
|
||||
private function fetchMoodleEvents($start_date, $end_date, $uid = null)
|
||||
{
|
||||
if ($uid && $uid !== getAuthUID()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$this->load->config('calendar');
|
||||
|
||||
$tz = new DateTimeZone($this->config->item('timezone'));
|
||||
|
||||
@@ -263,6 +263,59 @@ class ProfilLib{
|
||||
$element->mailto = "mailto:" . $element->gruppe_kurzbz . "@" . DOMAIN;
|
||||
return $element;
|
||||
}, $mailverteiler_res);
|
||||
|
||||
$this->ci->load->model("crm/Student_model", "StudentModel");
|
||||
$this->ci->StudentModel->addJoin("tbl_benutzer", "tbl_benutzer.uid = tbl_student.student_uid");
|
||||
$this->ci->StudentModel->addJoin("tbl_person", "tbl_benutzer.person_id = tbl_person.person_id");
|
||||
$this->ci->StudentModel->addJoin("tbl_studiengang", "tbl_student.studiengang_kz = tbl_studiengang.studiengang_kz");
|
||||
$this->ci->StudentModel->addSelect("matr_nr, semester, verband, gruppe, kurzbzlang");
|
||||
|
||||
$studentResult = $this->ci->StudentModel->loadWhere(["student_uid" => $uid]);
|
||||
if (isError($studentResult)) {
|
||||
return error(getData($studentResult));
|
||||
}
|
||||
|
||||
$studentResultData = getData($studentResult);
|
||||
$studentData = null;
|
||||
if (is_array($studentResultData) && count($studentResultData)) {
|
||||
$studentData = $studentResultData[0];
|
||||
}
|
||||
|
||||
if ($studentData && $studentData->matr_nr) {
|
||||
$this->ci->load->library("phrasesLib", ["profil"], "phrases");
|
||||
$standardCourseVerteiler = trim($studentData->kurzbzlang) . "_STD";
|
||||
$mailverteiler_res[] = [
|
||||
"beschreibung" => $this->ci->phrases->t('profil', 'alleStudentenVon') . " " . $standardCourseVerteiler,
|
||||
"gruppe_kurzbz" => $standardCourseVerteiler,
|
||||
"mailto" => "mailto:" . strtolower($standardCourseVerteiler) . "@" . DOMAIN,
|
||||
];
|
||||
|
||||
$semesterVerteiler = trim($studentData->kurzbzlang) . trim($studentData->semester);
|
||||
$mailverteiler_res[] = [
|
||||
"beschreibung" => $this->ci->phrases->t('profil', 'alleStudentenVon') . " " . $semesterVerteiler,
|
||||
"gruppe_kurzbz" => $semesterVerteiler,
|
||||
"mailto" => "mailto:" . strtolower($semesterVerteiler) . "@" . DOMAIN,
|
||||
];
|
||||
|
||||
if ($studentData->verband && strlen(trim($studentData->verband))) {
|
||||
$verbandVerteiler = $semesterVerteiler . trim($studentData->verband);
|
||||
$mailverteiler_res[] = [
|
||||
"beschreibung" => $this->ci->phrases->t('profil', 'alleStudentenVon') . " " . $verbandVerteiler,
|
||||
"gruppe_kurzbz" => $verbandVerteiler,
|
||||
"mailto" => "mailto:" . strtolower($verbandVerteiler) . "@" . DOMAIN,
|
||||
];
|
||||
|
||||
if ($studentData->gruppe && strlen(trim($studentData->gruppe))) {
|
||||
$gruppeVerteiler = $verbandVerteiler . trim($studentData->gruppe);
|
||||
$mailverteiler_res[] = [
|
||||
"beschreibung" => $this->ci->phrases->t('profil', 'alleStudentenVon') . " " . $gruppeVerteiler,
|
||||
"gruppe_kurzbz" => $gruppeVerteiler,
|
||||
"mailto" => "mailto:" . strtolower($gruppeVerteiler) . "@" . DOMAIN,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $mailverteiler_res;
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,47 @@ class Studiensemester_model extends DB_Model
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz, $limit));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the current study semester and the previous semesters of the same type (SS/WS).
|
||||
*
|
||||
* Example:
|
||||
* - SS2026, limit 3: SS2026, SS2025, SS2024
|
||||
* - WS2025, limit 2: WS2025, WS2024
|
||||
*
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param $limit
|
||||
*/
|
||||
public function getPreviousSameSemesterFrom($studiensemester_kurzbz, $limit = 1)
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
studiensemester_kurzbz,
|
||||
start,
|
||||
ende
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
SUBSTRING(studiensemester_kurzbz FROM 1 FOR 2) = SUBSTRING(? FROM 1 FOR 2)
|
||||
AND start <= (
|
||||
SELECT start
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = ?
|
||||
)
|
||||
ORDER BY
|
||||
start DESC
|
||||
LIMIT ?
|
||||
';
|
||||
|
||||
return $this->execQuery($qry,
|
||||
[
|
||||
$studiensemester_kurzbz,
|
||||
$studiensemester_kurzbz,
|
||||
$limit
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* getNearest
|
||||
*/
|
||||
|
||||
@@ -260,7 +260,6 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($query, $parameters_array);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get active Kompetenzfeldleitung bei UID.
|
||||
*
|
||||
@@ -296,7 +295,6 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($query, $parameters_array);
|
||||
}
|
||||
|
||||
|
||||
public function insertBenutzerfunktion($Json)
|
||||
{
|
||||
unset($Json['benutzerfunktion_id']);
|
||||
|
||||
@@ -350,7 +350,7 @@ class benutzerberechtigung extends basis_db
|
||||
};
|
||||
$roles = defined('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES')
|
||||
? implode(', ', array_map($mapfunc, unserialize(STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES)))
|
||||
: 'NO_DEFINED_ROLE';
|
||||
: "'NO_DEFINED_ROLE'";
|
||||
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
|
||||
@@ -257,9 +257,14 @@ const app = Vue.createApp({
|
||||
provide() {
|
||||
return { // provide injectable & watchable language property
|
||||
language: Vue.computed(() => this.$p.user_language),
|
||||
isMobile: Vue.computed(() => this.windowWidth < 767),
|
||||
isMobile: Vue.computed(() => this.isMobile),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isMobile: function() {
|
||||
return (this.windowWidth < 767);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
isInternalRoute(href) {
|
||||
const internalBase = window.location.origin
|
||||
|
||||
@@ -433,6 +433,7 @@ export default {
|
||||
:label="$p.t('wawi/ausgegebenam')"
|
||||
name="ausgegebenam"
|
||||
v-model="formData.ausgegebenam"
|
||||
model-type="yyyy-MM-dd"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
text-input
|
||||
@@ -449,6 +450,7 @@ export default {
|
||||
:label="$p.t('wawi/retouram')"
|
||||
name="retouram"
|
||||
v-model="formData.retouram"
|
||||
model-type="yyyy-MM-dd"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
text-input
|
||||
|
||||
@@ -551,6 +551,7 @@ export default {
|
||||
container-class="mb-3 col-3"
|
||||
type="DatePicker"
|
||||
v-model="formData.datum_von"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="datum_von"
|
||||
:label="$p.t('ui/from') + ' *'"
|
||||
auto-apply
|
||||
@@ -566,6 +567,7 @@ export default {
|
||||
container-class="mb-3 col-3"
|
||||
type="DatePicker"
|
||||
v-model="formData.datum_bis"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="datum_bis"
|
||||
:label="$p.t('global/bis')"
|
||||
auto-apply
|
||||
|
||||
+1
@@ -470,6 +470,7 @@ export default {
|
||||
:label="$p.t('admission', 'anmeldundRtAm')"
|
||||
type="DatePicker"
|
||||
v-model="formData.anmeldedatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
text-input
|
||||
|
||||
@@ -293,6 +293,7 @@ export default {
|
||||
:label="$p.t('person', 'geburtsdatum')"
|
||||
type="DatePicker"
|
||||
v-model="data.gebdatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="gebdatum"
|
||||
:clearable="false"
|
||||
no-today
|
||||
|
||||
@@ -103,6 +103,7 @@ export default {
|
||||
<form-input
|
||||
type="DatePicker"
|
||||
v-model="formData.nachgereicht_am"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="nachgereicht_am"
|
||||
:label="$p.t('dokumente/nachreichungAm')"
|
||||
auto-apply
|
||||
|
||||
@@ -27,7 +27,7 @@ export default {
|
||||
return {
|
||||
filter: false,
|
||||
studiengang_kz: false,
|
||||
counterdate: new Date()
|
||||
counterdate: luxon.DateTime.now().setZone(FHC_JS_DATA_STORAGE_OBJECT.timezone).toISODate()
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -259,6 +259,7 @@ export default {
|
||||
<form-input
|
||||
type="DatePicker"
|
||||
v-model="counterdate"
|
||||
model-type="yyyy-MM-dd"
|
||||
input-group
|
||||
:enable-time-picker="false"
|
||||
text-input
|
||||
|
||||
@@ -79,6 +79,7 @@ export default {
|
||||
<form-input
|
||||
type="DatePicker"
|
||||
v-model="data.buchungsdatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="buchungsdatum"
|
||||
:label="$p.t('konto/buchungsdatum')"
|
||||
:enable-time-picker="false"
|
||||
|
||||
@@ -88,7 +88,7 @@ export default {
|
||||
this.data = {
|
||||
buchungstyp_kurzbz: '',
|
||||
betrag: '-0.00',
|
||||
buchungsdatum: new Date(),
|
||||
buchungsdatum: luxon.DateTime.now().setZone(FHC_JS_DATA_STORAGE_OBJECT.timezone).toISODate(),
|
||||
buchungstext: '',
|
||||
mahnspanne: 30,
|
||||
studiensemester_kurzbz: this.currentSemester,
|
||||
@@ -154,6 +154,7 @@ export default {
|
||||
<form-input
|
||||
type="DatePicker"
|
||||
v-model="data.buchungsdatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="buchungsdatum"
|
||||
:label="$p.t('konto/buchungsdatum')"
|
||||
:enable-time-picker="false"
|
||||
|
||||
@@ -467,6 +467,7 @@ export default {
|
||||
:label="$p.t('ui', 'von')"
|
||||
type="DatePicker"
|
||||
v-model="formData.von"
|
||||
model-type="yyyy-MM-dd"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
text-input
|
||||
@@ -501,6 +502,7 @@ export default {
|
||||
:label="$p.t('global', 'bis')"
|
||||
type="DatePicker"
|
||||
v-model="formData.bis"
|
||||
model-type="yyyy-MM-dd"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
text-input
|
||||
|
||||
@@ -325,6 +325,7 @@ export default {
|
||||
:label="$p.t('infocenter', 'zgvDatum')"
|
||||
type="DatePicker"
|
||||
v-model="data.zgvdatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="zgvdatum"
|
||||
no-today
|
||||
auto-apply
|
||||
@@ -389,6 +390,7 @@ export default {
|
||||
:label="$p.t('lehre', 'zgvMasterDatum')"
|
||||
type="DatePicker"
|
||||
v-model="data.zgvmadatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="zgvmadatum"
|
||||
no-today
|
||||
auto-apply
|
||||
@@ -454,6 +456,7 @@ export default {
|
||||
:label="$p.t('lehre', 'zgvDoktorDatum')"
|
||||
type="DatePicker"
|
||||
v-model="data.zgvdoktordatum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="zgvdoktordatum"
|
||||
no-today
|
||||
auto-apply
|
||||
|
||||
@@ -135,6 +135,11 @@ export default{
|
||||
.then(result => {
|
||||
this.statusNew = false;
|
||||
this.formData = result.data;
|
||||
//to show Date in correct format in the modal (is timestamp in database)
|
||||
if (this.formData.bewerbung_abgeschicktamum) {
|
||||
this.formData.bewerbung_abgeschicktamum =
|
||||
this.formData.bewerbung_abgeschicktamum.substring(0, 10);
|
||||
}
|
||||
this.originalDatum = new Date(result.data.datum);
|
||||
return prestudent;
|
||||
})
|
||||
@@ -276,6 +281,7 @@ export default{
|
||||
container-class="mb-3"
|
||||
type="DatePicker"
|
||||
v-model="formData.datum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="datum"
|
||||
:label="$p.t('global/datum')"
|
||||
auto-apply
|
||||
@@ -291,6 +297,7 @@ export default{
|
||||
container-class="mb-3"
|
||||
type="DatePicker"
|
||||
v-model="formData.bestaetigtam"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="bestaetigtam"
|
||||
:label="$p.t('lehre/bestaetigt_am')"
|
||||
auto-apply
|
||||
@@ -306,6 +313,7 @@ export default{
|
||||
container-class="mb-3"
|
||||
type="DatePicker"
|
||||
v-model="formData.bewerbung_abgeschicktamum"
|
||||
model-type="yyyy-MM-dd"
|
||||
name="bewerbung_abgeschicktamum"
|
||||
:label="$p.t('lehre/bewerbung_abgeschickt_am')"
|
||||
auto-apply
|
||||
|
||||
@@ -285,6 +285,7 @@ export default {
|
||||
uid="stv-list-new-gebdatum"
|
||||
name="gebdatum"
|
||||
v-model="formDataPerson['gebdatum']"
|
||||
model-type="yyyy-MM-dd"
|
||||
:disabled="!!person"
|
||||
@update:model-value="loadSuggestions"
|
||||
text-input
|
||||
|
||||
@@ -218,15 +218,23 @@ export const CoreFilterCmpt = {
|
||||
},
|
||||
columnsForFilter() {
|
||||
if (!this.filteredColumns || !this.datasetMetadata) return [];
|
||||
const localizedColumnTitles = this.tabulator.getLang().columns;
|
||||
|
||||
const isTabulatorLocalized = !!this.$props.tabulatorOptions.locale;
|
||||
const filterTitles = this.filteredColumns.reduce((a, c) => {
|
||||
a[c.field] =
|
||||
isTabulatorLocalized && localizedColumnTitles[c.field]
|
||||
? localizedColumnTitles[c.field]
|
||||
: c.title;
|
||||
return a;
|
||||
}, {});
|
||||
|
||||
let filterTitles;
|
||||
if (isTabulatorLocalized) {
|
||||
const localizedColumnTitles = this.tabulator.getLang().columns;
|
||||
filterTitles = this.filteredColumns.reduce((a, c) => {
|
||||
a[c.field] = localizedColumnTitles[c.field];
|
||||
return a;
|
||||
}, {});
|
||||
} else {
|
||||
filterTitles = this.filteredColumns.reduce((a, c) => {
|
||||
a[c.field] = c.title;
|
||||
return a;
|
||||
}, {});
|
||||
}
|
||||
|
||||
return this.datasetMetadata.map((el) => ({
|
||||
...el,
|
||||
...{ title: filterTitles[el.name] },
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
@@ -29742,6 +29742,26 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'profil',
|
||||
'phrase' => 'alleStudentenVon',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Alle Student*innen aus',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'All students from',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
//Profil Phrasen ende
|
||||
// LvPlan Phrasen start
|
||||
array(
|
||||
|
||||
Reference in New Issue
Block a user