Prüfungsprotokoll:

- new fields: beginnzeit, endezeit, Prüfungsantritt
- Einverständniserklärung: if not checked no save possible
- can be saved and freigegeben
- added phrases
This commit is contained in:
KarpAlex
2020-05-28 11:08:38 +02:00
parent 16c3ca6d0a
commit f1a346c545
8 changed files with 612 additions and 127 deletions
@@ -16,8 +16,9 @@ class Pruefungsprotokoll extends Auth_Controller
// Set required permissions
parent::__construct(
array(
'index' => 'lehre:r',
'Protokoll' => 'lehre:r'
'index' => 'lehre/pruefungsbeurteilung:r',
'Protokoll' => 'lehre/pruefungsbeurteilung:r',
'saveProtokoll' => 'lehre/pruefungsbeurteilung:rw',
)
);
@@ -25,12 +26,17 @@ class Pruefungsprotokoll extends Auth_Controller
$this->load->model('education/Abschlusspruefung_model', 'AbschlusspruefungModel');
$this->load->model('education/Abschlussbeurteilung_model', 'AbschlussbeurteilungModel');
$this->load->library('PermissionLib');
$this->load->library('AuthLib');
// Load language phrases
$this->loadPhrases(
array(
'ui',
'global',
'person',
'abschlusspruefung',
'global',
'person',
'password',
'lehre'
)
);
@@ -49,6 +55,7 @@ class Pruefungsprotokoll extends Auth_Controller
}
/**
* Show Pruefungsprotokoll.
*/
public function Protokoll()
{
@@ -57,13 +64,18 @@ class Pruefungsprotokoll extends Auth_Controller
if (!is_numeric($abschlusspruefung_id))
show_error('invalid abschlusspruefung');
$abschlusspruefung = $this->AbschlusspruefungModel->getAbschlusspruefung($abschlusspruefung_id);
$abschlusspruefung_saved = false;
$abschlusspruefung = $this->_getAbschlusspruefungBerechtigt($abschlusspruefung_id);
if (isError($abschlusspruefung))
show_error(getError($abschlusspruefung));
else
{
$abschlusspruefung = getData($abschlusspruefung);
$abschlusspruefung_saved = isset($abschlusspruefung->protokoll) && isset($abschlusspruefung->abschlussbeurteilung_kurzbz);
}
$this->AbschlussbeurteilungModel->addOrder("sort", "ASC");
$this->AbschlussbeurteilungModel->addOrder("(CASE WHEN abschlussbeurteilung_kurzbz = 'ausgezeichnet' THEN 1
WHEN abschlussbeurteilung_kurzbz = 'gut' THEN 2
WHEN abschlussbeurteilung_kurzbz = 'bestanden' THEN 3
@@ -80,12 +92,70 @@ class Pruefungsprotokoll extends Auth_Controller
$data = array(
'abschlusspruefung' => $abschlusspruefung,
'abschlussbeurteilung' => $abschlussbeurteilung
'abschlussbeurteilung' => $abschlussbeurteilung,
'abschlusspruefung_saved' => $abschlusspruefung_saved
);
$this->load->view('lehre/pruefungsprotokoll.php', $data);
}
/**
* Save Pruefungsprotokoll (including possible Freigabe)
*/
public function saveProtokoll()
{
$abschlusspruefung_id = $this->input->post('abschlusspruefung_id');
$data = $this->input->post('protocoldata');
if (isset($abschlusspruefung_id) && is_numeric($abschlusspruefung_id) && isset($data))
{
// check permission
$berechtigt = $this->_getAbschlusspruefungBerechtigt($abschlusspruefung_id);
if (isError($berechtigt))
$this->outputJsonError(getError($berechtigt));
else
{
$freigabe = isset($data['freigabedatum']) && $data['freigabedatum'];
if ($freigabe)
{
// Verify password
$password = $data['password'];
unset($data['password']);
if (!isEmptyString($password))
{
$result = $this->authlib->checkUserAuthByUsernamePassword($this->_uid, $password);
if (isError($result))
{
return $this->outputJsonError('Falsches Passwort'); // exit if password is incorrect
}
}
else
{
return $this->outputJsonError('Passwort fehlt');
}
}
$data = $this->_prepareAbschlusspruefungDataForSave($data);
$result = $this->AbschlusspruefungModel->update($abschlusspruefung_id, $data);
if (hasData($result))
{
$abschlusspruefung_id = getData($result);
$updateresult = array('abschlusspruefung_id' => $abschlusspruefung_id);
if ($freigabe)
$updateresult['freigabedatum'] = date_format(date_create($data['freigabedatum']), 'd.m.Y');
$this->outputJsonSuccess($updateresult);
}
else
$this->outputJsonError('Fehler beim Speichern des Prüfungsprotokolls');
}
}
else
$this->outputJsonError('Ungültige Parameter');
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
@@ -98,4 +168,53 @@ class Pruefungsprotokoll extends Auth_Controller
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Retrieves an Abschlussprüfung, with permission check
* permission: admin, assistance of study programe or Vorsitz of the Prüfung
* @param $abschlusspruefung_id
* @return object success or error
*/
private function _getAbschlusspruefungBerechtigt($abschlusspruefung_id)
{
$result = error('Error when getting Abschlusspruefung');
if (isset($this->_uid))
{
$abschlusspruefung = $this->AbschlusspruefungModel->getAbschlusspruefung($abschlusspruefung_id);
if (hasData($abschlusspruefung))
{
$abschlusspruefung_data = getData($abschlusspruefung);
if ($this->permissionlib->isBerechtigt('admin') ||
(isset($abschlusspruefung_data->studiengang_kz) && $this->permissionlib->isBerechtigt('assistenz', 'suid', $abschlusspruefung_data->studiengang_kz))
|| $this->_uid === $abschlusspruefung_data->uid_vorsitz)
$result = $abschlusspruefung;
else
$result = error('Permission denied');
}
}
return $result;
}
/**
* Prepares Abschlussprüfung for save in database, replaces '' with null, sets Freigabedatum
* @param $data
* @return array
*/
private function _prepareAbschlusspruefungDataForSave($data)
{
$nullfields = array('uhrzeit', 'endezeit', 'abschlussbeurteilung_kurzbz', 'protokoll');
foreach ($data as $idx => $item)
{
if (in_array($idx, $nullfields) & $item === '')
$data[$idx] = null;
}
if (isset($data['freigabedatum']) && $data['freigabedatum'])
$data['freigabedatum'] = date('Y-m-d');
return $data;
}
}