Skip to content

Commit

Permalink
Merge branch 'MDL-46654-master' of git://github.com/andrewnicols/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
David Monllao committed Aug 23, 2016
2 parents 0969f0d + 8381ac5 commit 86d6ff2
Show file tree
Hide file tree
Showing 3 changed files with 209 additions and 85 deletions.
3 changes: 2 additions & 1 deletion mod/forum/classes/subscriptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,8 @@ public static function subscription_disabled($forum) {
* @return bool
*/
public static function is_subscribable($forum) {
return (!\mod_forum\subscriptions::is_forcesubscribed($forum) &&
return (isloggedin() && !isguestuser() &&
!\mod_forum\subscriptions::is_forcesubscribed($forum) &&
!\mod_forum\subscriptions::subscription_disabled($forum));
}

Expand Down
189 changes: 105 additions & 84 deletions mod/forum/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@
$id = optional_param('id', 0, PARAM_INT); // Course id
$subscribe = optional_param('subscribe', null, PARAM_INT); // Subscribe/Unsubscribe all forums

$url = new moodle_url('/mod/forum/index.php', array('id'=>$id));
$url = new moodle_url('/mod/forum/index.php', array('id' => $id));
if ($subscribe !== null) {
require_sesskey();
$url->param('subscribe', $subscribe);
}
$PAGE->set_url($url);

if ($id) {
if (! $course = $DB->get_record('course', array('id' => $id))) {
if (!$course = $DB->get_record('course', array('id' => $id))) {
print_error('invalidcourseid');
}
} else {
Expand Down Expand Up @@ -77,18 +77,6 @@

$searchform = forum_search_form($course);

// Retrieve the list of forum digest options for later.
$digestoptions = forum_get_user_digest_options();
$digestoptions_selector = new single_select(new moodle_url('/mod/forum/maildigest.php',
array(
'backtoindex' => 1,
)),
'maildigest',
$digestoptions,
null,
'');
$digestoptions_selector->method = 'post';

// Start of the table for General Forums

$generaltable = new html_table();
Expand All @@ -108,22 +96,6 @@
// Fill the subscription cache for this course and user combination.
\mod_forum\subscriptions::fill_subscription_cache_for_course($course->id, $USER->id);

$can_subscribe = is_enrolled($coursecontext);
if ($can_subscribe) {
$generaltable->head[] = $strsubscribed;
$generaltable->align[] = 'center';

$generaltable->head[] = $stremaildigest . ' ' . $OUTPUT->help_icon('emaildigesttype', 'mod_forum');
$generaltable->align[] = 'center';
}

if ($show_rss = (($can_subscribe || $course->id == SITEID) &&
isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) &&
$CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) {
$generaltable->head[] = $strrss;
$generaltable->align[] = 'center';
}

$usesections = course_format_uses_sections($course->format);

$table = new html_table();
Expand All @@ -143,23 +115,33 @@
$generalforums = array();
$learningforums = array();
$modinfo = get_fast_modinfo($course);
$showsubscriptioncolumns = false;

foreach ($modinfo->get_instances_of('forum') as $forumid=>$cm) {
foreach ($modinfo->get_instances_of('forum') as $forumid => $cm) {
if (!$cm->uservisible or !isset($forums[$forumid])) {
continue;
}

$forum = $forums[$forumid];

if (!$context = context_module::instance($cm->id, IGNORE_MISSING)) {
continue; // Shouldn't happen
// Shouldn't happen.
continue;
}

if (!has_capability('mod/forum:viewdiscussion', $context)) {
// User can't view this one - skip it.
continue;
}

// fill two type array - order in modinfo is the same as in course
// Determine whether subscription options should be displayed.
$forum->cansubscribe = mod_forum\subscriptions::is_subscribable($forum);
$forum->cansubscribe = $forum->cansubscribe || has_capability('mod/forum:managesubscriptions', $context);
$forum->issubscribed = mod_forum\subscriptions::is_subscribed($USER->id, $forum, null, $cm);

$showsubscriptioncolumns = $showsubscriptioncolumns || $forum->issubscribed || $forum->cansubscribe;

// Fill two type array - order in modinfo is the same as in course.
if ($forum->type == 'news' or $forum->type == 'social') {
$generalforums[$forum->id] = $forum;

Expand All @@ -171,9 +153,62 @@
}
}

if ($showsubscriptioncolumns) {
// The user can subscribe to at least one forum.
$generaltable->head[] = $strsubscribed;
$generaltable->align[] = 'center';

$generaltable->head[] = $stremaildigest . ' ' . $OUTPUT->help_icon('emaildigesttype', 'mod_forum');
$generaltable->align[] = 'center';

// Retrieve the list of forum digest options for later.
$digestoptions = forum_get_user_digest_options();
$digestoptionsselector = new single_select(new moodle_url('/mod/forum/maildigest.php',
array(
'backtoindex' => 1,
)),
'maildigest',
$digestoptions,
null,
'');
$digestoptionsselector->method = 'post';

$forumsubscriptionhelper = function($forum, $row, $context) use ($digestoptionsselector, $stryes, $strno) {
global $OUTPUT;

$row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes,
'unsubscribed' => $strno, 'forcesubscribed' => $stryes,
'cantsubscribe' => '-'), false, false, true);

$digestoptionsselector->url->param('id', $forum->id);
if ($forum->maildigest === null) {
$digestoptionsselector->selected = -1;
} else {
$digestoptionsselector->selected = $forum->maildigest;
}

if ($forum->cansubscribe || $forum->issubscribed) {
$row[] = $OUTPUT->render($digestoptionsselector);
} else {
// This user can subscribe to some forums. Add the empty fields.
$row[] = '';
}

return $row;
};
}

if ($show_rss = (($showsubscriptioncolumns || $course->id == SITEID) &&
isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) &&
$CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) {
$generaltable->head[] = $strrss;
$generaltable->align[] = 'center';
}


// Do course wide subscribe/unsubscribe if requested
if (!is_null($subscribe)) {
if (isguestuser() or !$can_subscribe) {
if (isguestuser() or !$showsubscriptioncolumns) {
// There should not be any links leading to this place, just redirect.
redirect(
new moodle_url('/mod/forum/index.php', array('id' => $id)),
Expand All @@ -183,7 +218,7 @@
);
}
// Can proceed now, the user is not guest and is enrolled
foreach ($modinfo->get_instances_of('forum') as $forumid=>$cm) {
foreach ($modinfo->get_instances_of('forum') as $forumid => $cm) {
$forum = $forums[$forumid];
$modcontext = context_module::instance($cm->id);
$cansub = false;
Expand Down Expand Up @@ -225,9 +260,8 @@
}
}

/// First, let's process the general forums and build up a display

if ($generalforums) {
// Process general forums.
foreach ($generalforums as $forum) {
$cm = $modinfo->instances['forum'][$forum->id];
$context = context_module::instance($cm->id);
Expand Down Expand Up @@ -260,9 +294,9 @@
'sesskey' => sesskey(),
));
if (!isset($untracked[$forum->id])) {
$trackedlink = $OUTPUT->single_button($aurl, $stryes, 'post', array('title'=>$strnotrackforum));
$trackedlink = $OUTPUT->single_button($aurl, $stryes, 'post', array('title' => $strnotrackforum));
} else {
$trackedlink = $OUTPUT->single_button($aurl, $strno, 'post', array('title'=>$strtrackforum));
$trackedlink = $OUTPUT->single_button($aurl, $strno, 'post', array('title' => $strtrackforum));
}
}
}
Expand All @@ -285,21 +319,11 @@
$row[] = $trackedlink; // Tracking.
}

if ($can_subscribe) {
$row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes,
'unsubscribed' => $strno, 'forcesubscribed' => $stryes,
'cantsubscribe' => '-'), false, false, true);

$digestoptions_selector->url->param('id', $forum->id);
if ($forum->maildigest === null) {
$digestoptions_selector->selected = -1;
} else {
$digestoptions_selector->selected = $forum->maildigest;
}
$row[] = $OUTPUT->render($digestoptions_selector);
if ($showsubscriptioncolumns) {
$row = $forumsubscriptionhelper($forum, $row, $context);
}

//If this forum has RSS activated, calculate it
// If this forum has RSS activated, calculate it.
if ($show_rss) {
if ($forum->rsstype and $forum->rssarticles) {
//Calculate the tooltip text
Expand Down Expand Up @@ -339,23 +363,22 @@
$learningtable->align[] = 'center';
}

if ($can_subscribe) {
if ($showsubscriptioncolumns) {
$learningtable->head[] = $strsubscribed;
$learningtable->align[] = 'center';

$learningtable->head[] = $stremaildigest . ' ' . $OUTPUT->help_icon('emaildigesttype', 'mod_forum');
$learningtable->align[] = 'center';
}

if ($show_rss = (($can_subscribe || $course->id == SITEID) &&
if ($show_rss = (($showsubscriptioncolumns || $course->id == SITEID) &&
isset($CFG->enablerssfeeds) && isset($CFG->forum_enablerssfeeds) &&
$CFG->enablerssfeeds && $CFG->forum_enablerssfeeds)) {
$learningtable->head[] = $strrss;
$learningtable->align[] = 'center';
}

/// Now let's process the learning forums

// Now let's process the learning forums.
if ($course->id != SITEID) { // Only real courses have learning forums
// 'format_.'$course->format only applicable when not SITEID (format_site is not a format)
$strsectionname = get_string('sectionname', 'format_'.$course->format);
Expand Down Expand Up @@ -393,11 +416,11 @@
} else if ($forum->trackingtype === FORUM_TRACKING_OFF || ($USER->trackforums == 0)) {
$trackedlink = '-';
} else {
$aurl = new moodle_url('/mod/forum/settracking.php', array('id'=>$forum->id));
$aurl = new moodle_url('/mod/forum/settracking.php', array('id' => $forum->id));
if (!isset($untracked[$forum->id])) {
$trackedlink = $OUTPUT->single_button($aurl, $stryes, 'post', array('title'=>$strnotrackforum));
$trackedlink = $OUTPUT->single_button($aurl, $stryes, 'post', array('title' => $strnotrackforum));
} else {
$trackedlink = $OUTPUT->single_button($aurl, $strno, 'post', array('title'=>$strtrackforum));
$trackedlink = $OUTPUT->single_button($aurl, $strno, 'post', array('title' => $strtrackforum));
}
}
}
Expand Down Expand Up @@ -431,18 +454,8 @@
$row[] = $trackedlink; // Tracking.
}

if ($can_subscribe) {
$row[] = forum_get_subscribe_link($forum, $context, array('subscribed' => $stryes,
'unsubscribed' => $strno, 'forcesubscribed' => $stryes,
'cantsubscribe' => '-'), false, false, true);

$digestoptions_selector->url->param('id', $forum->id);
if ($forum->maildigest === null) {
$digestoptions_selector->selected = -1;
} else {
$digestoptions_selector->selected = $forum->maildigest;
}
$row[] = $OUTPUT->render($digestoptions_selector);
if ($showsubscriptioncolumns) {
$row = $forumsubscriptionhelper($forum, $row, $context);
}

//If this forum has RSS activated, calculate it
Expand All @@ -466,25 +479,34 @@
}
}


/// Output the page
// Output the page.
$PAGE->navbar->add($strforums);
$PAGE->set_title("$course->shortname: $strforums");
$PAGE->set_heading($course->fullname);
$PAGE->set_button($searchform);
echo $OUTPUT->header();

// Show the subscribe all options only to non-guest, enrolled users
if (!isguestuser() && isloggedin() && $can_subscribe) {
if (!isguestuser() && isloggedin() && $showsubscriptioncolumns) {
// Show the subscribe all options only to non-guest, enrolled users.
echo $OUTPUT->box_start('subscription');
echo html_writer::tag('div',
html_writer::link(new moodle_url('/mod/forum/index.php', array('id'=>$course->id, 'subscribe'=>1, 'sesskey'=>sesskey())),
get_string('allsubscribe', 'forum')),
array('class'=>'helplink'));
echo html_writer::tag('div',
html_writer::link(new moodle_url('/mod/forum/index.php', array('id'=>$course->id, 'subscribe'=>0, 'sesskey'=>sesskey())),
get_string('allunsubscribe', 'forum')),
array('class'=>'helplink'));

$subscriptionlink = new moodle_url('/mod/forum/index.php', [
'id' => $course->id,
'sesskey' => sesskey(),
]);

// Subscribe all.
$subscriptionlink->param('subscribe', 1);
echo html_writer::tag('div', html_writer::link($subscriptionlink, get_string('allsubscribe', 'forum')), [
'class' => 'helplink',
]);

// Unsubscribe all.
$subscriptionlink->param('subscribe', 0);
echo html_writer::tag('div', html_writer::link($subscriptionlink, get_string('allunsubscribe', 'forum')), [
'class' => 'helplink',
]);

echo $OUTPUT->box_end();
echo $OUTPUT->box(' ', 'clearer');
}
Expand All @@ -500,4 +522,3 @@
}

echo $OUTPUT->footer();

Loading

0 comments on commit 86d6ff2

Please sign in to comment.