diff --git a/application/config/routes.php b/application/config/routes.php index 798d29ad0..63ac3119c 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -63,6 +63,53 @@ $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1'; $route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1'; +// Studierendenverwaltung List Routes +$route['api/frontend/v1/stv/[sS]tudents/inout'] = 'api/frontend/v1/stv/Students/index'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/index'; + +// (studiensemester_kurzbz)/inout[/(incoming|outgoing|gemeinsamestudien)] +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout'] = 'api/frontend/v1/stv/Students/index'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/incoming'] = 'api/frontend/v1/stv/Students/getIncoming'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/frontend/v1/stv/Students/getOutgoing'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/gemeinsamestudien'] = 'api/frontend/v1/stv/Students/getGemeinsamestudien'; + +// (studiengang_kz)/prestudent[/(studiensemester_kurzbz)[/(filter)[/(otherfilter)]]] +$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudents/$1'; +$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2'; +$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent/([WS]S[0-9]{4})/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2/$3'; +$route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent/([WS]S[0-9]{4})/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2/$4'; + +// (studiengang_kz)/(orgform)/prestudent[/(studiensemester_kurzbz)[/(filter)[/(otherfilter)]]] +$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2'; +$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2/$3'; +$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent/([WS]S[0-9]{4})/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2/$3/$4'; +$route['api/frontend/v1/stv/[sS]tudents/(:num)/([A-Z]{2,3})/prestudent/([WS]S[0-9]{4})/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2/$3/$5'; + +// (studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)/grp/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsSpezialgruppe/$1/$2/$3/$4'; + +// (studiensemester_kurzbz)/(studiengang_kz)[/(semester)[/(verband)[/(gruppe)]]] +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)/(:any)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3/$4'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/(:num)/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3/$4/$5'; + +// (studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/grp/(gruppe) +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)/grp/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsOrgformSpezialgruppe/$1/$2/$3/$4/$5'; + +// (studiensemester_kurzbz)/(studiengang_kz)/(orgform)[/(semester)[/(verband)[/(gruppe)]]] +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3/$4'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3/$4/$5'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(:num)/([A-Z]{2,3})/(:num)/(:any)/(:any)'] = 'api/frontend/v1/stv/Students/getStudentsOrgform/$1/$2/$3/$4/$5/$6'; + +// // (studiensemester_kurzbz)/uid/(uid) +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/uid/(:any)'] = 'api/frontend/v1/stv/Students/getStudent/$1/$2'; +// // (studiensemester_kurzbz)/prestudent/(prestudent_id) +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/prestudent/(:num)'] = 'api/frontend/v1/stv/Students/getPrestudent/$1/$2'; +// // (studiensemester_kurzbz)/person/(person_id) +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/person/(:num)'] = 'api/frontend/v1/stv/Students/getPerson/$1/$2'; + // load routes from extensions $subdir = 'application/config/extensions'; $dirlist = scandir($subdir); diff --git a/application/config/stv.php b/application/config/stv.php index 1fdd5b28a..aa885c9e1 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -1,5 +1,6 @@ [ diff --git a/application/controllers/api/frontend/v1/stv/Grades.php b/application/controllers/api/frontend/v1/stv/Grades.php index 61d797495..dd8f53a27 100644 --- a/application/controllers/api/frontend/v1/stv/Grades.php +++ b/application/controllers/api/frontend/v1/stv/Grades.php @@ -74,14 +74,15 @@ class Grades extends FHCAPI_Controller * (Entries in lehre.tbl_zeugnisnote) * * @param string $prestudent_id - * @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded. + * @param string|null $studiensemester_kurzbz If studiensemester_kurzbz only this semesters grades will be loaded, otherwise all semesters grades will be loaded. * * @return void */ - public function getCertificate($prestudent_id, $all = null) + public function getCertificate($prestudent_id, $studiensemester_kurzbz = null) { $this->load->model('crm/Student_model', 'StudentModel'); $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $result = $this->StudentModel->loadWhere([ 'prestudent_id' => $prestudent_id @@ -91,12 +92,13 @@ class Grades extends FHCAPI_Controller if (!$student) $this->terminateWithSuccess([]); - $student_uid = current($student)->student_uid; - $studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null; + if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } - $result = $this->ZeugnisnoteModel->getZeugnisnoten($student_uid, $studiensemester_kurzbz); $grades = $this->getDataOrTerminateWithError($result); @@ -109,14 +111,15 @@ class Grades extends FHCAPI_Controller * (Entries in campus.tbl_lvgesamtnote) * * @param string $prestudent_id - * @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded. + * @param string|null $studiensemester_kurzbz If studiensemester_kurzbz only this semesters grades will be loaded, otherwise all semesters grades will be loaded. * * @return void */ - public function getTeacherProposal($prestudent_id, $all = null) + public function getTeacherProposal($prestudent_id, $studiensemester_kurzbz = null) { $this->load->model('crm/Student_model', 'StudentModel'); $this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $result = $this->StudentModel->loadWhere([ 'prestudent_id' => $prestudent_id @@ -129,9 +132,11 @@ class Grades extends FHCAPI_Controller $student_uid = current($student)->student_uid; - $studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : null; + if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } - $result = $this->LvgesamtnoteModel->getLvGesamtNoten(null, $student_uid, $studiensemester_kurzbz); $grades = $this->getDataOrTerminateWithError($result); @@ -144,17 +149,20 @@ class Grades extends FHCAPI_Controller * or as not allowed because of the repeating of a semester. * * @param string $prestudent_id - * @param string|null $all (optional) If null only the current semesters grades will be loaded, otherwise all semesters grades will be loaded. + * @param string|false $studiensemester_kurzbz If studiensemester_kurzbz only this semesters grades will be loaded, otherwise all semesters grades will be loaded. * * @return void */ - public function getRepeaterGrades($prestudent_id, $all = null) + public function getRepeaterGrades($prestudent_id, $studiensemester_kurzbz = false) { + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->library('AntragLib'); - $studiensemester_kurzbz = ($all === null) ? $this->variablelib->getVar('semester_aktuell') : false; + if ($studiensemester_kurzbz !== false && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } - $result = $this->antraglib->getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz); $grades = $this->getDataOrTerminateWithError($result); @@ -456,13 +464,19 @@ class Grades extends FHCAPI_Controller $this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer"); $this->form_validation->set_rules("points", $this->p->t("stv", "grades_points"), "required|numeric"); + $this->form_validation->set_rules("studiensemester_kurzbz", $this->p->t("lehre", "studiensemester"), "required|regex_match[/^[WS]S[0-9]{4}$/]"); if (!$this->form_validation->run()) $this->terminateWithValidationErrors($this->form_validation->error_array()); - - $this->load->model('education/Notenschluesselaufteilung_model', 'NotenschluesselaufteilungModel'); - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } + + $this->load->model('education/Notenschluesselaufteilung_model', 'NotenschluesselaufteilungModel'); $result = $this->NotenschluesselaufteilungModel->getNote( $this->input->post('points'), diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index fcc8007cd..629d5512a 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -30,6 +30,7 @@ class Status extends FHCAPI_Controller //Load Models $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); $this->load->model('person/Person_model', 'PersonModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); // Load Libraries $this->load->library('VariableLib', ['uid' => getAuthUID()]); @@ -189,9 +190,13 @@ class Status extends FHCAPI_Controller $studiensemester_kurzbz = $lastStatusData->studiensemester_kurzbz; if ($status_kurzbz == Prestudentstatus_model::STATUS_ABSOLVENT || $status_kurzbz == Prestudentstatus_model::STATUS_DIPLOMAND - ) { - $this->load->library('VariableLib', ['uid' => getAuthUID()]); - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); + ) + { + $studiensemester_kurzbz = $this->input->post('currentSemester'); + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } } $ausbildungssemester = $lastStatusData->ausbildungssemester; diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 17cec8b26..2518e9af9 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -68,12 +68,14 @@ class Student extends FHCAPI_Controller * @param string $prestudent_id * @return void */ - public function get($prestudent_id) + public function get($prestudent_id, $studiensemester_kurzbz) { - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); - - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } $this->PrestudentModel->addSelect('p.person_id'); $this->PrestudentModel->addSelect('p.titelpre'); @@ -172,7 +174,7 @@ class Student extends FHCAPI_Controller * @param string $prestudent_id * @return void */ - public function save($prestudent_id) + public function save($prestudent_id, $studiensemester_kurzbz) { $this->load->model('person/Person_model', 'PersonModel'); $this->load->model('person/Benutzer_model', 'BenutzerModel'); @@ -180,14 +182,18 @@ class Student extends FHCAPI_Controller $this->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); $this->load->model('organisation/Lehrverband_model', 'LehrverbandModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->library('form_validation'); + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } + $authuid = getAuthUID(); $now = date('c'); - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); - $this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date'); $this->form_validation->set_rules('semester', 'Semester', 'integer', [ diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index df8793368..12785d6d7 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -48,139 +48,108 @@ class Students extends FHCAPI_Controller } /** - * Remap calls: - * / => return [] - * /inout => return [] - * /inout/incoming => getIncoming - * /inout/outgoing => getOutgoing - * /inout/gemeinsamestudien => getGemeinsamestudien - * /(studiengang_kz) => getStudents - * /(studiengang_kz)/prestudent => getPrestudents - * /(studiengang_kz)/prestudent/* => getPrestudents - * /(studiengang_kz)/(semester) => getStudents - * /(studiengang_kz)/(semester)/grp/(gruppe_kurzbz) => getStudents - * /(studiengang_kz)/(semester)/(verband) => getStudents - * /(studiengang_kz)/(semester)/(verband)/(gruppe) => getStudents - * /(studiengang_kz)/(org_form) => getStudents - * /(studiengang_kz)/(org_form)/prestudent => getPrestudents - * /(studiengang_kz)/(org_form)/prestudent/* => getPrestudents - * /(studiengang_kz)/(org_form)/(semester) => getStudents - * /(studiengang_kz)/(org_form)/(semester)/grp/(gruppe_kurzbz) - * => getStudents - * /(studiengang_kz)/(org_form)/(semester)/(verband) => getStudents - * /(studiengang_kz)/(org_form)/(semester)/(verband)/(gruppe) - * => getStudents - * /student/(student_uid) => getStudent - * /prestudent/(prestudent_id) => getPrestudent - * /person/(person_id) => getPerson + * Routing * - * @param string $method - * @param array $params (optional) + * /inout => index + * /(studiensemester_kurzbz) => index + * /(studiensemester_kurzbz)/inout => index * + * /(studiensemester_kurzbz)/inout/incoming => getIncoming + * /(studiensemester_kurzbz)/inout/outgoing => getOutgoing + * /(studiensemester_kurzbz)/inout/gemeinsamestudien => getGemeinsamestudien + * + * /(studiengang_kz)/prestudent => getPrestudents + * /(studiengang_kz)/prestudent/(studiensemester_kurzbz) => getPrestudents + * /(studiengang_kz)/prestudent/(studiensemester_kurzbz)/(filter) => getPrestudents + * /(studiengang_kz)/prestudent/(studiensemester_kurzbz)/(filter)/(otherfilter) => getPrestudents + * + * /(studiengang_kz)/(orgform)/prestudent => getPrestudentsOrgform + * /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz) => getPrestudentsOrgform + * /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter) => getPrestudentsOrgform + * /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter)/(otherfilter) => getPrestudentsOrgform + * + * /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) => getStudentsSpezialguppe + * + * /(studiensemester_kurzbz)/(studiengang_kz) => getStudents + * /(studiensemester_kurzbz)/(studiengang_kz)/(semester) => getStudents + * /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/(verband) => getStudents + * /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/(verband)/(gruppe) => getStudents + * + * /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/grp/(gruppe) => getStudentsOrgformSpezialgruppe + * + * /(studiensemester_kurzbz)/(studiengang_kz)/(orgform) => getStudentsOrgform + * /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester) => getStudentsOrgform + * /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/(verband) => getStudentsOrgform + * /(studiensemester_kurzbz)/(studiengang_kz)/(orgform)/(semester)/(verband)/(gruppe) => getStudentsOrgform + * + * /(studiensemester_kurzbz)/uid/(student_uid) => getStudent + * /(studiensemester_kurzbz)/prestudent/(prestudent_id) => getPrestudent + * /(studiensemester_kurzbz)/person/(person_id) => getPerson + */ + + public function index() + { + $this->addMeta('ci_method', __FUNCTION__); + $this->terminateWithSuccess([]); + } + + /** * @return void */ - public function _remap($method, $params = []) + public function getIncoming() { - if ($method == '' || $method == 'index') - return $this->terminateWithSuccess([]); + $this->addMeta('ci_method', __FUNCTION__); + // TODO(chris): IMPLEMENT! + $this->terminateWithSuccess([]); + } - if ($method == 'inout') { - if (!count($params)) - return $this->terminateWithSuccess([]); - switch ($params[0]) { - case 'incoming': - return $this->getIncoming(); - case 'outgoing': - return $this->getOutgoing(); - case 'gemeinsamestudien': - return $this->getGemeinsamestudien(); - default: - return show_404(); - } - } + /** + * @return void + */ + public function getOutgoing() + { + $this->addMeta('ci_method', __FUNCTION__); + // TODO(chris): IMPLEMENT! + $this->terminateWithSuccess([]); + } - $count = count($params); - if (!$count) - return $this->getStudents($method); + /** + * @return void + */ + public function getGemeinsamestudien() + { + $this->addMeta('ci_method', __FUNCTION__); + // TODO(chris): IMPLEMENT! + $this->terminateWithSuccess([]); + } - if ($method == 'uid' && $count == 1) - return $this->getStudent($params[0]); - - if ($method == 'prestudent' && $count == 1) - return $this->getPrestudent($params[0]); - - if ($method == 'person' && $count == 1) - return $this->getPerson($params[0]); - - if (is_numeric($params[0])) { - $sem = $params[0]; - if ($count == 3 && $params[1] == 'grp') { - $g = $params[2]; - $ver = null; - $grp = null; - } else { - $g = null; - $ver = $count > 1 ? $params[1] : null; - $grp = $count > 2 ? $params[2] : null; - } - return $this->getStudents($method, $sem, $ver, $grp, $g); - } elseif ($params[0] == 'prestudent') { - if ($count == 1) - return $this->getPrestudents($method); - if ($count == 2) - return $this->getPrestudents($method, $params[1]); - return $this->getPrestudents($method, $params[1], $params[$count-1]); - } else { - $org = $params[0]; - if ($count > 1 && $params[1] == 'prestudent') { - if ($count == 2) - return $this->getPrestudents($method, null, null, $org); - if ($count == 3) - return $this->getPrestudents($method, $params[2], null, $org); - return $this->getPrestudents($method, $params[2], $params[$count-1], $org); - } - $sem = $count > 1 ? $params[1] : null; - if ($count == 4 && $params[2] == 'grp') { - $g = $params[3]; - $ver = null; - $grp = null; - } else { - $g = null; - $ver = $count > 2 ? $params[2] : null; - $grp = $count > 3 ? $params[3] : null; - } - - return $this->getStudents($method, $sem, $ver, $grp, $g, $org); - } + public function getPrestudents($studiengang_kz, + $studiensemester_kurzbz = null, $filter = null + ) + { + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiengang_kz' => $studiengang_kz, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'filter' => $filter + )); - show_404(); + $this->fetchPrestudents($studiengang_kz, $studiensemester_kurzbz, $filter); } - /** - * @return void - */ - protected function getIncoming() + public function getPrestudentsOrgform($studiengang_kz, $orgform_kurzbz, + $studiensemester_kurzbz = null, $filter = null + ) { - // TODO(chris): IMPLEMENT! - $this->terminateWithSuccess([]); - } - - /** - * @return void - */ - protected function getOutgoing() - { - // TODO(chris): IMPLEMENT! - $this->terminateWithSuccess([]); - } - - /** - * @return void - */ - protected function getGemeinsamestudien() - { - // TODO(chris): IMPLEMENT! - $this->terminateWithSuccess([]); + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiengang_kz' => $studiengang_kz, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'filter' => $filter, + 'orgform_kurzbz' => $orgform_kurzbz + )); + + $this->fetchPrestudents($studiengang_kz, $studiensemester_kurzbz, $filter, $orgform_kurzbz); } /** @@ -191,7 +160,7 @@ class Students extends FHCAPI_Controller * * @return void */ - protected function getPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null) + protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null) { $this->load->model('crm/Prestudent_model', 'PrestudentModel'); @@ -379,8 +348,73 @@ class Students extends FHCAPI_Controller $this->terminateWithSuccess($data); } + public function getStudents($studiensemester_kurzbz, + $studiengang_kz, $semester = null, $verband = null, $gruppe = null + ) + { + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'studiengang_kz' => $studiengang_kz, + 'semester' => $semester, + 'verband' => $verband, + 'gruppe' => $gruppe + )); + + $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, null); + } + + public function getStudentsOrgform($studiensemester_kurzbz, + $studiengang_kz, $orgform_kurzbz, $semester = null, $verband = null, $gruppe = null + ) + { + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'studiengang_kz' => $studiengang_kz, + 'orgform_kurzbz' => $orgform_kurzbz, + 'semester' => $semester, + 'verband' => $verband, + 'gruppe' => $gruppe + )); + + $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, $orgform_kurzbz); + } + + public function getStudentsSpezialgruppe($studiensemester_kurzbz, + $studiengang_kz, $semester, $gruppe_kurzbz, + $orgform_kurzbz = null) + { + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'studiengang_kz' => $studiengang_kz, + 'semester' => $semester, + 'gruppe_kurzbz' => $gruppe_kurzbz + )); + + $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, null, null, $gruppe_kurzbz, null); + } + + public function getStudentsOrgformSpezialgruppe($studiensemester_kurzbz, + $orgform_kurzbz, $studiengang_kz, $semester, $gruppe_kurzbz + ) + { + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'orgform_kurzbz' => $orgform_kurzbz, + 'studiengang_kz' => $studiengang_kz, + 'semester' => $semester, + 'gruppe_kurzbz' => $gruppe_kurzbz + )); + + $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, null, null, $gruppe_kurzbz, $orgform_kurzbz); + } + /** * @param integer $studiengang_kz + * @param string $studiensemester_kurzbz * @param integer $semester (optional) * @param string $verband (optional) * @param integer $gruppe (optional) @@ -389,11 +423,15 @@ class Students extends FHCAPI_Controller * * @return void */ - protected function getStudents($studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null) + protected function fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null) { - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } /* $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT'); @@ -478,9 +516,20 @@ class Students extends FHCAPI_Controller * * @return void */ - protected function getPrestudent($prestudent_id) + public function getPrestudent($studiensemester_kurzbz, $prestudent_id) { - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'prestudent_id' => $prestudent_id, + )); + + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } $this->load->model('crm/Prestudent_model', 'PrestudentModel'); @@ -536,9 +585,20 @@ class Students extends FHCAPI_Controller * * @return void */ - protected function getStudent($student_uid) + public function getStudent($studiensemester_kurzbz, $student_uid) { - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'student_uid' => $student_uid, + )); + + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } $this->load->model('crm/Prestudent_model', 'PrestudentModel'); @@ -592,13 +652,25 @@ class Students extends FHCAPI_Controller } /** + * @param string $studiensemester_kurzbz * @param integer $person_id * * @return void */ - protected function getPerson($person_id) + public function getPerson($studiensemester_kurzbz, $person_id) { - $studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell'); + $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', array( + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'person_id' => $person_id, + )); + + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz)) + { + $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); + } $this->load->model('crm/Prestudent_model', 'PrestudentModel'); diff --git a/application/controllers/api/frontend/v1/stv/Verband.php b/application/controllers/api/frontend/v1/stv/Verband.php index e8c532652..4060704de 100644 --- a/application/controllers/api/frontend/v1/stv/Verband.php +++ b/application/controllers/api/frontend/v1/stv/Verband.php @@ -355,7 +355,11 @@ class Verband extends FHCAPI_Controller $this->load->model('system/Variable_model', 'VariableModel'); $result = $this->VariableModel->getVariables(getAuthUID(), ['number_displayed_past_studiensemester']); $data = $this->getDataOrTerminateWithError($result); - $number_displayed_past_studiensemester = $data['number_displayed_past_studiensemester'] ?? null; + + $this->load->config('stv'); + $number_displayed_past_studiensemester_default = $this->config->item('number_displayed_past_studiensemester_default'); + + $number_displayed_past_studiensemester = $data['number_displayed_past_studiensemester'] ?? $number_displayed_past_studiensemester_default; $this->StudiensemesterModel->addPlusMinus(null, $number_displayed_past_studiensemester); $this->StudiensemesterModel->addOrder('ende'); diff --git a/application/libraries/PrestudentLib.php b/application/libraries/PrestudentLib.php index ef5e2e3a9..2d795369f 100644 --- a/application/libraries/PrestudentLib.php +++ b/application/libraries/PrestudentLib.php @@ -500,11 +500,6 @@ class PrestudentLib $student = current(getData($result)); - - $this->_ci->load->library('VariableLib', ['uid' => $authUID]); - $semester_aktuell = $this->_ci->variablelib->getVar('semester_aktuell'); - - // Update Aktionen // Status updaten @@ -545,8 +540,8 @@ class PrestudentLib // Studentlehrverband updaten $result = $this->_ci->StudentlehrverbandModel->update([ 'student_uid' => $student->student_uid, - 'studiensemester_kurzbz' => $semester_aktuell - ], [ + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ], [ 'semester' => $ausbildungssemester, 'verband' => '', 'gruppe' => '', diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index f29ab223c..5fa6ffb14 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -341,4 +341,10 @@ class Studiensemester_model extends DB_Model WHERE studiensemester_kurzbz = ?",[$studiensemester_kurzbz]); } + + public function isValidStudiensemester($studiensemester_kurzbz) + { + $result = $this->load($studiensemester_kurzbz); + return hasData($result); + } } diff --git a/public/js/api/factory/stv/details.js b/public/js/api/factory/stv/details.js index 282b0003e..1077de22d 100644 --- a/public/js/api/factory/stv/details.js +++ b/public/js/api/factory/stv/details.js @@ -16,16 +16,22 @@ */ export default { - get(prestudent_id) { + get(prestudent_id, studiensemester_kurzbz) { return { method: 'post', - url: 'api/frontend/v1/stv/student/get/' + prestudent_id + url: 'api/frontend/v1/stv/student/get/' + + encodeURIComponent(prestudent_id) + + '/' + + encodeURIComponent(studiensemester_kurzbz) }; }, - save(prestudent_id, params) { + save(prestudent_id, studiensemester_kurzbz, params) { return { method: 'post', - url: 'api/frontend/v1/stv/student/save/' + prestudent_id, + url: 'api/frontend/v1/stv/student/save/' + + encodeURIComponent(prestudent_id) + + '/' + + encodeURIComponent(studiensemester_kurzbz), params }; }, diff --git a/public/js/api/factory/stv/grades.js b/public/js/api/factory/stv/grades.js index ea0d025eb..c42d202e3 100644 --- a/public/js/api/factory/stv/grades.js +++ b/public/js/api/factory/stv/grades.js @@ -22,25 +22,34 @@ export default { url: 'api/frontend/v1/stv/grades/list' }; }, - getCertificate(prestudent_id, all) { - all = all ? '/all' : ''; + getCertificate(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id); + if (!!studiensemester_kurzbz) { + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + } return { method: 'get', - url: 'api/frontend/v1/stv/grades/getCertificate/' + prestudent_id + all + url: url }; }, - getTeacherProposal(prestudent_id, all) { - all = all ? '/all' : ''; + getTeacherProposal(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id); + if (!!studiensemester_kurzbz) { + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + } return { method: 'get', - url: 'api/frontend/v1/stv/grades/getTeacherProposal/' + prestudent_id + all + url: url }; }, - getRepeaterGrades(prestudent_id, all) { - all = all ? '/all' : ''; + getRepeaterGrades(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id); + if (!!studiensemester_kurzbz) { + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + } return { method: 'get', - url: 'api/frontend/v1/stv/grades/getRepeaterGrades/' + prestudent_id + all + url: url }; }, updateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) { @@ -86,11 +95,15 @@ export default { } }; }, - getGradeFromPoints(points, lehrveranstaltung_id) { + getGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz) { return { method: 'post', url: 'api/frontend/v1/stv/grades/getGradeFromPoints', - params: { points, lehrveranstaltung_id } + params: { + "points": points, + "lehrveranstaltung_id": lehrveranstaltung_id, + "studiensemester_kurzbz": studiensemester_kurzbz + } }; } }; \ No newline at end of file diff --git a/public/js/api/factory/stv/prestudent.js b/public/js/api/factory/stv/prestudent.js index a49dd1d7a..0112ff49b 100644 --- a/public/js/api/factory/stv/prestudent.js +++ b/public/js/api/factory/stv/prestudent.js @@ -17,10 +17,13 @@ export default { //------------- Prestudent.js------------------------------------------------------ - get(prestudent_id) { + get(prestudent_id, studiensemester_kurzbz) { return { method: 'post', - url: 'api/frontend/v1/stv/prestudent/get/' + prestudent_id + url: 'api/frontend/v1/stv/prestudent/get/' + + encodeURIComponent(prestudent_id) + + '/' + + encodeURIComponent(studiensemester_kurzbz) }; }, updatePrestudent(prestudent_id, params) { diff --git a/public/js/api/factory/stv/students.js b/public/js/api/factory/stv/students.js index 582ba04e8..18f3b1743 100644 --- a/public/js/api/factory/stv/students.js +++ b/public/js/api/factory/stv/students.js @@ -16,22 +16,34 @@ */ export default { - uid(uid) { + uid(uid, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/students/' + + encodeURIComponent(studiensemester_kurzbz) + + '/uid/' + + encodeURIComponent(uid); return { method: 'get', - url: 'api/frontend/v1/stv/students/uid/' + uid + url: url }; }, - prestudent(prestudent_id) { + prestudent(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/students/' + + encodeURIComponent(studiensemester_kurzbz) + + '/prestudent/' + + encodeURIComponent(prestudent_id); return { method: 'get', - url: 'api/frontend/v1/stv/students/prestudent/' + prestudent_id + url: url }; }, - person(person_id) { + person(person_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/students/' + + encodeURIComponent(studiensemester_kurzbz) + + '/person/' + + encodeURIComponent(person_id); return { method: 'get', - url: 'api/frontend/v1/stv/students/person/' + person_id + url: url }; }, verband(relative_path) { diff --git a/public/js/api/stv/details.js b/public/js/api/stv/details.js index a56de9494..501204c08 100644 --- a/public/js/api/stv/details.js +++ b/public/js/api/stv/details.js @@ -1,10 +1,16 @@ export default { - get(prestudent_id) { - return this.$fhcApi.post('api/frontend/v1/stv/student/get/' + prestudent_id); + get(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/student/get/' + + encodeURIComponent(prestudent_id) + + '/' + + encodeURIComponent(studiensemester_kurzbz); + return this.$fhcApi.post(url); }, - save(form, prestudent_id, data) { - return this.$fhcApi.post(form, 'api/frontend/v1/stv/student/save/' + prestudent_id, - data - ); + save(form, prestudent_id, studiensemester_kurzbz, data) { + let url = 'api/frontend/v1/stv/student/save/' + + encodeURIComponent(prestudent_id) + + '/' + + encodeURIComponent(studiensemester_kurzbz); + return this.$fhcApi.post(form, url, data); }, } diff --git a/public/js/api/stv/grades.js b/public/js/api/stv/grades.js index 135cd836c..625c3f8e3 100644 --- a/public/js/api/stv/grades.js +++ b/public/js/api/stv/grades.js @@ -2,17 +2,26 @@ export default { list() { return this.$fhcApi.get('api/frontend/v1/stv/grades/list'); }, - getCertificate(prestudent_id, all) { - all = all ? '/all' : ''; - return this.$fhcApi.get('api/frontend/v1/stv/grades/getCertificate/' + prestudent_id + all); + getCertificate(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id); + if (!!studiensemester_kurzbz) { + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + } + return this.$fhcApi.get(url); }, - getTeacherProposal(prestudent_id, all) { - all = all ? '/all' : ''; - return this.$fhcApi.get('api/frontend/v1/stv/grades/getTeacherProposal/' + prestudent_id + all); + getTeacherProposal(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id); + if (!!studiensemester_kurzbz) { + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + } + return this.$fhcApi.get(url); }, - getRepeaterGrades(prestudent_id, all) { - all = all ? '/all' : ''; - return this.$fhcApi.get('api/frontend/v1/stv/grades/getRepeaterGrades/' + prestudent_id + all); + getRepeaterGrades(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id); + if (!!studiensemester_kurzbz) { + url = url + '/' + encodeURIComponent(studiensemester_kurzbz); + } + return this.$fhcApi.get(url); }, updateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) { return this.$fhcApi.post( @@ -65,8 +74,15 @@ export default { } ); }, - getGradeFromPoints(points, lehrveranstaltung_id, manualErrorHandling) { + getGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) { const config = manualErrorHandling ? {errorHandling: false} : {}; - return this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints', {points, lehrveranstaltung_id}, config); + return this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints', + { + "points": points, + "lehrveranstaltung_id": lehrveranstaltung_id, + "studiensemester_kurzbz": studiensemester_kurzbz + }, + config + ); } } \ No newline at end of file diff --git a/public/js/api/stv/prestudent.js b/public/js/api/stv/prestudent.js index 25b4c85ad..8b2a5255b 100644 --- a/public/js/api/stv/prestudent.js +++ b/public/js/api/stv/prestudent.js @@ -2,8 +2,13 @@ export default { //------------- Prestudent.js------------------------------------------------------ - get(prestudent_id){ - return this.$fhcApi.post('api/frontend/v1/stv/prestudent/get/' + prestudent_id); + get(prestudent_id, studiensemester_kurzbz) { + return this.$fhcApi.post( + 'api/frontend/v1/stv/prestudent/get/' + + encodeURIComponent(prestudent_id) + + '/' + + encodeURIComponent(studiensemester_kurzbz) + ); }, updatePrestudent(form, prestudent_id, data){ return this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id, diff --git a/public/js/api/stv/students.js b/public/js/api/stv/students.js index 797a13bb3..5a6c13922 100644 --- a/public/js/api/stv/students.js +++ b/public/js/api/stv/students.js @@ -1,12 +1,24 @@ export default { - uid(uid) { - return this.$fhcApi.getUri('api/frontend/v1/stv/students/uid/' + uid); + uid(uid, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/students/' + + encodeURIComponent(studiensemester_kurzbz) + + '/uid/' + + encodeURIComponent(uid); + return this.$fhcApi.getUri(url); }, - prestudent(prestudent_id) { - return this.$fhcApi.getUri('api/frontend/v1/stv/students/prestudent/' + prestudent_id); + prestudent(prestudent_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/students/' + + encodeURIComponent(studiensemester_kurzbz) + + '/prestudent/' + + encodeURIComponent(prestudent_id); + return this.$fhcApi.getUri(url); }, - person(person_id) { - return this.$fhcApi.getUri('api/frontend/v1/stv/students/person/' + person_id); + person(person_id, studiensemester_kurzbz) { + let url = 'api/frontend/v1/stv/students/' + + encodeURIComponent(studiensemester_kurzbz) + + '/person/' + + encodeURIComponent(person_id); + return this.$fhcApi.getUri(url); }, verband(relative_path) { return this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path); diff --git a/public/js/apps/Studentenverwaltung.js b/public/js/apps/Studentenverwaltung.js index bef605a10..8be451297 100644 --- a/public/js/apps/Studentenverwaltung.js +++ b/public/js/apps/Studentenverwaltung.js @@ -26,14 +26,118 @@ const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.* const router = VueRouter.createRouter({ history: VueRouter.createWebHistory(), routes: [ - { path: `/${ciPath}/studentenverwaltung`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/prestudent/:prestudent_id`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/prestudent/:prestudent_id/:tab`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/student/:id`, component: FhcStudentenverwaltung }, - { path: `/${ciPath}/studentenverwaltung/person/:person_id`, component: FhcStudentenverwaltung } + { + name: 'index', + path: `/${ciPath}/studentenverwaltung`, + component: FhcStudentenverwaltung + }, + { + name: 'studiensemester', + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/prestudent/:prestudent_id`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'prestudent', + url_prestudent_id: route.params.prestudent_id + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/prestudent/:prestudent_id/:tab`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'prestudent', + url_prestudent_id: route.params.prestudent_id, + url_tab: route.params.tab + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/student/:id`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'student', + url_student_id: route.params.id + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/person/:person_id`, + component: FhcStudentenverwaltung, + props: (route) => { + return { + url_studiensemester_kurzbz: route.params.studiensemester_kurzbz, + url_mode: 'person', + url_prestudent_id: route.params.person_id + }; + }, + beforeEnter: (to, from, next) => { + const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz); + if (!isSemester) { + return next({name: 'index'}); + } + next(); + } + }, + { + path: '/:pathMatch(.*)*', + redirect: { + name: 'index' + } + } ] }); +router.afterEach((to, from, failure) => { + if (to.params.studiensemester_kurzbz) { + document.title = to.params.studiensemester_kurzbz + ' - Studierendenverwaltung FH-Complete'; + } else { + document.title = 'Studierendenverwaltung FH-Complete'; + } +}); + const app = Vue.createApp({ name: 'StudentenverwaltungApp' }); diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js index 6fa626695..55892c02b 100644 --- a/public/js/components/Stv/Studentenverwaltung.js +++ b/public/js/components/Stv/Studentenverwaltung.js @@ -85,9 +85,7 @@ export default { student: { defaultaction: { type: "link", - action: function(data) { - return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/student/' + data.uid; - } + action: this.buildStudentSearchResultLink }, childactions: [ ] @@ -95,9 +93,7 @@ export default { prestudent: { defaultaction: { type: "link", - action: function(data) { - return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/studentenverwaltung/prestudent/' + data.prestudent_id; - } + action: this.buildPrestudentSearchResultLink }, childactions: [ ] @@ -133,15 +129,61 @@ export default { } } }, + watch: { + '$attrs.url_studiensemester_kurzbz': function (newVal, oldVal) { + if (newVal !== oldVal) { + this.studiensemesterKurzbz = newVal; + this.$refs.stvList.updateUrl(); + this.$refs.details.reload(); + } + }, + '$attrs.url_mode': function () { + this.handlePersonUrl(); + } + }, methods: { - onSelectVerband({link, studiengang_kz}) { + buildPrestudentSearchResultLink(data) { + return FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/studentenverwaltung' + + '/' + this.studiensemesterKurzbz + + '/prestudent/' + + data.prestudent_id; + }, + buildStudentSearchResultLink(data) { + return FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/studentenverwaltung' + + '/' + this.studiensemesterKurzbz + + '/student/' + + data.uid; + }, + onSelectVerband( {link, studiengang_kz}) { + let urlpath = String(link); + if (!urlpath.match(/\/prestudent/)) + { + urlpath = 'CURRENT_SEMESTER' + '/' + urlpath; + } this.studiengangKz = studiengang_kz; this.$refs.stvList.updateUrl( - ApiStv.students.verband(link) - ); + ApiStv.students.verband(urlpath) + ); + this.$router.push({ + name: 'studiensemester', + params: { + studiensemester_kurzbz: this.studiensemesterKurzbz + } + }); }, studiensemesterChanged(v) { this.studiensemesterKurzbz = v; + + this.$router.push({ + params: { + studiensemester_kurzbz: v + } + }); + this.$refs.stvList.updateUrl(); this.$refs.details.reload(); }, @@ -150,9 +192,38 @@ export default { }, searchfunction(params, config) { return this.$api.call(ApiSearchbar.searchStv(params), config); + }, + handlePersonUrl() { + if (this.$route.params.id) { + this.$refs.stvList.updateUrl( + ApiStv.students.uid(this.$route.params.id, 'CURRENT_SEMESTER'), + true + ); + } else if (this.$route.params.prestudent_id) { + this.$refs.stvList.updateUrl( + ApiStv.students.prestudent(this.$route.params.prestudent_id, 'CURRENT_SEMESTER'), + true + ); + } else if (this.$route.params.person_id) { + this.$refs.stvList.updateUrl( + ApiStv.students.person(this.$route.params.person_id, 'CURRENT_SEMESTER'), + true + ); + } } }, created() { + if (!this.$attrs?.url_studiensemester_kurzbz) { + this.$router.replace({ + name: 'studiensemester', + params: { + studiensemester_kurzbz: this.defaultSemester + } + }); + } else { + this.studiensemesterKurzbz = this.$attrs.url_studiensemester_kurzbz; + } + this.$api .call(ApiStv.kontakt.address.getNations()) .then(result => { @@ -214,23 +285,7 @@ export default { mounted() { //Test manu Systemerror //FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto = 'ma0068@technikum-wien.at';this.$fhcAlert.handleSystemError(1); - if (this.$route.params.id) { - this.$refs.stvList.updateUrl( - ApiStv.students.uid(this.$route.params.id), - true - ); - } else if (this.$route.params.prestudent_id) { - this.$refs.stvList.updateUrl( - ApiStv.students.prestudent(this.$route.params.prestudent_id), - true - ); - } else if (this.$route.params.person_id) { - this.$refs.stvList.updateUrl( - ApiStv.students.person(this.$route.params.person_id), - true - ); - } - + this.handlePersonUrl(); }, template: `