Created Anrechnungen Students GUI, Controller, DB-tables, library, phrases

Signed-off-by: cris-technikum <hainberg@technikum-wien.at>
This commit is contained in:
Cris
2021-01-19 13:03:26 +01:00
committed by cris-technikum
parent 5dbad37416
commit f185c92db7
14 changed files with 1361 additions and 6 deletions
@@ -0,0 +1,302 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
class requestAnrechnung extends Auth_Controller
{
const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'student/anrechnung_beantragen:rw',
'apply' => 'student/anrechnung_beantragen:rw',
'download' => 'student/anrechnung_beantragen:rw',
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
$lehrveranstaltung_id = $this->input->get('lv_id');
if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
// Check if application deadline is expired
// $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz);
$is_expired = false; // Set to false until Deadline is defined
// Get Anrechung data
$result = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id);
if (!$anrechnungData = getData($result))
{
show_error(getError($anrechnungData));
}
// Overwrite progress status for student view. If no Anrechnung exists yet, set to new.
$anrechnungData->status = empty($anrechnungData->status)
? getUserLanguage() == 'German' ? 'neu' : 'new'
: $this->_getLastAnrechnungstatus($anrechnungData->anrechnung_id);
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id),
'anrechnungData' => $anrechnungData,
'is_expired' => $is_expired,
'disabled' => $is_expired && empty($anrechnungData->anrechnung_id) || !empty($anrechnungData->anrechnung_id)
? 'disabled'
: ''
);
$this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData);
}
public function apply()
{
$anmerkung = $this->input->post('anmerkung');
$begruendung_id = $this->input->post('begruendung');
$lehrveranstaltung_id = $this->input->post('lv_id');
$studiensemester_kurzbz = $this->input->post('studiensemester');
if (empty($_FILES['uploadfile']['name']))
{
show_error('Missing upload file');
}
if (!is_numeric($begruendung_id) || !is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
$result = $this->_getAnrechnung($lehrveranstaltung_id);
if (hasData($result))
{
show_error('Der Antrag wurde bereits gestellt');
}
// Start DB transaction
$this->db->trans_start(false);
// Upload document
$dms = array(
'kategorie_kurzbz' => 'anrechnung',
'version' => 0,
'name' => $_FILES['uploadfile']['name'],
'mimetype' => $_FILES['uploadfile']['type'],
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
);
if(isError($uploaddata = $this->dmslib->upload($dms, array('jpg', 'pdf'))))
{
show_error(getError($uploaddata));
}
// Get PrestudentID
$result = $this->_loadPrestudent($this->_uid, $studiensemester_kurzbz);
if (!$prestudent = getData($result)[0])
{
show_error('Failed retrieving prestudent');
}
// Save Anrechnung with Status 'inProgressSTGL'
$result = $this->AnrechnungModel->insert(array(
'prestudent_id' => $prestudent->prestudent_id,
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'begruendung_id' => $begruendung_id,
'dms_id' => $uploaddata->retval['dms_id'],
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anmerkung_student' => $anmerkung
));
if (isError($result))
{
show_error('Failed inserting Anrechnung');
}
$result = $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
if (isError($result))
{
show_error('Failed saving Anrechnungstatus');
}
// Transaction complete!
$this->db->trans_complete();
if ($this->db->trans_status() === false || isError($result))
{
$this->db->trans_rollback();
show_error($result->msg, EXIT_ERROR);
}
// Send mail to STGL
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$studiengang = $this->StudiengangModel->load($prestudent->studiengang_kz);
// Send mail
$this->load->library('MailLib');
if(!$this->maillib->send(
"noreply@". DOMAIN,
$studiengang->retval[0]->email,
'Neuer LV-Anrechnungsantrag',
'Eine neuer LV Anrechnungsantrag steht zur Prüfung bereit.'))
{
show_error('Failed sending email to STGL');
}
else
{
redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id);
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
$this->dmslib->download($dms_id);
}
/**
* 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');
}
/**
* Load Prestudent by uid and Studiensemester.
* @param $uid
* @param $studiensemester_kurzbz
* @return mixed
*/
private function _loadPrestudent($uid, $studiensemester_kurzbz)
{
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id');
return $this->PrestudentstatusModel->loadWhere(array(
'student_uid' => $uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
)
);
}
/**
* Check if application deadline is expired.
* @param $studiensemester_kurzbz
* @return bool True if semester start is more then 1 week ago
* @throws Exception
*/
private function _checkAntragDeadline($studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addSelect('start');
if (!$start = getData($this->StudiensemesterModel->load($studiensemester_kurzbz)))
{
show_error(getError($start));
}
$start = new DateTime($start[0]->start);
$today = new DateTime('today midnight');
// True if today > application deadline
return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART))));
}
/**
* Get Anrechnung by Lehrveranstaltung
* @param $lehrveranstaltung_id
* @return mixed
*/
private function _getAnrechnung($lehrveranstaltung_id)
{
$result = $this->AnrechnungModel->loadWhere(array(
'lehrveranstaltung_id' => $lehrveranstaltung_id
));
if (isError($result))
{
show_error(getError($result));
}
return $result;
}
/**
* Get last Anrechnungstatus. Modify progress status for student view.
* @param $anrechnung_id
* @return string
*/
private function _getLastAnrechnungstatus($anrechnung_id)
{
$result = $this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id);
$status_kurzbz = getData($result)[0]->status_kurzbz;
// Dont show who is progressing the application
if ($status_kurzbz == 'inProgressDP' || $status_kurzbz == 'inProgressKF')
{
return getUserLanguage() == 'German' ? 'in Bearbeitung' : 'in process';
}
else
{
$status_mehrsprachig = getData($result)[0]->bezeichnung_mehrsprachig;
return getUserLanguage() == 'German' ? $status_mehrsprachig[0] : $status_mehrsprachig[1];
}
}
}
+179
View File
@@ -0,0 +1,179 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungLib
{
public function __construct()
{
$this->ci =& get_instance();
$this->ci->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->ci->load->model('person/Person_model', 'PersonModel');
$this->ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
}
/**
* Get Antrag data
* @param $uid
* @param $studiensemester_kurzbz
* @param $lv_id
* @return StdClass
*/
public function getAntragData($uid, $studiensemester_kurzbz, $lv_id)
{
$antrag_data = new StdClass();
// Get lehrveranstaltung data. Break, if course is not assigned to student.
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
{
show_error('You are not assigned to this course yet.');
}
// Get the students personal data
if (!$person = getData($this->ci->PersonModel->getByUid($uid))[0])
{
show_error('Failed loading person data.');
}
// Get studiengang bezeichnung
if (!$studiengang = getData($this->ci->StudiengangModel->load($lv->studiengang_kz))[0])
{
show_error('Failed loading studiengang data.');
}
// Get lectors of lehrveranstaltung
$antrag_data->lektoren = array();
if (!$lv_lektoren = getData($this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id)))
{
show_error('Failed loading course lectors.');
}
// Set the given studiensemester
$antrag_data->lv_id = $lv_id;
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
$antrag_data->ects = $lv->ects;
$antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz;
$antrag_data->vorname = $person->vorname;
$antrag_data->nachname = $person->nachname;
// $antrag_data->bpk = $person->bpk;
$antrag_data->bpk = $person->matr_nr;
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
$antrag_data->lektoren = $lv_lektoren;
return $antrag_data;
}
/**
* Get Anrechnung data, last status and Nachweisdokument dms data.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getAnrechnungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$anrechnung_data = new StdClass();
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
{
show_error(getError($result));
}
if ($anrechnung = getData($result)[0])
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
}
/**
* Get Anrechnung data by Lehrveranstaltung. Also retrieves last status and Nachweisdokument dms data.
* @param $lehrveranstaltung_id
* @return array
* @throws Exception
*/
public function getAnrechnungDataByLv($lehrveranstaltung_id)
{
$anrechnung_data = new StdClass();
$anrechnung_data->anrechnung_id = '';
$anrechnung_data->begruendung_id = '';
$anrechnung_data->anmerkung = '';
$anrechnung_data->dms_id = '';
$anrechnung_data->insertamum = '';
$anrechnung_data->insertvon = '';
$anrechnung_data->studiensemester_kurzbz = '';
$anrechnung_data->empfehlung = '';
$anrechnung_data->status = '';
$anrechnung_data->dokumentname = '';
$result = $this->ci->AnrechnungModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung_id));
if (isError($result))
{
show_error(getError($result));
}
if ($anrechnung = getData($result)[0])
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
}
/**
* @param $anrechnung_id
* @return mixed
*/
public function getLastAnrechnungstatus($anrechnung_id)
{
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id);
$status_mehrsprachig = getData($result)[0]->bezeichnung_mehrsprachig;
$status = getUserLanguage() == 'German' ? $status_mehrsprachig[0] : $status_mehrsprachig[1];
return $status;
}
private function _setAnrechnungDataObject($anrechnung)
{
$anrechnung_data = new StdClass();
// Get Anrechnung data
$anrechnung_data->anrechnung_id = $anrechnung->anrechnung_id;
$anrechnung_data->begruendung_id = $anrechnung->begruendung_id;
$anrechnung_data->anmerkung = $anrechnung->anmerkung_student;
$anrechnung_data->dms_id = $anrechnung->dms_id;
$anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y');
$anrechnung_data->insertvon= $anrechnung->insertvon;
$anrechnung_data->studiensemester_kurzbz= $anrechnung->studiensemester_kurzbz;
$anrechnung_data->empfehlung= $anrechnung->empfehlung_anrechnung;
// Get last status bezeichnung in the users language
$anrechnung_data->status = $this->getLastAnrechnungstatus($anrechnung->anrechnung_id);
// Get document name
$this->ci->DmsVersionModel->addSelect('name');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $anrechnung->dms_id));
if (isError($result))
{
show_error(getError($result));
}
$anrechnung_data->dokumentname = $result->retval[0]->name;
return $anrechnung_data;
}
}
+95 -1
View File
@@ -5,7 +5,10 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
class DmsLib
{
const FILE_CONTENT_PROPERTY = 'file_content';
const FILE_INPUT_NAME = 'uploadfile'; // name of the HTML input tag containing the uploaded file
private $UPLOAD_PATH = DMS_PATH; // temporary directory to store the upload file
/**
* Object initialization
*/
@@ -92,6 +95,84 @@ class DmsLib
return $result;
}
/**
* Uploads a document and saves it to DMS
* @param $dms DMS assoc array
* @param array $allowed_types Default: all. Param example: array(jpg, pdf)
* @return array
*/
public function upload($dms, $allowed_types = array('*'))
{
// Init upload configs
$this->_loadUploadLibrary($allowed_types);
if (!$this->ci->upload->do_upload(DmsLib::FILE_INPUT_NAME))
{
return error($this->ci->upload->display_errors());
}
$upload_data = $this->ci->upload->data(); // data about the uploaded file
$filename = $upload_data['file_name'];
// Insert to DMS table
if (!$result = $this->ci->DmsModel->insert($this->ci->DmsModel->filterFields($dms)))
{
return error('Failed inserting to DMS');
}
$upload_data['dms_id'] = $result->retval;
// Insert DMS version
if (!$result = $this->ci->DmsVersionModel->insert(
$this->ci->DmsVersionModel->filterFields($dms, $result->retval, $filename)))
{
return error('Failed inserting DMS version');
}
// return result of uploaded data
return success($upload_data); // data about the uploaded file
}
/**
* Download a document
* @param $dms_id
*/
public function download($dms_id)
{
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
$this->ci->DmsVersionModel->addSelect('filename');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
if (isError($result))
{
show_error(getError($result));
}
$filename = $result->retval[0]->filename;
$file = DMS_PATH. $filename;
if (file_exists($file))
{
$finfo = new finfo(FILEINFO_MIME);
header('Content-Description: File Transfer');
header('Content-Type: '.$finfo->file($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
else
{
show_error('File does not exist');
}
}
/**
* Saves a Document
@@ -302,4 +383,17 @@ class DmsLib
return $result;
}
/**
* Loads the upload library of CI
*/
private function _loadUploadLibrary($allowed_types)
{
$config['upload_path'] = $this->UPLOAD_PATH;
$config['allowed_types'] = implode('|', $allowed_types);
$config['overwrite'] = true;
$this->ci->load->library('upload', $config);
$this->ci->upload->initialize($config);
}
}
@@ -11,4 +11,40 @@ class Anrechnung_model extends DB_Model
$this->dbTable = 'lehre.tbl_anrechnung';
$this->pk = 'anrechnung_id';
}
/**
* Save Anrechnungstatus.
* @param $anrechnung_id
* @param $status_kurzbz
* @return array|null
*/
public function saveAnrechnungstatus($anrechnung_id, $status_kurzbz)
{
$qry = '
INSERT INTO lehre.tbl_anrechnung_anrechnungstatus (
anrechnung_id, status_kurzbz, insertvon
) VALUES ( ?, ?, ?);
';
return $this->execQuery($qry, array($anrechnung_id, $status_kurzbz, getAuthUID()));
}
/**
* Get the last inserted Anrechnungstatus
* @param $anrechnung_id
* @return array|null
*/
public function getLastAnrechnungstatus($anrechnung_id)
{
$qry = '
SELECT status_kurzbz, bezeichnung_mehrsprachig
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id));
}
}
@@ -0,0 +1,15 @@
<?php
class Anrechnungstatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_anrechnungstatus';
$this->pk = 'status_kurzbz';
}
}
@@ -273,4 +273,24 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, $parametersarray);
}
/**
* Gets Lehrveranstaltung and its Lehreinheiten (multiple rows possible).
* Returns empty array if student has no Lehrveranstaltung.
* @param $uid
* @param $studiensemester_kurzbz
* @param $lehrveranstaltung_id
* @return array|null
*/
public function getLvByStudent($uid, $studiensemester_kurzbz, $lehrveranstaltung_id)
{
$query = '
SELECT * FROM campus.vw_student_lehrveranstaltung
WHERE uid = ?
AND studiensemester_kurzbz = ?
AND lehrveranstaltung_id = ?;
';
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
}
+1 -1
View File
@@ -191,7 +191,7 @@ class Person_model extends DB_Model
*/
public function getByUid($uid)
{
$this->addSelect('vorname, nachname, gebdatum, person_id');
$this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr');
$this->addJoin('tbl_benutzer', 'person_id');
return $this->loadWhere(array('uid' => $uid));
@@ -0,0 +1,200 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'antragStellen'),
'jquery' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customJSs' => array(
'public/js/bootstrapper.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anerkennungNachgewiesenerKenntnisse'); ?>
<small>| <?php echo $this->p->t('anrechnung', 'antragStellen'); ?></small>
</h3>
</div>
</div>
<?php echo form_open_multipart(current_url(). '/apply',
['id' => 'requestAnrechnung-form'],
['lv_id' => $antragData->lv_id, 'studiensemester' => $antragData->studiensemester_kurzbz]
); ?>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten, Dokument Upload, Notiz-->
<div class="row">
<div class="col-lg-12">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span id="requestAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo $this->p->t('person', 'student'); ?></td>
<td><?php echo $antragData->vorname. ' '. $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->bpk ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'studiensemester'); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'studiengang'); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektor'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname. ' '. $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Antrag mit Checkboxen -->
<div class="row">
<div class="col-lg-12">
<div class="well" style="border:solid black 2px">
<p><?php echo $this->p->t('anrechnung', 'antragStellenText'); ?></p>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="1" required
<?php echo $anrechnungData->begruendung_id == '1' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenZeugnis'); ?>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="4" required
<?php echo $anrechnungData->begruendung_id == '4' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenPraxis'); ?>
</label>
</div>
</div>
</div>
</div>
<!-- Dokument Upload-->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?>
</div>
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile" name="uploadfile" accept=".pdf,.jpg" size="50" required <?php echo $disabled; ?>>
</div>
<?php if(!empty($anrechnungData->dms_id)): ?>
<a class="pull-right" href="<?php echo current_url(). '/download?dms_id='. $anrechnungData->dms_id; ?>" target="_blank"><?php echo $anrechnungData->dokumentname ?></a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Notiz -->
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<?php echo $this->p->t('anrechnung', 'weitereInformationen'); ?>
</div>
<div class="panel-body">
<textarea class="form-control" name="anmerkung" rows="3" <?php echo $disabled; ?>><?php echo $anrechnungData->anmerkung; ?></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class ="col-xs-4">
<div class="panel panel-default panel-heading text-center">
Status: <span class="text-uppercase"><small><b><?php echo $anrechnungData->status; ?></b></small></span>
</div>
<?php if ($is_expired): ?>
<div class="alert alert-warning">
<?php echo $this->p->t('global', 'bearbeitungGesperrt'); ?>
<?php echo $is_expired && empty($antragData->anrechnung_id)? ': '. $this->p->t('anrechnung', 'deadlineUeberschritten') : ''; ?>
</div>
<?php endif; ?>
</div>
</div>
<!-- Submit button 'Anrechnung beantragen'-->
<div class="row">
<div class="col-xs-8">
<input type="submit" id="requestAnrechnung-submit" class="btn btn-primary pull-right"
value="<?php echo $this->p->t('anrechnung', 'anrechnungBeantragen'); ?>" <?php echo $disabled; ?>>
</div>
</div>
<?php echo form_close();?>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
+1
View File
@@ -26,6 +26,7 @@ define('CIS_LEHRVERANSTALTUNG_LEISTUNGSUEBERSICHT_ANZEIGEN',true);
define('CIS_LEHRVERANSTALTUNG_SEMESTERINFO_ANZEIGEN',true);
define('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN',false);
define('CIS_LEHRVERANSTALTUNG_GESAMTNOTE_ANZEIGEN', true);
define('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN', true);
// Im CIS Menue Links bei Modulen anzeigen wenn Lehrauftrag
define('CIS_LEHRVERANSTALTUNG_MODULE_LINK',true);
+14 -1
View File
@@ -421,7 +421,6 @@ function checkZeilenUmbruch()
'link'=>'../../../cms/news.php?studiengang_kz='.urlencode($studiengang_kz).'&semester='.urlencode($semester),
'text'=>$text
);
}
if(!defined('CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN)
@@ -466,6 +465,20 @@ function checkZeilenUmbruch()
}
}
// Anerkennung nachgewiesener Kenntnisse (Anrechnung)
if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN)
&& $rechte->isBerechtigt('student/anrechnung_beantragen'))
{
$menu[]=array
(
'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse',
'position'=>'128',
'name'=>$p->t('lehre/anerkennungNachgewiesenerKenntnisse'),
'icon'=>'../../../skin/images/button_kreuzerltool.png',
'link' => APP_ROOT. 'index.ci.php/lehre/anrechnung/RequestAnrechnung?studiensemester='.urlencode($angezeigtes_stsem).'&lv_id='.urlencode($lvid)
);
}
//************* Menuepunkte anzeigen ****************
+1
View File
@@ -40,4 +40,5 @@ $this->phrasen['lehre/nichtzugeteilt']='Sie sind nicht zu dieser Lehrveranstaltu
$this->phrasen['lehre/studienordnung']='Studienordnung';
$this->phrasen['lehre/studienplan']='Studienplan';
$this->phrasen['lehre/noteneingabedeaktiviert']='Noteneingabe deaktiviert';
$this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Anerkennung nachgewiesener Kenntnisse';
?>
+2
View File
@@ -40,4 +40,6 @@ $this->phrasen['lehre/nichtzugeteilt']='Sie sind nicht zu dieser Lehrveranstaltu
$this->phrasen['lehre/studienordnung']='Studienordnung';
$this->phrasen['lehre/studienplan']='Studienplan';
$this->phrasen['lehre/noteneingabedeaktiviert']='Grading disabled';
$this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Crediting for proven knowledge';
?>
+173 -1
View File
@@ -4465,6 +4465,176 @@ if($result = $db->db_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE
}
}
// Add column dms_id, studiensemester_kurzbz, anmerkung_student und empfehlung_anrechnung
// Change genehmigt_von and begruendung_id to be NULLABLE
if(!$result = @$db->db_query("SELECT dms_id FROM lehre.tbl_anrechnung"))
{
$qry = "
ALTER TABLE lehre.tbl_anrechnung ADD COLUMN dms_id bigint;
ALTER TABLE lehre.tbl_anrechnung ADD COLUMN studiensemester_kurzbz varchar(6);
ALTER TABLE lehre.tbl_anrechnung ADD COLUMN anmerkung_student text;
ALTER TABLE lehre.tbl_anrechnung ADD COLUMN empfehlung_anrechnung boolean;
ALTER TABLE lehre.tbl_anrechnung ADD CONSTRAINT fk_anrechnung_studiensemester FOREIGN KEY (studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE lehre.tbl_anrechnung ADD CONSTRAINT fk_anrechnung_dms FOREIGN KEY (dms_id) REFERENCES campus.tbl_dms(dms_id) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN genehmigt_von DROP NOT NULL;
ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN begruendung_id DROP NOT NULL;
ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN insertamum SET DEFAULT NOW();
";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnung: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_anrechnung: Neue Spalten dms_id, studiensemester_kurzbz, anmerkung_student und empfehlung_anrechnung hinzugefuegt. Not null constraint entfernt für genehmigt_von und begruendung_id';
}
// Add DMS category "anrechnung"
if ($result = @$db->db_query("SELECT 1 FROM campus.tbl_dms_kategorie WHERE kategorie_kurzbz = 'anrechnung';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO campus.tbl_dms_kategorie (
kategorie_kurzbz,
bezeichnung,
beschreibung,
parent_kategorie_kurzbz,
oe_kurzbz,
berechtigung_kurzbz
) VALUES(
'anrechnung',
'Anrechnung',
'Dokumente zur Anrechnung von Lehrveranstaltungen',
'studium',
'etw',
NULL
);";
if (!$db->db_query($qry))
echo '<strong>campus.tbl_dms_kategorie '.$db->db_last_error().'</strong><br>';
else
echo ' campus.tbl_dms_kategorie: Added category "anrechnung"!<br>';
}
}
// Add DMS category permissiongroup for DMS category "anrechnung"
if ($result = @$db->db_query("SELECT 1 FROM campus.tbl_dms_kategorie_gruppe WHERE kategorie_kurzbz = 'anrechnung';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO campus.tbl_dms_kategorie_gruppe (
kategorie_kurzbz,
gruppe_kurzbz,
insertamum,
insertvon
) VALUES(
'anrechnung',
'CMS_LOCK',
NOW(),
'dbcheck'
);";
if (!$db->db_query($qry))
echo '<strong>campus.tbl_dms_kategorie_gruppe '.$db->db_last_error().'</strong><br>';
else
echo ' campus.tbl_dms_kategorie_gruppe: Added category group "CMS_LOCK" to category "anrechnung"!<br>';
}
}
// Add table anrechnung_status
if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;"))
{
$qry = "
CREATE TABLE lehre.tbl_anrechnungstatus
(
status_kurzbz varchar(32) NOT NULL,
bezeichnung_mehrsprachig varchar(64)[]
);
ALTER TABLE lehre.tbl_anrechnungstatus ADD CONSTRAINT pk_anrechnungstatus PRIMARY KEY (status_kurzbz);
INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('inProgressDP', '{\'bearbeitet von STG-Leitung\',\'processed by STG-Director\'}');
INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('inProgressKF', '{\'bearbeitet von KF-Leitung\',\'processed by KF-Manager\'}');
INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('approved', '{\'genehmigt\',\'approved\'}');
INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('rejected', '{\'abgelehnt\',\'rejected\'}');
GRANT SELECT ON lehre.tbl_anrechnungstatus TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungstatus TO vilesci;
";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnungstatus: '.$db->db_last_error().'</strong><br>';
else
echo ' lehre.tbl_anrechnungstatus: Tabelle hinzugefuegt<br>';
}
// Add table anrechnung_anrechnungstatus
// Für bestehende genehmigte Anrechnungsanträge wird ein Eintrag mit dem Status 'approved' angelegt
if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus LIMIT 1;"))
{
$qry = "
CREATE TABLE lehre.tbl_anrechnung_anrechnungstatus
(
anrechnungstatus_id integer NOT NULL,
anrechnung_id integer,
status_kurzbz varchar(32),
datum date default now(),
insertamum timestamp default now(),
insertvon varchar(32)
);
ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT pk_anrechnung_anrechnungstatus PRIMARY KEY (anrechnungstatus_id);
ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT fk_anrechnung_anrechnungstatus_anrechnung FOREIGN KEY (anrechnung_id) REFERENCES lehre.tbl_anrechnung(anrechnung_id) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT fk_anrechnung_anrechnungstatus_anrechnungstatus FOREIGN KEY (status_kurzbz) REFERENCES lehre.tbl_anrechnungstatus (status_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE;
CREATE SEQUENCE lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ALTER COLUMN anrechnungstatus_id SET DEFAULT nextval('lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id');
INSERT INTO lehre.tbl_anrechnung_anrechnungstatus(anrechnung_id, status_kurzbz) SELECT anrechnung_id, 'approved' as status_kurzbz FROM lehre.tbl_anrechnung WHERE genehmigt_von is not null;
GRANT SELECT ON lehre.tbl_anrechnung_anrechnungstatus TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO vilesci;
";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnung_anrechnungstatus: '.$db->db_last_error().'</strong><br>';
else
echo ' lehre.tbl_anrechnung_anrechnungstatus: Tabelle hinzugefuegt<br>';
}
// Added Bezeichnung 'berufliche Praxis' to Anrechnungbegruendung
if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHERE bezeichnung = 'berufliche Praxis';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO lehre.tbl_anrechnung_begruendung (bezeichnung) VALUES('berufliche Praxis');";
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnung_begruendung '.$db->db_last_error().'</strong><br>';
else
echo ' lehre.tbl_anrechnung_begruendung: Added bezeichnung "berufliche Praxis" <br>';
}
}
// Add permission to apply for Anrechnung
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'student/anrechnung_beantragen';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('student/anrechnung_beantragen', 'Anrechnung beantragen');";
if(!$db->db_query($qry))
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_berechtigung: Added permission for student/anrechnung_beantragen<br>';
}
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -4571,8 +4741,10 @@ $tabellen=array(
"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" => array("anrechnung_id","prestudent_id","lehrveranstaltung_id","begruendung_id","lehrveranstaltung_id_kompatibel","genehmigt_von","insertamum","insertvon","updateamum","updatevon","ext_id", "dms_id", "studiensemester_kurzbz", "anmerkung_student", "empfehlung_anrechnung"),
"lehre.tbl_anrechnung_anrechnungstatus" => array("anrechnungstatus_id", "anrechnung_id","status_kurzbz","datum", "insertamum","insertvon"),
"lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"),
"lehre.tbl_anrechnungstatus" => array("status_kurzbz","bezeichnung_mehrsprachig"),
"lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"),
"lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"),
"lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"),
+322 -2
View File
@@ -48,6 +48,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'bearbeitungGesperrt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bearbeitung gesperrt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Locked for editing',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
@@ -1549,7 +1569,7 @@ $phrases = array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Student',
'text' => 'StudentIn',
'description' => '',
'insertvon' => 'system'
),
@@ -2471,7 +2491,7 @@ $phrases = array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lektor',
'text' => 'LektorIn',
'description' => '',
'insertvon' => 'system'
),
@@ -7988,6 +8008,306 @@ Any unusual occurrences
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anerkennungNachgewiesenerKenntnisse',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anerkennung nachgewiesener Kenntnisse',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Crediting for proven knowledge',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungBeantragen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnung beantragen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Apply',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragStellen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Antrag stellen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Submit an application',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragsdaten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Antragsdaten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Application data',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'nachweisdokumente',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nachweisdokumente',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Verification documents',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'person',
'phrase' => 'personenkennzeichen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Personenkennzeichen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Personal identity number',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'hochladen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Hochladen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Upload',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragStellenText',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Ich beantrage die Feststellung der Gleichwertigkeit aufgrund',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => '',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragStellenWegenZeugnis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'eines Zeugnisses (vgl. § 4 Abs. 4, Satzungsteil 5 der FHTW)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => '',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragStellenWegenPraxis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'der nachgewiesenen beruflichen Praxis (vgl. § 4 Abs. 5, Satzungsteil 5 der FHTW)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => '',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'weitereInformationen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Weitere Informationen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Further information',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antrag',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Antrag',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Application',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungIst',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Antrag ist',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Application is',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'deadlineUeberschritten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Deadline ist &uuml;berschritten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Deadline is exceeded',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragdatum',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Antragsdatum',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Application date',
'description' => '',
'insertvon' => 'system'
)
)
)
);