Merge branch 'feature-25999/C4_cleanup' into merge_FHC4_C4

This commit is contained in:
Harald Bamberger
2025-02-12 17:58:37 +01:00
14 changed files with 248 additions and 51 deletions
@@ -567,7 +567,7 @@ class Profil extends FHCAPI_Controller
*/
private function getStudentInfo($uid)
{
$this->StudentModel->addSelect(['tbl_studiengang.bezeichnung as studiengang', 'tbl_student.semester', 'tbl_student.verband', 'tbl_student.gruppe', 'tbl_student.matrikelnr as personenkennzeichen']);
$this->StudentModel->addSelect(['tbl_studiengang.bezeichnung as studiengang', 'tbl_studiengang.studiengang_kz as studiengang_kz', 'tbl_student.semester', 'tbl_student.verband', 'tbl_student.gruppe', 'tbl_student.matrikelnr as personenkennzeichen']);
$this->StudentModel->addJoin('tbl_studiengang', "tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz");
$student_res = $this->StudentModel->load([$uid]);
@@ -31,6 +31,7 @@ class Studgang extends FHCAPI_Controller
]);
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
// Loads phrases system
$this->loadPhrases([
@@ -43,7 +44,12 @@ class Studgang extends FHCAPI_Controller
// Public methods
public function getStudiengangInfo(){
// fetches the Studiengang Information which is used next the the news
$isMitarbeiter = $this->MitarbeiterModel->isMitarbeiter(getAuthUID());
if($isMitarbeiter) {
$this->terminateWithSuccess();
}
// fetches the Studiengang Information which is used next to the news
$studiengangInfo = $this->StudiengangModel->getStudiengangInfoForNews();
$studiengangInfo= $this->getDataOrTerminateWithError($studiengangInfo);
$this->terminateWithSuccess($studiengangInfo);
@@ -656,6 +656,7 @@ class Studiengang_model extends DB_Model
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('crm/Student_model', 'StudentModel');
$addEmailProperty= function(&$benutzerfunktionen){
if(count($benutzerfunktionen) && defined('DOMAIN'))
@@ -691,11 +692,6 @@ class Studiengang_model extends DB_Model
if (isError($student))
return error($student);
if (getData($student)) {
//TODO: if a mitarbeiter requests this site, empty data should be returned
if(count($student) == 0)
{
return new stdClass();
}
$student = current(getData($student));
$studiengang_kz = $student->studiengang_kz;
$semester = $student->semester;
@@ -10,7 +10,7 @@ $includesArray = array(
'primevue3' => true,
'customCSSs' => array(
'public/css/components/verticalsplit.css',
'public/css/components/searchbar.css',
'public/css/components/searchbar/searchbar.css',
'public/css/Fhc.css',
'public/css/components/dashboard.css',
'public/css/components/calendar.css',
@@ -38,4 +38,4 @@ $this->load->view('templates/CISVUE-Header', $includesArray);
:view-data='<?php echo json_encode($viewData) ?>'
></router-view>
</div>
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
-5
View File
@@ -131,11 +131,6 @@ const app = Vue.createApp({
},
});
router.beforeEach((to,from) => {
console.log('to', to)
console.log('from', from)
})
// kind of a bandaid for bad css on some pages to avoid horizontal scroll
setScrollbarWidth();
app.use(router);
@@ -198,6 +198,15 @@ export default {
editable() {
return this.data?.editAllowed ?? false;
},
getTelefonValue() {
if(this.data.standort_telefon?.kontakt) {
return this.data.standort_telefon.kontakt + " " + this.data.telefonklappe
} else if(this.data.standort_telefon) {
return this.data.standort_telefon + " " + this.data.telefonklappe
} else {
return this.data.telefonklappe
}
},
filteredEditData() {
return this.editDataFilter
? this.editData.data[this.editDataFilter]
@@ -226,13 +235,36 @@ export default {
}
return {
[`${this.$p.t('profil', 'Geburtsdatum')}`]: this.data.gebdatum,
[`${this.$p.t('profil', 'Geburtsort')}`]: this.data.gebort,
[`${this.$p.t('profil', 'Kurzzeichen')}`]: this.data.kurzbz,
[`${this.$p.t('profil', 'Telefon')}`]:
(this.data.standort_telefon ? this.data.standort_telefon.kontakt + " " + this.data.telefonklappe : this.data.telefonklappe),
[`${this.$p.t('profil', 'Büro')}`]: this.data.ort_kurzbz,
geburtsdatum: {
label: `${this.$p.t('profil','Geburtsdatum')}`,
value: this.data.gebdatum
},
geburtsort: {
label: `${this.$p.t('profil','Geburtsort')}`,
value: this.data.gebort
},
personenkennzeichen: {
label: `${this.$p.t('profil','Kurzzeichen')}`,
value: this.data.kurzbz
},
telefon: {
label: `${this.$p.t('profil','Telefon')}`,
value: this.getTelefonValue
},
office: {
label: `${this.$p.t('profil','Büro')}`,
value: this.data.ort_kurzbz
}
};
// return {
// [`${this.$p.t('profil', 'Geburtsdatum')}`]: this.data.gebdatum,
// [`${this.$p.t('profil', 'Geburtsort')}`]: this.data.gebort,
// [`${this.$p.t('profil', 'Kurzzeichen')}`]: this.data.kurzbz,
// [`${this.$p.t('profil', 'Telefon')}`]:
// (this.data.standort_telefon ? this.data.standort_telefon.kontakt + " " + this.data.telefonklappe : this.data.telefonklappe),
// [`${this.$p.t('profil', 'Büro')}`]: this.data.ort_kurzbz,
// };
},
},
@@ -93,6 +93,15 @@ export default {
},
computed: {
getTelefonValue() {
if(this.data.standort_telefon?.kontakt) {
return this.data.standort_telefon.kontakt + " " + this.data.telefonklappe
} else if(this.data.standort_telefon) {
return this.data.standort_telefon + " " + this.data.telefonklappe
} else {
return this.data.telefonklappe
}
},
editable() {
return this.data?.editAllowed ?? false;
},
@@ -122,15 +131,37 @@ export default {
if (!this.data) {
return {};
}
return {
[`${this.$p.t('profil', 'Geburtsdatum')}`]: this.data.gebdatum,
[`${this.$p.t('profil', 'Geburtsort')}`]: this.data.gebort,
[`${this.$p.t('profil', 'Kurzzeichen')}`]: this.data.kurzbz,
[`${this.$p.t('profil', 'Telefon')}`]:
(this.data.standort_telefon ? this.data.standort_telefon + " " + this.data.telefonklappe : this.data.telefonklappe),
[`${this.$p.t('profil', 'Büro')}`]: this.data.ort_kurzbz,
geburtsdatum: {
label: `${this.$p.t('profil','Geburtsdatum')}`,
value: this.data.gebdatum
},
geburtsort: {
label: `${this.$p.t('profil','Geburtsort')}`,
value: this.data.gebort
},
personenkennzeichen: {
label: `${this.$p.t('profil','Kurzzeichen')}`,
value: this.data.kurzbz
},
telefon: {
label: `${this.$p.t('profil','Telefon')}`,
value: this.getTelefonValue
},
office: {
label: `${this.$p.t('profil','Büro')}`,
value: this.data.ort_kurzbz
}
};
// return {
// [`${this.$p.t('profil', 'Geburtsdatum')}`]: this.data.gebdatum,
// [`${this.$p.t('profil', 'Geburtsort')}`]: this.data.gebort,
// [`${this.$p.t('profil', 'Kurzzeichen')}`]: this.data.kurzbz,
// [`${this.$p.t('profil', 'Telefon')}`]:
// (this.data.standort_telefon ? this.data.standort_telefon + " " + this.data.telefonklappe : this.data.telefonklappe),
// [`${this.$p.t('profil', 'Büro')}`]: this.data.ort_kurzbz,
// };
},
},
@@ -355,7 +355,6 @@ export const Profil = {
}
},
uid (newVal, oldVal) {
console.log('watch uid', newVal)
this.load()
}
},
@@ -10,7 +10,25 @@ export default {
type: String,
}
},
computed: {},
inject: [
'studiengang_kz', // inject info that should not be displayed
],
computed: {
getLinkGruppeListe() {
return this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value
+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''
},
getLinkVerbandListe() {
return this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value
+ '&verband=' + this.data.verband.value : ''
},
getLinkSemesterListe() {
return this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root
+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''
}
},
created() {
//TODO: check if data.Telefon is a valid telefon number to call before using it as a tel: link
},
@@ -19,16 +37,40 @@ export default {
<div class="card-header">{{title}}</div>
<div class="card-body">
<div class="gy-3 row">
<div v-for="(wert,bez) in data" class="col-md-6 col-sm-12 ">
<div v-for="(entry, key) in data" class="col-md-6 col-sm-12 ">
<div class="form-underline">
<div class="form-underline-titel">{{bez }}</div>
<div class="form-underline-titel">{{entry.label }}</div>
<!-- print Telefon link -->
<a v-if="bez=='Telefon'" :href="data.Telefon?'tel:'+data.Telefon:null" :class="{'form-underline-content':true,'text-decoration-none':!data.Telefon,'text-body':!data.Telefon}">{{wert?wert:'-'}}</a>
<a v-if="key == 'telefon'" :href="entry.value ?'tel:'+entry.value:null" :class="{'form-underline-content':true,'text-decoration-none':!entry.value,'text-body':!entry.value}">{{entry.value ?? '-'}}</a>
<!-- print semester link -->
<span v-else-if="key == 'semester' && entry.value" class="form-underline-content">
{{ entry.value }}
<a class="ms-auto mb-2" target="_blank" :href="getLinkSemesterListe">
<i class="fa fa-arrow-up-right-from-square me-1"></i>
</a>
</span>
<!-- print verband link -->
<span v-else-if="key =='verband' && entry.value" class="form-underline-content">
{{ entry.value }}
<a class="ms-auto mb-2" target="_blank" :href="getLinkVerbandListe">
<i class="fa fa-arrow-up-right-from-square me-1"></i>
</a>
</span>
<!-- print gruppe link -->
<span v-else-if="key == 'gruppe' && entry.value" class="form-underline-content">
{{ entry.value }}
<a class="ms-auto mb-2" target="_blank" :href="getLinkGruppeListe">
<i class="fa fa-arrow-up-right-from-square me-1"></i>
</a>
</span>
<!-- else print information -->
<span v-else class="form-underline-content">{{wert?wert:'-'}}</span>
<span v-else class="form-underline-content">{{ entry.value ?? '-'}}</span>
</div>
</div>
</div>
@@ -84,6 +84,11 @@ export default {
data: Object,
editData: Object,
},
provide() {
return {
studiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),
}
},
methods: {
betriebsmittelTableBuilt: function () {
@@ -172,14 +177,46 @@ export default {
}
return {
[`${this.$p.t('profil','Geburtsdatum')}`]: this.data.gebdatum,
[`${this.$p.t('profil', 'Geburtsort')}`]: this.data.gebort,
[`${this.$p.t('person', 'personenkennzeichen')}`]: this.data.personenkennzeichen,
[`${this.$p.t('lehre', 'studiengang')}`]: this.data.studiengang,
[`${this.$p.t('lehre', 'semester')}`]: this.data.semester,
[`${this.$p.t('lehre', 'lehrverband')}`]: this.data.verband,
[`${this.$p.t('lehre', 'gruppe')}`]: this.data.gruppe.trim(),
geburtsdatum: {
label: `${this.$p.t('profil','Geburtsdatum')}`,
value: this.data.gebdatum
},
geburtsort: {
label: `${this.$p.t('profil','Geburtsort')}`,
value: this.data.gebort
},
personenkennzeichen: {
label: `${this.$p.t('person','personenkennzeichen')}`,
value: this.data.personenkennzeichen
},
studiengang: {
label: `${this.$p.t('lehre','studiengang')}`,
value: this.data.studiengang
},
semester: {
label: `${this.$p.t('lehre','semester')}`,
value: this.data.semester
},
verband: {
label: `${this.$p.t('lehre','lehrverband')}`,
value: this.data.verband
},
gruppe: {
label: `${this.$p.t('lehre','gruppe')}`,
value: this.data.gruppe.trim()
}
};
// so nicht
// return {
// [`${this.$p.t('profil','Geburtsdatum')}`]: this.data.gebdatum,
// [`${this.$p.t('profil', 'Geburtsort')}`]: this.data.gebort,
// [`${this.$p.t('person', 'personenkennzeichen')}`]: this.data.personenkennzeichen,
// [`${this.$p.t('lehre', 'studiengang')}`]: this.data.studiengang,
// [`${this.$p.t('lehre', 'semester')}`]: this.data.semester,
// [`${this.$p.t('lehre', 'lehrverband')}`]: this.data.verband,
// [`${this.$p.t('lehre', 'gruppe')}`]: this.data.gruppe.trim(),
// };
},
},
created() {
@@ -17,6 +17,12 @@ export default {
},
props: ["data"],
provide() {
return {
studiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),
}
},
methods: {},
computed: {
@@ -49,15 +55,47 @@ export default {
return {};
}
return {
Geburtsdatum: this.data.gebdatum,
Geburtsort: this.data.gebort,
Personenkennzeichen: this.data.personenkennzeichen,
Studiengang: this.data.studiengang,
Semester: this.data.semester,
Verband: this.data.verband,
Gruppe: this.data.gruppe.trim(),
geburtsdatum: {
label: `${this.$p.t('profil','Geburtsdatum')}`,
value: this.data.gebdatum
},
geburtsort: {
label: `${this.$p.t('profil','Geburtsort')}`,
value: this.data.gebort
},
personenkennzeichen: {
label: `${this.$p.t('person','Geburtsort')}`,
value: this.data.personenkennzeichen
},
studiengang: {
label: `${this.$p.t('lehre','Geburtsort')}`,
value: this.data.studiengang
},
semester: {
label: `${this.$p.t('lehre','Geburtsort')}`,
value: this.data.semester
},
verband: {
label: `${this.$p.t('lehre','Geburtsort')}`,
value: this.data.verband
},
gruppe: {
label: `${this.$p.t('lehre','Geburtsort')}`,
value: this.data.gruppe.trim()
}
};
// return {
// Geburtsdatum: this.data.gebdatum,
// Geburtsort: this.data.gebort,
// Personenkennzeichen: this.data.personenkennzeichen,
// Studiengang: this.data.studiengang,
// Semester: this.data.semester,
// Verband: this.data.verband,
// Gruppe: this.data.gruppe.trim(),
// };
},
},
+2 -1
View File
@@ -96,7 +96,8 @@ export default {
}
}
else {
placeholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true });
placeholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true,
data: { id: 'placeholder_' + String(placeholders.length).padStart(4, "0") } });
}
}
}
+3 -3
View File
@@ -359,8 +359,8 @@ export default {
@mouseleave="mouseLeave">
<TransitionGroup tag="div">
<grid-item
v-for="item in (mode == 0 && active? placedItems_withPlaceholders : placedItems)"
:key="item.id"
v-for="item in (mode == 0 && active ? placedItems_withPlaceholders : placedItems)"
:key="item.data.id"
:item="item"
@start-move="startMove"
@start-resize="startResize"
@@ -378,7 +378,7 @@ export default {
paddingRight: 'var(--fhc-dg-item-padding-horizontal)'
}">
<template v-slot="item">
<slot v-bind="item.data" v-bind="item" :x="item.x" :y="item.y" ></slot>
<slot v-bind="{...item, ...item.data}" :x="item.x" :y="item.y" ></slot>
</template>
</grid-item>
</TransitionGroup>
+20
View File
@@ -26876,6 +26876,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'profil',
'phrase' => 'MOBIL',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Mobiltelefonnummer',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Cell phone number',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'profil',