Skip to content

Commit

Permalink
don't duplicate courses in settings view and reuse prepared statement
Browse files Browse the repository at this point in the history
  • Loading branch information
tleilax committed Aug 12, 2015
1 parent 3882dc3 commit 1e37836
Showing 1 changed file with 38 additions and 33 deletions.
71 changes: 38 additions & 33 deletions controllers/show.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,44 +141,49 @@ protected function prepareCourses($ids)

protected function getCourses()
{
$query = "SELECT seminar_user.*, seminare.Name as course_name
FROM seminar_user
LEFT JOIN seminare USING (seminar_id)
WHERE user_id = :user_id
AND (seminare.start_time >= :beginn AND (seminare.start_time + seminare.duration_time) <= :ende)
AND seminar_id NOT IN (:ids)
ORDER BY seminare.Name";
$statement = DBManager::get()->prepare($query);
$statement->bindValue(':user_id', $GLOBALS['user']->id);

$semesters = array_reverse(SemesterData::GetSemesterArray());
$courses = array();
$_ids = array();
$courses = array();
$ids = array();

foreach ($semesters as $sem) {
$cm = DBManager::get()->fetchAll("SELECT seminar_user.*, seminare.Name as course_name
FROM seminar_user
LEFT JOIN seminare USING (seminar_id)
WHERE user_id = ? AND (seminare.start_time >= ? AND (seminare.start_time + seminare.duration_time) <= ?)
ORDER BY seminare.Name",
array($GLOBALS['user']->id, $sem['beginn'], $sem['ende']),
__CLASS__ . '::buildExisting');
if (!empty($cm)) {
array_walk($cm, function ($a) use (&$_ids) {
if (!in_array($a['Seminar_id'], $_ids)) {
$_ids[] = $a['Seminar_id'];
}
});
$courses[$sem['name']] = $cm;
$statement->bindValue(':beginn', $sem['beginn']);
$statement->bindValue(':ende', $sem['ende']);
$statement->bindValue(':ids', $ids ?: '');
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

if (!empty($rows)) {
$courses[$sem['name']] = $rows;

$ids = array_merge($ids, array_map(function ($row) {
return $row['Seminar_id'];
}, $rows));
}
}

if (!empty($ids)) {
$cm = DBManager::get()->fetchAll("SELECT seminar_user.*, seminare.Name as course_name
FROM seminar_user
LEFT JOIN seminare USING (seminar_id)
WHERE user_id = ? AND seminar_id NOT IN (?)
ORDER BY seminare.Name",
array($GLOBALS['user']->id, $_ids),
__CLASS__ . '::buildExisting');

if (!empty($cm)) {
array_walk($cm, function ($a) use (&$_ids) {
if (!in_array($a['Seminar_id'], $_ids)) {
$_ids[] = $a['Seminar_id'];
}
});
$courses['unbegrenzt laufende'] = $cm;
}
$query = "SELECT seminar_user.*, seminare.Name as course_name
FROM seminar_user
LEFT JOIN seminare USING (seminar_id)
WHERE user_id = :user_id AND seminar_id NOT IN (:ids)
ORDER BY seminare.Name";
$statement = DBManager::get()->prepare($query);
$statement->bindValue(':user_id', $GLOBALS['user']->id);
$statement->bindValue(':ids', $ids ?: '');
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

if (!empty($cm)) {
$courses['unbegrenzt laufende'] = $rows;
}

return $courses;
Expand Down

0 comments on commit 1e37836

Please sign in to comment.