Last active
February 20, 2019 14:01
-
-
Save tleilax/87ac356369017ab439fa7eddbbcf5bd8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Index: lib/classes/admission/AdmissionPriority.class.php | |
=================================================================== | |
--- lib/classes/admission/AdmissionPriority.class.php (revision 51112) | |
+++ lib/classes/admission/AdmissionPriority.class.php (working copy) | |
@@ -1,5 +1,4 @@ | |
<?php | |
- | |
/** | |
* AdmissionPriority.class.php | |
* | |
@@ -15,25 +14,26 @@ | |
* @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2 | |
* @category Stud.IP | |
*/ | |
- | |
class AdmissionPriority | |
{ | |
- | |
/** | |
* Get all priorities for the given course set. | |
* The priorities are stored in a 2-dimensional array in the form | |
* priority[user_id][course_id] = x. | |
* | |
- * @param String courseSetId | |
+ * @param String $courseSetId | |
* @return A 2-dimensional array containing all priorities. | |
*/ | |
public static function getPriorities($courseSetId) | |
{ | |
- $priorities = array(); | |
- $stmt = DBManager::get()->prepare( | |
- "SELECT * FROM `priorities` | |
- WHERE `set_id`=?"); | |
- $stmt->execute(array($courseSetId)); | |
+ $query = "SELECT p.`user_id`, p.`seminar_id`, p.`priority` | |
+ FROM `priorities` AS p | |
+ JOIN `seminare` AS s ON (p.`seminar_id` = s.`Seminar_id`) | |
+ WHERE p.`set_id` = ?"; | |
+ $stmt = DBManager::get()->prepare($query); | |
+ $stmt->execute([$courseSetId]); | |
+ | |
+ $priorities = []; | |
while ($current = $stmt->fetch(PDO::FETCH_ASSOC)) { | |
$priorities[$current['user_id']][$current['seminar_id']] = $current['priority']; | |
} | |
@@ -45,17 +45,20 @@ | |
* The priorities are stored in an array in the form | |
* priority[user_id] = x. | |
* | |
- * @param String courseSetId | |
- * @param String courseId | |
+ * @param String $courseSetId | |
+ * @param String $courseId | |
* @return An array containing all priorities. | |
*/ | |
public static function getPrioritiesByCourse($courseSetId, $courseId) | |
{ | |
- $priorities = array(); | |
- $stmt = DBManager::get()->prepare( | |
- "SELECT * FROM `priorities` | |
- WHERE `set_id`=? AND `seminar_id`=?"); | |
- $stmt->execute(array($courseSetId, $courseId)); | |
+ $query = "SELECT p.`user_id`, p.`priority` | |
+ FROM `priorities` AS p | |
+ JOIN `seminare` AS s ON (p.`seminar_id` = s.`Seminar_id`) | |
+ WHERE p.`set_id` = ? AND p.`seminar_id` = ?"; | |
+ $stmt = DBManager::get()->prepare($query); | |
+ $stmt->execute([$courseSetId, $courseId]); | |
+ | |
+ $priorities = []; | |
while ($current = $stmt->fetch(PDO::FETCH_ASSOC)) { | |
$priorities[$current['user_id']] = $current['priority']; | |
} | |
@@ -67,17 +70,21 @@ | |
* The priorities are stored in an array in the form | |
* priority[course_id] = x. | |
* | |
- * @param String courseSetId | |
- * @param String userId | |
+ * @param String $courseSetId | |
+ * @param String $userId | |
* @return An array containing all priorities. | |
*/ | |
public static function getPrioritiesByUser($courseSetId, $userId) | |
{ | |
- $priorities = array(); | |
- $stmt = DBManager::get()->prepare( | |
- "SELECT * FROM `priorities` | |
- WHERE `set_id`=? AND `user_id`=? ORDER BY priority"); | |
- $stmt->execute(array($courseSetId, $userId)); | |
+ $query = "SELECT p.`seminar_id`, p.`priority` | |
+ FROM `priorities` AS p | |
+ JOIN `seminare` AS s ON (p.`seminar_id` = s.`Seminar_id`) | |
+ WHERE p.`set_id` = ? AND p.`user_id` = ? | |
+ ORDER BY p.`priority`"; | |
+ $stmt = DBManager::get()->prepare($query); | |
+ $stmt->execute([$courseSetId, $userId]); | |
+ | |
+ $priorities = []; | |
while ($current = $stmt->fetch(PDO::FETCH_ASSOC)) { | |
$priorities[$current['seminar_id']] = $current['priority']; | |
} | |
@@ -87,28 +94,36 @@ | |
/** | |
* The given user sets a course in the given course set to priority x. | |
* | |
- * @param String courseSetId | |
- * @param String userId | |
- * @param String courseId | |
- * @param int priority | |
+ * @param String $courseSetId | |
+ * @param String $userId | |
+ * @param String $courseId | |
+ * @param int $priority | |
* @return int Number of affected rows, if any. | |
*/ | |
public static function setPriority($courseSetId, $userId, $courseId, $priority) | |
{ | |
- $priorities = array(); | |
- $stmt = DBManager::get()->prepare( | |
- "INSERT INTO `priorities` (`user_id`, `set_id`, `seminar_id`, | |
- `priority`, `mkdate`, `chdate`) | |
- VALUES (?, ?, ?, ?, ?, ?) | |
- ON DUPLICATE KEY UPDATE `priority`=VALUES(`priority`), | |
- `chdate`=VALUES(`chdate`)"); | |
- $stmt->execute(array($userId, $courseSetId, $courseId, | |
- $priority, time(), time())); | |
+ $query = "INSERT INTO `priorities` ( | |
+ `user_id`, `set_id`, `seminar_id`, `priority`, `mkdate`, `chdate` | |
+ ) | |
+ SELECT ?, ?, `seminar_id`, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP() | |
+ FROM `seminare` | |
+ WHERE `seminar_id` = ? | |
+ ON DUPLICATE KEY | |
+ UPDATE `priority` = VALUES(`priority`), | |
+ `chdate` = VALUES(`chdate`)"; | |
+ $stmt = DBManager::get()->prepare($query); | |
+ $stmt->execute([$userId, $courseSetId, $priority, $courseId]); | |
+ | |
$ok = $stmt->rowCount(); | |
if ($ok) { | |
- StudipLog::log('SEM_USER_ADD', $courseId, | |
- $userId, 'Anmeldung zur Platzvergabe', sprintf('Prio: %s Anmeldeset: %s', $priority, $courseSetId)); | |
- NotificationCenter::postNotification('UserAdmissionPriorityDidCreate', $courseId, $userId); | |
+ StudipLog::log( | |
+ 'SEM_USER_ADD', $courseId, $userId, | |
+ 'Anmeldung zur Platzvergabe', | |
+ sprintf('Prio: %s Anmeldeset: %s', $priority, $courseSetId) | |
+ ); | |
+ NotificationCenter::postNotification( | |
+ 'UserAdmissionPriorityDidCreate', $courseId, $userId | |
+ ); | |
} | |
return $ok; | |
} | |
@@ -117,24 +132,39 @@ | |
* unset priority for given user,set and course | |
* reorder remaining priorities | |
* | |
- * @param String courseSetId | |
- * @param String userId | |
- * @param String courseId | |
+ * @param String $courseSetId | |
+ * @param String $userId | |
+ * @param String $courseId | |
* @return int Number of affected rows, if any. | |
*/ | |
public static function unsetPriority($courseSetId, $userId, $courseId) | |
{ | |
- $db = DBManager::get(); | |
- $deleted = $db->execute("DELETE FROM priorities WHERE user_id=? AND seminar_id=? AND set_id=? LIMIT 1", | |
- array($userId, $courseId, $courseSetId)); | |
- if ($deleted) { | |
- $priovar = md5($courseSetId . $userId); | |
- $db->exec("SET @$priovar:=0"); | |
- $db->execute("UPDATE priorities SET priority = @$priovar:=@$priovar+1 WHERE user_id=? AND set_id=? ORDER BY priority", array($userId, $courseSetId)); | |
- StudipLog::log('SEM_USER_DEL', $courseId, | |
- $userId, 'Anmeldung zur Platzvergabe zurückgezogen', sprintf('Anmeldeset: %s', $courseSetId)); | |
- NotificationCenter::postNotification('UserAdmissionPriorityDidDelete', $courseId, $userId); | |
+ $query = "DELETE FROM `priorities` | |
+ WHERE `user_id` = ? AND `seminar_id` = ? AND `set_id` = ? | |
+ LIMIT 1"; | |
+ $deleted = DBManager::get()->execute($query, [$userId, $courseId, $courseSetId]); | |
+ if (!$deleted) { | |
+ return 0; | |
} | |
+ | |
+ $priovar = md5($courseSetId . $userId); | |
+ DBManager::get()->exec("SET @{$priovar} := 0"); | |
+ | |
+ $query = "UPDATE `priorities` | |
+ SET `priority` = (@{$priovar} := @{$priovar} + 1) | |
+ WHERE `user_id` = ? AND `set_id` = ? | |
+ ORDER BY `priority`"; | |
+ DBManager::get()->execute($query, [$userId, $courseSetId]); | |
+ | |
+ StudipLog::log( | |
+ 'SEM_USER_DEL', $courseId, $userId, | |
+ 'Anmeldung zur Platzvergabe zurückgezogen', | |
+ sprintf('Anmeldeset: %s', $courseSetId) | |
+ ); | |
+ NotificationCenter::postNotification( | |
+ 'UserAdmissionPriorityDidDelete', $courseId, $userId | |
+ ); | |
+ | |
return $deleted; | |
} | |
@@ -141,81 +171,83 @@ | |
/** | |
* delete all priorities for one set | |
* | |
- * @param String courseSetId | |
+ * @param String $courseSetId | |
* @return int Number of affected rows, if any. | |
*/ | |
public static function unsetAllPriorities($courseSetId) | |
{ | |
- return DBManager::get() | |
- ->execute("DELETE FROM priorities WHERE set_id=?", | |
- array($courseSetId)); | |
+ $query = "DELETE FROM `priorities` WHERE `set_id` = ?"; | |
+ return DBManager::get()->execute($query, [$courseSetId]); | |
} | |
/** | |
* delete all priorities for one set and one user | |
* | |
- * @param String courseSetId | |
- * @param String userId | |
+ * @param String $courseSetId | |
+ * @param String $userId | |
* @return int Number of affected rows, if any. | |
*/ | |
public static function unsetAllPrioritiesForUser($courseSetId, $userId) | |
{ | |
- return DBManager::get() | |
- ->execute("DELETE FROM priorities WHERE user_id=? AND set_id=?", | |
- array($userId, $courseSetId)); | |
+ $query = "DELETE FROM `priorities` | |
+ WHERE `user_id` = ? AND `set_id` = ?"; | |
+ return DBManager::get()->execute($query, [$userId, $courseSetId]); | |
} | |
/** | |
* returns statistics of priority selection for a set | |
* | |
- * @param String courseSetId | |
+ * @param String $courseSetId | |
* @return array stats grouped by course id | |
*/ | |
public static function getPrioritiesStats($courseSetId) | |
{ | |
- return DBManager::get() | |
- ->fetchGrouped("SELECT seminar_id, COUNT(*) as c, AVG(priority) as a, COUNT(IF(priority=1,1,NULL)) as h FROM priorities WHERE set_id = ? GROUP BY seminar_id", | |
- array($courseSetId)); | |
+ $query = "SELECT p.`seminar_id`, | |
+ COUNT(*) AS c, | |
+ AVG(p.`priority`) AS a, | |
+ COUNT(IF(p.`priority` = 1, 1, NULL)) AS h | |
+ FROM `priorities` AS p | |
+ JOIN `seminare` AS s ON (p.`seminar_id` = s.`Seminar_id`) | |
+ WHERE p.`set_id` = ? | |
+ GROUP BY p.`seminar_id`"; | |
+ return DBManager::get()->fetchGrouped($query, [$courseSetId]); | |
} | |
/** | |
* returns number of users with priorities for a set | |
* | |
- * @param String courseSetId | |
+ * @param String $courseSetId | |
* @return integer | |
*/ | |
public static function getPrioritiesCount($courseSetId) | |
{ | |
- return DBManager::get() | |
- ->fetchColumn("SELECT COUNT(DISTINCT user_id) FROM priorities WHERE set_id = ?", | |
- array($courseSetId)); | |
+ $query = "SELECT COUNT(DISTINCT `user_id`) | |
+ FROM `priorities` | |
+ WHERE `set_id` = ?"; | |
+ return (int) DBManager::get()->fetchColumn($query, [$courseSetId]); | |
} | |
/** | |
* return max chosen priority in set | |
* | |
- * @param String courseSetId | |
+ * @param String $courseSetId | |
* @return integer | |
*/ | |
public static function getPrioritiesMax($courseSetId) | |
{ | |
- return DBManager::get() | |
- ->fetchColumn("SELECT MAX(priority) FROM priorities WHERE set_id = ?", | |
- array($courseSetId)); | |
+ $query = "SELECT MAX(`priority`) FROM `priorities` WHERE `set_id` = ?"; | |
+ return (int) DBManager::get()->fetchColumn($query, [$courseSetId]); | |
} | |
/** | |
* delete all priorities for one course | |
* | |
- * @param String course Id | |
+ * @param String $course_id | |
* @return int Number of affected rows, if any. | |
*/ | |
public static function unsetAllPrioritiesForCourse($course_id) | |
{ | |
- return DBManager::get() | |
- ->execute("DELETE FROM priorities WHERE seminar_id=?", | |
- array($course_id)); | |
+ $query = "DELETE FROM `priorities` WHERE `seminar_id` = ?"; | |
+ return DBManager::get()->execute($query, [$course_id]); | |
} | |
- | |
-} /* end of class AdmissionPriority */ | |
- | |
+} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment