diff --git a/application/config/routes.php b/application/config/routes.php index 80a623bb5..916b5234d 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -76,34 +76,34 @@ $route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/ $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'; +$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudents/$1'; +$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/prestudent/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2'; +$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/prestudent/([WS]S[0-9]{4})/(:any)'] = 'api/frontend/v1/stv/Students/getPrestudents/$1/$2/$3'; +$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/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'; +$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/([A-Z]{2,3})/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudentsOrgform/$1/$2'; +$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/([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/(-?[0-9]+)/([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/(-?[0-9]+)/([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'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)/(: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'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)/(:num)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)/(:num)/(:any)'] = 'api/frontend/v1/stv/Students/getStudents/$1/$2/$3/$4'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)/(: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'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)/([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'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/(-?[0-9]+)/([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})/(-?[0-9]+)/([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})/(-?[0-9]+)/([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})/(-?[0-9]+)/([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'; @@ -134,4 +134,4 @@ if ($dirlist) } } } -} \ No newline at end of file +} diff --git a/application/config/stv.php b/application/config/stv.php index aa885c9e1..675899108 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -58,6 +58,10 @@ $config['tabs'] = //if true, Anrechnungen can be added and edited in tab Anrechnungen 'editableAnrechnungen' => false, ], + 'notes' => [ + //if true, the count of Messages will be shown in the header of the Tab Messages + 'showCountNotes' => true + ] ]; // List of fields to show when ZGV_DOKTOR_ANZEIGEN is defined diff --git a/application/controllers/api/frontend/v1/AuthInfo.php b/application/controllers/api/frontend/v1/AuthInfo.php index 1362aee18..72f396b4f 100644 --- a/application/controllers/api/frontend/v1/AuthInfo.php +++ b/application/controllers/api/frontend/v1/AuthInfo.php @@ -20,6 +20,10 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); class AuthInfo extends FHCAPI_Controller { + protected $uid; + protected $pid; + protected $isMitarbeiter; + protected $isStudent; /** * Object initialization @@ -28,10 +32,16 @@ class AuthInfo extends FHCAPI_Controller { parent::__construct([ 'getAuthUID' => self::PERM_LOGGED, + 'getAuthInfo' => self::PERM_LOGGED, ]); + $this->load->model('crm/Student_model', 'StudentModel'); + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); + $this->uid = getAuthUID(); $this->pid = getAuthPersonID(); + $this->isMitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter($this->uid)) ?? false; + $this->isStudent = getData($this->StudentModel->isStudent($this->uid)) ?? false; } //------------------------------------------------------------------------------------------------------------------ @@ -47,6 +57,14 @@ class AuthInfo extends FHCAPI_Controller $this->terminateWithSuccess(['uid'=>$this->uid]); } - + public function getAuthInfo() + { + $data = (object) array( + 'uid' => $this->uid, + 'isMitarbeiter' => $this->isMitarbeiter, + 'isStudent' => $this->isStudent + ); + $this->terminateWithSuccess($data); + } } diff --git a/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php b/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php index 05d7c66c2..7486f44f0 100644 --- a/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php +++ b/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php @@ -60,7 +60,11 @@ class BetriebsmittelP extends FHCAPI_Controller public function getAllBetriebsmittel($type_id, $id) { - $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($id, $type_id); + $betriebsmitteltypes = null; + if ($this->input->get('betriebsmitteltypes') !== null && !isEmptyArray($this->input->get('betriebsmitteltypes'))) + $betriebsmitteltypes = $this->input->get('betriebsmitteltypes'); + + $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($id, $type_id, $betriebsmitteltypes); if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); @@ -370,6 +374,12 @@ class BetriebsmittelP extends FHCAPI_Controller $this->load->model('ressource/Betriebsmitteltyp_model', 'BetriebsmitteltypModel'); $this->BetriebsmitteltypModel->addOrder('beschreibung', 'ASC'); + + if ($this->input->get('betriebsmitteltypes') !== null && !isEmptyArray($this->input->get('betriebsmitteltypes'))) + { + $this->BetriebsmitteltypModel->db->where_in('betriebsmitteltyp', $this->input->get('betriebsmitteltypes')); + } + $result = $this->BetriebsmitteltypModel->load(); // load All if (isError($result)) { diff --git a/application/controllers/api/frontend/v1/notiz/NotizPerson.php b/application/controllers/api/frontend/v1/notiz/NotizPerson.php index cb9d31024..23a8fd199 100644 --- a/application/controllers/api/frontend/v1/notiz/NotizPerson.php +++ b/application/controllers/api/frontend/v1/notiz/NotizPerson.php @@ -18,6 +18,7 @@ class NotizPerson extends Notiz_Controller 'loadDokumente' => ['admin:r', 'assistenz:r'], 'getMitarbeiter' => ['admin:r', 'assistenz:r'], 'isBerechtigt' => ['admin:r', 'assistenz:r'], + 'getCountNotes' => ['admin:r', 'assistenz:r'], ]); } diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index adf9f729e..2fb436384 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -62,10 +62,15 @@ class Config extends FHCAPI_Controller 'component' => './Stv/Studentenverwaltung/Details/Details.js', 'config' => $config['details'] ]; + $result['notes'] = [ 'title' => $this->p->t('stv', 'tab_notes'), - 'component' => './Stv/Studentenverwaltung/Details/Notizen.js' + 'component' => './Stv/Studentenverwaltung/Details/Notizen.js', + 'config' => $config['notes'], + 'showSuffix' => ($config['notes']['showCountNotes'] ?? false), + 'suffixhelper' => APP_ROOT . 'public/js/helpers/Stv/Studentenverwaltung/Details/Notizen/NotizenSuffixHelper.js' ]; + $result['contact'] = [ 'title' => $this->p->t('stv', 'tab_contact'), 'component' => './Stv/Studentenverwaltung/Details/Kontakt.js', diff --git a/application/controllers/api/frontend/v1/stv/Favorites.php b/application/controllers/api/frontend/v1/stv/Favorites.php index b8fe6f3d7..ca8b62da6 100644 --- a/application/controllers/api/frontend/v1/stv/Favorites.php +++ b/application/controllers/api/frontend/v1/stv/Favorites.php @@ -35,8 +35,6 @@ class Favorites extends FHCAPI_Controller // Load models $this->load->model('system/Variable_model', 'VariableModel'); - - // TODO(chris): variable table might be to small to store favorites! } public function index() @@ -62,6 +60,17 @@ class Favorites extends FHCAPI_Controller $favorites = $this->input->post('favorites'); + $removed = []; + while (strlen($favorites) > 64) { + $favObj = json_decode($favorites); + if (!$favObj->list) + break; + $removed[] = array_shift($favObj->list); + $favorites = json_encode($favObj); + } + if ($removed) + $this->addMeta('removed', $removed); + $result = $this->VariableModel->setVariable(getAuthUID(), 'stv_favorites', $favorites); $this->getDataOrTerminateWithError($result); diff --git a/application/controllers/api/frontend/v1/stv/Notiz.php b/application/controllers/api/frontend/v1/stv/Notiz.php index 19e568f33..ba7cd1928 100644 --- a/application/controllers/api/frontend/v1/stv/Notiz.php +++ b/application/controllers/api/frontend/v1/stv/Notiz.php @@ -16,7 +16,8 @@ class Notiz extends Notiz_Controller 'updateNotiz' => ['admin:rw', 'assistenz:rw'], // TODO(manu): self::PERM_LOGGED 'deleteNotiz' => ['admin:r', 'assistenz:r'], 'loadDokumente' => ['admin:r', 'assistenz:r'], - 'getMitarbeiter' => ['admin:r', 'assistenz:r'] + 'getMitarbeiter' => ['admin:r', 'assistenz:r'], + 'getCountNotes' => ['admin:r', 'assistenz:r'], ]); //Load Models diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index 629d5512a..665fb620f 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -24,7 +24,6 @@ class Status extends FHCAPI_Controller 'updateStatus' => ['admin:rw', 'assistenz:rw'], 'advanceStatus' => ['admin:rw', 'assistenz:rw'], 'confirmStatus' => ['admin:rw', 'assistenz:rw'], - ]); //Load Models @@ -440,9 +439,10 @@ class Status extends FHCAPI_Controller ]); if (!$this->form_validation->run()) + { $this->terminateWithValidationErrors($this->form_validation->error_array()); + } - $this->load->library('PrestudentLib'); $this->db->trans_start(); @@ -628,8 +628,9 @@ class Status extends FHCAPI_Controller ]); if (!$this->form_validation->run()) + { $this->terminateWithValidationErrors($this->form_validation->error_array()); - + } // Start DB transaction $this->db->trans_start(); diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 2518e9af9..21b07b755 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -106,6 +106,7 @@ class Student extends FHCAPI_Controller $this->PrestudentModel->addSelect('p.staatsbuergerschaft'); $this->PrestudentModel->addSelect('p.matr_nr'); $this->PrestudentModel->addSelect('p.anrede'); + $this->PrestudentModel->addSelect('p.zugangscode'); if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) { $this->PrestudentModel->addSelect( @@ -159,7 +160,7 @@ class Student extends FHCAPI_Controller { $laufendesStudiensemester = ''; $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - $result = $this->StudiensemesterModel->getNearest(); + $result = $this->StudiensemesterModel->getAktOrNextSemester(); if(hasData($result)) { $laufendesStudiensemester = (getData($result))[0]->studiensemester_kurzbz; } diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 12785d6d7..26b5000bb 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -45,6 +45,13 @@ class Students extends FHCAPI_Controller // Load Libraries $this->load->library('VariableLib', ['uid' => getAuthUID()]); + $this->load->library('PhrasesLib'); + $this->loadPhrases( + array( + 'lehre' + ) + ); + } /** diff --git a/application/core/Notiz_Controller.php b/application/core/Notiz_Controller.php index 472ac7669..c2bb03267 100644 --- a/application/core/Notiz_Controller.php +++ b/application/core/Notiz_Controller.php @@ -21,6 +21,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller 'loadDokumente' => self::DEFAULT_PERMISSION_R, 'getMitarbeiter' => self::DEFAULT_PERMISSION_R, 'isBerechtigt' => self::DEFAULT_PERMISSION_R, + 'getCountNotes' => self::DEFAULT_PERMISSION_R, ]; if(!is_array($permissions)) @@ -459,4 +460,20 @@ abstract class Notiz_Controller extends FHCAPI_Controller return $this->terminateWithSuccess($result); } + public function getCountNotes($person_id) + { + $this->NotizzuordnungModel->addSelect('COUNT(*) AS anzahl', false); + + $result = $this->NotizzuordnungModel->loadWhere( + array('person_id' => $person_id) + ); + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + $anzahl = current(getData($result)); + return $this->terminateWithSuccess($anzahl->anzahl ?: 0); + } + } \ No newline at end of file diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index 6da9a384d..219af51b8 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -97,7 +97,7 @@ class Betriebsmittelperson_model extends DB_Model return $this->loadWhere($condition); } - public function getBetriebsmittelData($id, $type_id) + public function getBetriebsmittelData($id, $type_id, $betriesmitteltypes = null) { switch ($type_id) { case 'person_id': @@ -113,6 +113,15 @@ class Betriebsmittelperson_model extends DB_Model return error("ID nicht gültig"); } + $cond .= " = ? "; + $params[] = $id; + + if ($betriesmitteltypes && !isEmptyArray($betriesmitteltypes)) + { + $cond .= " AND bm.betriebsmitteltyp IN ?"; + $params[] = $betriesmitteltypes; + } + $query = " SELECT bm.nummer, bmp.person_id, bm.betriebsmitteltyp, bmp.anmerkung as anmerkung, @@ -126,9 +135,9 @@ class Betriebsmittelperson_model extends DB_Model JOIN wawi.tbl_betriebsmittel bm ON (bmp.betriebsmittel_id = bm.betriebsmittel_id) WHERE - " . $cond . " = ? "; + " . $cond; - return $this->execQuery($query, array($id)); + return $this->execQuery($query, $params); } /** diff --git a/public/css/components/primevue.css b/public/css/components/primevue.css index fbbae4e58..5949d6ecc 100644 --- a/public/css/components/primevue.css +++ b/public/css/components/primevue.css @@ -3973,6 +3973,10 @@ border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } +.p-tabview-panel .btn-close, +.p-tabview-panel .carousel-indicators [data-bs-target] { + box-sizing: content-box; +} .p-toolbar { background: #efefef; diff --git a/public/js/api/authinfo.js b/public/js/api/authinfo.js index 618cf2e26..cb79ac144 100644 --- a/public/js/api/authinfo.js +++ b/public/js/api/authinfo.js @@ -6,5 +6,10 @@ export default { { } ); }, - + getAuthInfo() { + return this.$fhcApi.get( + '/api/frontend/v1/AuthInfo/getAuthInfo', + {} + ); + }, }; \ No newline at end of file diff --git a/public/js/api/factory/authinfo.js b/public/js/api/factory/authinfo.js index 5cf88604f..80cec2649 100644 --- a/public/js/api/factory/authinfo.js +++ b/public/js/api/factory/authinfo.js @@ -21,5 +21,11 @@ export default { method: 'get', url: '/api/frontend/v1/AuthInfo/getAuthUID' }; + }, + getAuthInfo() { + return { + method: 'get', + url: '/api/frontend/v1/AuthInfo/getAuthInfo' + }; } }; \ No newline at end of file diff --git a/public/js/api/factory/betriebsmittel/person.js b/public/js/api/factory/betriebsmittel/person.js index 912a5df31..504e755b6 100644 --- a/public/js/api/factory/betriebsmittel/person.js +++ b/public/js/api/factory/betriebsmittel/person.js @@ -16,10 +16,13 @@ */ export default { - getAllBetriebsmittel(type, id) { + getAllBetriebsmittel(type, id, betriebsmitteltypes) { return { method: 'get', - url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + type + '/' + id + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + type + '/' + id, + params: { + betriebsmitteltypes + } }; }, addNewBetriebsmittel(person_id, params) { @@ -48,10 +51,13 @@ export default { url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' + betriebsmittelperson_id }; }, - getTypenBetriebsmittel() { + getTypenBetriebsmittel(betriebsmitteltypes) { return { method: 'get', - url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/' + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/', + params: { + betriebsmitteltypes + } }; }, loadInventarliste(query) { diff --git a/public/js/api/factory/notiz/person.js b/public/js/api/factory/notiz/person.js index 33b572d1a..c75e79acf 100644 --- a/public/js/api/factory/notiz/person.js +++ b/public/js/api/factory/notiz/person.js @@ -83,5 +83,11 @@ export default { method: 'get', url: 'api/frontend/v1/notiz/notizPerson/isBerechtigt/' }; + }, + getCountNotes(person_id){ + return { + method: 'get', + url: 'api/frontend/v1/notiz/notizPerson/getCountNotes/' + person_id + }; } }; diff --git a/public/js/components/Betriebsmittel/Betriebsmittel.js b/public/js/components/Betriebsmittel/Betriebsmittel.js index 6d976a1fa..148d7a83c 100644 --- a/public/js/components/Betriebsmittel/Betriebsmittel.js +++ b/public/js/components/Betriebsmittel/Betriebsmittel.js @@ -29,14 +29,24 @@ export default { uid: { type: [Number, String], required: true - } + }, + /** List of types to allow for creation */ + betriebsmittelTypes: { + type: Array, + default: null + }, + /** + * If true: only show the types specified in 'betriebsmittelTypes'. + * If false: show all available types. + */ + filterByProvidedTypes: Boolean }, data() { return { tabulatorOptions: { ajaxURL: 'dummy', ajaxRequestFunc: () => this.$api.call( - this.endpoint.getAllBetriebsmittel(this.typeId, this.id) + this.endpoint.getAllBetriebsmittel(this.typeId, this.id, (this.filterByProvidedTypes ? this.betriebsmittelTypes : null)) ), ajaxResponse: (url, params, response) => response.data, columns: [ @@ -294,7 +304,7 @@ export default { }, created() { return this.$api - .call(this.endpoint.getTypenBetriebsmittel()) + .call(this.endpoint.getTypenBetriebsmittel(this.betriebsmittelTypes)) .then(result => { this.listBetriebsmitteltyp = result.data; }) diff --git a/public/js/components/Calendar/Mode/Day.js b/public/js/components/Calendar/Mode/Day.js index 68ca1fa89..e9764b495 100644 --- a/public/js/components/Calendar/Mode/Day.js +++ b/public/js/components/Calendar/Mode/Day.js @@ -44,11 +44,16 @@ export default { }, watch: { currentDate() { - this.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days; - if (this.rangeOffset) { - this.$refs.view.$refs.grid.disableAutoScroll(); + if (this.currentDate.locale != this.focusDate.locale) { + this.focusDate = this.currentDate; this.$emit('update:range', this.range); - this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage); + } else { + this.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days; + if (this.rangeOffset) { + this.$refs.view.$refs.grid.disableAutoScroll(); + this.$emit('update:range', this.range); + this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage); + } } } }, diff --git a/public/js/components/Calendar/Mode/List.js b/public/js/components/Calendar/Mode/List.js index 97990a5a3..76acfc610 100644 --- a/public/js/components/Calendar/Mode/List.js +++ b/public/js/components/Calendar/Mode/List.js @@ -47,10 +47,15 @@ export default { }, watch: { currentDate() { - this.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days; - if (this.rangeOffset) { + if (this.currentDate.locale != this.focusDate.locale) { + this.focusDate = this.currentDate; this.$emit('update:range', this.range); - this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage); + } else { + this.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days; + if (this.rangeOffset) { + this.$emit('update:range', this.range); + this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage); + } } } }, diff --git a/public/js/components/Cis/LvPlan/Personal.js b/public/js/components/Cis/LvPlan/Personal.js index 5c4be5c23..f6fd462da 100644 --- a/public/js/components/Cis/LvPlan/Personal.js +++ b/public/js/components/Cis/LvPlan/Personal.js @@ -19,7 +19,9 @@ export default { studiensemester_kurzbz: null, studiensemester_start: null, studiensemester_ende: null, - uid: null + uid: null, + isMitarbeiter: false, + isStudent: false }; }, computed:{ @@ -36,7 +38,15 @@ export default { downloadLinks() { if (!this.studiensemester_start || !this.studiensemester_ende || !this.uid) return false; - + + let type = false; + type = this.isStudent ? 'student' : type; + type = this.isMitarbeiter ? 'lektor' : type; + if (false === type) + { + return; + } + const opts = { zone: this.viewData.timezone }; const start = luxon.DateTime .fromISO(this.studiensemester_start, opts) @@ -47,7 +57,7 @@ export default { const download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lvplan/stpl_kalender.php' - + '?type=student' + + '?type=' + type + '&pers_uid=' + this.uid + '&begin=' + start + '&ende=' + ende; @@ -96,9 +106,11 @@ export default { }, created() { this.$api - .call(ApiAuthinfo.getAuthUID()) + .call(ApiAuthinfo.getAuthInfo()) .then(res => { this.uid = res.data.uid; + this.isMitarbeiter = res.data.isMitarbeiter; + this.isStudent = res.data.isStudent; }); }, template: /*html*/` diff --git a/public/js/components/Form/Validation.js b/public/js/components/Form/Validation.js index 75fd7d724..530f6b514 100644 --- a/public/js/components/Form/Validation.js +++ b/public/js/components/Form/Validation.js @@ -23,7 +23,8 @@ export default { if (!Array.isArray(feedback)) feedback = [feedback]; const ts = Date.now(); - this.feedback[valid ? 'success' : 'danger'] = feedback.map(msg => [msg, ts]); + this.feedback[valid ? 'success' : 'danger'] + .push(...feedback.map(msg => [msg, ts])); } }, mounted() { diff --git a/public/js/components/Notiz/Notiz.js b/public/js/components/Notiz/Notiz.js index 5a3944803..58168fbc7 100644 --- a/public/js/components/Notiz/Notiz.js +++ b/public/js/components/Notiz/Notiz.js @@ -295,7 +295,7 @@ export default { showType_id: false, showId: false, showLastupdate: false - }, + } } }, methods: { @@ -464,7 +464,6 @@ export default { }); }, initTinyMCE() { - const vm = this; tinymce.init({ target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component @@ -502,15 +501,15 @@ export default { const columnToShow = "show" + column.charAt(0).toUpperCase() + column.slice(1); this.showVariables[columnToShow] = true; }); - }, + } }, created() { this.initializeShowVariables(); this.getUid(); }, async mounted() { - if(this.showTinyMce){ - this.initTinyMCE(); + if (this.showTinyMce) { + await this.initTinyMCE(); } }, watch: { @@ -548,16 +547,17 @@ export default { this.reload(); } }, - beforeDestroy() { - if(this.showTinyMce) { - this.editor.destroy(); + beforeUnmount() { + if (this.editor && tinymce.get(this.editor.id)) { + tinymce.get(this.editor.id).remove(); + this.editor = null; } }, template: `