Files
FHC-Core/application/controllers/lehre/anrechnung/CreateAnrechnung.php
T
Paolo 949fdfa5ca - DmsLib->download removed
- DmsLib->upload replaced by uploadFile
- Removed who parameter from DmsLib constructor
- Added insert by into DmsLib add and addLastVersion
- Removed commented code
- Replaced self with $this in the Anrechnung classes
- Added removeByPersonIdAndDmsId to AkteLib
2025-09-15 17:16:48 +02:00

277 lines
7.5 KiB
PHP

<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class CreateAnrechnung extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_ANLEGEN = 'lehre/anrechnung_anlegen';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_anlegen:r',
'getLVsByStudent' => 'lehre/anrechnung_anlegen:r',
'create' => 'lehre/anrechnung_anlegen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
// 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');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre'
)
);
// Load configs
$this->load->config('anrechnung');
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
// Get Studiensemester
$studiensemester_kurzbz = $this->input->get('studiensemester');
// If no Studiensemester is given
if (isEmptyString($studiensemester_kurzbz))
{
//...use the nearest Studiensemester
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
}
// Get Studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN))
{
show_error('Failed retrieving Studiengaenge');
}
// Get Anrechnungsbegruendungen
$this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegruendungModel');
$begruendung_arr = getData($this->AnrechnungbegruendungModel->load());
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr,
'begruendungen' => $begruendung_arr
);
$this->load->view('lehre/anrechnung/createAnrechnung.php', $viewData);
}
/**
* Get Lehrveranstaltungen from Student.
*/
public function getLVsByStudent()
{
$prestudent_id = $this->input->post('prestudent_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
// Get Student UID
$student_uid = $this->StudentModel->getUID($prestudent_id);
// Retrieve Lehrveranstaltungen from student
$result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid, $studiensemester_kurzbz);
// Exit, if student has no Lehrveranstaltungen
if (!hasData($result))
{
$this->terminateWithJsonError($this->p->t('ui', 'keineLVzugeteilt'));
}
// Success response to AJAX
$this->outputJsonSuccess(getData($result));
}
/**
* Create Anrechnungsantrag.
*
* Saves Anrechnung and Anrechnungstatus.
* Also saves Nachweisdokument to DMS.
*/
public function create()
{
$prestudent_id = $this->input->post('prestudent_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
$begruendung_id = $this->input->post('begruendung_id');
$herkunftKenntnisse = $this->input->post('herkunftKenntnisse');
// Validate upload file
if (empty($_FILES['uploadfile']['name']))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorUploadFehlt'));
}
// Validate required data
if (isEmptyString($begruendung_id) || isEmptyString($lehrveranstaltung_id))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
// Exit if application already exists
if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id))
{
$this->terminateWithJsonError($this->p->t('global', 'antragBereitsGestellt'));
}
// Exit if Lehrveranstaltung was already graded with application blocking grades
if (self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id, $prestudent_id))
{
$this->terminateWithJsonError($this->p->t('anrechnung', 'antragBenotungBlockiert'));
}
// Upload document
$result = $this->_uploadFile();
if (isError($result)) $this->terminateWithJsonError(getError($result));
// Hold just inserted DMS ID
$lastInsert_dms_id = getData($result)->dms_id;
// Save Anrechnung and Anrechnungstatus
$result = $this->AnrechnungModel->createAnrechnungsantrag(
$prestudent_id,
$studiensemester_kurzbz,
$lehrveranstaltung_id,
$begruendung_id,
$lastInsert_dms_id,
$herkunftKenntnisse
);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
$lastInsert_anrechnung_id = getData($result);
// Success response to AJAX
$this->outputJsonSuccess(array(
'anrechnung_id' => $lastInsert_anrechnung_id,
'msg' => $this->p->t('global', 'antragWurdeAngelegt')
));
}
/**
* 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');
}
/**
* Check if application already exists.
*
* @param $lehrveranstaltung_id
* @param $studiensemester_kurzbz
* @param $prestudent_id
* @return bool
*/
private function _applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$result = $this->AnrechnungModel->loadWhere(array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
));
if (isError($result))
{
show_error(getError($result));
}
return hasData($result);
}
/**
* Upload file via DMS library.
*
* @return mixed
* @throws Exception
*/
private function _uploadFile()
{
// Upload document
$uploadDataResult = uploadFile('uploadfile', array('pdf'));
// If an error occurred while uploading the file
if (isError($uploadDataResult)) return $uploadDataResult;
if (!hasData($uploadDataResult)) return error('Upload failed');
// Add file to the DMS (DB + file system)
return $this->_ci->dmslib->add(
getData($uploadDataResult)['file_name'],
getData($uploadDataResult)['file_type'],
fopen(getData($uploadDataResult)['full_path'], 'r'),
'anrechnung', // kategorie_kurzbz
null, // dokument_kurzbz
null, // beschreibung
false, // cis_suche
null, // schlagworte
getAuthUID() // insertvon
);
}
private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id, $prestudent_id)
{
// Get Student UID
$student_uid = $this->StudentModel->getUID($prestudent_id);
// Get Note of Lehrveranstaltung
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
$result = $this->LvgesamtnoteModel->load(array(
'student_uid' => $student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'lehrveranstaltung_id' => $lehrveranstaltung_id
)
);
// If Lehrveranstaltung has Note
if (hasData($result))
{
$note = getData($result)[0]->note;
// Check if Note is a blocking grade
if (in_array($note, $this->config->item('grades_blocking_application')))
{
return true;
}
}
return false;
}
}