Skip to content
Snippets Groups Projects
Commit a4916b8c authored by André Noack's avatar André Noack Committed by Jan-Hendrik Willms
Browse files

Resolve #2511 ""Rundmail schreiben" erreicht keine unsichtbaren Teilnehmer mehr"

Closes #2511

Merge request studip/studip!1698
parent 5c0b2c18
No related branches found
No related tags found
No related merge requests found
...@@ -1817,10 +1817,11 @@ class Course_MembersController extends AuthenticatedController ...@@ -1817,10 +1817,11 @@ class Course_MembersController extends AuthenticatedController
} }
//Calculate the amount of recipients for each group: //Calculate the amount of recipients for each group:
$this->user_count = CourseMember::countByCourseAndStatus($this->course_id, 'user'); $visibility_constraint = !$this->is_tutor ? " AND visible <> 'no'" : "";
$this->autor_count = CourseMember::countByCourseAndStatus($this->course_id, 'autor'); $this->user_count = CourseMember::countBySql("seminar_id=? AND status=?" . $visibility_constraint, [$this->course_id, 'user']);
$this->tutor_count = CourseMember::countByCourseAndStatus($this->course_id, 'tutor'); $this->autor_count = CourseMember::countBySql("seminar_id=? AND status=?" . $visibility_constraint, [$this->course_id, 'autor']);
$this->dozent_count = CourseMember::countByCourseAndStatus($this->course_id, 'dozent'); $this->tutor_count = CourseMember::countBySql("seminar_id=? AND status=?" . $visibility_constraint, [$this->course_id, 'tutor']);
$this->dozent_count = CourseMember::countBySql("seminar_id=? AND status=?" . $visibility_constraint, [$this->course_id, 'dozent']);
//Use the correct names for thte four status groups: //Use the correct names for thte four status groups:
$sem = Seminar::GetInstance($this->course_id); $sem = Seminar::GetInstance($this->course_id);
...@@ -1844,6 +1845,10 @@ class Course_MembersController extends AuthenticatedController ...@@ -1844,6 +1845,10 @@ class Course_MembersController extends AuthenticatedController
'course_id' => $this->course_id 'course_id' => $this->course_id
] ]
); );
$cs = CourseSet::getSetForCourse($this->course_id);
if (is_object($cs) && !$cs->hasAlgorithmRun()) {
$this->claiming_count = count(AdmissionPriority::getPrioritiesByCourse($cs->getId(), $this->course_id));
}
} }
$this->default_selected_groups = ['dozent', 'tutor', 'autor', 'user']; $this->default_selected_groups = ['dozent', 'tutor', 'autor', 'user'];
$this->all_available_groups = $this->default_selected_groups; $this->all_available_groups = $this->default_selected_groups;
...@@ -1855,6 +1860,9 @@ class Course_MembersController extends AuthenticatedController ...@@ -1855,6 +1860,9 @@ class Course_MembersController extends AuthenticatedController
if ($this->awaiting_count) { if ($this->awaiting_count) {
$this->all_available_groups[] = 'awaiting'; $this->all_available_groups[] = 'awaiting';
} }
if ($this->claiming_count) {
$this->all_available_groups[] = 'claiming';
}
} }
if (Request::submitted('write')) { if (Request::submitted('write')) {
CSRFProtection::verifyUnsafeRequest(); CSRFProtection::verifyUnsafeRequest();
...@@ -1867,27 +1875,6 @@ class Course_MembersController extends AuthenticatedController ...@@ -1867,27 +1875,6 @@ class Course_MembersController extends AuthenticatedController
$filtered_groups[] = $group; $filtered_groups[] = $group;
} }
} }
if ($filtered_groups == $this->default_selected_groups) {
$this->redirect(URLHelper::getURL(
'dispatch.php/messages/write',
[
'course_id' => $this->course_id,
'default_subject' => $this->default_subject,
'filter' => 'all',
'emailrequest' => 1
]
));
} elseif ($filtered_groups == $this->all_available_groups) {
$this->redirect(URLHelper::getURL(
'dispatch.php/messages/write',
[
'course_id' => $this->course_id,
'default_subject' => $this->default_subject,
'filter' => 'really_all',
'emailrequest' => 1
]
));
} else {
//Do custom filtering. //Do custom filtering.
$filters = []; $filters = [];
$who_param = []; $who_param = [];
...@@ -1897,6 +1884,8 @@ class Course_MembersController extends AuthenticatedController ...@@ -1897,6 +1884,8 @@ class Course_MembersController extends AuthenticatedController
$filters[] = 'awaiting'; $filters[] = 'awaiting';
} elseif ($group === 'accepted') { } elseif ($group === 'accepted') {
$filters[] = 'prelim'; $filters[] = 'prelim';
} elseif ($group === 'claiming') {
$filters[] = 'claiming';
} elseif ($group === 'user') { } elseif ($group === 'user') {
$filters[] = 'all'; $filters[] = 'all';
$who_param[] = 'user'; $who_param[] = 'user';
...@@ -1933,7 +1922,7 @@ class Course_MembersController extends AuthenticatedController ...@@ -1933,7 +1922,7 @@ class Course_MembersController extends AuthenticatedController
'dispatch.php/messages/write', 'dispatch.php/messages/write',
$url_params $url_params
)); ));
}
} }
} }
public function checkUserVisibility() public function checkUserVisibility()
......
...@@ -291,13 +291,17 @@ class MessagesController extends AuthenticatedController { ...@@ -291,13 +291,17 @@ class MessagesController extends AuthenticatedController {
//check if the message shall be sent to all (or some) members of a course: //check if the message shall be sent to all (or some) members of a course:
$filters = explode(',', Request::get('filter', '')); $filters = explode(',', Request::get('filter', ''));
if ($filters && Request::option('course_id')) { $course = Course::find(Request::option('course_id'));
if ($filters && $course) {
$additional = ''; $additional = '';
$course = new Course(Request::option('course_id')); if ($GLOBALS['perm']->have_studip_perm('tutor', $course->id)) {
$allow_tutor_filters = false;
if ($GLOBALS['perm']->have_studip_perm('tutor', $course->id) || $course->getSemClass()['studygroup_mode'] || CourseConfig::get($course->id)->COURSE_STUDENT_MAILING) {
$allow_tutor_filters = true; $allow_tutor_filters = true;
} elseif ($GLOBALS['perm']->have_studip_perm('user', $course->id)
&& ($course->getSemClass()['studygroup_mode'] || CourseConfig::get($course->id)->COURSE_STUDENT_MAILING)) {
$additional = " AND seminar_user.visible != 'no'"; $additional = " AND seminar_user.visible != 'no'";
$allow_tutor_filters = false;
} else {
throw new AccessDeniedException();
} }
$this->default_message->receivers = []; $this->default_message->receivers = [];
$all_recipients = []; $all_recipients = [];
...@@ -307,14 +311,7 @@ class MessagesController extends AuthenticatedController { ...@@ -307,14 +311,7 @@ class MessagesController extends AuthenticatedController {
if (Request::get('who')) { if (Request::get('who')) {
$params['status'] = explode(',', Request::get('who', '')); $params['status'] = explode(',', Request::get('who', ''));
} }
if ($filter === 'all' || $filter === 'send_sms_to_all') {
if ($filter === 'send_sms_to_all' && $allow_tutor_filters) {
$query = "SELECT user_id, 'rec' AS snd_rec
FROM seminar_user
JOIN auth_user_md5 USING (user_id)
WHERE Seminar_id = :course_id AND status IN ( :status ) {$additional}
ORDER BY Nachname, Vorname";
} elseif ($filter === 'all') {
if ($params['status']) { if ($params['status']) {
$additional .= ' AND seminar_user.status IN ( :status )'; $additional .= ' AND seminar_user.status IN ( :status )';
} }
...@@ -323,12 +320,6 @@ class MessagesController extends AuthenticatedController { ...@@ -323,12 +320,6 @@ class MessagesController extends AuthenticatedController {
JOIN auth_user_md5 USING (user_id) JOIN auth_user_md5 USING (user_id)
WHERE Seminar_id = :course_id {$additional} WHERE Seminar_id = :course_id {$additional}
ORDER BY Nachname, Vorname"; ORDER BY Nachname, Vorname";
} elseif ($filter === 'really_all' && $allow_tutor_filters) {
$query = "SELECT user_id, 'rec' as snd_rec
FROM seminar_user
WHERE seminar_id = :course_id
UNION SELECT user_id, 'rec' as snd_rec FROM admission_seminar_user WHERE seminar_id = :course_id
UNION SELECT user_id, 'rec' as snd_rec FROM priorities WHERE seminar_id = :course_id";
} elseif ($filter === 'prelim' && $allow_tutor_filters) { } elseif ($filter === 'prelim' && $allow_tutor_filters) {
$query = "SELECT user_id, 'rec' AS snd_rec $query = "SELECT user_id, 'rec' AS snd_rec
FROM admission_seminar_user FROM admission_seminar_user
...@@ -341,13 +332,6 @@ class MessagesController extends AuthenticatedController { ...@@ -341,13 +332,6 @@ class MessagesController extends AuthenticatedController {
JOIN auth_user_md5 USING (user_id) JOIN auth_user_md5 USING (user_id)
WHERE Seminar_id = :course_id AND status = 'awaiting' WHERE Seminar_id = :course_id AND status = 'awaiting'
ORDER BY Nachname, Vorname"; ORDER BY Nachname, Vorname";
} elseif ($filter === 'inst_status') {
$query = "SELECT user_id, 'rec' AS snd_rec
FROM user_inst
JOIN auth_user_md5 USING (user_id)
WHERE Institut_id = :course_id AND inst_perms IN ( :status )
{$additional}
ORDER BY Nachname, Vorname";
} elseif ($filter === 'not_grouped' && $allow_tutor_filters) { } elseif ($filter === 'not_grouped' && $allow_tutor_filters) {
$query = "SELECT seminar_user.user_id, 'rec' as snd_rec $query = "SELECT seminar_user.user_id, 'rec' as snd_rec
FROM seminar_user FROM seminar_user
...@@ -363,18 +347,9 @@ class MessagesController extends AuthenticatedController { ...@@ -363,18 +347,9 @@ class MessagesController extends AuthenticatedController {
$cs = CourseSet::getSetForCourse($course->id); $cs = CourseSet::getSetForCourse($course->id);
if (is_object($cs) && !$cs->hasAlgorithmRun()) { if (is_object($cs) && !$cs->hasAlgorithmRun()) {
foreach (AdmissionPriority::getPrioritiesByCourse($cs->getId(), $course->id) as $user_id => $p) { foreach (AdmissionPriority::getPrioritiesByCourse($cs->getId(), $course->id) as $user_id => $p) {
$all_recipients = array_merge( $all_recipients[] = MessageUser::build(['user_id' => $user_id, 'snd_rec' => 'rec']);
$all_recipients,
MessageUser::build(['user_id' => $user_id, 'snd_rec' => 'rec'])
);
} }
} }
} else {
$query = "SELECT user_id, 'rec' AS snd_rec
FROM seminar_user
JOIN auth_user_md5 USING (user_id)
WHERE Seminar_id = :course_id AND seminar_user.visible != 'no'
ORDER BY Nachname, Vorname";
} }
if ($query) { if ($query) {
$all_recipients = array_merge( $all_recipients = array_merge(
......
...@@ -95,6 +95,21 @@ ...@@ -95,6 +95,21 @@
</em> </em>
</label> </label>
<? endif ?> <? endif ?>
<? if (in_array('claiming', $all_available_groups)) : ?>
<label>
<input type="checkbox" name="selected_groups[]" value="claiming"
<? if (!$claiming_count): echo 'disabled'; ?>
<? elseif (in_array('claiming', $default_selected_groups)): echo 'checked'; ?>
<? endif; ?>>
<?= _('Alle Personen auf der Losliste der Veranstaltung') ?>
<em>
(<?= sprintf(
ngettext('%u Person', '%u Personen', $claiming_count),
$claiming_count
) ?>)
</em>
</label>
<? endif ?>
</fieldset> </fieldset>
<div data-dialog-button> <div data-dialog-button>
<?= \Studip\Button::create(_('Rundmail schreiben'), 'write') ?> <?= \Studip\Button::create(_('Rundmail schreiben'), 'write') ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment