[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/mod/forum/ -> subscribe.php (source)

   1  <?php
   2  
   3  // This file is part of Moodle - http://moodle.org/
   4  //
   5  // Moodle is free software: you can redistribute it and/or modify
   6  // it under the terms of the GNU General Public License as published by
   7  // the Free Software Foundation, either version 3 of the License, or
   8  // (at your option) any later version.
   9  //
  10  // Moodle is distributed in the hope that it will be useful,
  11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13  // GNU General Public License for more details.
  14  //
  15  // You should have received a copy of the GNU General Public License
  16  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  17  
  18  /**
  19   * Subscribe to or unsubscribe from a forum or manage forum subscription mode
  20   *
  21   * This script can be used by either individual users to subscribe to or
  22   * unsubscribe from a forum (no 'mode' param provided), or by forum managers
  23   * to control the subscription mode (by 'mode' param).
  24   * This script can be called from a link in email so the sesskey is not
  25   * required parameter. However, if sesskey is missing, the user has to go
  26   * through a confirmation page that redirects the user back with the
  27   * sesskey.
  28   *
  29   * @package   mod_forum
  30   * @copyright  1999 onwards Martin Dougiamas  {@link http://moodle.com}
  31   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  32   */
  33  
  34  require_once(dirname(dirname(dirname(__FILE__))).'/config.php');
  35  require_once($CFG->dirroot.'/mod/forum/lib.php');
  36  
  37  $id             = required_param('id', PARAM_INT);             // The forum to set subscription on.
  38  $mode           = optional_param('mode', null, PARAM_INT);     // The forum's subscription mode.
  39  $user           = optional_param('user', 0, PARAM_INT);        // The userid of the user to subscribe, defaults to $USER.
  40  $discussionid   = optional_param('d', null, PARAM_INT);        // The discussionid to subscribe.
  41  $sesskey        = optional_param('sesskey', null, PARAM_RAW);
  42  $returnurl      = optional_param('returnurl', null, PARAM_RAW);
  43  
  44  $url = new moodle_url('/mod/forum/subscribe.php', array('id'=>$id));
  45  if (!is_null($mode)) {
  46      $url->param('mode', $mode);
  47  }
  48  if ($user !== 0) {
  49      $url->param('user', $user);
  50  }
  51  if (!is_null($sesskey)) {
  52      $url->param('sesskey', $sesskey);
  53  }
  54  $PAGE->set_url($url);
  55  
  56  $forum   = $DB->get_record('forum', array('id' => $id), '*', MUST_EXIST);
  57  $course  = $DB->get_record('course', array('id' => $forum->course), '*', MUST_EXIST);
  58  $cm      = get_coursemodule_from_instance('forum', $forum->id, $course->id, false, MUST_EXIST);
  59  $context = context_module::instance($cm->id);
  60  
  61  if ($user) {
  62      require_sesskey();
  63      if (!has_capability('mod/forum:managesubscriptions', $context)) {
  64          print_error('nopermissiontosubscribe', 'forum');
  65      }
  66      $user = $DB->get_record('user', array('id' => $user), '*', MUST_EXIST);
  67  } else {
  68      $user = $USER;
  69  }
  70  
  71  if (isset($cm->groupmode) && empty($course->groupmodeforce)) {
  72      $groupmode = $cm->groupmode;
  73  } else {
  74      $groupmode = $course->groupmode;
  75  }
  76  
  77  $issubscribed = \mod_forum\subscriptions::is_subscribed($user->id, $forum, $discussionid, $cm);
  78  
  79  // For a user to subscribe when a groupmode is set, they must have access to at least one group.
  80  if ($groupmode && !$issubscribed && !has_capability('moodle/site:accessallgroups')) {
  81      if (!groups_get_all_groups($course->id, $USER->id)) {
  82          print_error('cannotsubscribe', 'forum');
  83      }
  84  }
  85  
  86  require_login($course, false, $cm);
  87  
  88  if (is_null($mode) and !is_enrolled($context, $USER, '', true)) {   // Guests and visitors can't subscribe - only enrolled
  89      $PAGE->set_title($course->shortname);
  90      $PAGE->set_heading($course->fullname);
  91      if (isguestuser()) {
  92          echo $OUTPUT->header();
  93          echo $OUTPUT->confirm(get_string('subscribeenrolledonly', 'forum').'<br /><br />'.get_string('liketologin'),
  94                       get_login_url(), new moodle_url('/mod/forum/view.php', array('f'=>$id)));
  95          echo $OUTPUT->footer();
  96          exit;
  97      } else {
  98          // there should not be any links leading to this place, just redirect
  99          redirect(new moodle_url('/mod/forum/view.php', array('f'=>$id)), get_string('subscribeenrolledonly', 'forum'));
 100      }
 101  }
 102  
 103  $returnto = optional_param('backtoindex',0,PARAM_INT)
 104      ? "index.php?id=".$course->id
 105      : "view.php?f=$id";
 106  
 107  if ($returnurl) {
 108      $returnto = $returnurl;
 109  }
 110  
 111  if (!is_null($mode) and has_capability('mod/forum:managesubscriptions', $context)) {
 112      require_sesskey();
 113      switch ($mode) {
 114          case FORUM_CHOOSESUBSCRIBE : // 0
 115              \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_CHOOSESUBSCRIBE);
 116              redirect($returnto, get_string("everyonecannowchoose", "forum"), 1);
 117              break;
 118          case FORUM_FORCESUBSCRIBE : // 1
 119              \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_FORCESUBSCRIBE);
 120              redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1);
 121              break;
 122          case FORUM_INITIALSUBSCRIBE : // 2
 123              if ($forum->forcesubscribe <> FORUM_INITIALSUBSCRIBE) {
 124                  $users = \mod_forum\subscriptions::get_potential_subscribers($context, 0, 'u.id, u.email', '');
 125                  foreach ($users as $user) {
 126                      \mod_forum\subscriptions::subscribe_user($user->id, $forum, $context);
 127                  }
 128              }
 129              \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_INITIALSUBSCRIBE);
 130              redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1);
 131              break;
 132          case FORUM_DISALLOWSUBSCRIBE : // 3
 133              \mod_forum\subscriptions::set_subscription_mode($forum->id, FORUM_DISALLOWSUBSCRIBE);
 134              redirect($returnto, get_string("noonecansubscribenow", "forum"), 1);
 135              break;
 136          default:
 137              print_error(get_string('invalidforcesubscribe', 'forum'));
 138      }
 139  }
 140  
 141  if (\mod_forum\subscriptions::is_forcesubscribed($forum)) {
 142      redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1);
 143  }
 144  
 145  $info = new stdClass();
 146  $info->name  = fullname($user);
 147  $info->forum = format_string($forum->name);
 148  
 149  if ($issubscribed) {
 150      if (is_null($sesskey)) {    // we came here via link in email
 151          $PAGE->set_title($course->shortname);
 152          $PAGE->set_heading($course->fullname);
 153          echo $OUTPUT->header();
 154          echo $OUTPUT->confirm(get_string('confirmunsubscribe', 'forum', format_string($forum->name)),
 155                  new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/forum/view.php', array('f' => $id)));
 156          echo $OUTPUT->footer();
 157          exit;
 158      }
 159      require_sesskey();
 160      if ($discussionid === null) {
 161          if (\mod_forum\subscriptions::unsubscribe_user($user->id, $forum, $context, true)) {
 162              redirect($returnto, get_string("nownotsubscribed", "forum", $info), 1);
 163          } else {
 164              print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]);
 165          }
 166      } else {
 167          $discussion = $DB->get_record('forum_discussions', array('id' => $discussionid));
 168          if (\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion, $context)) {
 169              $info->discussion = $discussion->name;
 170              redirect($returnto, get_string("discussionnownotsubscribed", "forum", $info), 1);
 171          } else {
 172              print_error('cannotunsubscribe', 'forum', $_SERVER["HTTP_REFERER"]);
 173          }
 174      }
 175  
 176  } else {  // subscribe
 177      if (\mod_forum\subscriptions::subscription_disabled($forum) && !has_capability('mod/forum:managesubscriptions', $context)) {
 178          print_error('disallowsubscribe', 'forum', $_SERVER["HTTP_REFERER"]);
 179      }
 180      if (!has_capability('mod/forum:viewdiscussion', $context)) {
 181          print_error('noviewdiscussionspermission', 'forum', $_SERVER["HTTP_REFERER"]);
 182      }
 183      if (is_null($sesskey)) {    // we came here via link in email
 184          $PAGE->set_title($course->shortname);
 185          $PAGE->set_heading($course->fullname);
 186          echo $OUTPUT->header();
 187          echo $OUTPUT->confirm(get_string('confirmsubscribe', 'forum', format_string($forum->name)),
 188                  new moodle_url($PAGE->url, array('sesskey' => sesskey())), new moodle_url('/mod/forum/view.php', array('f' => $id)));
 189          echo $OUTPUT->footer();
 190          exit;
 191      }
 192      require_sesskey();
 193      if ($discussionid == null) {
 194          \mod_forum\subscriptions::subscribe_user($user->id, $forum, $context, true);
 195          redirect($returnto, get_string("nowsubscribed", "forum", $info), 1);
 196      } else {
 197          $discussion = $DB->get_record('forum_discussions', array('id' => $discussionid));
 198          $info->discussion = $discussion->name;
 199          \mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion, $context);
 200          redirect($returnto, get_string("discussionnowsubscribed", "forum", $info), 1);
 201      }
 202  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1