Skip to content
Snippets Groups Projects
Commit ca923e5e authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

fix locking of courses when locking a semester, fixes #1329

Closes #1329

Merge request studip/studip!815
parent 4a3351ec
No related branches found
No related tags found
No related merge requests found
...@@ -390,7 +390,6 @@ class Admin_SemesterController extends AuthenticatedController ...@@ -390,7 +390,6 @@ class Admin_SemesterController extends AuthenticatedController
* @param string $lock_rule Lock rule to apply (might be null for none) * @param string $lock_rule Lock rule to apply (might be null for none)
* @param bool $lock_enroll Lock enrolment? * @param bool $lock_enroll Lock enrolment?
* @param bool $degrade_users Degrade users? * @param bool $degrade_users Degrade users?
* @return [type] [description]
*/ */
private function lockCourses(Semester $semester, $lock_rule, $degrade_users, $lock_enroll) private function lockCourses(Semester $semester, $lock_rule, $degrade_users, $lock_enroll)
{ {
...@@ -398,23 +397,32 @@ class Admin_SemesterController extends AuthenticatedController ...@@ -398,23 +397,32 @@ class Admin_SemesterController extends AuthenticatedController
// this // this
static $locked_courseset_id = null; static $locked_courseset_id = null;
// Get course ids
$query = "SELECT `course_id`
FROM `semester_courses`
JOIN `semester_data` USING (`semester_id`)
GROUP BY `course_id`
HAVING MAX(`beginn`) <= ?";
$course_ids = DBManager::get()->fetchFirst($query, [$semester->beginn]);
// Leave early if no courses are affected
if (count($course_ids) === 0) {
return;
}
// Hide courses and set lock rule // Hide courses and set lock rule
$query = "UPDATE `seminare` $query = "UPDATE `seminare`
SET `visible` = 0, `lock_rule` = ? SET `visible` = 0, `lock_rule` = ?
WHERE `Seminar_id` IN ( WHERE `Seminar_id` IN (?)";
SELECT course_id FROM semester_courses WHERE semester_courses.semester_id = ? DBManager::get()->execute($query, [$lock_rule, $course_ids]);
)";
DBManager::get()->execute($query, [$lock_rule, $semester->semester_id]);
// Degrade users // Degrade users
if ($degrade_users) { if ($degrade_users) {
$query = "UPDATE `seminar_user` $query = "UPDATE `seminar_user`
SET `status` = 'user' SET `status` = 'user'
WHERE `Seminar_id` IN ( WHERE `Seminar_id` IN (?)
SELECT course_id FROM semester_courses WHERE semester_courses.semester_id = ? AND `status` = 'autor'";
) DBManager::get()->execute($query, [$course_ids]);
AND `status` = 'autor'";
DBManager::get()->execute($query, [$semester->semester_id]);
} }
// Lock enrolment // Lock enrolment
......
...@@ -21,6 +21,9 @@ ...@@ -21,6 +21,9 @@
* @property string mkdate The database entry's creation date. * @property string mkdate The database entry's creation date.
* @property string chdate The database entry's last modification date. * @property string chdate The database entry's last modification date.
* *
* @property Semester $semester
* @property Course $course
*
* The combination of semester_id and course_id form the primary key. * The combination of semester_id and course_id form the primary key.
*/ */
class SemesterCourse extends SimpleORMap class SemesterCourse extends SimpleORMap
...@@ -30,7 +33,13 @@ class SemesterCourse extends SimpleORMap ...@@ -30,7 +33,13 @@ class SemesterCourse extends SimpleORMap
$config['db_table'] = 'semester_courses'; $config['db_table'] = 'semester_courses';
$config['belongs_to']['semester'] = [ $config['belongs_to']['semester'] = [
'class_name' => Semester::class 'class_name' => Semester::class,
'foreign_key' => 'semester_id',
];
$config['belongs_to']['course'] = [
'class_name' => Course::class,
'foreign_key' => 'course_id',
]; ];
parent::configure($config); parent::configure($config);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment