Skip to content

Instantly share code, notes, and snippets.

@tleilax
Last active February 20, 2019 14:01
Show Gist options
  • Save tleilax/87ac356369017ab439fa7eddbbcf5bd8 to your computer and use it in GitHub Desktop.
Save tleilax/87ac356369017ab439fa7eddbbcf5bd8 to your computer and use it in GitHub Desktop.
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