diff --git a/application/controllers/api/frontend/v1/education/Lehrveranstaltung.php b/application/controllers/api/frontend/v1/education/Lehrveranstaltung.php
index 20e36f461..636c8e3f3 100644
--- a/application/controllers/api/frontend/v1/education/Lehrveranstaltung.php
+++ b/application/controllers/api/frontend/v1/education/Lehrveranstaltung.php
@@ -22,7 +22,9 @@ class Lehrveranstaltung extends FHCAPI_Controller
public function __construct()
{
parent::__construct(array(
- 'getTemplateLvTree' => self::PERM_LOGGED
+ 'getTemplateLvTree' => array(
+ 'lehre/lehrveranstaltung:rw'
+ )
));
// Load model LehrveranstaltungModel
diff --git a/application/controllers/codex/UHSTAT1.php b/application/controllers/codex/UHSTAT1.php
index 4486f9d74..ff59ef41a 100644
--- a/application/controllers/codex/UHSTAT1.php
+++ b/application/controllers/codex/UHSTAT1.php
@@ -5,8 +5,12 @@ if (! defined("BASEPATH")) exit("No direct script access allowed");
class UHSTAT1 extends FHC_Controller
{
const BERECHTIGUNG_UHSTAT_VERWALTEN = 'student/uhstat1daten_verwalten';
+ const LOGIN_SESSION_INDEX = 'bewerbung/user';
const PERSON_ID_SESSION_INDEX = 'bewerbung/personId';
const CODEX_OESTERREICH = 'A';
+ const CODEX_UNKNOWN_YEAR = 9999;
+ const CODEX_UNKNOWN_NATION = 'XXX';
+ const CODEX_UNKNOWN_BILDUNGMAX = 999;
const LOWER_BOUNDARY_YEARS = 160;
const UPPER_BOUNDARY_YEARS = 20;
@@ -210,7 +214,9 @@ class UHSTAT1 extends FHC_Controller
else
return true;
- if (!isset($bildungsstaat)) return true;
+ // if no Bildungsstaat or Bildungmax unknown - valid
+ if (!isset($bildungsstaat) || $bildungmax == self::CODEX_UNKNOWN_BILDUNGMAX) return true;
+
// find out if abschluss is in Austria
$this->AbschlussModel->addSelect("in_oesterreich");
@@ -219,8 +225,11 @@ class UHSTAT1 extends FHC_Controller
if (hasData($abschlussRes))
{
$in_oesterreich = getData($abschlussRes)[0]->in_oesterreich;
- // invalid if abschluss in Austria, but not Bildungsstaat, or abschluss not in Austria, but Bildungsstaat in Austria
- return ($in_oesterreich && $bildungsstaat == self::CODEX_OESTERREICH) || (!$in_oesterreich && $bildungsstaat != self::CODEX_OESTERREICH);
+
+ // valid if Bildungsstaat and Abschluss in Austria, or Bildungsstaat and Abschluss not in Austria
+ // (or Abschluss not in Austria and Bildungsstaat unknown)
+ return ($in_oesterreich && $bildungsstaat == self::CODEX_OESTERREICH)
+ || (!$in_oesterreich && ($bildungsstaat != self::CODEX_OESTERREICH || $bildungsstaat == self::CODEX_UNKNOWN_NATION));
}
return false;
@@ -363,7 +372,11 @@ class UHSTAT1 extends FHC_Controller
// get realistic birth years, dated back from current year
$currYear = date("Y");
- $formMetaData['jahre'] = range($currYear - self::UPPER_BOUNDARY_YEARS, $currYear - self::LOWER_BOUNDARY_YEARS);
+ $yearRange = range($currYear - self::UPPER_BOUNDARY_YEARS, $currYear - self::LOWER_BOUNDARY_YEARS);
+ $formMetaData['jahre'] = array_combine($yearRange, $yearRange);
+
+ // add "unknown" option
+ $formMetaData['jahre'][self::CODEX_UNKNOWN_YEAR] = 'unbekannt';
return success($formMetaData);
}
@@ -411,7 +424,10 @@ class UHSTAT1 extends FHC_Controller
private function _getValidPersonId($berechtigungsArt)
{
// if coming from bewerbungstool - person id is in session (person must be logged in bewerbungstool)
- if (isset($_SESSION[self::PERSON_ID_SESSION_INDEX]) && is_numeric($_SESSION[self::PERSON_ID_SESSION_INDEX]))
+ if (isset($_SESSION[self::PERSON_ID_SESSION_INDEX])
+ && is_numeric($_SESSION[self::PERSON_ID_SESSION_INDEX])
+ && isset($_SESSION[self::LOGIN_SESSION_INDEX])
+ )
return $_SESSION[self::PERSON_ID_SESSION_INDEX];
// if person id passed directly...
diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php
index 58bc1fb7c..525f63c3b 100644
--- a/application/controllers/jobs/OneTimeMessages.php
+++ b/application/controllers/jobs/OneTimeMessages.php
@@ -51,7 +51,7 @@ class OneTimeMessages extends JOB_Controller
FROM public.tbl_prestudent p
JOIN public.tbl_prestudentstatus ps USING (prestudent_id)
JOIN public.tbl_studiengang s USING (studiengang_kz)
- WHERE ps.status_kurzbz = \'Wartender\'
+ WHERE get_rolle_prestudent(ps.prestudent_id, NULL) = \'Wartender\'
AND ps.studiensemester_kurzbz = ?
AND ps.datum <= NOW() - \''.$days.' days\'::interval
AND s.typ = ?
diff --git a/application/controllers/lehre/lvplanung/LvTemplateUebersicht.php b/application/controllers/lehre/lvplanung/LvTemplateUebersicht.php
index eb01d90c8..b1ab2fe26 100644
--- a/application/controllers/lehre/lvplanung/LvTemplateUebersicht.php
+++ b/application/controllers/lehre/lvplanung/LvTemplateUebersicht.php
@@ -8,7 +8,7 @@ class LvTemplateUebersicht extends Auth_Controller
// Set required permissions
parent::__construct(
array(
- 'index' => 'basis/vilesci:rw',
+ 'index' => 'lehre/lehrveranstaltung:rw',
)
);
diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php
index c1649587d..e45c4ad34 100644
--- a/application/libraries/AntragLib.php
+++ b/application/libraries/AntragLib.php
@@ -1463,12 +1463,6 @@ class AntragLib
elseif($antrag->status == Studierendenantragstatus_model::STATUS_APPROVED && $antrag->datum > $datumStatus)
return success(-2);
}
- if ($antrag->typ == Studierendenantrag_model::TYP_UNTERBRECHUNG)
- {
- // NOTE(chris): Ignore canceled ones
- if ($antrag->status == Studierendenantragstatus_model::STATUS_CANCELLED)
- continue;
- }
if ($antrag->typ == Studierendenantrag_model::TYP_WIEDERHOLUNG)
{
if($antrag->status == Studierendenantragstatus_model::STATUS_PASS)
diff --git a/application/libraries/issues/PlausicheckDefinitionLib.php b/application/libraries/issues/PlausicheckDefinitionLib.php
index b44a5ce19..d8c26d43a 100644
--- a/application/libraries/issues/PlausicheckDefinitionLib.php
+++ b/application/libraries/issues/PlausicheckDefinitionLib.php
@@ -15,7 +15,6 @@ class PlausicheckDefinitionLib
'AktSemesterNull' => 'AktSemesterNull',
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
- 'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
'DatumSponsionFehlt' => 'DatumSponsionFehlt',
'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
@@ -36,6 +35,7 @@ class PlausicheckDefinitionLib
'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher',
'DualesStudiumOhneMarkierung' => 'DualesStudiumOhneMarkierung'
//'StudienplanUngueltig' => 'StudienplanUngueltig'
+ //'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten'
);
/**
diff --git a/application/models/codex/Bismeldestichtag_model.php b/application/models/codex/Bismeldestichtag_model.php
index 319aa7be7..f9b412e7a 100644
--- a/application/models/codex/Bismeldestichtag_model.php
+++ b/application/models/codex/Bismeldestichtag_model.php
@@ -33,6 +33,23 @@ class Bismeldestichtag_model extends DB_Model
]);
}
+ /**
+ * Liefert nächstliegenden Bismeldestichtag.
+ * @return object success or error
+ */
+ public function getNextMeldestichtag()
+ {
+ $this->addSelect('meldestichtag');
+ $this->addSelect('studiensemester_kurzbz');
+
+ $this->addOrder('meldestichtag', 'ASC');
+ $this->addLimit(1);
+
+ return $this->loadWhere([
+ 'meldestichtag >= NOW()' => null
+ ]);
+ }
+
/**
* Prüft, ob Meldestichtag für ein bestimmtes Statusdatum und Studiensemester erreicht ist.
*
diff --git a/application/models/education/Lvgesamtnote_model.php b/application/models/education/Lvgesamtnote_model.php
index f0c1883de..975833287 100644
--- a/application/models/education/Lvgesamtnote_model.php
+++ b/application/models/education/Lvgesamtnote_model.php
@@ -10,5 +10,6 @@ class Lvgesamtnote_model extends DB_Model
parent::__construct();
$this->dbTable = 'campus.tbl_lvgesamtnote';
$this->pk = array('student_uid', 'studiensemester_kurzbz', 'lehrveranstaltung_id');
+ $this->hasSequence = false;
}
}
diff --git a/application/models/education/Paabgabe_model.php b/application/models/education/Paabgabe_model.php
index b876030a6..5fb58cc81 100644
--- a/application/models/education/Paabgabe_model.php
+++ b/application/models/education/Paabgabe_model.php
@@ -25,7 +25,7 @@ class Paabgabe_model extends DB_Model
WHERE projektarbeit_id = ?
AND paabgabetyp_kurzbz = 'end'
AND paabg.abgabedatum IS NOT NULL
- ORDER BY paabg.abgabedatum, paabg.datum DESC
+ ORDER BY paabg.abgabedatum DESC, paabg.datum DESC
LIMIT 1";
return $this->execQuery($qry, array($projektarbeit_id));
diff --git a/application/models/education/Pruefung_model.php b/application/models/education/Pruefung_model.php
index 214d6519f..409c0b733 100644
--- a/application/models/education/Pruefung_model.php
+++ b/application/models/education/Pruefung_model.php
@@ -175,6 +175,8 @@ class Pruefung_model extends DB_Model
$this->addSelect('campus.get_status_studierendenantrag(a.studierendenantrag_id) status');
$this->addSelect('pss.ausbildungssemester');
+ $this->addJoin('(SELECT MAX(datum) AS datum, lehreinheit_id AS le_id, student_uid AS stud_uid FROM lehre.tbl_pruefung p WHERE pruefungstyp_kurzbz IN (\'kommPruef\', \'zusKommPruef\') GROUP BY lehreinheit_id, student_uid) lpd',
+ 'p.datum = lpd.datum AND p.lehreinheit_id = lpd.le_id AND p.student_uid = lpd.stud_uid');
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->addJoin('public.tbl_student s', 'student_uid');
diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php
index e138d1a1c..b7c0667cb 100644
--- a/application/models/education/Studierendenantrag_model.php
+++ b/application/models/education/Studierendenantrag_model.php
@@ -96,7 +96,8 @@ class Studierendenantrag_model extends DB_Model
Studierendenantragstatus_model::STATUS_REJECTED,
Studierendenantragstatus_model::STATUS_OBJECTION_DENIED,
Studierendenantragstatus_model::STATUS_DEREGISTERED,
- Studierendenantragstatus_model::STATUS_PAUSE
+ Studierendenantragstatus_model::STATUS_PAUSE,
+ Studierendenantragstatus_model::STATUS_REMINDERSENT
]);
$this->db->or_group_start();
$this->db->where('s.studierendenantrag_statustyp_kurzbz', Studierendenantragstatus_model::STATUS_APPROVED);
@@ -354,7 +355,7 @@ class Studierendenantrag_model extends DB_Model
$this->db->where([
'prestudent_id' => $prestudent_id,
'typ' => Studierendenantrag_model::TYP_UNTERBRECHUNG,
- 'campus.get_status_studierendenantrag(studierendenantrag_id) !=' => Studierendenantragstatus_model::STATUS_CANCELLED,
+ 'campus.get_status_studierendenantrag(studierendenantrag_id) NOT IN (\'' . Studierendenantragstatus_model::STATUS_CANCELLED . '\', \'' . Studierendenantragstatus_model::STATUS_REJECTED . '\')' => null,
'start < ' . $end => null,
'datum_wiedereinstieg > ' . $start => null,
]);
@@ -410,7 +411,7 @@ class Studierendenantrag_model extends DB_Model
FROM campus.tbl_studierendenantrag
LEFT JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE typ=?
- AND campus.get_status_studierendenantrag(studierendenantrag_id) != ?
+ AND campus.get_status_studierendenantrag(studierendenantrag_id) NOT IN ?
AND prestudent_id=?
) a ON (s.start < a.ende AND s.ende > a.start)
WHERE s.start >= (" . $subquery . ")
@@ -420,7 +421,10 @@ class Studierendenantrag_model extends DB_Model
return $this->execQuery($sql, [
$max_length,
self::TYP_UNTERBRECHUNG,
- Studierendenantragstatus_model::STATUS_CANCELLED,
+ array(
+ Studierendenantragstatus_model::STATUS_CANCELLED,
+ Studierendenantragstatus_model::STATUS_REJECTED
+ ),
$prestudent_id,
$studiensemester ?: $prestudent_id,
$max_length * $max_starters
diff --git a/application/models/organisation/Geschaeftsjahr_model.php b/application/models/organisation/Geschaeftsjahr_model.php
index 4f0d03b73..fdd774a8c 100644
--- a/application/models/organisation/Geschaeftsjahr_model.php
+++ b/application/models/organisation/Geschaeftsjahr_model.php
@@ -32,11 +32,20 @@ class Geschaeftsjahr_model extends DB_Model
* Gets next Geschaeftsjahr, as determined by its start date
* @return array|null
*/
- public function getNextGeschaeftsjahr()
+ public function getNextGeschaeftsjahr($offsetDays=null)
{
$query = 'SELECT *
- FROM public.tbl_geschaeftsjahr
- WHERE start > now()
+ FROM public.tbl_geschaeftsjahr WHERE ';
+
+ if(!is_null($offsetDays))
+ {
+ $query .= "start > now() - '".$offsetDays." days'::interval";
+ }
+ else
+ {
+ $query .= 'start > now()';
+ }
+ $query .= '
ORDER BY start
LIMIT 1';
diff --git a/application/models/system/Recipient_model.php b/application/models/system/Recipient_model.php
index d74d03243..1c7811f93 100644
--- a/application/models/system/Recipient_model.php
+++ b/application/models/system/Recipient_model.php
@@ -327,7 +327,7 @@ class Recipient_model extends DB_Model
pr.nachname,
ms.person_id,
mrou.token
- ORDER BY sent DESC';
+ ORDER BY sent DESC LIMIT 1500';
return $this->execQuery($sql, array($person_id, $functions, $person_id));
}
diff --git a/application/views/codex/uhstat1.php b/application/views/codex/uhstat1.php
index 78a30b3e5..a255781f1 100644
--- a/application/views/codex/uhstat1.php
+++ b/application/views/codex/uhstat1.php
@@ -74,16 +74,23 @@ $saved = isset($saved) && $saved === true;
@@ -94,16 +101,23 @@ $saved = isset($saved) && $saved === true;
p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
-
+
+
+
+
+
+
@@ -114,16 +128,23 @@ $saved = isset($saved) && $saved === true;
p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
-
+
+
+
+
+
+
@@ -161,16 +182,23 @@ $saved = isset($saved) && $saved === true;
@@ -181,16 +209,23 @@ $saved = isset($saved) && $saved === true;
p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
-
+
+
+
+
+
+
@@ -201,16 +236,23 @@ $saved = isset($saved) && $saved === true;
p->t('uhstat', 'inDenHeutigenGrenzen')).')' ?>
-
+
+
+
+
+
+
@@ -271,7 +313,7 @@ $saved = isset($saved) && $saved === true;
-
-
+
+
load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/lehre/lvplanung/lvTemplateUebersicht.php b/application/views/lehre/lvplanung/lvTemplateUebersicht.php
index 54afad0a5..5c873486c 100644
--- a/application/views/lehre/lvplanung/lvTemplateUebersicht.php
+++ b/application/views/lehre/lvplanung/lvTemplateUebersicht.php
@@ -10,7 +10,10 @@ $includesArray = array(
'navigationcomponent' => true,
'filtercomponent' => true,
'customJSModules' => array('public/js/apps/lehre/lvplanung/LvTemplates.js'),
- 'customCSSs' => array('public/css/Fhc.css')
+ 'customCSSs' => array(
+ 'public/css/Fhc.css',
+ 'public/css/lvTemplateUebersicht.css'
+ )
);
$this->load->view('templates/FHC-Header', $includesArray);
diff --git a/include/tw/vilesci_menu_main.inc.php b/include/tw/vilesci_menu_main.inc.php
index 2aa2e67d3..2a1ca74ae 100644
--- a/include/tw/vilesci_menu_main.inc.php
+++ b/include/tw/vilesci_menu_main.inc.php
@@ -70,6 +70,7 @@ $menu=array
'link'=>'left.php?categorie=Lehre', 'target'=>'nav',
'Gruppenverwaltung'=>array('name'=>'Gruppen', 'permissions'=>array('admin','lv-plan','support','lehre/gruppe'), 'link'=>'stammdaten/lvbgruppenverwaltung.php', 'target'=>'main'),
'Lehrveranstaltung'=>array('name'=>'Lehrveranstaltung', 'link'=>'lehre/lehrveranstaltung_frameset.html', 'target'=>'main'),
+ 'lvTemplateUebersicht'=>array('name'=>'LV-Template Übersicht', 'link'=>'../index.ci.php/lehre/lvplanung/LvTemplateUebersicht', 'target'=>'_blank'),
'Studienordnung'=>array('name'=>'Studienordnung', 'link'=>'lehre/studienordnung.php', 'target'=>'_blank','permissions'=>array('lehre/studienordnung')),
'StudienplanGueltigkeit'=>array('name'=>'Studienplan Gültigkeit', 'link'=>'lehre/studienplan_gueltigkeit.php', 'target'=>'main','permissions'=>array('lehre/studienordnung')),
'StudienplanVorruecken'=>array('name'=>'Studienplan vorrücken', 'link'=>'lehre/studienplan_vorrueckung.php', 'target'=>'main','permissions'=>array('lehre/studienplan')),
diff --git a/public/css/lvTemplateUebersicht.css b/public/css/lvTemplateUebersicht.css
new file mode 100644
index 000000000..af279b8cb
--- /dev/null
+++ b/public/css/lvTemplateUebersicht.css
@@ -0,0 +1,3 @@
+html {
+ font-size: .75em;
+}
\ No newline at end of file
diff --git a/public/js/apps/Bismeldestichtag/Bismeldestichtag.js b/public/js/apps/Bismeldestichtag/Bismeldestichtag.js
index 04275d76a..877805b8f 100644
--- a/public/js/apps/Bismeldestichtag/Bismeldestichtag.js
+++ b/public/js/apps/Bismeldestichtag/Bismeldestichtag.js
@@ -15,8 +15,7 @@
* along with this program. If not, see .
*/
-import {BismeldestichtagTabulatorOptions} from './TabulatorSetup.js';
-import {BismeldestichtagTabulatorEventHandlers} from './TabulatorSetup.js';
+import {BismeldestichtagHelper} from './BismeldestichtagHelper.js';
import {CoreFilterCmpt} from '../../components/filter/Filter.js';
import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';
@@ -29,8 +28,60 @@ import Phrasen from '../../plugin/Phrasen.js';
const bismeldestichtagApp = Vue.createApp({
data: function() {
return {
- bismeldestichtagTabulatorOptions: BismeldestichtagTabulatorOptions,
- bismeldestichtagTabulatorEventHandlers: BismeldestichtagTabulatorEventHandlers,
+ bismeldestichtagTabulatorOptions: {
+ maxHeight: "100%",
+ minHeight: 50,
+ layout: 'fitColumns',
+ index: 'meldestichtag_id',
+ initialSort:[
+ {column:"meldestichtag", dir:"desc"}
+ ],
+ columns: [
+ {title: 'Meldestichtag', field: 'meldestichtag', headerFilter: true, formatter: function(cell){
+ return BismeldestichtagHelper.formatDate(cell.getValue());
+ }
+ },
+ {title: 'Studiensemester', field: 'studiensemester_kurzbz', headerFilter: true, sorter:function(a, b, aRow, bRow, column, dir, sorterParams) {
+
+ //aRow, bRow - the row components for the values being compared
+ let semesterStartA = new Date(aRow.getData().semester_start);
+ let semesterStartB = new Date(bRow.getData().semester_start);
+
+ return semesterStartA - semesterStartB; // difference between studiensemester start dates
+ }
+ },
+ {title: 'Semesterstart',field: 'semester_start', headerFilter: true, visible: false, formatter: function(cell){
+ return BismeldestichtagHelper.formatDate(cell.getValue());
+ }
+ },
+ {title: 'ID', field: 'meldestichtag_id', headerFilter: true, visible: false},
+ {title: 'Insertamum', field: 'insertamum', headerFilter: true, visible: false},
+ {title: 'Insertvon', field: 'insertvon', headerFilter: true, visible: false},
+ {title: 'Löschen', field: 'loeschen', headerFilter: false, formatter:function(cell){
+ return '';
+ }
+ }
+ ]
+ },
+ bismeldestichtagTabulatorEventHandlers: [
+ {
+ event: "rowClick",
+ handler: function(e, row) {
+ if (e.target.nodeName == 'DIV') {
+ let data = row.getData();
+ alert(data.studiensemester_kurzbz + ': ' + BismeldestichtagHelper.formatDate(data.meldestichtag));
+ }
+ }
+ },
+ {
+ event: "tableBuilt",
+ handler: () => {
+ this.handlerStudiensemester();
+ }
+ }
+ ],
meldestichtag: null, // date of Meldestichtag
semList: null, // all Studiensemester for dropdown
currSem: null, // selected Studiensemester
@@ -47,9 +98,6 @@ const bismeldestichtagApp = Vue.createApp({
CoreFetchCmpt,
"datepicker": VueDatePicker
},
- created() {
- this.handlerStudiensemester();
- },
methods: {
/**
* Define Studiensemester call and method to be executed after the call
diff --git a/public/js/apps/Bismeldestichtag/BismeldestichtagHelper.js b/public/js/apps/Bismeldestichtag/BismeldestichtagHelper.js
new file mode 100644
index 000000000..d51dc5134
--- /dev/null
+++ b/public/js/apps/Bismeldestichtag/BismeldestichtagHelper.js
@@ -0,0 +1,22 @@
+/**
+ * Copyright (C) 2022 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 .
+ */
+
+export const BismeldestichtagHelper = {
+ formatDate: function(date) {
+ return date.replace(/(.*)-(.*)-(.*)/, '$3.$2.$1');
+ }
+}
diff --git a/public/js/apps/Bismeldestichtag/TabulatorSetup.js b/public/js/apps/Bismeldestichtag/TabulatorSetup.js
deleted file mode 100644
index d98cc993c..000000000
--- a/public/js/apps/Bismeldestichtag/TabulatorSetup.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (C) 2022 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 .
- */
-
-/**
- *
- */
-export const BismeldestichtagTabulatorOptions = {
- maxHeight: "100%",
- minHeight: 50,
- layout: 'fitColumns',
- index: 'meldestichtag_id',
- columns: [
- {title: 'Meldestichtag',field: 'meldestichtag', headerFilter: true, formatter: function(cell){
- return BismeldestichtagTabulatorHelperFunctions._formatDate(cell.getValue());
- }
- },
- {title: 'Studiensemester', field: 'studiensemester_kurzbz', headerFilter: true, sorter:function(a, b, aRow, bRow, column, dir, sorterParams) {
-
- //aRow, bRow - the row components for the values being compared
- let semesterStartA = new Date(aRow.getData().semester_start);
- let semesterStartB = new Date(bRow.getData().semester_start);
-
- return semesterStartA - semesterStartB; // difference between studiensemester start dates
- }
- },
- {title: 'Semesterstart',field: 'semester_start', headerFilter: true, visible: false, formatter: function(cell){
- return BismeldestichtagTabulatorHelperFunctions._formatDate(cell.getValue());
- }
- },
- {title: 'ID', field: 'meldestichtag_id', headerFilter: true, visible: false},
- {title: 'Insertamum', field: 'insertamum', headerFilter: true, visible: false},
- {title: 'Insertvon', field: 'insertvon', headerFilter: true, visible: false},
- {title: 'Löschen', field: 'loeschen', headerFilter: false, formatter:function(cell){
- return '';
- }
- }
- ]
-};
-
-/**
- *
- */
-export const BismeldestichtagTabulatorEventHandlers = [
- {
- event: "rowClick",
- handler: function(e, row) {
- if (e.target.nodeName == 'DIV') {
- let data = row.getData();
- alert(data.studiensemester_kurzbz + ': ' + BismeldestichtagTabulatorHelperFunctions._formatDate(data.meldestichtag));
- }
- }
- }
-];
-
-let BismeldestichtagTabulatorHelperFunctions = {
- _formatDate: function(date) {
- return date.replace(/(.*)-(.*)-(.*)/, '$3.$2.$1');
- }
-}
diff --git a/public/js/lehre/lvplanung/LvTemplateUebersicht.js b/public/js/lehre/lvplanung/LvTemplateUebersicht.js
index 414434904..be0da75b8 100644
--- a/public/js/lehre/lvplanung/LvTemplateUebersicht.js
+++ b/public/js/lehre/lvplanung/LvTemplateUebersicht.js
@@ -21,6 +21,45 @@ export default {
},
computed: {
tabulatorOptions() {
+ const fhcValuesLookup = function(cell) {
+ var values = {};
+ const field = cell.getField();
+ const data = cell.getTable().getData();
+ const collectvalues = function(rows, field) {
+ var values = {};
+ var childvalues = {};
+ for(const row of rows) {
+ const rowvalue = (row[field] !== null) ? row[field] : '';
+ values[rowvalue] = rowvalue;
+ if(row['_children'] && row['_children'].length > 0) {
+ childvalues = collectvalues(row['_children'], field);
+ values = {...values, ...childvalues}
+ }
+ }
+ return values;
+ }
+ values = collectvalues(data, field);
+ const vals = Object.keys(values).sort();
+ if(vals.indexOf('') === -1) {
+ vals.unshift('');
+ }
+ return vals;
+ };
+ const fhctreefilter = function(headerValue, rowValue, rowData, filterParams){
+ if (rowData['_children'] && rowData['_children'].length > 0) {
+ for (var i in rowData['_children']) {
+ return rowValue == headerValue ||
+ fhctreefilter(
+ headerValue,
+ rowData['_children'][i][filterParams.field],
+ rowData['_children'][i],
+ filterParams
+ );
+ }
+ }
+
+ return rowValue == headerValue;
+ };
const self = this;
return {
// NOTE: data is set on table built to await preselected actual Studiensemester
@@ -42,11 +81,11 @@ export default {
columns: [
{title: 'LV-ID', field: 'lehrveranstaltung_id', headerFilter: true, visible: false},
{title: 'LV Kurzbz', field: 'kurzbz', headerFilter: true, visible:false, width: 70},
- {title: 'STG Kurzbz', field: 'stg_typ_kurzbz', headerFilter: true, visible:true, width: 80},
+ {title: 'STG Kurzbz', field: 'stg_typ_kurzbz', headerFilter: "list", headerFilterParams: {valuesLookup: fhcValuesLookup}, headerFilterFunc: fhctreefilter, headerFilterFuncParams: {field: 'stg_typ_kurzbz'}, visible:true, width: 80},
{title: 'OrgEinheit', field: 'lv_oe_bezeichnung', headerFilter: true, visible: false, width: 250},
{title: 'Lehrtyp Kurzbz', field: 'lehrtyp_kurzbz', headerFilter: true, visible:false, width: 70},
- {title: 'Studiengangtyp', field: 'stg_typ_bezeichnung', headerFilter: true, width: 150},
- {title: 'OrgForm', field: 'orgform_kurzbz', headerFilter: true, width: 70},
+ {title: 'Studiengangtyp', field: 'stg_typ_bezeichnung', headerFilter: "list", headerFilterParams: {valuesLookup: fhcValuesLookup}, headerFilterFunc: fhctreefilter, headerFilterFuncParams: {field: 'stg_typ_bezeichnung'}, width: 150},
+ {title: 'OrgForm', field: 'orgform_kurzbz', headerFilter: "list", headerFilterParams: {valuesLookup: fhcValuesLookup}, headerFilterFunc: fhctreefilter, headerFilterFuncParams: {field: 'orgform_kurzbz'}, width: 70},
{title: 'Semester', field: 'semester', headerFilter: true, width: 50},
{title: 'Lehrveranstaltung', field: 'lv_bezeichnung', headerFilter: true, minWidth: 250},
{title: 'Lehrveranstaltung ENG', field: 'bezeichnung_english', headerFilter: true, minWidth: 250},
diff --git a/system/dbupdate_3.4/41150_oe-pfad_db_view.php b/system/dbupdate_3.4/41150_oe-pfad_db_view.php
index c108fcd77..65686dbcb 100644
--- a/system/dbupdate_3.4/41150_oe-pfad_db_view.php
+++ b/system/dbupdate_3.4/41150_oe-pfad_db_view.php
@@ -1,15 +1,11 @@
db_query("SELECT * FROM information_schema.views WHERE table_catalog = '" . DB_NAME . "' AND table_schema = 'public' AND table_name = 'vw_oe_path'"))
-{
- if($db->db_num_rows($result) == 0)
- {
- $qry = "
+$qry = "
CREATE OR REPLACE VIEW public.vw_oe_path AS
- WITH RECURSIVE vw_oe_path(oe_kurzbz, bezeichnung, oe_parent_kurzbz, organisationseinheittyp_kurzbz, oetyp_bezeichnung, depth, path) AS (
+ WITH RECURSIVE vw_oe_path(oe_kurzbz, bezeichnung, oe_parent_kurzbz, organisationseinheittyp_kurzbz, oetyp_bezeichnung, depth, path, path_kurzbz) AS (
SELECT
- oe.oe_kurzbz, oe.bezeichnung, oe.oe_parent_kurzbz, oe.organisationseinheittyp_kurzbz, oetyp.bezeichnung AS oetyp_bezeichnung, 0, '/' || oetyp.bezeichnung || ' ' || oe.bezeichnung AS path
+ oe.oe_kurzbz, oe.bezeichnung, oe.oe_parent_kurzbz, oe.organisationseinheittyp_kurzbz, oetyp.bezeichnung AS oetyp_bezeichnung, 0, '/' || oetyp.bezeichnung || ' ' || oe.bezeichnung AS path, '/' || oe.oe_kurzbz AS path_kurzbz
FROM
public.tbl_organisationseinheit oe
JOIN
@@ -18,7 +14,7 @@ if ($result = $db->db_query("SELECT * FROM information_schema.views WHERE table_
oe.oe_parent_kurzbz IS NULL
UNION ALL
SELECT
- oe.oe_kurzbz, oe.bezeichnung, oe.oe_parent_kurzbz, oe.organisationseinheittyp_kurzbz, oetyp.bezeichnung AS oetyp_bezeichnung, depth + 1, oet.path || '/' || oetyp.bezeichnung || ' ' || oe.bezeichnung
+ oe.oe_kurzbz, oe.bezeichnung, oe.oe_parent_kurzbz, oe.organisationseinheittyp_kurzbz, oetyp.bezeichnung AS oetyp_bezeichnung, depth + 1, oet.path || '/' || oetyp.bezeichnung || ' ' || oe.bezeichnung, oet.path_kurzbz || '/' || oe.oe_kurzbz AS path_kurzbz
FROM
public.tbl_organisationseinheit oe, vw_oe_path oet
JOIN
@@ -29,11 +25,27 @@ if ($result = $db->db_query("SELECT * FROM information_schema.views WHERE table_
SELECT * FROM vw_oe_path ORDER BY path, depth;
GRANT SELECT ON public.vw_oe_path TO vilesci;
- ";
-
+";
+
+
+if ($result = $db->db_query("SELECT * FROM information_schema.views WHERE table_catalog = '" . DB_NAME . "' AND table_schema = 'public' AND table_name = 'vw_oe_path'"))
+{
+ if($db->db_num_rows($result) == 0)
+ {
if (!$db->db_query($qry))
echo 'public.vw_oe_path: ' . $db->db_last_error() . '
';
else
echo 'public.vw_oe_path: erstellt
';
}
}
+
+if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE table_catalog = '" . DB_NAME . "' AND table_schema = 'public' AND table_name = 'vw_oe_path' AND column_name = 'path_kurzbz'"))
+{
+ if($db->db_num_rows($result) == 0)
+ {
+ if (!$db->db_query($qry))
+ echo 'public.vw_oe_path: ' . $db->db_last_error() . '
';
+ else
+ echo 'public.vw_oe_path: neu erstellt mit zusätzlicher spalte path_kurzbz
';
+ }
+}
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index 89dc427c3..59c4a2246 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -9987,13 +9987,13 @@ Any unusual occurrences
'phrases' => array(
array(
'sprache' => 'German',
- 'text' => 'Der Plagiatscheck wurde durchgeführt und bestätigt, dass der zentrale Inhalt der Arbeit im erforderlichen Ausmaß eigenständig verfasst wurde (vgl. Satzungsteil Studienrechtliche Bestimmungen / Prüfungsordnung, § 18 Abs. 2 und 3).',
+ 'text' => 'Der Plagiatscheck wurde durchgeführt und bestätigt, dass der zentrale Inhalt der Arbeit im erforderlichen Ausmaß eigenständig verfasst wurde (vgl. Satzungsteil Studienrechtliche Bestimmungen / Prüfungsordnung, § 20 Abs. 2 und 3).',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
- 'text' => 'The plagiarism check has been carried out and confirms that the central content of the thesis has been written independently to the required extent (cf. part of the Statutes on Studies Act Provisions / Examination Regulations, § 18 Para. 2 and 3).',
+ 'text' => 'The plagiarism check has been carried out and confirms that the central content of the thesis has been written independently to the required extent (cf. part of the Statutes on Studies Act Provisions / Examination Regulations, § 20 Para. 2 and 3).',
'description' => '',
'insertvon' => 'system'
)
@@ -18148,6 +18148,26 @@ array(
)
)
),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'alledurchgefuehrten',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Alle durchgeführten anzeigen',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Show all performed',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'international',
'category' => 'international',
@@ -18663,6 +18683,366 @@ array(
)
)
),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusGeplant',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'geplant',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'planned',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusGeplantDesc',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Studierende hat die Maßnahme geplant.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'The student has planned the measure.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusAkzeptiert',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'akzeptiert',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'accepted',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusAkzeptiertDesc',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Die geplante Maßnahme wurde akzeptiert.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'The planned measure has been accepted.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusDurchgefuehrt',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'durchgeführt',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'performed',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusDurchgefuehrtDesc',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Eine Bestätigung wurde hochgeladen.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'A confirmation has been uploaded.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusBestaetigt',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'bestätigt',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'confirmed',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusBestaetigtDesc',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Die hochgeladene Bestätigung wurde akzeptiert.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'The uploaded confirmation has been accepted.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusAbgelehnt',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'abgelehnt',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'declined',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'statusAbgelehntDesc',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Die Maßnahme wurde abgelehnt.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'The measure was rejected.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'ampelRed',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Es wurden keine Maßnahmen geplant oder alle wurden abgelehnt.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'No measures have been planned, or all have been rejected.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'ampelYellow',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Mindestens eine Maßnahme wurde akzeptiert.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'At least one measure has been accepted.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'ampelOrange',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Es gibt mindestens eine geplante oder durchgeführte Maßnahme.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'There is at least one planned or performed measure.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'ampelGreenyellow',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Nur bestätigte Maßnahmen vorhanden, aber weniger als 5 ECTs.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Only confirmed measures, but fewer than 5 ECTs.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'ampelGreen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Es wurden 5 ECTs erreicht.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => '5 ECTs points have been achieved.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'mailMeldungzuviele',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Die Anzahl der Empfänger überschreitet 50. Bitte verwenden Sie einen Filter (z.B. Semester), um die Empfängeranzahl zu reduzieren.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'The number of recipients exceeds 50. Please use a filter (e.g., semester) to reduce the number of recipients.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'mailMeldung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Keine Studierenden ohne geplante Maßnahmen gefunden.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'No students without planned measures were found.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'mailButton',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'E-Mail nur an Studierende, die keine Maßnahmen geplant haben.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Send email only to students who have no planned measures.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'international',
'category' => 'international',
@@ -18703,6 +19083,26 @@ array(
)
)
),
+ array(
+ 'app' => 'international',
+ 'category' => 'international',
+ 'phrase' => 'mailversenden',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Mail versenden',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Send mail',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'international',
'category' => 'international',
@@ -25253,7 +25653,7 @@ array(
'insertvon' => 'system'
)
)
- ),
+ ),
array(
'app' => 'personalverwaltung',
'category' => 'gehaltsband',
@@ -28826,13 +29226,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
- 'text' => 'Softwareanforderung für die Lehre',
+ 'text' => 'Softwareanforderung und Lizenzmanagement für die Lehre',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
- 'text' => 'Software Request for Education',
+ 'text' => 'Software Request and License management for Education',
'description' => '',
'insertvon' => 'system'
)
@@ -30745,6 +31145,28 @@ array(
)
)
),
+ // Betriebsmittel end
+ array(
+ 'app' => 'core',
+ 'category' => 'uhstat',
+ 'phrase' => 'unbekannt',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'unbekannt',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'unknown',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ )
+
);
diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php
index 5afe1f3df..49fa02b48 100644
--- a/vilesci/lehre/lehreinheiten_vorrueckung.php
+++ b/vilesci/lehre/lehreinheiten_vorrueckung.php
@@ -106,7 +106,7 @@ echo '
-Lehreinheiten Vorrückung
+LV-Teile Vorrückung
';
echo '