mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-22 09:22:22 +00:00
Merge branch 'master' into feature-25999/C4_cleanup
# Conflicts: # public/js/apps/Dashboard/Fhc.js # public/js/components/Cis/Cms/Content.js # public/js/components/Cis/Cms/News.js # public/js/components/Cis/Cms/StudiengangInformation/StudiengangInformation.js # public/js/components/Cis/Mylv/LvUebersicht.js # public/js/components/Cis/Stundenplan/Stundenplan.js # public/js/components/DashboardWidget/Ampel.js # public/js/components/DashboardWidget/News.js # public/js/components/DashboardWidget/Stundenplan.js # public/js/components/DashboardWidget/Url.js # system/phrasesupdate.php
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
|
||||
// Deadline for Application given as Time-Interval after Semesterstart.
|
||||
@@ -24,3 +24,12 @@ $config['send_mail'] = TRUE;
|
||||
|
||||
// Display fields to explain equivalence of ECTS and LV-Inhalte
|
||||
$config['explain_equivalence'] = TRUE;
|
||||
|
||||
// Displays infobox if set to true
|
||||
$config['display_infobox'] = [
|
||||
'fristen' => TRUE,
|
||||
'referenzbeispiele_ects' => TRUE,
|
||||
'voraussetzungen' => TRUE,
|
||||
'nachweisdokumente' => TRUE,
|
||||
'herkunft_kenntnisse' => TRUE
|
||||
];
|
||||
|
||||
@@ -32,3 +32,18 @@ $config['validate'] = false; // If true then the email address will be validated
|
||||
|
||||
// If enabled will be logged info about emails in Codeigniter error logs
|
||||
$config['enable_debug'] = false;
|
||||
|
||||
// default sender
|
||||
$config['sancho_mail_default_sender'] = defined('SANCHO_MAIL_DEFAULT_SENDER') ? SANCHO_MAIL_DEFAULT_SENDER : '';
|
||||
|
||||
// If to use images for custom mails
|
||||
$config['sancho_mail_use_images'] = defined('SANCHO_MAIL_USE_IMAGES') ? SANCHO_MAIL_USE_IMAGES : false;
|
||||
|
||||
// image path for sancho mail, relativ to document root
|
||||
$config['sancho_mail_img_path'] = defined('SANCHO_MAIL_IMG_PATH') ? SANCHO_MAIL_IMG_PATH : '';
|
||||
|
||||
// header image for custom mails
|
||||
$config['sancho_mail_header_img'] = defined('SANCHO_MAIL_HEADER_IMG') ? SANCHO_MAIL_HEADER_IMG : '';
|
||||
|
||||
// footer image for custom mails
|
||||
$config['sancho_mail_footer_img'] = defined('SANCHO_MAIL_FOOTER_IMG') ? SANCHO_MAIL_FOOTER_IMG : '';
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
$config['tabs'] =
|
||||
[
|
||||
'details' => [
|
||||
//all fields can be configured to be hidden, see class attribute stv-details-details-name for name
|
||||
'hiddenFields' => [],
|
||||
'hideUDFs' => false
|
||||
],
|
||||
|
||||
'prestudent' => [
|
||||
|
||||
//all fields can be configured to be hidden, see class attribute stv-details-prestudent-name for name
|
||||
'hiddenFields' => [
|
||||
|
||||
//propably used by FH-Communities
|
||||
'aufnahmeschluessel', 'standort_code', 'facheinschlaegigBerufstaetig'
|
||||
|
||||
],
|
||||
'hideUDFs' => false
|
||||
],
|
||||
'finalexam' => [
|
||||
'documents' => [
|
||||
'pruefungsprotokoll' => [
|
||||
'de' => [
|
||||
'Bakk' => 'PrProtBA',
|
||||
'Master' => 'PrProtMA',
|
||||
],
|
||||
'en' => [
|
||||
'Bakk' => 'PrProtBAEng',
|
||||
'Master' => 'PrProtMAEng',
|
||||
],
|
||||
],
|
||||
'pruefungszeugnis' => [
|
||||
'de' => [
|
||||
'Bakk' => 'Bakkzeugnis',
|
||||
'Master' => 'Diplomzeugnis',
|
||||
],
|
||||
'en' => [
|
||||
'Bakk' => 'BakkzeugnisEng',
|
||||
'Master' => 'DiplomzeugnisEng',
|
||||
],
|
||||
],
|
||||
'urkunde' => [
|
||||
'de' => [
|
||||
'Bakk' => 'Bakkurkunde',
|
||||
'Master' => 'Diplomurkunde',
|
||||
],
|
||||
'en' => [
|
||||
'Bakk' => 'BakkurkundeEng',
|
||||
'Master' => 'DiplomurkundeEng',
|
||||
],
|
||||
],
|
||||
],
|
||||
]
|
||||
];
|
||||
|
||||
// List of fields to show when ZGV_DOKTOR_ANZEIGEN is defined
|
||||
$fieldsZgvDoktor = ['zgvdoktorort', 'zgvdoktordatum', 'zgvdoktornation', 'zgvdoktor_erfuellt', 'zgvdoktor_code'];
|
||||
|
||||
// List of fields to show when ZGV_ERFUELLT_ANZEIGEN is defined
|
||||
$fieldsZgvErfuellt = ['zgv_erfuellt', 'zgvmas_erfuellt','zgvdoktor_erfuellt'];
|
||||
|
||||
//order important: to show zgf_erfuellt_doktor just in case visibility of doktor is true
|
||||
if (!defined('ZGV_ERFUELLT_ANZEIGEN') || !ZGV_ERFUELLT_ANZEIGEN) {
|
||||
$config['tabs']['prestudent']['hiddenFields'] = array_merge(
|
||||
$config['tabs']['prestudent']['hiddenFields'], $fieldsZgvErfuellt
|
||||
);
|
||||
}
|
||||
|
||||
if (!defined('ZGV_DOKTOR_ANZEIGEN') || !ZGV_DOKTOR_ANZEIGEN) {
|
||||
$config['tabs']['prestudent']['hiddenFields'] = array_merge(
|
||||
$config['tabs']['prestudent']['hiddenFields'],
|
||||
$fieldsZgvDoktor
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,294 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller handles output and access to documents.
|
||||
* It creates a XML file, transforms it with the XSL-FO Vorlage from the
|
||||
* database and generates a PDF file with unoconv or docsbox.
|
||||
* This file is then outputted as download.
|
||||
*
|
||||
* It is the CodeIgniter version of content/pdfExport.php when not using the
|
||||
* get paremeters: "archivdokument" and "archive".
|
||||
* Use exportSigned() instead of providing the "sign" get parameter and
|
||||
* export() otherwise.
|
||||
*/
|
||||
class Documents extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'export' => self::PERM_LOGGED,
|
||||
'exportSigned' => self::PERM_LOGGED
|
||||
]);
|
||||
|
||||
// Load Phrases
|
||||
$this->loadPhrases([
|
||||
'stv'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a not signed document.
|
||||
*
|
||||
* @param string $xml
|
||||
* @param string $xsl
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function export($xml, $xsl)
|
||||
{
|
||||
return $this->_export($xml, $xsl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a signed document.
|
||||
*
|
||||
* @param string $xml
|
||||
* @param string $xsl
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function exportSigned($xml, $xsl)
|
||||
{
|
||||
return $this->_export($xml, $xsl, getAuthUID());
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for export() and exportSigned()
|
||||
*
|
||||
* @param string $xml
|
||||
* @param string $xsl
|
||||
* @param string $sign_user (optional)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function _export($xml, $xsl, $sign_user = null)
|
||||
{
|
||||
$xsl_oe_kurzbz = null;
|
||||
$version = $this->input->post_get('version') ?: null;
|
||||
|
||||
// Get the OE or STG of the document
|
||||
$xsl_oe_kurzbz = $this->input->post_get('xsl_oe_kurzbz')
|
||||
?: $this->input->post_get('xsl_stg_kz')
|
||||
?: $this->input->post_get('stg_kz');
|
||||
if (is_null($xsl_oe_kurzbz)) {
|
||||
$uid = $this->input->post_get('uid');
|
||||
if ($uid) {
|
||||
$uid = current(explode(';', $uid));
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->load([$uid]);
|
||||
if (!isError($result) && hasData($result))
|
||||
$xsl_oe_kurzbz = current(getData($result))->studiengang_kz;
|
||||
}
|
||||
}
|
||||
if (is_null($xsl_oe_kurzbz)) {
|
||||
$prestudent_id = $this->input->post_get('prestudent_id');
|
||||
if ($prestudent_id) {
|
||||
$prestudent_id = current(explode(';', $prestudent_id));
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
$result = $this->PrestudentModel->load($prestudent_id);
|
||||
if (!isError($result) && hasData($result))
|
||||
$xsl_oe_kurzbz = current(getData($result))->studiengang_kz;
|
||||
}
|
||||
}
|
||||
if (is_null($xsl_oe_kurzbz))
|
||||
$xsl_oe_kurzbz = 0;
|
||||
|
||||
// Access rights
|
||||
if ($xsl == 'AccountInfo') {
|
||||
$this->load->model('resource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$uids = $this->input->post_get('uid');
|
||||
if ($uids) {
|
||||
$uids = explode(';', $uids);
|
||||
foreach ($uids as $uid) {
|
||||
$result = $this->MitarbeiterModel->load($uid);
|
||||
if (!isError($result) && hasData($result)) {
|
||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid', 0)
|
||||
&& !$this->permissionlib->isBerechtigt('mitarbeiter', 'suid', 0))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin:rw', 'mitarbeiter:rw']]);
|
||||
} else {
|
||||
$result = $this->StudentModel->load([$uid]);
|
||||
if (!isError($result) && hasData($result)) {
|
||||
$student = current(getData($result));
|
||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid', $student->studiengang_kz)
|
||||
&& !$this->permissionlib->isBerechtigt('admin', 'suid', 0)
|
||||
&& !$this->permissionlib->isBerechtigt('assistenz', 'suid', $student->studiengang_kz)
|
||||
&& !$this->permissionlib->isBerechtigt('assistenz', 'suid', 0)
|
||||
&& !$this->permissionlib->isBerechtigt('support', 'suid', 0))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw', 'support:rw']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
|
||||
|
||||
$result = $this->VorlagestudiengangModel->getCurrent($xsl, $xsl_oe_kurzbz, $version);
|
||||
if (isError($result))
|
||||
return show_error(getError($result));
|
||||
if (!hasData($result))
|
||||
return show_404();
|
||||
|
||||
$access_rights = current(getData($result))->berechtigung;
|
||||
if (!$access_rights)
|
||||
return show_404();
|
||||
$allowed = false;
|
||||
foreach ($access_rights as $access_right) {
|
||||
if ($this->permissionlib->isBerechtigt($access_right)) {
|
||||
$allowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$allowed)
|
||||
return $this->_outputAuthError([$this->router->method => $access_rights]);
|
||||
}
|
||||
|
||||
// Output format
|
||||
$outputformat = $this->input->post_get('output') ?: 'pdf';
|
||||
if ($outputformat != 'pdf'
|
||||
// An der FHTW darf das Studienblatt und das Prüfungsprotokoll auch in anderen Formaten exportiert werden
|
||||
&& !(CAMPUS_NAME == 'FH Technikum Wien'
|
||||
&& ($xsl == 'Studienblatt'
|
||||
|| $xsl == 'StudienblattEng'
|
||||
|| $xsl == 'PrProtBA'
|
||||
|| $xsl == 'PrProtBAEng'
|
||||
|| $xsl == 'PrProtMA'
|
||||
|| $xsl == 'PrProtMAEng'
|
||||
)
|
||||
)
|
||||
&& !$this->permissionlib->isBerechtigt('system/change_outputformat', null, $xsl_oe_kurzbz)
|
||||
) {
|
||||
$outputformat = 'pdf';
|
||||
}
|
||||
|
||||
// XML Params
|
||||
$params = 'xmlformat=xml';
|
||||
foreach ([
|
||||
'uid',
|
||||
'stg_kz',
|
||||
'person_id',
|
||||
'id',
|
||||
'prestudent_id',
|
||||
'buchungsnummern',
|
||||
'ss',
|
||||
'abschlusspruefung_id',
|
||||
'typ',
|
||||
'all',
|
||||
'preoutgoing_id',
|
||||
'lvid',
|
||||
'projekt_kurzbz',
|
||||
'von',
|
||||
'bis',
|
||||
'stundevon',
|
||||
'stundebis',
|
||||
'sem',
|
||||
'lehreinheit',
|
||||
'mitarbeiter_uid',
|
||||
'studienordnung_id',
|
||||
'fixangestellt',
|
||||
'standort',
|
||||
'abrechnungsmonat',
|
||||
'form',
|
||||
'projektarbeit_id',
|
||||
'betreuerart_kurzbz',
|
||||
'studiensemester_kurzbz'
|
||||
] as $key) {
|
||||
$value = $this->input->post_get($key);
|
||||
if ($value !== null)
|
||||
$params .= '&' . $key . '=' . urlencode($value);
|
||||
}
|
||||
$value = $this->input->post_get('vertrag_id');
|
||||
if ($value !== null) {
|
||||
foreach ($value as $id)
|
||||
$params .= '&vertrag_id[]=' . urlencode($id);
|
||||
}
|
||||
|
||||
$this->load->library('DocumentExportLib');
|
||||
$this->load->model('system/Vorlage_model', 'VorlageModel');
|
||||
|
||||
$result = $this->VorlageModel->load($xsl);
|
||||
if (isError($result))
|
||||
return show_error(getError($result));
|
||||
if (!hasData($result))
|
||||
show_404();
|
||||
|
||||
$vorlage = current(getData($result));
|
||||
if ($sign_user && !$vorlage->signierbar)
|
||||
return show_error($this->p->t("stv", "grades_error_sign"));
|
||||
|
||||
|
||||
// Filename
|
||||
$filename = ($vorlage->bezeichnung ?: $vorlage->vorlage_kurzbz);
|
||||
switch ($xsl) {
|
||||
case 'LV_Informationen':
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$result = $this->StudiengangModel->load($this->input->post_get('stg_kz'));
|
||||
if (!isError($result) && hasData($result))
|
||||
$filename .= '_' . sanitizeProblemChars(current(getData($result))->kurzbzlang);
|
||||
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$result = $this->StudiensemesterModel->load($this->input->post_get('ss'));
|
||||
if (!isError($result) && hasData($result))
|
||||
$filename .= '_' . sanitizeProblemChars(current(getData($result))->studiensemester_kurzbz);
|
||||
break;
|
||||
case 'Honorarvertrag':
|
||||
$uid = str_replace(';', '', $this->input->post_get('uid') ?: '');
|
||||
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||
$this->BenutzerModel->addJoin('public.tbl_person', 'person_id', 'LEFT');
|
||||
$result = $this->BenutzerModel->load([$uid]);
|
||||
if (!isError($result) && hasData($result)) {
|
||||
$user = current(getData($result));
|
||||
$filename .= '_' . sanitizeProblemChars($user->nachname) . '_' . sanitizeProblemChars($user->vorname);
|
||||
}
|
||||
break;
|
||||
case 'Studienordnung':
|
||||
$filename = 'Studienordnung-Studienplan-';
|
||||
|
||||
$this->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
|
||||
$result = $this->StudienordnungModel->load($this->input->post_get('studienordnung_id'));
|
||||
if (!isError($result) && hasData($result)) {
|
||||
$so = current(getData($result));
|
||||
$filename .= sprintf("%'.04d", $so->studiengang_kz) . '-' . $so->studiengangkurzbzlang;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$uid = str_replace(';', '', $this->input->post_get('uid') ?: '');
|
||||
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||
$this->BenutzerModel->addJoin('public.tbl_person', 'person_id', 'LEFT');
|
||||
$result = $this->BenutzerModel->load([$uid]);
|
||||
if (!isError($result) && hasData($result)) {
|
||||
$user = current(getData($result));
|
||||
$filename .= '_' . sanitizeProblemChars($user->nachname);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// XML Data
|
||||
$result = $this->documentexportlib->getDataURL($xml, $params);
|
||||
if (isError($result))
|
||||
return show_error(getError($result));
|
||||
|
||||
$data = getData($result);
|
||||
|
||||
// Output
|
||||
$this->documentexportlib->showContent($filename, $vorlage, $data, $xsl_oe_kurzbz, $version, $outputformat, $sign_user);
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,8 @@ class Studentenverwaltung extends Auth_Controller
|
||||
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
||||
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'),
|
||||
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
||||
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht')
|
||||
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
||||
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
||||
],
|
||||
'variables' => [
|
||||
'semester_aktuell' => $this->variablelib->getVar('semester_aktuell')
|
||||
|
||||
@@ -0,0 +1,422 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about documents
|
||||
* Listens to ajax post calls to change the documents data
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*
|
||||
* This controller handles output and access to documents.
|
||||
* It checks permissions to render documents in an alternative format
|
||||
* or it creates a XML file, transforms it with the XSL-FO Vorlage from the
|
||||
* database and generates a PDF file with unoconv or docsbox.
|
||||
* This file is then archivated in the database.
|
||||
*
|
||||
* The last part is the CodeIgniter version of content/pdfExport.php when not
|
||||
* using the get paremeter: "archivdokument" but using the get parameter:
|
||||
* "archive".
|
||||
* Use archiveSigned() instead of providing the "sign" get parameter and
|
||||
* archive() otherwise.
|
||||
*/
|
||||
class Documents extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'permissionAlternativeFormat' => self::PERM_LOGGED,
|
||||
'archive' => ['admin:rw', 'assistenz:rw'],
|
||||
'archiveSigned' => ['admin:rw', 'assistenz:rw']
|
||||
]);
|
||||
|
||||
// Load Phrases
|
||||
$this->loadPhrases([
|
||||
'stv'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the current user has permission to render documents in an
|
||||
* alternative format.
|
||||
*
|
||||
* @param string $oe_kurzbz Or studiengang_kz
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function permissionAlternativeFormat($oe_kurzbz)
|
||||
{
|
||||
$this->terminateWithSuccess($this->permissionlib->isBerechtigt('system/change_outputformat', null, $oe_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a not signed document.
|
||||
*
|
||||
* @param string $xml (optional)
|
||||
* @param string $xsl (optional)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function archive($xml = null, $xsl = null)
|
||||
{
|
||||
return $this->_archive($xml, $xsl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a signed document.
|
||||
*
|
||||
* @param string $xml (optional)
|
||||
* @param string $xsl (optional)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function archiveSigned($xml = null, $xsl = null)
|
||||
{
|
||||
return $this->_archive($xml, $xsl, getAuthUID());
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for archive() and archiveSigned()
|
||||
*
|
||||
* @param string $xml
|
||||
* @param string $xsl
|
||||
* @param string $sign_user (optional)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function _archive($xml, $xsl, $sign_user = null)
|
||||
{
|
||||
if (!$xml || !$xsl) {
|
||||
$this->load->library('form_validation');
|
||||
if (!$xml) {
|
||||
$xml = $this->input->post_get('xml');
|
||||
$this->form_validation->set_rules('xml', 'xml', 'required');
|
||||
}
|
||||
if (!$xsl) {
|
||||
$xsl = $this->input->post_get('xsl');
|
||||
$this->form_validation->set_rules('xsl', 'xsl', 'required');
|
||||
}
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$xsl_oe_kurzbz = null;
|
||||
$version = $this->input->post_get('version') ?: null;
|
||||
|
||||
// Get the OE or STG of the document
|
||||
$xsl_oe_kurzbz = $this->input->post_get('xsl_oe_kurzbz')
|
||||
?: $this->input->post_get('xsl_stg_kz')
|
||||
?: $this->input->post_get('stg_kz');
|
||||
if (is_null($xsl_oe_kurzbz)) {
|
||||
$uid = $this->input->post_get('uid');
|
||||
if ($uid) {
|
||||
$uid = current(explode(';', $uid));
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->load([$uid]);
|
||||
if (!isError($result) && hasData($result))
|
||||
$xsl_oe_kurzbz = current(getData($result))->studiengang_kz;
|
||||
}
|
||||
}
|
||||
if (is_null($xsl_oe_kurzbz)) {
|
||||
$prestudent_id = $this->input->post_get('prestudent_id');
|
||||
if ($prestudent_id) {
|
||||
$prestudent_id = current(explode(';', $prestudent_id));
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
$result = $this->PrestudentModel->load($prestudent_id);
|
||||
if (!isError($result) && hasData($result))
|
||||
$xsl_oe_kurzbz = current(getData($result))->studiengang_kz;
|
||||
}
|
||||
}
|
||||
if (is_null($xsl_oe_kurzbz))
|
||||
$xsl_oe_kurzbz = 0;
|
||||
|
||||
// Vorlage
|
||||
$this->load->model('system/Vorlage_model', 'VorlageModel');
|
||||
|
||||
$result = $this->VorlageModel->load($xsl);
|
||||
$vorlage = current($this->getDataOrTerminateWithError($result));
|
||||
if (!$vorlage)
|
||||
show_404();
|
||||
|
||||
// Akte Data
|
||||
$akteData = [
|
||||
'dokument_kurzbz' => $vorlage->dokument_kurzbz ?: 'Zeugnis',
|
||||
'mimetype' => 'application/pdf',
|
||||
'erstelltam' => date('Y-m-d'),
|
||||
'gedruckt' => true,
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID(),
|
||||
'uid' => $this->input->post_get('uid') ?: '',
|
||||
'archiv' => true,
|
||||
'signiert' => !!$sign_user,
|
||||
'stud_selfservice' => $vorlage->stud_selfservice
|
||||
];
|
||||
$studiengang_kz = null;
|
||||
if ($akteData['uid']) {
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->StudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||
$result = $this->StudentModel->load([$akteData['uid']]);
|
||||
$student = current($this->getDataOrTerminateWithError($result));
|
||||
|
||||
$ss = $this->input->post_get('ss');
|
||||
|
||||
if ($ss !== null) {
|
||||
$this->load->model('crm/prestudentstatus_model', 'PrestudentstatusModel');
|
||||
$result = $this->PrestudentstatusModel->getLastStatus($student->prestudent_id, $ss);
|
||||
$status = current($this->getDataOrTerminateWithError($result));
|
||||
if (!$status)
|
||||
$this->terminateWithError($this->p->t("stv", "grades_error_prestudentstatus"));
|
||||
$semester = $status->ausbildungssemester;
|
||||
|
||||
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
|
||||
$this->StudentlehrverbandModel->addJoin('public.tbl_benutzer', 'uid = student_uid');
|
||||
$this->StudentlehrverbandModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$result = $this->StudentlehrverbandModel->load([
|
||||
'studiensemester_kurzbz' => $ss,
|
||||
'student_uid' => $akteData['uid']
|
||||
]);
|
||||
$res = current($this->getDataOrTerminateWithError($result));
|
||||
|
||||
$studiengang_kz = $res->studiengang_kz;
|
||||
$akteData['person_id'] = $res->person_id;
|
||||
switch ($xsl) {
|
||||
case 'Ausbildungsver':
|
||||
case 'AusbVerEng':
|
||||
$akteData['titel'] = mb_substr($xsl .
|
||||
"_" .
|
||||
strtoupper($res->typ) .
|
||||
strtoupper($res->kurzbz) .
|
||||
"_" .
|
||||
$semester .
|
||||
"_" .
|
||||
$ss, 0, 64);
|
||||
$akteData['bezeichnung'] = mb_substr($vorlage->bezeichnung . " " . $student->kuerzel, 0, 64);
|
||||
break;
|
||||
case 'LVZeugnisEng':
|
||||
case 'LVZeugnis':
|
||||
case 'Zertifikat':
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$result = $this->LehrveranstaltungModel->load($this->input->post_get('lvid'));
|
||||
$lv = current($this->getDataOrTerminateWithError($result));
|
||||
$akteData['dokument_kurzbz'] = $xsl;
|
||||
$akteData['titel'] = mb_substr($xsl .
|
||||
"_" .
|
||||
strtoupper($res->typ) .
|
||||
strtoupper($res->kurzbz) .
|
||||
"_" .
|
||||
$semester .
|
||||
'_' .
|
||||
$ss .
|
||||
'_' .
|
||||
str_replace(' ', '_', $lv->bezeichnung), 0, 60);
|
||||
$akteData['bezeichnung'] = mb_substr($xsl .
|
||||
" " .
|
||||
strtoupper($res->typ) .
|
||||
strtoupper($res->kurzbz) .
|
||||
" " .
|
||||
$semester .
|
||||
". Semester" .
|
||||
' ' .
|
||||
$ss .
|
||||
' ' .
|
||||
$lv->bezeichnung, 0, 64);
|
||||
break;
|
||||
case 'SZeugnis':
|
||||
$akteData['titel'] = mb_substr($vorlage->bezeichnung . " " . $student->kuerzel, 0, 64);
|
||||
$akteData['bezeichnung'] = mb_substr($vorlage->bezeichnung . " " . $student->kuerzel, 0, 64);
|
||||
break;
|
||||
default:
|
||||
$akteData['titel'] = mb_substr($xsl .
|
||||
"_" .
|
||||
strtoupper($res->typ) .
|
||||
strtoupper($res->kurzbz) .
|
||||
"_" .
|
||||
$semester .
|
||||
"_" .
|
||||
$ss, 0, 64);
|
||||
$akteData['bezeichnung'] = mb_substr($xsl .
|
||||
" " .
|
||||
strtoupper($res->typ) .
|
||||
strtoupper($res->kurzbz) .
|
||||
" " .
|
||||
$semester .
|
||||
". Semester" .
|
||||
' ' .
|
||||
$ss, 0, 64);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$studiengang_kz = $student->studiengang_kz;
|
||||
$akteData['person_id'] = $student->person_id;
|
||||
$akteData['titel'] = $vorlage->bezeichnung . '_' . $student->kuerzel;
|
||||
$akteData['bezeichnung'] = mb_substr($vorlage->bezeichnung . " " . $student->kuerzel, 0, 64);
|
||||
}
|
||||
} else {
|
||||
$prestudent_id = $this->input->post_get('prestudent_id');
|
||||
if ($prestudent_id) {
|
||||
$this->load->model('crm/prestudent_model', 'PrestudentModel');
|
||||
$this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||
$result = $this->PrestudentModel->load($prestudent_id);
|
||||
$prestudent = current($this->getDataOrTerminateWithError($result));
|
||||
|
||||
$studiengang_kz = $prestudent->studiengang_kz;
|
||||
$akteData['person_id'] = $prestudent->person_id;
|
||||
$akteData['titel'] = mb_substr($xsl . "_" . $prestudent->kuerzel, 0, 64);
|
||||
$akteData['bezeichnung'] = mb_substr($vorlage->bezeichnung . " " . $prestudent->kuerzel, 0, 64);
|
||||
}
|
||||
}
|
||||
|
||||
// Access rights
|
||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid', $studiengang_kz)
|
||||
&& !$this->permissionlib->isBerechtigt('assistenz', 'suid', $studiengang_kz))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]);
|
||||
if ($xsl == 'AccountInfo') {
|
||||
$this->load->model('resource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$uids = $this->input->post_get('uid');
|
||||
if ($uids) {
|
||||
$uids = explode(';', $uids);
|
||||
foreach ($uids as $uid) {
|
||||
$result = $this->MitarbeiterModel->load($uid);
|
||||
if (!isError($result) && hasData($result)) {
|
||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid', 0)
|
||||
&& !$this->permissionlib->isBerechtigt('mitarbeiter', 'suid', 0))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin:rw', 'mitarbeiter:rw']]);
|
||||
} else {
|
||||
$result = $this->StudentModel->load([$uid]);
|
||||
if (!isError($result) && hasData($result)) {
|
||||
$student = current(getData($result));
|
||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid', $student->studiengang_kz)
|
||||
&& !$this->permissionlib->isBerechtigt('admin', 'suid', 0)
|
||||
&& !$this->permissionlib->isBerechtigt('assistenz', 'suid', $student->studiengang_kz)
|
||||
&& !$this->permissionlib->isBerechtigt('assistenz', 'suid', 0)
|
||||
&& !$this->permissionlib->isBerechtigt('support', 'suid', 0))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw', 'support:rw']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
|
||||
|
||||
$result = $this->VorlagestudiengangModel->getCurrent($xsl, $xsl_oe_kurzbz, $version);
|
||||
$access_rights = current($this->getDataOrTerminateWithError($result));
|
||||
if (!$access_rights || !$access_rights->berechtigung)
|
||||
return show_404();
|
||||
|
||||
$allowed = false;
|
||||
foreach ($access_rights->berechtigung as $access_right) {
|
||||
if ($this->permissionlib->isBerechtigt($access_right)) {
|
||||
$allowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$allowed)
|
||||
return $this->_outputAuthError([$this->router->method => $access_rights]);
|
||||
}
|
||||
|
||||
// Output format
|
||||
$outputformat = $this->input->post_get('output') ?: 'pdf';
|
||||
if ($outputformat != 'pdf'
|
||||
// An der FHTW darf das Studienblatt und das Prüfungsprotokoll auch in anderen Formaten exportiert werden
|
||||
&& !(CAMPUS_NAME == 'FH Technikum Wien'
|
||||
&& ($xsl == 'Studienblatt'
|
||||
|| $xsl == 'StudienblattEng'
|
||||
|| $xsl == 'PrProtBA'
|
||||
|| $xsl == 'PrProtBAEng'
|
||||
|| $xsl == 'PrProtMA'
|
||||
|| $xsl == 'PrProtMAEng'
|
||||
)
|
||||
)
|
||||
&& !$this->permissionlib->isBerechtigt('system/change_outputformat', null, $xsl_oe_kurzbz)
|
||||
) {
|
||||
$outputformat = 'pdf';
|
||||
}
|
||||
|
||||
// XML Params
|
||||
$params = 'xmlformat=xml';
|
||||
foreach ([
|
||||
'uid',
|
||||
'stg_kz',
|
||||
'person_id',
|
||||
'id',
|
||||
'prestudent_id',
|
||||
'buchungsnummern',
|
||||
'ss',
|
||||
'abschlusspruefung_id',
|
||||
'typ',
|
||||
'all',
|
||||
'preoutgoing_id',
|
||||
'lvid',
|
||||
'projekt_kurzbz',
|
||||
'von',
|
||||
'bis',
|
||||
'stundevon',
|
||||
'stundebis',
|
||||
'sem',
|
||||
'lehreinheit',
|
||||
'mitarbeiter_uid',
|
||||
'studienordnung_id',
|
||||
'fixangestellt',
|
||||
'standort',
|
||||
'abrechnungsmonat',
|
||||
'form',
|
||||
'projektarbeit_id',
|
||||
'betreuerart_kurzbz',
|
||||
'studiensemester_kurzbz'
|
||||
] as $key) {
|
||||
$value = $this->input->post_get($key);
|
||||
if ($value !== null)
|
||||
$params .= '&' . $key . '=' . urlencode($value);
|
||||
}
|
||||
$value = $this->input->post_get('vertrag_id');
|
||||
if ($value !== null) {
|
||||
foreach ($value as $id)
|
||||
$params .= '&vertrag_id[]=' . urlencode($id);
|
||||
}
|
||||
|
||||
if (!$vorlage->archivierbar)
|
||||
$this->terminateWithError($this->p->t("stv", "grades_error_archive"));
|
||||
|
||||
if ($sign_user && !$vorlage->signierbar)
|
||||
$this->terminateWithError($this->p->t("stv", "grades_error_sign"));
|
||||
|
||||
|
||||
$this->load->library('DocumentExportLib');
|
||||
|
||||
// XML Data
|
||||
$result = $this->documentexportlib->getDataURL($xml, $params);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$this->documentexportlib->addArchiveToData($data);
|
||||
|
||||
// Output
|
||||
$result = $this->documentexportlib->getContent($vorlage, $data, $xsl_oe_kurzbz, $version, $outputformat, $sign_user);
|
||||
|
||||
$content = $this->getDataOrTerminateWithError($result);
|
||||
$akteData['titel'] .= '.pdf';
|
||||
$akteData['inhalt'] = base64_encode($content);
|
||||
|
||||
$this->load->model('crm/Akte_model', 'AkteModel');
|
||||
$result = $this->AkteModel->insert($akteData);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
}
|
||||
@@ -113,7 +113,7 @@ class Filter extends FHCAPI_Controller
|
||||
*/
|
||||
public function applyFilterFields()
|
||||
{
|
||||
$this->form_validation->set_rules('filterFields', 'filterFields', 'required');
|
||||
$this->form_validation->set_rules('filterFields[]', 'filterFields', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
@@ -342,7 +342,7 @@ class BetriebsmittelP extends FHCAPI_Controller
|
||||
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Betriebsmittelperson_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess(current(getData($result)));
|
||||
return $this->terminateWithSuccess(current(getData($result)));
|
||||
}
|
||||
|
||||
public function deleteBetriebsmittel($betriebsmittelperson_id)
|
||||
@@ -358,7 +358,7 @@ class BetriebsmittelP extends FHCAPI_Controller
|
||||
if (!hasData($result)) {
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Betriebsmittelperson_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(current(getData($result)));
|
||||
$this->terminateWithSuccess(current(getData($result)));
|
||||
}
|
||||
|
||||
public function getTypenBetriebsmittel()
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* FH-Complete
|
||||
*
|
||||
* @package FHC-API
|
||||
* @author FHC-Team
|
||||
* @copyright Copyright (c) 2016, fhcomplete.org
|
||||
* @license GPLv3
|
||||
* @link http://fhcomplete.org
|
||||
* @since Version 1.0
|
||||
* @filesource
|
||||
*/
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class StudiengangEP extends FHCAPI_Controller
|
||||
{
|
||||
/**
|
||||
* StudiengangEP API constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'getStudiengangByKz' => self::PERM_LOGGED
|
||||
)
|
||||
);
|
||||
// Load model StudiengangModel
|
||||
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function getStudiengangByKz()
|
||||
{
|
||||
$studiengang_kz = intval($this->input->get('studiengang_kz'));
|
||||
|
||||
$this->StudiengangModel->addSelect('studiengang_kz, kurzbz, kurzbzlang, '
|
||||
. 'typ, bezeichnung, english, aktiv, orgform_kurzbz, sprache, '
|
||||
. 'oe_kurzbz');
|
||||
$result = $this->StudiengangModel->load($studiengang_kz);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
}
|
||||
|
||||
$stg = null;
|
||||
if(hasData($result))
|
||||
{
|
||||
$stg = (getData($result))[0];
|
||||
}
|
||||
$this->terminateWithSuccess($stg);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* FH-Complete
|
||||
*
|
||||
* @package FHC-API
|
||||
* @author FHC-Team
|
||||
* @copyright Copyright (c) 2016, fhcomplete.org
|
||||
* @license GPLv3
|
||||
* @link http://fhcomplete.org
|
||||
* @since Version 1.0
|
||||
* @filesource
|
||||
*/
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Studienjahr extends FHCAPI_Controller
|
||||
{
|
||||
/**
|
||||
* Studienjahr API constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'getAll' => self::PERM_LOGGED,
|
||||
'getNext' => self::PERM_LOGGED
|
||||
)
|
||||
);
|
||||
// Load model StudiensemesterModel
|
||||
$this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Studienjahre.
|
||||
*
|
||||
* @param null|string $order Sorting order for the Studienjahr, 'asc' or 'desc'. Defaults to 'asc'.
|
||||
* @param null|string $start Starting Studienjahre with given studienjahr_kurzbz
|
||||
*/
|
||||
public function getAll()
|
||||
{
|
||||
$order = $this->input->get('order');
|
||||
$start = $this->input->get('studienjahr_kurzbz');
|
||||
|
||||
if (strcasecmp($order, 'DESC') == 0) {
|
||||
$this->StudienjahrModel->addOrder('studienjahr_kurzbz', 'DESC');
|
||||
} else {
|
||||
$this->StudienjahrModel->addOrder('studienjahr_kurzbz', 'ASC');
|
||||
}
|
||||
|
||||
if ($start) {
|
||||
$result = $this->StudienjahrModel->loadWhere([
|
||||
'studienjahr_kurzbz >= ' => $start
|
||||
]);
|
||||
} else {
|
||||
$result = $this->StudienjahrModel->load();
|
||||
}
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
public function getNext()
|
||||
{
|
||||
$this->StudienjahrModel->addJoin('public.tbl_studiensemester', 'studienjahr_kurzbz');
|
||||
$this->StudienjahrModel->addOrder('start');
|
||||
$this->StudienjahrModel->addLimit(1);
|
||||
|
||||
$result = $this->StudienjahrModel->loadWhere(['start >' => 'NOW()']);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess(current(getData($result)));
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,8 @@ class Studiensemester extends FHCAPI_Controller
|
||||
parent::__construct(
|
||||
array(
|
||||
'getAll' => self::PERM_LOGGED,
|
||||
'getAktNext' => self::PERM_LOGGED
|
||||
'getAktNext' => self::PERM_LOGGED,
|
||||
'getStudienjahrByStudiensemester' => self::PERM_LOGGED
|
||||
)
|
||||
);
|
||||
// Load model StudiensemesterModel
|
||||
@@ -115,4 +116,40 @@ class Studiensemester extends FHCAPI_Controller
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: ''));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Studienjahr by Studiensemester.
|
||||
* input param semester: studiensemester_kurzbz
|
||||
*/
|
||||
public function getStudienjahrByStudiensemester()
|
||||
{
|
||||
$semester = $this->input->get('semester');
|
||||
|
||||
$studienjahrObj = null;
|
||||
|
||||
if (!is_numeric($semester))
|
||||
{
|
||||
$this->StudiensemesterModel->addSelect('studienjahr_kurzbz');
|
||||
$result = $this->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz =' => $semester));
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$studienjahr = getData($result)[0]->studienjahr_kurzbz;
|
||||
$startstudienjahr = substr($studienjahr, 0, 4);
|
||||
$endstudienjahr = substr($studienjahr, 0, 2) . substr($studienjahr, -2);
|
||||
|
||||
$studienjahrObj = new StdClass();
|
||||
|
||||
$studienjahrObj->studienjahr_kurzbz = $studienjahr;
|
||||
$studienjahrObj->startstudienjahr = $startstudienjahr;
|
||||
$studienjahrObj->endstudienjahr= $endstudienjahr;
|
||||
}
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData(success($studienjahrObj))));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,420 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \DateTime as DateTime;
|
||||
|
||||
class Abschlusspruefung extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getAbschlusspruefung' => ['admin:r', 'assistenz:r'],
|
||||
'loadAbschlusspruefung' => ['admin:r', 'assistenz:r'],
|
||||
'insertAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
|
||||
'updateAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
|
||||
'deleteAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
|
||||
'getTypenAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
|
||||
'getNoten' => ['admin:rw', 'assistenz:rw'],
|
||||
'getTypenAntritte' => ['admin:rw', 'assistenz:rw'],
|
||||
'getBeurteilungen' => ['admin:rw', 'assistenz:rw'],
|
||||
'getAkadGrade' => ['admin:rw', 'assistenz:rw'],
|
||||
'getMitarbeiter' => ['admin:rw', 'assistenz:rw'],
|
||||
'getPruefer' => ['admin:rw', 'assistenz:rw'],
|
||||
'getTypStudiengang' => ['admin:rw', 'assistenz:rw'],
|
||||
'checkForExistingExams' => ['admin:rw', 'assistenz:rw'],
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
$this->load->library('form_validation');
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui',
|
||||
'person',
|
||||
'abschlusspruefung'
|
||||
]);
|
||||
|
||||
// Load models
|
||||
$this->load->model('education/Abschlusspruefung_model', 'AbschlusspruefungModel');
|
||||
}
|
||||
|
||||
public function getAbschlusspruefung($student_uid)
|
||||
{
|
||||
$result = $this->AbschlusspruefungModel->getAbschlusspruefungForPrestudent($student_uid);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
public function loadAbschlusspruefung()
|
||||
{
|
||||
$abschlusspruefung_id = $this->input->post('id');
|
||||
|
||||
$this->AbschlusspruefungModel->addSelect('lehre.tbl_abschlusspruefung.*');
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN pruefer1 IS NOT NULL
|
||||
THEN CONCAT(p1.nachname, ' ', p1.vorname, COALESCE(' ' || p1.titelpre, ''))
|
||||
ELSE NULL
|
||||
END AS p1
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN pruefer2 IS NOT NULL
|
||||
THEN CONCAT(p2.nachname, ' ', p2.vorname, COALESCE(' ' || p2.titelpre, ''))
|
||||
ELSE NULL
|
||||
END AS p2
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN pruefer3 IS NOT NULL
|
||||
THEN CONCAT(p3.nachname, ' ', p3.vorname, COALESCE(' ' || p3.titelpre, ''))
|
||||
ELSE NULL
|
||||
END AS p3
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN vorsitz IS NOT NULL
|
||||
THEN CONCAT(pv.nachname, ' ', pv.vorname, COALESCE(' ' || pv.titelpre, ''), ' (', ben.uid , ')' )
|
||||
ELSE NULL
|
||||
END AS pv
|
||||
");
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_benutzer ben', 'ON (ben.uid = lehre.tbl_abschlusspruefung.vorsitz)', 'LEFT');
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_person pv', 'ON (pv.person_id = ben.person_id)', 'LEFT');
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_person p1', 'ON (p1.person_id = lehre.tbl_abschlusspruefung.pruefer1)', 'LEFT');
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_person p2', 'ON (p2.person_id = lehre.tbl_abschlusspruefung.pruefer2)', 'LEFT');
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_person p3', 'ON (p3.person_id = lehre.tbl_abschlusspruefung.pruefer3)', 'LEFT');
|
||||
$result = $this->AbschlusspruefungModel->loadWhere(
|
||||
array('abschlusspruefung_id' => $abschlusspruefung_id)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function getTypenAbschlusspruefung()
|
||||
{
|
||||
$this->load->model('education/Pruefungstyp_model', 'PruefungstypModel');
|
||||
|
||||
$result = $this->PruefungstypModel->loadWhere(
|
||||
array('abschluss' => true)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getTypenAntritte()
|
||||
{
|
||||
$this->load->model('education/Pruefungsantritt_model', 'PruefungsantrittModel');
|
||||
|
||||
$result = $this->PruefungsantrittModel->load();
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getBeurteilungen()
|
||||
{
|
||||
$this->load->model('education/Abschlussbeurteilung_model', 'AbschlussbeurteilungModel');
|
||||
|
||||
$result = $this->AbschlussbeurteilungModel->load();
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getAkadGrade()
|
||||
{
|
||||
$studiengang_kz= $this->input->post('studiengang_kz');
|
||||
|
||||
|
||||
$this->load->model('education/Akadgrad_model', 'AkadgradModel');
|
||||
|
||||
$result = $this->AkadgradModel->loadWhere(
|
||||
array('studiengang_kz' => $studiengang_kz)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getTypStudiengang()
|
||||
{
|
||||
$studiengang_kz= $this->input->post('studiengang_kz');
|
||||
|
||||
/* if (!$studiengang_kzs || !is_array($studiengang_kzs)) {
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('studiengang_kzs', '', 'required|is_null', [
|
||||
'is_null' => $this->p->t('ui', 'error_fieldMustBeArray')
|
||||
]);
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}*/
|
||||
|
||||
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
|
||||
$result = $this->StudiengangModel->loadWhere(
|
||||
array('studiengang_kz' => $studiengang_kz)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$typStudiengang = current($data)->typ;
|
||||
|
||||
$this->terminateWithSuccess($typStudiengang);
|
||||
}
|
||||
|
||||
public function getMitarbeiter($searchString)
|
||||
{
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'mitAkadGrad');
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess($result ?: []);
|
||||
}
|
||||
|
||||
public function getPruefer($searchString)
|
||||
{
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'ohneMaUid');
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($result ?: []);
|
||||
}
|
||||
|
||||
public function getNoten()
|
||||
{
|
||||
$this->load->model('education/Note_model', 'NoteModel');
|
||||
|
||||
$this->NoteModel->addOrder('note', 'ASC');
|
||||
$result = $this->NoteModel->load();
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function insertAbschlusspruefung()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$student_uid = $this->input->post('uid');
|
||||
|
||||
if(!$student_uid)
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$formData = $this->input->post('formData');
|
||||
|
||||
$_POST['pruefungstyp_kurzbz'] = $formData['pruefungstyp_kurzbz'];
|
||||
$_POST['akadgrad_id']= $formData['akadgrad_id'];
|
||||
$_POST['vorsitz'] = isset($formData['vorsitz']['mitarbeiter_uid']) ? $formData['vorsitz']['mitarbeiter_uid'] : $formData['vorsitz'];
|
||||
$_POST['pruefer1'] = isset($formData['pruefer1']['person_id']) ? $formData['pruefer1']['person_id'] : $formData['pruefer1'];
|
||||
$_POST['pruefer2'] = isset($formData['pruefer2']['person_id']) ? $formData['pruefer2']['person_id'] : $formData['pruefer2'];
|
||||
$_POST['pruefer3'] = isset($formData['pruefer3']['person_id']) ? $formData['pruefer3']['person_id'] : $formData['pruefer3'];
|
||||
$_POST['pruefungsantritt_kurzbz'] = $formData['pruefungsantritt_kurzbz'];
|
||||
$_POST['abschlussbeurteilung_kurzbz'] = $formData['abschlussbeurteilung_kurzbz'];
|
||||
$_POST['datum']= $formData['datum'];
|
||||
$_POST['sponsion']= $formData['sponsion'];
|
||||
$_POST['anmerkung'] = $formData['anmerkung'];
|
||||
$_POST['protokoll']= $formData['protokoll'];
|
||||
$_POST['note'] = $formData['note'];
|
||||
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', 'Typ', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('akadgrad_id', 'AkadGrad', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'AkadGrad'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('datum', 'Datum', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Datum'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('sponsion', 'Sponsion', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Sponsion'])
|
||||
]);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->AbschlusspruefungModel->insert([
|
||||
'student_uid' => $student_uid,
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'akadgrad_id' => $this->input->post('akadgrad_id'),
|
||||
'vorsitz' => $this->input->post('vorsitz'),
|
||||
'pruefungsantritt_kurzbz' => $this->input->post('pruefungsantritt_kurzbz'),
|
||||
'abschlussbeurteilung_kurzbz' => $this->input->post('abschlussbeurteilung_kurzbz'),
|
||||
'datum' => $this->input->post('datum'), //TODO(Manu) check if minute format like FAS
|
||||
'sponsion' => $this->input->post('sponsion'),
|
||||
'pruefer1' => $this->input->post('pruefer1'),
|
||||
'pruefer2' => $this->input->post('pruefer2'),
|
||||
'pruefer3' => $this->input->post('pruefer3'),
|
||||
'protokoll' => $this->input->post('protokoll'),
|
||||
'note' => $this->input->post('note'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID()
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function updateAbschlusspruefung()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$abschlusspruefung_id = $this->input->post('id');
|
||||
|
||||
if(!$abschlusspruefung_id)
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Abschlussprüfung ID']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$formData = $this->input->post('formData');
|
||||
$_POST['student_uid'] = $formData['student_uid'];
|
||||
$_POST['pruefungstyp_kurzbz'] = $formData['pruefungstyp_kurzbz'];
|
||||
$_POST['akadgrad_id']= $formData['akadgrad_id'];
|
||||
$_POST['vorsitz'] = isset($formData['vorsitz']['mitarbeiter_uid']) ? $formData['vorsitz']['mitarbeiter_uid'] : $formData['vorsitz'];
|
||||
$_POST['pruefer1'] = isset($formData['pruefer1']['person_id']) ? $formData['pruefer1']['person_id'] : $formData['pruefer1'];
|
||||
$_POST['pruefer2'] = isset($formData['pruefer2']['person_id']) ? $formData['pruefer2']['person_id'] : $formData['pruefer2'];
|
||||
$_POST['pruefer3'] = isset($formData['pruefer3']['person_id']) ? $formData['pruefer3']['person_id'] : $formData['pruefer3'];
|
||||
$_POST['pruefungsantritt_kurzbz'] = $formData['pruefungsantritt_kurzbz'];
|
||||
$_POST['abschlussbeurteilung_kurzbz'] = $formData['abschlussbeurteilung_kurzbz'];
|
||||
$_POST['datum']= $formData['datum'];
|
||||
$_POST['sponsion']= $formData['sponsion'];
|
||||
$_POST['anmerkung'] = $formData['anmerkung'];
|
||||
$_POST['protokoll']= $formData['protokoll'];
|
||||
$_POST['note'] = $formData['note'];
|
||||
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', 'Typ', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('akadgrad_id', 'AkadGrad', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'AkadGrad'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('datum', 'Datum', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Datum'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('sponsion', 'Sponsion', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Sponsion'])
|
||||
]);
|
||||
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->AbschlusspruefungModel->update(
|
||||
[
|
||||
'abschlusspruefung_id' => $abschlusspruefung_id
|
||||
],
|
||||
[
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'akadgrad_id' => $this->input->post('akadgrad_id'),
|
||||
'vorsitz' => $this->input->post('vorsitz'),
|
||||
'pruefungsantritt_kurzbz' => $this->input->post('pruefungsantritt_kurzbz'),
|
||||
'abschlussbeurteilung_kurzbz' => $this->input->post('abschlussbeurteilung_kurzbz'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'sponsion' => $this->input->post('sponsion'),
|
||||
'pruefer1' => $this->input->post('pruefer1'),
|
||||
'pruefer2' => $this->input->post('pruefer2'),
|
||||
'pruefer3' => $this->input->post('pruefer3'),
|
||||
'protokoll' => $this->input->post('protokoll'),
|
||||
'note' => $this->input->post('note'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID()
|
||||
]
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function deleteAbschlusspruefung()
|
||||
{
|
||||
$abschlusspruefung_id = $this->input->post('id');
|
||||
|
||||
$result = $this->AbschlusspruefungModel->delete(
|
||||
array('abschlusspruefung_id' => $abschlusspruefung_id)
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (!hasData($result))
|
||||
{
|
||||
$this->outputJson($result);
|
||||
}
|
||||
return $this->terminateWithSuccess(current(getData($result)) ? : null);
|
||||
}
|
||||
|
||||
public function checkForExistingExams()
|
||||
{
|
||||
$warning = false;
|
||||
$output = [];
|
||||
|
||||
$student_uids = $this->input->post('uids');
|
||||
|
||||
if (empty($student_uids)) {
|
||||
throw new InvalidArgumentException("Keine UID(s) übergeben.");
|
||||
}
|
||||
|
||||
if( !is_array($student_uids) )
|
||||
{
|
||||
$student_uids = array($student_uids);
|
||||
}
|
||||
|
||||
foreach ($student_uids as $uid)
|
||||
{
|
||||
$result = $this->AbschlusspruefungModel->loadWhere(
|
||||
array('student_uid' => $uid)
|
||||
);
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (!hasData($result))
|
||||
{
|
||||
$warning = true;
|
||||
$output[] = $uid;
|
||||
}
|
||||
}
|
||||
if($warning)
|
||||
{
|
||||
$uids = is_array($output) ? implode(", ", $output) : $output;
|
||||
return $this->terminateWithError($this->p->t('abschlusspruefung', 'error_studentOhneFinalExam', ['id'=> $uids]), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess('step3');
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,7 @@ class Address extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getPlaces($plz)
|
||||
public function getPlaces($plz = null)
|
||||
{
|
||||
$this->load->model('codex/Gemeinde_model', 'GemeindeModel');
|
||||
|
||||
@@ -53,7 +53,7 @@ class Address extends FHCAPI_Controller
|
||||
|
||||
$this->form_validation->set_data(['address.plz' => $plz]);
|
||||
|
||||
$this->form_validation->set_rules('address.plz', 'PLZ', 'numeric|less_than[10000]');
|
||||
$this->form_validation->set_rules('address.plz', 'PLZ', 'required|numeric|less_than[10000]');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
@@ -44,16 +44,23 @@ class Config extends FHCAPI_Controller
|
||||
'person',
|
||||
'lehre',
|
||||
'stv',
|
||||
'konto'
|
||||
'konto',
|
||||
'abschlusspruefung'
|
||||
]);
|
||||
|
||||
// Load Config
|
||||
$this->load->config('stv');
|
||||
}
|
||||
|
||||
public function student()
|
||||
{
|
||||
$result = [];
|
||||
$config = $this->config->item('tabs');
|
||||
|
||||
$result['details'] = [
|
||||
'title' => $this->p->t('stv', 'tab_details'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Details.js'
|
||||
'component' => './Stv/Studentenverwaltung/Details/Details.js',
|
||||
'config' => $config['details']
|
||||
];
|
||||
$result['notes'] = [
|
||||
'title' => $this->p->t('stv', 'tab_notes'),
|
||||
@@ -69,7 +76,8 @@ class Config extends FHCAPI_Controller
|
||||
];
|
||||
$result['prestudent'] = [
|
||||
'title' => $this->p->t('stv', 'tab_prestudent'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Prestudent.js'
|
||||
'component' => './Stv/Studentenverwaltung/Details/Prestudent.js',
|
||||
'config' => $config['prestudent']
|
||||
];
|
||||
$result['status'] = [
|
||||
'title' => 'Status',
|
||||
@@ -91,12 +99,34 @@ class Config extends FHCAPI_Controller
|
||||
'title' => $this->p->t('stv', 'tab_resources'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Betriebsmittel.js'
|
||||
];
|
||||
/* TODO(chris): Ausgeblendet für Testing
|
||||
$result['grades'] = [
|
||||
'title' => $this->p->t('stv', 'tab_grades'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Noten.js'
|
||||
'component' => './Stv/Studentenverwaltung/Details/Noten.js',
|
||||
'showOnlyWithUid' => true,
|
||||
'config' => [
|
||||
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
|
||||
'edit' => 'both', // Possible values: both|header|inline
|
||||
'delete' => 'both', // Possible values: both|header|inline
|
||||
'documents' => 'both', // Possible values: both|header|inline
|
||||
'documentslist' => $this->gradesDocumentsList()
|
||||
]
|
||||
];
|
||||
|
||||
$result['exam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_exam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Pruefung.js'
|
||||
];
|
||||
|
||||
$result['finalexam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_finalexam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
|
||||
'config' => $config['finalexam']
|
||||
];
|
||||
|
||||
$result['mobility'] = [
|
||||
'title' => $this->p->t('stv', 'tab_mobility'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Mobility.js'
|
||||
];
|
||||
*/
|
||||
|
||||
Events::trigger('stv_conf_student', function & () use (&$result) {
|
||||
return $result;
|
||||
@@ -108,6 +138,7 @@ class Config extends FHCAPI_Controller
|
||||
public function students()
|
||||
{
|
||||
$result = [];
|
||||
$config = $this->config->item('tabs');
|
||||
$result['banking'] = [
|
||||
'title' => $this->p->t('stv', 'tab_banking'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Konto.js',
|
||||
@@ -131,6 +162,11 @@ class Config extends FHCAPI_Controller
|
||||
'changeStatusToAbsolvent' => $this->permissionlib->isBerechtigt('admin')
|
||||
]
|
||||
];
|
||||
$result['finalexam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_finalexam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
|
||||
'config' => $config['finalexam']
|
||||
];
|
||||
|
||||
Events::trigger('stv_conf_students', function & () use (&$result) {
|
||||
return $result;
|
||||
@@ -230,4 +266,186 @@ class Config extends FHCAPI_Controller
|
||||
]
|
||||
] + $this->kontoColumns();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to generate the default documentslist config for the
|
||||
* grades tab.
|
||||
*
|
||||
* The resulting array consists of elements which are associative arrays
|
||||
* that can have the following entries:
|
||||
* title (required) on the first level this can be HTML code.
|
||||
* permissioncheck (optional) an URL to an FHCAPI endpoint which returns
|
||||
* true or false.
|
||||
* link (optional) an URL that will be called if "action" and
|
||||
* "children" are not defined.
|
||||
* action (optional) an associative array that describes an
|
||||
* POST action that will be called if "children" is
|
||||
* not defined.
|
||||
* It can have the following entries:
|
||||
* - url (required) an URL to an FHCAPI endpoint.
|
||||
* - post (optional) an associative array with the POST data to
|
||||
* be sent.
|
||||
* - response (optional) a string that will be displayed on success.
|
||||
* children (optional) an array of child elements
|
||||
*
|
||||
* All strings that start with { and end with } in the URLs and the
|
||||
* actions post parameter will be replaced with the corresponding
|
||||
* attribute of the current dataset (e.G: {uid} will be replaced with the
|
||||
* uid of the current dataset)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function gradesDocumentsList()
|
||||
{
|
||||
$permissioncheck = site_url("api/frontend/v1/documents/permissionAlternativeFormat/{studiengang_kz}");
|
||||
|
||||
$title_ger = $this->p->t("global", "deutsch");
|
||||
$title_eng = $this->p->t("global", "englisch");
|
||||
$title_ff = $this->p->t("stv", "document_certificate");
|
||||
$title_lv = $this->p->t("stv", "document_coursecertificate");
|
||||
|
||||
$link_ff = "documents/export/" .
|
||||
"zertifikat.rdf.php/" .
|
||||
"Zertifikat" .
|
||||
"?stg_kz={studiengang_kz_lv}" .
|
||||
"&uid={uid}" .
|
||||
"&ss={studiensemester_kurzbz}" .
|
||||
"&lvid={lehrveranstaltung_id}";
|
||||
$link_lv_ger = "documents/export/" .
|
||||
"lehrveranstaltungszeugnis.rdf.php/" .
|
||||
"LVZeugnis" .
|
||||
"?stg_kz={studiengang_kz}" .
|
||||
"&uid={uid}" .
|
||||
"&ss={studiensemester_kurzbz}" .
|
||||
"&lvid={lehrveranstaltung_id}";
|
||||
$link_lv_eng = "documents/export/" .
|
||||
"lehrveranstaltungszeugnis.rdf.php/" .
|
||||
"LVZeugnisEng" .
|
||||
"?stg_kz={studiengang_kz}" .
|
||||
"&uid={uid}" .
|
||||
"&ss={studiensemester_kurzbz}" .
|
||||
"&lvid={lehrveranstaltung_id}";
|
||||
|
||||
$archive_url = "api/frontend/v1/documents/archiveSigned";
|
||||
$archive_response = $this->p->t("stv", "document_signed_and_archived");
|
||||
$archive_post_ff = [
|
||||
"xml" => "zertifikat.rdf.php",
|
||||
"xsl" => "Zertifikat",
|
||||
"stg_kz" => "{studiengang_kz_lv}",
|
||||
"uid" => "{uid}",
|
||||
"ss" => "{studiensemester_kurzbz}",
|
||||
"lvid" => "{lehrveranstaltung_id}"
|
||||
];
|
||||
$archive_post_lv_ger = [
|
||||
"xml" => "lehrveranstaltungszeugnis.rdf.php",
|
||||
"xsl" => "LVZeugnis",
|
||||
"stg_kz" => "{studiengang_kz}",
|
||||
"uid" => "{uid}",
|
||||
"ss" => "{studiensemester_kurzbz}",
|
||||
"lvid" => "{lehrveranstaltung_id}"
|
||||
];
|
||||
$archive_post_lv_eng = [
|
||||
"xml" => "lehrveranstaltungszeugnis.rdf.php",
|
||||
"xsl" => "LVZeugnisEng",
|
||||
"stg_kz" => "{studiengang_kz}",
|
||||
"uid" => "{uid}",
|
||||
"ss" => "{studiensemester_kurzbz}",
|
||||
"lvid" => "{lehrveranstaltung_id}"
|
||||
];
|
||||
|
||||
$list = [
|
||||
[
|
||||
'title' => '<i class="fa fa-download" title="' . $this->p->t("stv", "document_download") . '"></i>',
|
||||
'children' => [
|
||||
[
|
||||
'title' => $title_ff,
|
||||
'link' => site_url($link_ff)
|
||||
],
|
||||
[
|
||||
'title' => $title_lv,
|
||||
'children' => [
|
||||
[
|
||||
'title' => $title_ger,
|
||||
'link' => site_url($link_lv_ger),
|
||||
'children' => [
|
||||
[
|
||||
'title' => 'PDF',
|
||||
'permissioncheck' => $permissioncheck,
|
||||
'link' => site_url($link_lv_ger)
|
||||
],
|
||||
[
|
||||
'title' => 'DOC',
|
||||
'permissioncheck' => $permissioncheck,
|
||||
'link' => site_url($link_lv_ger . "&output=doc")
|
||||
],
|
||||
[
|
||||
'title' => 'ODT',
|
||||
'permissioncheck' => $permissioncheck,
|
||||
'link' => site_url($link_lv_ger . "&output=odt")
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'title' => $title_eng,
|
||||
'link' => site_url($link_lv_eng),
|
||||
'children' => [
|
||||
[
|
||||
'title' => 'PDF',
|
||||
'permissioncheck' => $permissioncheck,
|
||||
'link' => site_url($link_lv_eng)
|
||||
],
|
||||
[
|
||||
'title' => 'DOC',
|
||||
'permissioncheck' => $permissioncheck,
|
||||
'link' => site_url($link_lv_eng . "&output=doc")
|
||||
],
|
||||
[
|
||||
'title' => 'ODT',
|
||||
'permissioncheck' => $permissioncheck,
|
||||
'link' => site_url($link_lv_eng . "&output=odt")
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
'title' => '<i class="fas fa-archive" title="' . $this->p->t("stv", "document_archive") . '"></i>',
|
||||
'children' => [
|
||||
[
|
||||
'title' => $title_ff,
|
||||
'action' => [
|
||||
'url' => site_url($archive_url),
|
||||
'post' => $archive_post_ff,
|
||||
'response' => $archive_response
|
||||
]
|
||||
],
|
||||
[
|
||||
'title' => $title_lv,
|
||||
'children' => [
|
||||
[
|
||||
'title' => $title_ger,
|
||||
'action' => [
|
||||
'url' => site_url($archive_url),
|
||||
'post' => $archive_post_lv_ger,
|
||||
'response' => $archive_response
|
||||
]
|
||||
],
|
||||
[
|
||||
'title' => $title_eng,
|
||||
'action' => [
|
||||
'url' => site_url($archive_url),
|
||||
'post' => $archive_post_lv_eng,
|
||||
'response' => $archive_response
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class Favorites extends FHCAPI_Controller
|
||||
if (!$data)
|
||||
$this->terminateWithSuccess(null);
|
||||
else
|
||||
$this->terminateWithSuccess($data['stv_favorites']);
|
||||
$this->terminateWithSuccess($data['stv_favorites'] ?? null);
|
||||
}
|
||||
|
||||
public function set()
|
||||
|
||||
@@ -0,0 +1,685 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about grades
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class Grades extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'list' => 'student/noten:r',
|
||||
'getCertificate' => 'student/noten:r',
|
||||
'getTeacherProposal' => 'student/noten:r',
|
||||
'getRepeaterGrades' => 'student/noten:r',
|
||||
'updateCertificate' => ['admin:w', 'assistenz:w'],
|
||||
'deleteCertificate' => ['admin:w', 'assistenz:w'],
|
||||
'copyTeacherProposalToCertificate' => 'student/noten:w',
|
||||
'copyRepeaterGradeToCertificate' => 'student/noten:w',
|
||||
'getGradeFromPoints' => 'student/noten:r'
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
|
||||
// Load Phrases
|
||||
$this->loadPhrases([
|
||||
'stv',
|
||||
'person',
|
||||
'lehre'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* List all possible grades
|
||||
* (Entries in lehre.tbl_note)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function list()
|
||||
{
|
||||
$this->load->model('codex/Note_model', 'NoteModel');
|
||||
|
||||
$this->NoteModel->addOrder('note');
|
||||
|
||||
$result = $this->NoteModel->load();
|
||||
|
||||
$grades = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($grades);
|
||||
}
|
||||
|
||||
/**
|
||||
* List grades for the certificate of a prestudent.
|
||||
* (Entries in lehre.tbl_zeugnisnote)
|
||||
*
|
||||
* @param string $prestudent_id
|
||||
* @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getCertificate($prestudent_id, $all = null)
|
||||
{
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->StudentModel->loadWhere([
|
||||
'prestudent_id' => $prestudent_id
|
||||
]);
|
||||
|
||||
$student = $this->getDataOrTerminateWithError($result);
|
||||
if (!$student)
|
||||
$this->terminateWithSuccess([]);
|
||||
|
||||
|
||||
$student_uid = current($student)->student_uid;
|
||||
|
||||
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null;
|
||||
|
||||
|
||||
$result = $this->ZeugnisnoteModel->getZeugnisnoten($student_uid, $studiensemester_kurzbz);
|
||||
|
||||
$grades = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($grades);
|
||||
}
|
||||
|
||||
/**
|
||||
* List grades of a prestudent that teachers gave.
|
||||
* (Entries in campus.tbl_lvgesamtnote)
|
||||
*
|
||||
* @param string $prestudent_id
|
||||
* @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getTeacherProposal($prestudent_id, $all = null)
|
||||
{
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
|
||||
|
||||
$result = $this->StudentModel->loadWhere([
|
||||
'prestudent_id' => $prestudent_id
|
||||
]);
|
||||
|
||||
$student = $this->getDataOrTerminateWithError($result);
|
||||
if (!$student)
|
||||
$this->terminateWithSuccess([]);
|
||||
|
||||
|
||||
$student_uid = current($student)->student_uid;
|
||||
|
||||
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null;
|
||||
|
||||
|
||||
$result = $this->LvgesamtnoteModel->getLvGesamtNoten(null, $student_uid, $studiensemester_kurzbz);
|
||||
|
||||
$grades = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($grades);
|
||||
}
|
||||
|
||||
/**
|
||||
* List grades of a prestudent that an assistant marked as already done
|
||||
* or as not allowed because of the repeating of a semester.
|
||||
*
|
||||
* @param string $prestudent_id
|
||||
* @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getRepeaterGrades($prestudent_id, $all = null)
|
||||
{
|
||||
$this->load->library('AntragLib');
|
||||
|
||||
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : false;
|
||||
|
||||
|
||||
$result = $this->antraglib->getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz);
|
||||
|
||||
$grades = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($grades);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update or Insert a grade for the certificate of a prestudent.
|
||||
* (Entry in lehre.tbl_zeugnisnote)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function updateCertificate()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer");
|
||||
$this->form_validation->set_rules("student_uid", $this->p->t('person', 'student'), "required");
|
||||
$this->form_validation->set_rules("studiensemester_kurzbz", $this->p->t('lehre', 'studiensemester'), "required");
|
||||
$this->form_validation->set_rules('note', $this->p->t('lehre', 'note'), 'required|numeric');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
$student_uid = $this->input->post('student_uid');
|
||||
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
|
||||
$note = $this->input->post('note');
|
||||
$authUID = getAuthUID();
|
||||
$now = date('c');
|
||||
|
||||
// NOTE(chris): Stg Permissions
|
||||
if (!$this->hasPermissionUpdate($lehrveranstaltung_id, $student_uid))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin', 'assistenz']]);
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->load([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $student_uid,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
]);
|
||||
$current = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if ($current) {
|
||||
$result = $this->ZeugnisnoteModel->update([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $student_uid,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
], [
|
||||
'note' => $note,
|
||||
'benotungsdatum' => $now,
|
||||
'updateamum' => $now,
|
||||
'updatevon' => $authUID
|
||||
]);
|
||||
} else {
|
||||
$result = $this->ZeugnisnoteModel->insert([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $student_uid,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'note' => $note,
|
||||
'benotungsdatum' => $now,
|
||||
'insertamum' => $now,
|
||||
'insertvon' => $authUID
|
||||
]);
|
||||
}
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a grade from the certificate of a prestudent.
|
||||
* (Entry in lehre.tbl_zeugnisnote)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function deleteCertificate()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer");
|
||||
$this->form_validation->set_rules("student_uid", $this->p->t('person', 'student'), "required");
|
||||
$this->form_validation->set_rules("studiensemester_kurzbz", $this->p->t('lehre', 'studiensemester'), "required");
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
$student_uid = $this->input->post('student_uid');
|
||||
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
|
||||
|
||||
// NOTE(chris): Stg Permissions
|
||||
if (!$this->hasPermissionDelete($lehrveranstaltung_id, $student_uid))
|
||||
return $this->_outputAuthError([$this->router->method => ['admin', 'assistenz']]);
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->delete([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $student_uid,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
]);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a grade that teachers gave to the certificate of a prestudent.
|
||||
* (Entry in campus.tbl_lvgesamtnote to an entry in lehre.tbl_zeugnisnote)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyTeacherProposalToCertificate()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer");
|
||||
$this->form_validation->set_rules("student_uid", $this->p->t('person', 'student'), "required");
|
||||
$this->form_validation->set_rules("studiensemester_kurzbz", $this->p->t('lehre', 'studiensemester'), "required");
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
|
||||
$student_uid = $this->input->post('student_uid');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
$authUID = getAuthUID();
|
||||
|
||||
// NOTE(chris): Stg Permissions
|
||||
if (!$this->hasPermissionCopy($lehrveranstaltung_id, $student_uid))
|
||||
return $this->_outputAuthError([$this->router->method => 'student/noten']);
|
||||
|
||||
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
|
||||
|
||||
$result = $this->LvgesamtnoteModel->load([
|
||||
'student_uid' => $student_uid,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
]);
|
||||
$teacherGrade = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$teacherGrade)
|
||||
show_404();
|
||||
|
||||
$teacherGrade = current($teacherGrade);
|
||||
|
||||
$data = [
|
||||
'note' => $teacherGrade->note,
|
||||
'punkte' => $teacherGrade->punkte,
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $teacherGrade->benotungsdatum,
|
||||
'bemerkung' => $teacherGrade->bemerkung
|
||||
];
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$this->ZeugnisnoteModel->addJoin('lehre.tbl_note n', 'note');
|
||||
$result = $this->ZeugnisnoteModel->load([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $student_uid,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
]);
|
||||
$certificateGrade = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if ($certificateGrade) {
|
||||
$certificateGrade = current($certificateGrade);
|
||||
|
||||
if (!$certificateGrade->lkt_ueberschreibbar)
|
||||
$this->terminateWithError($this->p->t("stv", "grades_error_overwrite"));
|
||||
|
||||
// NOTE(chris): update
|
||||
$data['updateamum'] = $data['uebernahmedatum'];
|
||||
$data['updatevon'] = $authUID;
|
||||
|
||||
$this->ZeugnisnoteModel->update([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $student_uid,
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
], $data);
|
||||
} else {
|
||||
// NOTE(chris): insert
|
||||
$data['insertamum'] = $data['uebernahmedatum'];
|
||||
$data['insertvon'] = $authUID;
|
||||
$data['lehrveranstaltung_id'] = $lehrveranstaltung_id;
|
||||
$data['student_uid'] = $student_uid;
|
||||
$data['studiensemester_kurzbz'] = $studiensemester_kurzbz;
|
||||
|
||||
$this->ZeugnisnoteModel->insert($data);
|
||||
|
||||
if (defined('FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN')
|
||||
&& FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN) {
|
||||
$result = $this->addTestsForGrade(
|
||||
$studiensemester_kurzbz,
|
||||
$student_uid,
|
||||
$lehrveranstaltung_id,
|
||||
$teacherGrade->note,
|
||||
$teacherGrade->punkte
|
||||
);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a grade that was marked by an assistant as already done or not
|
||||
* allowed because of the repeating of a semester to the certificate of a
|
||||
* prestudent.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function copyRepeaterGradeToCertificate()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules("studierendenantrag_lehrveranstaltung_id", "studierendenantrag_lehrveranstaltung_id", "required|integer");
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$id = $this->input->post('studierendenantrag_lehrveranstaltung_id');
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->model('education/Studierendenantraglehrveranstaltung_model', 'StudierendenantraglehrveranstaltungModel');
|
||||
|
||||
$this->StudierendenantraglehrveranstaltungModel->addSelect("tbl_studierendenantrag_lehrveranstaltung.*");
|
||||
$this->StudierendenantraglehrveranstaltungModel->addSelect("student_uid");
|
||||
$this->StudierendenantraglehrveranstaltungModel->addJoin("campus.tbl_studierendenantrag", "studierendenantrag_id");
|
||||
$this->StudierendenantraglehrveranstaltungModel->addJoin("public.tbl_student", "prestudent_id", "LEFT");
|
||||
|
||||
$result = $this->StudierendenantraglehrveranstaltungModel->load($id);
|
||||
$repeaterGrade = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$repeaterGrade)
|
||||
show_404();
|
||||
|
||||
$repeaterGrade = current($repeaterGrade);
|
||||
|
||||
// NOTE(chris): Stg Permissions
|
||||
if (!$this->hasPermissionCopy($repeaterGrade->lehrveranstaltung_id, $repeaterGrade->student_uid))
|
||||
return $this->_outputAuthError([$this->router->method => 'student/noten']);
|
||||
|
||||
$data = [
|
||||
'note' => $repeaterGrade->note,
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $repeaterGrade->insertamum,
|
||||
'bemerkung' => $repeaterGrade->anmerkung
|
||||
];
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->load([
|
||||
$repeaterGrade->studiensemester_kurzbz,
|
||||
$repeaterGrade->student_uid,
|
||||
$repeaterGrade->lehrveranstaltung_id
|
||||
]);
|
||||
$certificateGrade = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if ($certificateGrade) {
|
||||
// NOTE(chris): update
|
||||
$data['updateamum'] = $data['uebernahmedatum'];
|
||||
$data['updatevon'] = $authUID;
|
||||
|
||||
$this->ZeugnisnoteModel->update([
|
||||
$repeaterGrade->studiensemester_kurzbz,
|
||||
$repeaterGrade->student_uid,
|
||||
$repeaterGrade->lehrveranstaltung_id
|
||||
], $data);
|
||||
} else {
|
||||
// NOTE(chris): insert
|
||||
$data['insertamum'] = $data['uebernahmedatum'];
|
||||
$data['insertvon'] = $authUID;
|
||||
$data['lehrveranstaltung_id'] = $repeaterGrade->lehrveranstaltung_id;
|
||||
$data['student_uid'] = $repeaterGrade->student_uid;
|
||||
$data['studiensemester_kurzbz'] = $repeaterGrade->studiensemester_kurzbz;
|
||||
|
||||
$this->ZeugnisnoteModel->insert($data);
|
||||
}
|
||||
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the grade from the points using the gradingkey
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getGradeFromPoints()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer");
|
||||
$this->form_validation->set_rules("points", $this->p->t("stv", "grades_points"), "required|numeric");
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$this->load->model('education/Notenschluesselaufteilung_model', 'NotenschluesselaufteilungModel');
|
||||
|
||||
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||
|
||||
$result = $this->NotenschluesselaufteilungModel->getNote(
|
||||
$this->input->post('points'),
|
||||
$this->input->post('lehrveranstaltung_id'),
|
||||
$studiensemester_kurzbz
|
||||
);
|
||||
|
||||
$note = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($note);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function that adds tests for a student
|
||||
* (Entries in lehre.tbl_pruefung)
|
||||
*
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param string $student_uid
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param integer $note
|
||||
* @param numeric $punkte
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
protected function addTestsForGrade($studiensemester_kurzbz, $student_uid, $lehrveranstaltung_id, $note, $punkte)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
// Get Lehreinheit
|
||||
$result = $this->LehrveranstaltungModel->getLeByStudent($student_uid, $studiensemester_kurzbz, $lehrveranstaltung_id);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!hasData($result))
|
||||
return error($this->p->t("stv", "grades_error_lehreinheit_id"));
|
||||
$le = current(getData($result));
|
||||
|
||||
// Prepare
|
||||
$this->load->model('education/LePruefung_model', 'LePruefungModel');
|
||||
$data = [
|
||||
"student_uid" => $student_uid,
|
||||
"lehreinheit_id" => $le->lehreinheit_id,
|
||||
"datum" => date('Y-m-d'),
|
||||
"pruefungstyp_kurzbz" => "Termin1",
|
||||
"note" => $note
|
||||
];
|
||||
|
||||
if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
|
||||
$data["punkte"] = $punkte;
|
||||
|
||||
// Get Anwesenheit
|
||||
$this->load->model('education/Anwesenheit_model', 'AnwesenheitModel');
|
||||
$result = $this->AnwesenheitModel->loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid, $lehrveranstaltung_id);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
$anwesenheit = getData($result);
|
||||
|
||||
if ($anwesenheit && (float)current($anwesenheit)->prozent < FAS_ANWESENHEIT_ROT) {
|
||||
// Get Anwesenheitsbefreiung
|
||||
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
$result = $this->BenutzerfunktionModel->getBenutzerFunktionByUidInStdsem($student_uid, $studiensemester_kurzbz, 'awbefreit');
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$anwesenheitsbefreit = hasData($result);
|
||||
|
||||
// Wenn nicht Anwesenheitsbefreit und Anwesenheit unter einem bestimmten Prozentsatz fällt dann wird ein Pruefungsantritt abgezogen
|
||||
if (!$anwesenheitsbefreit) {
|
||||
$data2 = $data;
|
||||
$data2["note"] = 7;
|
||||
if (isset($data2["punkte"]))
|
||||
unset($data2["punkte"]);
|
||||
|
||||
$result = $this->LePruefungModel->insert($data2);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$data["pruefungstyp_kurzbz"] = "Termin2";
|
||||
}
|
||||
}
|
||||
|
||||
return $this->LePruefungModel->insert($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check permissions for updateCertificate()
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $student_uid
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
protected function hasPermissionUpdate($lehrveranstaltung_id, $student_uid)
|
||||
{
|
||||
if ($lehrveranstaltung_id === null || $student_uid === null)
|
||||
return true;
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
if (isError($result) || !hasData($result))
|
||||
return false;
|
||||
|
||||
$student = current(getData($result));
|
||||
|
||||
if ($this->permissionlib->isBerechtigt('admin', 'suid', $student->studiengang_kz))
|
||||
return true;
|
||||
if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $student->studiengang_kz))
|
||||
return true;
|
||||
|
||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
|
||||
$result = $this->StudienplanModel->getAllOesForLv($lehrveranstaltung_id);
|
||||
if (isError($result))
|
||||
return false;
|
||||
|
||||
$oes = getData($result) ?: [];
|
||||
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->getStg($lehrveranstaltung_id);
|
||||
if (isError($result))
|
||||
return false;
|
||||
|
||||
if (hasData($result))
|
||||
$oes[] = current(getData($result));
|
||||
|
||||
foreach ($oes as $oe) {
|
||||
if ($this->permissionlib->isBerechtigt('admin', 'suid', $oe->oe_kurzbz))
|
||||
return true;
|
||||
if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $oe->oe_kurzbz))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check permissions for deleteCertificate()
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $student_uid
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
protected function hasPermissionDelete($lehrveranstaltung_id, $student_uid)
|
||||
{
|
||||
if ($lehrveranstaltung_id === null || $student_uid === null)
|
||||
return true;
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
if (isError($result) || !hasData($result))
|
||||
return false;
|
||||
|
||||
$student = current(getData($result));
|
||||
|
||||
if ($this->permissionlib->isBerechtigt('admin', 'suid', $student->studiengang_kz))
|
||||
return true;
|
||||
if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $student->studiengang_kz))
|
||||
return true;
|
||||
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->load($lehrveranstaltung_id);
|
||||
if (isError($result) || !hasData($result))
|
||||
return false;
|
||||
|
||||
$oe = current(getData($result));
|
||||
|
||||
if ($this->permissionlib->isBerechtigt('admin', 'suid', $oe->oe_kurzbz))
|
||||
return true;
|
||||
if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $oe->oe_kurzbz))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check permissions for
|
||||
* copyTeacherProposalToCertificate() and copyRepeaterGradeToCertificate()
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $student_uid
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
protected function hasPermissionCopy($lehrveranstaltung_id, $student_uid)
|
||||
{
|
||||
if ($lehrveranstaltung_id === null || $student_uid === null)
|
||||
return true;
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
if (isError($result) || !hasData($result))
|
||||
return false;
|
||||
|
||||
$student = current(getData($result));
|
||||
|
||||
if ($this->permissionlib->isBerechtigt('student/noten', 'suid', $student->studiengang_kz))
|
||||
return true;
|
||||
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->load($lehrveranstaltung_id);
|
||||
if (isError($result) || !hasData($result))
|
||||
return false;
|
||||
|
||||
$oe = current(getData($result));
|
||||
|
||||
if ($this->permissionlib->isBerechtigt('student/noten', 'suid', $oe->oe_kurzbz))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -97,7 +97,14 @@ class Kontakt extends FHCAPI_Controller
|
||||
|| $this->router->method == 'deleteContact'
|
||||
|| $this->router->method == 'deleteBankverbindung'
|
||||
) {
|
||||
$id = current(array_slice($this->uri->rsegments, 2));
|
||||
if($this->input->post('address_id'))
|
||||
$id = $this->input->post('address_id');
|
||||
if($this->input->post('adresse_id'))
|
||||
$id = $this->input->post('adresse_id');
|
||||
if($this->input->post('bankverbindung_id'))
|
||||
$id = $this->input->post('bankverbindung_id');
|
||||
if($this->input->post('kontakt_id'))
|
||||
$id = $this->input->post('kontakt_id');
|
||||
|
||||
$model = 'person/Adresse_model';
|
||||
if ($this->router->method == 'loadContact'
|
||||
@@ -125,7 +132,12 @@ class Kontakt extends FHCAPI_Controller
|
||||
}
|
||||
public function getAdressen($person_id)
|
||||
{
|
||||
$this->AdresseModel->addSelect('public.tbl_adresse.*');
|
||||
$this->AdresseModel->addSelect("public.tbl_adresse.*,
|
||||
(CASE
|
||||
WHEN public.tbl_adresse.updateamum >= public.tbl_adresse.insertamum
|
||||
THEN public.tbl_adresse.updateamum
|
||||
ELSE public.tbl_adresse.insertamum
|
||||
END) AS lastUpdate");
|
||||
$this->AdresseModel->addSelect('t.*');
|
||||
$this->AdresseModel->addSelect('f.firma_id');
|
||||
$this->AdresseModel->addSelect('f.name as firmenname');
|
||||
@@ -143,15 +155,26 @@ class Kontakt extends FHCAPI_Controller
|
||||
|
||||
public function addNewAddress($person_id)
|
||||
{
|
||||
$this->form_validation->set_rules('plz', 'PLZ', 'required|numeric', [
|
||||
$this->form_validation->set_data(['address.plz' => $_POST['plz']]);
|
||||
|
||||
$this->form_validation->set_rules('address.plz', 'PLZ', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'PLZ']),
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'PLZ'])
|
||||
]);
|
||||
|
||||
if(isset($_POST['gemeinde']) && isset($_POST['ort']))
|
||||
$this->form_validation->set_rules('plz', 'Postleitzahl', 'callback_validateLocationCombination', [
|
||||
'validateLocationCombination' => $this->p->t('ui', 'error_location_combination')
|
||||
]);
|
||||
if(isset($_POST['nation']) && $_POST['nation'] == 'A')
|
||||
{
|
||||
$this->form_validation->set_rules('address.plz', 'PLZ', 'required|numeric', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'PLZ']),
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'PLZ'])
|
||||
]);
|
||||
}
|
||||
|
||||
if(isset($_POST['gemeinde']) && isset($_POST['ort']) && isset($_POST['nation']) && $_POST['nation'] == 'A')
|
||||
{
|
||||
$this->form_validation->set_rules('address.plz', 'Postleitzahl', 'callback_validateLocationCombination', [
|
||||
'validateLocationCombination' => $this->p->t('ui', 'error_location_combination')
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
@@ -196,25 +219,37 @@ class Kontakt extends FHCAPI_Controller
|
||||
|
||||
]
|
||||
);
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(true);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function updateAddress($address_id)
|
||||
public function updateAddress()
|
||||
{
|
||||
$address_id = $this->input->post('adresse_id');
|
||||
|
||||
$this->form_validation->set_data(['address.plz' => $_POST['plz']]);
|
||||
|
||||
$uid = getAuthUID();
|
||||
$this->form_validation->set_rules('plz', 'PLZ', 'required|numeric', [
|
||||
|
||||
$this->form_validation->set_rules('address.plz', 'PLZ', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'PLZ']),
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'PLZ'])
|
||||
]);
|
||||
|
||||
if(isset($_POST['gemeinde']) && isset($_POST['ort']))
|
||||
$this->form_validation->set_rules('plz', 'Postleitzahl', 'callback_validateLocationCombination', [
|
||||
if(isset($_POST['nation']) && $_POST['nation'] == 'A')
|
||||
{
|
||||
$this->form_validation->set_rules('address.plz', 'PLZ', 'required|numeric', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'PLZ']),
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'PLZ'])
|
||||
]);
|
||||
}
|
||||
|
||||
if(isset($_POST['gemeinde']) && isset($_POST['ort']) && isset($_POST['nation']) && $_POST['nation'] == 'A')
|
||||
{
|
||||
$this->form_validation->set_rules('address.plz', 'Postleitzahl', 'callback_validateLocationCombination', [
|
||||
'validateLocationCombination' => $this->p->t('ui', 'error_location_combination')
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
@@ -272,15 +307,15 @@ class Kontakt extends FHCAPI_Controller
|
||||
]
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(true);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function loadAddress($adresse_id)
|
||||
public function loadAddress()
|
||||
{
|
||||
$adresse_id = $this->input->post('address_id');
|
||||
|
||||
$this->load->model('person/Adresse_model', 'AdresseModel');
|
||||
|
||||
$this->AdresseModel->addSelect('public.tbl_adresse.*');
|
||||
@@ -306,8 +341,10 @@ class Kontakt extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess(current(getData($result)) ? : null);
|
||||
}
|
||||
|
||||
public function deleteAddress($adresse_id)
|
||||
public function deleteAddress()
|
||||
{
|
||||
$adresse_id = $this->input->post('address_id');
|
||||
|
||||
$this->load->model('person/Adresse_model', 'AdresseModel');
|
||||
$result = $this->AdresseModel->load([
|
||||
'adresse_id'=> $adresse_id,
|
||||
@@ -366,10 +403,10 @@ class Kontakt extends FHCAPI_Controller
|
||||
$this->load->model('organisation/standort_model', 'StandortModel');
|
||||
|
||||
$result = $this->StandortModel->searchStandorte($searchString);
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess($result ?: []);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getStandorteByFirma($firma_id)
|
||||
@@ -386,11 +423,11 @@ class Kontakt extends FHCAPI_Controller
|
||||
public function getKontakte($person_id)
|
||||
{
|
||||
$this->KontaktModel->addSelect("public.tbl_kontakt.*,
|
||||
TO_CHAR (CASE
|
||||
WHEN public.tbl_kontakt.updateamum >= public.tbl_kontakt.insertamum
|
||||
THEN public.tbl_kontakt.updateamum
|
||||
ELSE public.tbl_kontakt.insertamum
|
||||
END::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS lastUpdate, st.bezeichnung, f.name");
|
||||
(CASE
|
||||
WHEN public.tbl_kontakt.updateamum >= public.tbl_kontakt.insertamum
|
||||
THEN public.tbl_kontakt.updateamum
|
||||
ELSE public.tbl_kontakt.insertamum
|
||||
END) AS lastUpdate, st.bezeichnung, f.name");
|
||||
$this->StandortModel->addJoin('public.tbl_standort st', 'ON (public.tbl_kontakt.standort_id = st.standort_id)', 'LEFT');
|
||||
$this->FirmaModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = st.firma_id)', 'LEFT');
|
||||
$result = $this->KontaktModel->loadWhere(
|
||||
@@ -418,8 +455,9 @@ class Kontakt extends FHCAPI_Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function loadContact($kontakt_id)
|
||||
public function loadContact()
|
||||
{
|
||||
$kontakt_id = $this->input->post('kontakt_id');
|
||||
$this->load->model('person/Kontakt_model', 'KontaktModel');
|
||||
|
||||
$this->KontaktModel->addSelect('*, public.tbl_kontakt.*');
|
||||
@@ -439,7 +477,6 @@ class Kontakt extends FHCAPI_Controller
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Kontakt_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
// $this->outputJsonSuccess(current(getData($result)));
|
||||
$this->terminateWithSuccess(current(getData($result)));
|
||||
}
|
||||
|
||||
@@ -492,11 +529,12 @@ class Kontakt extends FHCAPI_Controller
|
||||
{
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(true);
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
public function updateContact($kontakt_id)
|
||||
public function updateContact()
|
||||
{
|
||||
$kontakt_id = $this->input->post('kontakt_id');
|
||||
$this->load->model('person/Kontakt_model', 'KontaktModel');
|
||||
|
||||
if(!$kontakt_id)
|
||||
@@ -523,13 +561,6 @@ class Kontakt extends FHCAPI_Controller
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
/* if(isset($_POST['standort']))
|
||||
{
|
||||
$standort_id = $_POST['standort']['standort_id'];
|
||||
}
|
||||
else
|
||||
$standort_id = null;*/
|
||||
|
||||
$uid = getAuthUID();
|
||||
$kontakttyp = $this->input->post('kontakttyp');
|
||||
$anmerkung = $this->input->post('anmerkung');
|
||||
@@ -538,8 +569,6 @@ class Kontakt extends FHCAPI_Controller
|
||||
$person_id = $this->input->post('person_id');
|
||||
$standort_id = $this->input->post('standort_id');
|
||||
|
||||
//return $this->terminateWithError("in update " . $standort_id, self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$result = $this->KontaktModel->update(
|
||||
[
|
||||
'kontakt_id' => $kontakt_id
|
||||
@@ -557,15 +586,14 @@ class Kontakt extends FHCAPI_Controller
|
||||
]
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(true);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function deleteContact($kontakt_id)
|
||||
public function deleteContact()
|
||||
{
|
||||
$kontakt_id = $this->input->post('kontakt_id');
|
||||
$this->load->model('person/Kontakt_model', 'KontaktModel');
|
||||
|
||||
$result = $this->KontaktModel->delete(
|
||||
@@ -643,15 +671,15 @@ class Kontakt extends FHCAPI_Controller
|
||||
'orgform_kurzbz' => $orgform_kurzbz
|
||||
]
|
||||
);
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(true);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function loadBankverbindung($bankverbindung_id)
|
||||
public function loadBankverbindung()
|
||||
{
|
||||
$bankverbindung_id = $this->input->post('bankverbindung_id');
|
||||
|
||||
$this->load->model('person/Bankverbindung_model', 'BankverbindungModel');
|
||||
|
||||
$this->BankverbindungModel->addSelect('*');
|
||||
@@ -719,15 +747,15 @@ class Kontakt extends FHCAPI_Controller
|
||||
]
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(true);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function deleteBankverbindung($bankverbindung_id)
|
||||
public function deleteBankverbindung()
|
||||
{
|
||||
$bankverbindung_id = $this->input->post('bankverbindung_id');
|
||||
|
||||
$this->load->model('person/Bankverbindung_model', 'BankverbindungModel');
|
||||
|
||||
$result = $this->BankverbindungModel->delete(
|
||||
@@ -740,7 +768,7 @@ class Kontakt extends FHCAPI_Controller
|
||||
}
|
||||
if (!hasData($result))
|
||||
{
|
||||
$this->outputJson($result);
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Bankverbindung_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->terminateWithSuccess(current(getData($result)) ? : null);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,528 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \DateTime as DateTime;
|
||||
|
||||
class Mobility extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getMobilitaeten' => ['admin:r', 'assistenz:r'],
|
||||
'loadMobility' => ['admin:r', 'assistenz:r'],
|
||||
'insertMobility' => ['admin:rw', 'assistenz:rw'],
|
||||
'updateMobility' => ['admin:rw', 'assistenz:rw'],
|
||||
'deleteMobility' => ['admin:rw', 'assistenz:rw'],
|
||||
'getProgramsMobility' => ['admin:r', 'assistenz:r'],
|
||||
'getLVList' => ['admin:r', 'assistenz:r'],
|
||||
'getAllLehreinheiten' => ['admin:r', 'assistenz:r'],
|
||||
'getLvsandLesByStudent' => ['admin:r', 'assistenz:r'],
|
||||
'getPurposes' => ['admin:r', 'assistenz:r'],
|
||||
'getSupports' => ['admin:r', 'assistenz:r'],
|
||||
'getListPurposes' => ['admin:r', 'assistenz:r'],
|
||||
'getListSupports' => ['admin:r', 'assistenz:r'],
|
||||
'deleteMobilityPurpose' => ['admin:r', 'assistenz:r'],
|
||||
'addMobilityPurpose' => ['admin:r', 'assistenz:r'],
|
||||
'deleteMobilitySupport' => ['admin:r', 'assistenz:r'],
|
||||
'addMobilitySupport' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
$this->load->library('form_validation');
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui',
|
||||
'mobility'
|
||||
]);
|
||||
|
||||
// Load models
|
||||
$this->load->model('codex/Bisio_model', 'BisioModel');
|
||||
}
|
||||
|
||||
public function getMobilitaeten($student_uid)
|
||||
{
|
||||
$this->BisioModel->addSelect("*");
|
||||
$this->BisioModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_bisio.mobilitaetsprogramm_code)', 'LEFT');
|
||||
$this->BisioModel->addJoin('lehre.tbl_lehreinheit le', 'ON (le.lehreinheit_id = bis.tbl_bisio.lehreinheit_id)','LEFT');
|
||||
$this->BisioModel->addOrder('von', 'DESC');
|
||||
$this->BisioModel->addOrder('bis', 'DESC');
|
||||
$this->BisioModel->addOrder('bisio_id', 'DESC');
|
||||
$result = $this->BisioModel->loadWhere(
|
||||
array('student_uid' => $student_uid)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getProgramsMobility()
|
||||
{
|
||||
$this->load->model('codex/Mobilitaetsprogramm_model', 'MobilitaetsprogrammModel');
|
||||
|
||||
$result = $this->MobilitaetsprogrammModel->load();
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function insertMobility()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$student_uid = $this->input->post('uid');
|
||||
|
||||
if(!$student_uid)
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$formData = $this->input->post('formData');
|
||||
|
||||
$_POST['von'] = (isset($formData['von']) && !empty($formData['von'])) ? $formData['von'] : null;
|
||||
$_POST['bis'] = (isset($formData['bis']) && !empty($formData['bis'])) ? $formData['bis'] : null;
|
||||
$_POST['nation_code'] = (isset($formData['nation_code']) && !empty($formData['nation_code'])) ? $formData['nation_code'] : 'A';
|
||||
$_POST['mobilitaetsprogramm_code'] = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) ? $formData['mobilitaetsprogramm_code'] : null;
|
||||
$_POST['herkunftsland_code'] = (isset($formData['herkunftsland_code']) && !empty($formData['herkunftsland_code'])) ? $formData['herkunftsland_code'] : 'A';
|
||||
$_POST['ects_erworben'] = (isset($formData['ects_erworben']) && !empty($formData['ects_erworben'])) ? $formData['ects_erworben'] : null;
|
||||
$_POST['ects_angerechnet'] = (isset($formData['ects_angerechnet']) && !empty($formData['ects_angerechnet'])) ? $formData['ects_angerechnet'] : null;
|
||||
$_POST['lehreinheit_id'] = (isset($formData['lehreinheit_id']) && !empty($formData['lehreinheit_id'])) ? $formData['lehreinheit_id'] : null;
|
||||
|
||||
$this->form_validation->set_rules('nation_code', 'Nation_code', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Nation_code'])
|
||||
]);
|
||||
$this->form_validation->set_rules('herkunftsland_code', 'Herkunftsland_code', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Herkunftsland_code'])
|
||||
]);
|
||||
$this->form_validation->set_rules('mobilitaetsprogramm_code', 'Mobilitaetsprogramm_code', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Mobilitaetsprogramm_code'])
|
||||
]);
|
||||
$this->form_validation->set_rules('von', 'VonDatum', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VonDatum'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('bis', 'VBisDatum', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VBisDatum'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('ects_erworben', 'Ects_erworben', 'numeric', [
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ects_erworben'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('ects_angerechnet', 'Ects_angerechnet', 'numeric', [
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ects_angerechnet'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'numeric', [
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit'])
|
||||
]);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$ort = (isset($formData['ort']) && !empty($formData['ort'])) ? $formData['ort'] : null;
|
||||
$universitaet = (isset($formData['universitaet']) && !empty($formData['universitaet'])) ? $formData['universitaet'] : null;
|
||||
$localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPurposes'])) ? $formData['localPurposes'] : null;
|
||||
$localSupports = (isset($formData['localSupports']) && !empty($formData['localSupports'])) ? $formData['localSupports'] : null;
|
||||
|
||||
$result = $this->BisioModel->insert([
|
||||
'student_uid' => $student_uid,
|
||||
'von' => $_POST['von'],
|
||||
'bis' => $_POST['bis'],
|
||||
'mobilitaetsprogramm_code' => $_POST['mobilitaetsprogramm_code'],
|
||||
'nation_code' => $_POST['nation_code'],
|
||||
'herkunftsland_code' => $_POST['herkunftsland_code'],
|
||||
'lehreinheit_id' => $_POST['lehreinheit_id'],
|
||||
'ort' => $ort,
|
||||
'universitaet' => $universitaet,
|
||||
'ects_erworben' => $_POST['ects_erworben'] ,
|
||||
'ects_angerechnet' => $_POST['ects_angerechnet'],
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
]);
|
||||
|
||||
$bisio_id = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
//check if localData (purposes)
|
||||
if(count($localPurposes) > 0){
|
||||
foreach ($localPurposes as $zweck){
|
||||
$zweck = (int)$zweck;
|
||||
$this->addMobilityPurpose($bisio_id, $zweck);
|
||||
}
|
||||
}
|
||||
|
||||
//check if localData (supports)
|
||||
if(count($localSupports) > 0){
|
||||
foreach ($localSupports as $support){
|
||||
$this->addMobilitySupport($bisio_id, $support);
|
||||
}
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($bisio_id);
|
||||
}
|
||||
|
||||
public function loadMobility($bisio_id)
|
||||
{
|
||||
$this->BisioModel->addSelect("*");
|
||||
$this->BisioModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_bisio.mobilitaetsprogramm_code)', 'LEFT');
|
||||
$this->BisioModel->addJoin('lehre.tbl_lehreinheit le', 'ON (le.lehreinheit_id = bis.tbl_bisio.lehreinheit_id)','LEFT');
|
||||
$result = $this->BisioModel->loadWhere(
|
||||
array('bisio_id' => $bisio_id)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function updateMobility()
|
||||
{
|
||||
|
||||
$this->load->library('form_validation');
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$student_uid = $this->input->post('uid');
|
||||
|
||||
if(!$student_uid)
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$formData = $this->input->post('formData');
|
||||
|
||||
$_POST['von'] = (isset($formData['von']) && !empty($formData['von'])) ? $formData['von'] : null;
|
||||
$_POST['bis'] = (isset($formData['bis']) && !empty($formData['bis'])) ? $formData['bis'] : null;
|
||||
$_POST['nation_code'] = (isset($formData['nation_code']) && !empty($formData['nation_code'])) ? $formData['nation_code'] : 'A';
|
||||
$_POST['mobilitaetsprogramm_code'] = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) ? $formData['mobilitaetsprogramm_code'] : null;
|
||||
$_POST['herkunftsland_code'] = (isset($formData['herkunftsland_code']) && !empty($formData['herkunftsland_code'])) ? $formData['herkunftsland_code'] : 'A';
|
||||
$_POST['ects_erworben'] = (isset($formData['ects_erworben']) && !empty($formData['ects_erworben'])) ? $formData['ects_erworben'] : null;
|
||||
$_POST['ects_angerechnet'] = (isset($formData['ects_angerechnet']) && !empty($formData['ects_angerechnet'])) ? $formData['ects_angerechnet'] : null;
|
||||
$_POST['lehreinheit_id'] = (isset($formData['lehreinheit_id']) && !empty($formData['lehreinheit_id'])) ? $formData['lehreinheit_id'] : null;
|
||||
|
||||
$this->form_validation->set_rules('nation_code', 'Nation_code', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Nation_code'])
|
||||
]);
|
||||
$this->form_validation->set_rules('herkunftsland_code', 'Herkunftsland_code', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Herkunftsland_code'])
|
||||
]);
|
||||
$this->form_validation->set_rules('mobilitaetsprogramm_code', 'Mobilitaetsprogramm_code', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Mobilitaetsprogramm_code'])
|
||||
]);
|
||||
$this->form_validation->set_rules('von', 'VonDatum', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VonDatum'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('bis', 'VBisDatum', 'is_valid_date', [
|
||||
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VBisDatum'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('ects_erworben', 'Ects_erworben', 'numeric', [
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ects_erworben'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('ects_angerechnet', 'Ects_angerechnet', 'numeric', [
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ects_angerechnet'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'numeric', [
|
||||
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit'])
|
||||
]);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->BisioModel->update(
|
||||
[
|
||||
'bisio_id' => $formData['bisio_id']
|
||||
],
|
||||
[
|
||||
'student_uid' => $student_uid,
|
||||
'von' => $_POST['von'],
|
||||
'bis' => $_POST['bis'],
|
||||
'mobilitaetsprogramm_code' => $_POST['mobilitaetsprogramm_code'],
|
||||
'nation_code' => $_POST['nation_code'],
|
||||
'herkunftsland_code' => $_POST['herkunftsland_code'],
|
||||
'lehreinheit_id' => $_POST['lehreinheit_id'],
|
||||
'ort' => $formData['ort'],
|
||||
'universitaet' => $formData['universitaet'],
|
||||
'ects_erworben' => $_POST['ects_erworben'] ,
|
||||
'ects_angerechnet' => $_POST['ects_angerechnet'],
|
||||
'updateamum' => date('c'),
|
||||
'updatevon' => $authUID,
|
||||
]
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function deleteMobility($bisio_id)
|
||||
{
|
||||
//check if extension table exists
|
||||
$result = $this->BisioModel->tableExists('extension', 'tbl_mo_bisioidzuordnung');
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
//if table exists check if existing entry
|
||||
if(!empty($data))
|
||||
{
|
||||
$this->BisioModel->addSelect("count(*)");
|
||||
$this->BisioModel->addJoin('extension.tbl_mo_bisioidzuordnung mo', 'ON (mo.bisio_id = bis.tbl_bisio.bisio_id)', 'LEFT');
|
||||
|
||||
$resultCheckMo = $this->BisioModel->loadWhere(
|
||||
array('mo.bisio_id' => $bisio_id)
|
||||
);
|
||||
|
||||
$resultCheckMo = $this->getDataOrTerminateWithError($resultCheckMo);
|
||||
$count = current($resultCheckMo)->count;
|
||||
|
||||
$existsInExtension = $count > 0 ? true : false;
|
||||
|
||||
if($existsInExtension)
|
||||
$this->terminateWithError($this->p->t('mobility', 'error_existingEntryInExtension'), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$result = $this->BisioModel->delete(
|
||||
array('bisio_id' => $bisio_id)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getLVList($studiengang_kz)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->getLvsByStudiengangkz($studiengang_kz);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getAllLehreinheiten()
|
||||
{
|
||||
$lv_id = $this->input->post('lv_id');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
$result = $this->LehreinheitModel->getLesFromLvIds($lv_id, $studiensemester_kurzbz);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getLvsandLesByStudent($student_uid)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$lv_ids = array();
|
||||
$allData = array();
|
||||
|
||||
foreach ($data as $lehrveranstaltung) {
|
||||
$lv_ids[] = $lehrveranstaltung->lehrveranstaltung_id;
|
||||
}
|
||||
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
foreach ($lv_ids as $id)
|
||||
{
|
||||
$result = $this->LehreinheitModel->getLesFromLvIds($id);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (is_array($data)) {
|
||||
$allData = array_merge($allData, $data);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->terminateWithSuccess($allData);
|
||||
}
|
||||
|
||||
public function getPurposes($bisio_id)
|
||||
{
|
||||
$bisio_id = (int)$bisio_id;
|
||||
|
||||
$this->load->model('codex/Bisiozweck_model', 'BisiozweckModel');
|
||||
|
||||
$this->BisiozweckModel->addSelect("*");
|
||||
$this->BisiozweckModel->addJoin('bis.tbl_zweck zw', 'ON (zw.zweck_code = bis.tbl_bisio_zweck.zweck_code)');
|
||||
|
||||
$result = $this->BisiozweckModel->loadWhere(
|
||||
array('bisio_id' => $bisio_id)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getSupports($bisio_id)
|
||||
{
|
||||
$bisio_id = (int)$bisio_id;
|
||||
|
||||
$this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel');
|
||||
|
||||
$this->BisioaufenthaltfoerderungModel->addSelect("*");
|
||||
$this->BisioaufenthaltfoerderungModel->addJoin('bis.tbl_aufenthaltfoerderung af', 'ON (af.aufenthaltfoerderung_code = bis.tbl_bisio_aufenthaltfoerderung.aufenthaltfoerderung_code)');
|
||||
|
||||
$result = $this->BisioaufenthaltfoerderungModel->loadWhere(
|
||||
array('bisio_id' => $bisio_id)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getListPurposes()
|
||||
{
|
||||
$this->load->model('codex/Zweck_model', 'ZweckModel');
|
||||
|
||||
$result = $this->ZweckModel->load();
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getListSupports()
|
||||
{
|
||||
$this->load->model('codex/Aufenthaltfoerderung_model', 'AufenthaltfoerderungModel');
|
||||
|
||||
$result = $this->AufenthaltfoerderungModel->load();
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function addMobilityPurpose($bisio_id, $local_purpose = null)
|
||||
{
|
||||
$zweck_code = $this->input->post('zweck_code');
|
||||
|
||||
if($local_purpose){
|
||||
$zweck_code = $local_purpose;
|
||||
}
|
||||
|
||||
$this->load->model('codex/Bisiozweck_model', 'BisiozweckModel');
|
||||
if(!$local_purpose)
|
||||
{
|
||||
$check = $this->BisiozweckModel->loadWhere(
|
||||
[
|
||||
'bisio_id' => $bisio_id,
|
||||
'zweck_code' => $zweck_code,
|
||||
]
|
||||
);
|
||||
if (hasData($check))
|
||||
{
|
||||
$this->terminateWithError($this->p->t('ui', 'error_entryExisting'), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->BisiozweckModel->insert(
|
||||
array(
|
||||
'bisio_id' => $bisio_id,
|
||||
'zweck_code' => $zweck_code
|
||||
)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if($local_purpose)
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
|
||||
return $this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function deleteMobilityPurpose($bisio_id)
|
||||
{
|
||||
$zweck_code = $this->input->post('zweck_code');
|
||||
|
||||
$this->load->model('codex/Bisiozweck_model', 'BisiozweckModel');
|
||||
|
||||
|
||||
$result = $this->BisiozweckModel->delete(
|
||||
array(
|
||||
'bisio_id' => $bisio_id,
|
||||
'zweck_code' => $zweck_code
|
||||
)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function addMobilitySupport($bisio_id, $local_support = null)
|
||||
{
|
||||
$aufenthaltfoerderung_code = $this->input->post('aufenthaltfoerderung_code');
|
||||
|
||||
if($local_support){
|
||||
$aufenthaltfoerderung_code = $local_support;
|
||||
}
|
||||
|
||||
$this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel');
|
||||
|
||||
if(!$local_support)
|
||||
{
|
||||
$check = $this->BisioaufenthaltfoerderungModel->loadWhere(
|
||||
[
|
||||
'bisio_id' => $bisio_id,
|
||||
'aufenthaltfoerderung_code' => $aufenthaltfoerderung_code,
|
||||
]
|
||||
);
|
||||
if (hasData($check))
|
||||
{
|
||||
$this->terminateWithError($this->p->t('ui', 'error_entryExisting'), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->BisioaufenthaltfoerderungModel->insert(
|
||||
array(
|
||||
'bisio_id' => $bisio_id,
|
||||
'aufenthaltfoerderung_code' => $aufenthaltfoerderung_code
|
||||
)
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if($local_support)
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
|
||||
return $this->terminateWithSuccess(current($data));
|
||||
}
|
||||
|
||||
public function deleteMobilitySupport($bisio_id)
|
||||
{
|
||||
$aufenthaltfoerderung_code = $this->input->post('aufenthaltfoerderung_code');
|
||||
|
||||
$this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel');
|
||||
|
||||
$result = $this->BisioaufenthaltfoerderungModel->delete(
|
||||
array(
|
||||
'bisio_id' => $bisio_id,
|
||||
'aufenthaltfoerderung_code' => $aufenthaltfoerderung_code
|
||||
)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->terminateWithSuccess(current($data));
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ class Prestudent extends FHCAPI_Controller
|
||||
'getAufmerksamdurch' => ['admin:r', 'assistenz:r'],
|
||||
'getBerufstaetigkeit' => ['admin:r', 'assistenz:r'],
|
||||
'getTypenStg' => ['admin:r', 'assistenz:r'],
|
||||
'getBisstandort' => ['admin:r', 'assistenz:r'],
|
||||
'getStudienplaene' => ['admin:r', 'assistenz:r'],
|
||||
'getStudiengang' => ['admin:r', 'assistenz:r']
|
||||
]);
|
||||
@@ -265,6 +266,17 @@ class Prestudent extends FHCAPI_Controller
|
||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function getBisstandort()
|
||||
{
|
||||
$this->load->model('codex/Bisstandort_model', 'BisstandortModel');
|
||||
|
||||
$result = $this->BisstandortModel->load();
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function getStudienplaene($prestudent_id)
|
||||
{
|
||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
|
||||
@@ -0,0 +1,577 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about addresses
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class Pruefung extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getPruefungen' => ['admin:r', 'assistenz:r'],
|
||||
'loadPruefung' => ['admin:r', 'assistenz:r'],
|
||||
'getTypenPruefungen' => ['admin:r', 'assistenz:r'],
|
||||
'getLehreinheiten' => ['admin:r', 'assistenz:r'],
|
||||
'getAllLehreinheiten' => ['admin:r', 'assistenz:r'],
|
||||
'getLvsByStudent' => ['admin:r', 'assistenz:r'],
|
||||
'getLvsandLesByStudent' => ['admin:r', 'assistenz:r'],
|
||||
'getLvsAndMas' => ['admin:r', 'assistenz:r'],
|
||||
'getMitarbeiterLv' => ['admin:r', 'assistenz:r'],
|
||||
'getNoten' => ['admin:r', 'assistenz:r'],
|
||||
'checkZeugnisnoteLv' => ['admin:r', 'assistenz:r'],
|
||||
'checkTermin1' => ['admin:r', 'assistenz:r'],
|
||||
'insertPruefung' => self::PERM_LOGGED,
|
||||
'updatePruefung' =>self::PERM_LOGGED,
|
||||
'deletePruefung' =>self::PERM_LOGGED,
|
||||
]);
|
||||
|
||||
//Load Models
|
||||
$this->load->model('education/LePruefung_model', 'PruefungModel');
|
||||
|
||||
//version with postParameter
|
||||
if ($this->router->method == 'insertPruefung')
|
||||
{
|
||||
$student_uid = $this->input->post('student_uid');
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
$student = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$prestudent_id = current($student)->prestudent_id;
|
||||
$this->checkPermissionsForPrestudent($prestudent_id, ['admin:w', 'assistenz:w']);
|
||||
}
|
||||
|
||||
// parameter from uri
|
||||
if ($this->router->method == 'updatePruefung' || $this->router->method == 'deletePruefung')
|
||||
{
|
||||
$pruefung_id = current(array_slice($this->uri->rsegments, 2));
|
||||
|
||||
$result = $this->PruefungModel->load($pruefung_id);
|
||||
$pruefung = $this->getDataOrTerminateWithError($result);
|
||||
$student_uid = current($pruefung)->student_uid;
|
||||
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
$student = $this->getDataOrTerminateWithError($result);
|
||||
$prestudent_id = current($student)->prestudent_id;
|
||||
|
||||
$this->checkPermissionsForPrestudent($prestudent_id, ['admin:rw', 'assistenz:rw']);
|
||||
}
|
||||
|
||||
if ($this->router->method == 'loadPruefung')
|
||||
{
|
||||
$pruefung_id = current(array_slice($this->uri->rsegments, 2));
|
||||
|
||||
$result = $this->PruefungModel->load($pruefung_id);
|
||||
$pruefung = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
|
||||
$student_uid = current($pruefung)->student_uid;
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
$student = $this->getDataOrTerminateWithError($result);
|
||||
$prestudent_id = current($student)->prestudent_id;
|
||||
|
||||
$this->checkPermissionsForPrestudent($prestudent_id, ['admin:r', 'assistenz:r']);
|
||||
}
|
||||
|
||||
if ($this->router->method == 'getPruefungen')
|
||||
{
|
||||
$student_uid = current(array_slice($this->uri->rsegments, 2));
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
$student = $this->getDataOrTerminateWithError($result);
|
||||
$prestudent_id = current($student)->prestudent_id;
|
||||
|
||||
$this->checkPermissionsForPrestudent($prestudent_id, ['admin:r', 'assistenz:r']);
|
||||
}
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'global', 'ui','lehre'
|
||||
]);
|
||||
}
|
||||
|
||||
public function getPruefungen($student_uid, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$result = $this->PruefungModel->getPruefungenByStudentuid($student_uid);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function loadPruefung($pruefung_id)
|
||||
{
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.datum');
|
||||
$this->PruefungModel->addSelect("TO_CHAR(tbl_pruefung.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.anmerkung');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.pruefungstyp_kurzbz');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.pruefung_id');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.lehreinheit_id');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.student_uid');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.mitarbeiter_uid');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.punkte');
|
||||
$this->PruefungModel->addSelect('tbl_pruefung.note');
|
||||
|
||||
$this->PruefungModel->addSelect('tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung');
|
||||
$this->PruefungModel->addSelect('tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||
$this->PruefungModel->addSelect('tbl_lehrveranstaltung.semester');
|
||||
$this->PruefungModel->addSelect('tbl_lehrveranstaltung.lehrform_kurzbz');
|
||||
$this->PruefungModel->addSelect('tbl_note.bezeichnung as note_bezeichnung');
|
||||
$this->PruefungModel->addSelect('tbl_pruefungstyp.beschreibung as typ_beschreibung');
|
||||
$this->PruefungModel->addSelect('tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz');
|
||||
|
||||
$this->PruefungModel->addJoin('lehre.tbl_lehreinheit', 'lehre.tbl_pruefung.lehreinheit_id = lehre.tbl_lehreinheit.lehreinheit_id');
|
||||
$this->PruefungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
||||
$this->PruefungModel->addJoin('lehre.tbl_note', 'note');
|
||||
$this->PruefungModel->addJoin('lehre.tbl_pruefungstyp', 'pruefungstyp_kurzbz');
|
||||
|
||||
|
||||
$this->PruefungModel->addLimit(1);
|
||||
|
||||
$result = $this->PruefungModel->loadWhere(
|
||||
array('pruefung_id' => $pruefung_id)
|
||||
);
|
||||
if (isError($result)) {
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
if (!hasData($result))
|
||||
{
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Pruefung_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess(current(getData($result)) ? : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a pruefung
|
||||
*
|
||||
* @param lehrveranstaltung_id, student_uid, lehreinheit_id
|
||||
*
|
||||
* @return values on success
|
||||
* retval 0: pruefung inserted
|
||||
* reval 1: pruefung and zeugnisnote inserted
|
||||
* retval 2: pruefung inserted, no insert Zeugnisnote
|
||||
* (change after date of examination)
|
||||
* retval 3: pruefung of type Termin2 inserted
|
||||
* and pruefung of type Termin1 as well
|
||||
* retval 5: prueufungen Termin 2 and 1 inserted
|
||||
* and no insert Zeugnisnote (change after date of examination)
|
||||
*/
|
||||
public function insertPruefung()
|
||||
{
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('lehrveranstaltung_id', $this->p->t('lehre', 'lehrveranstaltung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehrveranstaltung')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('lehreinheit_id', $this->p->t('lehre', 'lehreinheit'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehreinheit')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', $this->p->t('lehre', 'pruefung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('global', 'typ')]),
|
||||
]);
|
||||
$this->form_validation->set_rules(
|
||||
'datum',
|
||||
$this->p->t('global', 'datum'),
|
||||
['is_valid_date']
|
||||
);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
//calculate studiensemester_kurzbz this from lehreinheit (case newPruefung)
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
if (!$studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
$result = $this->LehreinheitModel->load($this->input->post('lehreinheit_id'));
|
||||
|
||||
$lehreinheit = $this->getDataOrTerminateWithError($result);
|
||||
$studiensemester_kurzbz = current($lehreinheit)->studiensemester_kurzbz;
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->PruefungModel->insert([
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'note' => $this->input->post('note'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
]);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
//check if existing zeugnisnote
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
if (!hasData($result))
|
||||
{
|
||||
//insert zeugnisnote, if not existing
|
||||
$result = $this->ZeugnisnoteModel->insert(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'note' => $this->input->post('note'),
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $this->input->post('datum'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID
|
||||
));
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess(1);
|
||||
}
|
||||
|
||||
$return_code = 0;
|
||||
|
||||
//handling Termin1 if not existing
|
||||
if($this->input->post('pruefungstyp_kurzbz') == "Termin2")
|
||||
{
|
||||
$resultP = $this->PruefungModel->loadWhere(array(
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'pruefungstyp_kurzbz' => 'Termin1'));
|
||||
|
||||
if (isError($resultP))
|
||||
{
|
||||
$this->terminateWithError(getError($resultP), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if(!hasData($resultP))
|
||||
{
|
||||
//check if existing Zeugnisnote
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
$this->ZeugnisnoteModel->addJoin('lehre.tbl_lehreinheit', 'lehrveranstaltung_id');
|
||||
|
||||
$resultP = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->input->post('student_uid'),
|
||||
'lehre.tbl_zeugnisnote.studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
if (isError($resultP))
|
||||
{
|
||||
$this->terminateWithError(getError($resultP), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (!hasData($resultP))
|
||||
{
|
||||
$this->terminateWithError("Zeugnisnote existiert nicht", self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$dataNote = current(getData($resultP));
|
||||
|
||||
$resultN = $this->PruefungModel->insert([
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'datum' => $dataNote->benotungsdatum,
|
||||
'pruefungstyp_kurzbz' => 'Termin1',
|
||||
'note' => $dataNote->note,
|
||||
'punkte' => $dataNote->punkte,
|
||||
'anmerkung' => 'automatisiert aus Zeugnisnote erstellt',
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
]);
|
||||
|
||||
if (isError($resultN)) {
|
||||
$this->terminateWithError(getError($resultN), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$return_code = 3;
|
||||
}
|
||||
}
|
||||
|
||||
$note = current(getData($result));
|
||||
$uebernahmedatum = new DateTime($note->uebernahmedatum);
|
||||
$benotungsdatum = new DateTime($note->benotungsdatum);
|
||||
|
||||
$checkDate = $uebernahmedatum === '' || $benotungsdatum > $uebernahmedatum
|
||||
? $benotungsdatum
|
||||
: $uebernahmedatum;
|
||||
|
||||
if ($checkDate >= $this->input->post('datum') && $note !== $note->note)
|
||||
{
|
||||
$this->terminateWithSuccess($return_code + 2);
|
||||
}
|
||||
$this->terminateWithSuccess($return_code + 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a pruefung
|
||||
*
|
||||
* @param pruefung_id
|
||||
*
|
||||
* @return success or error
|
||||
*
|
||||
* no impact on lehre.tbl_zeugnisnote
|
||||
*/
|
||||
public function updatePruefung($pruefung_id)
|
||||
{
|
||||
$result = $this->PruefungModel->load($pruefung_id);
|
||||
|
||||
$oldpruefung = $this->getDataOrTerminateWithError($result);
|
||||
if (!$oldpruefung)
|
||||
show_404(); // Pruefung that should be updated does not exist
|
||||
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('lehrveranstaltung_id', $this->p->t('lehre', 'lehrveranstaltung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehrveranstaltung')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('lehreinheit_id', $this->p->t('lehre', 'lehreinheit'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehreinheit')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', $this->p->t('lehre', 'pruefung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('global', 'typ')]),
|
||||
]);
|
||||
$this->form_validation->set_rules(
|
||||
'datum',
|
||||
$this->p->t('global', 'datum'),
|
||||
['is_valid_date']
|
||||
);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->PruefungModel->update(
|
||||
[
|
||||
'pruefung_id' => $pruefung_id
|
||||
],
|
||||
[ 'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'note' => $this->input->post('note'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'updatevon' => $authUID,
|
||||
'updateamum' => date('c'),
|
||||
]
|
||||
);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->outputJsonSuccess(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a pruefung
|
||||
*
|
||||
* @param pruefung_id
|
||||
*
|
||||
* @return success or error
|
||||
*
|
||||
* no impact on lehre.tbl_zeugnisnote
|
||||
*/
|
||||
public function deletePruefung($pruefung_id)
|
||||
{
|
||||
$result = $this->PruefungModel->load($pruefung_id);
|
||||
|
||||
$oldpruefung = $this->getDataOrTerminateWithError($result);
|
||||
if (!$oldpruefung)
|
||||
show_404(); // Pruefung that should be deleted does not exist
|
||||
|
||||
$result = $this->PruefungModel->delete(
|
||||
[
|
||||
'pruefung_id' => $pruefung_id
|
||||
]
|
||||
);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
public function getTypenPruefungen()
|
||||
{
|
||||
$this->load->model('education/Pruefungstyp_model', 'PruefungtypModel');
|
||||
|
||||
//TODO(Manu) sort Termin3
|
||||
$this->PruefungtypModel->addOrder('sort', 'ASC');
|
||||
$result = $this->PruefungtypModel->loadWhere(
|
||||
array('abschluss' => 'false')
|
||||
);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function getAllLehreinheiten()
|
||||
{
|
||||
$lv_id = $this->input->post('lv_id');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
$result = $this->LehreinheitModel->getLesFromLvIds($lv_id, $studiensemester_kurzbz);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getLvsandLesByStudent($student_uid, $semester_kurzbz=null)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid, $semester_kurzbz);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$lv_ids = array();
|
||||
$allData = array();
|
||||
|
||||
foreach ($data as $lehrveranstaltung) {
|
||||
$lv_ids[] = $lehrveranstaltung->lehrveranstaltung_id;
|
||||
}
|
||||
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
foreach ($lv_ids as $id)
|
||||
{
|
||||
$result = $this->LehreinheitModel->getLesFromLvIds($id, $semester_kurzbz);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (is_array($data)) {
|
||||
$allData = array_merge($allData, $data);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->terminateWithSuccess($allData);
|
||||
}
|
||||
|
||||
public function getLvsAndMas($student_uid)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$lv_ids = array();
|
||||
$allDataMa = array();
|
||||
|
||||
foreach ($data as $lehrveranstaltung)
|
||||
{
|
||||
$lv_ids[] = $lehrveranstaltung->lehrveranstaltung_id;
|
||||
}
|
||||
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
foreach ($lv_ids as $id)
|
||||
{
|
||||
$resultMa = $this->MitarbeiterModel->getMitarbeiterFromLV($id);
|
||||
$dataMa = $this->getDataOrTerminateWithError($resultMa);
|
||||
|
||||
if (is_array($dataMa))
|
||||
{
|
||||
$allDataMa = array_merge($allDataMa, $dataMa);
|
||||
}
|
||||
}
|
||||
return $this->terminateWithSuccess($allDataMa);
|
||||
}
|
||||
|
||||
public function getLvsByStudent($student_uid, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
|
||||
$result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid, $studiensemester_kurzbz);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getMitarbeiterLv($lv_id)
|
||||
{
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$result = $this->MitarbeiterModel->getMitarbeiterFromLV($lv_id);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getNoten()
|
||||
{
|
||||
$this->load->model('education/Note_model', 'NoteModel');
|
||||
|
||||
$this->NoteModel->addOrder('note', 'ASC');
|
||||
$result = $this->NoteModel->load();
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function checkZeugnisnoteLv()
|
||||
{
|
||||
$student_uid = $this->input->post('student_uid');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'student_uid' => $student_uid,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->terminateWithSuccess($data);
|
||||
}
|
||||
}
|
||||
@@ -647,15 +647,8 @@ class Status extends FHCAPI_Controller
|
||||
return $this->outputJsonSuccess(true);
|
||||
}
|
||||
|
||||
public function loadStatus()
|
||||
public function loadStatus($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester)
|
||||
{
|
||||
$_POST = json_decode(utf8_encode($this->input->raw_input_stream), true);
|
||||
|
||||
$prestudent_id = $this->input->post('prestudent_id');
|
||||
$status_kurzbz = $this->input->post('status_kurzbz');
|
||||
$ausbildungssemester = $this->input->post('ausbildungssemester');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
|
||||
$result = $this->PrestudentstatusModel->loadWhere(
|
||||
array(
|
||||
'prestudent_id' => $prestudent_id,
|
||||
@@ -1344,13 +1337,13 @@ class Status extends FHCAPI_Controller
|
||||
'updatevon' => $authUID
|
||||
];
|
||||
foreach ([
|
||||
'orgform_kurzbz',
|
||||
'anmerkung',
|
||||
'bewerbung_abgeschicktamum',
|
||||
'studienplan_id',
|
||||
'rt_stufe',
|
||||
'statusgrund_id'
|
||||
] as $key)
|
||||
'orgform_kurzbz',
|
||||
'anmerkung',
|
||||
'bewerbung_abgeschicktamum',
|
||||
'studienplan_id',
|
||||
'rt_stufe',
|
||||
'statusgrund_id'
|
||||
] as $key)
|
||||
if ($this->input->post($key))
|
||||
$updateData[$key] = $this->input->post($key);
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ class Student extends FHCAPI_Controller
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui'
|
||||
'ui', 'lehre'
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -156,6 +156,8 @@ class Student extends FHCAPI_Controller
|
||||
|
||||
$uid = $student ? current($student)->student_uid : null;
|
||||
|
||||
$studiengang_kz = $student ? current($student)->studiengang_kz : null;
|
||||
|
||||
$result = $this->PrestudentModel->loadWhere(['prestudent_id' => $prestudent_id]);
|
||||
|
||||
$person = $this->getDataOrTerminateWithError($result);
|
||||
@@ -223,20 +225,35 @@ class Student extends FHCAPI_Controller
|
||||
|
||||
// Check PKs
|
||||
if (count($update_lehrverband) + count($update_student) && $uid === null) {
|
||||
// TODO(chris): phrase
|
||||
$this->terminateWithValidationErrors(['' => "Kein/e StudentIn vorhanden!"]);
|
||||
$this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_student')]);
|
||||
}
|
||||
if (count($update_person) && $person_id === null) {
|
||||
// TODO(chris): phrase
|
||||
$this->terminateWithValidationErrors(['' => "Keine Person vorhanden!"]);
|
||||
$this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_person')]);
|
||||
}
|
||||
|
||||
// Do Updates
|
||||
if (count($update_lehrverband)) {
|
||||
$result = $this->StudentlehrverbandModel->update([
|
||||
$curstudlvb = $this->StudentlehrverbandModel->load([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $uid
|
||||
], $update_lehrverband);
|
||||
]);
|
||||
|
||||
if(hasData($curstudlvb) && count(getData($curstudlvb)) > 0 )
|
||||
{
|
||||
$result = $this->StudentlehrverbandModel->update([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $uid
|
||||
], $update_lehrverband);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->StudentlehrverbandModel->insert(array_merge([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'student_uid' => $uid,
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
], $update_lehrverband));
|
||||
}
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Noten extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'get' => 'student/noten:r',
|
||||
'getZeugnis' => 'student/noten:r',
|
||||
'update' => ['admin:w', 'assistenz:w']
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
}
|
||||
|
||||
public function get()
|
||||
{
|
||||
$this->load->model('codex/Note_model', 'NoteModel');
|
||||
|
||||
$result = $this->NoteModel->addOrder('note');
|
||||
|
||||
$result = $this->NoteModel->load();
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
return $this->outputJson($result);
|
||||
}
|
||||
|
||||
public function getZeugnis($prestudent_id, $all = null)
|
||||
{
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->StudentModel->loadWhere([
|
||||
'prestudent_id' => $prestudent_id
|
||||
]);
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
|
||||
return $this->outputJson($result);
|
||||
}
|
||||
if (!hasData($result))
|
||||
return $this->outputJsonSuccess(null);
|
||||
|
||||
$student_uid = current(getData($result))->student_uid;
|
||||
|
||||
$studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null;
|
||||
|
||||
$result = $this->ZeugnisnoteModel->getZeugnisnoten($student_uid, $studiensemester_kurzbz);
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
return $this->outputJson($result);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$_POST = json_decode(utf8_encode($this->input->raw_input_stream), true);
|
||||
|
||||
if (empty($_POST) || !is_array(current($_POST))) {
|
||||
$result = $this->hasPermissionUpdate($this->input->post('lehrveranstaltung_id'), $this->input->post('student_uid'));
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN);
|
||||
return $this->outputJson($result);
|
||||
}
|
||||
|
||||
$this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrverantaltung ID', 'required|numeric');
|
||||
$this->form_validation->set_rules('student_uid', 'Student UID', 'required');
|
||||
$this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester Kurzbezeichnung', 'required');
|
||||
$this->form_validation->set_rules('note', 'Note', 'required|numeric');
|
||||
$post = [$_POST];
|
||||
} else {
|
||||
foreach ($_POST as $i => $data) {
|
||||
$lvid = isset($data['lehrveranstaltung_id']) ? $data['lehrveranstaltung_id'] : null;
|
||||
$uid = isset($data['student_uid']) ? $data['student_uid'] : null;
|
||||
$result = $this->hasPermissionUpdate($lvid, $uid);
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_FORBIDDEN);
|
||||
return $this->outputJson($result);
|
||||
}
|
||||
|
||||
$this->form_validation->set_rules($i . '[lehrveranstaltung_id]', '#' . $i . ' Lehrverantaltung ID', 'required|numeric');
|
||||
$this->form_validation->set_rules($i . '[student_uid]', '#' . $i . ' Student UID', 'required');
|
||||
$this->form_validation->set_rules($i . '[studiensemester_kurzbz]', '#' . $i . ' Studiensemester Kurzbezeichnung', 'required');
|
||||
$this->form_validation->set_rules($i . '[note]', '#' . $i . ' Note', 'required|numeric');
|
||||
}
|
||||
$post = $_POST;
|
||||
}
|
||||
if ($this->form_validation->run() == false) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST);
|
||||
return $this->outputJsonError($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$final_result = success();
|
||||
$this->ZeugnisnoteModel->db->trans_start();
|
||||
|
||||
foreach ($post as $i => $data) {
|
||||
$note = $data['note'];
|
||||
unset($data['note']);
|
||||
$result = $this->ZeugnisnoteModel->update($data, [
|
||||
'note' => $note,
|
||||
'benotungsdatum' => date('c'),
|
||||
'updateamum' => date('c'),
|
||||
'updatevon' => getAuthUID()
|
||||
]);
|
||||
if (isError($result)) {
|
||||
$final_result = $result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$this->ZeugnisnoteModel->db->trans_complete();
|
||||
|
||||
if (isError($final_result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
$this->outputJson($final_result);
|
||||
}
|
||||
|
||||
protected function hasPermissionUpdate($lehrveranstaltung_id, $student_uid)
|
||||
{
|
||||
// TODO(chris): error phrases!
|
||||
if ($lehrveranstaltung_id === null || $student_uid === null)
|
||||
return success();
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!hasData($result))
|
||||
return error('Fehler beim Ermitteln des Studenten');
|
||||
$student = current(getData($result));
|
||||
|
||||
if ($this->permissionlib->isBerechtigt('admin', 'suid', $student->studiengang_kz))
|
||||
return success();
|
||||
if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $student->studiengang_kz))
|
||||
return success();
|
||||
|
||||
$result = $this->StudienplanModel->getAllOesForLv($lehrveranstaltung_id);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
$oes = getData($result) ?: [];
|
||||
$result = $this->LehrveranstaltungModel->getStg($lehrveranstaltung_id);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (hasData($result))
|
||||
$oes[] = current(getData($result));
|
||||
|
||||
foreach ($oes as $oe) {
|
||||
if ($this->permissionlib->isBerechtigt('admin', 'suid', $oe->oe_kurzbz))
|
||||
return success();
|
||||
if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $oe->oe_kurzbz))
|
||||
return success();
|
||||
}
|
||||
|
||||
return error('Forbidden');
|
||||
}
|
||||
}
|
||||
@@ -195,10 +195,10 @@ class AnrechnungJob extends JOB_Controller
|
||||
$studiengang_bezeichnung = $this->StudiengangModel->load($studiengang_kz)->retval[0]->stg_bezeichnung;
|
||||
|
||||
// Get STGL mail address
|
||||
$stglMailReceiver_arr = self::_getSTGLMailAddress($studiengang_kz);
|
||||
$stglMailReceiver_arr = $this->_getSTGLMailAddress($studiengang_kz);
|
||||
|
||||
// Get HTML table with new Anrechnungen of that STG plus amount of them
|
||||
list ($anrechnungen_amount, $anrechnungen_table) = self::_getSTGLMailDataTable($studiengang_kz, $anrechnungen);
|
||||
list ($anrechnungen_amount, $anrechnungen_table) = $this->_getSTGLMailDataTable($studiengang_kz, $anrechnungen);
|
||||
|
||||
// Link to Antrag genehmigen dashboard
|
||||
$url =
|
||||
@@ -514,8 +514,6 @@ html;
|
||||
'vorname' => $stgl->vorname
|
||||
);
|
||||
}
|
||||
|
||||
return $stglMailAdress_arr;
|
||||
}
|
||||
// If not available, get assistance mail address
|
||||
else
|
||||
@@ -524,12 +522,13 @@ html;
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
return array(
|
||||
$result->retval[0]->email,
|
||||
''
|
||||
$stglMailAdress_arr[]= array(
|
||||
'to' => $result->retval[0]->email,
|
||||
'vorname' => ''
|
||||
);
|
||||
}
|
||||
}
|
||||
return $stglMailAdress_arr;
|
||||
}
|
||||
|
||||
// Build HTML table with yesterdays new Anrechnungen of the given STG
|
||||
|
||||
@@ -183,8 +183,8 @@ class AntragJob extends JOB_Controller
|
||||
$data,
|
||||
$to,
|
||||
'Anträge - Aktion(en) erforderlich',
|
||||
DEFAULT_SANCHO_HEADER_IMG,
|
||||
DEFAULT_SANCHO_FOOTER_IMG,
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
$cc
|
||||
))
|
||||
|
||||
@@ -52,6 +52,7 @@ class OneTimeMessages extends JOB_Controller
|
||||
JOIN public.tbl_prestudentstatus ps USING (prestudent_id)
|
||||
JOIN public.tbl_studiengang s USING (studiengang_kz)
|
||||
WHERE get_rolle_prestudent(ps.prestudent_id, NULL) = \'Wartender\'
|
||||
AND ps.status_kurzbz = \'Wartender\'
|
||||
AND ps.studiensemester_kurzbz = ?
|
||||
AND ps.datum <= NOW() - \''.$days.' days\'::interval
|
||||
AND s.typ = ?
|
||||
|
||||
@@ -431,8 +431,8 @@ class ReihungstestJob extends JOB_Controller
|
||||
$mailcontent_data_arr,
|
||||
$applicant->email,
|
||||
'Ihre Anmeldung zum Reihungstest - Reminder / Your registration for the placement test - Reminder',
|
||||
DEFAULT_SANCHO_HEADER_IMG,
|
||||
DEFAULT_SANCHO_FOOTER_IMG,
|
||||
'',
|
||||
'',
|
||||
$from,
|
||||
'',
|
||||
$bcc);
|
||||
@@ -821,7 +821,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
|
||||
JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz)
|
||||
WHERE get_rolle_prestudent (tbl_prestudent.prestudent_id, ?) IN ('Aufgenommener','Bewerber','Wartender','Abgewiesener')
|
||||
AND studiensemester_kurzbz = ?
|
||||
AND studiensemester_kurzbz = ?
|
||||
AND tbl_studiengang.typ IN ('b', 'm')
|
||||
)
|
||||
SELECT * FROM prst
|
||||
@@ -861,7 +861,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
{
|
||||
// Alle niedrigeren Prios laden
|
||||
$qryNiedrPrios = "
|
||||
SELECT DISTINCT
|
||||
SELECT DISTINCT ON(prestudent_id)
|
||||
get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') AS laststatus,
|
||||
tbl_studienplan.orgform_kurzbz,
|
||||
tbl_person.nachname,
|
||||
@@ -876,11 +876,11 @@ class ReihungstestJob extends JOB_Controller
|
||||
JOIN PUBLIC.tbl_studiengang ON (tbl_prestudent.studiengang_kz = tbl_studiengang.studiengang_kz)
|
||||
WHERE tbl_prestudent.person_id = ".$row_ps->person_id."
|
||||
AND tbl_prestudent.prestudent_id != ".$row_ps->prestudent_id."
|
||||
AND get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') IN ('Aufgenommener','Bewerber','Wartender')
|
||||
AND get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') IN ('Aufgenommener','Bewerber','Wartender', 'Student')
|
||||
AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."'
|
||||
AND tbl_studiengang.typ IN ('b', 'm')
|
||||
AND priorisierung > ".$row_ps->priorisierung."
|
||||
ORDER BY studiengang_kz, laststatus
|
||||
ORDER BY prestudent_id, studiengang_kz, laststatus, tbl_prestudentstatus.datum DESC
|
||||
";
|
||||
|
||||
// Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen
|
||||
@@ -894,12 +894,22 @@ class ReihungstestJob extends JOB_Controller
|
||||
{
|
||||
foreach ($resultNiedrPrios->retval as $rowNiedrPrios)
|
||||
{
|
||||
// nur Info wenn aufgenommen oder master
|
||||
if ($rowNiedrPrios->laststatus == 'Aufgenommener' || $rowNiedrPrios->studiengang_typ == 'm')
|
||||
// nur Info wenn aufgenommen/student oder master
|
||||
if ($rowNiedrPrios->laststatus == 'Aufgenommener' || $rowNiedrPrios->laststatus == 'Student' || $rowNiedrPrios->studiengang_typ == 'm')
|
||||
{
|
||||
// Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde
|
||||
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
|
||||
if ($rowNiedrPrios->laststatus == 'Aufgenommener')
|
||||
{
|
||||
// Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde
|
||||
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
}
|
||||
else if ($rowNiedrPrios->laststatus == 'Student')
|
||||
{
|
||||
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['StudentHoeherePrio'][]
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
}
|
||||
|
||||
}
|
||||
elseif ($rowNiedrPrios->laststatus == 'Bewerber' && $row_ps->prestudenstatus_datum > $rowNiedrPrios->datum)
|
||||
{
|
||||
@@ -966,7 +976,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
FROM public.tbl_konto
|
||||
WHERE person_id = " . $row_ps->person_id . "
|
||||
AND studiensemester_kurzbz = '" . $row_ps->studiensemester_kurzbz . "'
|
||||
AND buchungstyp_kurzbz = 'StudiengebuehrAnzahlung'";
|
||||
AND buchungstyp_kurzbz IN ('StudiengebuehrAnzahlung','KautionDrittStaat')";
|
||||
|
||||
$resultKautionExists = $db->execReadOnlyQuery($qryKautionExists);
|
||||
if (hasdata($resultKautionExists))
|
||||
@@ -1061,6 +1071,20 @@ class ReihungstestJob extends JOB_Controller
|
||||
$mailcontent .= '</tbody></table>';
|
||||
$content = true;
|
||||
}
|
||||
if (isset($value['StudentHoeherePrio']) && !isEmptyArray($value['StudentHoeherePrio']))
|
||||
{
|
||||
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
|
||||
Folgende Studenten wurden in einem höher priorisierten Studiengang aufgenommen:</p>';
|
||||
$mailcontent .= '<table style="border-collapse: collapse; border: 1px solid grey;">';
|
||||
$mailcontent .= ' <tbody>';
|
||||
sort($value['StudentHoeherePrio']);
|
||||
foreach ($value['StudentHoeherePrio'] AS $key=>$bewerber)
|
||||
{
|
||||
$mailcontent .= '<tr><td style="font-family: verdana, sans-serif; border: 1px solid grey; padding: 3px">'.$bewerber.'</td></tr>';
|
||||
}
|
||||
$mailcontent .= '</tbody></table>';
|
||||
$content = true;
|
||||
}
|
||||
if (isset($value['AbgewiesenHoeherePrio']) && !isEmptyArray($value['AbgewiesenHoeherePrio']))
|
||||
{
|
||||
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
|
||||
|
||||
@@ -991,14 +991,17 @@ class DB_Model extends CI_Model
|
||||
|
||||
// Find and replace all the occurrences of the provided encrypted columns
|
||||
// with the postgresql decryption function
|
||||
$query = str_replace(
|
||||
$encryptedColumn,
|
||||
sprintf(
|
||||
self::CRYPT_WHERE_TEMPLATE,
|
||||
$encryptedColumn,
|
||||
$decryptionPassword,
|
||||
$definition[self::CRYPT_CAST]
|
||||
),
|
||||
$query = preg_replace_callback(
|
||||
'/(?<! (as|AS) )\b(\w+\.)?(' . $encryptedColumn . ')\b/',
|
||||
function($matches) use (&$decryptionPassword, &$definition) {
|
||||
$aliased_column = $matches[2] . $matches[3];
|
||||
return sprintf(
|
||||
self::CRYPT_WHERE_TEMPLATE,
|
||||
$aliased_column,
|
||||
$decryptionPassword,
|
||||
$definition[self::CRYPT_CAST]
|
||||
);
|
||||
},
|
||||
$query
|
||||
);
|
||||
}
|
||||
@@ -1106,14 +1109,17 @@ class DB_Model extends CI_Model
|
||||
{
|
||||
// Find and replace all the occurrences of the provided encrypted columns
|
||||
// with the postgresql decryption function
|
||||
$where = str_replace(
|
||||
$encryptedColumn,
|
||||
sprintf(
|
||||
self::CRYPT_WHERE_TEMPLATE,
|
||||
$encryptedColumn,
|
||||
$decryptionPassword,
|
||||
$definition[self::CRYPT_CAST]
|
||||
),
|
||||
$where = preg_replace_callback(
|
||||
'/(?<! (as|AS) )\b(\w+\.)?(' . $encryptedColumn . ')\b/',
|
||||
function($matches) use (&$decryptionPassword, &$definition) {
|
||||
$aliased_column = $matches[2] . $matches[3];
|
||||
return sprintf(
|
||||
self::CRYPT_WHERE_TEMPLATE,
|
||||
$aliased_column,
|
||||
$decryptionPassword,
|
||||
$definition[self::CRYPT_CAST]
|
||||
);
|
||||
},
|
||||
$where
|
||||
);
|
||||
}
|
||||
|
||||
@@ -309,6 +309,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
//update(1) loading all dms-entries with this notiz_id
|
||||
$dms_id_arr = [];
|
||||
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
||||
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
||||
|
||||
|
||||
@@ -33,22 +33,30 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
|
||||
public function getTag()
|
||||
{
|
||||
$language = $this->_getLanguageIndex();
|
||||
$id = $this->input->get('id');
|
||||
|
||||
$this->NotizModel->addSelect(
|
||||
'tbl_notiz.titel,
|
||||
"tbl_notiz.titel,
|
||||
tbl_notiz.text,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>". $language. " as bezeichnung,
|
||||
tbl_notiz.notiz_id,
|
||||
tbl_notiz_typ.style,
|
||||
tbl_notiz.erledigt as done,
|
||||
tbl_notiz.insertamum,
|
||||
tbl_notiz.updateamum,
|
||||
tbl_notiz.insertvon,
|
||||
tbl_notiz.updatevon
|
||||
'
|
||||
(verfasserperson.vorname || ' ' || verfasserperson.nachname || ' ' || '(' || verfasserbenutzer.uid || ')') as verfasser,
|
||||
(bearbeiterperson.vorname || ' ' || bearbeiterperson.nachname || ' ' || '(' || bearbeiterbenutzer.uid || ')') as bearbeiter
|
||||
"
|
||||
);
|
||||
$this->NotizModel->addJoin('public.tbl_notiz_typ', 'public.tbl_notiz.typ = public.tbl_notiz_typ.typ_kurzbz');
|
||||
|
||||
$this->NotizModel->addJoin('public.tbl_benutzer verfasserbenutzer', 'tbl_notiz.verfasser_uid = verfasserbenutzer.uid', 'LEFT');
|
||||
$this->NotizModel->addJoin('public.tbl_person verfasserperson', 'verfasserbenutzer.person_id = verfasserperson.person_id', 'LEFT');
|
||||
|
||||
$this->NotizModel->addJoin('public.tbl_benutzer bearbeiterbenutzer', 'tbl_notiz.verfasser_uid = bearbeiterbenutzer.uid', 'LEFT');
|
||||
$this->NotizModel->addJoin('public.tbl_person bearbeiterperson', 'bearbeiterbenutzer.person_id = bearbeiterperson.person_id', 'LEFT');
|
||||
|
||||
$notiz = $this->NotizModel->loadWhere(array('notiz_id' => $id));
|
||||
|
||||
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz)[0] : array());
|
||||
@@ -134,7 +142,11 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
{
|
||||
$postData = $this->getPostJson();
|
||||
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
||||
array('text' => $postData->notiz)
|
||||
array('text' => $postData->notiz,
|
||||
'updateamum' => date('Y-m-d H:i:s'),
|
||||
'updatevon' => $this->_uid,
|
||||
'bearbeiter_uid' => $this->_uid,
|
||||
)
|
||||
);
|
||||
$this->terminateWithSuccess($updateData);
|
||||
}
|
||||
@@ -142,7 +154,11 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
{
|
||||
$postData = $this->getPostJson();
|
||||
$updateData = $this->NotizModel->update(array('notiz_id' => $postData->id),
|
||||
array('erledigt' => !$postData->done)
|
||||
array('erledigt' => !$postData->done,
|
||||
'updateamum' => date('Y-m-d H:i:s'),
|
||||
'updatevon' => $this->_uid,
|
||||
'bearbeiter_uid' => $this->_uid,
|
||||
)
|
||||
);
|
||||
|
||||
$this->terminateWithSuccess($updateData);
|
||||
@@ -183,5 +199,14 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
show_error('User authentification failed');
|
||||
}
|
||||
|
||||
private function _getLanguageIndex()
|
||||
{
|
||||
$this->load->model('system/Sprache_model', 'SpracheModel');
|
||||
$this->SpracheModel->addSelect('index');
|
||||
$result = $this->SpracheModel->loadWhere(array('sprache' => getUserLanguage()));
|
||||
|
||||
return hasData($result) ? getData($result)[0]->index : 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -23,9 +23,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
// Functions needed in the view FHC-Header
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
|
||||
const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg';
|
||||
|
||||
/**
|
||||
* Send single Mail with Sancho Design and Layout.
|
||||
* @param string $vorlage_kurzbz Name of the template for specific mail content.
|
||||
@@ -38,27 +35,88 @@ const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg';
|
||||
* @param string $bcc Sets BCC of mail.
|
||||
* @return void
|
||||
*/
|
||||
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG, $footerImg = DEFAULT_SANCHO_FOOTER_IMG, $from = null, $cc = null, $bcc = null)
|
||||
function sendSanchoMail(
|
||||
$vorlage_kurzbz,
|
||||
$vorlage_data,
|
||||
$to,
|
||||
$subject,
|
||||
$headerImg = '',
|
||||
$footerImg = '',
|
||||
$from = null,
|
||||
$cc = null,
|
||||
$bcc = null
|
||||
)
|
||||
{
|
||||
$ci =& get_instance();
|
||||
$ci->load->library('email');
|
||||
$ci->load->library('MailLib');
|
||||
|
||||
$sanchoHeader_img = 'skin/images/sancho/'. $headerImg;
|
||||
$sanchoFooter_img = 'skin/images/sancho/'. $footerImg;
|
||||
$sancho_mail_config = $ci->config->item('mail');
|
||||
|
||||
|
||||
if ($from == '')
|
||||
{
|
||||
$from = 'sancho@'.DOMAIN;
|
||||
$from = ((isset($sancho_mail_config['sancho_mail_default_sender'])
|
||||
&& $sancho_mail_config['sancho_mail_default_sender'])
|
||||
? $sancho_mail_config['sancho_mail_default_sender']
|
||||
: 'noreply')
|
||||
. '@' . DOMAIN;
|
||||
}
|
||||
|
||||
// Embed sancho header and footer image
|
||||
// reset important to ensure embedding of images when called in a loop
|
||||
$ci->email->clear(true); // clear vars and attachments
|
||||
$ci->email->attach($sanchoHeader_img);
|
||||
$ci->email->attach($sanchoFooter_img);
|
||||
$cid_header = $ci->email->attachment_cid($sanchoHeader_img); // sets unique content id for embedding
|
||||
$cid_footer = $ci->email->attachment_cid($sanchoFooter_img); // sets unique content id for embedding
|
||||
|
||||
$cid_header = '';
|
||||
$cid_footer = '';
|
||||
|
||||
if (isset($sancho_mail_config['sancho_mail_use_images']) && $sancho_mail_config['sancho_mail_use_images'])
|
||||
{
|
||||
$sanchoHeader_img = '';
|
||||
$sanchoFooter_img = '';
|
||||
|
||||
if (isset($headerImg) && $headerImg != '')
|
||||
{
|
||||
// use provided header image
|
||||
$sanchoHeader_img = $headerImg;
|
||||
}
|
||||
elseif (isset($sancho_mail_config['sancho_mail_header_img']) && $sancho_mail_config['sancho_mail_header_img'])
|
||||
{
|
||||
// use default header image
|
||||
$sanchoHeader_img = $sancho_mail_config['sancho_mail_header_img'];
|
||||
}
|
||||
|
||||
if (isset($footerImg) && $footerImg != '')
|
||||
{
|
||||
// use provided footer image
|
||||
$sanchoFooter_img = $footerImg;
|
||||
}
|
||||
elseif (isset($sancho_mail_config['sancho_mail_footer_img']) && $sancho_mail_config['sancho_mail_footer_img'])
|
||||
{
|
||||
// use default footer image
|
||||
$sanchoFooter_img = $sancho_mail_config['sancho_mail_footer_img'];
|
||||
}
|
||||
|
||||
// add image file paths
|
||||
if (isset($sancho_mail_config['sancho_mail_img_path']))
|
||||
{
|
||||
if ($sanchoHeader_img != '')
|
||||
{
|
||||
$sanchoHeader_img = $sancho_mail_config['sancho_mail_img_path'].$sanchoHeader_img;
|
||||
}
|
||||
|
||||
if ($sanchoFooter_img != '')
|
||||
{
|
||||
$sanchoFooter_img = $sancho_mail_config['sancho_mail_img_path'].$sanchoFooter_img;
|
||||
}
|
||||
}
|
||||
|
||||
// attach header and footer
|
||||
$ci->email->attach($sanchoHeader_img, 'inline');
|
||||
$ci->email->attach($sanchoFooter_img, 'inline');
|
||||
$cid_header = $ci->email->attachment_cid($sanchoHeader_img); // sets unique content id for embedding
|
||||
$cid_footer = $ci->email->attachment_cid($sanchoFooter_img); // sets unique content id for embedding
|
||||
}
|
||||
|
||||
// Set specific mail content into specific content template
|
||||
$content = _parseMailContent($vorlage_kurzbz, $vorlage_data);
|
||||
@@ -74,7 +132,18 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm
|
||||
$body = _parseMailContent('Sancho_Mail_Template', $layout);
|
||||
|
||||
// Send mail
|
||||
return $ci->maillib->send($from, $to, $subject, $body, $alias = '', $cc, $bcc, $altMessage = '', $bulk = true, $autogenerated = true);
|
||||
return $ci->maillib->send(
|
||||
$from,
|
||||
$to,
|
||||
$subject,
|
||||
$body,
|
||||
'', // alias
|
||||
$cc,
|
||||
$bcc,
|
||||
'', // altMessage
|
||||
true, // bulk
|
||||
true // autogenerated
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,714 @@
|
||||
<?php
|
||||
/* Copyright (C) 2024 fhcomplete.net
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use stdClass as stdClass;
|
||||
use DOMDocument as DOMDocument;
|
||||
use XSLTProcessor as XSLTProcessor;
|
||||
use SimpleXMLElement as SimpleXMLElement;
|
||||
|
||||
/**
|
||||
* This library replaces the old document_export.class except for the convert
|
||||
* function which is located in the DocumentLib library.
|
||||
*
|
||||
* The usage differs a little bit from the old library:
|
||||
* In the old library you had to call create() then some optional function
|
||||
* for adding data (addDataArray()/addDataXML()/addDataURL()/setFilename()),
|
||||
* modifiing said data (sign()/setXMLTag_archivierbar()) or adding
|
||||
* images (addImage()) and then call output() and close().
|
||||
* Now the create, output and close functions are combined into one function and adding data and images is done via parameters.
|
||||
* There are now two functions getContent() and showContent() where showContent() equals to output(false) and getContent equals to output(true)
|
||||
* Instead of calling addDataArray, addDataXML or addDataURL just call
|
||||
* getDataArray, getDataXML or getDataURL respectevily and use the return
|
||||
* value as $xml_data parameter in the showContent and getContent calls.
|
||||
* Instead of calling addImages just create an array and pass it as $images
|
||||
* parameter to the showContent/getContent function.
|
||||
* The old setFilename() function is now a parameter in showContent(). It is
|
||||
* not needed in getContent() since that function does not do anything that
|
||||
* requires a filename.
|
||||
* To get/show a signed document just pass a valid uid as $sign_user
|
||||
* parameter.
|
||||
*
|
||||
* Example:
|
||||
* Old:
|
||||
* $doc = new document_export($vorlage->vorlage_kurzbz, $oe_kurzbz, $version);
|
||||
* $doc->setFilename($filename);
|
||||
* $doc->addDataXML($data);
|
||||
* $doc->addImage($imagepath, $imagename, $imagecontenttype);
|
||||
* $doc->create($outputformat);
|
||||
* $doc->output(true);
|
||||
* $doc->close();
|
||||
*
|
||||
* New:
|
||||
* $xml_data = $this->documentexportlib->getDataXML($data);
|
||||
* $images = [[
|
||||
* 'path' => $imagepath,
|
||||
* 'name' => $imagename,
|
||||
* 'contenttype' => $imagecontenttype
|
||||
* ]];
|
||||
* $this->documentexportlib->showContent(
|
||||
* $filename,
|
||||
* $vorlage,
|
||||
* $xml_data,
|
||||
* $oe_kurzbz,
|
||||
* $version,
|
||||
* $outputformat,
|
||||
* null,
|
||||
* null,
|
||||
* $images
|
||||
* );
|
||||
*/
|
||||
class DocumentExportLib
|
||||
{
|
||||
private $unoconv_version;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Gets CI instance
|
||||
$this->ci =& get_instance();
|
||||
|
||||
// Load Phrases
|
||||
$this->ci->load->library('PhrasesLib', ['document_export', null], 'documentExportPhrases');
|
||||
|
||||
// Which document converter has to be used
|
||||
if (defined('DOCSBOX_ENABLED') && DOCSBOX_ENABLED === true)
|
||||
{
|
||||
// Use docsbox!!
|
||||
}
|
||||
else
|
||||
{
|
||||
exec('unoconv --version', $ret_arr);
|
||||
|
||||
if(isset($ret_arr[0]))
|
||||
{
|
||||
$hlp = explode(' ', $ret_arr[0]);
|
||||
if(isset($hlp[1]))
|
||||
{
|
||||
$this->unoconv_version = $hlp[1];
|
||||
}
|
||||
else
|
||||
show_error($this->ci->documentExportPhrases->t("document_export", "error_unoconv_version"));
|
||||
}
|
||||
else
|
||||
show_error($this->ci->documentExportPhrases->t("document_export", "error_unoconv"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die XML Daten fuer die XSL Transformation anhand eines Arrays
|
||||
*
|
||||
* @param array $data Array mit Daten
|
||||
* @param string $root Bezeichnung des Root Nodes
|
||||
*
|
||||
* @return DOMDocument
|
||||
*/
|
||||
public function getDataArray($data, $root)
|
||||
{
|
||||
$xml_data = new DOMDocument();
|
||||
$xml_data->loadXML($this->convertArrayToXML($data, $root));
|
||||
return $xml_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* XML Daten fuer die XSL Transformation
|
||||
*
|
||||
* @param string $xml
|
||||
*
|
||||
* @return DOMDocument
|
||||
*/
|
||||
public function getDataXML($xml)
|
||||
{
|
||||
$xml_data = new DOMDocument();
|
||||
$xml_data->loadXML($xml);
|
||||
return $xml_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL zu XML Datei die fuer XSLTransformation verwendet werden soll
|
||||
*
|
||||
* @param string $xml URL to XML
|
||||
* @param string $params GET parameter
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getDataURL($xml, $params)
|
||||
{
|
||||
$xml_found = false;
|
||||
|
||||
$aktive_addons = array_filter(array_map('trim', explode(";", ACTIVE_ADDONS)));
|
||||
foreach($aktive_addons as $addon) {
|
||||
$xmlfile = DOC_ROOT . 'addons/' . $addon . '/rdf/' . $xml;
|
||||
if (file_exists($xmlfile)) {
|
||||
$xml_found = true;
|
||||
$xml_url = XML_ROOT . '../addons/' . $addon . '/rdf/' . $xml . '?' . $params;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$xml_found)
|
||||
$xml_url = XML_ROOT . $xml . '?' . $params;
|
||||
|
||||
|
||||
// Load the XML source
|
||||
$xml_data = new DOMDocument;
|
||||
|
||||
if (!$xml_data->load($xml_url))
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_xml_load", [
|
||||
"url" => $xml_url,
|
||||
"xml" => $xml,
|
||||
"params" => $params
|
||||
]));
|
||||
|
||||
return success($xml_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a XML Tag for signatur to the document
|
||||
*
|
||||
* @param DomDocument $xml_data
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function addSignToData($xml_data)
|
||||
{
|
||||
$signblock = $xml_data->createElement("signed", "true");
|
||||
$xml_data->documentElement->appendChild($signblock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a XML Tag for archive to the document
|
||||
*
|
||||
* @param DomDocument $xml_data
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addArchiveToData($xml_data)
|
||||
{
|
||||
$archiv = $xml_data->createElement("archivierbar", "true");
|
||||
$xml_data->documentElement->appendChild($archiv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the contents of a Document
|
||||
*
|
||||
* @param stdClass $vorlage A db entry from tbl_vorlage
|
||||
* @param DomDocument $xml_data
|
||||
* @param string $oe_kurzbz
|
||||
* @param integer|null $version (optional)
|
||||
* @param string $outputformat (optional)
|
||||
* @param string $sign_user (optional) Must be a valid uid
|
||||
* @param string $sign_profile (optional) Signatureprofile for signing
|
||||
* @param array $images (optional) Each element should have a property path, name & contenttype which are all strings
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getContent(
|
||||
$vorlage,
|
||||
$xml_data,
|
||||
$oe_kurzbz,
|
||||
$version = null,
|
||||
$outputformat = null,
|
||||
$sign_user = null,
|
||||
$sign_profile = null,
|
||||
$images = []
|
||||
) {
|
||||
$source_folder = getcwd();
|
||||
$temp_folder = sys_get_temp_dir() . '/fhcunoconv-' . uniqid();
|
||||
|
||||
$outputformat = $this->getDefaultOutputFormat($outputformat, $vorlage->mimetype);
|
||||
|
||||
$result = $this->createAndSignContent(
|
||||
$temp_folder,
|
||||
$outputformat,
|
||||
$vorlage,
|
||||
$oe_kurzbz,
|
||||
$version,
|
||||
$xml_data,
|
||||
$images,
|
||||
$sign_user,
|
||||
$sign_profile
|
||||
);
|
||||
if (isError($result)) {
|
||||
$this->close($temp_folder, $source_folder);
|
||||
return $result;
|
||||
}
|
||||
$temp_filename = getData($result);
|
||||
|
||||
$fsize = filesize($temp_filename);
|
||||
$handle = fopen($temp_filename, 'r');
|
||||
if (!$handle)
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_file_load"));
|
||||
$result = fread($handle, $fsize);
|
||||
fclose($handle);
|
||||
|
||||
$this->close($temp_folder, $source_folder);
|
||||
|
||||
return success($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the headers and displays the Document.
|
||||
* On failure the exit() function will be called
|
||||
*
|
||||
* @param string $filename
|
||||
* @param stdClass $vorlage A db entry from tbl_vorlage
|
||||
* @param DomDocument $xml_data
|
||||
* @param string $oe_kurzbz
|
||||
* @param integer|null $version (optional)
|
||||
* @param string $outputformat (optional)
|
||||
* @param string $sign_user (optional) Must be a valid uid
|
||||
* @param string $sign_profile (optional) Signatureprofile for signing
|
||||
* @param array $images (optional) Each element should have a property path, name & contenttype which are all strings
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function showContent(
|
||||
$filename,
|
||||
$vorlage,
|
||||
$xml_data,
|
||||
$oe_kurzbz,
|
||||
$version = null,
|
||||
$outputformat = null,
|
||||
$sign_user = null,
|
||||
$sign_profile = null,
|
||||
$images = []
|
||||
) {
|
||||
$source_folder = getcwd();
|
||||
$temp_folder = sys_get_temp_dir() . '/fhcunoconv-' . uniqid();
|
||||
|
||||
$outputformat = $this->getDefaultOutputFormat($outputformat, $vorlage->mimetype);
|
||||
|
||||
$result = $this->createAndSignContent(
|
||||
$temp_folder,
|
||||
$outputformat,
|
||||
$vorlage,
|
||||
$oe_kurzbz,
|
||||
$version,
|
||||
$xml_data,
|
||||
$images,
|
||||
$sign_user,
|
||||
$sign_profile
|
||||
);
|
||||
if (isError($result)) {
|
||||
$this->close($temp_folder, $source_folder);
|
||||
exit(getError($result));
|
||||
}
|
||||
$temp_filename = getData($result);
|
||||
|
||||
$fsize = filesize($temp_filename);
|
||||
$handle = fopen($temp_filename, 'r');
|
||||
if (!$handle) {
|
||||
$this->close($temp_folder, $source_folder);
|
||||
exit($this->ci->documentExportPhrases->t("document_export", "error_file_load"));
|
||||
}
|
||||
|
||||
if (headers_sent()) {
|
||||
$this->close($temp_folder, $source_folder);
|
||||
exit($this->ci->documentExportPhrases->t("document_export", "error_headers"));
|
||||
}
|
||||
|
||||
switch ($outputformat) {
|
||||
case 'pdf':
|
||||
header('Content-type: application/pdf');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '.pdf"');
|
||||
header('Content-Length: ' . $fsize);
|
||||
break;
|
||||
|
||||
case 'doc':
|
||||
header('Content-type: application/vnd.ms-word');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '.doc"');
|
||||
header('Content-Length: ' . $fsize);
|
||||
break;
|
||||
|
||||
case 'odt':
|
||||
header('Content-type: application/vnd.oasis.opendocument.text');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '.odt"');
|
||||
header('Content-Length: ' . $fsize);
|
||||
break;
|
||||
default:
|
||||
$this->close($temp_folder, $source_folder);
|
||||
exit($this->ci->documentExportPhrases->t("document_export", "error_outputformat_missing"));
|
||||
}
|
||||
|
||||
while (!feof($handle)) {
|
||||
echo fread($handle, 8192);
|
||||
}
|
||||
fclose($handle);
|
||||
|
||||
$this->close($temp_folder, $source_folder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for getContent and showContent.
|
||||
* Creates the temp folder and calls create and sign functions.
|
||||
*
|
||||
* @param string $temp_folder
|
||||
* @param string $outputformat
|
||||
* @param stdClass $vorlage
|
||||
* @param string $oe_kurzbz
|
||||
* @param integer $version
|
||||
* @param DomDocument $xml_data
|
||||
* @param array $images Each element should have a property path, name and contenttype which are all strings
|
||||
* @param string $sign_user Must be a valid uid
|
||||
* @param string $sign_profile Signatureprofile for signing
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
protected function createAndSignContent(
|
||||
$temp_folder,
|
||||
$outputformat,
|
||||
$vorlage,
|
||||
$oe_kurzbz,
|
||||
$version,
|
||||
$xml_data,
|
||||
$images,
|
||||
$sign_user,
|
||||
$sign_profile
|
||||
) {
|
||||
mkdir($temp_folder);
|
||||
chdir($temp_folder);
|
||||
|
||||
$this->ci->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
|
||||
|
||||
$result = $this->ci->VorlagestudiengangModel->getCurrent($vorlage->vorlage_kurzbz, $oe_kurzbz, $version);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!hasData($result))
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_template_missing"));
|
||||
$vorlage_stg = current(getData($result));
|
||||
foreach ($vorlage_stg as $k => $v)
|
||||
$vorlage->$k = $v;
|
||||
|
||||
$result = $this->create($temp_folder, $outputformat, $vorlage, $xml_data, $images);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$temp_filename = getData($result);
|
||||
|
||||
if ($sign_user) {
|
||||
$this->addSignToData($xml_data);
|
||||
|
||||
$result = $this->sign($temp_folder, $temp_filename, $outputformat, $sign_user, $sign_profile);
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$temp_filename = getData($result);
|
||||
}
|
||||
|
||||
return success($temp_filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for createAndSignContent.
|
||||
* Creates the files in the temp folder.
|
||||
*
|
||||
* @param string $temp_folder
|
||||
* @param string $outputformat
|
||||
* @param stdClass $vorlage
|
||||
* @param DomDocument $xml_data
|
||||
* @param array $images Each element should have a property path, name and contenttype which are all strings
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
protected function create($temp_folder, $outputformat, $vorlage, $xml_data, $images)
|
||||
{
|
||||
$content_xsl = new DOMDocument();
|
||||
if (!$content_xsl->loadXML($vorlage->text))
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_xsl_load"));
|
||||
|
||||
$proc = new XSLTProcessor();
|
||||
$proc->importStyleSheet($content_xsl);
|
||||
|
||||
$contentbuffer = $proc->transformToXml($xml_data);
|
||||
|
||||
file_put_contents($temp_folder . '/content.xml', $contentbuffer);
|
||||
|
||||
if ($xml_data->firstChild->tagName == 'error')
|
||||
return error($xml_data->firstChild->textContent);
|
||||
|
||||
// styles.xml erstellen
|
||||
if ($vorlage->style) {
|
||||
$styles_xsl = new DOMDocument();
|
||||
if (!$styles_xsl->loadXML($vorlage->style))
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_styles_load"));
|
||||
$style_proc = new XSLTProcessor();
|
||||
$style_proc->importStyleSheet($styles_xsl);
|
||||
|
||||
$stylesbuffer = $style_proc->transformToXml($xml_data);
|
||||
|
||||
file_put_contents($temp_folder . '/styles.xml', $stylesbuffer);
|
||||
}
|
||||
|
||||
// Template holen
|
||||
$vorlage_found = false;
|
||||
$vorlage_filename = $vorlage->vorlage_kurzbz . ($vorlage->mimetype == 'application/vnd.oasis.opendocument.spreadsheet' ? '.ods' : '.odt');
|
||||
|
||||
$aktive_addons = array_filter(array_map('trim', explode(";", ACTIVE_ADDONS)));
|
||||
foreach($aktive_addons as $addon) {
|
||||
$zipfile = DOC_ROOT . 'addons/' . $addon . '/system/vorlage_zip/' . $vorlage_filename;
|
||||
|
||||
if (file_exists($zipfile)) {
|
||||
$vorlage_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$vorlage_found)
|
||||
$zipfile = DOC_ROOT . 'system/vorlage_zip/' . $vorlage_filename;
|
||||
|
||||
$tempname_zip = $temp_folder . '/out.zip';
|
||||
|
||||
if (!copy($zipfile, $tempname_zip))
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_file_copy"));
|
||||
|
||||
exec("zip $tempname_zip content.xml");
|
||||
if (!is_null($styles_xsl))
|
||||
exec("zip $tempname_zip styles.xml");
|
||||
|
||||
// bilder hinzufuegen
|
||||
if (count($images) > 0)
|
||||
{
|
||||
// Unterordner fuer die Bilder erstellen
|
||||
mkdir('Pictures');
|
||||
|
||||
// Manifest Datei holen
|
||||
exec('unzip ' . $tempname_zip . ' META-INF/manifest.xml');
|
||||
|
||||
// Bild zur Manifest Datei hinzufuegen
|
||||
$manifest = file_get_contents('META-INF/manifest.xml');
|
||||
|
||||
$manifest_xml = new DOMDocument;
|
||||
if (!$manifest_xml->loadXML($manifest))
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_manifest"));
|
||||
|
||||
//root-node holen
|
||||
$root = $manifest_xml->getElementsByTagName('manifest')->item(0);
|
||||
|
||||
foreach ($images as $bild) {
|
||||
copy($bild['path'], 'Pictures/' . $bild['name']);
|
||||
|
||||
//Neues Element unterhalb des Root Nodes anlegen
|
||||
$node = $manifest_xml->createElement("manifest:file-entry");
|
||||
$node->setAttribute("manifest:full-path", 'Pictures/' . $bild['name']);
|
||||
$node->setAttribute("manifest:media-type", $bild['contenttype']);
|
||||
$root->appendChild($node);
|
||||
}
|
||||
|
||||
$out = $manifest_xml->saveXML();
|
||||
|
||||
//geaenderte Manifest Datei speichern und wieder ins Zip packen
|
||||
file_put_contents('META-INF/manifest.xml', $out);
|
||||
exec('zip ' . $tempname_zip . ' META-INF/*');
|
||||
|
||||
// Bilder zum ZIP-File hinzufuegen
|
||||
exec('zip ' . $tempname_zip . ' Pictures/*');
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
|
||||
switch ($outputformat) {
|
||||
case 'pdf':
|
||||
case 'doc':
|
||||
$ret = 0;
|
||||
$temp_filename = $temp_folder . '/out.' . $outputformat;
|
||||
|
||||
if (defined('DOCSBOX_ENABLED') && DOCSBOX_ENABLED === true) {
|
||||
// Use docsbox
|
||||
|
||||
$this->ci->load->library("DocsboxLib");
|
||||
|
||||
$docboxlib = get_class($this->ci->docboxlib);
|
||||
|
||||
$ret = $docboxlib::convert($tempname_zip, $temp_filename, $outputformat);
|
||||
} else {
|
||||
// Use unoconv
|
||||
|
||||
// Unoconv Version 0.6 hat eine Bug wodurch die Berechtigungen des PDF/Doc nicht korrekt gesetzt
|
||||
// werden. Deshalb wird dies hier speziell behandelt.
|
||||
// Die 2. Variante hat den Vorteil dass hier eine bessere Fehlerbehandlung moeglich ist
|
||||
if ($this->unoconv_version == '0.6')
|
||||
$command = 'unoconv -e IsSkipEmptyPages=false -f ' . $outputformat . ' %2$s > %1$s';
|
||||
else
|
||||
$command = 'unoconv -e IsSkipEmptyPages=false -f ' . $outputformat . ' --output %s %s 2>&1';
|
||||
|
||||
$command = sprintf($command, $temp_filename, $tempname_zip);
|
||||
|
||||
exec($command, $out, $ret);
|
||||
}
|
||||
|
||||
if ($ret)
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_conv_timeout"));
|
||||
break;
|
||||
case 'odt':
|
||||
default:
|
||||
$temp_filename = $tempname_zip;
|
||||
}
|
||||
|
||||
return success($temp_filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for createAndSignContent.
|
||||
* Signs the main file in the temp folder.
|
||||
*
|
||||
* @param string $temp_folder
|
||||
* @param string $temp_filename
|
||||
* @param string $outputformat
|
||||
* @param string $user Must be a valid uid
|
||||
* @param string $profile Signatureprofile for signing
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
protected function sign($temp_folder, $temp_filename, $outputformat, $user, $profile)
|
||||
{
|
||||
if ($outputformat != 'pdf')
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_sign_pdf"));
|
||||
|
||||
// Load the File
|
||||
$file_data = file_get_contents($temp_filename);
|
||||
|
||||
$data = new stdClass();
|
||||
$data->document = base64_encode($file_data);
|
||||
|
||||
// Signatur Profil
|
||||
if (!is_null($profile))
|
||||
$data->profile = $profile;
|
||||
else
|
||||
$data->profile = SIGNATUR_DEFAULT_PROFILE;
|
||||
|
||||
// Username des Endusers der die Signatur angefordert hat
|
||||
$data->user = $user;
|
||||
|
||||
$ch = curl_init();
|
||||
|
||||
curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL . '/' . SIGNATUR_SIGN_API);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, "FH-Complete");
|
||||
|
||||
// SSL Zertifikatsprüfung deaktivieren
|
||||
// Besser ist es das Zertifikat am Server zu installieren!
|
||||
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
|
||||
$data_string = json_encode($data, JSON_FORCE_OBJECT);
|
||||
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Content-Type: application/json',
|
||||
'Content-Length:' . mb_strlen($data_string),
|
||||
'Authorization: Basic ' . base64_encode(SIGNATUR_USER . ":" . SIGNATUR_PASSWORD)
|
||||
]);
|
||||
|
||||
$result = curl_exec($ch);
|
||||
if (curl_errno($ch)) {
|
||||
curl_close($ch);
|
||||
return error($this->ci->documentExportPhrases->t("document_export", "error_sign_timeout"));
|
||||
}
|
||||
curl_close($ch);
|
||||
$resultdata = json_decode($result);
|
||||
|
||||
// If it is success
|
||||
if (isset($resultdata->error) && $resultdata->error == 0) {
|
||||
$signed_filename = $temp_folder . '/signed.pdf';
|
||||
file_put_contents($signed_filename, base64_decode($resultdata->retval));
|
||||
return success($signed_filename);
|
||||
}
|
||||
|
||||
// otherwise if it is an error
|
||||
return error($resultdata->retval ?? $this->ci->documentExportPhrases->t("global", "unknown_error", ["error" => $result]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all files in the $temp_folder and changes back to the source_folder
|
||||
*
|
||||
* @param string $temp_folder
|
||||
* @param string $source_folder
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function close($temp_folder, $source_folder)
|
||||
{
|
||||
$files = glob($temp_folder . '/*'); // get all file names
|
||||
foreach ($files as $file)
|
||||
if (is_file($file))
|
||||
unlink($file);
|
||||
|
||||
chdir($source_folder);
|
||||
rmdir($temp_folder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert an array to XML
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $root
|
||||
* @param SimpleXMLElement $xml_data
|
||||
*
|
||||
* @return string|boolean
|
||||
*/
|
||||
private function convertArrayToXML($data, $root = null, $xml_data = null)
|
||||
{
|
||||
$_xml_data = $xml_data;
|
||||
if ($_xml_data === null)
|
||||
$_xml_data = new SimpleXMLElement($root !== null ? '<' . $root . ' />' : '<root/>');
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
if (is_numeric($key)) {
|
||||
$key = 'item' . $key; // dealing with <0/>..<n/> issues
|
||||
$this->convertArrayToXML($value, null, $_xml_data);
|
||||
} else {
|
||||
$subnode = $_xml_data->addChild($key);
|
||||
$this->convertArrayToXML($value, null, $subnode);
|
||||
}
|
||||
} else {
|
||||
// Remove UTF8 Control Characters (breaking XML)
|
||||
$value = preg_replace('/[\x00-\x1F\x7F]/u', '', $value);
|
||||
$_xml_data->addChild((string)$key, htmlspecialchars("$value"));
|
||||
}
|
||||
}
|
||||
|
||||
return $_xml_data->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default outputformat from mimetype if its not set
|
||||
*
|
||||
* @param string $outputformat
|
||||
* @param string $mimetype
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getDefaultOutputFormat($outputformat, $mimetype)
|
||||
{
|
||||
if ($outputformat)
|
||||
return $outputformat;
|
||||
|
||||
if ($mimetype == 'application/vnd.oasis.opendocument.spreadsheet')
|
||||
return 'ods';
|
||||
if ($mimetype == 'application/vnd.oasis.opendocument.text')
|
||||
return 'odt';
|
||||
|
||||
return 'pdf';
|
||||
}
|
||||
}
|
||||
@@ -371,21 +371,21 @@ class FilterCmptLib
|
||||
foreach ($filterFields as $filterField)
|
||||
{
|
||||
// If not an empty array
|
||||
if ($filterField != null)
|
||||
if (!isEmptyArray($filterField))
|
||||
{
|
||||
//
|
||||
if (isset($filterField->name) && isset($filterField->operation) && isset($filterField->condition)
|
||||
&& !isEmptyString($filterField->name) && !isEmptyString($filterField->operation)
|
||||
&& !isEmptyString($filterField->condition))
|
||||
if (isset($filterField['name']) && isset($filterField['operation']) && isset($filterField['condition'])
|
||||
&& !isEmptyString($filterField['name']) && !isEmptyString($filterField['operation'])
|
||||
&& !isEmptyString((string)$filterField['condition']))
|
||||
{
|
||||
// Fine
|
||||
$filter = new stdClass();
|
||||
$filter->name = $filterField->name;
|
||||
$filter->operation = $filterField->operation;
|
||||
$filter->condition = $filterField->condition;
|
||||
if (isset($filterField->option) && !isEmptyString($filterField->option))
|
||||
$filter->name = $filterField['name'];
|
||||
$filter->operation = $filterField['operation'];
|
||||
$filter->condition = $filterField['condition'];
|
||||
if (isset($filterField['option']) && !isEmptyString($filterField['option']))
|
||||
{
|
||||
$filter->option = $filterField->option;
|
||||
$filter->option = $filterField['option'];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1173,4 +1173,4 @@ class FilterCmptLib
|
||||
|
||||
return $filterName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ class PermissionLib
|
||||
|
||||
foreach($oe_kurzbz as $value)
|
||||
{
|
||||
$results[] = $this->isBerechtigt($berechtigung_kurzbz, $value, $art, $kostenstelle_id);
|
||||
$results[] = $this->isBerechtigt($berechtigung_kurzbz, $art, $value, $kostenstelle_id);
|
||||
}
|
||||
|
||||
if(!in_array(true, $results))
|
||||
|
||||
@@ -28,9 +28,17 @@ class GehaltsbestandteilLib
|
||||
$this->GehaltsbestandteilModel = $this->CI->GehaltsbestandteilModel;
|
||||
}
|
||||
|
||||
public function fetchGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
public function fetchGehaltsbestandteileValorisiertForChart($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
{
|
||||
return $this->GehaltsbestandteilModel->getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag, $includefuture);
|
||||
return $this->GehaltsbestandteilModel->getGehaltsbestandteileValorisiertForChart($dienstverhaeltnis_id, $stichtag, $includefuture);
|
||||
}
|
||||
|
||||
public function fetchGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null,
|
||||
$includefuture=false, $withvalorisationhistory=true)
|
||||
{
|
||||
return $this->GehaltsbestandteilModel->getGehaltsbestandteile(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture, $withvalorisationhistory
|
||||
);
|
||||
}
|
||||
|
||||
public function fetchGehaltsbestandteil($gehaltsbestandteil_id)
|
||||
|
||||
@@ -26,6 +26,8 @@ class VertragsbestandteilLib
|
||||
{
|
||||
const INCLUDE_FUTURE = true;
|
||||
const DO_NOT_INCLUDE_FUTURE = false;
|
||||
const WITH_VALORISATION_HISTORY = true;
|
||||
const NOT_WITH_VALORISATION_HISTORY = false;
|
||||
|
||||
protected $CI;
|
||||
/** @var Dienstverhaeltnis_model */
|
||||
@@ -90,10 +92,15 @@ class VertragsbestandteilLib
|
||||
return $dv;
|
||||
}
|
||||
|
||||
public function fetchVertragsbestandteile($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
public function fetchVertragsbestandteile($dienstverhaeltnis_id, $stichtag=null,
|
||||
$includefuture=false, $withvalorisationhistory=true)
|
||||
{
|
||||
$vbs = $this->VertragsbestandteilModel->getVertragsbestandteile($dienstverhaeltnis_id, $stichtag, $includefuture);
|
||||
$gbs = $this->GehaltsbestandteilLib->fetchGehaltsbestandteile($dienstverhaeltnis_id, $stichtag, $includefuture);
|
||||
$vbs = $this->VertragsbestandteilModel->getVertragsbestandteile(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture
|
||||
);
|
||||
$gbs = $this->GehaltsbestandteilLib->fetchGehaltsbestandteile(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture, $withvalorisationhistory
|
||||
);
|
||||
|
||||
$gbsByVBid = array();
|
||||
foreach( $gbs as $gb )
|
||||
|
||||
@@ -44,4 +44,27 @@ class Bisio_model extends DB_Model
|
||||
else
|
||||
return success("Bisio not found");
|
||||
}
|
||||
|
||||
/**
|
||||
* checks, if an (extension) table exists to avoid later errors
|
||||
* @param String $schema like 'extension'
|
||||
* @param String $table like 'tbl_mo_bisiozuordnung'
|
||||
* @return boolean
|
||||
*/
|
||||
public function tableExists($schema, $table)
|
||||
{
|
||||
$params = array($schema, $table);
|
||||
|
||||
$qry = "SELECT
|
||||
1
|
||||
FROM
|
||||
information_schema.role_table_grants
|
||||
WHERE
|
||||
table_schema = ?
|
||||
AND table_name = ?";
|
||||
|
||||
$result = $this->execQuery($qry, $params);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Bisstandort_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_bisstandort';
|
||||
$this->pk = 'standort_code';
|
||||
}
|
||||
}
|
||||
@@ -501,17 +501,14 @@ class Prestudentstatus_model extends DB_Model
|
||||
$this->addSelect('tbl_prestudentstatus.studiensemester_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.ausbildungssemester');
|
||||
$this->addSelect('tbl_prestudentstatus.datum');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
|
||||
$this->addSelect('tbl_prestudentstatus.insertamum');
|
||||
$this->addSelect('tbl_prestudentstatus.insertvon');
|
||||
$this->addSelect('tbl_prestudentstatus.updateamum');
|
||||
$this->addSelect('tbl_prestudentstatus.updatevon');
|
||||
$this->addSelect('tbl_prestudentstatus.orgform_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.bestaetigtam');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bestaetigtam::timestamp, 'DD.MM.YYYY') AS format_bestaetigtam");
|
||||
$this->addSelect('tbl_prestudentstatus.bestaetigtvon');
|
||||
$this->addSelect('tbl_prestudentstatus.bewerbung_abgeschicktamum');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bewerbung_abgeschicktamum::timestamp, 'DD.MM.YYYY') AS format_bewerbung_abgeschicktamum");
|
||||
$this->addSelect('tbl_prestudentstatus.anmerkung');
|
||||
$this->addSelect('plan.studienplan_id');
|
||||
$this->addSelect('plan.bezeichnung');
|
||||
|
||||
@@ -113,4 +113,61 @@ class Abschlusspruefung_model extends DB_Model
|
||||
|
||||
return success($abschlusspruefungdata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets data of an Abschlusspruefung
|
||||
* @param $student_uid
|
||||
* @return object
|
||||
*/
|
||||
public function getAbschlusspruefungForPrestudent($student_uid)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
exam.*,
|
||||
CONCAT(
|
||||
person_pruefer1.nachname || ' ',
|
||||
person_pruefer1.vorname,
|
||||
COALESCE(' ' || person_pruefer1.titelpre)
|
||||
) AS person_pruefer1,
|
||||
CONCAT(
|
||||
person_pruefer2.nachname || ' ',
|
||||
person_pruefer2.vorname,
|
||||
COALESCE(' ' || person_pruefer2.titelpre)
|
||||
) AS person_pruefer2,
|
||||
CONCAT(
|
||||
person_pruefer3.nachname || ' ',
|
||||
person_pruefer3.vorname,
|
||||
COALESCE(' ' || person_pruefer3.titelpre)
|
||||
) AS person_pruefer3,
|
||||
CONCAT(
|
||||
person_vorsitzender.nachname || ' ',
|
||||
person_vorsitzender.vorname,
|
||||
COALESCE(' ' || person_vorsitzender.titelpre)
|
||||
) AS person_vorsitzender,
|
||||
datum,
|
||||
freigabedatum,
|
||||
sponsion,
|
||||
uhrzeit,
|
||||
person_pruefer1.nachname as p1_nachname,
|
||||
person_pruefer2.nachname as p2_nachname,
|
||||
person_pruefer3.nachname as p3_nachname,
|
||||
person_vorsitzender.nachname as vorsitz_nachname,
|
||||
beurteilung.bezeichnung as beurteilung_bezeichnung,
|
||||
antritt.bezeichnung as antritt_bezeichnung
|
||||
FROM
|
||||
lehre.tbl_abschlusspruefung exam
|
||||
JOIN lehre.tbl_pruefungstyp USING (pruefungstyp_kurzbz)
|
||||
LEFT JOIN public.tbl_benutzer ben_vorsitzender ON (ben_vorsitzender.uid = vorsitz)
|
||||
LEFT JOIN public.tbl_person person_vorsitzender ON (ben_vorsitzender.person_id = person_vorsitzender.person_id)
|
||||
LEFT JOIN public.tbl_person person_pruefer1 ON (person_pruefer1.person_id = pruefer1)
|
||||
LEFT JOIN public.tbl_person person_pruefer2 ON (person_pruefer2.person_id = pruefer2)
|
||||
LEFT JOIN public.tbl_person person_pruefer3 ON (person_pruefer3.person_id = pruefer3)
|
||||
LEFT JOIN lehre.tbl_abschlussbeurteilung beurteilung USING (abschlussbeurteilung_kurzbz)
|
||||
LEFT JOIN lehre.tbl_abschlusspruefung_antritt antritt USING (pruefungsantritt_kurzbz)
|
||||
WHERE student_uid = ?
|
||||
ORDER BY exam.datum DESC
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array('student_uid' => $student_uid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Akadgrad_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_akadgrad';
|
||||
$this->pk = 'akadgrad_id';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,193 @@ class Anwesenheit_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_anwesenheit';
|
||||
$this->pk = 'anwesenheit_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen
|
||||
* Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit
|
||||
* Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit
|
||||
* Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind
|
||||
*
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param string|null (optional) $student_uid
|
||||
* @param integer|null (optional) $lehrveranstaltung_id
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid = null, $lehrveranstaltung_id = null)
|
||||
{
|
||||
$this->addSelect("vorname");
|
||||
$this->addSelect("nachname");
|
||||
$this->addSelect("wahlname");
|
||||
$this->addSelect("lehrveranstaltung_id");
|
||||
$this->addSelect("bezeichnung");
|
||||
$this->addSelect("gruppe");
|
||||
$this->addSelect("student_uid AS uid");
|
||||
$this->addSelect("COUNT(stundenplan_id) AS gesamtstunden");
|
||||
$this->addSelect("COALESCE(anwesend.summe, 0) AS anwesend");
|
||||
$this->addSelect("COALESCE(nichtanwesend.summe, 0) AS nichtanwesend");
|
||||
$this->addSelect("COALESCE(anwesend.summe, 0) + COALESCE(nichtanwesend.summe, 0) AS erfassteanwesenheit");
|
||||
$this->addSelect("CASE
|
||||
WHEN COUNT(stundenplan_id) = 0 OR COALESCE(anwesend.summe, 0) + COALESCE(nichtanwesend.summe, 0) = 0
|
||||
THEN 100
|
||||
ELSE TRUNC(100-(100/COUNT(stundenplan_id)*COALESCE(nichtanwesend.summe, 0)), 2)
|
||||
END AS prozent");
|
||||
|
||||
|
||||
$this->db->join("(
|
||||
SELECT
|
||||
semester::text AS gruppe,
|
||||
public.tbl_studentlehrverband.studiensemester_kurzbz,
|
||||
student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_studentlehrverband
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
semester || verband AS gruppe,
|
||||
public.tbl_studentlehrverband.studiensemester_kurzbz,
|
||||
student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_studentlehrverband
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
semester || verband || gruppe AS gruppe,
|
||||
public.tbl_studentlehrverband.studiensemester_kurzbz,
|
||||
student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_studentlehrverband
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
gruppe_kurzbz AS gruppe,
|
||||
public.tbl_benutzergruppe.studiensemester_kurzbz,
|
||||
uid AS student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_benutzergruppe
|
||||
JOIN public.tbl_gruppe USING (gruppe_kurzbz)
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
) a", "gruppe,studiensemester_kurzbz,studiengang_kz", "", false);
|
||||
$this->addJoin("public.tbl_benutzer b", "b.uid = student_uid");
|
||||
$this->addJoin("public.tbl_person p", "person_id");
|
||||
$this->db->join("(
|
||||
SELECT
|
||||
lehrveranstaltung_id,
|
||||
studiensemester_kurzbz, uid AS student_uid,
|
||||
SUM(einheiten) AS summe
|
||||
FROM campus.tbl_anwesenheit a
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
WHERE anwesend = TRUE
|
||||
AND studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
GROUP BY
|
||||
lehrveranstaltung_id,
|
||||
bezeichnung,
|
||||
uid,
|
||||
studiensemester_kurzbz
|
||||
) anwesend", "lehrveranstaltung_id,student_uid,studiensemester_kurzbz", "LEFT", false);
|
||||
$this->db->join("(
|
||||
SELECT
|
||||
lehrveranstaltung_id,
|
||||
studiensemester_kurzbz,
|
||||
uid AS student_uid,
|
||||
SUM(einheiten) AS summe
|
||||
FROM campus.tbl_anwesenheit a
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
WHERE anwesend = FALSE
|
||||
AND studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
GROUP BY
|
||||
lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz
|
||||
) nichtanwesend", "lehrveranstaltung_id,student_uid,studiensemester_kurzbz", "LEFT", false);
|
||||
|
||||
$this->addGroupBy("vorname");
|
||||
$this->addGroupBy("nachname");
|
||||
$this->addGroupBy("wahlname");
|
||||
$this->addGroupBy("lehrveranstaltung_id");
|
||||
$this->addGroupBy("bezeichnung");
|
||||
$this->addGroupBy("gruppe");
|
||||
$this->addGroupBy("student_uid");
|
||||
$this->addGroupBy("anwesend.summe");
|
||||
$this->addGroupBy("nichtanwesend.summe");
|
||||
|
||||
|
||||
$where = [
|
||||
"lehrveranstaltung_id >" => 0
|
||||
];
|
||||
|
||||
if ($student_uid)
|
||||
$where["student_uid"] = $student_uid;
|
||||
|
||||
if ($lehrveranstaltung_id)
|
||||
$where["lehrveranstaltung_id"] = $lehrveranstaltung_id;
|
||||
|
||||
if ($lehrveranstaltung_id) {
|
||||
$this->addOrder("nachname");
|
||||
$this->addOrder("vorname");
|
||||
} elseif ($student_uid) {
|
||||
$this->addOrder("bezeichnung");
|
||||
}
|
||||
|
||||
|
||||
$tmp = $this->dbTable;
|
||||
|
||||
$this->dbTable = "(
|
||||
SELECT
|
||||
SUM(stundenplan_id) AS stundenplan_id,
|
||||
datum,
|
||||
stunde,
|
||||
lehrveranstaltung_id,
|
||||
bezeichnung,
|
||||
studiensemester_kurzbz,
|
||||
studiengang_kz,
|
||||
TRIM(
|
||||
CASE
|
||||
WHEN stp.gruppe_kurzbz IS NOT NULL
|
||||
THEN stp.gruppe_kurzbz
|
||||
ELSE stp.semester || (
|
||||
CASE
|
||||
WHEN verband IS NULL
|
||||
THEN ''
|
||||
ELSE stp.verband
|
||||
END
|
||||
) || (
|
||||
CASE
|
||||
WHEN stp.gruppe IS NULL
|
||||
THEN ''
|
||||
ELSE stp.gruppe
|
||||
END
|
||||
)
|
||||
END
|
||||
) AS gruppe
|
||||
FROM lehre.tbl_lehrveranstaltung lv
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_stundenplan stp USING (lehreinheit_id,studiengang_kz)
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
AND (titel NOT LIKE '%Nebenprüfung%' OR titel IS NULL)
|
||||
GROUP BY
|
||||
datum,
|
||||
stunde,
|
||||
lehrveranstaltung_id,
|
||||
bezeichnung,
|
||||
studiensemester_kurzbz,
|
||||
studiengang_kz,
|
||||
stp.gruppe_kurzbz,
|
||||
stp.semester,
|
||||
stp.verband,
|
||||
stp.gruppe
|
||||
) x";
|
||||
|
||||
$result = $this->loadWhere($where);
|
||||
|
||||
$this->dbTable = $tmp;
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,45 @@ class LePruefung_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_pruefung';
|
||||
$this->pk = 'pruefung_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* gets all Pruefungen for a student_uid
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getPruefungenByStudentuid($student_uid, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$this->addSelect('tbl_pruefung.datum');
|
||||
$this->addSelect("TO_CHAR(tbl_pruefung.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
|
||||
$this->addSelect('tbl_pruefung.anmerkung');
|
||||
$this->addSelect('tbl_pruefung.pruefungstyp_kurzbz');
|
||||
$this->addSelect('tbl_pruefung.pruefung_id');
|
||||
$this->addSelect('tbl_pruefung.lehreinheit_id');
|
||||
$this->addSelect('tbl_pruefung.student_uid');
|
||||
$this->addSelect('tbl_pruefung.mitarbeiter_uid');
|
||||
$this->addSelect('tbl_pruefung.punkte');
|
||||
|
||||
$this->addSelect('tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung');
|
||||
$this->addSelect('tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||
$this->addSelect('tbl_note.bezeichnung as note_bezeichnung');
|
||||
$this->addSelect('tbl_pruefungstyp.beschreibung as typ_beschreibung');
|
||||
$this->addSelect('tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz');
|
||||
|
||||
$this->addJoin('lehre.tbl_lehreinheit', 'lehre.tbl_pruefung.lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id');
|
||||
$this->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
||||
$this->addJoin('lehre.tbl_note', 'note');
|
||||
$this->addJoin('lehre.tbl_pruefungstyp', 'pruefungstyp_kurzbz');
|
||||
|
||||
if ($studiensemester_kurzbz)
|
||||
$this->db->where("tbl_lehreinheit.studiensemester_kurzbz = ", $studiensemester_kurzbz);
|
||||
|
||||
$this->addOrder('tbl_pruefung.datum', 'DESC');
|
||||
$this->addOrder('tbl_pruefung.pruefung_id', 'DESC');
|
||||
|
||||
return $this->loadWhere([
|
||||
'student_uid' => $student_uid
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class Lehreinheit_model extends DB_Model
|
||||
$this->addOrder('lehreinheit_id');
|
||||
$les = $this->loadWhere(
|
||||
array('lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'studiensemester_kurzbz' => $studiensemester)
|
||||
'studiensemester_kurzbz' => $studiensemester)
|
||||
);
|
||||
|
||||
if (hasData($les))
|
||||
@@ -244,4 +244,63 @@ EOSQL;
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Lehreinheiten for Lehrveranstaltungen in a Studiensemester.
|
||||
* Without using tbl_lehrfach: bezeichnung and kurzbz ALWAYS from lehrveranstaltung
|
||||
* @param $lehrveranstaltung_id
|
||||
* @param $studiensemester
|
||||
* @return array with Lehreinheiten and their Lehreinheitgruppen
|
||||
*/
|
||||
public function getLesFromLvIds($lehrveranstaltung_id, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$params = array($lehrveranstaltung_id);
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
lv.lehrveranstaltung_id,
|
||||
le.lehreinheit_id,
|
||||
le.lehrform_kurzbz,
|
||||
lv.kurzbz,
|
||||
lv.bezeichnung,
|
||||
lv.semester,
|
||||
(
|
||||
SELECT
|
||||
STRING_AGG(CONCAT(leg.semester, leg.verband, leg.gruppe), ' ')
|
||||
FROM lehre.tbl_lehreinheitgruppe leg
|
||||
WHERE leg.lehreinheit_id = le.lehreinheit_id
|
||||
) AS gruppe,
|
||||
STRING_AGG(tma.kurzbz, ' ') as kuerzel
|
||||
FROM
|
||||
lehre.tbl_lehreinheit le
|
||||
JOIN
|
||||
lehre.tbl_lehrveranstaltung lv ON lv.lehrveranstaltung_id = le.lehrveranstaltung_id
|
||||
JOIN
|
||||
lehre.tbl_lehreinheitmitarbeiter ma USING (lehreinheit_id)
|
||||
JOIN
|
||||
public.tbl_mitarbeiter tma USING (mitarbeiter_uid)
|
||||
WHERE
|
||||
lv.lehrveranstaltung_id = ?
|
||||
";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$query .= " AND le.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$query .="
|
||||
GROUP BY
|
||||
lv.lehrveranstaltung_id,
|
||||
le.lehreinheit_id,
|
||||
le.lehrform_kurzbz,
|
||||
lv.kurzbz,
|
||||
lv.bezeichnung,
|
||||
lv.semester
|
||||
ORDER BY
|
||||
le.lehreinheit_id;
|
||||
";
|
||||
|
||||
return $this->execQuery($query, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,145 +16,21 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehrveranstaltungen by eventQuery string. Use with autocomplete event queries.
|
||||
* @param $eventQuery String
|
||||
* @param string $studiensemester_kurzbz Filter by Studiensemester
|
||||
* @param array $oes Filter by Organisationseinheiten
|
||||
* @return array
|
||||
*/
|
||||
public function getAutocompleteSuggestions($eventQuery, $studiensemester_kurzbz = null, $oes = null)
|
||||
{
|
||||
$subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes);
|
||||
$params = [];
|
||||
|
||||
/* filter by input string */
|
||||
if (is_string($eventQuery)) {
|
||||
$subQry.= ' AND lv.bezeichnung ILIKE ?';
|
||||
$params[] = '%' . $eventQuery . '%';
|
||||
}
|
||||
|
||||
$qry = 'SELECT DISTINCT ON (lehrveranstaltung_id) * FROM ('. $subQry. ') AS tmp';
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehrveranstaltungen with its Stg, OE and OE-type.
|
||||
* Filter by Studiensemester and Organisationseinheiten if necessary.
|
||||
* @param $eventQuery String
|
||||
* @param string $studiensemester_kurzbz Filter by Studiensemester
|
||||
* @param array $oes Filter by Organisationseinheiten
|
||||
* @param array $lv_ids Filter by Lehrveranstaltung-Ids
|
||||
* @return array
|
||||
*/
|
||||
public function getLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lv_ids = null)
|
||||
{
|
||||
$subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes);
|
||||
$qry = 'SELECT * FROM ('. $subQry. ') AS tmp';
|
||||
|
||||
if (isset($lv_ids) && is_array($lv_ids))
|
||||
{
|
||||
/* filter by lv_ids */
|
||||
$implodedLvIds = "'". implode("', '", $lv_ids). "'";
|
||||
$qry.= ' WHERE lehrveranstaltung_id IN ('. $implodedLvIds. ')';
|
||||
}
|
||||
|
||||
$qry.= ' ORDER BY stg_typ_kurzbz, orgform_kurzbz DESC';
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get basic query to retrieve Lehrveranstaltungen according to the Orgforms and Ausbildungssemesters actual Studienplan.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function _getQryLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lehrtyp_kurzbz = 'lv')
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
lv.oe_kurzbz AS lv_oe_kurzbz,
|
||||
CASE
|
||||
WHEN oe.organisationseinheittyp_kurzbz = \'Kompetenzfeld\' THEN (\'KF \' || oe.bezeichnung)
|
||||
WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung)
|
||||
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
|
||||
END AS lv_oe_bezeichnung,
|
||||
stplsem.studiensemester_kurzbz,
|
||||
studienordnung_id,
|
||||
sto.studiengang_kz,
|
||||
stpl.studienplan_id,
|
||||
stplsem.semester,
|
||||
stpl.orgform_kurzbz,
|
||||
upper(stg.typ || stg.kurzbz) AS stg_typ_kurzbz,
|
||||
stg.bezeichnung AS stg_bezeichnung,
|
||||
stgtyp.bezeichnung AS stg_typ_bezeichnung,
|
||||
lv.lehrveranstaltung_id,
|
||||
lv.semester,
|
||||
lv.bezeichnung AS lv_bezeichnung,
|
||||
(
|
||||
-- comma seperated string of all lehreinheitgruppen
|
||||
SELECT string_agg(bezeichnung, \', \') AS lehreinheitgruppe_bezeichnung
|
||||
FROM(
|
||||
-- distinct bezeichnung, as may come multiple times from different lehreinheiten
|
||||
SELECT DISTINCT ON (studiengang_kz, bezeichnung) studiengang_kz, bezeichnung FROM
|
||||
(
|
||||
-- distinct lehreinheitgruppe, as may come multiple times from different lehrform
|
||||
SELECT DISTINCT ON (legr.lehreinheitgruppe_id) legr.studiengang_kz,
|
||||
-- get Spezialgruppe or Lehrverbandgruppe
|
||||
COALESCE(
|
||||
legr.gruppe_kurzbz,
|
||||
CONCAT( UPPER(stg1.typ), UPPER(stg1.kurzbz), \'-\', legr.semester, legr.verband, legr.gruppe )
|
||||
) as bezeichnung
|
||||
FROM lehre.tbl_lehreinheitgruppe legr
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv1 USING (lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang stg1 ON stg1.studiengang_kz = legr.studiengang_kz
|
||||
WHERE lv1.lehrveranstaltung_id = lv.lehrveranstaltung_id
|
||||
AND le.studiensemester_kurzbz = stplsem.studiensemester_kurzbz
|
||||
) AS lehreinheitgruppen
|
||||
GROUP BY studiengang_kz, bezeichnung
|
||||
ORDER BY studiengang_kz DESC
|
||||
) AS uniqueLehreinheitgruppen_bezeichnung
|
||||
) AS lehreinheitgruppen_bezeichnung
|
||||
FROM
|
||||
lehre.tbl_studienplan stpl
|
||||
JOIN lehre.tbl_studienordnung sto USING (studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester stplsem USING (studienplan_id)
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung stpllv ON (stpllv.studienplan_id = stpl.studienplan_id AND stpllv.semester = stplsem.semester)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
|
||||
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz
|
||||
JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ
|
||||
/* filter by lehrtyp_kurzbz, default is lvs only */
|
||||
WHERE
|
||||
lehrtyp_kurzbz = '. $this->db->escape($lehrtyp_kurzbz);
|
||||
|
||||
if (isset($studiensemester_kurzbz) && is_string($studiensemester_kurzbz))
|
||||
{
|
||||
/* filter by studiensemester */
|
||||
$qry.= ' AND stplsem.studiensemester_kurzbz = '. $this->db->escape($studiensemester_kurzbz);
|
||||
|
||||
}
|
||||
|
||||
if (isset($oes) && is_array($oes))
|
||||
{
|
||||
/* filter by organisationseinheit */
|
||||
$implodedOes = "'". implode("', '", $oes). "'";
|
||||
$qry.= ' AND lv.oe_kurzbz IN ('. $implodedOes. ')';
|
||||
}
|
||||
|
||||
return $qry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Templates and union with all Lehrveranstaltungen of given Studiensemester and Oes, that are assigned to
|
||||
* a template. This data structure can be used for nested tabulator data tree.
|
||||
* Get all Templates and its assigned Lehrveranstaltungen of given Studiensemester and Oes.
|
||||
* Lvs are queried via actual Studienordnung and Studienplan.
|
||||
*
|
||||
* @param null|string $studiensemester_kurzbz
|
||||
* @param null|array $oes
|
||||
* @param null $lehrveranstaltung_id Queries certain LV only
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getTemplateLvTree($studiensemester_kurzbz = null, $oes = null){
|
||||
public function getTemplateLvTree($studiensemester_kurzbz = null, $oes = null, $studienjahr_kurzbz = null){
|
||||
|
||||
if (is_string($studiensemester_kurzbz) && is_string($studienjahr_kurzbz))
|
||||
{
|
||||
return error('Query not possible for both studiensemester and studienjahr');
|
||||
}
|
||||
|
||||
$params = [];
|
||||
$qry = '
|
||||
WITH
|
||||
@@ -189,6 +65,17 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
|
||||
}
|
||||
|
||||
if (is_string($studienjahr_kurzbz)) {
|
||||
/* filter by studiensemester */
|
||||
$params[] = $studienjahr_kurzbz;
|
||||
$qry .= '
|
||||
AND stplsem.studiensemester_kurzbz IN (
|
||||
SELECT studiensemester_kurzbz
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studienjahr_kurzbz = ?
|
||||
)';
|
||||
}
|
||||
|
||||
if (is_array($oes))
|
||||
{
|
||||
/* filter by organisationseinheit */
|
||||
@@ -300,7 +187,15 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ
|
||||
JOIN public.tbl_organisationseinheit oe ON oe.oe_kurzbz = lv.oe_kurzbz
|
||||
ORDER BY
|
||||
oe.bezeichnung, lv.semester, lv.bezeichnung
|
||||
-- Sort by lv.bezeichnung
|
||||
lv.bezeichnung,
|
||||
-- Within each group, ensure templates appear first
|
||||
CASE
|
||||
WHEN lv.lehrtyp_kurzbz = \'tpl\' THEN 0
|
||||
ELSE 1
|
||||
END,
|
||||
-- Ensure assigend lvs follow their template, grouped by lehrveranstaltung_template_id
|
||||
COALESCE(lv.lehrveranstaltung_template_id, lv.lehrveranstaltung_id)
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
@@ -517,28 +412,29 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
/**
|
||||
* Gets Lehrveranstaltungen of a student
|
||||
* @param $student_uid
|
||||
* @param null $studiensemester_kurzbz
|
||||
* @param $studiensemester_kurzbz
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLvsByStudent($student_uid, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$params = array($student_uid);
|
||||
|
||||
$qry = "SELECT * FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM campus.vw_student_lehrveranstaltung
|
||||
WHERE uid=?";
|
||||
WHERE lehrveranstaltung_id IN(
|
||||
SELECT lehrveranstaltung_id FROM campus.vw_student_lehrveranstaltung
|
||||
WHERE uid=?";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND studiensemester_kurzbz=?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
$qry .= " AND studiensemester_kurzbz=?";
|
||||
}
|
||||
$qry .= ") OR lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM lehre.tbl_zeugnisnote WHERE student_uid=?";
|
||||
$qry .= ")";
|
||||
|
||||
$qry .= " OR lehrveranstaltung_id IN(
|
||||
SELECT lehrveranstaltung_id FROM lehre.tbl_zeugnisnote
|
||||
WHERE student_uid=?";
|
||||
$params[] = $student_uid;
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND studiensemester_kurzbz=?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= ") ORDER BY semester, bezeichnung";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
@@ -728,6 +624,37 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehreinheit.
|
||||
*
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param integer $lehrveranstaltung_id
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLeByStudent($student_uid, $studiensemester_kurzbz, $lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect("lehreinheit_id");
|
||||
|
||||
$this->addOrder("lehreinheit_id", "ASC");
|
||||
|
||||
$this->addLimit(1);
|
||||
|
||||
$tmp = $this->dbTable;
|
||||
$this->dbTable = "campus.vw_student_lehrveranstaltung";
|
||||
|
||||
$result = $this->loadWhere([
|
||||
"uid" => $student_uid,
|
||||
"lehrveranstaltung_id" => $lehrveranstaltung_id,
|
||||
"studiensemester_kurzbz" => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
$this->dbTable = $tmp;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
|
||||
* Diese funktion ist für autocomplete gedacht
|
||||
@@ -773,6 +700,28 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if given LV is a template (Quellkurs)
|
||||
*
|
||||
* @param $lehrveranstaltung_id
|
||||
* @return array|stdClass|void
|
||||
*/
|
||||
public function checkIsTemplate($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect('lehrtyp_kurzbz, lehrveranstaltung_template_id');
|
||||
$result = $this->load($lehrveranstaltung_id);
|
||||
|
||||
if (isError($result))
|
||||
return error(getError($result));
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
return success(
|
||||
getData($result)[0]->lehrtyp_kurzbz === 'tpl' &&
|
||||
getData($result)[0]->lehrveranstaltung_template_id === null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe pro angerechnetes Quereinstiegssemester.
|
||||
@@ -1010,4 +959,27 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets lehrveranstaltungen of a studiengang
|
||||
* @param integer $studiengang_kz
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLvsByStudiengangkz($studiengang_kz)
|
||||
{
|
||||
$params = array($studiengang_kz);
|
||||
|
||||
$qry = "SELECT
|
||||
*
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id IN
|
||||
(SELECT lehrveranstaltung_id
|
||||
FROM campus.vw_student_lehrveranstaltung
|
||||
WHERE studiengang_kz = ?";
|
||||
|
||||
$qry .= ") ORDER BY semester, bezeichnung";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,4 +12,38 @@ class Lvgesamtnote_model extends DB_Model
|
||||
$this->pk = array('student_uid', 'studiensemester_kurzbz', 'lehrveranstaltung_id');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Noten
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLvGesamtNoten($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect($this->dbTable . ".*");
|
||||
$this->addSelect("n.bezeichnung AS note_bezeichnung");
|
||||
$this->addSelect("lv.bezeichnung AS lehrveranstaltung_bezeichnung");
|
||||
$this->addSelect("lv.studiengang_kz");
|
||||
$this->addSelect("UPPER(stg.typ || stg.kurzbz) AS studiengang");
|
||||
|
||||
$this->addJoin("lehre.tbl_note n", "note");
|
||||
$this->addJoin("lehre.tbl_lehrveranstaltung lv", "lehrveranstaltung_id");
|
||||
$this->addJoin("public.tbl_studiengang stg", "studiengang_kz");
|
||||
|
||||
$this->db->where($this->dbTable . ".freigabedatum <", "NOW()", false);
|
||||
|
||||
$where = [];
|
||||
if ($studiensemester_kurzbz)
|
||||
$where[$this->dbTable . ".studiensemester_kurzbz"] = $studiensemester_kurzbz;
|
||||
if ($lehrveranstaltung_id)
|
||||
$where[$this->dbTable . ".lehrveranstaltung_id"] = $lehrveranstaltung_id;
|
||||
if ($student_uid)
|
||||
$where[$this->dbTable . ".student_uid"] = $student_uid;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Note_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_note';
|
||||
$this->pk = 'note';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,34 @@ class Notenschluesselaufteilung_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_notenschluesselaufteilung';
|
||||
$this->pk = 'notenschluesselaufteilung_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert die Note zu Punkten einer Lehrveranstaltung
|
||||
*
|
||||
* @param number $points
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass returns success(null) if no entry is found
|
||||
*/
|
||||
public function getNote($points, $lehrveranstaltung_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('education/Notenschluesselzuordnung_model', 'NotenschluesselzuordnungModel');
|
||||
$notenschluessel_kurzbz = $this->NotenschluesselzuordnungModel->getKurzbzForLv($lehrveranstaltung_id, $studiensemester_kurzbz);
|
||||
|
||||
$this->addSelect("note");
|
||||
$this->addOrder("punkte", "DESC");
|
||||
$this->addLimit(1);
|
||||
|
||||
$result = $this->loadWhere([
|
||||
"notenschluessel_kurzbz" => $notenschluessel_kurzbz,
|
||||
"punkte <=" => $points
|
||||
]);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!hasData($result))
|
||||
return success(null);
|
||||
return success(current(getData($result))->note);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,71 @@ class Notenschluesselzuordnung_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_notenschluesselzuordnung';
|
||||
$this->pk = 'notenschluesselzuordnung_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert den passenden Notenschluessel zu einer Lehrveranstaltung
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return integer|null
|
||||
*/
|
||||
public function getKurzbzForLv($lehrveranstaltung_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect("notenschluessel_kurzbz");
|
||||
|
||||
$this->db->where("lehrveranstaltung_id", $lehrveranstaltung_id);
|
||||
if ($studiensemester_kurzbz) {
|
||||
$this->db->where("studiensemester_kurzbz", $studiensemester_kurzbz);
|
||||
$this->db->or_where("studiensemester_kurzbz", null);
|
||||
} else {
|
||||
$this->db->where("studiensemester_kurzbz", null);
|
||||
}
|
||||
|
||||
$result = $this->load();
|
||||
|
||||
if (!isError($result) && hasData($result))
|
||||
return current(getData($result))->notenschluessel_kurzbz;
|
||||
|
||||
|
||||
$this->addSelect("notenschluessel_kurzbz");
|
||||
|
||||
$this->addJoin("(
|
||||
WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz, depth) AS (
|
||||
SELECT oe_kurzbz, oe_parent_kurzbz, 1
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz = (
|
||||
SELECT
|
||||
oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id = " . $this->escape($lehrveranstaltung_id) . "
|
||||
)
|
||||
UNION ALL
|
||||
SELECT o.oe_kurzbz, o.oe_parent_kurzbz, oes.depth+1 AS depth
|
||||
FROM public.tbl_organisationseinheit o, oes
|
||||
WHERE o.oe_kurzbz = oes.oe_parent_kurzbz
|
||||
AND aktiv = true
|
||||
)
|
||||
SELECT * FROM oes
|
||||
) oes", "oe_kurzbz");
|
||||
|
||||
$this->addOrder("depth", "ASC");
|
||||
$this->addLimit(1);
|
||||
|
||||
if ($studiensemester_kurzbz) {
|
||||
$this->db->where_in("studiensemester_kurzbz", [$studiensemester_kurzbz, null]);
|
||||
$result = $this->load();
|
||||
} else {
|
||||
$result = $this->loadWhere([
|
||||
"studiensemester_kurzbz" => null
|
||||
]);
|
||||
}
|
||||
|
||||
if (isError($result) || !hasData($result))
|
||||
return null;
|
||||
|
||||
return current(getData($result))->notenschluessel_kurzbz;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Pruefungsantritt_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_abschlusspruefung_antritt';
|
||||
$this->pk = 'pruefungsantritt_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,15 @@ class Studierendenantraglehrveranstaltung_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all LVs for a repeating prestudent that are either not allowed or
|
||||
* already done.
|
||||
*
|
||||
* @param string $prestudent_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
@@ -66,39 +75,53 @@ class Studierendenantraglehrveranstaltung_model extends DB_Model
|
||||
);
|
||||
$this->addJoin('public.tbl_student s', 'prestudent_id');
|
||||
|
||||
// NOTE(chris): last offizell note
|
||||
$this->addJoin('(
|
||||
SELECT z.*
|
||||
FROM lehre.tbl_zeugnisnote z
|
||||
LEFT JOIN public.tbl_studiensemester zs
|
||||
USING(studiensemester_kurzbz)
|
||||
JOIN (
|
||||
SELECT zi.lehrveranstaltung_id, zi.student_uid, MAX(zis.start) AS start
|
||||
FROM lehre.tbl_zeugnisnote zi
|
||||
LEFT JOIN lehre.tbl_note zin
|
||||
USING(note)
|
||||
LEFT JOIN public.tbl_studiensemester zis
|
||||
USING(studiensemester_kurzbz)
|
||||
WHERE zin.aktiv AND zin.offiziell
|
||||
GROUP BY zi.lehrveranstaltung_id, zi.student_uid
|
||||
) zx
|
||||
ON (
|
||||
z.lehrveranstaltung_id=zx.lehrveranstaltung_id
|
||||
AND z.student_uid=zx.student_uid
|
||||
AND zs.start = zx.start
|
||||
)) z', 'z.lehrveranstaltung_id=lv.lehrveranstaltung_id AND z.student_uid=s.student_uid', 'LEFT');
|
||||
$this->addJoin('lehre.tbl_note zn', 'z.note = zn.note', 'LEFT');
|
||||
|
||||
|
||||
$this->load->config('studierendenantrag');
|
||||
$note_intern_angerechntet = $this->config->item('wiederholung_note_angerechnet');
|
||||
|
||||
return $this->loadWhere([
|
||||
$where = [
|
||||
'ps.prestudent_id' => $prestudent_id,
|
||||
'a.typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG,
|
||||
'stat.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
|
||||
'n.note <> ' => 0,
|
||||
$this->dbTable . '.studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'(n.note<>' . $this->db->escape($note_intern_angerechntet) . ' OR (z.note IS NOT NULL AND zn.positiv))' => null
|
||||
]);
|
||||
// NOTE(chris): grade "intern angerechnet" needs an official grade beforehand (the subquery gets the last positive offical grade)
|
||||
"(n.note<>" . $this->db->escape($note_intern_angerechntet) . " OR EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote z
|
||||
LEFT JOIN public.tbl_studiensemester zs USING(studiensemester_kurzbz)
|
||||
JOIN (
|
||||
SELECT
|
||||
zi.lehrveranstaltung_id,
|
||||
zi.student_uid,
|
||||
MAX(zis.start) AS start
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote zi
|
||||
LEFT JOIN lehre.tbl_note zin USING(note)
|
||||
LEFT JOIN public.tbl_studiensemester zis USING(studiensemester_kurzbz)
|
||||
WHERE
|
||||
zin.aktiv
|
||||
AND zin.offiziell
|
||||
GROUP BY
|
||||
zi.lehrveranstaltung_id,
|
||||
zi.student_uid
|
||||
) zx ON (
|
||||
z.lehrveranstaltung_id = zx.lehrveranstaltung_id
|
||||
AND z.student_uid = zx.student_uid
|
||||
AND zs.start = zx.start
|
||||
)
|
||||
JOIN lehre.tbl_note zn USING (note)
|
||||
WHERE
|
||||
z.lehrveranstaltung_id = lv.lehrveranstaltung_id
|
||||
AND z.student_uid = s.student_uid
|
||||
AND zn.positiv
|
||||
))" => null
|
||||
];
|
||||
|
||||
if ($studiensemester_kurzbz !== false)
|
||||
$where[$this->dbTable . '.studiensemester_kurzbz'] = $studiensemester_kurzbz;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,45 +177,63 @@ class Zeugnisnote_model extends DB_Model
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry = "SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
|
||||
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
|
||||
vw_student_lehrveranstaltung.ects, vw_student_lehrveranstaltung.semesterstunden,
|
||||
tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id,
|
||||
vw_student_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung,
|
||||
vw_student_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung,
|
||||
tbl_note.positiv as note_positiv,
|
||||
tbl_zeugnisnote.bemerkung as bemerkung,
|
||||
vw_student_lehrveranstaltung.sort,
|
||||
vw_student_lehrveranstaltung.zeugnis,
|
||||
vw_student_lehrveranstaltung.studiengang_kz,
|
||||
vw_student_lehrveranstaltung.lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
(
|
||||
campus.vw_student_lehrveranstaltung LEFT JOIN lehre.tbl_zeugnisnote
|
||||
ON(uid=student_uid
|
||||
AND vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_zeugnisnote.studiensemester_kurzbz
|
||||
AND vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
|
||||
)
|
||||
) LEFT JOIN lehre.tbl_note USING(note)
|
||||
JOIN lehre.tbl_lehrveranstaltung ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||
WHERE true $where
|
||||
$qry = "SELECT
|
||||
a.*,
|
||||
lv.lehrform_kurzbz AS lehrveranstaltung_lehrform,
|
||||
lv.kurzbz AS lehrveranstaltung_kurzbz,
|
||||
UPPER(stg1.typ || stg1.kurzbz) AS studiengang,
|
||||
s.studiengang_kz AS studiengang_kz,
|
||||
UPPER(stg2.typ || stg2.kurzbz) AS studiengang_lv,
|
||||
lv.studiengang_kz AS studiengang_kz_lv,
|
||||
lv.semester AS semester_lv,
|
||||
lv.ects AS ects_lv,
|
||||
lv.zeugnis,
|
||||
lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english
|
||||
FROM (
|
||||
SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
|
||||
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
|
||||
vw_student_lehrveranstaltung.ects, vw_student_lehrveranstaltung.semesterstunden,
|
||||
tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id,
|
||||
vw_student_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung,
|
||||
vw_student_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung,
|
||||
tbl_note.positiv as note_positiv,
|
||||
tbl_zeugnisnote.bemerkung as bemerkung,
|
||||
vw_student_lehrveranstaltung.sort,
|
||||
vw_student_lehrveranstaltung.zeugnis,
|
||||
vw_student_lehrveranstaltung.studiengang_kz,
|
||||
vw_student_lehrveranstaltung.lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
(
|
||||
campus.vw_student_lehrveranstaltung LEFT JOIN lehre.tbl_zeugnisnote
|
||||
ON(uid=student_uid
|
||||
AND vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_zeugnisnote.studiensemester_kurzbz
|
||||
AND vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
|
||||
)
|
||||
) LEFT JOIN lehre.tbl_note USING(note)
|
||||
JOIN lehre.tbl_lehrveranstaltung ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||
WHERE true $where
|
||||
|
||||
UNION
|
||||
SELECT lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,student_uid AS uid,studiensemester_kurzbz, note, punkte,
|
||||
uebernahmedatum, benotungsdatum,lehre.tbl_lehrveranstaltung.ects,lehre.tbl_lehrveranstaltung.semesterstunden, tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id, lehre.tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, lehre.tbl_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung, tbl_note.positiv as note_positiv, tbl_zeugnisnote.bemerkung as bemerkung, tbl_lehrveranstaltung.sort, tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.studiengang_kz,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_note USING(note)
|
||||
WHERE true $where2
|
||||
UNION
|
||||
SELECT lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,student_uid AS uid,studiensemester_kurzbz, note, punkte,
|
||||
uebernahmedatum, benotungsdatum,lehre.tbl_lehrveranstaltung.ects,lehre.tbl_lehrveranstaltung.semesterstunden, tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id, lehre.tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, lehre.tbl_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung, tbl_note.positiv as note_positiv, tbl_zeugnisnote.bemerkung as bemerkung, tbl_lehrveranstaltung.sort, tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.studiengang_kz,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_note USING(note)
|
||||
WHERE true $where2
|
||||
|
||||
ORDER BY sort";
|
||||
ORDER BY sort
|
||||
) a
|
||||
LEFT JOIN public.tbl_student s ON (a.uid = s.student_uid)
|
||||
LEFT JOIN public.tbl_studiengang stg1 ON (s.studiengang_kz = stg1.studiengang_kz)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang stg2 ON (lv.studiengang_kz = stg2.studiengang_kz)";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
class Studienjahr_model extends DB_Model
|
||||
{
|
||||
|
||||
@@ -29,6 +30,22 @@ class Studienjahr_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
public function getNextStudienjahr()
|
||||
{
|
||||
$this->addJoin('public.tbl_studiensemester', 'studienjahr_kurzbz');
|
||||
$this->addOrder('start');
|
||||
$this->addLimit(1);
|
||||
|
||||
return $this->loadWhere(['start >' => 'NOW()']);
|
||||
}
|
||||
public function getNextFrom($studienjahr_kurzbz)
|
||||
{
|
||||
$this->addLimit(1);
|
||||
|
||||
return $this->loadWhere([
|
||||
'studienjahr_kurzbz >' => $studienjahr_kurzbz
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current Studienjahr. During the summer term, continue using the previous Studienjahr.
|
||||
@@ -38,8 +55,7 @@ class Studienjahr_model extends DB_Model
|
||||
*/
|
||||
public function getLastOrAktStudienjahr($days = 60)
|
||||
{
|
||||
if (!is_numeric($days))
|
||||
{
|
||||
if (!is_numeric($days)) {
|
||||
$days = 60;
|
||||
}
|
||||
|
||||
@@ -63,8 +79,7 @@ class Studienjahr_model extends DB_Model
|
||||
*/
|
||||
public function getAktOrNextStudienjahr($days = 62)
|
||||
{
|
||||
if (!is_numeric($days))
|
||||
{
|
||||
if (!is_numeric($days)) {
|
||||
$days = 62;
|
||||
}
|
||||
|
||||
|
||||
@@ -225,7 +225,7 @@ class Studiensemester_model extends DB_Model
|
||||
|
||||
/**
|
||||
* @param string $student_uid
|
||||
*
|
||||
*
|
||||
* @return StdClass
|
||||
*/
|
||||
public function getWhereStudentHasLvs($student_uid)
|
||||
@@ -238,7 +238,7 @@ class Studiensemester_model extends DB_Model
|
||||
$this->db->where("v.lehreverzeichnis<>''");
|
||||
|
||||
$this->addOrder($this->dbTable . '.start');
|
||||
|
||||
|
||||
return $this->loadWhere(['uid' => $student_uid, 'v.lehre' => true]);
|
||||
}
|
||||
|
||||
@@ -291,6 +291,42 @@ class Studiensemester_model extends DB_Model
|
||||
return $studienjahrNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Studienjahr by Studiensemester.
|
||||
*
|
||||
* @param $studiensemester_kurzbz
|
||||
* @return array|stdClass
|
||||
*/
|
||||
public function getStudienjahrByStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
$studienjahrObj = null;
|
||||
|
||||
if (!is_numeric($studiensemester_kurzbz))
|
||||
{
|
||||
$this->StudiensemesterModel->addSelect('studienjahr_kurzbz');
|
||||
$result = $this->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz =' => $studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$studienjahr = getData($result)[0]->studienjahr_kurzbz;
|
||||
$startstudienjahr = substr($studienjahr, 0, 4);
|
||||
$endstudienjahr = substr($studienjahr, 0, 2) . substr($studienjahr, -2);
|
||||
|
||||
$studienjahrObj = new StdClass();
|
||||
|
||||
$studienjahrObj->studienjahr_kurzbz = $studienjahr;
|
||||
$studienjahrObj->startstudienjahr = $startstudienjahr;
|
||||
$studienjahrObj->endstudienjahr= $endstudienjahr;
|
||||
}
|
||||
|
||||
if (isError($result)) {
|
||||
return error(getError($result));
|
||||
}
|
||||
|
||||
return success($studienjahrObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt Start und Ende des Studiensemester_kurzbz
|
||||
* @param studiensemester_kurzbz
|
||||
|
||||
@@ -50,6 +50,53 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lädt alle Benutzerfunktionen zu einer UID im Zeitraum eines Studiensemesters
|
||||
*
|
||||
* @param string $uid
|
||||
* @param string $stdsem
|
||||
* @param string $funktion_kurzbz (optional)
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getBenutzerFunktionByUidInStdsem($uid, $stdsem, $funktion_kurzbz = null)
|
||||
{
|
||||
$stdsemEscaped = $this->escape($stdsem);
|
||||
$this->addSelect($this->dbTable . ".*");
|
||||
$this->addSelect("oe.bezeichnung AS organisationseinheit_bezeichnung");
|
||||
$this->addSelect("oe.organisationseinheittyp_kurzbz");
|
||||
|
||||
$this->addJoin("public.tbl_organisationseinheit oe", "oe_kurzbz");
|
||||
|
||||
$this->db->where("uid", $uid);
|
||||
|
||||
if ($funktion_kurzbz !== null)
|
||||
$this->db->where("funktion_kurzbz", $funktion_kurzbz);
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->where("datum_bis IS NULL");
|
||||
$this->db->or_where("datum_bis >=", "(
|
||||
SELECT start
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = " . $stdsemEscaped . "
|
||||
)", false);
|
||||
$this->db->group_end();
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->where("datum_von IS NULL");
|
||||
$this->db->or_where("datum_von <=", "(
|
||||
SELECT ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = " . $stdsemEscaped . "
|
||||
)", false);
|
||||
$this->db->group_end();
|
||||
|
||||
$this->addOrder("datum_bis", "NULLS LAST");
|
||||
$this->addOrder("datum_von", "NULLS LAST");
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Benutzerfunktion using the person_id
|
||||
*/
|
||||
|
||||
@@ -156,10 +156,10 @@ class Notiz_model extends DB_Model
|
||||
$qry = "
|
||||
SELECT
|
||||
n.*, count(dms_id) as countDoc, z.notizzuordnung_id,
|
||||
TO_CHAR (CASE
|
||||
(CASE
|
||||
WHEN n.updateamum >= n.insertamum THEN n.updateamum
|
||||
ELSE n.insertamum
|
||||
END::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS lastUpdate,
|
||||
END) AS lastUpdate,
|
||||
regexp_replace(n.text, '<[^>]*>', '', 'g') as text_stripped,
|
||||
TO_CHAR(n.start::timestamp, 'DD.MM.YYYY') AS start_format,
|
||||
TO_CHAR(n.ende::timestamp, 'DD.MM.YYYY') AS ende_format,
|
||||
|
||||
@@ -115,13 +115,18 @@ class Betriebsmittelperson_model extends DB_Model
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
bm.nummer, bmp.person_id, bm.betriebsmitteltyp, bmp.anmerkung as anmerkung, bmp.retouram, TO_CHAR(bmp.retouram::timestamp, 'DD.MM.YYYY') AS format_retour, bmp.ausgegebenam, TO_CHAR(bmp.ausgegebenam::timestamp, 'DD.MM.YYYY') AS format_ausgabe, bm.beschreibung, bmp.uid, bmp.kaution, bm.betriebsmittel_id, bmp.betriebsmittelperson_id, bm.inventarnummer, bm.nummer2
|
||||
bm.nummer, bmp.person_id, bm.betriebsmitteltyp, bmp.anmerkung as anmerkung,
|
||||
bmp.retouram,
|
||||
bmp.ausgegebenam,
|
||||
bm.beschreibung, bmp.uid, bmp.kaution,
|
||||
bm.betriebsmittel_id, bmp.betriebsmittelperson_id,
|
||||
bm.inventarnummer, bm.nummer2
|
||||
FROM
|
||||
wawi.tbl_betriebsmittelperson bmp
|
||||
wawi.tbl_betriebsmittelperson bmp
|
||||
JOIN
|
||||
wawi.tbl_betriebsmittel bm ON (bmp.betriebsmittel_id = bm.betriebsmittel_id)
|
||||
wawi.tbl_betriebsmittel bm ON (bmp.betriebsmittel_id = bm.betriebsmittel_id)
|
||||
WHERE
|
||||
" . $cond . " = ? ";
|
||||
" . $cond . " = ? ";
|
||||
|
||||
return $this->execQuery($query, array($id));
|
||||
}
|
||||
|
||||
@@ -217,12 +217,28 @@ class Mitarbeiter_model extends DB_Model
|
||||
return success($kurzbz);
|
||||
}
|
||||
|
||||
public function searchMitarbeiter($filter)
|
||||
/**
|
||||
* Search function for mitarbeiter
|
||||
* @param $filter searchstring: searches for nachname, vorname, mitarbeiter_uid
|
||||
* $param $mode gives the resultobject in different version:
|
||||
* null : "[mitarbeiter_uid], Nachname, Vorname, (mitarbeiter_uid)"
|
||||
* 'mitAkadGrad': "[mitarbeiter_uid], Nachname, Vorname, Titelpre, Titelpost (mitarbeiter_uid)"
|
||||
* 'ohneMaUid' : "[mitarbeiter_uid], Nachname, Vorname, Titelpre, Titelpost"
|
||||
* @return object in 3 versions
|
||||
*/
|
||||
public function searchMitarbeiter($filter, $mode=null)
|
||||
{
|
||||
$filter = strtoLower($filter);
|
||||
|
||||
if ($mode == "mitAkadGrad")
|
||||
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
elseif ($mode == "ohneMaUid")
|
||||
$returnwert = "p.person_id, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
|
||||
else
|
||||
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter
|
||||
SELECT " . $returnwert . "
|
||||
FROM
|
||||
public.tbl_mitarbeiter ma
|
||||
JOIN
|
||||
@@ -238,4 +254,28 @@ class Mitarbeiter_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Mitarbeiter for a certain Lehrveranstaltung.
|
||||
*
|
||||
* @param $lehrveranstaltung_id
|
||||
* @return array with Mitarbeiter and their Lehreinheiten
|
||||
*/
|
||||
public function getMitarbeiterFromLV($lehrveranstaltung_id){
|
||||
//TODO(manu) maybe filter that in pruefungslist.js ?
|
||||
$qry = "SELECT DISTINCT
|
||||
lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid
|
||||
FROM
|
||||
lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit
|
||||
WHERE
|
||||
lehrveranstaltung_id= ?
|
||||
AND
|
||||
mitarbeiter_uid=uid
|
||||
AND
|
||||
tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;";
|
||||
|
||||
$parametersArray = array($lehrveranstaltung_id);
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,49 @@ class Vorlagestudiengang_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_vorlagestudiengang';
|
||||
$this->pk = 'vorlagestudiengang_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Current Vorlagestudiengang
|
||||
*
|
||||
* @param string $vorlage_kurzbz
|
||||
* @param string $oe_kurzbz Or studiengang_kz
|
||||
* @param integer $version (optional)
|
||||
* @param boolean|null $active (optional)
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getCurrent($vorlage_kurzbz, $oe_kurzbz, $version = null, $active = true)
|
||||
{
|
||||
if (is_numeric($oe_kurzbz)) {
|
||||
$initselect = "SELECT oe_kurzbz, 1 AS l FROM public.tbl_studiengang WHERE studiengang_kz = " . $this->escape($oe_kurzbz);
|
||||
} else {
|
||||
$initselect = "SELECT oe_kurzbz, 1 AS l FROM public.tbl_organisationseinheit WHERE oe_kurzbz = " . $this->escape($oe_kurzbz);
|
||||
}
|
||||
|
||||
$this->addJoin("(
|
||||
WITH RECURSIVE tmp (oe_kurzbz, l) AS (
|
||||
" . $initselect . "
|
||||
UNION ALL
|
||||
SELECT o.oe_parent_kurzbz AS oe_kurzbz, l+1 AS l
|
||||
FROM tmp
|
||||
JOIN public.tbl_organisationseinheit o USING (oe_kurzbz)
|
||||
WHERE o.oe_parent_kurzbz IS NOT NULL
|
||||
) SELECT * FROM tmp
|
||||
) oe", "oe_kurzbz");
|
||||
|
||||
if (!is_null($version))
|
||||
$this->db->where('version', $version);
|
||||
if ($active)
|
||||
$this->db->where('aktiv', true);
|
||||
|
||||
$this->addOrder('l', 'ASC');
|
||||
$this->addOrder('version', 'DESC');
|
||||
$this->addLimit(1);
|
||||
|
||||
$result = $this->loadWhere([
|
||||
'vorlage_kurzbz' => $vorlage_kurzbz
|
||||
]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,14 @@ class Dienstverhaeltnis_model extends DB_Model
|
||||
}
|
||||
|
||||
$qry .="
|
||||
ORDER BY dv.von desc
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN (COALESCE(dv.bis, '2999-12-31'::date) - NOW()::date) < 0 THEN NULL
|
||||
ELSE
|
||||
(COALESCE(dv.bis, '2999-12-31'::date) - NOW()::date)
|
||||
END ASC NULLS LAST,
|
||||
COALESCE(dv.bis, '2999-12-31'::date) DESC,
|
||||
dv.von DESC
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, $data);
|
||||
|
||||
@@ -33,41 +33,84 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption
|
||||
$datestring = $date->format("Y-m-d");
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
gehaltsbestandteil_id,
|
||||
gbt.von,
|
||||
gbt.bis,
|
||||
gbt.anmerkung,
|
||||
gbt.dienstverhaeltnis_id,
|
||||
gehaltstyp_kurzbz,
|
||||
valorisierungssperre,
|
||||
gbt.valorisierung,
|
||||
grundbetrag as grund_betrag_decrypted,
|
||||
betrag_valorisiert as betrag_val_decrypted,
|
||||
gt.bezeichnung as gehaltstyp_bezeichnung,
|
||||
vb.vertragsbestandteiltyp_kurzbz,
|
||||
bf.funktion_kurzbz,
|
||||
bf.oe_kurzbz,
|
||||
fkt.beschreibung as fkt_beschreibung,
|
||||
fb.bezeichnung as fb_bezeichnung,
|
||||
org.bezeichnung as org_bezeichnung,
|
||||
freitext.freitexttyp_kurzbz,
|
||||
freitext.titel as freitext_titel
|
||||
FROM hr.tbl_gehaltsbestandteil gbt LEFT JOIN hr.tbl_gehaltstyp gt using(gehaltstyp_kurzbz)
|
||||
LEFT JOIN hr.tbl_vertragsbestandteil vb using(vertragsbestandteil_id)
|
||||
LEFT JOIN hr.tbl_vertragsbestandteil_funktion vbf using(vertragsbestandteil_id)
|
||||
LEFT JOIN public.tbl_benutzerfunktion bf using(benutzerfunktion_id)
|
||||
LEFT JOIN public.tbl_funktion fkt using(funktion_kurzbz)
|
||||
LEFT JOIN public.tbl_fachbereich fb using(fachbereich_kurzbz)
|
||||
LEFT JOIN public.tbl_organisationseinheit org on (bf.oe_kurzbz=org.oe_kurzbz)
|
||||
LEFT JOIN hr.tbl_vertragsbestandteil_freitext freitext on(vb.vertragsbestandteil_id=freitext.vertragsbestandteil_id)
|
||||
WHERE gbt.dienstverhaeltnis_id=? AND
|
||||
(gbt.von<=? and (gbt.bis is null OR gbt.bis>=?))
|
||||
ORDER BY gt.sort
|
||||
with gbt as (
|
||||
select
|
||||
gb.gehaltsbestandteil_id,
|
||||
gb.von,
|
||||
gb.bis,
|
||||
gb.anmerkung,
|
||||
gb.dienstverhaeltnis_id,
|
||||
gb.gehaltstyp_kurzbz,
|
||||
gb.valorisierungssperre,
|
||||
gb.valorisierung,
|
||||
gb.grundbetrag as grund_betrag_decrypted,
|
||||
coalesce(vh.betrag_valorisiert, gb.grundbetrag) as betrag_val_decrypted,
|
||||
gb.vertragsbestandteil_id
|
||||
from
|
||||
hr.tbl_gehaltsbestandteil gb
|
||||
LEFT JOIN
|
||||
hr.tbl_valorisierung_historie vh ON vh.gehaltsbestandteil_id = gb.gehaltsbestandteil_id AND vh.valorisierungsdatum = (
|
||||
SELECT
|
||||
vi.valorisierungsdatum
|
||||
FROM
|
||||
hr.tbl_valorisierung_instanz vi
|
||||
JOIN
|
||||
hr.tbl_dienstverhaeltnis d ON d.dienstverhaeltnis_id = ?
|
||||
AND d.oe_kurzbz = vi.oe_kurzbz
|
||||
WHERE
|
||||
? >= valorisierungsdatum
|
||||
ORDER BY
|
||||
valorisierungsdatum DESC
|
||||
LIMIT 1
|
||||
)
|
||||
where
|
||||
dienstverhaeltnis_id = ?
|
||||
and (
|
||||
? BETWEEN COALESCE(von, '1970-01-01'::date) AND COALESCE(bis, '2170-01-01'::date)
|
||||
)
|
||||
)
|
||||
select
|
||||
gbt.gehaltsbestandteil_id,
|
||||
gbt.von,
|
||||
gbt.bis,
|
||||
gbt.anmerkung,
|
||||
gbt.dienstverhaeltnis_id,
|
||||
gbt.gehaltstyp_kurzbz,
|
||||
gbt.valorisierungssperre,
|
||||
gbt.valorisierung,
|
||||
gbt.grund_betrag_decrypted,
|
||||
gbt.betrag_val_decrypted,
|
||||
gt.bezeichnung as gehaltstyp_bezeichnung,
|
||||
vb.vertragsbestandteiltyp_kurzbz,
|
||||
bf.funktion_kurzbz,
|
||||
bf.oe_kurzbz,
|
||||
fkt.beschreibung as fkt_beschreibung,
|
||||
fb.bezeichnung as fb_bezeichnung,
|
||||
org.bezeichnung as org_bezeichnung,
|
||||
freitext.freitexttyp_kurzbz,
|
||||
freitext.titel as freitext_titel
|
||||
from
|
||||
gbt
|
||||
LEFT JOIN
|
||||
hr.tbl_gehaltstyp gt using(gehaltstyp_kurzbz)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil vb using(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_funktion vbf using(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
public.tbl_benutzerfunktion bf using(benutzerfunktion_id)
|
||||
LEFT JOIN
|
||||
public.tbl_funktion fkt using(funktion_kurzbz)
|
||||
LEFT JOIN
|
||||
public.tbl_fachbereich fb using(fachbereich_kurzbz)
|
||||
LEFT JOIN
|
||||
public.tbl_organisationseinheit org on (bf.oe_kurzbz=org.oe_kurzbz)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_freitext freitext on(vb.vertragsbestandteil_id=freitext.vertragsbestandteil_id)
|
||||
";
|
||||
|
||||
return $this->execQuery($qry,
|
||||
array($dienstverhaeltnis_id, $datestring, $datestring),
|
||||
array($dienstverhaeltnis_id, $datestring, $dienstverhaeltnis_id, $datestring),
|
||||
$this->getEncryptedColumns());
|
||||
}
|
||||
|
||||
@@ -86,9 +129,38 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption
|
||||
array($dienstverhaeltnis_id),
|
||||
$this->getEncryptedColumns());
|
||||
}
|
||||
|
||||
|
||||
public function getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
public function getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null,
|
||||
$includefuture=false, $withvalorisationhistory=true)
|
||||
{
|
||||
if( !is_null($stichtag) && (time() > strtotime($stichtag))
|
||||
&& $withvalorisationhistory !== false )
|
||||
{
|
||||
$query = $this->getGehaltsbestandteileMitValorisierungsHistorie(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query = $this->getGehaltsbestandteileOhneValorisierungsHistorie(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture
|
||||
);
|
||||
}
|
||||
|
||||
$gehaltsbestandteile = array();
|
||||
if( null !== ($rows = getData($query)) )
|
||||
{
|
||||
foreach( $rows as $row ) {
|
||||
$tmpgb = new Gehaltsbestandteil();
|
||||
$tmpgb->hydrateByStdClass($row, true);
|
||||
$gehaltsbestandteile[] = $tmpgb;
|
||||
}
|
||||
}
|
||||
|
||||
return $gehaltsbestandteile;
|
||||
}
|
||||
|
||||
protected function getGehaltsbestandteileOhneValorisierungsHistorie($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
{
|
||||
$stichtagclause = '';
|
||||
if( !is_null($stichtag) )
|
||||
@@ -111,25 +183,145 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption
|
||||
{$stichtagclause}
|
||||
EOSQL;
|
||||
|
||||
$query = $this->loadWhere(
|
||||
$result = $this->loadWhere(
|
||||
$where,
|
||||
$this->getEncryptedColumns()
|
||||
);
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function getGehaltsbestandteileMitValorisierungsHistorie($dienstverhaeltnis_id, $stichtag, $includefuture=false)
|
||||
{
|
||||
$date = strftime('%Y-%m-%d', strtotime($stichtag));
|
||||
$includefuture_clause = ($includefuture)
|
||||
? ' OR COALESCE(von, \'1970-01-01\'::date) > ' . $this->escape($date)
|
||||
: '';
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
g.gehaltsbestandteil_id,
|
||||
g.dienstverhaeltnis_id,
|
||||
g.vertragsbestandteil_id,
|
||||
g.gehaltstyp_kurzbz,
|
||||
g.von,
|
||||
g.bis,
|
||||
g.anmerkung,
|
||||
g.grundbetrag AS grundbetrag,
|
||||
COALESCE(vh.betrag_valorisiert, g.grundbetrag) AS betrag_valorisiert,
|
||||
g.valorisierungssperre,
|
||||
g.insertamum,
|
||||
g.insertvon,
|
||||
g.updateamum,
|
||||
g.updatevon,
|
||||
g.valorisierung,
|
||||
g.auszahlungen
|
||||
FROM
|
||||
hr.tbl_gehaltsbestandteil g
|
||||
LEFT JOIN
|
||||
hr.tbl_valorisierung_historie vh ON vh.gehaltsbestandteil_id = g.gehaltsbestandteil_id AND vh.valorisierungsdatum = (
|
||||
SELECT
|
||||
vi.valorisierungsdatum
|
||||
FROM
|
||||
hr.tbl_valorisierung_instanz vi
|
||||
JOIN
|
||||
hr.tbl_dienstverhaeltnis d ON d.dienstverhaeltnis_id = {$this->escape($dienstverhaeltnis_id)}
|
||||
AND d.oe_kurzbz = vi.oe_kurzbz
|
||||
WHERE
|
||||
{$this->escape($date)} >= valorisierungsdatum
|
||||
ORDER BY
|
||||
valorisierungsdatum DESC
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE
|
||||
g.dienstverhaeltnis_id = {$this->escape($dienstverhaeltnis_id)}
|
||||
AND (
|
||||
{$this->escape($date)} BETWEEN COALESCE(von, '1970-01-01'::date) AND COALESCE(bis, '2170-01-01'::date)
|
||||
{$includefuture_clause}
|
||||
)
|
||||
EOSQL;
|
||||
|
||||
$result = $this->execReadOnlyQuery($sql, array(), $this->getEncryptedColumns());
|
||||
return $result;
|
||||
}
|
||||
|
||||
$gehaltsbestandteile = array();
|
||||
public function getGehaltsbestandteileValorisiertForChart($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
{
|
||||
$stichtagclause = '';
|
||||
if( !is_null($stichtag) )
|
||||
{
|
||||
$date = strftime('%Y-%m-%d', strtotime($stichtag));
|
||||
$stichtagclause = 'AND (' . $this->escape($date)
|
||||
. ' BETWEEN COALESCE(von, \'1970-01-01\'::date)'
|
||||
. ' AND COALESCE(bis, \'2170-01-01\'::date)';
|
||||
if( $includefuture )
|
||||
{
|
||||
$stichtagclause .= ' OR COALESCE(von, \'1970-01-01\'::date) > '
|
||||
. $this->escape($date);
|
||||
}
|
||||
$stichtagclause .= ')';
|
||||
}
|
||||
|
||||
// Note: replaced gb.betrag_valorisiert with vh.betrag_valorisiert!
|
||||
$qry = "
|
||||
SELECT
|
||||
gb.gehaltsbestandteil_id,gb.dienstverhaeltnis_id,gb.vertragsbestandteil_id,gb.gehaltstyp_kurzbz,
|
||||
gb.von,gb.bis,gb.anmerkung,gb.grundbetrag as grundbetrag,gb.valorisierungssperre,gb.insertamum,
|
||||
gb.insertvon,gb.updateamum,gb.updatevon,gb.valorisierung,gb.auszahlungen,
|
||||
vh.valorisierungsdatum, vh.betrag_valorisiert as betrag_valorisiert
|
||||
FROM hr.tbl_gehaltsbestandteil gb LEFT JOIN hr.tbl_valorisierung_historie vh using (gehaltsbestandteil_id)
|
||||
WHERE dienstverhaeltnis_id=?
|
||||
$stichtagclause
|
||||
ORDER BY gb.von,vh.valorisierungsdatum, gb.gehaltsbestandteil_id;
|
||||
";
|
||||
|
||||
$query = $this->execQuery($qry,
|
||||
array($dienstverhaeltnis_id),
|
||||
$this->getEncryptedColumns());
|
||||
|
||||
$gehaltsbestandteile = array();
|
||||
if( null !== ($rows = getData($query)) )
|
||||
{
|
||||
// store for preserving the last records of every gehaltsbestandteil_id
|
||||
$lastRecords = array();
|
||||
|
||||
foreach( $rows as $row ) {
|
||||
$tmpgb = new Gehaltsbestandteil();
|
||||
$tmpgb->hydrateByStdClass($row, true);
|
||||
$gehaltsbestandteile[] = $tmpgb;
|
||||
|
||||
// prevent duplication (caused by the join with historic values)
|
||||
if (!isset($lastRecords[(string)$row->gehaltsbestandteil_id])) {
|
||||
$gehaltsbestandteile[] = $tmpgb;
|
||||
$lastRecords[(string)$row->gehaltsbestandteil_id] = $tmpgb;
|
||||
}
|
||||
|
||||
if ($row->betrag_valorisiert != null && $row->valorisierungsdatum != null
|
||||
&& $row->valorisierungsdatum != $row->von && $row->valorisierungsdatum != $row->bis) {
|
||||
|
||||
// create additional row
|
||||
$tmpgbv = new Gehaltsbestandteil();
|
||||
$tmpgbv->hydrateByStdClass($row, true);
|
||||
$tmpgbv->setVon($row->valorisierungsdatum);
|
||||
$tmpgbv->setBis($lastRecords[(string)$row->gehaltsbestandteil_id]->getBis());
|
||||
// overwrite Grundbetrag with the current valorized loan
|
||||
// (otherwise the chart would show the wrong value)
|
||||
$tmpgbv->setGrundbetrag($row->betrag_valorisiert);
|
||||
$gehaltsbestandteile[] = $tmpgbv;
|
||||
|
||||
// finish previous
|
||||
$daybefore = new DateTimeImmutable($row->valorisierungsdatum);
|
||||
$daybefore = $daybefore->sub(new \DateInterval('P1D'));
|
||||
$lastRecords[(string)$row->gehaltsbestandteil_id]->setBis($daybefore->format('Y-m-d'));
|
||||
|
||||
// preserve as last row, because there might be another valorization
|
||||
$lastRecords[(string)$row->gehaltsbestandteil_id] = $tmpgbv;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $gehaltsbestandteile;
|
||||
}
|
||||
|
||||
|
||||
public function getGehaltsbestandteil($id)
|
||||
{
|
||||
$this->addSelect('*');
|
||||
|
||||
@@ -19,12 +19,17 @@ class Vertragsbestandteil_model extends DB_Model
|
||||
|
||||
protected function getVertragsbestandteilSQL()
|
||||
{
|
||||
$sapInstalled = $this->_checkIfSAPSyncTableExists();
|
||||
|
||||
$oe_kurzbz_sap = $sapInstalled ? 'sap.oe_kurzbz_sap' : 'NULL AS oe_kurzbz_sap';
|
||||
$sap_join = $sapInstalled ? 'LEFT JOIN sync.tbl_sap_organisationsstruktur sap USING(oe_kurzbz)' : '';
|
||||
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
v.*,
|
||||
bf.funktion_kurzbz, bf.uid AS mitarbeiter_uid,
|
||||
funktion.beschreibung AS funktion_bezeichnung,
|
||||
oe.oe_kurzbz, oe.bezeichnung AS oe_bezeichnung, sap.oe_kurzbz_sap,
|
||||
bf.funktion_kurzbz, bf.uid AS mitarbeiter_uid,
|
||||
funktion.beschreibung AS funktion_bezeichnung,
|
||||
oe.oe_kurzbz, oe.bezeichnung AS oe_bezeichnung, {$oe_kurzbz_sap},
|
||||
oet.organisationseinheittyp_kurzbz AS oe_typ_kurzbz, oet.bezeichnung AS oe_typ_bezeichnung,
|
||||
ft.freitexttyp_kurzbz, ft.titel, ft.anmerkung,
|
||||
f.benutzerfunktion_id,
|
||||
@@ -39,7 +44,7 @@ class Vertragsbestandteil_model extends DB_Model
|
||||
hr.tbl_vertragsbestandteil_freitext ft USING(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_funktion f USING(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
LEFT JOIN
|
||||
public.tbl_benutzerfunktion bf USING(benutzerfunktion_id)
|
||||
LEFT JOIN
|
||||
public.tbl_funktion funktion USING(funktion_kurzbz)
|
||||
@@ -47,8 +52,7 @@ class Vertragsbestandteil_model extends DB_Model
|
||||
public.tbl_organisationseinheit oe USING(oe_kurzbz)
|
||||
LEFT JOIN
|
||||
public.tbl_organisationseinheittyp oet USING(organisationseinheittyp_kurzbz)
|
||||
LEFT JOIN
|
||||
sync.tbl_sap_organisationsstruktur sap USING(oe_kurzbz)
|
||||
{$sap_join}
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_karenz k USING(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
@@ -178,4 +182,30 @@ EOSQL;
|
||||
|
||||
return $vbcount[0]->overlappingvbs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if sap sync table exists.
|
||||
* @return bool
|
||||
*/
|
||||
private function _checkIfSAPSyncTableExists()
|
||||
{
|
||||
$params = array(
|
||||
DB_NAME,
|
||||
'sync',
|
||||
'tbl_sap_organisationsstruktur'
|
||||
);
|
||||
|
||||
$sql = "SELECT
|
||||
1 AS exists
|
||||
FROM
|
||||
information_schema.tables
|
||||
WHERE
|
||||
table_catalog = ? AND
|
||||
table_schema = ? AND
|
||||
table_name = ?";
|
||||
|
||||
$res = $this->execReadOnlyQuery($sql, $params);
|
||||
|
||||
return hasData($res);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ $this->load->view(
|
||||
);
|
||||
?>
|
||||
|
||||
<iframe style="width:100%; height:100%;" id="Infoterminal" src="<?php echo base_url() . 'cis/infoterminal/?forcelogin=true'; ?>" name="Infoterminal" frameborder="0" >
|
||||
<iframe style="width:100%; height:90vh;" id="Infoterminal" src="<?php echo base_url() . 'cis/infoterminal/?forcelogin=true'; ?>" name="Infoterminal" frameborder="0" >
|
||||
No iFrames
|
||||
</iframe>
|
||||
<?php $this->load->view('templates/CISVUE-Footer', $includesArray); ?>
|
||||
|
||||
@@ -34,8 +34,10 @@
|
||||
<?php
|
||||
$configArray = [
|
||||
'generateAlias' => !defined('GENERATE_ALIAS_STUDENT') ? true : GENERATE_ALIAS_STUDENT,
|
||||
'showZgvDoktor' => !defined('ZGV_DOKTOR_ANZEIGEN') ? false : ZGV_DOKTOR_ANZEIGEN,
|
||||
'showZgvErfuellt' => !defined('ZGV_ERFUELLT_ANZEIGEN') ? false : ZGV_ERFUELLT_ANZEIGEN
|
||||
//replaced by possibility to hide each formular field via config stv.php
|
||||
#'showZgvDoktor' => !defined('ZGV_DOKTOR_ANZEIGEN') ? false : ZGV_DOKTOR_ANZEIGEN,
|
||||
#'showZgvErfuellt' => !defined('ZGV_ERFUELLT_ANZEIGEN') ? false : ZGV_ERFUELLT_ANZEIGEN
|
||||
'showHintKommPrfg' => !defined('FAS_STUDSTATUS_SHOW_KOMM_PRFG_HINT') ? false : FAS_STUDSTATUS_SHOW_KOMM_PRFG_HINT
|
||||
];
|
||||
?>
|
||||
|
||||
|
||||
@@ -1,71 +1,83 @@
|
||||
<div class="accordion" id="requestAnrechnungImportant">
|
||||
<!-- Beantragung: Fristen panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['fristen']) && $this->config->item('display_infobox')['fristen'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Beantragung" aria-expanded="true" aria-controls="Beantragung">
|
||||
<div class="d-flex">
|
||||
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenTitle'); ?>
|
||||
|
||||
<div class="accordion" id="requestAnrechnungImportant">
|
||||
<!-- Beantragung: Fristen panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#Beantragung" aria-expanded="true" aria-controls="Beantragung">
|
||||
<div class="d-flex">
|
||||
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenTitle'); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Beantragung" class="accordion-collapse collapse show" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- Referenzbeispiele ECTS Berechnung panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['referenzbeispiele_ects']) && $this->config->item('display_infobox')['referenzbeispiele_ects'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Referenzbeispiele" aria-expanded="false" aria-controls="Referenzbeispiele">
|
||||
<div class="d-flex">
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Referenzbeispiele" class="accordion-collapse collapse"
|
||||
data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Beantragung" class="accordion-collapse collapse show" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Referenzbeispiele ECTS Berechnung panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Referenzbeispiele" aria-expanded="false" aria-controls="Referenzbeispiele">
|
||||
<div class="d-flex">
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungTitle'); ?>
|
||||
<?php endif; ?>
|
||||
<!-- Nachweisdokumente: Voraussetzung panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['voraussetzungen']) && $this->config->item('display_infobox')['voraussetzungen'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="d-flex">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Nachweisdokumente" aria-expanded="false" aria-controls="Nachweisdokumente">
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Nachweisdokumente" class="accordion-collapse collapse"
|
||||
data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Referenzbeispiele" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Nachweisdokumente: Voraussetzung panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="d-flex">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Nachweisdokumente" aria-expanded="false" aria-controls="Nachweisdokumente">
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Nachweisdokumente" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- Herkunft der Kenntnisse: Angaben panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#HerkunftKenntnisse" aria-expanded="false" aria-controls="HerkunftKenntnisse">
|
||||
<div class="d-flex">
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseTitle'); ?>
|
||||
<?php if (isset($this->config->item('display_infobox')['herkunft_kenntnisse']) && $this->config->item('display_infobox')['herkunft_kenntnisse'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#HerkunftKenntnisse" aria-expanded="false" aria-controls="HerkunftKenntnisse">
|
||||
<div class="d-flex">
|
||||
<i class="me-2 fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="HerkunftKenntnisse" class="accordion-collapse collapse"
|
||||
data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="HerkunftKenntnisse" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -2,7 +2,6 @@
|
||||
$this->load->config('anrechnung');
|
||||
|
||||
$includesArray = array(
|
||||
array(
|
||||
'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'),
|
||||
'jquery3' => true,
|
||||
'jqueryui1' => true,
|
||||
@@ -50,7 +49,6 @@ $includesArray = array(
|
||||
'public/js/bootstrapper.js',
|
||||
'public/js/lehre/anrechnung/reviewAnrechnungDetail.js'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if (defined("CIS4")) {
|
||||
|
||||
@@ -1,86 +1,102 @@
|
||||
|
||||
<div class="accordion" id="requestAnrechnungImportant">
|
||||
<!-- Beantragung: Fristen panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#Beantragung" aria-expanded="true" aria-controls="Beantragung">
|
||||
<div class="d-flex">
|
||||
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenTitle'); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Beantragung" class="accordion-collapse collapse show" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Referenzbeispiele ECTS Berechnung panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Referenzbeispiele" aria-expanded="false" aria-controls="Referenzbeispiele">
|
||||
<div class="d-flex">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Referenzbeispiele" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Antrag: Voraussetzungen panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="d-flex">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Antrag" aria-expanded="false" aria-controls="Antrag">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Antrag" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Nachweisdokumente: Voraussetzung panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Nachweisdokumente" aria-expanded="false" aria-controls="Nachweisdokumente">
|
||||
<div class="d-flex">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Nachweisdokumente" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Herkunft der Kenntnisse: Angaben panel -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#HerkunftKenntnisse" aria-expanded="false" aria-controls="HerkunftKenntnisse">
|
||||
<div class="d-flex">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="HerkunftKenntnisse" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Beantragung: Fristen panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['fristen']) && $this->config->item('display_infobox')['fristen'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Beantragung" aria-expanded="true" aria-controls="Beantragung">
|
||||
<div class="d-flex">
|
||||
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenTitle'); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Beantragung" class="accordion-collapse collapse show" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- Referenzbeispiele ECTS Berechnung panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['referenzbeispiele_ects']) && $this->config->item('display_infobox')['referenzbeispiele_ects'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Referenzbeispiele" aria-expanded="false" aria-controls="Referenzbeispiele">
|
||||
<div class="d-flex">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Referenzbeispiele" class="accordion-collapse collapse"
|
||||
data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- Antrag: Voraussetzungen panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['voraussetzungen']) && $this->config->item('display_infobox')['voraussetzungen'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="d-flex">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Antrag" aria-expanded="false" aria-controls="Antrag">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Antrag" class="accordion-collapse collapse" data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- Nachweisdokumente: Voraussetzung panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['nachweisdokumente']) && $this->config->item('display_infobox')['nachweisdokumente'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#Nachweisdokumente" aria-expanded="false" aria-controls="Nachweisdokumente">
|
||||
<div class="d-flex">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="Nachweisdokumente" class="accordion-collapse collapse"
|
||||
data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- Herkunft der Kenntnisse: Angaben panel -->
|
||||
<?php if (isset($this->config->item('display_infobox')['herkunft_kenntnisse']) && $this->config->item('display_infobox')['herkunft_kenntnisse'] === true): ?>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<div class="bg-info-subtle accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#HerkunftKenntnisse" aria-expanded="false" aria-controls="HerkunftKenntnisse">
|
||||
<div class="d-flex">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseTitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
<div id="HerkunftKenntnisse" class="accordion-collapse collapse"
|
||||
data-bs-parent="#requestAnrechnungImportant">
|
||||
<div class="accordion-body">
|
||||
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
|
||||
$LOGDATA_NAME = '\'Message sent\'';
|
||||
$LOGDATA_VON = '\'online\'';
|
||||
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
|
||||
$KAUTION_DRITT_STAAT = '\'KautionDrittStaat\'';
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
@@ -62,7 +62,7 @@ $query = '
|
||||
FROM public.tbl_konto konto
|
||||
WHERE konto.person_id = p.person_id
|
||||
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
|
||||
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
|
||||
AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .'
|
||||
) AS "Kaution"
|
||||
FROM
|
||||
public.tbl_prestudentstatus pss
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
|
||||
$AKTE_TYP = '\'identity\', \'zgv_bakk\'';
|
||||
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
|
||||
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
|
||||
$KAUTION_DRITT_STAAT = '\'KautionDrittStaat\'';
|
||||
$ORG_NAME = '\'InfoCenter\'';
|
||||
$ONLINE = '\'online\'';
|
||||
|
||||
@@ -302,7 +302,7 @@
|
||||
FROM public.tbl_konto konto
|
||||
WHERE konto.person_id = p.person_id
|
||||
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
|
||||
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
|
||||
AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .'
|
||||
) AS "Kaution"
|
||||
FROM public.tbl_person p
|
||||
LEFT JOIN (
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
$ORG_NAME = '\'InfoCenter\'';
|
||||
$IDENTITY = '\'identity\'';
|
||||
$ONLINE = '\'online\'';
|
||||
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
|
||||
$KAUTION_DRITT_STAAT = '\'KautionDrittStaat\'';
|
||||
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
@@ -275,7 +276,7 @@ $query = '
|
||||
FROM public.tbl_konto konto
|
||||
WHERE konto.person_id = p.person_id
|
||||
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
|
||||
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
|
||||
AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .'
|
||||
) AS "Kaution"
|
||||
FROM public.tbl_person p
|
||||
LEFT JOIN (
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
|
||||
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
|
||||
$ORG_NAME = '\'InfoCenter\'';
|
||||
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
|
||||
$KAUTION_DRITT_STAAT = '\'KautionDrittStaat\'';
|
||||
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
@@ -206,7 +207,7 @@ $query = '
|
||||
FROM public.tbl_konto konto
|
||||
WHERE konto.person_id = p.person_id
|
||||
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
|
||||
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
|
||||
AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .'
|
||||
) AS "Kaution"
|
||||
FROM public.tbl_person p
|
||||
LEFT JOIN (
|
||||
|
||||
@@ -8,11 +8,12 @@
|
||||
'filtercomponent' => true,
|
||||
'navigationcomponent' => true,
|
||||
'tabulator5' => true,
|
||||
'primevue3' => true,
|
||||
'phrases' => array(
|
||||
'global' => array('mailAnXversandt'),
|
||||
'ui' => array('bitteEintragWaehlen')
|
||||
),
|
||||
'customJSModules' => array('public/js/apps/LogsViewer/LogsViewer.js')
|
||||
'customJSModules' => array('public/js/apps/LogsViewer/LogsViewer.js'),
|
||||
);
|
||||
|
||||
$this->load->view('templates/FHC-Header', $includesArray);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
$tablesorter2 = isset($tablesorter2) ? $tablesorter2 : false;
|
||||
$tabulator4 = isset($tabulator4) ? $tabulator4 : false;
|
||||
$tabulator5 = isset($tabulator5) ? $tabulator5 : false;
|
||||
$tabulator6 = isset($tabulator6) ? $tabulator6 : false;
|
||||
$tabulator5JQuery = isset($tabulator5JQuery) ? $tabulator5JQuery : false;
|
||||
$tinymce3 = isset($tinymce3) ? $tinymce3 : false;
|
||||
$tinymce5 = isset($tinymce5) ? $tinymce5 : false;
|
||||
|
||||
@@ -104,6 +104,8 @@
|
||||
if ($tabulator5 === true) generateJSsInclude('vendor/olifolkerd/tabulator5/dist/js/tabulator.min.js');
|
||||
// Tabulator 5 JQuery
|
||||
if ($tabulator5JQuery === true) generateJSsInclude('public/js/tabulator/jquery_wrapper.js');
|
||||
// Tabulator 6 JS
|
||||
if ($tabulator6 === true) generateJSsInclude('vendor/olifolkerd/tabulator6/dist/js/tabulator.min.js');
|
||||
// Tinymce 3 JS
|
||||
if ($tinymce3 === true) generateJSsInclude('include/tiny_mce/tiny_mce.js');
|
||||
|
||||
@@ -150,6 +152,7 @@
|
||||
generateJSsInclude('vendor/npm-asset/primevue/toastservice/toastservice.min.js');
|
||||
generateJSsInclude('vendor/npm-asset/primevue/confirmdialog/confirmdialog.min.js');
|
||||
generateJSsInclude('vendor/npm-asset/primevue/confirmationservice/confirmationservice.min.js');
|
||||
generateJSsInclude('vendor/npm-asset/primevue/tieredmenu/tieredmenu.min.js');
|
||||
}
|
||||
|
||||
if($vuedatepicker11) generateJSsInclude('vendor/vuejs/vuedatepicker_js11/vue-datepicker.iife.js');
|
||||
|
||||
@@ -82,6 +82,9 @@
|
||||
|
||||
// Tabulator 5 CSS
|
||||
if ($tabulator5 === true) generateCSSsInclude('public/css/Tabulator5.css');
|
||||
|
||||
// Tabulator 6 CSS
|
||||
if ($tabulator6 === true) generateCSSsInclude('public/css/Tabulator6.css');
|
||||
|
||||
// Tinymce 5 CSS
|
||||
if ($tinymce5 === true) generateCSSsInclude('public/css/TinyMCE5.css');
|
||||
|
||||
@@ -95,10 +95,8 @@ class TableWidget extends Widget
|
||||
*/
|
||||
public function display($widgetData)
|
||||
{
|
||||
|
||||
$this->view(self::WIDGET_URL_TABLE, array(
|
||||
'tableUniqueId' => $widgetData[TableWidgetLib::TABLE_UNIQUE_ID],
|
||||
'bootstrapVersion' => $widgetData[TableWidgetLib::TABLE_BOOTSTRAP_VERSION],
|
||||
'tableUniqueId' => $widgetData[TableWidgetLib::TABLE_UNIQUE_ID]
|
||||
)); // GUI starts here
|
||||
}
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ $projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz;
|
||||
// paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden
|
||||
$paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
||||
|
||||
if(!is_numeric($paIsCurrent) || $paIsCurrent < 0)
|
||||
if(!is_bool($paIsCurrent))
|
||||
{
|
||||
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."</font><br> ";
|
||||
}
|
||||
@@ -166,7 +166,7 @@ if(in_array($betreuerart, array('Erstbegutachter', 'Senatsvorsitz')))
|
||||
}
|
||||
|
||||
// Mail mit Token an Zweitbegutachter senden
|
||||
if (count($zweitbetreuerArr) > 0 && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id']))
|
||||
if (count($zweitbetreuerArr) > 0 && $paIsCurrent === true && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id']))
|
||||
{
|
||||
$qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid);
|
||||
if(!$result_std=$db->db_query($qry_std))
|
||||
@@ -482,7 +482,7 @@ $htmlstr .= "<table id='beurteilungheadertable' width=100%>\n";
|
||||
$htmlstr .= "<tr><td style='font-size:16px'>".$p->t('abgabetool/student').": <b>".$db->convert_html_chars($studentenname)."</b></td>";
|
||||
$htmlstr .= "<td width=10% align=center>";
|
||||
|
||||
$semester_benotbar = $paIsCurrent >= 1;
|
||||
$semester_benotbar = $paIsCurrent === true;
|
||||
$endupload_vorhanden = $num_rows_endupload >= 1;
|
||||
|
||||
if ($semester_benotbar && $endupload_vorhanden)
|
||||
@@ -495,7 +495,8 @@ if ($semester_benotbar && $endupload_vorhanden)
|
||||
}
|
||||
else
|
||||
{
|
||||
$quick_info = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenoten') : $p->t('abgabetool/keinEnduploadErfolgt');
|
||||
$quick_info = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenotenQuickInfo') : $p->t('abgabetool/keinEnduploadErfolgt');
|
||||
$info_text = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenoten') : $p->t('abgabetool/keinEnduploadErfolgt');
|
||||
$htmlstr .= "<form action='javascript:void(0);'>";
|
||||
$htmlstr .= "<input type='submit' value='".$p->t('abgabetool/benoten')."' title='".$quick_info."'
|
||||
alt='".$quick_info."' disabled>";
|
||||
@@ -516,7 +517,7 @@ else
|
||||
}
|
||||
$htmlstr .= "<tr>
|
||||
<td style='font-size:16px'>" . $p->t('abgabetool/titel') . ": <b>".$db->convert_html_chars($titel)."<b></td>
|
||||
<td align='center' class='warningtext'>".(isset($quick_info) ? $quick_info : '')."</td>
|
||||
<td align='center' class='warningtext'>".(isset($info_text) ? $info_text : '')."</td>
|
||||
<td valign=\"right\"><a href='abgabe_student_frameset.php?uid=$uid' target='_blank'>".$p->t('abgabetool/studentenansicht')."</a></td>";
|
||||
$htmlstr .= "</tr>\n";
|
||||
|
||||
@@ -544,7 +545,7 @@ if (isset($zweitbetreuerArr) && is_array($zweitbetreuerArr)) // wenn es Zweitbet
|
||||
$htmlstr .= " <img src='../../../skin/images/exclamation.png' title='" . $p->t('abgabetool/zweitBegutachterEmailFehlt') . "' alt='" . $p->t('abgabetool/zweitBegutachterEmailFehlt') . "'/>";
|
||||
|
||||
// Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist
|
||||
if (isset($zweitbetreuer->email) && !isset($zweitbetreuer->uid) && $paIsCurrent >= 1)
|
||||
if (isset($zweitbetreuer->email) && !isset($zweitbetreuer->uid) && $paIsCurrent === true)
|
||||
{
|
||||
$htmlstr .= "<form action='" . htmlspecialchars($_SERVER['PHP_SELF']) . "' method='GET' style='display: inline'>\n";
|
||||
$htmlstr .= "<input type='hidden' name='uid' value='" . $student_uid . "'>";
|
||||
|
||||
@@ -195,13 +195,13 @@ else
|
||||
$htmlstr .= "<td>";
|
||||
|
||||
if (!is_null($row->babgeschickt))
|
||||
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->betreuer_person_id ."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungErstDownload')."</a>";
|
||||
$htmlstr .= "<a href='./projektbeurteilungDocumentExport.php?betreuerart_kurzbz=" . $row->betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->betreuer_person_id ."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungErstDownload')."</a>";
|
||||
|
||||
if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt))
|
||||
$htmlstr .= "/";
|
||||
|
||||
if (!is_null($row->zweitbetreuer_abgeschickt))
|
||||
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->zweitbetreuer_betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->zweitbetreuer_person_id."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungZweitDownload')."</a>";
|
||||
$htmlstr .= "<a href='./projektbeurteilungDocumentExport.php?betreuerart_kurzbz=" . $row->zweitbetreuer_betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->zweitbetreuer_person_id."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungZweitDownload')."</a>";
|
||||
|
||||
$htmlstr .= "</td>";
|
||||
}
|
||||
|
||||
@@ -472,8 +472,8 @@ if($command=="update" && $error!=true)
|
||||
else
|
||||
{
|
||||
// paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden
|
||||
$num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
||||
if(!is_numeric($num_rows_sem) || $num_rows_sem < 0)
|
||||
$paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
||||
if(!is_bool($paIsCurrent))
|
||||
{
|
||||
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."</font><br> ";
|
||||
}
|
||||
@@ -495,7 +495,7 @@ if($command=="update" && $error!=true)
|
||||
$maildata['student_voller_name'] = trim($row_std->titelpre." ".$row_std->vorname." ".$row_std->nachname." ".$row_std->titelpost);
|
||||
$maildata['abgabetyp'] = $abgabetyp;
|
||||
$maildata['parbeituebersichtlink'] = "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>";
|
||||
$maildata['bewertunglink'] = $num_rows_sem >= 1 && $paabgabetyp_kurzbz == 'end' ? "<p><a href='$mail_fulllink'>Zur Beurteilung der Arbeit</a></p>" : "";
|
||||
$maildata['bewertunglink'] = $paIsCurrent && $paabgabetyp_kurzbz == 'end' ? "<p><a href='$mail_fulllink'>Zur Beurteilung der Arbeit</a></p>" : "";
|
||||
$maildata['token'] = "";
|
||||
|
||||
$mailres = sendSanchoMail(
|
||||
@@ -557,8 +557,8 @@ if($command=="update" && $error!=true)
|
||||
$zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name'];
|
||||
$zweitbetmaildata['abgabetyp'] = $abgabetyp;
|
||||
$zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : "";
|
||||
$zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>" : "";
|
||||
$zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($begutachterMitToken->zugangstoken) && !$intern ? "<p>Zugangstoken: " . $begutachterMitToken->zugangstoken . "</p>" : "";
|
||||
$zweitbetmaildata['bewertunglink'] = $paIsCurrent ? "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>" : "";
|
||||
$zweitbetmaildata['token'] = $paIsCurrent && isset($begutachterMitToken->zugangstoken) && !$intern ? "<p>Zugangstoken: " . $begutachterMitToken->zugangstoken . "</p>" : "";
|
||||
|
||||
$mailres = sendSanchoMail(
|
||||
'ParbeitsbeurteilungEndupload',
|
||||
|
||||
@@ -241,7 +241,7 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1))
|
||||
<body>
|
||||
$name hat neue Noten für die Lehrveranstaltung\n\n<br>
|
||||
<b>" . $sg->kuerzel . ' ' . $lv->semester . '.Semester
|
||||
' . $lv->bezeichnung . " " . $lv->orgform_kurzbz . " - " . $stsem . "</b>
|
||||
' . $lv->bezeichnung . " - " .$lv->lehrform_kurzbz. " " . $lv->orgform_kurzbz . " - " . $stsem . "</b>
|
||||
<br>eingetragen.\n<br><br>
|
||||
Die Noten können jetzt ins Zeugnis übernommen werden.\n";
|
||||
|
||||
@@ -1090,7 +1090,10 @@ foreach ($stsem_obj->studiensemester as $studiensemester)
|
||||
}
|
||||
$stsem_content .= "</SELECT>\n";
|
||||
|
||||
if (! $rechte->isBerechtigt('admin', 0) && ! $rechte->isBerechtigt('admin', $lv_obj->studiengang_kz) && ! $rechte->isBerechtigt('lehre', $lv_obj->studiengang_kz))
|
||||
if (! $rechte->isBerechtigt('admin', 0)
|
||||
&& ! $rechte->isBerechtigt('admin', $lv_obj->studiengang_kz)
|
||||
&& ! $rechte->isBerechtigt('lehre', $lv_obj->studiengang_kz)
|
||||
&& ! $rechte->isBerechtigt('lehre', $lv_obj->oe_kurzbz))
|
||||
{
|
||||
$qry = "SELECT
|
||||
lehreinheit_id
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/* Erstellt einen Lehrauftrag im PDF Format
|
||||
*
|
||||
* Erstellt ein XML File Transformiert dieses mit
|
||||
* Hilfe der XSL-FO Vorlage aus der DB und generiert
|
||||
* daraus ein PDF
|
||||
*/
|
||||
require_once('../../../config/cis.config.inc.php');
|
||||
require_once('../../../include/projektarbeit.class.php');
|
||||
|
||||
if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id']))
|
||||
die('Fehlerhafte Parameteruebergabe');
|
||||
|
||||
// passende Vorlage holen
|
||||
$projektarbeitVorlage = new projektarbeit();
|
||||
$vorlage = $projektarbeitVorlage->getVorlage($_GET['projektarbeit_id'], $_GET['betreuerart_kurzbz']);
|
||||
|
||||
if ($vorlage == null)
|
||||
die("<html><body><h3>".$projektarbeitVorlage->errormsg."</h3></body></html>");
|
||||
|
||||
// weiterleiten auf Dokumentexport
|
||||
header('Location: ' . APP_ROOT . '/cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php'
|
||||
.'&xsl='.$vorlage.'&betreuerart_kurzbz=' . $_GET['betreuerart_kurzbz']
|
||||
. '&projektarbeit_id=' . $_GET['projektarbeit_id'] . '&person_id=' . $_GET['person_id']
|
||||
);
|
||||
die();
|
||||
+21
-27
@@ -196,41 +196,35 @@ if (isset($_GET['output']) && $_GET['output'] != 'pdf')
|
||||
else
|
||||
$output = 'pdf';
|
||||
|
||||
if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung'))
|
||||
// Berechtigungprüfung Projektarbeit
|
||||
if (isset($_GET['projektarbeit_id']))
|
||||
{
|
||||
if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id']))
|
||||
die('Fehlerhafte Parameteruebergabe');
|
||||
$projektarbeitVorlage = new projektarbeit();
|
||||
$allePaVorlagen = $projektarbeitVorlage->getAllVorlagen();
|
||||
|
||||
$projektarbeit = new projektarbeit();
|
||||
$projektarbeit->load($_GET['projektarbeit_id']);
|
||||
if (!is_array($allePaVorlagen))
|
||||
die("<html><body><h3>Fehler beim Holen der Projektarbeit Vorlagen</h3></body></html>");
|
||||
|
||||
$betreuer = new person();
|
||||
$betreuer->getPersonFromBenutzer($user);
|
||||
|
||||
//Überprüft ob es der Betreuer oder der Student ist
|
||||
if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz'))
|
||||
die("<html><body><h3>Sie haben keine Berechtigung für diese Aktion.</h3></body></html>");
|
||||
|
||||
switch ($_GET['betreuerart_kurzbz'])
|
||||
if (in_array($xsl, $allePaVorlagen))
|
||||
{
|
||||
case 'Begutachter' :
|
||||
case 'Senatsvorsitz' :
|
||||
$xsl = 'ProjektBeurteilungBA';
|
||||
break;
|
||||
case 'Erstbegutachter' :
|
||||
$xsl = 'ProjektBeurteilungMAErst';
|
||||
break;
|
||||
case 'Zweitbegutachter' :
|
||||
$xsl = 'ProjektBeurteilungMAZweit';
|
||||
break;
|
||||
}
|
||||
$rechte = new benutzerberechtigung();
|
||||
$rechte->getBerechtigungen($user);
|
||||
|
||||
$allowed = true;
|
||||
$projektarbeit = new projektarbeit();
|
||||
$projektarbeit->load($_GET['projektarbeit_id']);
|
||||
|
||||
$betreuer = new person();
|
||||
$betreuer->getPersonFromBenutzer($user);
|
||||
|
||||
//Überprüft ob es der Betreuer oder der Student ist
|
||||
if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz'))
|
||||
die("<html><body><h3>Sie haben keine Berechtigung für diese Aktion.</h3></body></html>");
|
||||
$paBerechtigt = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$konto = new konto();
|
||||
if ((((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin')) || (isset($allowed) && $allowed === true))
|
||||
if (((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin') || (isset($paBerechtigt) && $paBerechtigt === true))
|
||||
{
|
||||
$buchungstypen = array();
|
||||
if (defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN"))
|
||||
|
||||
@@ -1431,9 +1431,9 @@ if ($projekt->getProjekteMitarbeiter($user, true))
|
||||
echo '<hr>';
|
||||
echo '<h3>'.($alle===true?$p->t('zeitaufzeichnung/alleEintraege'):$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage))).'</h3>';
|
||||
if ($alle===true)
|
||||
echo '<a href="?normal" style="text-decoration:none"><input type="button" value="'.$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage)).'"></a>';
|
||||
echo '<a href="?normal'. ($passuid ? '&uid='.$user : '').'" style="text-decoration:none"><input type="button" value="'.$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage)).'"></a>';
|
||||
else
|
||||
echo '<a href="?alle" style="text-decoration:none"><input type="button" value="'.$p->t('zeitaufzeichnung/alleAnzeigen').'"></a>';
|
||||
echo '<a href="?alle'. ($passuid ? '&uid='.$user : '') .'" style="text-decoration:none"><input type="button" value="'.$p->t('zeitaufzeichnung/alleAnzeigen').'"></a>';
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -264,6 +264,7 @@ for ($i = 0; $i < count($ztaufdata); $i++)
|
||||
{
|
||||
$phasetoadd = new stdClass();
|
||||
$phasetoadd->bezeichnung = $ppitem->bezeichnung;
|
||||
$phasetoadd->beschreibung = $ppitem->beschreibung;
|
||||
$phasetoadd->stunden = 0;
|
||||
$phasetoadd->alleZeiten = array();
|
||||
|
||||
@@ -276,8 +277,8 @@ for ($i = 0; $i < count($ztaufdata); $i++)
|
||||
$projektphasen[$ppitem->projektphase_id] = $phasetoadd;
|
||||
|
||||
//add new projektphase to array with unique projekt phase names
|
||||
if (!in_array($ppitem->bezeichnung, $projektphasenames[$ztaufrow->projekt_kurzbz]))
|
||||
$projektphasenames[$ztaufrow->projekt_kurzbz][] = $ppitem->bezeichnung;
|
||||
if (!in_array($ppitem->beschreibung, $projektphasenames[$ztaufrow->projekt_kurzbz]))
|
||||
$projektphasenames[$ztaufrow->projekt_kurzbz][] = $ppitem->beschreibung;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -407,7 +408,7 @@ for ($i = 0; $i < count($ztaufdata); $i++)
|
||||
$projektmonthsums[$name]->sum += $projekthours;
|
||||
foreach ($projekt->projektphasen as $projektphase)
|
||||
{
|
||||
$projektmonthsums[$name]->projektphasen[$projektphase->bezeichnung] += round($projektphase->stunden, 2, 0);
|
||||
$projektmonthsums[$name]->projektphasen[$projektphase->beschreibung] += round($projektphase->stunden, 2, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -418,7 +419,7 @@ for ($i = 0; $i < count($ztaufdata); $i++)
|
||||
|
||||
foreach ($projekt->projektphasen as $projektphase)
|
||||
{
|
||||
$monthsum->projektphasen[$projektphase->bezeichnung] = round($projektphase->stunden, 2, 0);
|
||||
$monthsum->projektphasen[$projektphase->beschreibung] = round($projektphase->stunden, 2, 0);
|
||||
}
|
||||
$projektmonthsums[$name] = $monthsum;
|
||||
}
|
||||
|
||||
@@ -151,6 +151,7 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ausgeblendet, weil für FHTW derzeit nicht relevant
|
||||
<div class="row well">
|
||||
<div class="col-sm-12">
|
||||
<h2>Audiofiles</h2>
|
||||
@@ -162,7 +163,7 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
|
||||
<p>Ihr Browser unterstützt dieses Audioelement leider nicht.</p>
|
||||
</audio>
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -177,6 +177,9 @@ if(isset($_REQUEST['AuswahlGebiet']))
|
||||
WHERE gebiet_id=".$db->db_add_param($gebiet_id)."
|
||||
ORDER BY studiengang";
|
||||
$result = $db->db_query($qry);
|
||||
|
||||
$qry_anz_fragen = "SELECT count(*) FROM testtool.tbl_frage WHERE gebiet_id=".$db->db_add_param($gebiet_id)." AND demo=false";
|
||||
$result_anz_fragen = $db->db_fetch_object($db->db_query($qry_anz_fragen));
|
||||
|
||||
if ($gebietdetails)
|
||||
{
|
||||
@@ -215,6 +218,10 @@ if(isset($_REQUEST['AuswahlGebiet']))
|
||||
<td align="right">Multipleresponse:</td>
|
||||
<td>'.($gebietdetails->multipleresponse==true?'Ja':'Nein').'</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Fragen im Gebiet:</td>
|
||||
<td>'.$result_anz_fragen->count.'</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Gestellte Fragen:</td>
|
||||
<td>'.$gebietdetails->maxfragen.'</td>
|
||||
@@ -307,13 +314,17 @@ if(isset($_REQUEST['AuswahlGebiet']))
|
||||
echo '<tr><td style="border-right:1px solid;">'.$vor->nummer.'</td><td> '.$vorschlag->text.'</td></tr>';
|
||||
}
|
||||
}
|
||||
if($vorschlag->bild!='')
|
||||
if($vorschlag->bild != '')
|
||||
{
|
||||
// zeilenumbruch nach 4 bilder
|
||||
if($anzahlBild%4==0)
|
||||
echo "</tr>";
|
||||
echo "<td>";
|
||||
echo "<img class='testtoolvorschlag' src='../bild.php?src=vorschlag&vorschlag_id=$vor->vorschlag_id&sprache=".$sprache."' /><br/>";
|
||||
if ($vorschlag->text != '')
|
||||
{
|
||||
echo "$vorschlag->text<br>";
|
||||
}
|
||||
if ($loesungen)
|
||||
{
|
||||
echo "<br>".$vor->punkte."</td>";
|
||||
|
||||
+30
-3
@@ -29,6 +29,7 @@ require_once('../../include/prestudent.class.php');
|
||||
require_once('../../include/pruefling.class.php');
|
||||
require_once('../../include/studiengang.class.php');
|
||||
require_once('../../include/studienplan.class.php');
|
||||
require_once('../../include/studienordnung.class.php');
|
||||
require_once('../../include/ablauf.class.php');
|
||||
require_once('../../include/reihungstest.class.php');
|
||||
require_once('../../include/sprache.class.php');
|
||||
@@ -614,13 +615,26 @@ elseif (isset($prestudent_id))
|
||||
{
|
||||
echo '<tr>';
|
||||
$stg = new Studiengang($ps_obj->studiengang_kz);
|
||||
$sto = new Studienordnung();
|
||||
$sto->getStudienordnungFromStudienplan($ps_obj->studienplan_id);
|
||||
// Name des Studiengangs aus Studienordnung laden, ansonsten Fallback auf Studiengang
|
||||
$stg_name = $sto->studiengangbezeichnung;
|
||||
$stg_name_eng = $sto->studiengangbezeichnung_englisch;
|
||||
if ($stg_name == '')
|
||||
{
|
||||
$stg_name = $stg->bezeichnung;
|
||||
}
|
||||
if ($stg_name_eng == '')
|
||||
{
|
||||
$stg_name_eng = $stg->english;
|
||||
}
|
||||
|
||||
if ($ps_obj->lastStatus == "Interessent"
|
||||
|| $ps_obj->lastStatus == "Bewerber"
|
||||
|| $ps_obj->lastStatus == "Wartender"
|
||||
|| $ps_obj->lastStatus == "Aufgenommener")
|
||||
{
|
||||
echo '<td style="width: 50%;">'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ' ('.$ps_obj->orgform_bezeichnung[$sprache_user].')</td>';
|
||||
echo '<td style="width: 50%;">'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg_name_eng : $stg_name). ' ('.$ps_obj->orgform_bezeichnung[$sprache_user].')</td>';
|
||||
if ($ps_obj->ausbildungssemester == '1')
|
||||
{
|
||||
echo '<td>'. $p->t('testtool/regulaererEinstieg'). ' (1. Semester)</td>';
|
||||
@@ -634,7 +648,7 @@ elseif (isset($prestudent_id))
|
||||
elseif ($ps_obj->lastStatus == "Abgewiesener")
|
||||
{
|
||||
echo '
|
||||
<td class="text-muted">'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). '</td>
|
||||
<td class="text-muted">'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg_name_eng : $stg_name). '</td>
|
||||
<td class="text-muted">'. $ps_obj->status_mehrsprachig[$sprache_user]. '</td>
|
||||
';
|
||||
}
|
||||
@@ -648,7 +662,20 @@ elseif (isset($prestudent_id))
|
||||
// Letzten Status für des Prestudenten einholen
|
||||
$ps_master = new Prestudent();
|
||||
$ps_master->getLastStatus($prestudent_id);
|
||||
echo '<td>'. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).'</td>';
|
||||
$sto = new Studienordnung();
|
||||
$sto->getStudienordnungFromStudienplan($ps_master->studienplan_id);
|
||||
// Name des Studiengangs aus Studienordnung laden, ansonsten Fallback auf Studiengang
|
||||
$stg_name = $sto->studiengangbezeichnung;
|
||||
$stg_name_eng = $sto->studiengangbezeichnung_englisch;
|
||||
if ($stg_name == '')
|
||||
{
|
||||
$stg_name = $stg->bezeichnung;
|
||||
}
|
||||
if ($stg_name_eng == '')
|
||||
{
|
||||
$stg_name_eng = $stg->english;
|
||||
}
|
||||
echo '<td>'. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_name_eng : $stg_name).'</td>';
|
||||
echo '<td>'. $ps_master->status_mehrsprachig[$sprache_user]. '</td>';
|
||||
}
|
||||
|
||||
|
||||
+14
-2
@@ -237,6 +237,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"name": "olifolkerd/tabulator6",
|
||||
"version": "6.3.1",
|
||||
"dist": {
|
||||
"url": "https://github.com/olifolkerd/tabulator/archive/refs/tags/6.3.1.zip",
|
||||
"type": "zip"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": {
|
||||
@@ -287,9 +298,9 @@
|
||||
"name": "tomazdragar/simplecropper",
|
||||
"version": "1.0",
|
||||
"source": {
|
||||
"url": "https://github.com/tomazdragar/SimpleCropper.git",
|
||||
"url": "https://github.com/deveshsinghal22/SimpleCropper.git",
|
||||
"type": "git",
|
||||
"reference": "9750b81fa55ed07b3b429297d18ffbeac07a2cde"
|
||||
"reference": "873e5e1ca57c370bedd07a512d0bf562930d4b89"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -462,6 +473,7 @@
|
||||
|
||||
"olifolkerd/tabulator4": "4.9.*",
|
||||
"olifolkerd/tabulator5": "5.5.*",
|
||||
"olifolkerd/tabulator6": "6.3.*",
|
||||
|
||||
"phpseclib/phpseclib": "2.0.*",
|
||||
|
||||
|
||||
Generated
+15
-6
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "86d9ee6aa7cbf758f847f7aad13177a2",
|
||||
"content-hash": "4d532e48e895cb864fb89170e18e2a3d",
|
||||
"packages": [
|
||||
{
|
||||
"name": "afarkas/html5shiv",
|
||||
@@ -629,15 +629,15 @@
|
||||
"type": "component",
|
||||
"extra": {
|
||||
"component": {
|
||||
"scripts": [
|
||||
"jquery.js"
|
||||
],
|
||||
"files": [
|
||||
"jquery.min.js",
|
||||
"jquery.min.map",
|
||||
"jquery.slim.js",
|
||||
"jquery.slim.min.js",
|
||||
"jquery.slim.min.map"
|
||||
],
|
||||
"scripts": [
|
||||
"jquery.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -1529,6 +1529,15 @@
|
||||
},
|
||||
"type": "library"
|
||||
},
|
||||
{
|
||||
"name": "olifolkerd/tabulator6",
|
||||
"version": "6.3.1",
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://github.com/olifolkerd/tabulator/archive/refs/tags/6.3.1.zip"
|
||||
},
|
||||
"type": "library"
|
||||
},
|
||||
{
|
||||
"name": "phpseclib/phpseclib",
|
||||
"version": "2.0.48",
|
||||
@@ -1759,8 +1768,8 @@
|
||||
"version": "1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tomazdragar/SimpleCropper.git",
|
||||
"reference": "9750b81fa55ed07b3b429297d18ffbeac07a2cde"
|
||||
"url": "https://github.com/deveshsinghal22/SimpleCropper.git",
|
||||
"reference": "873e5e1ca57c370bedd07a512d0bf562930d4b89"
|
||||
},
|
||||
"type": "library"
|
||||
},
|
||||
|
||||
@@ -31,6 +31,7 @@ define('CIS_LEHRVERANSTALTUNG_ANWESENHEIT_ANZEIGEN', true);
|
||||
|
||||
// Wenn gesetzt, werden die Digitale Anwesenheit-Icons nur fuer diese Studiengaenge angezeigt, sonst für alle
|
||||
// define('CIS_LEHRVERANSTALTUNG_ANWESENHEIT_ANZEIGEN_STG', serialize(array('257')));
|
||||
// define('CIS_LEHRVERANSTALTUNG_ANWESENHEIT_ANZEIGEN_LVA', serialize(array('39455','39481','39480','41906','41905','41904','39459','39512','39454','39482','42230','42231','39458','41921','41922','39457','42896')));
|
||||
|
||||
// Im CIS Menue Links bei Modulen anzeigen wenn Lehrauftrag
|
||||
define('CIS_LEHRVERANSTALTUNG_MODULE_LINK',true);
|
||||
@@ -338,4 +339,19 @@ define('DIENSTVERHAELTNIS_SUPPORT', false);
|
||||
|
||||
// Falls Studstatus (Abmeldung, AbmeldungStg, Unterbrechung, Wiederholung) verwendet wird zeige Hinweistext bei Eingabe einer kommissionellen oder zusaetzlichen kommissionellen Pruefung
|
||||
define('FAS_STUDSTATUS_SHOW_KOMM_PRFG_HINT', false);
|
||||
|
||||
// default absender (@DOMAIN wird hinzugefuegt daher ohne angeben)
|
||||
define('SANCHO_MAIL_DEFAULT_SENDER', 'noreply');
|
||||
|
||||
// header und footer Bilder für eigene Mails verwenden
|
||||
define('SANCHO_MAIL_USE_IMAGES', true);
|
||||
|
||||
// Pfad für Bilder für eigene Mails, relativ zu document root
|
||||
define('SANCHO_MAIL_IMG_PATH', 'skin/images/sancho/');
|
||||
|
||||
// header Bild für eigene Mails
|
||||
define('SANCHO_MAIL_HEADER_IMG', 'sancho_header_DEFAULT.jpg');
|
||||
|
||||
// footer image for eigene Mails
|
||||
define('SANCHO_MAIL_FOOTER_IMG', 'sancho_footer_DEFAULT.jpg');
|
||||
?>
|
||||
|
||||
@@ -306,4 +306,8 @@ define('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE', serialize(
|
||||
)
|
||||
));
|
||||
|
||||
//Studierende mit diesen Noten werden von der AnzahlStudenten im Tempus abgezogen
|
||||
define('NICHT_ZUGELASSENE',serialize(array(6)));
|
||||
|
||||
|
||||
?>
|
||||
|
||||
@@ -217,6 +217,24 @@ function getDataFromClipboard()
|
||||
return pastetext;
|
||||
}
|
||||
|
||||
// ****
|
||||
// * Kopiert Inhalte in die Zwischenablage
|
||||
// ****
|
||||
function copyToClipboard(link)
|
||||
{
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
||||
try {
|
||||
const clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]
|
||||
.getService(Components.interfaces.nsIClipboardHelper);
|
||||
clipboard.copyString(link);
|
||||
|
||||
// Erfolgsmeldung anzeigen
|
||||
alert("Link erfolgreich in die Zwischenablage kopiert.\nBitte in anderem Browser einfügen und öffnen.");
|
||||
} catch (e) {
|
||||
alert("Fehler beim Kopieren in die Zwischenablage: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
// ****
|
||||
// * Oeffnet ein neues Fenster welches dann die Datei 'action' mit dem POST Parameter 'data' aufruft
|
||||
// ****
|
||||
|
||||
@@ -355,7 +355,8 @@ if(!$error)
|
||||
WHERE
|
||||
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
|
||||
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
|
||||
bismelden";
|
||||
bismelden AND
|
||||
lower(mitarbeiter_uid) NOT LIKE '_dummy%'";
|
||||
|
||||
if(count($oe_arr)>0)
|
||||
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
|
||||
|
||||
@@ -175,7 +175,22 @@ function MessagesIFrameSetHTML(val)
|
||||
}
|
||||
//Value setzen
|
||||
if(val!='')
|
||||
{
|
||||
editor.contentDocument.execCommand("inserthtml", false, val);
|
||||
|
||||
setTimeout(function()
|
||||
{
|
||||
scrollToTop();
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToTop()
|
||||
{
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
editor = document.getElementById('message-wysiwyg');
|
||||
|
||||
editor.contentWindow.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
function MessageIFrameInit()
|
||||
|
||||
@@ -127,6 +127,8 @@ $worksheet->write($zeile, ++$i, "STAATSBÜRGERSCHAFT", $format_bold);
|
||||
$maxlength[$i] = 16;
|
||||
$worksheet->write($zeile, ++$i, "SVNR", $format_bold);
|
||||
$maxlength[$i] = 4;
|
||||
$worksheet->write($zeile, ++$i, "PERSON_ID", $format_bold);
|
||||
$maxlength[$i] = 6;
|
||||
$worksheet->write($zeile, ++$i, "ERSATZKENNZEICHEN", $format_bold);
|
||||
$maxlength[$i] = 17;
|
||||
$worksheet->write($zeile, ++$i, "GESCHLECHT", $format_bold);
|
||||
@@ -399,6 +401,12 @@ function draw_content($row)
|
||||
$maxlength[$i] = mb_strlen($row->svnr);
|
||||
$worksheet->write($zeile, $i, $row->svnr);
|
||||
$i++;
|
||||
|
||||
//Person_id
|
||||
if (mb_strlen($row->person_id) > $maxlength[$i])
|
||||
$maxlength[$i] = mb_strlen($row->person_id);
|
||||
$worksheet->write($zeile, $i, $row->person_id);
|
||||
$i++;
|
||||
|
||||
//Ersatzkennzeichen
|
||||
if (mb_strlen($row->ersatzkennzeichen) > $maxlength[$i])
|
||||
|
||||
@@ -1113,15 +1113,15 @@ function StudentAbschlusspruefungTypChange()
|
||||
{
|
||||
if(document.getElementById('student-abschlusspruefung-menulist-typ').value=='Bachelor')
|
||||
{
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer1').value='Pruefer 1';
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer2').value='Pruefer 2';
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer1').value='PrueferIn 1';
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer2').value='PrueferIn 2';
|
||||
document.getElementById('student-abschlusspruefung-menulist-pruefer3').hidden=false;
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer3').hidden=false;
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer1').value='Pruefer 1 (Diplomarbeit)';
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer2').value='Pruefer 2';
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer1').value='PrueferIn 1 (Diplomarbeit)';
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer2').value='PrueferIn 2';
|
||||
document.getElementById('student-abschlusspruefung-menulist-pruefer3').hidden=true;
|
||||
document.getElementById('student-abschlusspruefung-label-pruefer3').hidden=true;
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
||||
<?php $hideZugangscode = (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) ? '':' hidden="true"'; ?>
|
||||
<label value="Zugangscode" control="student-detail-zugangscode" <?php echo $hideZugangscode; ?>/>
|
||||
<label id="label-student-detail-link_bewerbungstool" hidden="true" value=""></label>
|
||||
<label class="text-link" href="#" id="label-student-detail-zugangscode" value="" <?php echo $hideZugangscode; ?> onclick="window.open(document.getElementById('label-student-detail-link_bewerbungstool').value)"/>
|
||||
<label class="text-link" href="#" id="label-student-detail-zugangscode" value="" <?php echo $hideZugangscode; ?> onclick="copyToClipboard(document.getElementById('label-student-detail-link_bewerbungstool').value)"/>
|
||||
<?php $hideBpk = $rechte->isBerechtigt('student/bpk') ? '':' hidden="true"'; ?>
|
||||
<label value="BPK" control="student-detail-textbox-bpk"<?php echo $hideBpk; ?>/>
|
||||
<hbox><textbox id="student-detail-textbox-bpk" disabled="true" maxlength="28" size="50"<?php echo $hideBpk; ?>/></hbox>
|
||||
|
||||
@@ -8,6 +8,7 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
public $lehrveranstaltung_faktor_id; // serial
|
||||
public $lehrveranstaltung_id; // integer
|
||||
public $faktor; // numeric
|
||||
public $lehrform_kurzbz; // varchar(8)
|
||||
public $studiensemester_kurzbz_von; // varchar(16)
|
||||
public $studiensemester_kurzbz_bis; // varchar(16)
|
||||
public $insertamum; // timestamp
|
||||
@@ -58,7 +59,44 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
return true;
|
||||
}
|
||||
|
||||
public function loadByLV($lv_id, $von = null, $bis = null, $id = null)
|
||||
public function loadByLV($lv_id)
|
||||
{
|
||||
|
||||
if (!is_numeric($lv_id))
|
||||
{
|
||||
$this->errormsg = 'Lehrveranstaltung_faktor_id muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
$qry = "SELECT *
|
||||
FROM lehre.tbl_lehrveranstaltung_faktor
|
||||
LEFT JOIN public.tbl_studiensemester vonstsem
|
||||
ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_von = vonstsem.studiensemester_kurzbz
|
||||
LEFT JOIN public.tbl_studiensemester bisstem
|
||||
ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_bis = bisstem.studiensemester_kurzbz
|
||||
WHERE lehrveranstaltung_id = ".$this->db_add_param($lv_id, FHC_INTEGER);
|
||||
|
||||
|
||||
if (!$result = $this->db_query($qry)) {
|
||||
$this->errormsg = 'Datensatz konnte nicht geladen werden';
|
||||
return false;
|
||||
}
|
||||
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
{
|
||||
$lv_faktor_objekt = new lehrveranstaltung_faktor();
|
||||
|
||||
$lv_faktor_objekt->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id;
|
||||
$lv_faktor_objekt->lehrveranstaltung_id = $row->lehrveranstaltung_id;
|
||||
$lv_faktor_objekt->faktor = $row->faktor;
|
||||
$lv_faktor_objekt->lehrform_kurzbz = $row->lehrform_kurzbz;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis;
|
||||
$this->lv_faktoren[] = $lv_faktor_objekt;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
public function checkIfExists($lv_id, $von = null, $bis = null, $id = null, $lehrform_kurzbz = null)
|
||||
{
|
||||
|
||||
if (!is_numeric($lv_id))
|
||||
@@ -105,50 +143,80 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
lehrveranstaltung_faktor_id != ". $this->db_add_param($id, FHC_INTEGER);
|
||||
}
|
||||
|
||||
if (!$result = $this->db_query($qry)) {
|
||||
$this->errormsg = 'Datensatz konnte nicht geladen werden';
|
||||
return false;
|
||||
}
|
||||
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
if (!empty($lehrform_kurzbz) && $lehrform_kurzbz !== "")
|
||||
{
|
||||
$lv_faktor_objekt = new lehrveranstaltung_faktor();
|
||||
|
||||
$lv_faktor_objekt->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id;
|
||||
$lv_faktor_objekt->lehrveranstaltung_id = $row->lehrveranstaltung_id;
|
||||
$lv_faktor_objekt->faktor = $row->faktor;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von;
|
||||
$lv_faktor_objekt->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis;
|
||||
|
||||
$this->lv_faktoren[] = $lv_faktor_objekt;
|
||||
$qry .= "
|
||||
AND
|
||||
lehrform_kurzbz = ". $this->db_add_param($lehrform_kurzbz);
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry .= "
|
||||
AND lehrform_kurzbz IS NULL
|
||||
";
|
||||
}
|
||||
|
||||
return true;
|
||||
if ($result = $this->db_query($qry))
|
||||
{
|
||||
if ($this->db_num_rows($result) > 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function addFaktor($lv_id, $faktor, $von, $bis = NULL)
|
||||
public function save($new = false)
|
||||
{
|
||||
$qry = 'INSERT INTO lehre.tbl_lehrveranstaltung_faktor (lehrveranstaltung_id, faktor, studiensemester_kurzbz_von, studiensemester_kurzbz_bis)
|
||||
VALUES ('. $this->db_add_param($lv_id, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($faktor, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($von, FHC_STRING) . ', '.
|
||||
$this->db_add_param($bis, FHC_STRING) . ');';
|
||||
if ($new)
|
||||
{
|
||||
$qry = 'INSERT INTO lehre.tbl_lehrveranstaltung_faktor (lehrveranstaltung_id, faktor, studiensemester_kurzbz_von, studiensemester_kurzbz_bis, lehrform_kurzbz, insertvon)
|
||||
VALUES ('. $this->db_add_param($this->lehrveranstaltung_id, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($this->faktor, FHC_INTEGER) . ', '.
|
||||
$this->db_add_param($this->studiensemester_kurzbz_von) . ', '.
|
||||
$this->db_add_param($this->studiensemester_kurzbz_bis) . ', '.
|
||||
$this->db_add_param($this->lehrform_kurzbz) . ', '.
|
||||
$this->db_add_param($this->insertvon) . ');';
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = "UPDATE lehre.tbl_lehrveranstaltung_faktor
|
||||
SET faktor = ". $this->db_add_param($this->faktor) ." ,
|
||||
studiensemester_kurzbz_von = ". $this->db_add_param($this->studiensemester_kurzbz_von) .",
|
||||
studiensemester_kurzbz_bis = ". $this->db_add_param($this->studiensemester_kurzbz_bis) .",
|
||||
lehrform_kurzbz = ". $this->db_add_param($this->lehrform_kurzbz) .",
|
||||
updatevon = ". $this->db_add_param($this->updatevon) .",
|
||||
updateamum = ". $this->db_add_param($this->updateamum) ."
|
||||
WHERE lehrveranstaltung_faktor_id = ". $this->db_add_param($this->lehrveranstaltung_faktor_id, FHC_INTEGER);
|
||||
}
|
||||
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
$qry_id = "SELECT currval('lehre.lehrveranstaltung_faktor_id_seq') as id;";
|
||||
if($this->db_query($qry_id))
|
||||
if ($new)
|
||||
{
|
||||
if($row = $this->db_fetch_object())
|
||||
$qry_id = "SELECT currval('lehre.lehrveranstaltung_faktor_id_seq') as id;";
|
||||
if($this->db_query($qry_id))
|
||||
{
|
||||
$this->db_query('COMMIT');
|
||||
return [
|
||||
'id' => $row->id,
|
||||
'lv_id' => $lv_id,
|
||||
'faktor' => $faktor,
|
||||
'von' => $von,
|
||||
'bis' => $bis
|
||||
];
|
||||
if($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->db_query('COMMIT');
|
||||
return [
|
||||
'id' => $row->id,
|
||||
'lv_id' => $this->lehrveranstaltung_id,
|
||||
'faktor' => $this->faktor,
|
||||
'lehrform_kurzbz' => $this->lehrform_kurzbz,
|
||||
'von' => $this->studiensemester_kurzbz_von,
|
||||
'bis' => $this->studiensemester_kurzbz_bis
|
||||
];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db_query('ROLLBACK');
|
||||
return [
|
||||
'status' => 'error',
|
||||
'message' => 'Fehler beim Einfügen in die Datenbank:'
|
||||
];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -160,34 +228,7 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db_query('ROLLBACK');
|
||||
return [
|
||||
'status' => 'error',
|
||||
'message' => 'Fehler beim Einfügen in die Datenbank:'
|
||||
];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return [
|
||||
'status' => 'error',
|
||||
'message' => 'Fehler beim Einfügen in die Datenbank:'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
public function updateFaktor($id, $faktor, $von, $bis)
|
||||
{
|
||||
$qry = "UPDATE lehre.tbl_lehrveranstaltung_faktor
|
||||
SET faktor = ". $this->db_add_param($faktor) ." ,
|
||||
studiensemester_kurzbz_von = ". $this->db_add_param($von) .",
|
||||
studiensemester_kurzbz_bis = ". $this->db_add_param($bis) ."
|
||||
WHERE lehrveranstaltung_faktor_id = ". $this->db_add_param($id, FHC_INTEGER);
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -215,6 +256,7 @@ class lehrveranstaltung_faktor extends basis_db
|
||||
WHERE lehrveranstaltung_id = ".$this->db_add_param($lv_id, FHC_INTEGER) . "
|
||||
AND (vonstsem.start <= now() OR vonstsem.start IS NULL)
|
||||
AND (bisstem.ende >= now() OR bisstem.ende IS NULL)
|
||||
AND lehrform_kurzbz IS NULL
|
||||
ORDER BY vonstsem.start DESC LIMIT 1
|
||||
";
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ class phrasen extends basis_db
|
||||
* Wobei x durch den Index+1 im Array zu ersetzten ist. zB "%2$s" um die Variable $value[1] auszugeben
|
||||
* naehere Infos siehe sprintf
|
||||
*
|
||||
* @param $key Key der Phrase
|
||||
* @param $key String Key der Phrase
|
||||
* @param $value Array mit Parametern fuer die Phrase
|
||||
*/
|
||||
public function t($key, $value=array())
|
||||
|
||||
+169
-86
@@ -16,8 +16,8 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
/**
|
||||
* Klasse projektarbeit
|
||||
@@ -27,7 +27,7 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
|
||||
class projektarbeit extends basis_db
|
||||
{
|
||||
public $new; // boolean
|
||||
public $new; // boolean
|
||||
public $result = array(); // adresse Objekt
|
||||
|
||||
//Tabellenspalten
|
||||
@@ -59,6 +59,37 @@ class projektarbeit extends basis_db
|
||||
|
||||
public $abgabedatum;
|
||||
|
||||
// Welche Version der Projektarbeit wird ab welchem Semester verwendet
|
||||
private $_versions = array(
|
||||
'Diplom' => array(
|
||||
'SS2025' => 3,
|
||||
'SS2023' => 2,
|
||||
'SS2022' => 1
|
||||
),
|
||||
'Others' => array(
|
||||
'SS2025' => 2,
|
||||
'SS2022' => 1
|
||||
)
|
||||
);
|
||||
|
||||
// welche Vorlagen werden ab welcher Projekarbeitsversion verwendet (0 - erste "default" Vorlage)
|
||||
private $_projektarbeitVorlageMappings = array(
|
||||
'Begutachter' => array(
|
||||
2 => 'ProjektBeurteilungBAProzent',
|
||||
0 => 'ProjektBeurteilungBA'
|
||||
),
|
||||
'Senatsvorsitz' => array(
|
||||
2 => 'ProjektBeurteilungBAProzent',
|
||||
0 => 'ProjektBeurteilungBA'
|
||||
),
|
||||
'Erstbegutachter' => array(
|
||||
3 => 'ProjektBeurteilungMAProzent',
|
||||
0 => 'ProjektBeurteilungMAErst'
|
||||
),
|
||||
'Zweitbegutachter' => array(
|
||||
0 => 'ProjektBeurteilungMAZweit'
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Konstruktor
|
||||
@@ -233,25 +264,25 @@ class projektarbeit extends basis_db
|
||||
$qry='BEGIN; INSERT INTO lehre.tbl_projektarbeit (projekttyp_kurzbz, titel, lehreinheit_id, student_uid, firma_id, note, punkte,
|
||||
beginn, ende, faktor, freigegeben, gesperrtbis, stundensatz, gesamtstunden, themenbereich, anmerkung,
|
||||
insertamum, insertvon, updateamum, updatevon, titel_english, final) VALUES('.
|
||||
$this->db_add_param($this->projekttyp_kurzbz).', '.
|
||||
$this->db_add_param($this->titel).', '.
|
||||
$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '.
|
||||
$this->db_add_param($this->student_uid).', '.
|
||||
$this->db_add_param($this->firma_id, FHC_INTEGER).', '.
|
||||
$this->db_add_param($this->note).', '.
|
||||
$this->db_add_param($this->punkte).', '.
|
||||
$this->db_add_param($this->beginn).', '.
|
||||
$this->db_add_param($this->ende).', '.
|
||||
$this->db_add_param($this->faktor).', '.
|
||||
$this->db_add_param($this->freigegeben, FHC_BOOLEAN).', '.
|
||||
$this->db_add_param($this->gesperrtbis).', '.
|
||||
$this->db_add_param($this->stundensatz).', '.
|
||||
$this->db_add_param($this->gesamtstunden).', '.
|
||||
$this->db_add_param($this->themenbereich).', '.
|
||||
$this->db_add_param($this->anmerkung).', now(), '.
|
||||
$this->db_add_param($this->insertvon).', now(), '.
|
||||
$this->db_add_param($this->updatevon).','.
|
||||
$this->db_add_param($this->titel_english).','.
|
||||
$this->db_add_param($this->projekttyp_kurzbz).', '.
|
||||
$this->db_add_param($this->titel).', '.
|
||||
$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '.
|
||||
$this->db_add_param($this->student_uid).', '.
|
||||
$this->db_add_param($this->firma_id, FHC_INTEGER).', '.
|
||||
$this->db_add_param($this->note).', '.
|
||||
$this->db_add_param($this->punkte).', '.
|
||||
$this->db_add_param($this->beginn).', '.
|
||||
$this->db_add_param($this->ende).', '.
|
||||
$this->db_add_param($this->faktor).', '.
|
||||
$this->db_add_param($this->freigegeben, FHC_BOOLEAN).', '.
|
||||
$this->db_add_param($this->gesperrtbis).', '.
|
||||
$this->db_add_param($this->stundensatz).', '.
|
||||
$this->db_add_param($this->gesamtstunden).', '.
|
||||
$this->db_add_param($this->themenbereich).', '.
|
||||
$this->db_add_param($this->anmerkung).', now(), '.
|
||||
$this->db_add_param($this->insertvon).', now(), '.
|
||||
$this->db_add_param($this->updatevon).','.
|
||||
$this->db_add_param($this->titel_english).','.
|
||||
$this->db_add_param($this->final, FHC_BOOLEAN).');';
|
||||
}
|
||||
else
|
||||
@@ -471,92 +502,144 @@ class projektarbeit extends basis_db
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester).
|
||||
* Masterarbeiten sind ab der Änderung zur Gewichtung der Punkte aktuell,
|
||||
* Bachelorarbeiten schon ab dem Umstieg auf das Online Beurteilungsformular.
|
||||
* Prüft ob Projektarbeit aktuell ist (also zurzeit online bewertet wird).
|
||||
* @param $projektarbeit_id
|
||||
* @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell
|
||||
* @return boolean
|
||||
*/
|
||||
public function projektarbeitIsCurrent($projektarbeit_id)
|
||||
{
|
||||
$version = $this->getVersion($projektarbeit_id);
|
||||
// paarbeit sollte nur ab einem Studiensemester online bewertet werden
|
||||
$qry="SELECT 1
|
||||
FROM lehre.tbl_projektarbeit
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
|
||||
WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
|
||||
AND
|
||||
(
|
||||
(
|
||||
projekttyp_kurzbz = 'Diplom'
|
||||
AND tbl_studiensemester.start::date >= (
|
||||
SELECT start
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = 'SS2023'
|
||||
)::date
|
||||
)
|
||||
OR
|
||||
(
|
||||
projekttyp_kurzbz <> 'Diplom'
|
||||
AND tbl_studiensemester.start::date >= (
|
||||
SELECT start
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = 'SS2022'
|
||||
)::date
|
||||
)
|
||||
)
|
||||
LIMIT 1";
|
||||
|
||||
$result_sem=$this->db_query($qry);
|
||||
|
||||
if (!$result_sem)
|
||||
{
|
||||
$this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität";
|
||||
return -1;
|
||||
}
|
||||
|
||||
$num_rows = $this->db_num_rows($result_sem);
|
||||
|
||||
if ($num_rows < 0)
|
||||
{
|
||||
$this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten";
|
||||
}
|
||||
|
||||
return $num_rows;
|
||||
return $version === null ? null : $version->isCurrent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester), vor der Änderung zur Gewichtung der Punkte.
|
||||
* Holt sich Version der Projektarbeit.
|
||||
* Liefert auch mit, ob die Version die aktuellste ist.
|
||||
* z.B.: Masterarbeiten waren ab der Änderung zur Gewichtung der Punkte aktuell,
|
||||
* Bachelorarbeiten waren ab dem Umstieg auf das Online Beurteilungsformular aktuell.
|
||||
* @param $projektarbeit_id
|
||||
* @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell
|
||||
* @return objekt mit Versionsinfo, null im Fehlerfall
|
||||
*/
|
||||
public function projektarbeitIsCurrentBeforeWeightening($projektarbeit_id)
|
||||
public function getVersion($projektarbeit_id)
|
||||
{
|
||||
// paarbeit sollte nur ab einem Studiensemester online bewertet werden
|
||||
$qry="SELECT 1
|
||||
FROM lehre.tbl_projektarbeit
|
||||
$qry="
|
||||
SELECT
|
||||
CASE
|
||||
WHEN semesters_diplom.studiensemester_kurzbz IS NOT NULL
|
||||
THEN semesters_diplom.studiensemester_kurzbz
|
||||
ELSE semesters.studiensemester_kurzbz
|
||||
END AS version_studiensemester_kurzbz,
|
||||
pa.projekttyp_kurzbz
|
||||
FROM
|
||||
lehre.tbl_projektarbeit pa
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
|
||||
WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
|
||||
AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date
|
||||
LIMIT 1";
|
||||
JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
start, studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
studiensemester_kurzbz IN (".$this->db_implode4SQL(array_keys($this->_versions['Others'])).")
|
||||
) semesters ON sem.start >= semesters.start AND pa.projekttyp_kurzbz <> 'Diplom'
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
start, studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
studiensemester_kurzbz IN (".$this->db_implode4SQL(array_keys($this->_versions['Diplom'])).")
|
||||
) semesters_diplom ON sem.start >= semesters_diplom.start AND pa.projekttyp_kurzbz = 'Diplom'
|
||||
WHERE
|
||||
projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
|
||||
ORDER BY
|
||||
semesters.start DESC, semesters_diplom.start DESC
|
||||
LIMIT 1";
|
||||
|
||||
$result_sem=$this->db_query($qry);
|
||||
$errormsg = "Fehler beim Ermitteln der Projektarbeit Version";
|
||||
|
||||
if (!$result_sem)
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
$this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität";
|
||||
return -1;
|
||||
if ($row = $this->db_fetch_object())
|
||||
{
|
||||
// known project types
|
||||
if (isset($this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]))
|
||||
{
|
||||
$row->versionNumber = $this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz];
|
||||
$row->isCurrent =
|
||||
$this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]
|
||||
== max($this->_versions[$row->projekttyp_kurzbz]);
|
||||
|
||||
}
|
||||
elseif (isset($this->_versions['Others'][$row->version_studiensemester_kurzbz]))
|
||||
{
|
||||
$row->versionNumber = $this->_versions['Others'][$row->version_studiensemester_kurzbz];
|
||||
$row->isCurrent =
|
||||
$this->_versions['Others'][$row->version_studiensemester_kurzbz]
|
||||
== max($this->_versions['Others']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$row->isCurrent = false;
|
||||
$row->versionNumber = 0;
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = $errormsg;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = $errormsg;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt Version einer Projektarbeit für eine Betreuerart.
|
||||
* @param $projektarbeit_id
|
||||
* @param $betreuerart_kurzbz
|
||||
* @return string Vorlagenname
|
||||
*/
|
||||
public function getVorlage($projektarbeit_id, $betreuerart_kurzbz)
|
||||
{
|
||||
$version = $this->getVersion($projektarbeit_id);
|
||||
|
||||
if ($version == null) return null;
|
||||
|
||||
$key = 0;
|
||||
if (isset($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz]))
|
||||
{
|
||||
foreach ($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz] as $versionNumber => $vorlage)
|
||||
{
|
||||
if ($versionNumber <= $version->versionNumber && $versionNumber > $key) $key = $versionNumber;
|
||||
}
|
||||
}
|
||||
|
||||
$num_rows = $this->db_num_rows($result_sem);
|
||||
return
|
||||
isset($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz][$key])
|
||||
? $this->_projektarbeitVorlageMappings[$betreuerart_kurzbz][$key]
|
||||
: '';
|
||||
}
|
||||
|
||||
if ($num_rows < 0)
|
||||
/**
|
||||
* Holt alle möglichen, jemals verwendeten Projektarbeits-Vorlagen
|
||||
* @return array mit Vorlagennamen
|
||||
*/
|
||||
public function getAllVorlagen()
|
||||
{
|
||||
$vorlagen = array();
|
||||
foreach ($this->_projektarbeitVorlageMappings as $mappings)
|
||||
{
|
||||
$this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten";
|
||||
$vorlagen = array_unique(array_merge($vorlagen, $mappings));
|
||||
}
|
||||
|
||||
return $num_rows;
|
||||
return $vorlagen;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user