original_string: protected function resolve_theme() {
          global $CFG, $USER, $SESSION;
  
          if (empty($CFG->themeorder)) {
              $themeorder = array('course', 'category', 'session', 'user', 'cohort', 'site');
          } else {
              $themeorder = $CFG->themeorder;
              // Just in case, make sure we always use the site theme if nothing else matched.
              $themeorder[] = 'site';
          }
  
          $mnetpeertheme = '';
          if (isloggedin() and isset($CFG->mnet_localhost_id) and $USER->mnethostid != $CFG->mnet_localhost_id) {
              require_once($CFG->dirroot.'/mnet/peer.php');
              $mnetpeer = new mnet_peer();
              $mnetpeer->set_id($USER->mnethostid);
              if ($mnetpeer->force_theme == 1 && $mnetpeer->theme != '') {
                  $mnetpeertheme = $mnetpeer->theme;
              }
          }
  
          $devicetheme = core_useragent::get_device_type_theme($this->devicetypeinuse);
  
          // The user is using another device than default, and we have a theme for that, we should use it.
          $hascustomdevicetheme = core_useragent::DEVICETYPE_DEFAULT != $this->devicetypeinuse && !empty($devicetheme);
  
          foreach ($themeorder as $themetype) {
  
              switch ($themetype) {
                  case 'course':
                      if (!empty($CFG->allowcoursethemes) && !empty($this->_course->theme) && !$hascustomdevicetheme) {
                          return $this->_course->theme;
                      }
                  break;
  
                  case 'category':
                      if (!empty($CFG->allowcategorythemes) && !$hascustomdevicetheme) {
                          $categories = $this->categories;
                          foreach ($categories as $category) {
                              if (!empty($category->theme)) {
                                  return $category->theme;
                              }
                          }
                      }
                  break;
  
                  case 'session':
                      if (!empty($SESSION->theme)) {
                          return $SESSION->theme;
                      }
                  break;
  
                  case 'user':
                      if (!empty($CFG->allowuserthemes) && !empty($USER->theme) && !$hascustomdevicetheme) {
                          if ($mnetpeertheme) {
                              return $mnetpeertheme;
                          } else {
                              return $USER->theme;
                          }
                      }
                  break;
  
                  case 'cohort':
                      if (!empty($CFG->allowcohortthemes) && !empty($USER->cohorttheme) && !$hascustomdevicetheme) {
                          return $USER->cohorttheme;
                      }
                  break;
  
                  case 'site':
                      if ($mnetpeertheme) {
                          return $mnetpeertheme;
                      }
                      // First try for the device the user is using.
                      if (!empty($devicetheme)) {
                          return $devicetheme;
                      }
                      // Next try for the default device (as a fallback).
                      $devicetheme = core_useragent::get_device_type_theme(core_useragent::DEVICETYPE_DEFAULT);
                      if (!empty($devicetheme)) {
                          return $devicetheme;
                      }
                      // The default device theme isn't set up - use the overall default theme.
                      return theme_config::DEFAULT_THEME;
              }
          }
  
          // We should most certainly have resolved a theme by now. Something has gone wrong.
          debugging('Error resolving the theme to use for this page.', DEBUG_DEVELOPER);
          return theme_config::DEFAULT_THEME;
      }
code: protected function resolve_theme() {
          global $CFG, $USER, $SESSION;
  
          if (empty($CFG->themeorder)) {
              $themeorder = array('course', 'category', 'session', 'user', 'cohort', 'site');
          } else {
              $themeorder = $CFG->themeorder;
              // Just in case, make sure we always use the site theme if nothing else matched.
              $themeorder[] = 'site';
          }
  
          $mnetpeertheme = '';
          if (isloggedin() and isset($CFG->mnet_localhost_id) and $USER->mnethostid != $CFG->mnet_localhost_id) {
              require_once($CFG->dirroot.'/mnet/peer.php');
              $mnetpeer = new mnet_peer();
              $mnetpeer->set_id($USER->mnethostid);
              if ($mnetpeer->force_theme == 1 && $mnetpeer->theme != '') {
                  $mnetpeertheme = $mnetpeer->theme;
              }
          }
  
          $devicetheme = core_useragent::get_device_type_theme($this->devicetypeinuse);
  
          // The user is using another device than default, and we have a theme for that, we should use it.
          $hascustomdevicetheme = core_useragent::DEVICETYPE_DEFAULT != $this->devicetypeinuse && !empty($devicetheme);
  
          foreach ($themeorder as $themetype) {
  
              switch ($themetype) {
                  case 'course':
                      if (!empty($CFG->allowcoursethemes) && !empty($this->_course->theme) && !$hascustomdevicetheme) {
                          return $this->_course->theme;
                      }
                  break;
  
                  case 'category':
                      if (!empty($CFG->allowcategorythemes) && !$hascustomdevicetheme) {
                          $categories = $this->categories;
                          foreach ($categories as $category) {
                              if (!empty($category->theme)) {
                                  return $category->theme;
                              }
                          }
                      }
                  break;
  
                  case 'session':
                      if (!empty($SESSION->theme)) {
                          return $SESSION->theme;
                      }
                  break;
  
                  case 'user':
                      if (!empty($CFG->allowuserthemes) && !empty($USER->theme) && !$hascustomdevicetheme) {
                          if ($mnetpeertheme) {
                              return $mnetpeertheme;
                          } else {
                              return $USER->theme;
                          }
                      }
                  break;
  
                  case 'cohort':
                      if (!empty($CFG->allowcohortthemes) && !empty($USER->cohorttheme) && !$hascustomdevicetheme) {
                          return $USER->cohorttheme;
                      }
                  break;
  
                  case 'site':
                      if ($mnetpeertheme) {
                          return $mnetpeertheme;
                      }
                      // First try for the device the user is using.
                      if (!empty($devicetheme)) {
                          return $devicetheme;
                      }
                      // Next try for the default device (as a fallback).
                      $devicetheme = core_useragent::get_device_type_theme(core_useragent::DEVICETYPE_DEFAULT);
                      if (!empty($devicetheme)) {
                          return $devicetheme;
                      }
                      // The default device theme isn't set up - use the overall default theme.
                      return theme_config::DEFAULT_THEME;
              }
          }
  
          // We should most certainly have resolved a theme by now. Something has gone wrong.
          debugging('Error resolving the theme to use for this page.', DEBUG_DEVELOPER);
          return theme_config::DEFAULT_THEME;
      }
