Merge branch 'master' into feature-60873/GesamtnoteneingabeCis4

# Conflicts:
#	application/config/routes.php
#	application/models/crm/Prestudent_model.php
#	application/models/education/Lehreinheit_model.php
#	application/models/education/Lehrveranstaltung_model.php
#	public/js/apps/Dashboard/Fhc.js
#	system/phrasesupdate.php
This commit is contained in:
Johann Hoffmann
2025-11-25 10:50:26 +01:00
302 changed files with 25025 additions and 3695 deletions
+1 -1
View File
@@ -9755,7 +9755,7 @@ COMMENT ON TABLE public.tbl_tag IS 'Orders and Company Tags';
CREATE TABLE public.tbl_variable (
name character varying(64) NOT NULL,
uid character varying(32) NOT NULL,
wert character varying(64)
wert text
);
+11 -2
View File
@@ -27,6 +27,7 @@ require_once('dbupdate_3.4/example.php');
require_once('dbupdate_3.4/example2.php');
...
*/
//require_once('dbupdate_3.4/25003_notenimport_nachpruefung.php');
require_once('dbupdate_3.4/dbupdate_dashboard.php');
require_once('dbupdate_3.4/26173_index_webservicelog.php');
require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php');
@@ -77,6 +78,14 @@ require_once('dbupdate_3.4/55614_perm_verwaltetoe.php');
require_once('dbupdate_3.4/25999_C4_dashboard.php');
require_once('dbupdate_3.4/61730_Dashboard_Anpassungen.php');
require_once('dbupdate_3.4/40128_search.php');
require_once('dbupdate_3.4/63394_Variablenbeschraenkung.php');
require_once('dbupdate_3.4/63436_cis4_iframe_component.php');
require_once('dbupdate_3.4/60882_lehrfaecherverteilung_favorites.php');
require_once('dbupdate_3.4/66982_berufsschule.php');
require_once('dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php');
require_once('dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php');
require_once('dbupdate_3.4/67490_studstatus_suche_abort_controller_haengt.php');
require_once('dbupdate_3.4/68744_StV_settings.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -159,8 +168,8 @@ $tabellen=array(
"campus.tbl_paabgabe" => array("paabgabe_id","projektarbeit_id","paabgabetyp_kurzbz","fixtermin","datum","kurzbz","abgabedatum", "insertvon","insertamum","updatevon","updateamum"),
"campus.tbl_pruefungsfenster" => array("pruefungsfenster_id","studiensemester_kurzbz","oe_kurzbz","start","ende"),
"campus.tbl_pruefung" => array("pruefung_id","mitarbeiter_uid","studiensemester_kurzbz","pruefungsfenster_id","pruefungstyp_kurzbz","titel","beschreibung","methode","einzeln","storniert","insertvon","insertamum","updatevon","updateamum","pruefungsintervall"),
"campus.tbl_pruefungstermin" => array("pruefungstermin_id","pruefung_id","von","bis","teilnehmer_max","teilnehmer_min","anmeldung_von","anmeldung_bis","ort_kurzbz","sammelklausur"),
"campus.tbl_pruefungsanmeldung" => array("pruefungsanmeldung_id","uid","pruefungstermin_id","lehrveranstaltung_id","status_kurzbz","wuensche","reihung","kommentar","statusupdatevon","statusupdateamum","anrechnung_id","pruefungstyp_kurzbz","insertamum"),
"campus.tbl_pruefungstermin" => array("pruefungstermin_id","pruefung_id","von","bis","teilnehmer_max","teilnehmer_min","anmeldung_von","anmeldung_bis","ort_kurzbz","sammelklausur", "anderer_raum"),
"campus.tbl_pruefungsanmeldung" => array("pruefungsanmeldung_id","uid","pruefungstermin_id","lehrveranstaltung_id","status_kurzbz","wuensche","reihung","kommentar","statusupdatevon","statusupdateamum","anrechnung_id","pruefungstyp_kurzbz","insertamum", "ects"),
"campus.tbl_pruefungsstatus" => array("status_kurzbz","bezeichnung"),
"campus.tbl_reservierung" => array("reservierung_id","ort_kurzbz","studiengang_kz","uid","stunde","datum","titel","beschreibung","semester","verband","gruppe","gruppe_kurzbz","veranstaltung_id","insertamum","insertvon"),
"campus.tbl_studierendenantrag" => array("studierendenantrag_id","prestudent_id","studiensemester_kurzbz","datum","typ","insertamum","insertvon","datum_wiedereinstieg","grund","dms_id"),
@@ -1,5 +1,6 @@
<?php
$raum_contentmittitel_xslt_xhtml= <<<EOD
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
@@ -8,27 +9,56 @@ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<head>
<title><xsl:value-of select="titel" /></title>
<link rel="stylesheet" href="../skin/style.css.php" type="text/css" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/tabulator/5.0.7/css/tabulator.min.css" rel="stylesheet" />
<script type="text/javascript" src="https://c3p0.ma0594.technikum-wien.at/fh-core/vendor/olifolkerd/tabulator5/dist/js/tabulator.min.js?2019102903"></script>
<link rel="stylesheet" href="../skin/jquery.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../skin/jquery-ui-1.9.2.custom.min.css" />
<script type="text/javascript" src="../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" href="../skin/tablesort.css" type="text/css"/>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function()
{
let tables = document.getElementsByClassName("tablesorter");
for(table of tables){
new Tabulator(table, {
layout:"fitDataFill",
autoResize:true,
resizableRows:true,
columnDefaults:{
formatter:"html",
resizable:true,
}
})
}
});
$(document).ready(function()
{
$(".tablesorter").each(function()
{
var col=0;
var sort=0;
var no_sort=1;
var classes = $(this).attr("class");
var class_arr = classes.split(" ");
var headersobj={};
for(i in class_arr)
{
if(class_arr[i].indexOf("tablesorter_col_")!=-1)
{
col = class_arr[i].substr(16);
}
if(class_arr[i].indexOf("tablesorter_sort_")!=-1)
{
sort = class_arr[i].substr(17);
}
if(class_arr[i].indexOf("tablesorter_no_sort_")!=-1)
{
no_sort = class_arr[i].substr(20);
headersobj[no_sort]={sorter:false};
}
}
$(this).tablesorter(
{
sortList: [[col,sort]],
widgets: ["zebra"],
headers: headersobj
});
});
});
</script>
</head>
<body>
<h1><xsl:value-of select="titel" /></h1>
@@ -0,0 +1,78 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// public.tbl_kontakttyp: add type email unverified
if($result = $db->db_query("SELECT 1 FROM public.tbl_kontakttyp WHERE kontakttyp='email_unverifiziert'"))
{
if($db->db_num_rows($result)==0)
{
$qry = "INSERT INTO public.tbl_kontakttyp(kontakttyp, beschreibung, bezeichnung_mehrsprachig) VALUES('email_unverifiziert', 'Unverifizierte E-Mail', '{\"Unverifizierte E-Mail\", \"Unverified email\"}');";
if(!$db->db_query($qry))
echo '<strong>Kontakttyp: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neuen Kontakttyp E-Mail unverifiziert in public.tbl_kontakttyp hinzugefügt';
}
}
// public.tbl_adressentyp: add type Meldeadresse
if($result = $db->db_query("SELECT 1 FROM public.tbl_adressentyp WHERE adressentyp_kurzbz='m'"))
{
if($db->db_num_rows($result)==0)
{
$qry = "INSERT INTO public.tbl_adressentyp(adressentyp_kurzbz, bezeichnung, bezeichnung_mehrsprachig, sort) VALUES('m', 'Meldeadresse', '{\"Meldeadresse\", \"Registered adress\"}', 6);";
if(!$db->db_query($qry))
echo '<strong>Adressentyp: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue Adressentyp Meldeadresse in public.tbl_adressentyp hinzugefügt';
}
}
if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_kontakt_verifikation LIMIT 1'))
{
$qry = "CREATE SEQUENCE public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
START WITH 1
CACHE 1
NO CYCLE;
CREATE TABLE public.tbl_kontakt_verifikation
(
kontakt_verifikation_id integer DEFAULT nextval('public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq'::regclass),
kontakt_id integer UNIQUE NOT NULL,
verifikation_code varchar(32) UNIQUE NOT NULL,
erstelldatum timestamp without time zone,
verifikation_datum timestamp without time zone,
app varchar(32),
CONSTRAINT pk_tbl_kontakt_verifikation_id PRIMARY KEY (kontakt_verifikation_id)
);
ALTER TABLE public.tbl_kontakt_verifikation ADD CONSTRAINT fk_tbl_kontakt_verifikation_kontakt_id FOREIGN KEY (kontakt_id)
REFERENCES public.tbl_kontakt (kontakt_id)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE public.tbl_kontakt_verifikation ADD CONSTRAINT fk_tbl_kontakt_verifikation_app FOREIGN KEY (app)
REFERENCES system.tbl_app (app)
ON DELETE RESTRICT ON UPDATE CASCADE;
COMMENT ON TABLE public.tbl_kontakt_verifikation IS 'Contact verification';
COMMENT ON COLUMN public.tbl_kontakt_verifikation.kontakt_id IS 'Contact to verify';
COMMENT ON COLUMN public.tbl_kontakt_verifikation.verifikation_code IS 'Code generated for verification';
COMMENT ON COLUMN public.tbl_kontakt_verifikation.erstelldatum IS 'Time when verification code was generated';
COMMENT ON COLUMN public.tbl_kontakt_verifikation.verifikation_datum IS 'Time when contact was verified';
COMMENT ON COLUMN public.tbl_kontakt_verifikation.app IS 'App where contact was verified';
GRANT SELECT, UPDATE, INSERT, DELETE ON public.tbl_kontakt_verifikation TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON public.tbl_kontakt_verifikation TO vilesci;
GRANT SELECT, UPDATE ON public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq TO vilesci;
GRANT SELECT, UPDATE ON public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_kontakt_verifikation: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_kontakt_verifikation: Tabelle hinzugefuegt<br>';
}
@@ -0,0 +1,22 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
if(!@$db->db_query("SELECT ects FROM campus.tbl_pruefungsanmeldung LIMIT 1"))
{
$qry = 'ALTER TABLE campus.tbl_pruefungsanmeldung ADD COLUMN ects numeric(5,2);';
if(!$db->db_query($qry))
echo '<strong> campus.tbl_pruefungsanmeldung '.$db->db_last_error().'</strong><br>';
else
echo '<br>campus.tbl_pruefungsanmeldung: Neue Spalte ects hinzugefügt';
}
if(!@$db->db_query("SELECT anderer_raum FROM campus.tbl_pruefungstermin LIMIT 1"))
{
$qry = 'ALTER TABLE campus.tbl_pruefungstermin ADD COLUMN anderer_raum text NULL;';
if(!$db->db_query($qry))
echo '<strong> campus.tbl_pruefungstermin '.$db->db_last_error().'</strong><br>';
else
echo '<br>campus.tbl_pruefungstermin: Neue Spalte anderer_raum hinzugefügt';
}
@@ -0,0 +1,16 @@
<?php
if (!defined('DB_NAME')) exit('No direct script access allowed');
// Add new name type in public.tbl_variablenname
if ($result = @$db->db_query("SELECT 1 FROM public.tbl_variablenname WHERE name = 'lv_favorites';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO public.tbl_variablenname(name, defaultwert) VALUES('lv_favorites', null);";
if (!$db->db_query($qry))
echo '<strong>public.tbl_variablenname '.$db->db_last_error().'</strong><br>';
else
echo 'public.tbl_variablenname: Added name "lv_favorites"<br>';
}
}
@@ -0,0 +1,28 @@
<?php
if (!defined('DB_NAME')) exit('No direct script access allowed');
// Change type of wert in public.tbl_variable
if ($result = @$db->db_query("
SELECT data_type
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'tbl_variable'
AND column_name = 'wert';
")) {
if ($db->db_num_rows($result) == 1)
{
$data_type = $db->db_fetch_row($result)[0];
if (strtolower($data_type) != 'text')
{
$qry = "ALTER TABLE public.tbl_variable
ALTER COLUMN wert
TYPE TEXT;";
if (!$db->db_query($qry))
echo '<strong>public.tbl_variable '.$db->db_last_error().'</strong><br>';
else
echo 'public.tbl_variable: Change type of "wert" to TEXT<br>';
}
}
}
@@ -0,0 +1,81 @@
<?php
$xsd= <<<EOD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="content">
<xs:complexType>
<xs:sequence>
<xs:element name="url" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
EOD;
$xslt_xhtml= <<<EOD
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="content">
<xsl:choose>
<xsl:when test="string(url)">
<iframe
src="{url}"
frameborder="0"
style="width:100%; height:90vh; border:0; display:block;"
>
</iframe>
</xsl:when>
<xsl:otherwise>
<div class="alert alert-warning">Keine URL im Inhalt gefunden.</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
EOD;
$xslt_xhtml_c4= <<<EOD
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="content">
<xsl:choose>
<xsl:when test="string(url)">
<iframe
src="{url}"
frameborder="0"
style="width:100%; height:90vh; border:0; display:block;"
>
</iframe>
</xsl:when>
<xsl:otherwise>
<div class="alert alert-warning">Keine URL im Inhalt gefunden.</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
EOD;
if ($result = @$db->db_query("SELECT * FROM campus.tbl_template WHERE template_kurzbz='iframe'"))
{
if ($db->db_num_rows($result) == 0)
{
$sql= <<<EOD
INSERT INTO campus.tbl_template
(template_kurzbz, bezeichnung, xsd, xslt_xhtml, xslfo_pdf, xslt_xhtml_c4)
VALUES
('iframe','iFrame Content ', '{$xsd}', '{$xslt_xhtml}' , NULL, '{$xslt_xhtml_c4}');
EOD;
if (!$db->db_query($sql))
{
echo '<strong>campus.tbl_template: ' . $db->db_last_error() . '</strong><br>';
}
else
{
echo ' campus.tbl_template: Template "iframe" hinzugefügt.<br>';
}
}
}
@@ -0,0 +1,41 @@
<?php
/* Copyright (C) 2025 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Österreicher <[email protected]>,
*
* Beschreibung:
* Aktivität Berufsschule für Zeitaufzeichnung
*/
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add permission: basis/gehaelter
if($result = @$db->db_query("SELECT 1 FROM fue.tbl_aktivitaet WHERE aktivitaet_kurzbz = 'Berufsschule';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO fue.tbl_aktivitaet(aktivitaet_kurzbz, beschreibung, sort) VALUES('Berufsschule', 'Berufsschule','5');";
if(!$db->db_query($qry))
{
echo '<strong>fue.tbl_aktivitaet '.$db->db_last_error().'</strong><br>';
}
else
{
echo 'fue.tbl_aktivitaet: Added Aktivitaet "berufsschule"<br>';
}
}
}
@@ -0,0 +1,16 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add index to campus.tbl_studierendenantrag_status.studierendenantrag_id
if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_studierendenantrag_status_studierendenantrag_id'"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "CREATE INDEX idx_tbl_studierendenantrag_status_studierendenantrag_id ON campus.tbl_studierendenantrag_status USING btree (studierendenantrag_id)";
if (!$db->db_query($qry))
echo '<strong>Indizes: ' . $db->db_last_error() . '</strong><br>';
else
echo 'Index fuer campus.tbl_studierendenantrag_status.studierendenantrag_id hinzugefuegt';
}
}
@@ -0,0 +1,16 @@
<?php
if (!defined('DB_NAME')) exit('No direct script access allowed');
// Add new name type in public.tbl_variablenname
if ($result = @$db->db_query("SELECT 1 FROM public.tbl_variablenname WHERE name = 'stv_font_size';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO public.tbl_variablenname(name, defaultwert) VALUES('stv_font_size', null);";
if (!$db->db_query($qry))
echo '<strong>public.tbl_variablenname '.$db->db_last_error().'</strong><br>';
else
echo 'public.tbl_variablenname: Added name "stv_font_size"<br>';
}
}
+4858 -91
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -309,7 +309,8 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
<text:p text:style-name="P4">(nz) ... nicht zugelassen</text:p>
<text:p text:style-name="P4">(ma) ... MitarbeiterIn</text:p>
<text:p text:style-name="P4">(a.o.) ... Außerordentliche/r HörerIn</text:p>
<text:p text:style-name="P4">(d.d.) ... Double Degree Program</text:p>
<text:p text:style-name="P4">(d.d.i) ... Double Degree Incoming Program</text:p>
<text:p text:style-name="P4">(d.d.o) ... Double Degree Outgoing Program</text:p>
<text:p text:style-name="P4"/>
<text:p text:style-name="P5">
<xsl:choose>