Skip to content
Snippets Groups Projects
Commit 00a3eede authored by André Noack's avatar André Noack Committed by David Siegfried
Browse files

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

Closes #2511

Merge request studip/studip!1698
parent 9575bfa6
No related branches found
No related tags found
No related merge requests found
......@@ -1817,10 +1817,11 @@ class Course_MembersController extends AuthenticatedController
}
//Calculate the amount of recipients for each group:
$this->user_count = CourseMember::countByCourseAndStatus($this->course_id, 'user');
$this->autor_count = CourseMember::countByCourseAndStatus($this->course_id, 'autor');
$this->tutor_count = CourseMember::countByCourseAndStatus($this->course_id, 'tutor');
$this->dozent_count = CourseMember::countByCourseAndStatus($this->course_id, 'dozent');
$visibility_constraint = !$this->is_tutor ? " AND visible <> 'no'" : "";
$this->user_count = CourseMember::countBySql("seminar_id=? AND status=?" . $visibility_constraint, [$this->course_id, 'user']);
$this->autor_count = CourseMember::countBySql("seminar_id=? AND status=?" . $visibility_constraint, [$this->course_id, 'autor']);
$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:
$sem = Seminar::GetInstance($this->course_id);
......@@ -1844,6 +1845,10 @@ class Course_MembersController extends AuthenticatedController
'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->all_available_groups = $this->default_selected_groups;
......@@ -1855,6 +1860,9 @@ class Course_MembersController extends AuthenticatedController
if ($this->awaiting_count) {
$this->all_available_groups[] = 'awaiting';
}
if ($this->claiming_count) {
$this->all_available_groups[] = 'claiming';
}
}
if (Request::submitted('write')) {
CSRFProtection::verifyUnsafeRequest();
......@@ -1867,73 +1875,54 @@ class Course_MembersController extends AuthenticatedController
$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.
$filters = [];
$who_param = [];
foreach ($filtered_groups as $group) {
if ($group === 'awaiting') {
$filters[] = 'awaiting';
} elseif ($group === 'accepted') {
$filters[] = 'prelim';
} elseif ($group === 'user') {
$filters[] = 'all';
$who_param[] = 'user';
} elseif ($group === 'autor') {
$filters[] = 'all';
$who_param[] = 'autor';
} elseif ($group === 'tutor') {
$filters[] = 'all';
$who_param[] = 'tutor';
} elseif ($group === 'dozent') {
$filters[] = 'all';
$who_param[] = 'dozent';
}
}
$filters = array_unique($filters);
if (!$filters) {
PageLayout::postError(
_('Es wurde keine Gruppe ausgewählt!')
);
return;
}
$url_params = [
'course_id' => $this->course_id,
'default_subject' => $this->default_subject,
'filter' => implode(',', array_unique($filters)),
'emailrequest' => 1
];
if ($who_param) {
$url_params['who'] = implode(',', $who_param);
//Do custom filtering.
$filters = [];
$who_param = [];
foreach ($filtered_groups as $group) {
if ($group === 'awaiting') {
$filters[] = 'awaiting';
} elseif ($group === 'accepted') {
$filters[] = 'prelim';
} elseif ($group === 'claiming') {
$filters[] = 'claiming';
} elseif ($group === 'user') {
$filters[] = 'all';
$who_param[] = 'user';
} elseif ($group === 'autor') {
$filters[] = 'all';
$who_param[] = 'autor';
} elseif ($group === 'tutor') {
$filters[] = 'all';
$who_param[] = 'tutor';
} elseif ($group === 'dozent') {
$filters[] = 'all';
$who_param[] = 'dozent';
}
}
$filters = array_unique($filters);
if (!$filters) {
PageLayout::postError(
_('Es wurde keine Gruppe ausgewählt!')
);
return;
}
$this->redirect(URLHelper::getURL(
'dispatch.php/messages/write',
$url_params
));
$url_params = [
'course_id' => $this->course_id,
'default_subject' => $this->default_subject,
'filter' => implode(',', array_unique($filters)),
'emailrequest' => 1
];
if ($who_param) {
$url_params['who'] = implode(',', $who_param);
}
$this->redirect(URLHelper::getURL(
'dispatch.php/messages/write',
$url_params
));
}
}
public function checkUserVisibility()
......
......@@ -291,13 +291,17 @@ class MessagesController extends AuthenticatedController {
//check if the message shall be sent to all (or some) members of a course:
$filters = explode(',', Request::get('filter', ''));
if ($filters && Request::option('course_id')) {
$course = Course::find(Request::option('course_id'));
if ($filters && $course) {
$additional = '';
$course = new Course(Request::option('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) {
if ($GLOBALS['perm']->have_studip_perm('tutor', $course->id)) {
$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'";
$allow_tutor_filters = false;
} else {
throw new AccessDeniedException();
}
$this->default_message->receivers = [];
$all_recipients = [];
......@@ -307,14 +311,7 @@ class MessagesController extends AuthenticatedController {
if (Request::get('who')) {
$params['status'] = explode(',', Request::get('who', ''));
}
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 ($filter === 'all' || $filter === 'send_sms_to_all') {
if ($params['status']) {
$additional .= ' AND seminar_user.status IN ( :status )';
}
......@@ -323,12 +320,6 @@ class MessagesController extends AuthenticatedController {
JOIN auth_user_md5 USING (user_id)
WHERE Seminar_id = :course_id {$additional}
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) {
$query = "SELECT user_id, 'rec' AS snd_rec
FROM admission_seminar_user
......@@ -341,13 +332,6 @@ class MessagesController extends AuthenticatedController {
JOIN auth_user_md5 USING (user_id)
WHERE Seminar_id = :course_id AND status = 'awaiting'
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) {
$query = "SELECT seminar_user.user_id, 'rec' as snd_rec
FROM seminar_user
......@@ -363,18 +347,9 @@ class MessagesController extends AuthenticatedController {
$cs = CourseSet::getSetForCourse($course->id);
if (is_object($cs) && !$cs->hasAlgorithmRun()) {
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) {
$all_recipients = array_merge(
......
......@@ -95,6 +95,21 @@
</em>
</label>
<? 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>
<div data-dialog-button>
<?= \Studip\Button::create(_('Rundmail schreiben'), 'write') ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment