Skip to content
Snippets Groups Projects
Commit 9315424f authored by Thomas Hackl's avatar Thomas Hackl
Browse files

Resolve "Anzahl der Veranstaltungen in der Unterebene beim VVZ passt nicht"

Closes #3852

Merge request studip/studip!2714
parent 62cbeb6f
No related branches found
No related tags found
No related merge requests found
......@@ -122,33 +122,28 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
*/
public function countCourses($semester_id = '', $semclass = 0, $with_children = false): int
{
if ($semester_id) {
$query = "SELECT COUNT(DISTINCT i.`seminar_id`)
FROM `seminar_inst` i
JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
LEFT JOIN `semester_courses` sc ON (i.`seminar_id` = sc.`course_id`)
WHERE i.`institut_id` IN (
SELECT DISTINCT `studip_object_id`
FROM `range_tree`
WHERE `item_id` IN (:ids)
) AND (
sc.`semester_id` = :semester
OR sc.`semester_id` IS NULL
)";
$query = "SELECT COUNT(DISTINCT i.`seminar_id`) FROM `seminar_inst` i";
if ($semester_id !== 'all') {
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
LEFT JOIN `semester_courses` sc ON (i.`seminar_id` = sc.`course_id`)
WHERE sc.`semester_id` = :semester";
$parameters = [
'ids' => $with_children ? $this->getDescendantIds() : [$this->id],
'semester' => $semester_id
];
} else {
$query = "SELECT COUNT(DISTINCT `seminar_id`)
FROM `seminar_inst` i
JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
WHERE `institut_id` IN (
SELECT DISTINCT `studip_object_id`
FROM `range_tree`
WHERE `item_id` IN (:ids)
)";
$parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)";
$parameters = [];
}
if ($with_children) {
$query .= " AND i.`institut_id` IN (
SELECT DISTINCT `studip_object_id` FROM `range_tree` WHERE `item_id` IN (:ids)
)";
$parameters['ids'] = array_merge([$this->id], $this->getDescendantIds());
} else {
$query .= " AND i.`institut_id` = :id";
$parameters['id'] = $this->studip_object_id;
}
if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
......@@ -179,48 +174,32 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
array $courses = []
): array
{
if ($semester_id !== 'all') {
$query = "SELECT DISTINCT s.*
FROM `seminare` s
JOIN `seminar_inst` i ON (i.`seminar_id` = s.`Seminar_id`)
LEFT JOIN `semester_courses` sem ON (sem.`course_id` = s.`Seminar_id`)
WHERE i.`institut_id` IN (
SELECT DISTINCT `studip_object_id`
FROM `range_tree`
WHERE `item_id` IN (:ids)
) AND (
sem.`semester_id` = :semester
OR sem.`semester_id` IS NULL
)";
$query = "SELECT DISTINCT s.* FROM `seminar_inst` i";
if ($semester_id !== 'all') {
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
LEFT JOIN `semester_courses` sc ON (i.`seminar_id` = sc.`course_id`)
WHERE sc.`semester_id` = :semester";
$parameters = [
'ids' => $with_children ? $this->getDescendantIds() : [$this->id],
'semester' => $semester_id
];
} else {
$query = "SELECT DISTINCT s.*
FROM `seminare` s
JOIN `seminar_inst` i ON (i.`seminar_id` = s.`Seminar_id`)
WHERE i.`institut_id` IN (
SELECT DISTINCT `studip_object_id`
FROM `range_tree`
WHERE `item_id` IN (:ids)
)";
$parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)";
$parameters = [];
}
if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
$query .= " AND s.`visible` = 1";
}
if ($searchterm) {
$query .= " AND s.`Name` LIKE :searchterm";
$parameters['searchterm'] = '%' . trim($searchterm) . '%';
if ($with_children) {
$query .= " AND i.`institut_id` IN (
SELECT DISTINCT `studip_object_id` FROM `range_tree` WHERE `item_id` IN (:ids)
)";
$parameters['ids'] = array_merge([$this->id], $this->getDescendantIds());
} else {
$query .= " AND i.`institut_id` = :id";
$parameters['id'] = $this->studip_object_id;
}
if ($courses) {
$query .= " AND s.`Seminar_id` IN (:courses)";
$parameters['courses'] = $courses;
if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
$query .= " AND s.`visible` = 1";
}
if ($semclass !== 0) {
......@@ -236,6 +215,16 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
);
}
if ($searchterm) {
$query .= " AND s.`Name` LIKE :searchterm";
$parameters['searchterm'] = '%' . trim($searchterm) . '%';
}
if ($courses) {
$query .= " AND t.`seminar_id` IN (:courses)";
$parameters['courses'] = $courses;
}
if (Config::get()->IMPORTANT_SEMNUMBER) {
$query .= " ORDER BY s.`start_time`, s.`VeranstaltungsNummer`, s.`Name`";
} else {
......
......@@ -481,28 +481,32 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
/**
* @see StudipTreeNode::countCourses()
*/
public function countCourses($semester_id = 'all', $semclass = 0, $with_children = false) :int
public function countCourses(
$semester_id = 'all',
$semclass = 0,
$with_children = false
) :int
{
$query = "SELECT COUNT(DISTINCT t.`seminar_id`) FROM `seminar_sem_tree` t";
if ($semester_id !== 'all') {
$query = "SELECT COUNT(DISTINCT t.`seminar_id`)
FROM `seminar_sem_tree` t
JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
LEFT JOIN `semester_courses` sc ON (t.`seminar_id` = sc.`course_id`)
WHERE t.`sem_tree_id` IN (:ids)
AND (
sc.`semester_id` = :semester
OR sc.`semester_id` IS NULL
)";
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
LEFT JOIN `semester_courses` sc ON (t.`seminar_id` = sc.`course_id`)
WHERE sc.`semester_id` = :semester";
$parameters = [
'ids' => $with_children ? array_merge([$this->id], $this->getDescendantIds()) : [$this->id],
'semester' => $semester_id
];
} else {
$query = "SELECT COUNT(DISTINCT t.`seminar_id`)
FROM `seminar_sem_tree` t
JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
WHERE `sem_tree_id` IN (:ids)";
$parameters = ['ids' => $with_children ? array_merge([$this->id], $this->getDescendantIds()) : [$this->id]];
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)";
$parameters = [];
}
if ($with_children) {
$query .= " AND t.`sem_tree_id` IN (:ids)";
$parameters['ids'] = array_merge([$this->id], $this->getDescendantIds());
} else {
$query .= " AND t.`sem_tree_id` = :id";
$parameters['id'] = $this->id;
}
if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
......@@ -533,26 +537,26 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
array $courses = []
): array
{
$query = "SELECT DISTINCT s.* FROM `seminar_sem_tree` t";
if ($semester_id !== 'all') {
$query = "SELECT DISTINCT s.*
FROM `seminare` s
JOIN `seminar_sem_tree` t ON (t.`seminar_id` = s.`Seminar_id`)
LEFT JOIN `semester_courses` sem ON (sem.`course_id` = s.`Seminar_id`)
WHERE t.`sem_tree_id` IN (:ids)
AND (
sem.`semester_id` = :semester
OR sem.`semester_id` IS NULL
)";
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
LEFT JOIN `semester_courses` sc ON (t.`seminar_id` = sc.`course_id`)
WHERE sc.`semester_id` = :semester";
$parameters = [
'ids' => $with_children ? $this->getDescendantIds() : [$this->id],
'semester' => $semester_id
];
} else {
$query = "SELECT DISTINCT s.*
FROM `seminare` s
JOIN `seminar_sem_tree` t ON (t.`seminar_id` = s.`Seminar_id`)
WHERE t.`sem_tree_id` IN (:ids)";
$parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
$query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)";
$parameters = [];
}
if ($with_children) {
$query .= " AND t.`sem_tree_id` IN (:ids)";
$parameters['ids'] = array_merge([$this->id], $this->getDescendantIds());
} else {
$query .= " AND t.`sem_tree_id` = :id";
$parameters['id'] = $this->id;
}
if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
......
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