mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
Merge branch 'master' into feature-40953/LV-Template_Uebersichtsseite
This commit is contained in:
@@ -33,22 +33,30 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
|
||||
public function getTag()
|
||||
{
|
||||
$language = $this->_getLanguageIndex();
|
||||
$id = $this->input->get('id');
|
||||
|
||||
$this->NotizModel->addSelect(
|
||||
'tbl_notiz.titel,
|
||||
"tbl_notiz.titel,
|
||||
tbl_notiz.text,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>". $language. " as bezeichnung,
|
||||
tbl_notiz.notiz_id,
|
||||
tbl_notiz_typ.style,
|
||||
tbl_notiz.erledigt as done,
|
||||
tbl_notiz.insertamum,
|
||||
tbl_notiz.updateamum,
|
||||
tbl_notiz.insertvon,
|
||||
tbl_notiz.updatevon
|
||||
'
|
||||
(verfasserperson.vorname || ' ' || verfasserperson.nachname || ' ' || '(' || verfasserbenutzer.uid || ')') as verfasser,
|
||||
(bearbeiterperson.vorname || ' ' || bearbeiterperson.nachname || ' ' || '(' || bearbeiterbenutzer.uid || ')') as bearbeiter
|
||||
"
|
||||
);
|
||||
$this->NotizModel->addJoin('public.tbl_notiz_typ', 'public.tbl_notiz.typ = public.tbl_notiz_typ.typ_kurzbz');
|
||||
|
||||
$this->NotizModel->addJoin('public.tbl_benutzer verfasserbenutzer', 'tbl_notiz.verfasser_uid = verfasserbenutzer.uid', 'LEFT');
|
||||
$this->NotizModel->addJoin('public.tbl_person verfasserperson', 'verfasserbenutzer.person_id = verfasserperson.person_id', 'LEFT');
|
||||
|
||||
$this->NotizModel->addJoin('public.tbl_benutzer bearbeiterbenutzer', 'tbl_notiz.verfasser_uid = bearbeiterbenutzer.uid', 'LEFT');
|
||||
$this->NotizModel->addJoin('public.tbl_person bearbeiterperson', 'bearbeiterbenutzer.person_id = bearbeiterperson.person_id', 'LEFT');
|
||||
|
||||
$notiz = $this->NotizModel->loadWhere(array('notiz_id' => $id));
|
||||
|
||||
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz)[0] : array());
|
||||
@@ -134,7 +142,11 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
{
|
||||
$postData = $this->getPostJson();
|
||||
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
||||
array('text' => $postData->notiz)
|
||||
array('text' => $postData->notiz,
|
||||
'updateamum' => date('Y-m-d H:i:s'),
|
||||
'updatevon' => $this->_uid,
|
||||
'bearbeiter_uid' => $this->_uid,
|
||||
)
|
||||
);
|
||||
$this->terminateWithSuccess($updateData);
|
||||
}
|
||||
@@ -142,7 +154,11 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
{
|
||||
$postData = $this->getPostJson();
|
||||
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
||||
array('erledigt' => !$postData->done)
|
||||
array('erledigt' => !$postData->done,
|
||||
'updateamum' => date('Y-m-d H:i:s'),
|
||||
'updatevon' => $this->_uid,
|
||||
'bearbeiter_uid' => $this->_uid,
|
||||
)
|
||||
);
|
||||
|
||||
$this->terminateWithSuccess($updateData);
|
||||
@@ -183,5 +199,14 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
show_error('User authentification failed');
|
||||
}
|
||||
|
||||
private function _getLanguageIndex()
|
||||
{
|
||||
$this->load->model('system/Sprache_model', 'SpracheModel');
|
||||
$this->SpracheModel->addSelect('index');
|
||||
$result = $this->SpracheModel->loadWhere(array('sprache' => getUserLanguage()));
|
||||
|
||||
return hasData($result) ? getData($result)[0]->index : 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -10,7 +10,7 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<iframe style="width:100%; height:100%;" id="Infoterminal" src="<?php echo base_url() . 'cis/infoterminal/?forcelogin=true'; ?>" name="Infoterminal" frameborder="0" >
|
||||
<iframe style="width:100%; height:90vh;" id="Infoterminal" src="<?php echo base_url() . 'cis/infoterminal/?forcelogin=true'; ?>" name="Infoterminal" frameborder="0" >
|
||||
No iFrames
|
||||
</iframe>
|
||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
||||
|
||||
@@ -8,6 +8,7 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
public $lehrveranstaltung_faktor_id; // serial
|
||||
public $lehrveranstaltung_id; // integer
|
||||
public $faktor; // numeric
|
||||
public $lehrform_kurzbz; // varchar(8)
|
||||
public $studiensemester_kurzbz_von; // varchar(16)
|
||||
public $studiensemester_kurzbz_bis; // varchar(16)
|
||||
public $insertamum; // timestamp
|
||||
@@ -58,7 +59,44 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
return true;
|
||||
}
|
||||
|
||||
public function loadByLV($lv_id, $von = null, $bis = null, $id = null)
|
||||
public function loadByLV($lv_id)
|
||||
{
|
||||
|
||||
if (!is_numeric($lv_id))
|
||||
{
|
||||
$this->errormsg = 'Lehrveranstaltung_faktor_id muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
$qry = "SELECT *
|
||||
FROM lehre.tbl_lehrveranstaltung_faktor
|
||||
LEFT JOIN public.tbl_studiensemester vonstsem
|
||||
ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_von = vonstsem.studiensemester_kurzbz
|
||||
LEFT JOIN public.tbl_studiensemester bisstem
|
||||
ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_bis = bisstem.studiensemester_kurzbz
|
||||
WHERE lehrveranstaltung_id = ".$this->db_add_param($lv_id, FHC_INTEGER);
|
||||
|
||||
|
||||
if (!$result = $this->db_query($qry)) {
|
||||
$this->errormsg = 'Datensatz konnte nicht geladen werden';
|
||||
return false;
|
||||
}
|
||||
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
{
|
||||
$lv_faktor_objekt = new lehrveranstaltung_faktor();
|
||||
|
||||
$lv_faktor_objekt->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id;
|
||||
$lv_faktor_objekt->lehrveranstaltung_id = $row->lehrveranstaltung_id;
|
||||
$lv_faktor_objekt->faktor = $row->faktor;
|
||||
$lv_faktor_objekt->lehrform_kurzbz = $row->lehrform_kurzbz;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis;
|
||||
$this->lv_faktoren[] = $lv_faktor_objekt;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
public function checkIfExists($lv_id, $von = null, $bis = null, $id = null, $lehrform_kurzbz = null)
|
||||
{
|
||||
|
||||
if (!is_numeric($lv_id))
|
||||
@@ -105,50 +143,80 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
lehrveranstaltung_faktor_id != ". $this->db_add_param($id, FHC_INTEGER);
|
||||
}
|
||||
|
||||
if (!$result = $this->db_query($qry)) {
|
||||
$this->errormsg = 'Datensatz konnte nicht geladen werden';
|
||||
return false;
|
||||
}
|
||||
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
if (!empty($lehrform_kurzbz) && $lehrform_kurzbz !== "")
|
||||
{
|
||||
$lv_faktor_objekt = new lehrveranstaltung_faktor();
|
||||
|
||||
$lv_faktor_objekt->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id;
|
||||
$lv_faktor_objekt->lehrveranstaltung_id = $row->lehrveranstaltung_id;
|
||||
$lv_faktor_objekt->faktor = $row->faktor;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis;
|
||||
|
||||
$this->lv_faktoren[] = $lv_faktor_objekt;
|
||||
$qry .= "
|
||||
AND
|
||||
lehrform_kurzbz = ". $this->db_add_param($lehrform_kurzbz);
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry .= "
|
||||
AND lehrform_kurzbz IS NULL
|
||||
";
|
||||
}
|
||||
|
||||
return true;
|
||||
if ($result = $this->db_query($qry))
|
||||
{
|
||||
if ($this->db_num_rows($result) > 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function addFaktor($lv_id, $faktor, $von, $bis = NULL)
|
||||
public function save($new = false)
|
||||
{
|
||||
$qry = 'INSERT INTO lehre.tbl_lehrveranstaltung_faktor (lehrveranstaltung_id, faktor, studiensemester_kurzbz_von, studiensemester_kurzbz_bis)
|
||||
VALUES ('. $this->db_add_param($lv_id, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($faktor, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($von, FHC_STRING) . ', '.
|
||||
$this->db_add_param($bis, FHC_STRING) . ');';
|
||||
if ($new)
|
||||
{
|
||||
$qry = 'INSERT INTO lehre.tbl_lehrveranstaltung_faktor (lehrveranstaltung_id, faktor, studiensemester_kurzbz_von, studiensemester_kurzbz_bis, lehrform_kurzbz, insertvon)
|
||||
VALUES ('. $this->db_add_param($this->lehrveranstaltung_id, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($this->faktor, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($this->studiensemester_kurzbz_von) . ', '.
|
||||
$this->db_add_param($this->studiensemester_kurzbz_bis) . ', '.
|
||||
$this->db_add_param($this->lehrform_kurzbz) . ', '.
|
||||
$this->db_add_param($this->insertvon) . ');';
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = "UPDATE lehre.tbl_lehrveranstaltung_faktor
|
||||
SET faktor = ". $this->db_add_param($this->faktor) ." ,
|
||||
studiensemester_kurzbz_von = ". $this->db_add_param($this->studiensemester_kurzbz_von) .",
|
||||
studiensemester_kurzbz_bis = ". $this->db_add_param($this->studiensemester_kurzbz_bis) .",
|
||||
lehrform_kurzbz = ". $this->db_add_param($this->lehrform_kurzbz) .",
|
||||
updatevon = ". $this->db_add_param($this->updatevon) .",
|
||||
updateamum = ". $this->db_add_param($this->updateamum) ."
|
||||
WHERE lehrveranstaltung_faktor_id = ". $this->db_add_param($this->lehrveranstaltung_faktor_id, FHC_INTEGER);
|
||||
}
|
||||
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
$qry_id = "SELECT currval('lehre.lehrveranstaltung_faktor_id_seq') as id;";
|
||||
if($this->db_query($qry_id))
|
||||
if ($new)
|
||||
{
|
||||
if($row = $this->db_fetch_object())
|
||||
$qry_id = "SELECT currval('lehre.lehrveranstaltung_faktor_id_seq') as id;";
|
||||
if($this->db_query($qry_id))
|
||||
{
|
||||
$this->db_query('COMMIT');
|
||||
return [
|
||||
'id' => $row->id,
|
||||
'lv_id' => $lv_id,
|
||||
'faktor' => $faktor,
|
||||
'von' => $von,
|
||||
'bis' => $bis
|
||||
];
|
||||
if($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->db_query('COMMIT');
|
||||
return [
|
||||
'id' => $row->id,
|
||||
'lv_id' => $this->lehrveranstaltung_id,
|
||||
'faktor' => $this->faktor,
|
||||
'lehrform_kurzbz' => $this->lehrform_kurzbz,
|
||||
'von' => $this->studiensemester_kurzbz_von,
|
||||
'bis' => $this->studiensemester_kurzbz_bis
|
||||
];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db_query('ROLLBACK');
|
||||
return [
|
||||
'status' => 'error',
|
||||
'message' => 'Fehler beim Einfügen in die Datenbank:'
|
||||
];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -160,34 +228,7 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db_query('ROLLBACK');
|
||||
return [
|
||||
'status' => 'error',
|
||||
'message' => 'Fehler beim Einfügen in die Datenbank:'
|
||||
];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return [
|
||||
'status' => 'error',
|
||||
'message' => 'Fehler beim Einfügen in die Datenbank:'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
public function updateFaktor($id, $faktor, $von, $bis)
|
||||
{
|
||||
$qry = "UPDATE lehre.tbl_lehrveranstaltung_faktor
|
||||
SET faktor = ". $this->db_add_param($faktor) ." ,
|
||||
studiensemester_kurzbz_von = ". $this->db_add_param($von) .",
|
||||
studiensemester_kurzbz_bis = ". $this->db_add_param($bis) ."
|
||||
WHERE lehrveranstaltung_faktor_id = ". $this->db_add_param($id, FHC_INTEGER);
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -215,6 +256,7 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
WHERE lehrveranstaltung_id = ".$this->db_add_param($lv_id, FHC_INTEGER) . "
|
||||
AND (vonstsem.start <= now() OR vonstsem.start IS NULL)
|
||||
AND (bisstem.ende >= now() OR bisstem.ende IS NULL)
|
||||
AND lehrform_kurzbz IS NULL
|
||||
ORDER BY vonstsem.start DESC LIMIT 1
|
||||
";
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ $this->phrasen['lvaliste/hilfeAnzeigen']='Hilfe anzeigen';
|
||||
|
||||
$this->phrasen['lvaliste/lehrfach']='Lehrfach';
|
||||
$this->phrasen['lvaliste/lehrform']='Lehrform';
|
||||
$this->phrasen['lvaliste/faktor']='Faktor';
|
||||
$this->phrasen['lvaliste/lvBezeichnung']='LV Bezeichnung';
|
||||
$this->phrasen['lvaliste/lehrfachBezeichnung']='Lehrfach Bezeichnung';
|
||||
$this->phrasen['lvaliste/lektor']='LektorIn';
|
||||
|
||||
@@ -7,6 +7,7 @@ $this->phrasen['lvaliste/hilfeAnzeigen']='Show Legend';
|
||||
|
||||
$this->phrasen['lvaliste/lehrfach']='Subject';
|
||||
$this->phrasen['lvaliste/lehrform']='Course Type';
|
||||
$this->phrasen['lvaliste/faktor']='Factor';
|
||||
$this->phrasen['lvaliste/lvBezeichnung']='Course Title';
|
||||
$this->phrasen['lvaliste/lehrfachBezeichnung']='Subject Title';
|
||||
$this->phrasen['lvaliste/lektor']='Lector';
|
||||
|
||||
+16
-8
@@ -524,29 +524,29 @@ html {
|
||||
}
|
||||
|
||||
@media screen and ( max-width: 576px ) {
|
||||
.searchbar_icon img {
|
||||
#nav-search .searchbar_results .searchbar_icon img {
|
||||
max-width: 65px !important;
|
||||
}
|
||||
|
||||
.searchbar_icon i {
|
||||
#nav-search .searchbar_results .searchbar_icon i {
|
||||
font-size: 3em !important;
|
||||
}
|
||||
|
||||
.searchbar_grid {
|
||||
#nav-search .searchbar_results .searchbar_grid {
|
||||
grid-template-columns: [icon] 75px [data] auto;
|
||||
}
|
||||
|
||||
.searchbar_table,
|
||||
.searchbar_tablerow,
|
||||
.searchbar_tablecell {
|
||||
#nav-search .searchbar_results .searchbar_table,
|
||||
#nav-search .searchbar_results .searchbar_tablerow,
|
||||
#nav-search .searchbar_results .searchbar_tablecell {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.searchbar_tablecell.searchbar_label {
|
||||
#nav-search .searchbar_results .searchbar_tablecell.searchbar_label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.searchbar_tablecell.searchbar_value {
|
||||
#nav-search .searchbar_results .searchbar_tablecell.searchbar_value {
|
||||
padding-left: 2.5rem;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
@@ -571,4 +571,12 @@ html {
|
||||
.height-enter-from,
|
||||
.height-leave-to {
|
||||
height: 0px;
|
||||
}
|
||||
|
||||
.zusatzinfo h2 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.dashboard-item {
|
||||
overscroll-behavior: none;
|
||||
}
|
||||
@@ -582,7 +582,16 @@ var FHC_TableWidget = {
|
||||
|
||||
options.columns = arrayTabulatorColumns;
|
||||
options.data = data.dataset;
|
||||
options.persistence = (typeof options.persistence == 'undefined') ? true : options.persistence; // enables persistence (default store in localStorage if available, else in cookie)
|
||||
|
||||
let defaultPersistence = {
|
||||
sort: true,
|
||||
columns: true,
|
||||
filter: false,
|
||||
headerFilter: false,
|
||||
group: false,
|
||||
page: false,
|
||||
}
|
||||
options.persistence = (typeof options.persistence == 'undefined') ? defaultPersistence : options.persistence; // enables persistence (default store in localStorage if available, else in cookie)
|
||||
options.persistenceID = (typeof options.persistenceID == 'undefined') ? data.tableUniqueId : options.persistenceID; // persistenceID to store persistence data seperately for multiple tables
|
||||
options.movableColumns = (typeof options.movableColumns == 'undefined') ? true : options.movableColumns; // allows changing column order
|
||||
options.tooltipsHeader = (typeof options.tooltipsHeader == 'undefined') ? true : options.tooltipsHeader; // set header tooltip with column title
|
||||
|
||||
@@ -30,23 +30,23 @@ template:/*html*/`
|
||||
<template v-if="studiengang?.bezeichnung && semester">
|
||||
<div class="card card-body mb-3">
|
||||
<div class="mb-1">
|
||||
<h2 class="mb-1 pb-0">{{$p.t('lehre','studiengang')}}:</h2>
|
||||
<h2 class="h4 mb-1 pb-0">{{$p.t('lehre','studiengang')}}:</h2>
|
||||
<span class="mb-1">{{studiengang?.bezeichnung}}</span>
|
||||
</div>
|
||||
<div class="mb-1">
|
||||
<h2 class="mb-1 pb-0">Moodle:</h2>
|
||||
<h2 class="h4 mb-1 pb-0">Moodle:</h2>
|
||||
<a class="mb-1" target="_blank" :href="moodleLink">{{studiengang?.kurzbzlang}}</a>
|
||||
</div>
|
||||
<div :class="{'mb-1':studiengang?.zusatzinfo_html}">
|
||||
<h2 class="mb-1 pb-0">{{$p.t('lehre','studiensemester')}}: </h2>
|
||||
<h2 class="h4 mb-1 pb-0">{{$p.t('lehre','studiensemester')}}: </h2>
|
||||
<span class="mb-1">{{semester}}</span>
|
||||
</div>
|
||||
<div v-if="studiengang?.zusatzinfo_html" v-html="studiengang?.zusatzinfo_html"></div>
|
||||
<div class="zusatzinfo" v-if="studiengang?.zusatzinfo_html" v-html="studiengang?.zusatzinfo_html"></div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-for="{title, collection} in collection_array">
|
||||
<template v-if="Array.isArray(collection) && collection.length !==0">
|
||||
<h2 class="text-truncate">{{title}}</h2>
|
||||
<h2 class="h5 text-truncate">{{title}}</h2>
|
||||
<template v-if="displayWidget">
|
||||
<div class="d-flex flex-wrap flex-row mb-3 gap-2">
|
||||
<template v-for="person in collection">
|
||||
|
||||
@@ -14,6 +14,8 @@ export default {
|
||||
selected: null,
|
||||
size:0,
|
||||
}),
|
||||
props: ['width', 'height']
|
||||
,
|
||||
mixins: [AbstractWidget],
|
||||
computed: {
|
||||
sizeClass() {
|
||||
@@ -102,6 +104,31 @@ export default {
|
||||
this.singleNews = singleNews;
|
||||
this.$refs.newsModal.show();
|
||||
},
|
||||
initCarouselInstance() {
|
||||
Vue.nextTick(()=> {
|
||||
if(this.$refs.carousel) { // carousel ref might not exist in every widget width/height
|
||||
this.carouselInstance = new bootstrap.Carousel(this.$refs.carousel, {
|
||||
wrap: false, // keep this off even though it actually wraps
|
||||
interval: false
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
initActiveItem() {
|
||||
Vue.nextTick(()=> {
|
||||
if (Array.isArray(this.$refs.carouselItems) && this.$refs.carouselItems.length >0) {
|
||||
this.$refs.carouselItems[0].classList.add("active")
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
width(newVal, oldVal) {
|
||||
if(oldVal == 1 && newVal > 1) { // carousel instance will have been disposed
|
||||
this.initCarouselInstance()
|
||||
this.initActiveItem()
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$emit("setConfig", false);
|
||||
@@ -111,12 +138,9 @@ export default {
|
||||
.then((news) => {
|
||||
this.allNewsList = Array.from(Object.values(news));
|
||||
this.selected = this.allNewsList.length ? this.allNewsList[0] : null
|
||||
Vue.nextTick(()=>{
|
||||
if (Array.isArray(this.$refs.carouselItems) && this.$refs.carouselItems.length >0) {
|
||||
this.$refs.carouselItems[0].classList.add("active")
|
||||
}
|
||||
})
|
||||
})
|
||||
this.initActiveItem()
|
||||
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("ERROR: ", err);
|
||||
});
|
||||
@@ -139,15 +163,8 @@ export default {
|
||||
}
|
||||
}).observe(this.$refs.container);
|
||||
}
|
||||
Vue.nextTick(()=> {
|
||||
if(this.$refs.carousel) { // carousel ref might not exist in every widget width/height
|
||||
this.carouselInstance = new bootstrap.Carousel(this.$refs.carousel, {
|
||||
wrap: false, // keep this off even though it actually wraps
|
||||
interval: false
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
this.initCarouselInstance()
|
||||
},
|
||||
template: /*html*/ `
|
||||
<div ref="container" class="widgets-news h-100" :class="sizeClass" :style="getNewsWidgetStyle">
|
||||
|
||||
@@ -82,10 +82,10 @@ export default {
|
||||
this.tagData.style = item.style;
|
||||
this.tagData.zuordnung_typ = this.zuordnung_typ;
|
||||
this.tagData.done = item.done;
|
||||
this.tagData.insertamum = item.insertamum;
|
||||
this.tagData.updateamum = item.updateamum;
|
||||
this.tagData.updatevon = item.updatevon;
|
||||
this.tagData.insertvon = item.insertvon;
|
||||
this.tagData.insertamum = this.formatDateTime(item.insertamum)
|
||||
this.tagData.updateamum = this.formatDateTime(item.updateamum)
|
||||
this.tagData.bearbeiter = item.bearbeiter;
|
||||
this.tagData.verfasser = item.verfasser;
|
||||
|
||||
if (item && item.notiz_id)
|
||||
{
|
||||
@@ -146,8 +146,6 @@ export default {
|
||||
this.$refs.tagModal.hide();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
async doneTag()
|
||||
{
|
||||
@@ -181,22 +179,35 @@ export default {
|
||||
id: "",
|
||||
done: false,
|
||||
insertamum: "",
|
||||
insertvon: "",
|
||||
verfasser: "",
|
||||
updateamum: "",
|
||||
updatevon: "",
|
||||
bearbeiter: "",
|
||||
response: ""
|
||||
};
|
||||
this.selectedTagId = null;
|
||||
this.mode = "create";
|
||||
},
|
||||
formatDateTime: (dateString) => {
|
||||
if (!dateString) return null;
|
||||
return new Date(dateString).toLocaleString('de-AT', {
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
second: "2-digit"
|
||||
});
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<div class="plus_button_container" @mouseleave="hideList">
|
||||
<span :title="values.length === 0 ? 'Bitte Zeilen markieren' : ''">
|
||||
<button @mouseover="showList = true"
|
||||
:disabled="!values || values.length === 0"
|
||||
class="btn btn-sm">
|
||||
<i class="fa-solid fa-tag fa-xl"></i>
|
||||
</button>
|
||||
</span>
|
||||
<ul v-if="showList" class="dropdown_list">
|
||||
<li v-for="(item, index) in tags" :key="index" @click="openModal(item)" :title="item.bezeichnung">
|
||||
{{ item.bezeichnung }}
|
||||
@@ -221,7 +232,15 @@ export default {
|
||||
field="notiz"
|
||||
placeholder="Notiz..."
|
||||
></form-input>
|
||||
<div class="modificationdate">angelegt von {{ tagData.insertvon }} am {{ tagData.insertamum }}</div>
|
||||
<div class="modificationdate">
|
||||
<span v-if="tagData.verfasser">
|
||||
{{ $p.t('notiz', 'tag_verfasser', { 0: tagData.verfasser, 1: tagData.insertamum }) }}
|
||||
</span>
|
||||
<br />
|
||||
<span v-if="tagData.bearbeiter && tagData.insertamum !== tagData.updateamum">
|
||||
{{ $p.t('notiz', 'tag_bearbeiter', { 0: tagData.bearbeiter, 1: tagData.updateamum }) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
@@ -232,12 +251,12 @@ export default {
|
||||
class="btn btn-success me-2"
|
||||
@click="doneTag"
|
||||
>
|
||||
{{ tagData.done ? 'Rückgängig' : 'Erledigt' }}
|
||||
{{ tagData.done ? $p.t('notiz', 'tag_rueckgaengig') : $p.t('notiz', 'tag_erledigt') }}
|
||||
</button>
|
||||
<button v-if="mode === 'edit'" class="btn btn-danger" @click="deleteTag">Löschen</button>
|
||||
<button v-if="mode === 'edit'" class="btn btn-danger" @click="deleteTag">{{ $p.t('global', 'loeschen' )}}</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" @click="saveTag">
|
||||
{{ mode === "edit" ? $p.t('ui', 'bearbeiten') : $p.t('studierendenantrag', 'btn_create') }}
|
||||
{{ mode === "edit" ? $p.t('global', 'speichern') : $p.t('global', 'create') }}
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -20,7 +20,6 @@ import FilterConfig from './Filter/Config.js';
|
||||
import FilterColumns from './Filter/Columns.js';
|
||||
import TableDownload from './Table/Download.js';
|
||||
import collapseAutoClose from '../../directives/collapseAutoClose.js';
|
||||
import { defaultHeaderFilter } from '../../tabulator/filters/defaultHeaderFilter.js';
|
||||
|
||||
import moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';
|
||||
|
||||
@@ -84,6 +83,7 @@ export const CoreFilterCmpt = {
|
||||
uuid: 0,
|
||||
// FilterCmpt properties
|
||||
filterName: null,
|
||||
filterActive: false,
|
||||
fields: null,
|
||||
dataset: null,
|
||||
datasetMetadata: null,
|
||||
@@ -103,7 +103,15 @@ export const CoreFilterCmpt = {
|
||||
tabulator: null,
|
||||
tableBuilt: false,
|
||||
tabulatorHasSelector: false,
|
||||
selectedData: []
|
||||
selectedData: [],
|
||||
persistence: {
|
||||
sort: true,
|
||||
columns: true,
|
||||
filter: false,
|
||||
headerFilter: false,
|
||||
group: false,
|
||||
page: false,
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -210,12 +218,11 @@ export const CoreFilterCmpt = {
|
||||
layout: "fitDataStretchFrozen",
|
||||
movableColumns: true,
|
||||
columnDefaults:{
|
||||
tooltip: true,
|
||||
headerFilterFunc: defaultHeaderFilter,
|
||||
tooltip: true
|
||||
},
|
||||
placeholder,
|
||||
reactiveData: true,
|
||||
persistence: true
|
||||
persistence: this.persistence,
|
||||
}, ...(this.tabulatorOptions || {})};
|
||||
|
||||
if (!this.tableOnly) {
|
||||
@@ -281,11 +288,15 @@ export const CoreFilterCmpt = {
|
||||
const cols = this.tabulator.getColumns();
|
||||
this.fields = cols.map(col => col.getField());
|
||||
this.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());
|
||||
|
||||
if (this.tabulator.options.persistence.headerFilter)
|
||||
this._setHeaderFilter();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
this.tabulator.on("dataFiltered", filters => {
|
||||
this.filterActive = filters.length > 0;
|
||||
});
|
||||
},
|
||||
updateTabulator() {
|
||||
if (this.tabulator) {
|
||||
@@ -299,6 +310,23 @@ export const CoreFilterCmpt = {
|
||||
this.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;
|
||||
this.tabulator.setColumns(this.filteredColumns);
|
||||
this.tabulator.setData(this.filteredData);
|
||||
this._setHeaderFilter()
|
||||
},
|
||||
clearFilters()
|
||||
{
|
||||
let existingFilters = this.tabulator.getHeaderFilters();
|
||||
existingFilters.forEach(filter => {
|
||||
this.tabulator.setHeaderFilterValue(filter.field, "");
|
||||
});
|
||||
this.tabulator.clearFilter();
|
||||
this.filterActive = false;
|
||||
},
|
||||
_setHeaderFilter()
|
||||
{
|
||||
const existingFilters = this.tabulator.getHeaderFilters();
|
||||
existingFilters.forEach(filter => {
|
||||
this.tabulator.setHeaderFilterValue(filter.field, filter.value);
|
||||
});
|
||||
},
|
||||
/**
|
||||
*
|
||||
@@ -581,16 +609,21 @@ export const CoreFilterCmpt = {
|
||||
alert('"nwNewEntry" listener is mandatory when sideMenu is true');
|
||||
this.uuid = _uuid++;
|
||||
this.$emit('uuidDefined', this.uuid)
|
||||
if (!this.tableOnly)
|
||||
this.getFilter(); // get the filter data
|
||||
},
|
||||
mounted() {
|
||||
this.initTabulator();
|
||||
|
||||
this.initTabulator().then(() => {
|
||||
if (!this.tableOnly) {
|
||||
this.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;
|
||||
this.getFilter(); // get the filter data
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
template: `
|
||||
<!-- Load filter data -->
|
||||
<core-fetch-cmpt
|
||||
v-if="!tableOnly"
|
||||
v-if="!tableOnly && fetchCmptApiFunction"
|
||||
v-bind:api-function="fetchCmptApiFunction"
|
||||
v-bind:api-function-parameters="fetchCmptApiFunctionParams"
|
||||
v-bind:refresh="fetchCmptRefresh"
|
||||
@@ -629,6 +662,9 @@ export const CoreFilterCmpt = {
|
||||
<a v-if="!tableOnly || $slots.filter" href="#" class="btn btn-link px-0 text-dark" data-bs-toggle="collapse" :data-bs-target="'#collapseFilters' + idExtra">
|
||||
<span class="fa-solid fa-xl fa-filter"></span>
|
||||
</a>
|
||||
<a v-if="filterActive" class="btn btn-link px-0 text-dark" :title="$p.t('ui','filterdelete')" @click="clearFilters">
|
||||
<span class="fa-solid fa-xl fa-filter-circle-xmark"></span>
|
||||
</a>
|
||||
<a href="#" class="btn btn-link px-0 text-dark" data-bs-toggle="collapse" :data-bs-target="'#collapseColumns' + idExtra">
|
||||
<span class="fa-solid fa-xl fa-table-columns"></span>
|
||||
</a>
|
||||
|
||||
@@ -31,36 +31,36 @@ export default {
|
||||
<div class="searchbar_table">
|
||||
|
||||
<div class="searchbar_tablerow">
|
||||
<div class="searchbar_tablecell">Student UID</div>
|
||||
<div class="searchbar_tablecell">
|
||||
<div class="searchbar_tablecell searchbar_label">Student UID</div>
|
||||
<div class="searchbar_tablecell searchbar_value">
|
||||
{{ res.uid }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="searchbar_tablerow">
|
||||
<div class="searchbar_tablecell">{{$p.t('lehre','studiengang')}}</div>
|
||||
<div class="searchbar_tablecell">
|
||||
<div class="searchbar_tablecell searchbar_label">{{$p.t('lehre','studiengang')}}</div>
|
||||
<div class="searchbar_tablecell searchbar_value">
|
||||
{{ res.studiengang }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="searchbar_tablerow">
|
||||
<div class="searchbar_tablecell">Verband</div>
|
||||
<div class="searchbar_tablecell">
|
||||
<div class="searchbar_tablecell searchbar_label">Verband</div>
|
||||
<div class="searchbar_tablecell searchbar_value">
|
||||
{{ res.verband }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="searchbar_tablerow">
|
||||
<div class="searchbar_tablecell">{{$p.t('person','personenkennzeichen')}}</div>
|
||||
<div class="searchbar_tablecell">
|
||||
<div class="searchbar_tablecell searchbar_label">{{$p.t('person','personenkennzeichen')}}</div>
|
||||
<div class="searchbar_tablecell searchbar_value">
|
||||
{{ res.matrikelnr }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="searchbar_tablerow">
|
||||
<div class="searchbar_tablecell">{{$p.t('person','email')}}</div>
|
||||
<div class="searchbar_tablecell">
|
||||
<div class="searchbar_tablecell searchbar_label">{{$p.t('person','email')}}</div>
|
||||
<div class="searchbar_tablecell searchbar_value">
|
||||
<a :href="this.mailtourl">
|
||||
{{ res.email }}
|
||||
</a>
|
||||
|
||||
@@ -7,26 +7,49 @@ Tabulator.extendModule('filter', 'filters', {
|
||||
"dates": (headerValue, rowValue) => {
|
||||
if (!headerValue)
|
||||
return true;
|
||||
let v = new Date(rowValue);
|
||||
if (Array.isArray(headerValue)) {
|
||||
if (headerValue[1]) {
|
||||
return v >= headerValue[0] && v <= headerValue[1].setHours(23, 59, 59, 999);
|
||||
|
||||
let rowDate = new Date(rowValue);
|
||||
|
||||
if (Array.isArray(headerValue))
|
||||
{
|
||||
let startDate = new Date(headerValue[0]);
|
||||
if (headerValue[1])
|
||||
{
|
||||
let endDate = new Date(headerValue[1]);
|
||||
|
||||
endDate.setHours(23, 59, 59, 999);
|
||||
|
||||
return rowDate >= startDate && rowDate <= endDate;
|
||||
}
|
||||
return v.toDateString() == headerValue[0].toDateString();
|
||||
|
||||
return rowDate.toDateString() === startDate.toDateString();
|
||||
}
|
||||
return v.toDateString() == headerValue.toDateString();
|
||||
let singleDate = new Date(headerValue);
|
||||
return rowDate.toDateString() === singleDate.toDateString();
|
||||
}
|
||||
});
|
||||
|
||||
function dateFilter(cell, onRendered, success) {
|
||||
let div = document.createElement('div');
|
||||
|
||||
let initialValue = null;
|
||||
|
||||
let val = cell.getValue();
|
||||
|
||||
if (Array.isArray(val))
|
||||
{
|
||||
const start = val[0] ? new Date(val[0]) : null;
|
||||
const end = val[1] ? new Date(val[1]) : null;
|
||||
initialValue = [start, end];
|
||||
}
|
||||
|
||||
Vue.createApp({
|
||||
components: {
|
||||
PrimevueCalendar: primevue.calendar
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
val: null
|
||||
val: initialValue
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -34,10 +57,16 @@ function dateFilter(cell, onRendered, success) {
|
||||
success(n);
|
||||
}
|
||||
},
|
||||
template: `<primevue-calendar v-model="val" selection-mode="range" :manual-input="false" show-button-bar></primevue-calendar>`
|
||||
template: `<primevue-calendar
|
||||
v-model="val"
|
||||
selection-mode="range"
|
||||
:manual-input="false"
|
||||
show-button-bar
|
||||
:showIcon="true"
|
||||
dateFormat="dd.mm.yy">
|
||||
</primevue-calendar>`
|
||||
}).use(primevue.config.default).mount(div);
|
||||
|
||||
return div;
|
||||
}
|
||||
|
||||
export { dateFilter as 'dateFilter' };
|
||||
export { dateFilter };
|
||||
@@ -1,87 +0,0 @@
|
||||
function parseFilterExpression(expression){
|
||||
const includeGroups = [];
|
||||
const excludeTerms = [];
|
||||
const comparisons = [];
|
||||
|
||||
if( typeof expression !== 'string' ) {
|
||||
comparisons.push({ operator: '=', number: expression });
|
||||
return { includeGroups, excludeTerms, comparisons };
|
||||
}
|
||||
|
||||
const andParts = expression.split('&&').map(part => part.trim());
|
||||
|
||||
andParts.forEach(part => {
|
||||
const orTerms = part.split('||').map(p => p.trim());
|
||||
const orRegexes = [];
|
||||
|
||||
orTerms.forEach(term => {
|
||||
|
||||
const comparisonMatch = term.match(/^(<=|>=|<|>|=|!=)\s*(\d+)$/);
|
||||
|
||||
if (comparisonMatch)
|
||||
{
|
||||
const operator = comparisonMatch[1];
|
||||
const number = parseFloat(comparisonMatch[2]);
|
||||
|
||||
comparisons.push({ operator, number });
|
||||
}
|
||||
else if (term.startsWith('!'))
|
||||
{
|
||||
const excludeTerm = term.substring(1).trim().replace(/\*/g, '.*');
|
||||
excludeTerms.push(new RegExp(excludeTerm, 'i'));
|
||||
}
|
||||
else
|
||||
{
|
||||
const includeTerm = term.replace(/\*/g, '.*');
|
||||
orRegexes.push(new RegExp(includeTerm, 'i'));
|
||||
}
|
||||
});
|
||||
|
||||
if (orRegexes.length > 0)
|
||||
{
|
||||
includeGroups.push(orRegexes);
|
||||
}
|
||||
});
|
||||
|
||||
return { includeGroups, excludeTerms, comparisons };
|
||||
}
|
||||
|
||||
export function defaultHeaderFilter(headerValue, rowValue)
|
||||
{
|
||||
const { includeGroups, excludeTerms, comparisons } = parseFilterExpression(headerValue);
|
||||
|
||||
const includes = includeGroups.every(group =>
|
||||
group.some(regex => regex.test(rowValue))
|
||||
);
|
||||
|
||||
const excludes = excludeTerms.every(regex => !regex.test(rowValue));
|
||||
|
||||
const comparisonCheck = comparisons.every(({ operator, number }) => {
|
||||
let value = rowValue;
|
||||
|
||||
if (!isNaN(number) && typeof number !== 'boolean')
|
||||
{
|
||||
value = parseFloat(rowValue);
|
||||
if (isNaN(value)) return false;
|
||||
}
|
||||
|
||||
switch (operator) {
|
||||
case '<':
|
||||
return value < number;
|
||||
case '>':
|
||||
return value > number;
|
||||
case '<=':
|
||||
return value <= number;
|
||||
case '>=':
|
||||
return value >= number;
|
||||
case '=':
|
||||
return value === number;
|
||||
case '!=':
|
||||
return value !== number;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return includes && excludes && comparisonCheck;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
function parseFilterExpression(expression)
|
||||
{
|
||||
const collections = [];
|
||||
|
||||
try {
|
||||
const orParts = expression.split('||').map(part => part.trim());
|
||||
|
||||
orParts.forEach(part => {
|
||||
|
||||
const andParts = part.split('&&').map(p => p.trim());
|
||||
|
||||
const collection = { positives: [], negatives: [] };
|
||||
|
||||
andParts.forEach(term => {
|
||||
|
||||
const comparisonMatch = term.match(/^(<=|>=|<|>|=|!=)\s*(\d+(?:[.,]\d+)?)$/);
|
||||
|
||||
if (comparisonMatch)
|
||||
{
|
||||
const operator = comparisonMatch[1];
|
||||
const numberStr = comparisonMatch[2].replace(',', '.');
|
||||
const number = parseFloat(numberStr);
|
||||
collection.positives.push({ type: 'comparison', operator, number });
|
||||
}
|
||||
else if (term.startsWith('!'))
|
||||
{
|
||||
const excludeTerm = term.substring(1).trim().replace(/\*/g, '.*');
|
||||
collection.negatives.push({ type: 'regex', regex: new RegExp(excludeTerm, 'i') });
|
||||
}
|
||||
else
|
||||
{
|
||||
const includeTerm = term.replace(/\*/g, '.*');
|
||||
collection.positives.push({ type: 'regex', regex: new RegExp(includeTerm, 'i') });
|
||||
}
|
||||
});
|
||||
collections.push(collection);
|
||||
});
|
||||
} catch (e) {}
|
||||
return collections;
|
||||
}
|
||||
|
||||
export function extendedHeaderFilter(headerValue, rowValue)
|
||||
{
|
||||
if (typeof headerValue === 'boolean')
|
||||
{
|
||||
return rowValue === headerValue;
|
||||
}
|
||||
|
||||
const collections = parseFilterExpression(headerValue);
|
||||
|
||||
try {
|
||||
|
||||
return collections.some(collection => {
|
||||
|
||||
let positives = collection.positives.length === 0 || collection.positives.every(condition => {
|
||||
|
||||
if (condition.type === 'comparison')
|
||||
{
|
||||
let value = parseFloat(rowValue);
|
||||
if (isNaN(value)) return false;
|
||||
|
||||
switch (condition.operator) {
|
||||
case '<':
|
||||
return value < condition.number;
|
||||
case '>':
|
||||
return value > condition.number;
|
||||
case '<=':
|
||||
return value <= condition.number;
|
||||
case '>=':
|
||||
return value >= condition.number;
|
||||
case '=':
|
||||
return value === condition.number;
|
||||
case '!=':
|
||||
return value !== condition.number;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (condition.type === 'regex')
|
||||
{
|
||||
return condition.regex.test(rowValue);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
let negatives = collection.negatives.every(condition => {
|
||||
return !condition.regex.test(rowValue);
|
||||
});
|
||||
|
||||
return positives && negatives;
|
||||
});
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
export function tagHeaderFilter(headerValue, rowValue) {
|
||||
|
||||
let data;
|
||||
|
||||
try {
|
||||
data = typeof rowValue === 'string' ? JSON.parse(rowValue) : rowValue;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let combinedText;
|
||||
|
||||
if (Array.isArray(data))
|
||||
{
|
||||
combinedText = data
|
||||
.map(item => `${item?.beschreibung} ${item?.notiz}`)
|
||||
.join(' ');
|
||||
}
|
||||
else if (typeof data === 'object' && data !== null)
|
||||
{
|
||||
combinedText = `${data?.beschreibung} ${data?.notiz}`;
|
||||
}
|
||||
else
|
||||
{
|
||||
combinedText = String(data);
|
||||
}
|
||||
|
||||
return extendedHeaderFilter(headerValue, combinedText)
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ switch($method)
|
||||
]);
|
||||
break;
|
||||
}
|
||||
if (exists($faktor['lv_id'], $faktor['von'], $faktor['bis']))
|
||||
if (exists($faktor['lv_id'], $faktor['von'], $faktor['bis'], null, $faktor['lehrform_kurzbz']))
|
||||
{
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
@@ -49,12 +49,22 @@ switch($method)
|
||||
break;
|
||||
}
|
||||
|
||||
$result = $lv_faktor->addFaktor($faktor['lv_id'], $faktor['faktor'], $faktor['von'], $faktor['bis']);
|
||||
$newFaktor = new lehrveranstaltung_faktor();
|
||||
$newFaktor->lehrveranstaltung_id = $faktor['lv_id'];
|
||||
$newFaktor->faktor = $faktor['faktor'];
|
||||
$newFaktor->studiensemester_kurzbz_von = $faktor['von'];
|
||||
$newFaktor->studiensemester_kurzbz_bis = $faktor['bis'];
|
||||
$newFaktor->lehrform_kurzbz = $faktor['lehrform_kurzbz'];
|
||||
$newFaktor->insertvon = get_uid();
|
||||
$result = $newFaktor->save(true);
|
||||
|
||||
echo json_encode($result);
|
||||
}
|
||||
break;
|
||||
case 'updateFaktor':
|
||||
|
||||
$faktor = isset($_REQUEST['faktor']) ? $_REQUEST['faktor']: '' ;
|
||||
|
||||
if ($faktor !== '')
|
||||
{
|
||||
if (vonHigherThanBis($faktor['von'], $faktor['bis']))
|
||||
@@ -65,7 +75,7 @@ switch($method)
|
||||
]);
|
||||
break;
|
||||
}
|
||||
if (exists($faktor['lv_id'], $faktor['von'], $faktor['bis'], $faktor['id']))
|
||||
if (exists($faktor['lv_id'], $faktor['von'], $faktor['bis'], $faktor['id'], $faktor['lehrform_kurzbz']))
|
||||
{
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
@@ -74,7 +84,15 @@ switch($method)
|
||||
break;
|
||||
}
|
||||
|
||||
$result = $lv_faktor->updateFaktor($faktor['id'], $faktor['faktor'], $faktor['von'], $faktor['bis']);
|
||||
$updateFaktor = new lehrveranstaltung_faktor();
|
||||
$updateFaktor->lehrveranstaltung_faktor_id = $faktor['id'];
|
||||
$updateFaktor->faktor = $faktor['faktor'];
|
||||
$updateFaktor->studiensemester_kurzbz_von = $faktor['von'];
|
||||
$updateFaktor->studiensemester_kurzbz_bis = $faktor['bis'];
|
||||
$updateFaktor->lehrform_kurzbz = $faktor['lehrform_kurzbz'];
|
||||
$updateFaktor->updatevon = get_uid();
|
||||
$updateFaktor->updateamum = date('Y-m-d H:i:s');
|
||||
$result = $updateFaktor->save();
|
||||
echo json_encode($result);
|
||||
}
|
||||
break;
|
||||
@@ -99,11 +117,12 @@ function isRightType($lv_id)
|
||||
return false;
|
||||
}
|
||||
|
||||
function exists($lv_id, $von, $bis, $id = null)
|
||||
function exists($lv_id, $von, $bis, $id = null, $lehrform_kurzbz = null)
|
||||
{
|
||||
$lv_faktor = new lehrveranstaltung_faktor();
|
||||
$lv_faktor->loadByLV($lv_id, $von, $bis, $id);
|
||||
return !empty($lv_faktor->lv_faktoren);
|
||||
|
||||
$lehrform_kurzbz = $lehrform_kurzbz === ' - ' ? null : $lehrform_kurzbz;
|
||||
return $lv_faktor->checkIfExists($lv_id, $von, $bis, $id, $lehrform_kurzbz);
|
||||
}
|
||||
|
||||
function vonHigherThanBis($von, $bis)
|
||||
|
||||
@@ -71,6 +71,7 @@ require_once('dbupdate_3.4/41950_perm_gehaelter.php');
|
||||
require_once('dbupdate_3.4/53903_valorisierung.php');
|
||||
require_once('dbupdate_3.4/55968_index_anrechnung.php');
|
||||
require_once('dbupdate_3.4/25999_locale_update.php');
|
||||
require_once('dbupdate_3.4/55289_pep_fine_tuning.php');
|
||||
|
||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
|
||||
@@ -270,7 +271,7 @@ $tabellen=array(
|
||||
"lehre.tbl_zeitfenster" => array("wochentag","stunde","ort_kurzbz","studiengang_kz","gewicht"),
|
||||
"lehre.tbl_zeugnis" => array("zeugnis_id","student_uid","zeugnis","erstelltam","gedruckt","titel","bezeichnung","updateamum","updatevon","insertamum","insertvon","ext_id"),
|
||||
"lehre.tbl_zeugnisnote" => array("lehrveranstaltung_id","student_uid","studiensemester_kurzbz","note","uebernahmedatum","benotungsdatum","bemerkung","updateamum","updatevon","insertamum","insertvon","ext_id","punkte"),
|
||||
"lehre.tbl_lehrveranstaltung_faktor" => array("lehrveranstaltung_faktor_id", "lehrveranstaltung_id","faktor","studiensemester_kurzbz_von","studiensemester_kurzbz_bis","insertamum","insertvon","updateamum","updatevon"),
|
||||
"lehre.tbl_lehrveranstaltung_faktor" => array("lehrveranstaltung_faktor_id", "lehrveranstaltung_id","faktor", "lehrform_kurzbz", "studiensemester_kurzbz_von","studiensemester_kurzbz_bis","insertamum","insertvon","updateamum","updatevon"),
|
||||
"public.ci_apikey" => array("apikey_id","key","level","ignore_limits","date_created"),
|
||||
"public.tbl_adresse" => array("adresse_id","person_id","name","strasse","plz","ort","gemeinde","nation","typ","heimatadresse","zustelladresse","firma_id","updateamum","updatevon","insertamum","insertvon","ext_id","rechnungsadresse","anmerkung", "co_name"),
|
||||
"public.tbl_adressentyp" => array("adressentyp_kurzbz", "bezeichnung", "bezeichnung_mehrsprachig", "sort"),
|
||||
|
||||
@@ -78,3 +78,16 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_lehrv
|
||||
}
|
||||
}
|
||||
|
||||
if(!@$db->db_query("SELECT lehrform_kurzbz FROM lehre.tbl_lehrveranstaltung_faktor LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ADD COLUMN lehrform_kurzbz varchar(8);
|
||||
ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ADD CONSTRAINT fk_lehrveranstaltung_faktor_lehrform_kurzbz FOREIGN KEY (lehrform_kurzbz) REFERENCES lehre.tbl_lehrform (lehrform_kurzbz) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ALTER TABLE lehre.tbl_lehrveranstaltung_faktor DROP CONSTRAINT fk_lehrveranstaltung_faktor_lehrveranstaltung_id;
|
||||
ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ADD CONSTRAINT fk_lehrveranstaltung_faktor_lehrveranstaltung_id FOREIGN KEY (lehrveranstaltung_id) REFERENCES lehre.tbl_lehrveranstaltung (lehrveranstaltung_id) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>lehre.tbl_lehrveranstaltung_faktor '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Spalte lehrform_kurzbz zu Tabelle lehre.tbl_lehrveranstaltung_faktor hinzugefügt';
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
if (! defined('DB_NAME')) exit('No direct script access allowed');
|
||||
|
||||
// system.tbl_berechtigung: add berechtigung addons/reports:begrenzt
|
||||
if($result = $db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz='addon/reports:begrenzt'"))
|
||||
{
|
||||
if($db->db_num_rows($result)==0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('addon/reports:begrenzt', 'Reports nur über Direktlink aufrufbar');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>Berechtigung: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Neue Berechtigung addon/reports:begrenzt zu system.tbl_berechtigung hinzugefügt';
|
||||
}
|
||||
}
|
||||
@@ -1233,6 +1233,26 @@ $phrases = array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'global',
|
||||
'phrase' => 'create',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Anlegen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Create',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'global',
|
||||
@@ -1815,6 +1835,26 @@ $phrases = array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'filterdelete',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Filter löschen',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Clear filter',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'anrechnung',
|
||||
@@ -24891,6 +24931,86 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'notiz',
|
||||
'phrase' => 'tag_rueckgaengig',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Rückgängig',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Undo',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'notiz',
|
||||
'phrase' => 'tag_erledigt',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Erledigt',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Done',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'notiz',
|
||||
'phrase' => 'tag_verfasser',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'angelegt von {0} am {1}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Created by {0} on {1}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'notiz',
|
||||
'phrase' => 'tag_bearbeiter',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'bearbeitet von {0} am {1}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Edited by {0} on {1}',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
|
||||
@@ -1331,9 +1331,6 @@ if ($result_lv!=0)
|
||||
echo '<td>
|
||||
<a href="'.$_SERVER['PHP_SELF'].'?delete_lvid='.$row->lehrveranstaltung_id.'&stg_kz='.$stg_kz.'&semester='.$semester.'&fachbereich_kurzbz='.$oe_fachbereich.'&isaktiv='.$isaktiv.'&oe_kurzbz='.$oe_kurzbz.'&orgform='.$orgform_kurzbz.'" onclick="return conf_del()">löschen</a>
|
||||
';
|
||||
|
||||
if (in_array($row->lehrtyp_kurzbz, array("tpl", "lv")))
|
||||
echo '<br /><a href="lehrveranstaltung_faktor.php?lehrveranstaltung_id='.$db->convert_html_chars($row->lehrveranstaltung_id).'" target="lv_detail">Faktor</a>';
|
||||
echo '</td>';
|
||||
echo '
|
||||
<td nowrap>';
|
||||
@@ -1341,7 +1338,9 @@ if ($result_lv!=0)
|
||||
$lv_faktor = new lehrveranstaltung_faktor();
|
||||
$lv_faktor->getAkt($row->lehrveranstaltung_id);
|
||||
|
||||
echo $lv_faktor->faktor.'</td>';
|
||||
if (in_array($row->lehrtyp_kurzbz, array("tpl", "lv")))
|
||||
echo '<a href="lehrveranstaltung_faktor.php?lehrveranstaltung_id='.$db->convert_html_chars($row->lehrveranstaltung_id).'" target="lv_detail">Bearbeiten</a>';
|
||||
echo '</td>';
|
||||
echo "</tr>\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ require_once('../../include/phrasen.class.php');
|
||||
require_once('../../include/lehrveranstaltung.class.php');
|
||||
require_once('../../include/lehrveranstaltung_faktor.class.php');
|
||||
require_once('../../include/studiensemester.class.php');
|
||||
require_once('../../include/lehrform.class.php');
|
||||
|
||||
$uid = get_uid();
|
||||
$rechte = new benutzerberechtigung();
|
||||
@@ -38,12 +39,14 @@ echo '<!DOCTYPE HTML>
|
||||
var row = $(this).closest('tr');
|
||||
var id = row.data('id');
|
||||
var faktor = row.find('.faktor').text();
|
||||
var lehrform = row.find('.lehrform').text();
|
||||
var von = row.find('.von').text();
|
||||
var bis = row.find('.bis').text();
|
||||
|
||||
$('#action').val('edit');
|
||||
$('#id').val(id);
|
||||
$('#faktor').val(faktor);
|
||||
$('#lehrform').val(lehrform);
|
||||
$('#von').val(von);
|
||||
$('#bis').val(bis);
|
||||
});
|
||||
@@ -63,12 +66,14 @@ echo '<!DOCTYPE HTML>
|
||||
var id = $('#id').val();
|
||||
|
||||
var faktor = $('#faktor').val();
|
||||
var lehrform = $('#lehrform').val();
|
||||
var von = $('#von').val();
|
||||
var bis = $('#bis').val();
|
||||
var lv_id = $('#lv_id').val();
|
||||
|
||||
var formData = {
|
||||
faktor: faktor,
|
||||
lehrform_kurzbz: lehrform,
|
||||
von: von,
|
||||
bis: bis,
|
||||
lv_id: lv_id
|
||||
@@ -132,6 +137,7 @@ echo '<!DOCTYPE HTML>
|
||||
{
|
||||
var row = $('#faktorTable tbody tr[data-id="' + formData.id + '"]');
|
||||
row.find('.faktor').text(formData.faktor);
|
||||
row.find('.lehrform').text(formData.lehrform_kurzbz);
|
||||
row.find('.von').text(formData.von);
|
||||
row.find('.bis').text(formData.bis);
|
||||
|
||||
@@ -189,6 +195,7 @@ echo '<!DOCTYPE HTML>
|
||||
var row = tr
|
||||
.append(
|
||||
$('<td>').text(faktor.faktor).addClass('faktor'),
|
||||
$('<td>').text(faktor.lehrform_kurzbz || "").addClass('lehrform'),
|
||||
$('<td>').text(faktor.von).addClass('von'),
|
||||
$('<td>').text(faktor.bis).addClass('bis'),
|
||||
$('<td>').append(editButton).addClass('edit'),
|
||||
@@ -232,6 +239,9 @@ $faktor->loadByLV($lv->lehrveranstaltung_id);
|
||||
$studiensemester = new studiensemester();
|
||||
$studiensemester->getAll('desc');
|
||||
|
||||
$lehrform = new lehrform();
|
||||
$lehrform->getAll();
|
||||
|
||||
|
||||
echo '
|
||||
</head>
|
||||
@@ -267,6 +277,17 @@ echo '
|
||||
|
||||
echo '
|
||||
</select>
|
||||
<label for="lehrform">Lehrform</label>
|
||||
<select id="lehrform" name="lehrform">
|
||||
<option value="">---keine Auswahl---</option>';
|
||||
|
||||
foreach ($lehrform->lehrform as $lehrform)
|
||||
{
|
||||
echo '<option value="'.$lehrform->lehrform_kurzbz.'">'.$lehrform->lehrform_kurzbz . ' ' . $lehrform->bezeichnung.'</option>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</select>
|
||||
<button type="submit">'.$p->t('global/speichern').'</button>
|
||||
<span id="success_message_save" class="alert alert-success" style="display:none;">'. $p->t('global/erfolgreichgespeichert') . '</span>
|
||||
<span id="success_message_delete" class="alert alert-success" style="display:none;">'. $p->t('global/erfolgreichgelöscht') . '</span>
|
||||
@@ -275,7 +296,8 @@ echo '
|
||||
<table class="tablesorter" id="faktorTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.$p->t('lv/faktor').'</th>
|
||||
<th>'.$p->t('lvaliste/faktor').'</th>
|
||||
<th>'.$p->t('lvaliste/lehrform').'</th>
|
||||
<th>'.$p->t('global/von').'</th>
|
||||
<th>'.$p->t('global/bis').'</th>
|
||||
<th>'.$p->t('global/bearbeiten').'</th>
|
||||
@@ -291,6 +313,7 @@ if(count($faktor->lv_faktoren) > 0)
|
||||
{
|
||||
echo "<tr data-id=". $lv_faktor->lehrveranstaltung_faktor_id .">
|
||||
<td class='faktor'>".$lv_faktor->faktor."</td>
|
||||
<td class='lehrform'>".$lv_faktor->lehrform_kurzbz."</td>
|
||||
<td class='von'>".$lv_faktor->studiensemester_kurzbz_von."</td>
|
||||
<td class='bis'>".$lv_faktor->studiensemester_kurzbz_bis."</td>
|
||||
<td><button class='edit'>".$p->t('global/bearbeiten')."</button></td>
|
||||
|
||||
Reference in New Issue
Block a user