code_tokens: protected function resolve_theme ( ) { global $ CFG , $ USER , $ SESSION ; if ( empty ( $ CFG -> themeorder ) ) { $ themeorder = array ( 'course' , 'category' , 'session' , 'user' , 'cohort' , 'site' ) ; } else { $ themeorder = $ CFG -> themeorder ; // Just in case, make sure we always use the site theme if nothing else matched. $ themeorder [ ] = 'site' ; } $ mnetpeertheme = '' ; if ( isloggedin ( ) and isset ( $ CFG -> mnet_localhost_id ) and $ USER -> mnethostid != $ CFG -> mnet_localhost_id ) { require_once ( $ CFG -> dirroot . '/mnet/peer.php' ) ; $ mnetpeer = new mnet_peer ( ) ; $ mnetpeer -> set_id ( $ USER -> mnethostid ) ; if ( $ mnetpeer -> force_theme == 1 && $ mnetpeer -> theme != '' ) { $ mnetpeertheme = $ mnetpeer -> theme ; } } $ devicetheme = core_useragent :: get_device_type_theme ( $ this -> devicetypeinuse ) ; // The user is using another device than default, and we have a theme for that, we should use it. $ hascustomdevicetheme = core_useragent :: DEVICETYPE_DEFAULT != $ this -> devicetypeinuse && ! empty ( $ devicetheme ) ; foreach ( $ themeorder as $ themetype ) { switch ( $ themetype ) { case 'course' : if ( ! empty ( $ CFG -> allowcoursethemes ) && ! empty ( $ this -> _course -> theme ) && ! $ hascustomdevicetheme ) { return $ this -> _course -> theme ; } break ; case 'category' : if ( ! empty ( $ CFG -> allowcategorythemes ) && ! $ hascustomdevicetheme ) { $ categories = $ this -> categories ; foreach ( $ categories as $ category ) { if ( ! empty ( $ category -> theme ) ) { return $ category -> theme ; } } } break ; case 'session' : if ( ! empty ( $ SESSION -> theme ) ) { return $ SESSION -> theme ; } break ; case 'user' : if ( ! empty ( $ CFG -> allowuserthemes ) && ! empty ( $ USER -> theme ) && ! $ hascustomdevicetheme ) { if ( $ mnetpeertheme ) { return $ mnetpeertheme ; } else { return $ USER -> theme ; } } break ; case 'cohort' : if ( ! empty ( $ CFG -> allowcohortthemes ) && ! empty ( $ USER -> cohorttheme ) && ! $ hascustomdevicetheme ) { return $ USER -> cohorttheme ; } break ; case 'site' : if ( $ mnetpeertheme ) { return $ mnetpeertheme ; } // First try for the device the user is using. if ( ! empty ( $ devicetheme ) ) { return $ devicetheme ; } // Next try for the default device (as a fallback). $ devicetheme = core_useragent :: get_device_type_theme ( core_useragent :: DEVICETYPE_DEFAULT ) ; if ( ! empty ( $ devicetheme ) ) { return $ devicetheme ; } // The default device theme isn't set up - use the overall default theme. return theme_config :: DEFAULT_THEME ; } } // We should most certainly have resolved a theme by now. Something has gone wrong. debugging ( 'Error resolving the theme to use for this page.' , DEBUG_DEVELOPER ) ; return theme_config :: DEFAULT_THEME ; }
docstring: Work out the theme this page should use.
  
  This depends on numerous $CFG settings, and the properties of this page.
  
  @return string the name of the theme that should be used on this page.
docstring_tokens: Work out the theme this page should use .