diff --git a/lib/admissionrules/preferentialadmission/PreferentialAdmission.class.php b/lib/admissionrules/preferentialadmission/PreferentialAdmission.class.php index 348d6fcca8f573a0077b639fde74d46c8fd6c3c9..6bb6cebf4c7ee7e2c4e784247ebbf57a1c52da98 100644 --- a/lib/admissionrules/preferentialadmission/PreferentialAdmission.class.php +++ b/lib/admissionrules/preferentialadmission/PreferentialAdmission.class.php @@ -446,7 +446,7 @@ class PreferentialAdmission extends AdmissionRule $userlist->setUsers($members); $userlist->setFactor($bonus); $userlist->store(); - $bonus = $bonus * ($this->bonus_difference + 1); + $bonus = $bonus + ($this->bonus_difference + 1); $courseset->addUserList($userlist->getId()); $this->userlists[] = $userlist->getId(); } diff --git a/lib/classes/admission/CourseSet.class.php b/lib/classes/admission/CourseSet.class.php index 50f983fbc054536ad7fba909415c955f0b87328e..cf6cac788933d6cc3122965f6f22443bf4514800 100644 --- a/lib/classes/admission/CourseSet.class.php +++ b/lib/classes/admission/CourseSet.class.php @@ -597,14 +597,32 @@ class CourseSet public function getUserFactorList() { $factored_users = []; + foreach ($this->getUserLists() as $ul_id) { $user_list = new AdmissionUserList($ul_id); - $factored_users = array_merge($factored_users, - array_combine(array_keys($user_list->getUsers()), - array_fill(0, count($user_list->getUsers()), $user_list->getFactor()) - ) - ); + + // Iterate through user list. + foreach ($user_list->getUsers() as $user => $assigned) { + switch ($user_list->getFactor()) { + // Maximum factor, just set it and stop further processing of user lists. + case PHP_INT_MAX: + $factored_users[$user] = PHP_INT_MAX; + break; + // Backlist, set malus and stop further processing of user lists. + case 0: + $factored_users[$user] = 0; + break; + default: + // Add up current bonus if it isn't already at 0 or PHP_INT_MAX. + if ($factored_users[$user] !== 0 && $factored_users[$user] != PHP_INT_MAX) { + $factored_users[$user] = isset($factored_users[$user]) ? + $factored_users[$user] + $user_list->getFactor() : + $user_list->getFactor(); + } + } + } } + return $factored_users; }