From 80faf92dc2fd214bb751f0613396024a0acec360 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Thu, 22 May 2025 18:41:26 +0200 Subject: [PATCH 1/4] made issue list configurable (apps, status, functions) --- application/config/issues.php | 13 +++ .../controllers/system/issues/Issues.php | 13 ++- .../views/system/issues/issuesData.php | 82 +++++++++++-------- 3 files changed, 71 insertions(+), 37 deletions(-) create mode 100644 application/config/issues.php diff --git a/application/config/issues.php b/application/config/issues.php new file mode 100644 index 000000000..97e7a17f3 --- /dev/null +++ b/application/config/issues.php @@ -0,0 +1,13 @@ +load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); $this->load->model('system/Sprache_model', 'SpracheModel'); + // load config + $this->load->config('issues'); + $this->loadPhrases( array( 'global', @@ -47,10 +50,12 @@ class Issues extends Auth_Controller { $oes_for_issues = $this->_getOesForIssues(); $language_index = $this->_getLanguageIndex(); + $apps = $this->config->item('issues_list_apps'); + $status = $this->config->item('issues_list_status'); $this->load->view( 'system/issues/issues', - array_merge($oes_for_issues, array('language_index' => $language_index)) + array_merge($oes_for_issues, array('language_index' => $language_index, 'apps' => $apps, 'status' => $status)) ); } @@ -121,6 +126,8 @@ class Issues extends Auth_Controller $oe_kurzbz_for_funktion = array(); $benutzerfunktionRes = $this->BenutzerfunktionModel->getBenutzerFunktionByUid($this->_uid, null, date('Y-m-d'), date('Y-m-d')); + $functions = $this->config->item('issues_list_functions'); + if (isError($benutzerfunktionRes)) show_error(getError($benutzerfunktionRes)); @@ -130,8 +137,8 @@ class Issues extends Auth_Controller { $all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz; - // separate oes for the additional funktion which enables displaying issues - if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ) + // separate oes for the additional functions which enables displaying issues + if (in_array($benutzerfunktion->funktion_kurzbz, $functions)) { $oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz; diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php index c60b03a74..71f835545 100644 --- a/application/views/system/issues/issuesData.php +++ b/application/views/system/issues/issuesData.php @@ -1,11 +1,21 @@ db->escape($string); }, array_keys($all_funktionen_oe_kurzbz))) . ")"; + // all oes for which logged user has issues permissions, including permissions for "special" issue funktion -$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')"; -$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')"; +$ALL_OE_KURZBZ_BERECHTIGT = isEmptyArray($all_oe_kurzbz_berechtigt) ? "(NULL)" + : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $all_oe_kurzbz_berechtigt)) . ")"; + +// app apps for which issues should be displayed +$APPS = isEmptyArray($apps) ? "" : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $apps)) . ")"; + +// all prestudent status for which issues should be displayed +$RELEVANT_PRESTUDENT_STATUS = isEmptyArray($status) ? "" + : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $status)) . ")"; // get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes $query = "WITH zustaendigkeiten AS ( @@ -37,8 +47,8 @@ $query .= " SELECT issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\", inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\", - ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\", - stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\", + ftyp.bezeichnung_mehrsprachig[".$this->db->escape($language_index)."] AS \"Fehlertyp\", + stat.bezeichnung_mehrsprachig[".$this->db->escape($language_index)."] AS \"Fehlerstatus\", verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\", fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\", pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\", @@ -118,44 +128,48 @@ $query .= " JOIN system.tbl_issue_status stat USING (status_kurzbz) LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id WHERE - fr.app IN ('core', 'dvuh') - AND ( + ( EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */ SELECT 1 FROM zustaendigkeiten WHERE fehlercode = iss.fehlercode AND zustaendig = TRUE)"; // show issue if it is assigend to oe of logged in user or to student of oe of logged in user -if (!isEmptyArray($all_oe_kurzbz_berechtigt)) -{ - $query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; +$query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; + +$query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ + SELECT 1 FROM public.tbl_prestudent ps + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE person_id = iss.person_id + AND stg.oe_kurzbz IN ".$ALL_OE_KURZBZ_BERECHTIGT; + +if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND pss.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; + +$query .= " AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ + FROM public.tbl_prestudentstatus ps_finished + JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) + WHERE prestudent_id = ps.prestudent_id + AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') + AND datum::date + interval '2 months' < NOW() + AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ + JOIN public.tbl_prestudentstatus USING (prestudent_id) + JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) + WHERE person_id = ps.person_id + AND prestudent_id <> ps_finished.prestudent_id + AND tbl_studiensemester.start::date > sem_finished.start::date"; + +if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND tbl_prestudentstatus.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; + +$query .= ") + ) + ) + )"; - $query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ - SELECT 1 FROM public.tbl_prestudent ps - JOIN public.tbl_prestudentstatus pss USING (prestudent_id) - JOIN public.tbl_studiengang stg USING (studiengang_kz) - WHERE person_id = iss.person_id - AND stg.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT - AND pss.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS - AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ - FROM public.tbl_prestudentstatus ps_finished - JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) - WHERE prestudent_id = ps.prestudent_id - AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') - AND datum::date + interval '2 months' < NOW() - AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ - JOIN public.tbl_prestudentstatus USING (prestudent_id) - JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) - WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS - AND person_id = ps.person_id - AND prestudent_id <> ps_finished.prestudent_id - AND tbl_studiensemester.start::date > sem_finished.start::date) - ) - ) - )"; -} $query .= ") "; +if (!isEmptyString($APPS)) $query .= " AND fr.app IN ".$APPS; + $query .= " ORDER BY CASE WHEN fehlertyp_kurzbz = '".IssuesLib::ERRORTYPE_CODE."' THEN 0 From 94f0d43c4a3440f28c8c8e32c377539eb05590a1 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Fri, 23 May 2025 09:59:13 +0200 Subject: [PATCH 2/4] issues config: removed empty lines --- application/config/issues.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/application/config/issues.php b/application/config/issues.php index 97e7a17f3..e4e4f278c 100644 --- a/application/config/issues.php +++ b/application/config/issues.php @@ -9,5 +9,3 @@ $config['issues_list_functions'] = array('ass'); // functions which enable users to see issues $config['issues_list_status'] = array('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent'); - - From 660f195c57f3908100cb4af6336d5ad82a882081 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 26 May 2025 11:03:33 +0200 Subject: [PATCH 3/4] issue list: removed empty space and removed const which was moved to config --- application/controllers/system/issues/Issues.php | 1 - application/views/system/issues/issuesData.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index 1a5c97aca..551787c8c 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -6,7 +6,6 @@ class Issues extends Auth_Controller { private $_uid; - const FUNKTION_KURZBZ = 'ass'; // user having this funktion can see issues for oes assigned with this funktion const BERECHTIGUNG_KURZBZ = 'system/issues_verwalten'; // user having this permission can see issues for oes assigned with this permission public function __construct() diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php index 71f835545..edaee9058 100644 --- a/application/views/system/issues/issuesData.php +++ b/application/views/system/issues/issuesData.php @@ -145,7 +145,7 @@ $query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a AND stg.oe_kurzbz IN ".$ALL_OE_KURZBZ_BERECHTIGT; if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND pss.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; - + $query .= " AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ FROM public.tbl_prestudentstatus ps_finished JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) From 5d241b050a04b6904f54dd490c475ebc54d1aa0d Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 26 May 2025 11:16:50 +0200 Subject: [PATCH 4/4] issue list: renamed config --- application/config/{issues.php => issueList.php} | 0 application/controllers/system/issues/Issues.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename application/config/{issues.php => issueList.php} (100%) diff --git a/application/config/issues.php b/application/config/issueList.php similarity index 100% rename from application/config/issues.php rename to application/config/issueList.php diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index 551787c8c..27a928fb4 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -28,7 +28,7 @@ class Issues extends Auth_Controller $this->load->model('system/Sprache_model', 'SpracheModel'); // load config - $this->load->config('issues'); + $this->load->config('issueList'); $this->loadPhrases( array(