Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
/admin/ -> message.php (source)

Differences Between: [Versions 310 and 311] [Versions 311 and 400] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403] [Versions 39 and 311]

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * Message outputs configuration page
  19   *
  20   * @package    message
  21   * @copyright  2011 Lancaster University Network Services Limited
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  require_once(__DIR__ . '/../config.php');
  25  require_once($CFG->dirroot . '/message/lib.php');
  26  require_once($CFG->libdir.'/adminlib.php');
  27  
  28  // This is an admin page.
  29  admin_externalpage_setup('managemessageoutputs');
  30  
  31  // Fetch processors.
  32  $allprocessors = get_message_processors();
  33  $processors = array_filter($allprocessors, function($processor) {
  34      return $processor->enabled;
  35  });
  36  $disabledprocessors = array_filter($allprocessors, function($processor) {
  37      return !$processor->enabled;
  38  });
  39  
  40  // Fetch message providers.
  41  $providers = get_message_providers();
  42  // Fetch the manage message outputs interface.
  43  $preferences = get_message_output_default_preferences();
  44  
  45  if (($form = data_submitted()) && confirm_sesskey()) {
  46      $newpreferences = array();
  47      // Prepare default message outputs settings.
  48      foreach ($providers as $provider) {
  49          $componentproviderbase = $provider->component.'_'.$provider->name;
  50          $disableprovidersetting = $componentproviderbase.'_disable';
  51          $providerdisabled = false;
  52          if (!isset($form->$disableprovidersetting)) {
  53              $providerdisabled = true;
  54              $newpreferences[$disableprovidersetting] = 1;
  55          } else {
  56              $newpreferences[$disableprovidersetting] = 0;
  57          }
  58  
  59          foreach (array('permitted', 'loggedin', 'loggedoff') as $setting) {
  60              $value = null;
  61              $componentprovidersetting = $componentproviderbase.'_'.$setting;
  62              if ($setting == 'permitted') {
  63                  // If we deal with permitted select element, we need to create individual
  64                  // setting for each possible processor. Note that this block will
  65                  // always be processed first after entring parental foreach iteration
  66                  // so we can change form values on this stage.
  67                  foreach ($processors as $processor) {
  68                      $value = '';
  69                      if (isset($form->{$componentprovidersetting}[$processor->name])) {
  70                          $value = $form->{$componentprovidersetting}[$processor->name];
  71                      }
  72                      // Ensure that loggedin loggedoff options are set correctly for this permission.
  73                      if (($value == 'disallowed') || $providerdisabled) {
  74                          // It might be better to unset them, but I can't figure out why that cause error.
  75                          $form->{$componentproviderbase.'_loggedin'}[$processor->name] = 0;
  76                          $form->{$componentproviderbase.'_loggedoff'}[$processor->name] = 0;
  77                      } else if ($value == 'forced') {
  78                          $form->{$componentproviderbase.'_loggedin'}[$processor->name] = 1;
  79                          $form->{$componentproviderbase.'_loggedoff'}[$processor->name] = 1;
  80                      }
  81                      // Record the site preference.
  82                      $newpreferences[$processor->name.'_provider_'.$componentprovidersetting] = $value;
  83                  }
  84              } else {
  85                  $newsettings = array();
  86                  if (property_exists($form, $componentprovidersetting)) {
  87                      // We must be processing loggedin or loggedoff checkboxes.
  88                      // Store defained comma-separated processors as setting value.
  89                      // Using array_filter eliminates elements set to 0 above.
  90                      $newsettings = array_keys(array_filter($form->{$componentprovidersetting}));
  91                  }
  92  
  93                  // Let's join existing setting values for disabled processors.
  94                  $property = 'message_provider_'.$componentprovidersetting;
  95                  if (property_exists($preferences, $property)) {
  96                      $existingsetting = $preferences->$property;
  97                      foreach ($disabledprocessors as $disable) {
  98                          if (strpos($existingsetting, $disable->name) > -1) {
  99                              $newsettings[] = $disable->name;
 100                          }
 101                      }
 102                  }
 103  
 104                  $value = join(',', $newsettings);
 105                  if (empty($value)) {
 106                      $value = null;
 107                  }
 108              }
 109              if ($setting != 'permitted') {
 110                  // We have already recoded site preferences for 'permitted' type.
 111                  $newpreferences['message_provider_'.$componentprovidersetting] = $value;
 112              }
 113          }
 114      }
 115  
 116      // Update database.
 117      $transaction = $DB->start_delegated_transaction();
 118  
 119      // Save processors enabled/disabled status.
 120      foreach ($allprocessors as $processor) {
 121          $enabled = isset($form->{$processor->name});
 122          if ($enabled != $processor->enabled) {
 123              add_to_config_log($processor->name, $processor->enabled, $enabled, 'core');
 124          }
 125          \core_message\api::update_processor_status($processor, $enabled);
 126      }
 127  
 128      foreach ($newpreferences as $name => $value) {
 129          $old = isset($preferences->$name) ? $preferences->$name : '';
 130  
 131          if ($old != $value) {
 132              add_to_config_log($name, $old, $value, 'core');
 133          }
 134  
 135          set_config($name, $value, 'message');
 136      }
 137      $transaction->allow_commit();
 138  
 139      core_plugin_manager::reset_caches();
 140  
 141      $url = new moodle_url('message.php');
 142      redirect($url);
 143  }
 144  
 145  // Page settings
 146  $PAGE->set_context(context_system::instance());
 147  $PAGE->requires->js_init_call('M.core_message.init_defaultoutputs');
 148  
 149  $renderer = $PAGE->get_renderer('core', 'message');
 150  
 151  // Display the page.
 152  echo $OUTPUT->header();
 153  echo $renderer->manage_messageoutput_settings($allprocessors, $processors, $providers, $preferences);
 154  echo $OUTPUT->footer();