Compare commits

..

20 Commits

Author SHA1 Message Date
ma0068 b217681ee5 use model-type for interessenten anlegen, listNew 2026-07-14 15:23:06 +02:00
ma0068 7841a73fc0 prepare field bewerbung_abgeschicktamum for showing in frontend (datestamp in database) and add also model-type to datepicker 2026-07-14 15:05:54 +02:00
ma0068 2064008f9e add model-type to fields Betriebsmittel/ausgegebenam, Betriebsmittel/retouram, Funktionen/datumvon und Funktionen/datumbis 2026-07-14 14:31:13 +02:00
ma0068 19b9906c86 Aufnahmetermine: use model-type isodate for field anmeldedatum 2026-07-14 14:23:37 +02:00
ma0068 2c3913a763 Mobility: use model-type isodate for fields von and bis 2026-07-14 14:19:25 +02:00
ma0068 9111edf442 Dokumente: use model-type isodate for field nachgereicht_am 2026-07-14 14:06:59 +02:00
ma0068 b1c47da3c3 use model-type isodate for fields in StatusModal datum and bestaetigtam 2026-07-14 14:01:12 +02:00
ma0068 67eb238876 use model-type isodate for field Details Gebdatum 2026-07-14 13:37:19 +02:00
Harald Bamberger a139cc8d2e initialize with luxon date iso format 2026-07-14 13:24:04 +02:00
Harald Bamberger 35ecbdefa8 studvw prestudent ZGV date fields and konto date fields use iso date as model-type 2026-07-14 13:17:27 +02:00
Harald Bamberger 5f0b1ace51 Merge branch 'epic/LV-Evaluierung_STG-KF-Datenaggregation' 2026-07-14 07:33:24 +02:00
Harald Bamberger b891d8baa5 Merge branch 'master' into epic/LV-Evaluierung_STG-KF-Datenaggregation 2026-07-13 18:01:35 +02:00
Cristina 5dbcf9ce70 Added sancho_header_lvevaluierung_rollout.jpg and sancho_footer_lvevaluierung_rollout.jpg 2026-07-13 17:31:34 +02:00
adisposkofh c26db6cc40 minor fix to tabulator localized columns parsing 2026-07-09 11:44:04 +02:00
Cristina 8548b93ddc Added method getPreviousSameSemesterFrom in Studiensemester_model.php
Method returns the current study semester and the previous semesters of the same type (SS/WS).
2026-07-08 18:57:31 +02:00
Cristina bdc4782e9d Merge branch 'master' into epic/LV-Evaluierung_STG-KF-Datenaggregation 2026-07-08 18:54:02 +02:00
Cristina 0583990870 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2026-07-08 18:53:37 +02:00
Cristina 335753be8c Adapted Lvevaluierung Mail texte "Evaluierungszeitfenster" instead of "Evaluationszeitraum" 2026-07-06 12:19:28 +02:00
Cristina 8862f050e8 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2026-06-09 10:37:53 +02:00
Cristina 29f9b226ab Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2026-05-12 17:08:53 +02:00
31 changed files with 125 additions and 74 deletions
@@ -122,6 +122,47 @@ class Studiensemester_model extends DB_Model
return $this->execQuery($query, array($studiensemester_kurzbz, $limit));
}
/**
* Returns the current study semester and the previous semesters of the same type (SS/WS).
*
* Example:
* - SS2026, limit 3: SS2026, SS2025, SS2024
* - WS2025, limit 2: WS2025, WS2024
*
* @param $studiensemester_kurzbz
* @param $limit
*/
public function getPreviousSameSemesterFrom($studiensemester_kurzbz, $limit = 1)
{
$qry = '
SELECT
studiensemester_kurzbz,
start,
ende
FROM
public.tbl_studiensemester
WHERE
SUBSTRING(studiensemester_kurzbz FROM 1 FOR 2) = SUBSTRING(? FROM 1 FOR 2)
AND start <= (
SELECT start
FROM public.tbl_studiensemester
WHERE studiensemester_kurzbz = ?
)
ORDER BY
start DESC
LIMIT ?
';
return $this->execQuery($qry,
[
$studiensemester_kurzbz,
$studiensemester_kurzbz,
$limit
]
);
}
/**
* getNearest
*/
@@ -260,7 +260,6 @@ class Benutzerfunktion_model extends DB_Model
return $this->execQuery($query, $parameters_array);
}
/**
* Get active Kompetenzfeldleitung bei UID.
*
@@ -296,7 +295,6 @@ class Benutzerfunktion_model extends DB_Model
return $this->execQuery($query, $parameters_array);
}
public function insertBenutzerfunktion($Json)
{
unset($Json['benutzerfunktion_id']);
+1 -1
View File
@@ -130,6 +130,6 @@ class basis
*/
public function convert_html_chars($value)
{
return htmlspecialchars($value ?? '');
return htmlspecialchars($value);
}
}
+13 -13
View File
@@ -27,8 +27,8 @@ require_once(dirname(__FILE__).'/basis.class.php');
abstract class db extends basis
{
protected static $db_conn = null;
protected $db_result = null;
protected static $db_conn=null;
protected $db_result=null;
protected $debug=false;
function __construct()
@@ -46,18 +46,18 @@ abstract class db extends basis
abstract function db_connect();
abstract function db_query($sql);
abstract function db_fetch_object($result = null, $i = null);
abstract function db_fetch_array($result = null);
abstract function db_fetch_row($result = null, $i = null);
abstract function db_fetch_assoc($result = null, $i = null);
abstract function db_result($result = null, $i = null, $item = null);
abstract function db_num_rows($result = null);
abstract function db_num_fields($result = null);
abstract function db_field_name($result = null, $i = null);
abstract function db_affected_rows($result = null);
abstract function db_result_seek($result = null, $offset = null);
abstract function db_fetch_object($result=null, $i=null);
abstract function db_fetch_array($result=null);
abstract function db_fetch_row($result=null, $i=null);
abstract function db_fetch_assoc($result=null, $i=null);
abstract function db_result($result = null, $i, $item);
abstract function db_num_rows($result=null);
abstract function db_num_fields($result=null);
abstract function db_field_name($result=null, $i);
abstract function db_affected_rows($result=null);
abstract function db_result_seek($result=null, $offset);
abstract function db_last_error();
abstract function db_free_result($result = null);
abstract function db_free_result($result=null);
abstract function db_version();
abstract function db_escape($var);
abstract function db_null_value($var, $qoute=true);
-9
View File
@@ -33,15 +33,6 @@ class benutzer extends person
public $updateaktivam;
public $updateaktivvon;
// PHP8 adaption
public $mitarbeiter_uid;
public $studiengang;
public $studiengang_kz;
public $telefonklappe;
public $raum;
public $lektor;
public $fixangestellt;
/**
* Konstruktor - Uebergibt die Connection und laedt optional einen Benutzer
* @param $uid Benutzer der geladen werden soll (default=null)
+2 -2
View File
@@ -134,12 +134,12 @@ class benutzerberechtigung extends basis_db
return false;
}
if(mb_strlen($this->berechtigung_kurzbz ?? '')>32)
if(mb_strlen($this->berechtigung_kurzbz)>32)
{
$this->errormsg = 'Berechtigung_kurzbz darf nicht laenger als 32 Zeichen sein';
return false;
}
if(mb_strlen($this->uid ?? '')>32)
if(mb_strlen($this->uid)>32)
{
$this->errormsg = 'UID darf nicht laenger als 32 Zeichen sein';
return false;
+1 -1
View File
@@ -356,7 +356,7 @@ class datum
*/
public function formatDatum($datum, $format='Y-m-d H:i:s', $strict=false)
{
if (trim($datum ?? '') == '')
if(trim($datum)=='')
return '';
$ts='';
-2
View File
@@ -34,8 +34,6 @@ class lehrform extends basis_db
public $bezeichnung_kurz;
public $bezeichnung_lang;
public $lehrform_kurzbz;
/**
* Konstruktor - Laedt optional eine Lehrform
* @param $lehrform_kurbz Lehrform die geladen werden soll (default=null)
+5 -5
View File
@@ -661,27 +661,27 @@ class lehrveranstaltung extends basis_db
public function validate()
{
//Laenge Pruefen
if (mb_strlen($this->bezeichnung ?? '') > 128)
if (mb_strlen($this->bezeichnung) > 128)
{
$this->errormsg = 'Bezeichnung darf nicht laenger als 128 Zeichen sein';
return false;
}
if (mb_strlen($this->kurzbz ?? '') > 16)
if (mb_strlen($this->kurzbz) > 16)
{
$this->errormsg = 'Kurzbez darf nicht laenger als 16 Zeichen sein';
return false;
}
if (mb_strlen($this->anmerkung ?? '') > 64)
if (mb_strlen($this->anmerkung) > 64)
{
$this->errormsg = 'Anmerkung darf nicht laenger als 64 Zeichen sein';
return false;
}
if (mb_strlen($this->lehreverzeichnis ?? '') > 16)
if (mb_strlen($this->lehreverzeichnis) > 16)
{
$this->errormsg = 'Lehreverzeichnis darf nicht laenger als 16 Zeichen sein';
return false;
}
if (mb_strlen($this->lvnr ?? '') > 32)
if (mb_strlen($this->lvnr) > 32)
{
$this->errormsg = 'LVNR darf nicht laenger als 32 Zeichen sein';
return false;
-1
View File
@@ -40,7 +40,6 @@ class lvangebot extends basis_db
protected $anmeldefenster_start; // timestamp
protected $anmeldefenster_ende; // timestamp
protected $updateamum; // timestamp
protected $updatenamum;
protected $updatevon; // varchar(32)
protected $insertamum; // timestamp
protected $insertvon; // varchar(32)
+2 -2
View File
@@ -411,7 +411,7 @@ class mitarbeiter extends benutzer
* @param $datum_bis
* @return boolean
*/
public function getMitarbeiterStg($lektor = true, $fixangestellt = null, $stge = null, $fkt_kurzbz = '', $order = 'studiengang_kz, nachname, vorname, kurzbz', $datum_von = '', $datum_bis = '')
public function getMitarbeiterStg($lektor=true,$fixangestellt, $stge, $fkt_kurzbz, $order='studiengang_kz, nachname, vorname, kurzbz', $datum_von='', $datum_bis='')
{
$sql_query='SELECT DISTINCT campus.vw_mitarbeiter.*, studiengang_kz, tbl_studiengang.typ, tbl_studiengang.kurzbz AS stg_kurzbz FROM campus.vw_mitarbeiter
JOIN public.tbl_benutzerfunktion USING (uid) JOIN public.tbl_studiengang USING(oe_kurzbz)
@@ -1554,7 +1554,7 @@ class mitarbeiter extends benutzer
* @param $studSemArray Array mit Studiensemestern in denen der externe Lektor zumindest in einem Unterrichtet haben soll oder NULL. Wenn NULL werden nur externe Mitarbeiter ohne Lehrauftrag ausgegeben.
* @return boolean
*/
public function getMitarbeiterForZutrittskarte($filter, $fixangestellt=true, $studSemArray=array())
public function getMitarbeiterForZutrittskarte($filter, $fixangestellt=true, $studSemArray)
{
$qry = "SELECT
vorname,nachname,gebdatum,uid,personalnummer,person_id
-3
View File
@@ -49,9 +49,6 @@ class organisationseinheit extends basis_db
public $beschreibung;
public $oetyp_bezeichnung;
public $kurzzeichen;
public $freigabegrenze;
/**
* Konstruktor
+13 -13
View File
@@ -44,7 +44,7 @@ class basis_db extends db
public function db_query($sql)
{
if ($this->db_result = @pg_query(basis_db::$db_conn,$sql))
if ($this->db_result=pg_query(basis_db::$db_conn,$sql))
return $this->db_result;
else
{
@@ -53,7 +53,7 @@ class basis_db extends db
}
}
public function db_num_rows($result = null)
public function db_num_rows($result=null)
{
if(is_null($result))
return pg_num_rows($this->db_result);
@@ -61,7 +61,7 @@ class basis_db extends db
return pg_num_rows($result);
}
public function db_fetch_object($result = null, $i = null)
public function db_fetch_object($result = null, $i=null)
{
if(is_null($result))
{
@@ -79,7 +79,7 @@ class basis_db extends db
}
}
public function db_fetch_row($result = null, $i = null)
public function db_fetch_row($result = null, $i=null)
{
if(is_null($result))
{
@@ -97,7 +97,7 @@ class basis_db extends db
}
}
public function db_fetch_assoc($result = null, $i = null)
public function db_fetch_assoc($result = null, $i=null)
{
if(is_null($result))
{
@@ -115,7 +115,7 @@ class basis_db extends db
}
}
public function db_result($result = null, $i = null, $item = null)
public function db_result($result = null, $i,$item)
{
if(is_null($result))
{
@@ -153,10 +153,10 @@ class basis_db extends db
public function db_last_error()
{
return pg_last_error(basis_db::$db_conn);
return pg_last_error();
}
public function db_affected_rows($result = null)
public function db_affected_rows($result=null)
{
if(is_null($result))
return pg_affected_rows($this->db_result);
@@ -164,7 +164,7 @@ class basis_db extends db
return pg_affected_rows($result);
}
public function db_result_seek($result = null, $offset = null)
public function db_result_seek($result=null, $offset)
{
if(is_null($result))
return pg_result_seek($this->db_result, $offset);
@@ -172,7 +172,7 @@ class basis_db extends db
return pg_result_seek($result, $offset);
}
public function db_fetch_array($result = null, $row = null, $result_type=PGSQL_NUM)
public function db_fetch_array($result=null, $row=null, $result_type=PGSQL_NUM)
{
if(is_null($result))
return pg_fetch_array($this->db_result, $row, $result_type);
@@ -180,7 +180,7 @@ class basis_db extends db
return pg_fetch_array($result, $row, $result_type);
}
public function db_num_fields($result = null)
public function db_num_fields($result=null)
{
if(is_null($result))
return pg_num_fields($this->db_result);
@@ -191,7 +191,7 @@ class basis_db extends db
/**
* Liefert den Feldnamen mit index i
*/
public function db_field_name($result = null, $i = null)
public function db_field_name($result=null, $i)
{
if(is_null($result))
return pg_field_name($this->db_result, $i);
@@ -230,7 +230,7 @@ class basis_db extends db
*/
public function db_escape($var)
{
return pg_escape_string(basis_db::$db_conn, $var);
return pg_escape_string($var);
}
/**
-5
View File
@@ -68,11 +68,6 @@ class studiengang extends basis_db
public $beschreibung;
public $studiengang_typ_arr = array(); // Array mit den Studiengangstypen
public $telefon;
public $aktiv;
public $beantragung;
public $lgart_biscode;
/**
* Konstruktor
* @param studiengang_kz Kennzahl des zu ladenden Studienganges
@@ -433,6 +433,7 @@ export default {
:label="$p.t('wawi/ausgegebenam')"
name="ausgegebenam"
v-model="formData.ausgegebenam"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -449,6 +450,7 @@ export default {
:label="$p.t('wawi/retouram')"
name="retouram"
v-model="formData.retouram"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -551,6 +551,7 @@ export default {
container-class="mb-3 col-3"
type="DatePicker"
v-model="formData.datum_von"
model-type="yyyy-MM-dd"
name="datum_von"
:label="$p.t('ui/from') + ' *'"
auto-apply
@@ -566,6 +567,7 @@ export default {
container-class="mb-3 col-3"
type="DatePicker"
v-model="formData.datum_bis"
model-type="yyyy-MM-dd"
name="datum_bis"
:label="$p.t('global/bis')"
auto-apply
@@ -470,6 +470,7 @@ export default {
:label="$p.t('admission', 'anmeldundRtAm')"
type="DatePicker"
v-model="formData.anmeldedatum"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -293,6 +293,7 @@ export default {
:label="$p.t('person', 'geburtsdatum')"
type="DatePicker"
v-model="data.gebdatum"
model-type="yyyy-MM-dd"
name="gebdatum"
:clearable="false"
no-today
@@ -103,6 +103,7 @@ export default {
<form-input
type="DatePicker"
v-model="formData.nachgereicht_am"
model-type="yyyy-MM-dd"
name="nachgereicht_am"
:label="$p.t('dokumente/nachreichungAm')"
auto-apply
@@ -27,7 +27,7 @@ export default {
return {
filter: false,
studiengang_kz: false,
counterdate: new Date()
counterdate: luxon.DateTime.now().setZone(FHC_JS_DATA_STORAGE_OBJECT.timezone).toISODate()
};
},
computed: {
@@ -259,6 +259,7 @@ export default {
<form-input
type="DatePicker"
v-model="counterdate"
model-type="yyyy-MM-dd"
input-group
:enable-time-picker="false"
text-input
@@ -79,6 +79,7 @@ export default {
<form-input
type="DatePicker"
v-model="data.buchungsdatum"
model-type="yyyy-MM-dd"
name="buchungsdatum"
:label="$p.t('konto/buchungsdatum')"
:enable-time-picker="false"
@@ -88,7 +88,7 @@ export default {
this.data = {
buchungstyp_kurzbz: '',
betrag: '-0.00',
buchungsdatum: new Date(),
buchungsdatum: luxon.DateTime.now().setZone(FHC_JS_DATA_STORAGE_OBJECT.timezone).toISODate(),
buchungstext: '',
mahnspanne: 30,
studiensemester_kurzbz: this.currentSemester,
@@ -154,6 +154,7 @@ export default {
<form-input
type="DatePicker"
v-model="data.buchungsdatum"
model-type="yyyy-MM-dd"
name="buchungsdatum"
:label="$p.t('konto/buchungsdatum')"
:enable-time-picker="false"
@@ -467,6 +467,7 @@ export default {
:label="$p.t('ui', 'von')"
type="DatePicker"
v-model="formData.von"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -501,6 +502,7 @@ export default {
:label="$p.t('global', 'bis')"
type="DatePicker"
v-model="formData.bis"
model-type="yyyy-MM-dd"
auto-apply
:enable-time-picker="false"
text-input
@@ -325,6 +325,7 @@ export default {
:label="$p.t('infocenter', 'zgvDatum')"
type="DatePicker"
v-model="data.zgvdatum"
model-type="yyyy-MM-dd"
name="zgvdatum"
no-today
auto-apply
@@ -389,6 +390,7 @@ export default {
:label="$p.t('lehre', 'zgvMasterDatum')"
type="DatePicker"
v-model="data.zgvmadatum"
model-type="yyyy-MM-dd"
name="zgvmadatum"
no-today
auto-apply
@@ -454,6 +456,7 @@ export default {
:label="$p.t('lehre', 'zgvDoktorDatum')"
type="DatePicker"
v-model="data.zgvdoktordatum"
model-type="yyyy-MM-dd"
name="zgvdoktordatum"
no-today
auto-apply
@@ -135,6 +135,11 @@ export default{
.then(result => {
this.statusNew = false;
this.formData = result.data;
//to show Date in correct format in the modal (is timestamp in database)
if (this.formData.bewerbung_abgeschicktamum) {
this.formData.bewerbung_abgeschicktamum =
this.formData.bewerbung_abgeschicktamum.substring(0, 10);
}
this.originalDatum = new Date(result.data.datum);
return prestudent;
})
@@ -276,6 +281,7 @@ export default{
container-class="mb-3"
type="DatePicker"
v-model="formData.datum"
model-type="yyyy-MM-dd"
name="datum"
:label="$p.t('global/datum')"
auto-apply
@@ -291,6 +297,7 @@ export default{
container-class="mb-3"
type="DatePicker"
v-model="formData.bestaetigtam"
model-type="yyyy-MM-dd"
name="bestaetigtam"
:label="$p.t('lehre/bestaetigt_am')"
auto-apply
@@ -306,6 +313,7 @@ export default{
container-class="mb-3"
type="DatePicker"
v-model="formData.bewerbung_abgeschicktamum"
model-type="yyyy-MM-dd"
name="bewerbung_abgeschicktamum"
:label="$p.t('lehre/bewerbung_abgeschickt_am')"
auto-apply
@@ -285,6 +285,7 @@ export default {
uid="stv-list-new-gebdatum"
name="gebdatum"
v-model="formDataPerson['gebdatum']"
model-type="yyyy-MM-dd"
:disabled="!!person"
@update:model-value="loadSuggestions"
text-input
+16 -8
View File
@@ -218,15 +218,23 @@ export const CoreFilterCmpt = {
},
columnsForFilter() {
if (!this.filteredColumns || !this.datasetMetadata) return [];
const localizedColumnTitles = this.tabulator.getLang().columns;
const isTabulatorLocalized = !!this.$props.tabulatorOptions.locale;
const filterTitles = this.filteredColumns.reduce((a, c) => {
a[c.field] =
isTabulatorLocalized && localizedColumnTitles[c.field]
? localizedColumnTitles[c.field]
: c.title;
return a;
}, {});
let filterTitles;
if (isTabulatorLocalized) {
const localizedColumnTitles = this.tabulator.getLang().columns;
filterTitles = this.filteredColumns.reduce((a, c) => {
a[c.field] = localizedColumnTitles[c.field];
return a;
}, {});
} else {
filterTitles = this.filteredColumns.reduce((a, c) => {
a[c.field] = c.title;
return a;
}, {});
}
return this.datasetMetadata.map((el) => ({
...el,
...{ title: filterTitles[el.name] },
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

+2 -2
View File
@@ -211,7 +211,7 @@
<td>Kurzbz*</td>
<td><input type="text" name="kurzbz" '.($lv->lehrveranstaltung_id==''?'onchange="copyToLehreVz();"':'onchange="return copyToLehreVzAsk();"').' value="'.$lv->kurzbz.'" /></td>
<td>Bezeichnung*</td>
<td colspan=3><input type="text" name="bezeichnung" value="'.htmlentities($lv->bezeichnung ?? '', ENT_QUOTES, 'UTF-8').'" size="60" maxlength="128"></td>
<td colspan=3><input type="text" name="bezeichnung" value="'.htmlentities($lv->bezeichnung, ENT_QUOTES, 'UTF-8').'" size="60" maxlength="128"></td>
</tr>
<tr>
<td>Sprache</td>
@@ -227,7 +227,7 @@
}
$htmlstr .= '</select></td>
<td>Bezeichnung English</td>
<td colspan=3><input type="text" name="bezeichnung_english" value="'.htmlentities($lv->bezeichnung_english ?? '', ENT_QUOTES, 'UTF-8').'" size="60" maxlength="256"></td>
<td colspan=3><input type="text" name="bezeichnung_english" value="'.htmlentities($lv->bezeichnung_english, ENT_QUOTES, 'UTF-8').'" size="60" maxlength="256"></td>
</tr><tr>
<td>Studiengang</td>
<td><select name="studiengang_kz">';
@@ -725,7 +725,7 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz']))
$htmlstr .= '</a></p>';
}
}
if (count($bn->berechtigungen) > 0)
if (count($bn) > 0)
{
$htmlstr .= "<p><a href='benutzerberechtigung_detailliste.php?uid=$uid' target='_blank'>Rechte Detailaufschlüsselung</a></p>";
}
@@ -928,7 +928,7 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz']))
$data = 'gruen';
}
// Inaktive Elemente sowie WaWi-Rechte ausblenden
if ($b->ende!='' && strtotime($b->ende) < $heute || $b->rolle_kurzbz == 'wawi' || substr($b->berechtigung_kurzbz ?? '', 0, 4) == 'wawi')
if ($b->ende!='' && strtotime($b->ende) < $heute || $b->rolle_kurzbz == 'wawi' || substr($b->berechtigung_kurzbz, 0, 4) == 'wawi')
{
$htmlstr .= " <tr class='row_berechtigung ausgeblendet' id='".$b->benutzerberechtigung_id."'>";
$countInaktiveUndWawi++;
@@ -1061,7 +1061,7 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz']))
name='dataset[$b->benutzerberechtigung_id][anmerkung]'
class='input_anmerkung $inaktiv_class'
value='".$b->anmerkung."'
title='".$db->convert_html_chars(mb_eregi_replace('\r'," ",$b->anmerkung ?? ''))."'
title='".$db->convert_html_chars(mb_eregi_replace('\r'," ",$b->anmerkung))."'
data-toggle='tooltip'
data-html='true'
data-placement='auto'