mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 15:04:04 +00:00
Merge branch 'master' into bug-70950/Coodle_ICS_Organizer_falsch
This commit is contained in:
@@ -76,9 +76,7 @@ class Vertrag extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL);
|
if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
$allOe = hasData($allOe) ? getData($allOe) : [];
|
$allOe = hasData($allOe) ? array_column(getData($allOe), 'oe_kurzbz') : [];
|
||||||
|
|
||||||
$this->addMeta('oe', $allOe);
|
|
||||||
|
|
||||||
// * then check if the user has permissions to cancel the corresponding lv-organisational units
|
// * then check if the user has permissions to cancel the corresponding lv-organisational units
|
||||||
if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') &&
|
if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') &&
|
||||||
|
|||||||
@@ -470,12 +470,12 @@ class Stundenplan_model extends DB_Model
|
|||||||
}
|
}
|
||||||
foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband)
|
foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband)
|
||||||
{
|
{
|
||||||
$query .= "((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
$query .= "(((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||||
// Eintraege fuer den ganzen Verband
|
// Eintraege fuer den ganzen Verband
|
||||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||||
// Eintraege fuer das ganze Semester
|
// Eintraege fuer das ganze Semester
|
||||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)
|
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)
|
||||||
." AND ".$this->escape($sem_date_range->ende).")". $stringGroupLv. ")";
|
." AND ".$this->escape($sem_date_range->ende).")) AND gruppe_kurzbz is null)";
|
||||||
|
|
||||||
$query .="OR";
|
$query .="OR";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,74 +242,89 @@ class Message_model extends DB_Model
|
|||||||
*/
|
*/
|
||||||
public function getMessagesForTable($person_id, $offset, $limit)
|
public function getMessagesForTable($person_id, $offset, $limit)
|
||||||
{
|
{
|
||||||
$sql_base = "
|
$sql = <<<EOSQL
|
||||||
SELECT
|
with filtered_messages as (
|
||||||
|
select
|
||||||
|
m.message_id, m.person_id as sender_id, mr.person_id as recipient_id
|
||||||
|
from
|
||||||
|
public.tbl_msg_message m
|
||||||
|
join
|
||||||
|
public.tbl_msg_recipient mr on mr.message_id = m.message_id
|
||||||
|
where
|
||||||
|
m.person_id = ?
|
||||||
|
group by
|
||||||
|
m.message_id, m.person_id, mr.person_id
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
m.message_id, m.person_id as sender_id, mr.person_id as recipient_id
|
||||||
|
from
|
||||||
|
public.tbl_msg_message m
|
||||||
|
join
|
||||||
|
public.tbl_msg_recipient mr on mr.message_id = m.message_id
|
||||||
|
where
|
||||||
|
mr.person_id = ?
|
||||||
|
group by
|
||||||
|
m.message_id, m.person_id, mr.person_id
|
||||||
|
|
||||||
|
), lastmsgstatus as (
|
||||||
|
select
|
||||||
|
ms.*
|
||||||
|
from (
|
||||||
|
select
|
||||||
|
s.message_id, s.person_id, MAX(s.insertamum) as lastinserted
|
||||||
|
from
|
||||||
|
public.tbl_msg_status s
|
||||||
|
group by
|
||||||
|
s.message_id, s.person_id
|
||||||
|
) ls
|
||||||
|
join
|
||||||
|
public.tbl_msg_status ms on ms.message_id = ls.message_id and ms.person_id = ls.person_id and ms.insertamum = ls.lastinserted
|
||||||
|
)
|
||||||
|
|
||||||
|
select
|
||||||
|
(select count(*) from filtered_messages) as total_msgs,
|
||||||
m.message_id AS message_id,
|
m.message_id AS message_id,
|
||||||
m.subject AS subject,
|
m.subject AS subject,
|
||||||
m.body AS body,
|
m.body AS body,
|
||||||
m.insertamum AS insertamum,
|
m.insertamum AS insertamum,
|
||||||
m.relationmessage_id AS relationmessage_id,
|
m.relationmessage_id AS relationmessage_id,
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
|
(COALESCE(ps.titelpre,'') || ' ' || COALESCE(ps.vorname,'') || ' ' || COALESCE(ps.nachname,'') || ' ' || COALESCE(ps.titelpost,'')) as sender,
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
|
(COALESCE(pr.titelpre,'') || ' ' || COALESCE(pr.vorname,'') || ' ' || COALESCE(pr.nachname,'') || ' ' || COALESCE(pr.titelpost,'')) as recipient,
|
||||||
m.person_id as sender_id,
|
fm.sender_id,
|
||||||
r.person_id as recipient_id,
|
fm.recipient_id,
|
||||||
MAX(ss.status) as status,
|
ms.status,
|
||||||
MAX(ss.insertamum) as statusdatum
|
ms.insertamum as statusdatum
|
||||||
FROM public.tbl_msg_message m
|
from
|
||||||
JOIN public.tbl_msg_recipient r USING(message_id)
|
filtered_messages fm
|
||||||
JOIN public.tbl_msg_status ss ON(r.message_id = ss.message_id AND ss.person_id = r.person_id)
|
join
|
||||||
WHERE m.person_id = ?
|
public.tbl_msg_message m on fm.message_id = m.message_id
|
||||||
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
|
join
|
||||||
UNION ALL
|
lastmsgstatus ms on fm.message_id = ms.message_id and fm.recipient_id = ms.person_id
|
||||||
SELECT
|
left join
|
||||||
m.message_id AS message_id,
|
public.tbl_person ps on ps.person_id = fm.sender_id
|
||||||
m.subject AS subject,
|
left join
|
||||||
m.body AS body,
|
public.tbl_person pr on pr.person_id = fm.recipient_id
|
||||||
m.insertamum AS insertamum,
|
order by
|
||||||
m.relationmessage_id AS relationmessage_id,
|
m.insertamum DESC
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
|
limit ?
|
||||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
|
offset ?;
|
||||||
m.person_id as sender_id,
|
EOSQL;
|
||||||
r.person_id as recipient_id,
|
|
||||||
MAX(ss.status) as status,
|
|
||||||
MAX(ss.insertamum) as statusdatum
|
|
||||||
FROM public.tbl_msg_recipient r
|
|
||||||
JOIN public.tbl_msg_status ss USING(message_id, person_id)
|
|
||||||
JOIN public.tbl_msg_message m USING(message_id)
|
|
||||||
WHERE r.person_id = ?
|
|
||||||
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
|
|
||||||
";
|
|
||||||
$sql = "
|
|
||||||
SELECT COUNT(*) AS count FROM (
|
|
||||||
" . $sql_base . "
|
|
||||||
) a
|
|
||||||
";
|
|
||||||
|
|
||||||
$parametersArray = array($person_id, $person_id);
|
|
||||||
|
|
||||||
$count = $this->execQuery($sql, $parametersArray);
|
|
||||||
|
|
||||||
if (isError($count))
|
|
||||||
return $count;
|
|
||||||
|
|
||||||
$count = ceil(current(getData($count))->count/$limit);
|
|
||||||
$sql = "
|
|
||||||
SELECT * FROM (
|
|
||||||
" . $sql_base . "
|
|
||||||
) a
|
|
||||||
ORDER BY insertamum DESC
|
|
||||||
LIMIT ?
|
|
||||||
OFFSET ?
|
|
||||||
";
|
|
||||||
|
|
||||||
$parametersArray = array($person_id, $person_id, $limit, $offset);
|
$parametersArray = array($person_id, $person_id, $limit, $offset);
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
$data = $this->execQuery($sql, $parametersArray);
|
$data = $this->execQuery($sql, $parametersArray);
|
||||||
|
|
||||||
if (isError($data))
|
if (isError($data))
|
||||||
return $data;
|
return $data;
|
||||||
|
|
||||||
$data = getData($data);
|
$data = getData($data);
|
||||||
|
if($data)
|
||||||
|
{
|
||||||
|
$count = ceil($data[0]->total_msgs / $limit);
|
||||||
|
}
|
||||||
|
|
||||||
return success(['data' => $data, 'count' => $count]);
|
return success(['data' => $data, 'count' => $count]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -581,14 +581,14 @@ if($frage->frage_id!='')
|
|||||||
else
|
else
|
||||||
$value=$p->t('testtool/blaettern').' >>';
|
$value=$p->t('testtool/blaettern').' >>';
|
||||||
|
|
||||||
echo " <a href='$PHP_SELF?gebiet_id=$gebiet_id&frage_id=$nextfrage' class='Item'>$value</a>";
|
echo "<a href='$PHP_SELF?gebiet_id=$gebiet_id&frage_id=$nextfrage' class='Item' style='padding-left: 5px'>$value</a>";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!$demo)
|
if(!$demo)
|
||||||
{
|
{
|
||||||
//Wenns der letzte Eintrag ist, wieder zum ersten springen
|
//Wenns der letzte Eintrag ist, wieder zum ersten springen
|
||||||
echo " <a href='$PHP_SELF?gebiet_id=$gebiet_id' class='Item'>".$p->t('testtool/blaettern')." >></a>";
|
echo "<a href='$PHP_SELF?gebiet_id=$gebiet_id' class='Item' style='padding-left: 5px'>".$p->t('testtool/blaettern')." >></a>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-7
@@ -340,13 +340,26 @@ else
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) &&
|
if (
|
||||||
!isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code'])) ||
|
(
|
||||||
(isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true &&
|
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) &&
|
||||||
isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true &&
|
!isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code']) &&
|
||||||
isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true &&
|
!isset($_SESSION['externe_ueberwachung']) && !isset($_SESSION['externe_ueberwachung_verified'])
|
||||||
isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true &&
|
)
|
||||||
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])))
|
||
|
||||||
|
(
|
||||||
|
isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true &&
|
||||||
|
isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true &&
|
||||||
|
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])
|
||||||
|
)
|
||||||
|
||
|
||||||
|
(
|
||||||
|
isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true &&
|
||||||
|
isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true &&
|
||||||
|
isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$pruefling = new pruefling();
|
$pruefling = new pruefling();
|
||||||
|
|
||||||
|
|||||||
@@ -345,6 +345,7 @@ class gebiet extends basis_db
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Pruefen ob jede Fragen mindestens 2 Vorschlaege hat
|
//Pruefen ob jede Fragen mindestens 2 Vorschlaege hat
|
||||||
|
//Angepasst am 28.01.2026 auf ein Warning.
|
||||||
$qry = "SELECT frage_id, nummer FROM testtool.tbl_frage
|
$qry = "SELECT frage_id, nummer FROM testtool.tbl_frage
|
||||||
WHERE (SELECT count(*) as anzahl FROM testtool.tbl_vorschlag WHERE frage_id=tbl_frage.frage_id)<2
|
WHERE (SELECT count(*) as anzahl FROM testtool.tbl_vorschlag WHERE frage_id=tbl_frage.frage_id)<2
|
||||||
AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)." AND NOT demo;";
|
AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)." AND NOT demo;";
|
||||||
@@ -352,7 +353,7 @@ class gebiet extends basis_db
|
|||||||
{
|
{
|
||||||
while($row = $this->db_fetch_object())
|
while($row = $this->db_fetch_object())
|
||||||
{
|
{
|
||||||
$this->errormsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n";
|
$this->warningmsg .= "Frage Nummer $row->nummer (ID: $row->frage_id) hat weniger als 2 Vorschlaege.\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,6 +449,52 @@ class gebiet extends basis_db
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Pruefen ob es leere Fragen (ohne Text, Bild oder Audio) gibt
|
||||||
|
$qry = "SELECT
|
||||||
|
fr.frage_id,
|
||||||
|
fr.nummer,
|
||||||
|
fs.sprache
|
||||||
|
FROM
|
||||||
|
testtool.tbl_frage fr
|
||||||
|
JOIN testtool.tbl_frage_sprache fs
|
||||||
|
USING (frage_id)
|
||||||
|
WHERE
|
||||||
|
(fs.text IS NULL
|
||||||
|
OR fs.text = '')
|
||||||
|
AND fs.bild IS NULL
|
||||||
|
AND fs.audio IS NULL
|
||||||
|
AND demo = false
|
||||||
|
AND gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER)."
|
||||||
|
AND EXISTS (
|
||||||
|
SELECT
|
||||||
|
1
|
||||||
|
FROM
|
||||||
|
testtool.tbl_frage fr2
|
||||||
|
JOIN testtool.tbl_frage_sprache fs2
|
||||||
|
USING (frage_id)
|
||||||
|
WHERE
|
||||||
|
fs2.sprache = fs.sprache
|
||||||
|
AND fr2.gebiet_id = fr.gebiet_id
|
||||||
|
AND fr2.frage_id != fr.frage_id
|
||||||
|
AND (
|
||||||
|
(fs2.text IS NOT NULL
|
||||||
|
AND fs2.text != '')
|
||||||
|
OR fs2.bild IS NOT NULL
|
||||||
|
OR fs2.audio IS NOT NULL
|
||||||
|
)
|
||||||
|
AND demo = false
|
||||||
|
)
|
||||||
|
ORDER BY
|
||||||
|
fs.sprache,
|
||||||
|
fr.nummer;";
|
||||||
|
if($this->db_query($qry))
|
||||||
|
{
|
||||||
|
while($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
$this->warningmsg .= "Frage Nummer $row->nummer (ID: $row->frage_id), Sprache $row->sprache hat keinen Text, Bild oder Audio.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if($this->errormsg=='')
|
if($this->errormsg=='')
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -51,6 +51,14 @@
|
|||||||
background-color: #6d4c41;
|
background-color: #6d4c41;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tag_dark_grey {
|
||||||
|
background-color: #595959;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag_light_grey {
|
||||||
|
background-color: #9a9a9a;
|
||||||
|
}
|
||||||
|
|
||||||
.tag_blau {
|
.tag_blau {
|
||||||
background-color: #508498;
|
background-color: #508498;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getAllStudiensemesterAndAktOrNext() {
|
studiengangInformation() {
|
||||||
return {
|
return {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: '/api/frontend/v1/Studiensemester/getStudiengangInfo'
|
url: '/api/frontend/v1/Studgang/getStudiengangInfo'
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
getStudiengangByKz(studiengang_kz) {
|
||||||
|
return {
|
||||||
|
method: 'get',
|
||||||
|
url: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz',
|
||||||
|
params: { studiengang_kz }
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@@ -643,6 +643,24 @@ export const AbgabeMitarbeiterDetail = {
|
|||||||
'projektarbeit'(newVal) {
|
'projektarbeit'(newVal) {
|
||||||
// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text
|
// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text
|
||||||
|
|
||||||
|
// reset newTermin object
|
||||||
|
const typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')
|
||||||
|
this.newTermin = {
|
||||||
|
'paabgabe_id': -1,
|
||||||
|
'projektarbeit_id': newVal.projektarbeit_id,
|
||||||
|
'fixtermin': false,
|
||||||
|
'invertedFixtermin': true,
|
||||||
|
'kurzbz': '',
|
||||||
|
'datum': new Date().toISOString().split('T')[0],
|
||||||
|
'note': this.allowedNotenOptions.find(opt => opt.note == 9),
|
||||||
|
'beurteilungsnotiz': '',
|
||||||
|
'upload_allowed': typ.upload_allowed_default,
|
||||||
|
'paabgabetyp_kurzbz': '',
|
||||||
|
'bezeichnung': typ,
|
||||||
|
'abgabedatum': null,
|
||||||
|
'insertvon': this.viewData?.uid ?? ''
|
||||||
|
}
|
||||||
|
|
||||||
newVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)
|
newVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)
|
||||||
|
|
||||||
// default select german if projektarbeit sprache was null
|
// default select german if projektarbeit sprache was null
|
||||||
@@ -711,6 +729,7 @@ export const AbgabeMitarbeiterDetail = {
|
|||||||
v-model="newTermin.bezeichnung"
|
v-model="newTermin.bezeichnung"
|
||||||
:options="getAllowedAbgabeTypeOptions"
|
:options="getAllowedAbgabeTypeOptions"
|
||||||
:optionLabel="getOptionLabelAbgabetyp"
|
:optionLabel="getOptionLabelAbgabetyp"
|
||||||
|
:optionDisabled="getOptionDisabled"
|
||||||
scrollHeight="300px">
|
scrollHeight="300px">
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import ApiAbgabe from '../../../api/factory/abgabe.js'
|
|||||||
import ApiStudiensemester from '../../../api/factory/studiensemester.js';
|
import ApiStudiensemester from '../../../api/factory/studiensemester.js';
|
||||||
import AbgabeterminStatusLegende from "./StatusLegende.js";
|
import AbgabeterminStatusLegende from "./StatusLegende.js";
|
||||||
import FhcOverlay from "../../Overlay/FhcOverlay.js";
|
import FhcOverlay from "../../Overlay/FhcOverlay.js";
|
||||||
|
import { splitMailsHelper } from "../../../helpers/EmailHelpers.js"
|
||||||
|
|
||||||
// spoofed date testing
|
// spoofed date testing
|
||||||
// const todayISO = '2025-08-08'
|
// const todayISO = '2025-08-08'
|
||||||
@@ -226,18 +227,17 @@ export const AbgabetoolAssistenz = {
|
|||||||
]};
|
]};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
sammelMailStudent() {
|
sammelMailStudent(param) {
|
||||||
|
|
||||||
const emails = this.selectedData
|
const emails = this.selectedData
|
||||||
.map(row => `${row.student_uid}@${this.domain}`)
|
.map(row => `${row.student_uid}@${this.domain}`)
|
||||||
.join(',');
|
.join(',');
|
||||||
|
const uniqueRecipients = [...new Set(emails)];
|
||||||
const subject = this.$p.t('abgabetool/c4sammelmailStudentBetreff', [this.selectedStudiengangOption?.bezeichnung]);
|
const subject = this.$p.t('abgabetool/c4sammelmailStudentBetreff', [this.selectedStudiengangOption?.bezeichnung]);
|
||||||
|
splitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)
|
||||||
const href = `mailto:${emails}?subject=${subject}`;
|
|
||||||
|
|
||||||
window.location.href = href
|
|
||||||
},
|
},
|
||||||
sammelMailBetreuer() {
|
sammelMailBetreuer(param) {
|
||||||
|
|
||||||
const recipientList = [];
|
const recipientList = [];
|
||||||
this.selectedData.forEach(row => {
|
this.selectedData.forEach(row => {
|
||||||
if (row.betreuer_mail) recipientList.push(row.betreuer_mail);
|
if (row.betreuer_mail) recipientList.push(row.betreuer_mail);
|
||||||
@@ -246,11 +246,8 @@ export const AbgabetoolAssistenz = {
|
|||||||
|
|
||||||
// actually not necessary for email clients but looks better for assistenz if we avoid duplicates here
|
// actually not necessary for email clients but looks better for assistenz if we avoid duplicates here
|
||||||
const uniqueRecipients = [...new Set(recipientList)];
|
const uniqueRecipients = [...new Set(recipientList)];
|
||||||
|
|
||||||
const subject = this.$p.t('abgabetool/c4sammelmailBetreuerBetreff', [this.selectedStudiengangOption?.bezeichnung]);
|
const subject = this.$p.t('abgabetool/c4sammelmailBetreuerBetreff', [this.selectedStudiengangOption?.bezeichnung]);
|
||||||
const href = `mailto:${uniqueRecipients.join(',')}?subject=${encodeURIComponent(subject)}`;
|
splitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)
|
||||||
|
|
||||||
window.location.href = href;
|
|
||||||
},
|
},
|
||||||
selectHandler(e, cell) {
|
selectHandler(e, cell) {
|
||||||
const row = cell.getRow();
|
const row = cell.getRow();
|
||||||
@@ -969,7 +966,10 @@ export const AbgabetoolAssistenz = {
|
|||||||
// this.loadProjektarbeiten()
|
// this.loadProjektarbeiten()
|
||||||
|
|
||||||
this.calcMaxTableHeight()
|
this.calcMaxTableHeight()
|
||||||
}
|
},
|
||||||
|
getOptionDisabled(option) {
|
||||||
|
return !option.aktiv
|
||||||
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
emailItems() {
|
emailItems() {
|
||||||
@@ -1179,7 +1179,8 @@ export const AbgabetoolAssistenz = {
|
|||||||
:style="{'width': '100%'}"
|
:style="{'width': '100%'}"
|
||||||
v-model="serienTermin.bezeichnung"
|
v-model="serienTermin.bezeichnung"
|
||||||
:options="abgabeTypeOptions"
|
:options="abgabeTypeOptions"
|
||||||
:optionLabel="getOptionLabelAbgabetyp">
|
:optionLabel="getOptionLabelAbgabetyp"
|
||||||
|
:optionDisabled="getOptionDisabled">
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1392,7 +1393,7 @@ export const AbgabetoolAssistenz = {
|
|||||||
>
|
>
|
||||||
<i class="fa fa-envelope"></i>
|
<i class="fa fa-envelope"></i>
|
||||||
</button>
|
</button>
|
||||||
<tiered-menu ref="menu" :model="emailItems" popup/>
|
<tiered-menu ref="menu" :model="emailItems" popup :autoZIndex="false" />
|
||||||
</template>
|
</template>
|
||||||
</core-filter-cmpt>
|
</core-filter-cmpt>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
pa.isCurrent = res.data[1]
|
pa.isCurrent = res.data[1]
|
||||||
|
|
||||||
let paIsBenotet = false
|
let paIsBenotet = false
|
||||||
if(pa.note !== undefined && pa !== null) {
|
if(pa.note !== undefined && pa.note !== null) {
|
||||||
// check if the note is not defined as a non final projektarbeit note
|
// check if the note is not defined as a non final projektarbeit note
|
||||||
const opt = this.notenOptionsNonFinal.find(opt => opt.note)
|
const opt = this.notenOptionsNonFinal.find(opt => opt.note)
|
||||||
// if thats the case allow further work
|
// if thats the case allow further work
|
||||||
@@ -333,7 +333,6 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
pa.student = `${pa.vorname} ${pa.nachname}`
|
pa.student = `${pa.vorname} ${pa.nachname}`
|
||||||
|
|
||||||
this.selectedProjektarbeit = pa
|
this.selectedProjektarbeit = pa
|
||||||
|
|
||||||
this.$refs.modalContainerAbgabeDetail.show()
|
this.$refs.modalContainerAbgabeDetail.show()
|
||||||
|
|
||||||
}).finally(()=>{this.loading = false})
|
}).finally(()=>{this.loading = false})
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ export default {
|
|||||||
title: this.$p.t('global', 'aktionen')
|
title: this.$p.t('global', 'aktionen')
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
this.$emit('tabulator_tablebuilt');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
tablebuilt: false,
|
||||||
isVisibleDiv: false,
|
isVisibleDiv: false,
|
||||||
messageId: null
|
messageId: null
|
||||||
}
|
}
|
||||||
@@ -139,8 +140,10 @@ export default {
|
|||||||
},
|
},
|
||||||
resetMessageId(){
|
resetMessageId(){
|
||||||
this.messageId = null;
|
this.messageId = null;
|
||||||
|
},
|
||||||
|
tableBuilt: function() {
|
||||||
|
this.tablebuilt = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="core-messages h-100 pb-3">
|
<div class="core-messages h-100 pb-3">
|
||||||
@@ -155,6 +158,7 @@ export default {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<message-modal
|
<message-modal
|
||||||
|
v-if="tablebuilt || id.length > 1"
|
||||||
ref="modalMsg"
|
ref="modalMsg"
|
||||||
:type-id="typeId"
|
:type-id="typeId"
|
||||||
:id="id"
|
:id="id"
|
||||||
@@ -166,8 +170,9 @@ export default {
|
|||||||
</message-modal>
|
</message-modal>
|
||||||
|
|
||||||
<!--in same page-->
|
<!--in same page-->
|
||||||
<div v-show="isVisibleDiv" class="overflow-auto m-3" style="max-height: 500px; border: 1px solid #ccc;">
|
<div v-if="isVisibleDiv" class="overflow-auto m-3" style="max-height: 500px; border: 1px solid #ccc;">
|
||||||
<form-only
|
<form-only
|
||||||
|
v-if="tablebuilt || id.length > 1"
|
||||||
ref="templateNewDivMessage"
|
ref="templateNewDivMessage"
|
||||||
:type-id="typeId"
|
:type-id="typeId"
|
||||||
:id="id"
|
:id="id"
|
||||||
@@ -187,6 +192,7 @@ export default {
|
|||||||
:openMode="openMode"
|
:openMode="openMode"
|
||||||
@newMessage="handleMessage"
|
@newMessage="handleMessage"
|
||||||
@replyToMessage="handleMessage"
|
@replyToMessage="handleMessage"
|
||||||
|
@tabulator_tablebuilt="tableBuilt"
|
||||||
>
|
>
|
||||||
</table-messages>
|
</table-messages>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { splitMailsHelper } from "../../../../helpers/EmailHelpers.js"
|
||||||
export default {
|
export default {
|
||||||
name: "Kontaktieren",
|
name: "Kontaktieren",
|
||||||
computed: {
|
computed: {
|
||||||
@@ -22,60 +23,16 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
async splitMails(mails, event) {
|
|
||||||
let splititem = ",";
|
|
||||||
let maillist = mails.join(splititem);
|
|
||||||
let mailto = "";
|
|
||||||
|
|
||||||
if (maillist.length > 2024)
|
|
||||||
{
|
|
||||||
if (await this.$fhcAlert.confirm({message: this.$p.t('stv', 'zuvieleEMails') }) === false)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let firstrun = true;
|
|
||||||
let useBcc = event?.ctrlKey || event?.metaKey;
|
|
||||||
while (maillist.length > 0)
|
|
||||||
{
|
|
||||||
if (maillist.length > 2024)
|
|
||||||
{
|
|
||||||
let splitposition = maillist.lastIndexOf(splititem, 1900);
|
|
||||||
mailto = maillist.substring(0, splitposition);
|
|
||||||
maillist = maillist.substring(splitposition + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mailto = maillist;
|
|
||||||
maillist = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
let mailLink = useBcc ? `mailto:?bcc=${mailto}` : `mailto:${mailto}`;
|
|
||||||
|
|
||||||
if (firstrun)
|
|
||||||
{
|
|
||||||
window.location.href = mailLink;
|
|
||||||
firstrun = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (await this.$fhcAlert.confirm({message: this.$p.t('stv', 'weitereEMail')}) === true)
|
|
||||||
{
|
|
||||||
window.location.href = mailLink;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
internMail(event) {
|
internMail(event) {
|
||||||
if (this.internMails.length)
|
if (this.internMails.length)
|
||||||
{
|
{
|
||||||
this.splitMails(this.internMails, event);
|
splitMailsHelper(this.privateMails, event, null, this.$fhcAlert, this.$p)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
privateMail(event) {
|
privateMail(event) {
|
||||||
if (this.privateMails.length)
|
if (this.privateMails.length)
|
||||||
{
|
{
|
||||||
this.splitMails(this.privateMails, event);
|
splitMailsHelper(this.privateMails, event, null, this.$fhcAlert, this.$p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
export async function splitMailsHelper(mails, event, subject, alertPluginRef, phrasenPluginRef) {
|
||||||
|
let splititem = ",";
|
||||||
|
let maillist = mails.join(splititem);
|
||||||
|
let mailto = "";
|
||||||
|
// take subject line length + '?subject=' length into account
|
||||||
|
const subjectlength = subject && typeof subject === 'string' ? subject.length + 9 : 0
|
||||||
|
if (maillist.length > 2024)
|
||||||
|
{
|
||||||
|
if (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'zuvieleEMails') }) === false)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let firstrun = true;
|
||||||
|
let useBcc = event?.ctrlKey || event?.metaKey;
|
||||||
|
while (maillist.length > 0)
|
||||||
|
{
|
||||||
|
if (maillist.length + subjectlength > 2024)
|
||||||
|
{
|
||||||
|
let splitposition = maillist.lastIndexOf(splititem, 1900);
|
||||||
|
mailto = maillist.substring(0, splitposition);
|
||||||
|
maillist = maillist.substring(splitposition + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mailto = maillist;
|
||||||
|
maillist = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
let mailLink = useBcc ? `mailto:?bcc=${mailto}` : `mailto:${mailto}`;
|
||||||
|
if(subject && typeof subject === 'string') mailLink += `?subject=${subject}`
|
||||||
|
if (firstrun)
|
||||||
|
{
|
||||||
|
window.location.href = mailLink;
|
||||||
|
firstrun = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'weitereEMail')}) === true)
|
||||||
|
{
|
||||||
|
window.location.href = mailLink;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
export function addTagInTable(addedTag, rows, matchKey, tagsKey = "tags")
|
||||||
|
{
|
||||||
|
if (!addedTag || !Array.isArray(addedTag.response))
|
||||||
|
return;
|
||||||
|
|
||||||
|
rows.forEach(row =>
|
||||||
|
{
|
||||||
|
const rowData = row.getData();
|
||||||
|
let updated = false;
|
||||||
|
|
||||||
|
addedTag.response.forEach(tag =>
|
||||||
|
{
|
||||||
|
if (rowData[matchKey] !== tag[matchKey])
|
||||||
|
return;
|
||||||
|
|
||||||
|
let tags;
|
||||||
|
try {
|
||||||
|
tags = JSON.parse(rowData[tagsKey] || "[]");
|
||||||
|
} catch (e) {
|
||||||
|
tags = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Array.isArray(tags))
|
||||||
|
tags = [];
|
||||||
|
|
||||||
|
if (tags.some(t => t?.id === tag.id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let newTag = { ...addedTag, id: tag.id };
|
||||||
|
|
||||||
|
tags.unshift(newTag);
|
||||||
|
|
||||||
|
rowData[tagsKey] = JSON.stringify(tags);
|
||||||
|
updated = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (updated)
|
||||||
|
row.update(rowData);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deleteTagInTable(deletedTag, rows, tagsKeys = ['tags'])
|
||||||
|
{
|
||||||
|
if (!Array.isArray(tagsKeys))
|
||||||
|
tagsKeys = [tagsKeys];
|
||||||
|
|
||||||
|
rows.forEach(row => {
|
||||||
|
let rowData = row.getData();
|
||||||
|
let updates = {};
|
||||||
|
let changed = false;
|
||||||
|
|
||||||
|
tagsKeys.forEach(key => {
|
||||||
|
let tags;
|
||||||
|
|
||||||
|
try {
|
||||||
|
tags = JSON.parse(rowData[key] || "[]");
|
||||||
|
} catch (e) {
|
||||||
|
tags = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Array.isArray(tags))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let filtered = tags.filter(tag => tag?.id !== deletedTag);
|
||||||
|
|
||||||
|
if (filtered.length !== tags.length)
|
||||||
|
{
|
||||||
|
updates[key] = JSON.stringify(filtered);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
|
row.update(updates);
|
||||||
|
row.reformat();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function updateTagInTable(updatedTag, rows, fields = ['tags'])
|
||||||
|
{
|
||||||
|
if (!Array.isArray(fields))
|
||||||
|
fields = [fields];
|
||||||
|
|
||||||
|
rows.forEach(row =>
|
||||||
|
{
|
||||||
|
const rowData = row.getData();
|
||||||
|
let updated = false;
|
||||||
|
|
||||||
|
fields.forEach(field =>
|
||||||
|
{
|
||||||
|
if (!rowData[field])
|
||||||
|
return;
|
||||||
|
|
||||||
|
let fieldData;
|
||||||
|
try {
|
||||||
|
fieldData = JSON.parse(rowData[field] || "[]");
|
||||||
|
} catch (e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Array.isArray(fieldData))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let index = fieldData.findIndex(tag => tag?.id === updatedTag.id);
|
||||||
|
|
||||||
|
if (index !== -1)
|
||||||
|
{
|
||||||
|
fieldData[index] = { ...updatedTag };
|
||||||
|
let updatedFieldData = JSON.stringify(fieldData);
|
||||||
|
|
||||||
|
if (updatedFieldData !== rowData[field])
|
||||||
|
{
|
||||||
|
rowData[field] = updatedFieldData;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (updated)
|
||||||
|
row.update(rowData);
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -146,7 +146,7 @@ export function tagHeaderFilter(headerValue, rowValue, rowData, filterParams)
|
|||||||
if (Array.isArray(data))
|
if (Array.isArray(data))
|
||||||
{
|
{
|
||||||
combinedText = data
|
combinedText = data
|
||||||
.filter(item => item?.done === false)
|
.filter(item => item?.done !== true)
|
||||||
.map(item => `${item?.beschreibung} ${item?.notiz}`)
|
.map(item => `${item?.beschreibung} ${item?.notiz}`)
|
||||||
.join(' ');
|
.join(' ');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
export function tagFormatter(cell, tagComponent)
|
||||||
|
{
|
||||||
|
let tags = cell.getValue();
|
||||||
|
if (!tags) return;
|
||||||
|
|
||||||
|
let container = document.createElement('div');
|
||||||
|
container.className = "d-flex gap-1";
|
||||||
|
|
||||||
|
let parsedTags = JSON.parse(tags);
|
||||||
|
let maxVisibleTags = 2;
|
||||||
|
|
||||||
|
const rowData = cell.getRow().getData();
|
||||||
|
if (rowData._tagExpanded === undefined) {
|
||||||
|
rowData._tagExpanded = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const renderTags = () => {
|
||||||
|
container.innerHTML = '';
|
||||||
|
parsedTags = parsedTags.filter(item => item !== null);
|
||||||
|
|
||||||
|
parsedTags.sort((a, b) => {
|
||||||
|
let adone = a.done ? 1 : 0;
|
||||||
|
let bbone = b.done ? 1 : 0;
|
||||||
|
|
||||||
|
if (adone !== bbone)
|
||||||
|
{
|
||||||
|
return adone - bbone;
|
||||||
|
}
|
||||||
|
return b.id - a.id;
|
||||||
|
});
|
||||||
|
const tagsToShow = rowData._tagExpanded ? parsedTags : parsedTags.slice(0, maxVisibleTags);
|
||||||
|
|
||||||
|
tagsToShow.forEach(tag => {
|
||||||
|
if (!tag) return;
|
||||||
|
let tagElement = document.createElement('span');
|
||||||
|
tagElement.innerText = tag.beschreibung;
|
||||||
|
tagElement.title = tag.notiz;
|
||||||
|
tagElement.className = "tag " + tag.style;
|
||||||
|
if (tag.done) tagElement.className += " tag_done";
|
||||||
|
|
||||||
|
tagElement.addEventListener('click', (event) => {
|
||||||
|
event.stopPropagation();
|
||||||
|
event.preventDefault();
|
||||||
|
tagComponent.editTag(tag.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(tagElement);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (parsedTags.length > maxVisibleTags) {
|
||||||
|
let toggle = document.createElement('button');
|
||||||
|
toggle.innerText = (rowData._tagExpanded ? '- ' : '+ ') + (parsedTags.length - maxVisibleTags);
|
||||||
|
toggle.className = "display_all";
|
||||||
|
toggle.title = rowData._tagExpanded ? "Tags ausblenden" : "Tags einblenden";
|
||||||
|
|
||||||
|
toggle.addEventListener('click', () => {
|
||||||
|
rowData._tagExpanded = !rowData._tagExpanded;
|
||||||
|
renderTags();
|
||||||
|
});
|
||||||
|
|
||||||
|
container.appendChild(toggle);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
renderTags();
|
||||||
|
return container;
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
@@ -91,6 +91,7 @@ require_once('dbupdate_3.4/69065_Projektarbeiten_Firmen_verwalten.php');
|
|||||||
require_once('dbupdate_3.4/68744_StV_settings.php');
|
require_once('dbupdate_3.4/68744_StV_settings.php');
|
||||||
require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php');
|
require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php');
|
||||||
require_once('dbupdate_3.4/71399_dashboard_update_widget_paths.php');
|
require_once('dbupdate_3.4/71399_dashboard_update_widget_paths.php');
|
||||||
|
require_once('dbupdate_3.4/71645_studvw_messagetab_ladezeit.php');
|
||||||
|
|
||||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||||
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
|
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
if (! defined('DB_NAME')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_msg_message_person_id'"))
|
||||||
|
{
|
||||||
|
if ($db->db_num_rows($result) == 0)
|
||||||
|
{
|
||||||
|
$qry = "CREATE INDEX idx_tbl_msg_message_person_id ON public.tbl_msg_message USING btree (person_id)";
|
||||||
|
|
||||||
|
if (! $db->db_query($qry))
|
||||||
|
echo '<strong>idx_tbl_msg_message_person_id: ' . $db->db_last_error() . '</strong><br>';
|
||||||
|
else
|
||||||
|
echo 'Index idx_tbl_msg_message_person_id angelegt<br>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_msg_recipient_person_id'"))
|
||||||
|
{
|
||||||
|
if ($db->db_num_rows($result) == 0)
|
||||||
|
{
|
||||||
|
$qry = "CREATE INDEX idx_tbl_msg_recipient_person_id ON public.tbl_msg_recipient USING btree (person_id)";
|
||||||
|
|
||||||
|
if (! $db->db_query($qry))
|
||||||
|
echo '<strong>idx_tbl_msg_recipient_person_id: ' . $db->db_last_error() . '</strong><br>';
|
||||||
|
else
|
||||||
|
echo 'Index idx_tbl_msg_recipient_person_id angelegt<br>';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19087,6 +19087,27 @@ array(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'app' => 'core',
|
||||||
|
'category' => 'kvp',
|
||||||
|
'phrase' => 'error.opproject_does_not_exists',
|
||||||
|
'insertvon' => 'system',
|
||||||
|
'phrases' => array(
|
||||||
|
array(
|
||||||
|
'sprache' => 'German',
|
||||||
|
'text' => "Es ist kein Openproject Projekt verknüpft.",
|
||||||
|
'description' => '',
|
||||||
|
'insertvon' => 'system'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'sprache' => 'English',
|
||||||
|
'text' => "No Openproject project is linked.",
|
||||||
|
'description' => '',
|
||||||
|
'insertvon' => 'system'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
//******************* KVP end
|
||||||
array(
|
array(
|
||||||
'app' => 'international',
|
'app' => 'international',
|
||||||
'category' => 'international',
|
'category' => 'international',
|
||||||
|
|||||||
Reference in New Issue
Block a user