Merge branch 'feature-7772/Digitalisiertes_Pruefungsprotokoll'

This commit is contained in:
Andreas Österreicher
2020-05-29 15:11:55 +02:00
20 changed files with 2431 additions and 47 deletions
@@ -0,0 +1,223 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
*/
class Pruefungsprotokoll extends Auth_Controller
{
private $_uid; // uid of the logged user
/**
* Constructor
*/
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/pruefungsbeurteilung:r',
'Protokoll' => 'lehre/pruefungsbeurteilung:r',
'saveProtokoll' => 'lehre/pruefungsbeurteilung:rw',
)
);
// Load models
$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',
'password',
'lehre'
)
);
$this->_setAuthUID(); // sets property uid
$this->setControllerId(); // sets the controller id
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
public function index()
{
$this->load->library('WidgetLib');
$this->load->view('lehre/pruefungsprotokollUebersicht.php');
}
/**
* Show Pruefungsprotokoll.
*/
public function Protokoll()
{
$abschlusspruefung_id = $this->input->get('abschlusspruefung_id');
if (!is_numeric($abschlusspruefung_id))
show_error('invalid abschlusspruefung');
$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
WHEN abschlussbeurteilung_kurzbz = 'angerechnet' THEN 4
ELSE 5
END
)");
$abschlussbeurteilung = $this->AbschlussbeurteilungModel->load();
if (isError($abschlussbeurteilung))
show_error(getError($abschlussbeurteilung));
else
$abschlussbeurteilung = getData($abschlussbeurteilung);
$language = getUserLanguage();
$data = array(
'abschlusspruefung' => $abschlusspruefung,
'abschlussbeurteilung' => $abschlussbeurteilung,
'abschlusspruefung_saved' => $abschlusspruefung_saved,
'language' => $language
);
$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($this->p->t('password', 'wrongPassword')); // exit if password is incorrect
}
}
else
{
return $this->outputJsonError($this->p->t('password', 'passwordMissing'));
}
}
$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($this->p->t('ui', 'ungueltigeParameter'));
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
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;
}
}
@@ -11,4 +11,93 @@ class Abschlusspruefung_model extends DB_Model
$this->dbTable = 'lehre.tbl_abschlusspruefung';
$this->pk = 'abschlusspruefung_id';
}
/**
* Gets data of an Abschlusspruefung, including Abschlussarbeit.
* @param $abschlusspruefung_id
* @return object
*/
public function getAbschlusspruefung($abschlusspruefung_id)
{
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$abschlusspruefungdata = array();
$this->addSelect('tbl_abschlusspruefung.abschlusspruefung_id, tbl_abschlusspruefung.datum, tbl_abschlusspruefung.abschlussbeurteilung_kurzbz, tbl_abschlusspruefung.uhrzeit AS pruefungsbeginn, tbl_abschlusspruefung.endezeit AS pruefungsende,
tbl_abschlusspruefung.freigabedatum, tbl_abschlusspruefung_antritt.bezeichnung AS pruefungsantritt_bezeichnung, tbl_abschlusspruefung_antritt.bezeichnung_english AS pruefungsantritt_bezeichnung_english, tbl_abschlusspruefung.protokoll,
studentpers.vorname AS vorname_student, studentpers.nachname AS nachname_student, studentpers.titelpre AS titelpre_student, studentpers.titelpost AS titelpost_student, studentben.uid AS uid_student, matrikelnr,
vorsitzenderben.uid AS uid_vorsitz, vorsitzenderpers.vorname AS vorname_vorsitz, vorsitzenderpers.nachname AS nachname_vorsitz, vorsitzenderpers.titelpre AS titelpre_vorsitz, vorsitzenderpers.titelpost AS titelpost_vorsitz,
erstprueferpers.vorname AS vorname_erstpruefer, erstprueferpers.nachname AS nachname_erstpruefer, erstprueferpers.titelpre AS titelpre_erstpruefer, erstprueferpers.titelpost AS titelpost_erstpruefer,
zweitprueferpers.vorname AS vorname_zweitpruefer, zweitprueferpers.nachname AS nachname_zweitpruefer, zweitprueferpers.titelpre AS titelpre_zweitpruefer, zweitprueferpers.titelpost AS titelpost_zweitpruefer
');
$this->addJoin('lehre.tbl_abschlusspruefung_antritt', 'pruefungsantritt_kurzbz', 'LEFT');
$this->addJoin('public.tbl_benutzer studentben', 'tbl_abschlusspruefung.student_uid = studentben.uid');
$this->addJoin('public.tbl_person studentpers', 'studentben.person_id = studentpers.person_id');
$this->addJoin('public.tbl_student', 'studentben.uid = tbl_student.student_uid');
$this->addJoin('public.tbl_benutzer vorsitzenderben', 'vorsitz = vorsitzenderben.uid', 'LEFT');
$this->addJoin('public.tbl_person vorsitzenderpers', 'vorsitzenderben.person_id = vorsitzenderpers.person_id', 'LEFT');
$this->addJoin('public.tbl_person erstprueferpers', 'pruefer1 = erstprueferpers.person_id', 'LEFT');
$this->addJoin('public.tbl_person zweitprueferpers', 'pruefer2 = zweitprueferpers.person_id', 'LEFT');
$abschlusspruefung = $this->load($abschlusspruefung_id);
if (isError($abschlusspruefung))
return $abschlusspruefung;
elseif (hasData($abschlusspruefung))
{
$abschlusspruefungdata = getData($abschlusspruefung)[0];
// get Studiengang of Student
$student_uid = $abschlusspruefungdata->uid_student;
$this->StudentModel->addSelect('prestudent_id');
$prestudent_id = $this->StudentModel->load(array('student_uid' => $student_uid));
if (isError($prestudent_id))
return $prestudent_id;
elseif (hasData($prestudent_id))
{
//get Studiengangname from Studienplan and -ordnung
$studienordnung = $this->PrestudentstatusModel->getStudienordnungFromPrestudent(getData($prestudent_id)[0]->prestudent_id);
if (isError($studienordnung))
return $studienordnung;
elseif (hasData($studienordnung))
{
$studienordnungdata = getData($studienordnung)[0];
$abschlusspruefungdata->studiengang_kz = $studienordnungdata->studiengang_kz;
$abschlusspruefungdata->studiengangbezeichnung = $studienordnungdata->studiengangbezeichnung;
$abschlusspruefungdata->studiengangbezeichnung_englisch = $studienordnungdata->studiengangbezeichnung_englisch;
$this->StudiengangModel->addSelect('typ');
$typ = $this->StudiengangModel->load($studienordnungdata->studiengang_kz);
if (isError($typ))
return $typ;
elseif (hasData($typ))
{
$abschlusspruefungdata->studiengangstyp = getData($typ)[0]->typ;
}
// get Abschlussarbeit
$projekttyp = array('Bachelor','Diplom','Master','Dissertation','Lizenziat','Magister');
$abschlussarbeit = $this->ProjektarbeitModel->getProjektarbeit($student_uid, $studienordnungdata->studiengang_kz, null, $projekttyp, true);
if (isError($abschlussarbeit))
return $abschlussarbeit;
if (hasData($abschlussarbeit))
{
$abschlussarbeit = getData($abschlussarbeit)[0];
$abschlusspruefungdata->projektarbeit_studiengangstyp_name = $abschlussarbeit->projekttyp_kurzbz;
$abschlusspruefungdata->abschlussarbeit_titel = $abschlussarbeit->titel;
$abschlusspruefungdata->abschlussarbeit_note = $abschlussarbeit->note;
}
}
}
}
return success($abschlusspruefungdata);
}
}
@@ -11,4 +11,62 @@ class Projektarbeit_model extends DB_Model
$this->dbTable = 'lehre.tbl_projektarbeit';
$this->pk = 'projektarbeit_id';
}
/**
* Gets Projektarbeit(en) of a student for a Studiengang, Semester, Projekttyp, final.
* @param $student_uid
* @param $studiengang_kz
* @param $studiensemester_kurzbz
* @param $projekttyp
* @param $final
* @return object
*/
public function getProjektarbeit($student_uid, $studiengang_kz = null, $studiensemester_kurzbz = null, $projekttyp = null, $final = null)
{
$qry = "SELECT
tbl_projektarbeit.* , tbl_projekttyp.bezeichnung
FROM
lehre.tbl_projektarbeit
JOIN
lehre.tbl_projekttyp USING (projekttyp_kurzbz), lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung
WHERE
tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND
tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id AND
tbl_projektarbeit.student_uid = ?";
$params = array($student_uid);
if (isset($studiengang_kz))
{
$qry .= ' AND tbl_lehrveranstaltung.studiengang_kz=?';
$params[] = $studiengang_kz;
}
if (isset($studiensemester_kurzbz))
{
$qry .= ' AND tbl_lehreinheit.studiensemester_kurzbz=?';
$params[] = $studiensemester_kurzbz;
}
if (isset($projekttyp))
{
if (is_array($projekttyp))
$qry .= ' AND tbl_projektarbeit.projekttyp_kurzbz IN ?';
else
$qry .= ' AND tbl_projektarbeit.projekttyp_kurzbz=?';
$params[] = $projekttyp;
}
if (isset($final))
{
$qry .= ' AND tbl_projektarbeit.final=?';
$params[] = $final;
}
$qry .= ' ORDER BY beginn DESC, projektarbeit_id DESC';
return $this->execQuery($qry, $params);
}
}
@@ -0,0 +1,232 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Pruefungsprotokoll',
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'dialoglib' => true,
'ajaxlib' => true,
'sbadmintemplate' => true,
'phrases' => array(
'abschlusspruefung' => array(
'freigegebenAm',
'pruefungGespeichert',
'pruefungSpeichernFehler',
'abschlussbeurteilungLeer',
'beginnzeitLeer',
'beginnzeitFormatError',
'endezeitLeer',
'endezeitFormatError',
'endezeitBeforeError',
'verfNotice'
),
'ui' => array(
'stunde',
'minute'
)
),
'customCSSs' => array(
'public/css/sbadmin2/admintemplate_contentonly.css',
'vendor/fgelinas/timepicker/jquery.ui.timepicker.css',
'public/css/lehre/pruefungsprotokoll.css'
),
'customJSs' => array(
'vendor/fgelinas/timepicker/jquery.ui.timepicker.js',
'public/js/lehre/pruefungsprotokoll.js'
)
)
);
?>
<body>
<div id="wrapper">
<div id="page-wrapper">
<div class="container-fluid">
<?php if (isset($abschlusspruefung)):
$studiengangstyp_name = $abschlusspruefung->studiengangstyp == 'b' ? 'Bachelor' : 'Master';
$pruefung_name = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungBachelor') : $this->p->t('abschlusspruefung', 'pruefungMaster');
$arbeit_name = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'arbeitBachelor') : $this->p->t('abschlusspruefung', 'arbeitMaster');
$protokolltextvorlage = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungsnotizenBachelor') : $this->p->t('abschlusspruefung', 'pruefungsnotizenMaster');
$protokolltext = isset($abschlusspruefung->protokoll) ? $abschlusspruefung->protokoll : $protokolltextvorlage;
?>
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo $this->p->t('abschlusspruefung', 'protokoll') ?>&nbsp;<?php echo $pruefung_name ?>
</h3>
<p>
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'abgehaltenAmBachelor') : $this->p->t('abschlusspruefung', 'abgehaltenAmMaster'); ?>
<?php echo $language == 'German' ? $abschlusspruefung->studiengangbezeichnung : $abschlusspruefung->studiengangbezeichnung_englisch ?>,&nbsp;<?php echo $this->p->t('abschlusspruefung', 'studiengangskennzahl') ?>&nbsp;
<?php echo $abschlusspruefung->studiengang_kz ?>
</p>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<h4>
<?php echo $abschlusspruefung->titelpre_student . ' ' . $abschlusspruefung->vorname_student . ' ' . $abschlusspruefung->nachname_student . ' ' . $abschlusspruefung->titelpost_student?>
</h4>
<p><?php echo $this->p->t('abschlusspruefung', 'personenkennzeichen') ?>: <?php echo $abschlusspruefung->matrikelnr ?></p>
<br />
<input type="hidden" name="abschlusspruefung_id" value="<?php echo $abschlusspruefung->abschlusspruefung_id;?>" id="abschlusspruefung_id">
<form id="protocolform">
<table class="table-condensed table-bordered table-responsive" id="protocoltbl">
<tr>
<td colspan="6">
<?php echo $this->p->t('abschlusspruefung', 'pruefungssenat') ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'vorsitz') ?>
</td>
<td colspan="5">
<?php echo $abschlusspruefung->titelpre_vorsitz . ' ' . $abschlusspruefung->vorname_vorsitz . ' ' . $abschlusspruefung->nachname_vorsitz . ' ' . $abschlusspruefung->titelpost_vorsitz ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'erstpruefer') ?>
</td>
<td colspan="5">
<?php echo $abschlusspruefung->titelpre_erstpruefer . ' ' . $abschlusspruefung->vorname_erstpruefer . ' ' . $abschlusspruefung->nachname_erstpruefer . ' ' . $abschlusspruefung->titelpost_erstpruefer ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'zweitpruefer') ?>
</td>
<td colspan="5">
<?php echo $abschlusspruefung->titelpre_zweitpruefer . ' ' . $abschlusspruefung->vorname_zweitpruefer . ' ' . $abschlusspruefung->nachname_zweitpruefer . ' ' . $abschlusspruefung->titelpost_zweitpruefer ?>
</td>
</tr>
<tr>
<td class="namecellwidth">
<?php echo $this->p->t('abschlusspruefung', 'pruefungsdatum') ?>
</td>
<td class="datevalcellwidth">
<?php echo date_format(date_create($abschlusspruefung->datum), 'd.m.Y'); ?>
</td>
<td class="cellbg namecellwidth">
<?php echo $this->p->t('abschlusspruefung', 'pruefungsbeginn') ?>
</td>
<td class="timecellwidth">
<input class="timepicker form-control" name="pruefungsbeginn" id="pruefungsbeginn" value="<?php echo isEmptyString($abschlusspruefung->pruefungsbeginn) ? '' : date_format(date_create($abschlusspruefung->pruefungsbeginn), 'H:i') ?>">
</td>
<td class="cellbg namecellwidth">
<?php echo $this->p->t('abschlusspruefung', 'pruefungsende') ?>
</td>
<td class="timecellwidth">
<input class="timepicker form-control" name="pruefungsende" id="pruefungsende" value="<?php echo isEmptyString($abschlusspruefung->pruefungsbeginn) ? '' : date_format(date_create($abschlusspruefung->pruefungsende), 'H:i') ?>">
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'pruefungsantritt') ?>
</td>
<td colspan="5">
<?php echo $language == 'German' ? $abschlusspruefung->pruefungsantritt_bezeichnung : $abschlusspruefung->pruefungsantritt_bezeichnung_english; ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'einverstaendniserklaerungName') ?>
</td>
<td colspan="5">
<input type="checkbox" id="verfCheck">
<?php echo $this->p->t('abschlusspruefung', 'einverstaendniserklaerungText') ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'themaBeurteilung') ?>&nbsp;<?php echo $arbeit_name ?>
</td>
<td colspan="4">
<?php echo isset($abschlusspruefung->abschlussarbeit_titel) ? $abschlusspruefung->abschlussarbeit_titel : '' ?>
</td>
<td>
<?php echo $this->p->t('lehre', 'note') ?>: <?php echo isset($abschlusspruefung->abschlussarbeit_note) ? $abschlusspruefung->abschlussarbeit_note : '' ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->p->t('abschlusspruefung', 'pruefungsgegenstand') ?>
</td>
<td colspan="5">
<?php echo ($abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungsgegenstandBachelor') : $this->p->t('abschlusspruefung', 'pruefungsgegenstandMaster')) ?>
</td>
</tr>
<tr>
<td colspan="6">
<?php echo ucfirst($this->p->t('global', 'notizen')); ?>
</td>
</tr>
<tr>
<td colspan="6">
<textarea id="protokoll" name="protokoll" class="form-control" rows="15" cols="107"><?php echo $protokolltext ?></textarea>
</td>
</tr>
<tr>
<td colspan="6">
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'beurteilungKriterienBachelor') : $this->p->t('abschlusspruefung', 'beurteilungKriterienMaster') ?>
</td>
</tr>
<tr>
<td colspan="6">
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'beurteilungBachelor') : $this->p->t('abschlusspruefung', 'beurteilungMaster') ?>:
<select name="abschlussbeurteilung_kurzbz" id="abschlussbeurteilung_kurzbz" class="form-control">
<option value="">-- <?php echo $this->p->t('ui', 'bitteWaehlen'); ?> --</option>
<?php foreach ($abschlussbeurteilung as $beurteilung):
$selected = $beurteilung->abschlussbeurteilung_kurzbz == $abschlusspruefung->abschlussbeurteilung_kurzbz ? " selected" : "" ?>
<option value="<?php echo $beurteilung->abschlussbeurteilung_kurzbz; ?>"<?php echo $selected ?>><?php echo $language == 'German' ? $beurteilung->bezeichnung : $beurteilung->bezeichnung_english; ?> </option>
<?php endforeach; ?>
</select>
<span id="verfNotice"></span>
</td>
</tr>
</table>
</form>
<br />
</div>
</div>
<div class="row">
<div class="col-lg-12 text-right">
<p>
<?php $freigegeben = isset($abschlusspruefung->freigabedatum); ?>
<button id="saveProtocolBtn" class="btn btn-default"<?php echo $freigegeben ? " disabled" : "" ?>><?php echo $this->p->t('ui', 'speichern') ?></button>
</p>
</div>
</div>
<hr id="hrbottom">
<div class="row">
<div class="col-lg-12">
<span id="freigegebenText">
<?php
if ($freigegeben)
echo '&nbsp;&nbsp;' . $this->p->t('abschlusspruefung', 'freigegebenAm') . ' ' . date_format(date_create($abschlusspruefung->freigabedatum), 'd.m.Y')
?>
</span>
</div>
</div>
<br />
<div class="row">
<div class="col-lg-8">
<div class="input-group">
<input id="username" type="hidden" value=""><!-- this is to prevent Chrome autofilling a random input field with the username-->
<input id="password" type="password" autocomplete="new-password" class="form-control" placeholder="CIS-<?php echo ucfirst($this->p->t('password', 'password')); ?>">
<span class="input-group-btn">
<button id="freigebenProtocolBtn" class="btn btn-default"><?php echo $this->p->t('abschlusspruefung', 'ueberpruefenFreigeben') ?></button>
</span>
</div>
</div>
</div>
<br />
<br />
<?php endif; ?>
</div>
</div>
</div>
@@ -0,0 +1,46 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Prüfungsprotokoll',
'jquery' => true,
'jqueryui' => true,
'jquerycheckboxes' => true,
'bootstrap' => true,
'fontawesome' => true,
'tablesorter' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tablewidget' => true,
'phrases' => array(
'ui' => array(
'keineDatenVorhanden',
)
),
'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css'),
'customJSs' => array('public/js/bootstrapper.js')
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo $this->p->t('abschlusspruefung','pruefungsprotokoll'); ?>
</h3>
</div>
</div>
<?php echo $this->p->t('abschlusspruefung','einfuehrungstext'); ?>
<div class="row">
<div class="col-lg-12">
<?php $this->load->view('lehre/pruefungsprotokollUebersichtData.php'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,67 @@
<?php
$UID = getAuthUID();
$query = "
SELECT
tbl_abschlusspruefung.abschlusspruefung_id,
tbl_person.nachname || ' ' || tbl_person.vorname as name,
tbl_studiengangstyp.bezeichnung || ' ' || tbl_studiengang.bezeichnung,
tbl_abschlusspruefung.datum,
tbl_abschlusspruefung.freigabedatum
FROM
lehre.tbl_abschlusspruefung
JOIN public.tbl_student USING(student_uid)
JOIN public.tbl_benutzer ON(student_uid=uid)
JOIN public.tbl_person USING(person_id)
JOIN public.tbl_studiengang ON(tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz)
JOIN public.tbl_studiengangstyp USING(typ);
WHERE
vorsitz='".$UID."'
AND datum>='2020-05-27'
ORDER BY datum, nachname, vorname
";
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'pruefungsprotokoll',
'requiredPermissions' => 'lehre/pruefungsbeurteilung',
'datasetRepresentation' => 'tablesorter',
'columnsAliases' => array(
ucfirst($this->p->t('global', 'details')),
ucfirst($this->p->t('global', 'name')),
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('global', 'datum')),
ucfirst($this->p->t('global', 'status')),
),
'formatRow' => function($datasetRaw) {
/* NOTE: Dont use $this here for PHP Version compatibility */
$datasetRaw->{'abschlusspruefung_id'} = sprintf(
'<a href="%s?abschlusspruefung_id=%s" target="_blank">Protokoll ausfüllen</a>',
site_url('lehre/Pruefungsprotokoll/Protokoll'),
$datasetRaw->{'abschlusspruefung_id'}
);
if ($datasetRaw->{'datum'} == null)
{
$datasetRaw->{'datum'} = '-';
}
else
{
$datasetRaw->{'datum'} = date_format(date_create($datasetRaw->{'datum'}),'d.m.Y');
}
if ($datasetRaw->{'freigabedatum'} == null)
{
$datasetRaw->{'freigabedatum'} = 'offen';
}
else
{
$datasetRaw->{'freigabedatum'} = 'Freigegeben am: '.date_format(date_create($datasetRaw->{'freigabedatum'}),'d.m.Y');
}
return $datasetRaw;
},
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
+21 -3
View File
@@ -3776,6 +3776,9 @@ if(!$error)
$pruefung->pruefer2 = $_POST['pruefer2'];
$pruefung->pruefer3 = $_POST['pruefer3'];
$pruefung->abschlussbeurteilung_kurzbz = $_POST['abschlussbeurteilung_kurzbz'];
if(isset($_POST['pruefungsantritt_kurzbz']))
$pruefung->pruefungsantritt_kurzbz = $_POST['pruefungsantritt_kurzbz'];
$pruefung->note = $_POST['notekommpruef'];
$pruefung->akadgrad_id = $_POST['akadgrad_id'];
$pruefung->pruefungstyp_kurzbz = $_POST['pruefungstyp_kurzbz'];
@@ -3815,10 +3818,25 @@ if(!$error)
if(isset($_POST['abschlusspruefung_id']) && is_numeric($_POST['abschlusspruefung_id']))
{
$pruefung = new abschlusspruefung();
if($pruefung->delete($_POST['abschlusspruefung_id']))
if($pruefung->load($_POST['abschlusspruefung_id']))
{
$return = true;
if ($pruefung->freigabedatum == '')
{
if($pruefung->delete($_POST['abschlusspruefung_id']))
{
$return = true;
}
else
{
$errormsg = $pruefung->errormsg;
$return = false;
}
}
else
{
$errormsg = 'Löschen ist nicht möglich da bereits ein freigegebenes Protokoll vorhanden ist';
$return = false;
}
}
else
{
@@ -163,6 +163,7 @@ function StudentAbschlusspruefungDetailDisableFields(val)
document.getElementById('student-abschlusspruefung-menulist-pruefer2').disabled=val;
document.getElementById('student-abschlusspruefung-menulist-pruefer3').disabled=val;
document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').disabled=val;
document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').disabled=val;
document.getElementById('student-abschlusspruefung-menulist-notekommpruef').disabled=val;
document.getElementById('student-abschlusspruefung-menulist-akadgrad').disabled=val;
document.getElementById('student-abschlusspruefung-menulist-typ').disabled=val;
@@ -186,6 +187,7 @@ function StudentAbschlusspruefungResetFields()
document.getElementById('student-abschlusspruefung-menulist-pruefer2').value='';
document.getElementById('student-abschlusspruefung-menulist-pruefer3').value='';
document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value='';
document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value='';
document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value='';
//document.getElementById('student-abschlusspruefung-menulist-akadgrad').value='';
//document.getElementById('student-abschlusspruefung-menulist-typ').value='Bachelor';
@@ -342,6 +344,7 @@ function StudentAbschlusspruefungAuswahl()
pruefer3 = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefer3" ));
pruefer3_nachname = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefer3_nachname" ));
abschlussbeurteilung_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#abschlussbeurteilung_kurzbz" ));
pruefungsantritt_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefungsantritt_kurzbz" ));
notekommpruef = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#notekommpruef" ));
akadgrad_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#akadgrad_id" ));
datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#datum" ));
@@ -395,6 +398,7 @@ function StudentAbschlusspruefungAuswahl()
MenulistSelectItemOnValue('student-abschlusspruefung-menulist-pruefer2', pruefer2);
MenulistSelectItemOnValue('student-abschlusspruefung-menulist-pruefer3', pruefer3);
document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value=abschlussbeurteilung_kurzbz;
document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value=pruefungsantritt_kurzbz;
document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value=notekommpruef;
document.getElementById('student-abschlusspruefung-menulist-akadgrad').value=akadgrad_id;
document.getElementById('student-abschlusspruefung-datum-datum').value=datum;
@@ -424,6 +428,7 @@ function StudentAbschlusspruefungSpeichern()
var pruefer2 = MenulistGetSelectedValue('student-abschlusspruefung-menulist-pruefer2');
var pruefer3 = MenulistGetSelectedValue('student-abschlusspruefung-menulist-pruefer3');
var abschlussbeurteilung_kurzbz = document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value;
var pruefungsantritt_kurzbz = document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value;
var notekommpruef = document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value;
var akadgrad_id = document.getElementById('student-abschlusspruefung-menulist-akadgrad').value;
var datum = document.getElementById('student-abschlusspruefung-datum-datum').value;
@@ -482,6 +487,7 @@ function StudentAbschlusspruefungSpeichern()
req.add('pruefer2', pruefer2);
req.add('pruefer3', pruefer3);
req.add('abschlussbeurteilung_kurzbz', abschlussbeurteilung_kurzbz);
req.add('pruefungsantritt_kurzbz', pruefungsantritt_kurzbz);
req.add('notekommpruef', notekommpruef);
req.add('akadgrad_id', akadgrad_id);
req.add('datum', ConvertDateToISO(datum));
@@ -97,6 +97,14 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#uhrzeit" onclick="StudentAbschlusspruefungTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-abschlusspruefung-treecol-freigabedatum" label="Freigabe" flex="1" persist="hidden, width" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#freigabedatum_iso" onclick="StudentAbschlusspruefungTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-abschlusspruefung-treecol-pruefungsantritt" label="Prüfungsantritt" flex="1" persist="hidden, width" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#pruefungsantritt_bezeichnung" onclick="StudentAbschlusspruefungTreeSort()"/>
<splitter class="tree-splitter"/>
<treecol id="student-abschlusspruefung-treecol-sponsion" label="Sponsion" flex="1" persist="hidden, width" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#sponsion_iso" onclick="StudentAbschlusspruefungTreeSort()"/>
@@ -132,6 +140,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#abschlussbeurteilung_kurzbz" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#datum" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#uhrzeit" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#freigabedatum" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#pruefungsantritt_bezeichnung" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#sponsion" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#anmerkung" />
<treecell label="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#abschlusspruefung_id" />
@@ -165,12 +175,13 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<rows>
<row>
<label value="Typ" control="student-abschlusspruefung-menulist-typ" />
<menulist id="student-abschlusspruefung-menulist-typ"
disabled="true"
datasources="<?php echo APP_ROOT; ?>rdf/pruefungstyp.rdf.php?abschluss=true" flex="1"
ref="http://www.technikum-wien.at/pruefungstyp/liste"
oncommand="StudentAbschlusspruefungTypChange()"
>
<menulist
id="student-abschlusspruefung-menulist-typ"
disabled="true"
datasources="<?php echo APP_ROOT; ?>rdf/pruefungstyp.rdf.php?abschluss=true" flex="1"
ref="http://www.technikum-wien.at/pruefungstyp/liste"
oncommand="StudentAbschlusspruefungTypChange()"
>
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/pruefungstyp/rdf#pruefungstyp_kurzbz"
@@ -178,8 +189,9 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
uri="rdf:*"/>
</menupopup>
</template>
</menulist>
<label value="Note komm. Pruefung" control="student-abschlusspruefung-menulist-notekommpruef" />
</menulist>
<label value="Note komm. Pruefung" control="student-abschlusspruefung-menulist-notekommpruef" />
<menulist id="student-abschlusspruefung-menulist-notekommpruef"
disabled="true"
datasources="<?php echo APP_ROOT;?>rdf/note.rdf.php?optional=true" flex="1"
@@ -194,6 +206,23 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
</template>
</menulist>
</row>
<row>
<label value="Prüfungsantritt" control="student-abschlusspruefung-menulist-pruefungsantritt" />
<menulist
id="student-abschlusspruefung-menulist-pruefungsantritt"
disabled="true"
datasources="<?php echo APP_ROOT; ?>rdf/abschlusspruefung_antritt.rdf.php?optional=true" flex="1"
ref="http://www.technikum-wien.at/abschlusspruefung_antritt/liste"
>
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/abschlusspruefung_antritt/rdf#pruefungsantritt_kurzbz"
label="rdf:http://www.technikum-wien.at/abschlusspruefung_antritt/rdf#bezeichnung"
uri="rdf:*"/>
</menupopup>
</template>
</menulist>
</row>
<row>
<label value="Vorsitz" control="student-abschlusspruefung-menulist-vorsitz" />
<menulist id="student-abschlusspruefung-menulist-vorsitz"
+29 -3
View File
@@ -50,6 +50,11 @@ class abschlusspruefung extends basis_db
public $insertamum;
public $insertvon;
public $ext_id;
public $protokoll;
public $endezeit;
public $pruefungsantritt_kurzbz;
public $freigabedatum;
/**
* Konstruktor
@@ -108,6 +113,10 @@ class abschlusspruefung extends basis_db
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->ext_id = $row->ext_id;
$this->protokoll = $row->protokoll;
$this->endezeit = $row->endezeit;
$this->pruefungsantritt_kurzbz = $row->pruefungsantritt_kurzbz;
$this->freigabedatum = $row->freigabedatum;
return true;
}
else
@@ -195,7 +204,7 @@ class abschlusspruefung extends basis_db
$qry = "BEGIN;INSERT INTO lehre.tbl_abschlusspruefung (student_uid, vorsitz, pruefer1,
pruefer2, pruefer3, abschlussbeurteilung_kurzbz, akadgrad_id, datum, uhrzeit, sponsion,
pruefungstyp_kurzbz, anmerkung, updateamum, updatevon, insertamum, insertvon,
note) VALUES (".
note, protokoll, endezeit, pruefungsantritt_kurzbz, freigabedatum) VALUES (".
$this->db_add_param($this->student_uid).', '.
$this->db_add_param($this->vorsitz).', '.
$this->db_add_param($this->pruefer1).', '.
@@ -212,7 +221,11 @@ class abschlusspruefung extends basis_db
$this->db_add_param($this->updatevon).', '.
$this->db_add_param($this->insertamum).', '.
$this->db_add_param($this->insertvon).', '.
$this->db_add_param($this->note, FHC_INTEGER).');';
$this->db_add_param($this->note, FHC_INTEGER).','.
$this->db_add_param($this->protokoll).','.
$this->db_add_param($this->endezeit).','.
$this->db_add_param($this->pruefungsantritt_kurzbz).','.
$this->db_add_param($this->freigabedatum).');';
}
else
@@ -233,7 +246,11 @@ class abschlusspruefung extends basis_db
" pruefungstyp_kurzbz=".$this->db_add_param($this->pruefungstyp_kurzbz).",".
" anmerkung=".$this->db_add_param($this->anmerkung).",".
" updateamum=".$this->db_add_param($this->updateamum).",".
" updatevon=".$this->db_add_param($this->updatevon).
" updatevon=".$this->db_add_param($this->updatevon).",".
" protokoll=".$this->db_add_param($this->protokoll).",".
" endezeit=".$this->db_add_param($this->endezeit).",".
" pruefungsantritt_kurzbz=".$this->db_add_param($this->pruefungsantritt_kurzbz).",".
" freigabedatum=".$this->db_add_param($this->freigabedatum)." ".
" WHERE abschlusspruefung_id=".$this->db_add_param($this->abschlusspruefung_id, FHC_INTEGER, false);
}
@@ -315,6 +332,10 @@ class abschlusspruefung extends basis_db
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->ext_id = $row->ext_id;
$obj->protokoll = $row->protokoll;
$obj->endezeit = $row->endezeit;
$obj->pruefungsantritt_kurzbz = $row->pruefungsantritt_kurzbz;
$obj->freigabedatum = $row->freigabedatum;
$this->result[] = $obj;
}
@@ -366,6 +387,11 @@ class abschlusspruefung extends basis_db
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->ext_id = $row->ext_id;
$this->protokoll = $row->protokoll;
$this->endezeit = $row->endezeit;
$this->pruefungsantritt_kurzbz = $row->pruefungsantritt_kurzbz;
$this->freigabedatum = $row->freigabedatum;
}
return true;
}
+117
View File
@@ -0,0 +1,117 @@
<?php
/* Copyright (C) 2020 FH Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
*/
/**
* Klasse zur Verwaltung der Abschlusspruefungsantritte
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
class abschlusspruefung_antritt extends basis_db
{
public $new;
public $result = array();
//Tabellenspalten
public $pruefungsantritt_kurzbz;
public $bezeichnung;
public $bezeichnung_english;
public $sort;
/**
* Konstruktor
* @param $pruefungsantritt_kurzbz kurzbz des zu ladenden Datensatzes
*/
public function __construct($pruefungsantritt_kurzbz=null)
{
parent::__construct();
if(!is_null($pruefungsantritt_kurzbz))
$this->load($pruefungsantritt_kurzbz);
}
/**
* Laedt einen Datensatz
* @param $pruefungsantritt_kurzbz Kurzbz des zu ladenden Datensatzes
*/
public function load($pruefungsantritt_kurzbz)
{
//laden des Datensatzes
$qry = "SELECT
*
FROM
lehre.tbl_abschlusspruefung_antritt
WHERE pruefungsantritt_kurzbz=".$this->db_add_param($pruefungsantritt_kurzbz).";";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$this->pruefungsantritt_kurzbz = $row->pruefungsantritt_kurzbz;
$this->bezeichnung = $row->bezeichnung;
$this->bezeichnung_english = $row->bezeichnung_english;
$this->sort = $row->sort;
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
/**
* Liefert alle Abschlussprüfungsantritt
* @return boolean true wenn erfolgreich, false im Fehlerfall
*/
public function getAll()
{
$qry = "SELECT
*
FROM
lehre.tbl_abschlusspruefung_antritt
ORDER BY sort";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new abschlusspruefung_antritt();
$obj->pruefungsantritt_kurzbz = $row->pruefungsantritt_kurzbz;
$obj->bezeichnung = $row->bezeichnung;
$obj->bezeichnung_english = $row->bezeichnung_english;
$obj->sort = $row->sort;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+45
View File
@@ -0,0 +1,45 @@
/* threshold for full screen form */
@media (max-width:1075px) {
#page-wrapper {
margin-right: 0;
margin-left: 0;
}
}
#protocoltbl textarea {
/* notiz field should stay in table */
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
}
#protocoltbl td:nth-child(1), .cellbg {
background-color: #f5f5f5;
}
/* table date and time cell widths */
.timecellwidth {
width: 20%;
}
.namecellwidth {
width: 15%;
}
.datevalcellwidth {
width: 10%;
}
#hrbottom {
border-top: 2px solid #eee;
margin-top: 10px;
margin-bottom: 10px;
}
/* timepicker */
.ui-timepicker-table td a {
width: inherit;
line-height: 1;
text-align: center;
}
@@ -3,7 +3,8 @@
@media (min-width:768px) {
#page-wrapper {
margin-right: 250px;
margin-right: 180px;
margin-left: 180px;
margin-top: 8px;
border: 1px solid #e7e7e7;
}
+44 -29
View File
@@ -336,47 +336,62 @@ var FHC_TableWidget = {
if (typeof tableWidgetDiv.find("#tableWidgetTableDataset").checkboxes === 'function')
tableWidgetDiv.find("#tableWidgetTableDataset").checkboxes("range", true);
}
for (var i = 0; i < data.dataset.length; i++)
if (data.dataset.length == 0)
{
var record = data.dataset[i];
if ($.isEmptyObject(record))
// Display placeholder if Table is empty
var numColumns = arrayFieldsToDisplay.length;
if (data.hasOwnProperty("additionalColumns") && $.isArray(data.additionalColumns))
{
continue;
numColumns += data.additionalColumns.length;
}
var strHtml = "<tr class='" + record.MARK_ROW_CLASS + "'>";
if (data.checkboxes != null && data.checkboxes != "")
var strHtml = '<tr><td align="center" colspan="'+numColumns+'">';
strHtml += FHC_PhrasesLib.t('ui', 'keineDatenVorhanden');
strHtml += '</td></tr>';
tableWidgetDiv.find("#tableWidgetTableDataset > tbody").append(strHtml);
}
else
{
for (var i = 0; i < data.dataset.length; i++)
{
strHtml += "<td>";
strHtml += "<input type='checkbox' name='" + data.checkboxes + "[]' value='" + record[data.checkboxes] + "'>";
strHtml += "</td>";
}
var record = data.dataset[i];
$.each(arrayFieldsToDisplay, function(i, fieldToDisplay) {
if (record.hasOwnProperty(data.fields[i]))
if ($.isEmptyObject(record))
{
strHtml += "<td>" + record[data.fields[i]] + "</td>";
continue;
}
});
if (data.additionalColumns != null && $.isArray(data.additionalColumns))
{
$.each(data.additionalColumns, function(i, additionalColumn) {
var strHtml = "<tr class='" + record.MARK_ROW_CLASS + "'>";
if (record.hasOwnProperty(additionalColumn))
if (data.checkboxes != null && data.checkboxes != "")
{
strHtml += "<td>";
strHtml += "<input type='checkbox' name='" + data.checkboxes + "[]' value='" + record[data.checkboxes] + "'>";
strHtml += "</td>";
}
$.each(arrayFieldsToDisplay, function(i, fieldToDisplay) {
if (record.hasOwnProperty(data.fields[i]))
{
strHtml += "<td>" + record[additionalColumn] + "</td>";
strHtml += "<td>" + record[data.fields[i]] + "</td>";
}
});
if (data.additionalColumns != null && $.isArray(data.additionalColumns))
{
$.each(data.additionalColumns, function(i, additionalColumn) {
if (record.hasOwnProperty(additionalColumn))
{
strHtml += "<td>" + record[additionalColumn] + "</td>";
}
});
}
strHtml += "</tr>";
tableWidgetDiv.find("#tableWidgetTableDataset > tbody").append(strHtml);
}
strHtml += "</tr>";
tableWidgetDiv.find("#tableWidgetTableDataset > tbody").append(strHtml);
}
}
}
@@ -540,7 +555,7 @@ var FHC_TableWidget = {
options.columnVisibilityChanged = function(column, visible) {
_func_columnVisibilityChanged(column, visible);
};
// Renders the tabulator
tableWidgetDiv.find("#tableWidgetTabulator").tabulator(options);
}
+1 -1
View File
@@ -9,7 +9,7 @@ $(document).ready(function() {
var Bootstrapper = {
bootstraphtml: function ()
{
$("input[type=text], select").addClass("form-control");
$("input[type=text], select, textarea").addClass("form-control");
$("button, input[type=button]").addClass("btn btn-default");
$("table").addClass("table-condensed");
}
+148
View File
@@ -0,0 +1,148 @@
const CALLED_PATH = FHC_JS_DATA_STORAGE_OBJECT.called_path;
$("document").ready(function() {
// if no abschlussbeurteilung is not filled out, new formular -> verfassungscheck is by default not checked.
// If abschlussbeurteilung is filled out -> already graded, verfassungscheck is checked.
Pruefungsprotokoll.abschlussbeurteilung_kurzbz = $("#abschlussbeurteilung_kurzbz").val();
if (Pruefungsprotokoll.abschlussbeurteilung_kurzbz != '')
$("#verfCheck").prop('checked', true);
Pruefungsprotokoll.checkVerfassung();
$("#saveProtocolBtn, #freigebenProtocolBtn").click(
function() {
var data = {
abschlussbeurteilung_kurzbz: $("#abschlussbeurteilung_kurzbz").val(),
protokoll: $("#protokoll").val(),
uhrzeit: $("#pruefungsbeginn").val(),
endezeit: $("#pruefungsende").val()
}
if ($(this).prop("id") === 'freigebenProtocolBtn')
{
data.freigabedatum = true;
data.password = $("#password").val();
}
var checkFields = Pruefungsprotokoll.checkFields(data, $("#verfCheck").prop('checked'));
$("#protocolform td").removeClass('has-error');
if (checkFields.length > 0)
{
var errortext = '';
for (var i = 0; i < checkFields.length; i++)
{
var error = checkFields[i];
$.each(error, function(i, n)
{
console.log($("#"+i).closest('td'));
$("#"+i).closest('td').addClass('has-error');
if (errortext !== '')
errortext += '; ';
errortext += n;
});
}
FHC_DialogLib.alertError(errortext);
return;
}
Pruefungsprotokoll.saveProtokoll($("#abschlusspruefung_id").val(),data);
}
)
$("#verfCheck").change(
Pruefungsprotokoll.checkVerfassung
);
$( ".timepicker" ).timepicker({
showPeriodLabels: false,
hours: {starts: 7,ends: 22},
timeFormat: 'hh:mm',
defaultTime: '',
hourText: FHC_PhrasesLib.t("ui", "stunde"),
minuteText: FHC_PhrasesLib.t("ui", "minute"),
rows: 4
});
})
var Pruefungsprotokoll = {
abschlussbeurteilung_kurzbz: '',
checkVerfassung: function()
{
// if student not mentally and physically fit (checkbox), no grade can be set
if ($("#verfCheck").prop('checked'))
{
$("#abschlussbeurteilung_kurzbz").prop('disabled', false).val(Pruefungsprotokoll.abschlussbeurteilung_kurzbz);
$("#verfNotice").html("");
}
else
{
$("#abschlussbeurteilung_kurzbz").prop('disabled', true).val(null);
$("#verfNotice").html(FHC_PhrasesLib.t("abschlusspruefung", "verfNotice"));
}
},
checkFields: function(data, verfChecked)
{
var errors = [];
if (data.abschlussbeurteilung_kurzbz == "" && verfChecked)
errors.push({"abschlussbeurteilung_kurzbz": FHC_PhrasesLib.t("abschlusspruefung", "abschlussbeurteilungLeer")});
var zeitregex = /^[0-2][0-9]:[0-5][0-9]$/;
if (data.uhrzeit == "")
{
if (verfChecked)
errors.push({"pruefungsbeginn": FHC_PhrasesLib.t("abschlusspruefung", "beginnzeitLeer")});
}
else if(!zeitregex.test(data.uhrzeit))
errors.push({"pruefungsbeginn": FHC_PhrasesLib.t("abschlusspruefung", "beginnzeitFormatError")});
if (data.endezeit == "")
{
if (verfChecked)
errors.push({"pruefungsende": FHC_PhrasesLib.t("abschlusspruefung", "endezeitLeer")});
}
else if(!zeitregex.test(data.endezeit))
errors.push({"pruefungsende": FHC_PhrasesLib.t("abschlusspruefung", "endezeitFormatError")});
if (data.uhrzeit > data.endezeit && data.endezeit != "" && data.uhrzeit != "")
errors.push({"pruefungsende": FHC_PhrasesLib.t("abschlusspruefung", "endezeitBeforeError")});
return errors;
},
// ajax calls
// -----------------------------------------------------------------------------------------------------------------
saveProtokoll: function(abschlusspruefung_id, data)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/saveProtokoll',
{
abschlusspruefung_id: abschlusspruefung_id,
protocoldata: data
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var dataresponse = FHC_AjaxClient.getData(data);
if (dataresponse.freigabedatum)
{
$("#saveProtocolBtn").prop("disabled", true);
$("#freigegebenText").html('&nbsp;&nbsp;' + FHC_PhrasesLib.t("abschlusspruefung", "freigegebenAm") +
'&nbsp;' + dataresponse.freigabedatum)
}
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("abschlusspruefung", "pruefungGespeichert"));
}
else if(FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
},
errorCallback: function() {
FHC_DialogLib.alertError(FHC_PhrasesLib.t("abschlusspruefung", "pruefungSpeichernFehler"));
},
veilTimeout: 0
}
);
}
}
+10
View File
@@ -28,6 +28,7 @@ header("Content-type: application/xhtml+xml");
require_once('../config/vilesci.config.inc.php');
require_once('../include/functions.inc.php');
require_once('../include/abschlusspruefung.class.php');
require_once('../include/abschlusspruefung_antritt.class.php');
require_once('../include/person.class.php');
require_once('../include/benutzer.class.php');
require_once('../include/student.class.php');
@@ -340,6 +341,10 @@ if ($xmlformat=='rdf')
$person = new person();
$mitarbeiter = new mitarbeiter();
$antritt = new abschlusspruefung_antritt();
if ($row->pruefungsantritt_kurzbz!='')
$antritt->load($row->pruefungsantritt_kurzbz);
if($mitarbeiter->load($row->vorsitz))
$vorsitz = $mitarbeiter->nachname;
if($person->load($row->pruefer1))
@@ -368,6 +373,11 @@ if ($xmlformat=='rdf')
<ABSCHLUSSPRUEFUNG:datum><![CDATA['.$datum_obj->convertISODate($row->datum).']]></ABSCHLUSSPRUEFUNG:datum>
<ABSCHLUSSPRUEFUNG:datum_iso><![CDATA['.$row->datum.']]></ABSCHLUSSPRUEFUNG:datum_iso>
<ABSCHLUSSPRUEFUNG:uhrzeit><![CDATA['.$row->uhrzeit.']]></ABSCHLUSSPRUEFUNG:uhrzeit>
<ABSCHLUSSPRUEFUNG:endezeit><![CDATA['.$row->endezeit.']]></ABSCHLUSSPRUEFUNG:endezeit>
<ABSCHLUSSPRUEFUNG:freigabedatum_iso><![CDATA['.$row->freigabedatum.']]></ABSCHLUSSPRUEFUNG:freigabedatum_iso>
<ABSCHLUSSPRUEFUNG:freigabedatum><![CDATA['.$datum_obj->convertISODate($row->freigabedatum).']]></ABSCHLUSSPRUEFUNG:freigabedatum>
<ABSCHLUSSPRUEFUNG:pruefungsantritt_kurzbz><![CDATA['.$row->pruefungsantritt_kurzbz.']]></ABSCHLUSSPRUEFUNG:pruefungsantritt_kurzbz>
<ABSCHLUSSPRUEFUNG:pruefungsantritt_bezeichnung><![CDATA['.$antritt->bezeichnung.']]></ABSCHLUSSPRUEFUNG:pruefungsantritt_bezeichnung>
<ABSCHLUSSPRUEFUNG:sponsion><![CDATA['.$datum_obj->convertISODate($row->sponsion).']]></ABSCHLUSSPRUEFUNG:sponsion>
<ABSCHLUSSPRUEFUNG:sponsion_iso><![CDATA['.$row->sponsion.']]></ABSCHLUSSPRUEFUNG:sponsion_iso>
<ABSCHLUSSPRUEFUNG:pruefungstyp_kurzbz><![CDATA['.$row->pruefungstyp_kurzbz.']]></ABSCHLUSSPRUEFUNG:pruefungstyp_kurzbz>
+76
View File
@@ -0,0 +1,76 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
// header für no cache
header("Cache-Control: no-cache");
header("Cache-Control: post-check=0, pre-check=0",false);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Pragma: no-cache");
// content type setzen
header("Content-type: application/xhtml+xml");
// xml
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
// DAO
require_once('../config/vilesci.config.inc.php');
require_once('../include/datum.class.php');
require_once('../include/basis_db.class.php');
require_once('../include/abschlusspruefung_antritt.class.php');
$rdf_url='http://www.technikum-wien.at/abschlusspruefung_antritt';
echo '
<RDF:RDF
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ABSCHLUSSPRUEFUNGANTRITT="'.$rdf_url.'/rdf#"
>
<RDF:Seq about="'.$rdf_url.'/liste">
';
$abschluss = new abschlusspruefung_antritt();
if (!$abschluss->getAll())
die($abschluss->errormsg);
if (isset($_GET['optional']) && $_GET['optional'] == 'true')
{
echo '
<RDF:li>
<RDF:Description id="" about="'.$rdf_url.'/" >
<ABSCHLUSSPRUEFUNGANTRITT:pruefungsantritt_kurzbz><![CDATA[]]></ABSCHLUSSPRUEFUNGANTRITT:pruefungsantritt_kurzbz>
<ABSCHLUSSPRUEFUNGANTRITT:bezeichnung><![CDATA[-- keine Auswahl --]]></ABSCHLUSSPRUEFUNGANTRITT:bezeichnung>
</RDF:Description>
</RDF:li>';
}
foreach ($abschluss->result as $row)
{
echo '
<RDF:li>
<RDF:Description id="'.$row->pruefungsantritt_kurzbz.'" about="'.$rdf_url.'/'.$row->pruefungsantritt_kurzbz.'" >
<ABSCHLUSSPRUEFUNGANTRITT:pruefungsantritt_kurzbz><![CDATA['.$row->pruefungsantritt_kurzbz.']]></ABSCHLUSSPRUEFUNGANTRITT:pruefungsantritt_kurzbz>
<ABSCHLUSSPRUEFUNGANTRITT:bezeichnung><![CDATA['.$row->bezeichnung.']]></ABSCHLUSSPRUEFUNGANTRITT:bezeichnung>
</RDF:Description>
</RDF:li>
';
}
?>
</RDF:Seq>
</RDF:RDF>
+77 -2
View File
@@ -4126,6 +4126,80 @@ if(!$result = @$db->db_query("SELECT akzeptiertamum FROM public.tbl_akte LIMIT 1
echo 'public.tbl_akte: Spalte akzeptiertamum hinzugefuegt!<br>';
}
// TABLE lehre.tbl_abschlusspruefung_antritt
if (!@$db->db_query("SELECT 0 FROM lehre.tbl_abschlusspruefung_antritt WHERE 0 = 1"))
{
$qry = '
CREATE TABLE lehre.tbl_abschlusspruefung_antritt (
pruefungsantritt_kurzbz character varying(20) NOT NULL,
bezeichnung character varying(64),
bezeichnung_english character varying(64),
sort smallint
);
ALTER TABLE lehre.tbl_abschlusspruefung_antritt ADD CONSTRAINT pk_abschlusspruefung_antritt PRIMARY KEY (pruefungsantritt_kurzbz);
INSERT INTO lehre.tbl_abschlusspruefung_antritt(pruefungsantritt_kurzbz, bezeichnung, bezeichnung_english, sort) VALUES (\'erstantritt\', \'Erstantritt\', \'1st Attempt\', 1);
INSERT INTO lehre.tbl_abschlusspruefung_antritt(pruefungsantritt_kurzbz, bezeichnung, bezeichnung_english, sort) VALUES (\'erstewiederholung\', \'1. Wiederholung\', \'1st Retake\', 2);
INSERT INTO lehre.tbl_abschlusspruefung_antritt(pruefungsantritt_kurzbz, bezeichnung, bezeichnung_english, sort) VALUES (\'zweitewiederholung\', \'2. Wiederholung\', \'2nd Retake\', 3);';
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_abschlusspruefung_antritt '.$db->db_last_error().'</strong><br>';
else
echo '<br>Created table lehre.tbl_abschlusspruefung_antritt';
// GRANT SELECT ON TABLE lehre.tbl_abschlusspruefung_antritt TO web;
$qry = 'GRANT SELECT ON TABLE lehre.tbl_abschlusspruefung_antritt TO web;';
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_abschlusspruefung_antritt '.$db->db_last_error().'</strong><br>';
else
echo '<br>Granted privileges to <strong>web</strong> on lehre.tbl_abschlusspruefung_antritt';
// GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE lehre.tbl_abschlusspruefung_antritt TO vilesci;
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE lehre.tbl_abschlusspruefung_antritt TO vilesci;';
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_abschlusspruefung_antritt '.$db->db_last_error().'</strong><br>';
else
echo '<br>Granted privileges to <strong>vilesci</strong> on lehre.tbl_abschlusspruefung_antritt';
// GRANT SELECT, UPDATE ON TABLE lehre.tbl_abschlusspruefung TO web;
$qry = 'GRANT SELECT, UPDATE ON lehre.tbl_abschlusspruefung TO web;';
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_abschlusspruefung '.$db->db_last_error().'</strong><br>';
else
echo '<br>Granted privileges to <strong>web</strong> on lehre.tbl_abschlusspruefung';
// COMMENT ON TABLE lehre.tbl_abschlusspruefung_antritt
$qry = 'COMMENT ON TABLE lehre.tbl_abschlusspruefung_antritt IS \'Type of Abschlusspruefung depending on number of attempts\';';
if (!$db->db_query($qry))
echo '<strong>Adding comment to lehre.tbl_abschlusspruefung_antritt: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Added comment to lehre.tbl_abschlusspruefung_antritt';
}
// add protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum to lehre.tbl_abschlusspruefung
if(!$result = @$db->db_query("SELECT protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum FROM lehre.tbl_abschlusspruefung LIMIT 1"))
{
$qry = "ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN protokoll text;
ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN endezeit time;
ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN pruefungsantritt_kurzbz character varying(20);
ALTER TABLE lehre.tbl_abschlusspruefung ADD CONSTRAINT fk_abschlusspruefung_antritt FOREIGN KEY (pruefungsantritt_kurzbz) REFERENCES lehre.tbl_abschlusspruefung_antritt (pruefungsantritt_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN freigabedatum date;";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_abschlusspruefung: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_abschlusspruefung: Spalten protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum hinzugefuegt';
}
// Spalte sort in lehre.tbl_abschlussbeurteilung (gibt Reihenfolge der Beurteilungen an)
if(!$result = @$db->db_query("SELECT sort FROM lehre.tbl_abschlussbeurteilung LIMIT 1;"))
{
$qry = "ALTER TABLE lehre.tbl_abschlussbeurteilung ADD COLUMN sort smallint;";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_abschlussbeurteilung: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_abschlussbeurteilung: Spalte sort hinzugefuegt!<br>';
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -4228,8 +4302,9 @@ $tabellen=array(
"fue.tbl_ressource" => array("ressource_id","student_uid","mitarbeiter_uid","betriebsmittel_id","firma_id","bezeichnung","beschreibung","insertamum","insertvon","updateamum","updatevon"),
"fue.tbl_scrumteam" => array("scrumteam_kurzbz","bezeichnung","punkteprosprint","tasksprosprint","gruppe_kurzbz"),
"fue.tbl_scrumsprint" => array("scrumsprint_id","scrumteam_kurzbz","sprint_kurzbz","sprintstart","sprintende","insertamum","insertvon","updateamum","updatevon"),
"lehre.tbl_abschlussbeurteilung" => array("abschlussbeurteilung_kurzbz","bezeichnung","bezeichnung_english"),
"lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note"),
"lehre.tbl_abschlussbeurteilung" => array("abschlussbeurteilung_kurzbz","bezeichnung","bezeichnung_english","sort"),
"lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note","protokoll","endezeit","pruefungsantritt_kurzbz","freigabedatum"),
"lehre.tbl_abschlusspruefung_antritt" => array("pruefungsantritt_kurzbz","bezeichnung","bezeichnung_english","sort"),
"lehre.tbl_akadgrad" => array("akadgrad_id","akadgrad_kurzbz","studiengang_kz","titel","geschlecht"),
"lehre.tbl_anrechnung" => array("anrechnung_id","prestudent_id","lehrveranstaltung_id","begruendung_id","lehrveranstaltung_id_kompatibel","genehmigt_von","insertamum","insertvon","updateamum","updatevon","ext_id"),
"lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"),
File diff suppressed because it is too large Load Diff