From c9a13b734dc73aeef669b2b55e6bc50e292d9d3a Mon Sep 17 00:00:00 2001
From: Thomas Hackl <hackl@data-quest.de>
Date: Tue, 28 Sep 2021 07:59:38 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20"Anmelderegel=20"h=C3=B6heres=20Fachs?=
 =?UTF-8?q?emester=20bevorzugen"=20zuf=C3=A4llige=20Darstellung=20der=20St?=
 =?UTF-8?q?udiengangsbedingungen"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/classes/admission/UserFilter.class.php                  | 3 +++
 lib/classes/admission/UserFilterField.class.php             | 6 ++++++
 .../admission/userfilter/DatafieldCondition.class.php       | 2 ++
 lib/classes/admission/userfilter/DegreeCondition.class.php  | 2 ++
 .../admission/userfilter/PermissionCondition.class.php      | 2 ++
 .../admission/userfilter/SemesterOfStudyCondition.class.php | 2 ++
 .../admission/userfilter/StgteilVersionCondition.class.php  | 2 ++
 lib/classes/admission/userfilter/SubjectCondition.class.php | 2 ++
 .../admission/userfilter/SubjectConditionAny.class.php      | 2 ++
 9 files changed, 23 insertions(+)

diff --git a/lib/classes/admission/UserFilter.class.php b/lib/classes/admission/UserFilter.class.php
index cb2e85c4aa4..32eed483083 100644
--- a/lib/classes/admission/UserFilter.class.php
+++ b/lib/classes/admission/UserFilter.class.php
@@ -101,6 +101,9 @@ class UserFilter
      */
     public function getFields()
     {
+        uasort($this->fields, function($a, $b) {
+            return $a->sortOrder -  $b->sortOrder;
+        });
         return $this->fields;
     }
 
diff --git a/lib/classes/admission/UserFilterField.class.php b/lib/classes/admission/UserFilterField.class.php
index 36ed57cea30..ab6db5799ce 100644
--- a/lib/classes/admission/UserFilterField.class.php
+++ b/lib/classes/admission/UserFilterField.class.php
@@ -51,6 +51,12 @@ class UserFilterField
      */
     public $value = null;
 
+    /*
+     * Provide some kind of sort order for filter fields. By default,
+     * all subclasses without an explicitly given order will be sorted at the end.
+     */
+    public $sortOrder = 99;
+
     public static $isParameterized = false;
 
     /**
diff --git a/lib/classes/admission/userfilter/DatafieldCondition.class.php b/lib/classes/admission/userfilter/DatafieldCondition.class.php
index f896f3434b6..471b806ca8f 100644
--- a/lib/classes/admission/userfilter/DatafieldCondition.class.php
+++ b/lib/classes/admission/userfilter/DatafieldCondition.class.php
@@ -18,6 +18,8 @@ class DatafieldCondition extends UserFilterField
 
     public $datafield_id, $null_yields, $datafield_name;
 
+    public $sortOrder = 6;
+
     public static function getParameterizedTypes()
     {
         $ret = [];
diff --git a/lib/classes/admission/userfilter/DegreeCondition.class.php b/lib/classes/admission/userfilter/DegreeCondition.class.php
index bc4d40b7721..9180e2d39f2 100644
--- a/lib/classes/admission/userfilter/DegreeCondition.class.php
+++ b/lib/classes/admission/userfilter/DegreeCondition.class.php
@@ -22,6 +22,8 @@ class DegreeCondition extends UserFilterField
     public $userDataDbTable = 'user_studiengang';
     public $userDataDbField = 'abschluss_id';
 
+    public $sortOrder = 1;
+
     /**
      * @see UserFilterField::__construct
      */
diff --git a/lib/classes/admission/userfilter/PermissionCondition.class.php b/lib/classes/admission/userfilter/PermissionCondition.class.php
index 0f2b0a34ccd..4adfdbfb50f 100644
--- a/lib/classes/admission/userfilter/PermissionCondition.class.php
+++ b/lib/classes/admission/userfilter/PermissionCondition.class.php
@@ -15,6 +15,8 @@
  */
 class PermissionCondition extends UserFilterField
 {
+    public $sortOrder = 7;
+
     /**
      * @see UserFilterField::__construct
      */
diff --git a/lib/classes/admission/userfilter/SemesterOfStudyCondition.class.php b/lib/classes/admission/userfilter/SemesterOfStudyCondition.class.php
index 13498186f05..c7347561731 100644
--- a/lib/classes/admission/userfilter/SemesterOfStudyCondition.class.php
+++ b/lib/classes/admission/userfilter/SemesterOfStudyCondition.class.php
@@ -22,6 +22,8 @@ class SemesterOfStudyCondition extends UserFilterField
     public $userDataDbTable = 'user_studiengang';
     public $userDataDbField = 'semester';
 
+    public $sortOrder = 4;
+
     // --- OPERATIONS ---
 
     /**
diff --git a/lib/classes/admission/userfilter/StgteilVersionCondition.class.php b/lib/classes/admission/userfilter/StgteilVersionCondition.class.php
index e53bfadc536..391fba360e2 100644
--- a/lib/classes/admission/userfilter/StgteilVersionCondition.class.php
+++ b/lib/classes/admission/userfilter/StgteilVersionCondition.class.php
@@ -22,6 +22,8 @@ class StgteilVersionCondition extends UserFilterField
     public $userDataDbTable = 'user_studiengang';
     public $userDataDbField = 'version_id';
 
+    public $sortOrder = 5;
+
     public static $isParameterized = true;
 
     public static function getParameterizedTypes()
diff --git a/lib/classes/admission/userfilter/SubjectCondition.class.php b/lib/classes/admission/userfilter/SubjectCondition.class.php
index e7f75c1918d..ab44d491190 100644
--- a/lib/classes/admission/userfilter/SubjectCondition.class.php
+++ b/lib/classes/admission/userfilter/SubjectCondition.class.php
@@ -22,6 +22,8 @@ class SubjectCondition extends UserFilterField
     public $userDataDbTable = 'user_studiengang';
     public $userDataDbField = 'fach_id';
 
+    public $sortOrder = 2;
+
     // --- OPERATIONS ---
 
     /**
diff --git a/lib/classes/admission/userfilter/SubjectConditionAny.class.php b/lib/classes/admission/userfilter/SubjectConditionAny.class.php
index 013e16e5b46..4b3caba0629 100644
--- a/lib/classes/admission/userfilter/SubjectConditionAny.class.php
+++ b/lib/classes/admission/userfilter/SubjectConditionAny.class.php
@@ -25,6 +25,8 @@ class SubjectConditionAny extends UserFilterField
     public $userDataDbTable = 'user_studiengang';
     public $userDataDbField = 'fach_id';
 
+    public $sortOrder = 3;
+
     // --- OPERATIONS ---
 
     /**
-- 
GitLab