diff options
| author | David Siegfried <david.siegfried@uni-vechta.de> | 2022-07-04 10:42:23 +0000 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2022-07-04 10:42:23 +0000 |
| commit | ba9ab143d05e7e574c3bce7ef7249cd53480b7f4 (patch) | |
| tree | c1262172c19308d9de15ca4f2320d72d6c0950b3 /lib | |
| parent | 0b867f0e61bfdcacd3339bcfadaf585f7bbba716 (diff) | |
count users correctly and rework code, closes #913
Closes #913
Merge request studip/studip!770
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/models/Degree.class.php | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/lib/models/Degree.class.php b/lib/models/Degree.class.php index 04c4da6..c5b83c5 100644 --- a/lib/models/Degree.class.php +++ b/lib/models/Degree.class.php @@ -35,16 +35,27 @@ class Degree extends SimpleORMap ]; $config['additional_fields']['count_user']['get'] = 'countUser'; - + $config['registered_callbacks']['before_store'][] = "cbUpdateAuthorId"; parent::configure($config); } public function countUser() { - $stmt = DBManager::get()->prepare('SELECT COUNT(DISTINCT user_id) ' - . 'FROM user_studiengang WHERE abschluss_id = ?'); - $stmt->execute([$this->id]); - return $stmt->fetchColumn(); + $sql = 'SELECT COUNT(DISTINCT `user_id`) FROM `user_studiengang`'; + $parameters = [':degree_id' => $this->id]; + if (!$GLOBALS['perm']->have_perm('root')) { + $inst_ids = SimpleCollection::createFromArray(Institute::findBySQL('Institut_id IN (SELECT institut_id FROM roles_user WHERE userid = :user_id) + OR fakultaets_id IN (SELECT institut_id FROM roles_user WHERE userid = :user_id)', + [':user_id' => $GLOBALS['user']->user_id]))->pluck('institut_id'); + + $sql .= 'JOIN `mvv_fach_inst` as `fach_inst` ON (`user_studiengang`.`fach_id` = `fach_inst`.`fach_id`) + WHERE `user_studiengang`.`abschluss_id` = :degree_id AND `fach_inst`.`institut_id` IN (:inst_ids)'; + $parameters[':inst_ids'] = $inst_ids; + } else { + $sql .= ' WHERE `user_studiengang`.`abschluss_id` = :degree_id'; + } + + return DBManager::get()->fetchColumn($sql, $parameters); } public function countUserByStudycourse($studycourse_id) @@ -56,7 +67,7 @@ class Degree extends SimpleORMap return $stmt->fetchColumn(); } - public function store() + public function cbUpdateAuthorId() { if ($this->isNew() || $this->isDirty()) { $this->editor_id = $GLOBALS['user']->id; @@ -64,8 +75,5 @@ class Degree extends SimpleORMap $this->author_id = $GLOBALS['user']->id; } } - - return parent::store(); } - } |
