diff --git a/lib/editor/htmlarea/htmlarea.php b/lib/editor/htmlarea/htmlarea.php index be136994d94..d0f2247798a 100644 --- a/lib/editor/htmlarea/htmlarea.php +++ b/lib/editor/htmlarea/htmlarea.php @@ -2,7 +2,8 @@ include("../../../config.php"); require_once($CFG->dirroot.'/lib/languages.php'); - $id = optional_param('id', 0, PARAM_INT); + $id = optional_param('id', 0, PARAM_INT); + $httpsrequired = optional_param('httpsrequired', 0, PARAM_BOOL);//flag indicating editor on page with required https $lastmodified = filemtime("htmlarea.php"); $lifetime = 1800; @@ -26,6 +27,14 @@ $lang = "en"; } + if ($httpsrequired) { + // this is an ugly hack to allow partial operation of editor on pages that require https when loginhttps enabled + // please note that some popups still show nonsecurre items and fullscreen may not function properly in IE + $url = preg_replace('|https?://[^/]+|', '', $CFG->wwwroot).'/lib/editor/htmlarea/'; + } else { + $url = $CFG->wwwroot.'/lib/editor/htmlarea/'; + } + $strheading = get_string("heading", "editor"); $strnormal = get_string("normal", "editor"); $straddress = get_string("address", "editor"); @@ -52,7 +61,7 @@ if (typeof _editor_url == "string") { _editor_url = _editor_url.replace(/\x2f*$/, '/'); } else { //alert("WARNING: _editor_url is not set! You should set this variable to the editor files path; it should preferably be an absolute path, like in '/htmlarea', but it can be relative if you prefer. Further we will try to load the editor files correctly but we'll probably fail."); - _editor_url = 'wwwroot); ?>/lib/editor/htmlarea/'; + _editor_url = '';// we need relative path to site root for editor in pages wit hrequired https } // make sure we have a language @@ -698,12 +707,7 @@ HTMLArea.prototype.generate = function () { // create the IFRAME var iframe = document.createElement("iframe"); - if (HTMLArea.is_ie) { // http://moodle.org/mod/forum/discuss.php?d=8555 - // tricky! set src to local url to turn off SSL security alert - iframe.src = _editor_url + this.config.popupURL+"blank.html"; - } else { - iframe.src = "about:blank"; - } + iframe.src = "about:blank"; iframe.className = "iframe"; diff --git a/lib/formslib.php b/lib/formslib.php index 0586ac3ac07..2b9051f2c25 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -31,9 +31,6 @@ require_once 'HTML/QuickForm/Renderer/Tableless.php'; require_once $CFG->libdir.'/uploadlib.php'; -define('FORM_ADVANCEDIMAGEURL', $CFG->pixpath.'/adv.gif'); -define('FORM_REQIMAGEURL', $CFG->pixpath.'/req.gif'); - /** * Callback called when PEAR throws an error * @@ -610,6 +607,8 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { * @access public */ function MoodleQuickForm($formName, $method, $action, $target='', $attributes=null){ + global $CFG; + static $formcounter = 1; HTML_Common::HTML_Common($attributes); @@ -627,8 +626,8 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless { }else { $this->updateAttributes(array('class'=>'mform')); } - $this->_reqHTML = ''.get_string('requiredelement', 'form').''; - $this->_advancedHTML = ''.get_string('advancedelement', 'form').''; + $this->_reqHTML = ''.get_string('requiredelement', 'form').''; + $this->_advancedHTML = ''.get_string('advancedelement', 'form').''; $this->setRequiredNote(get_string('somefieldsrequired', 'form'). helpbutton('requiredelement', get_string('requiredelement', 'form'), 'moodle', true, false, '', true)); } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index b2416c670b7..f29fe60bfac 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -1547,6 +1547,58 @@ function confirm_sesskey($sesskey=NULL) { return ($USER->sesskey === $sesskey); } +/** + * Setup all global $CFG course variables, set locale and also + * @param mixed $courseorid id of the course or course object + */ +function course_setup($courseorid=0) { + global $COURSE, $HTTPSPAGEREQUIRED, $CFG; + +/// Redefine global $COURSE if needed + if (empty($courseorid)) { + // no change in global $COURSE - for backwards compatibiltiy + // if require_rogin() used after require_login($courseid); + } else if (is_object($courseorid)) { + $COURSE = clone($courseorid); + } else { + global $course; // used here only to prevent repeated fetching from DB - may be removed later + if ($course->id == $courseorid) { + $COURSE = clone($course); + } else { + if (!$COURSE = get_record('course', 'id', $courseorid)) { + error('Invalid course ID'); + } + } + } + +/// set locale - we should use $COURSE->lang directly in the future +/// $CFG->courselang is now used in cron and chat to override current language and locale + if ($COURSE->id == SITEID or empty($COURSE->lang)) { + unset($CFG->courselang); + } else { + $CFG->courselang = $COURSE->lang; + } + moodle_setlocale(); + +/// setup themes - $COURSE->theme should be used instead of $CFG->coursetheme soon + if ($COURSE->id == SITEID or empty($CFG->allowcoursethemes) or empty($COURSE->theme)) { + unset($CFG->coursetheme); + } else { + $CFG->coursetheme = $COURSE->theme; + } + theme_setup(); + +/// We have to change some URLs in styles if we are in a $HTTPSPAGEREQUIRED page +/// in case theme changed after call to httpsrequired(); + if (!empty($HTTPSPAGEREQUIRED)) { + $CFG->themewww = str_replace('http:', 'https:', $CFG->themewww); + $CFG->pixpath = str_replace('http:', 'https:', $CFG->pixpath); + $CFG->modpixpath = str_replace('http:', 'https:', $CFG->modpixpath); + foreach ($CFG->stylesheets as $key => $stylesheet) { + $CFG->stylesheets[$key] = str_replace('http:', 'https:', $stylesheet); + } + } +} /** * This function checks that the current user is logged in and has the @@ -1577,26 +1629,7 @@ function require_login($courseorid=0, $autologinguest=true, $cm=null) { global $CFG, $SESSION, $USER, $COURSE, $FULLME, $SITE; -/// Redefine global $COURSE if needed - if (empty($courseorid)) { - // keep previous value - usually $SITE - } else if (is_object($courseorid)) { - $COURSE = clone($courseorid); - } else { - global $course; // used here only to prevent repeated fetching from DB - if ($course->id == $courseorid) { - $COURSE = clone($course); - } else { - if (!$COURSE = get_record('course', 'id', $courseorid)) { - error('Invalid course ID'); - } - } - } - - if (!empty($COURSE->lang)) { - $CFG->courselang = $COURSE->lang; - moodle_setlocale(); - } + course_setup($courseorid); /// If the user is not even logged in yet then make sure they are if (! (isset($USER->loggedin) and $USER->confirmed and ($USER->site == $CFG->wwwroot)) ) { @@ -1605,8 +1638,7 @@ function require_login($courseorid=0, $autologinguest=true, $cm=null) { $SESSION->fromurl = $_SERVER['HTTP_REFERER']; } $USER = NULL; - if ($autologinguest && !empty($CFG->autologinguests) and - $COURSE->id and ($COURSE->id == SITEID or $COURSE->guest) ) { + if ($autologinguest and !empty($CFG->autologinguests) and ($COURSE->id == SITEID or $COURSE->guest) ) { $loginguest = '?loginguest=true'; } else { $loginguest = ''; @@ -3210,14 +3242,7 @@ function moodle_process_email($modargs,$body) { */ function email_to_user($user, $from, $subject, $messagetext, $messagehtml='', $attachment='', $attachname='', $usetrueaddress=true, $replyto='', $replytoname='') { - global $CFG, $FULLME, $COURSE; - - if (!empty($COURSE->lang)) { // Course language is defined - $CFG->courselang = $COURSE->lang; - } - if (!empty($COURSE->theme)) { // Course theme is defined - $CFG->coursetheme = $COURSE->theme; - } + global $CFG, $FULLME; include_once($CFG->libdir .'/phpmailer/class.phpmailer.php'); @@ -4140,13 +4165,6 @@ function get_string($identifier, $module='', $a=NULL, $extralocations=NULL) { global $CFG; - global $COURSE; - if (empty($CFG->courselang)) { - if (!empty($COURSE->lang)) { - $CFG->courselang = $COURSE->lang; - } - } - /// originally these special strings were stored in moodle.php now we are only in langconfig.php $langconfigstrs = array('alphabet', 'backupnameformat', 'firstdayofweek', 'locale', 'localewin', 'localewincharset', 'oldcharset', @@ -5856,6 +5874,14 @@ function httpsrequired() { $HTTPSPAGEREQUIRED = true; $CFG->httpswwwroot = str_replace('http:', 'https:', $CFG->wwwroot); $CFG->httpsthemewww = str_replace('http:', 'https:', $CFG->themewww); + + // change theme paths to pictures + $CFG->themewww = str_replace('http:', 'https:', $CFG->themewww); + $CFG->pixpath = str_replace('http:', 'https:', $CFG->pixpath); + $CFG->modpixpath = str_replace('http:', 'https:', $CFG->modpixpath); + foreach ($CFG->stylesheets as $key => $stylesheet) { + $CFG->stylesheets[$key] = str_replace('http:', 'https:', $stylesheet); + } } else { $CFG->httpswwwroot = $CFG->wwwroot; $CFG->httpsthemewww = $CFG->themewww; @@ -6517,6 +6543,8 @@ function check_dir_exists($dir, $create=false, $recursive=false) { function report_session_error() { global $CFG, $FULLME; + + theme_setup(); // Sets up theme global variables if (empty($CFG->lang)) { $CFG->lang = "en"; } diff --git a/lib/setup.php b/lib/setup.php index 43e294ce20a..aa87eab233b 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -540,8 +540,6 @@ global $HTTPSPAGEREQUIRED; $CFG->theme = 'standardwhite'; } - theme_setup(); // Sets up theme global variables - /// now do a session test to prevent random user switching - observed on some PHP/Apache combinations, /// disable checks when working in cookieless mode if (empty($CFG->usesid) || !empty($_COOKIE['MoodleSession'.$CFG->sessioncookie])) { @@ -577,8 +575,8 @@ global $HTTPSPAGEREQUIRED; } } - // set default locale - might be changed again later in require_login() - moodle_setlocale(); + // set default locale and themes - might be changed again later from require_login() + course_setup(); if (!empty($CFG->opentogoogle)) { if (empty($USER->id)) { // Ignore anyone logged in diff --git a/lib/weblib.php b/lib/weblib.php index 4a25077900c..59de6d1cc40 100644 --- a/lib/weblib.php +++ b/lib/weblib.php @@ -1163,7 +1163,7 @@ function format_text_menu() { */ function format_text($text, $format=FORMAT_MOODLE, $options=NULL, $courseid=NULL) { - global $CFG, $course; + global $CFG, $COURSE; if ($text === '') { return ''; // no need to do any filters and cleaning @@ -1193,9 +1193,7 @@ function format_text($text, $format=FORMAT_MOODLE, $options=NULL, $courseid=NULL } if (empty($courseid)) { - if (!empty($course->id)) { // An ugly hack for better compatibility - $courseid = $course->id; - } + $courseid = $COURSE->id; } if (!empty($CFG->cachetext) and empty($options->nocache)) { @@ -1356,9 +1354,7 @@ function format_string ($string, $striplinks = false, $courseid=NULL ) { } if (empty($courseid)) { - if (!empty($COURSE->id)) { // An ugly hack for better compatibility - $courseid = $COURSE->id; // (copied from format_text) - } + $courseid = $COURSE->id; // (copied from format_text) } if (!empty($CFG->filterall)) { @@ -1432,7 +1428,11 @@ function format_text_email($text, $format) { * @todo Finish documenting this function */ function filter_text($text, $courseid=NULL) { - global $CFG; + global $CFG, $COURSE; + + if (empty($courseid)) { + $courseid = $COURSE->id; // (copied from format_text) + } require_once($CFG->libdir.'/filterlib.php'); if (!empty($CFG->textfilters)) { @@ -1942,7 +1942,7 @@ function print_header ($title='', $heading='', $navigation='', $focus='', $meta='', $cache=true, $button=' ', $menu='', $usexml=false, $bodytags='', $return=false) { - global $USER, $CFG, $THEME, $SESSION, $ME, $SITE, $HTTPSPAGEREQUIRED; + global $USER, $CFG, $THEME, $SESSION, $ME, $SITE, $COURSE; /// This makes sure that the header is never repeated twice on a page if (defined('HEADER_PRINTED')) { @@ -1952,28 +1952,6 @@ function print_header ($title='', $heading='', $navigation='', $focus='', define('HEADER_PRINTED', 'true'); - global $COURSE; - if (!empty($COURSE->lang)) { - $CFG->courselang = $COURSE->lang; - moodle_setlocale(); - } - if (!empty($COURSE->theme)) { - if (!empty($CFG->allowcoursethemes)) { - $CFG->coursetheme = $COURSE->theme; - theme_setup(); - } - } - -/// We have to change some URLs in styles if we are in a $HTTPSPAGEREQUIRED page - if (!empty($HTTPSPAGEREQUIRED)) { - $CFG->themewww = str_replace('http:', 'https:', $CFG->themewww); - $CFG->pixpath = str_replace('http:', 'https:', $CFG->pixpath); - $CFG->modpixpath = str_replace('http:', 'https:', $CFG->modpixpath); - foreach ($CFG->stylesheets as $key => $stylesheet) { - $CFG->stylesheets[$key] = str_replace('http:', 'https:', $stylesheet); - } - } - /// Add the required stylesheets $stylesheetshtml = ''; foreach ($CFG->stylesheets as $stylesheet) { @@ -2277,7 +2255,7 @@ function print_header_simple($title='', $heading='', $navigation='', $focus='', * @todo Finish documenting this function */ function print_footer($course=NULL, $usercourse=NULL, $return=false) { - global $USER, $CFG, $THEME; + global $USER, $CFG, $THEME, $COURSE; /// Course links if ($course) { @@ -2360,7 +2338,7 @@ function print_footer($course=NULL, $usercourse=NULL, $return=false) { * @return string */ function current_theme() { - global $CFG, $USER, $SESSION, $course; + global $CFG, $USER, $SESSION; if (!empty($CFG->pagetheme)) { // Page theme is for special page-only themes set by code return $CFG->pagetheme; @@ -3603,8 +3581,8 @@ function print_textarea($usehtmleditor, $rows, $cols, $width, $height, $name, $v /// $width and height are legacy fields and no longer used as pixels like they used to be. /// However, you can set them to zero to override the mincols and minrows values below. - global $CFG, $course; - static $scriptcount; // For loading the htmlarea script only once. + global $CFG, $COURSE, $HTTPSPAGEREQUIRED; + static $scriptcount = 0; // For loading the htmlarea script only once. $mincols = 65; $minrows = 10; @@ -3616,26 +3594,23 @@ function print_textarea($usehtmleditor, $rows, $cols, $width, $height, $name, $v if ( empty($CFG->editorsrc) ) { // for backward compatibility. if (empty($courseid)) { - if (!empty($course->id)) { // search for it in global context - $courseid = $course->id; - } - } - - if (empty($scriptcount)) { - $scriptcount = 0; + $courseid = $COURSE->id; } if ($usehtmleditor) { if (!empty($courseid) and has_capability('moodle/course:managefiles', get_context_instance(CONTEXT_COURSE, $courseid))) { + $httpsrequired = empty($HTTPSPAGEREQUIRED) ? '' : '&httpsrequired=1'; // needed for course file area browsing in image insert plugin $str .= ($scriptcount < 1) ? ''."\n" : ''; + $CFG->httpswwwroot .'/lib/editor/htmlarea/htmlarea.php?id='.$courseid.$httpsrequired.'">'."\n" : ''; } else { + $httpsrequired = empty($HTTPSPAGEREQUIRED) ? '' : '?httpsrequired=1'; $str .= ($scriptcount < 1) ? ''."\n" : ''; + $CFG->httpswwwroot .'/lib/editor/htmlarea/htmlarea.php'.$httpsrequired.'">'."\n" : ''; + } $str .= ($scriptcount < 1) ? ''."\n" : ''; + $CFG->httpswwwroot .'/lib/editor/htmlarea/lang/en.php">'."\n" : ''; $scriptcount++; if ($height) { // Usually with legacy calls @@ -4737,7 +4712,7 @@ function emoticonhelpbutton($form, $field, $return = false) { function editorshortcutshelpbutton() { global $CFG; - $imagetext = ''.
+    $imagetext = '<img src=httpswwwroot . '/lib/editor/htmlarea/images/kbhelp.gif" alt="'. get_string('editorshortcutkeys').'" class="iconkbhelp" />'; return helpbutton('editorshortcuts', get_string('editorshortcutkeys'), 'moodle', true, false, '', true, $imagetext); @@ -5537,7 +5512,7 @@ function page_doc_link($text='', $iconpath='') { $str = ''; if (empty($iconpath)) { - $iconpath = $CFG->wwwroot . '/pix/docs.gif'; + $iconpath = $CFG->httpswwwroot . '/pix/docs.gif'; } // alt left blank intentionally to prevent repetition in screenreaders diff --git a/login/change_password.php b/login/change_password.php index 21340181d22..0840ef3e6d7 100644 --- a/login/change_password.php +++ b/login/change_password.php @@ -5,11 +5,11 @@ $id = optional_param('id', SITEID, PARAM_INT); - $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID); - //HTTPS is potentially required in this page httpsrequired(); + $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID); + if (!$course = get_record('course', 'id', $id)) { error('No such course!'); } diff --git a/mod/forum/post.php b/mod/forum/post.php index 88c959fae54..6e53f6da348 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -238,20 +238,18 @@ } if (!$cm = get_coursemodule_from_instance("forum", $forum->id, $forum->course)) { error('Could not get the course module for the forum instance.'); - } else { - $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); } + if (!$course = get_record('course', 'id', $forum->course)) { + error('Incorrect course'); + } + + require_login($course, false, $cm); + $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); + if ( !(($post->userid == $USER->id && has_capability('mod/forum:deleteownpost', $modcontext)) || has_capability('mod/forum:deleteanypost', $modcontext)) ) { error("You can't delete this post!"); } - if (!empty($forum->course)) { - if ($course = get_record('course', 'id', $forum->course)) { - if (!empty($course->lang)) { - $CFG->courselang = $course->lang; - } - } - } $replycount = forum_count_replies($post); @@ -439,9 +437,7 @@ if ($fromform = $mform_post->get_data()) { - if (!empty($course->lang)) { // Override current language - $CFG->courselang = $course->lang; - } + require_login($course, false, $cm); if (empty($SESSION->fromurl)) { $errordestination = "$CFG->wwwroot/mod/forum/view.php?f=$forum->id"; diff --git a/mod/resource/type/file/resource.class.php b/mod/resource/type/file/resource.class.php index 89f90392683..2cba138013d 100644 --- a/mod/resource/type/file/resource.class.php +++ b/mod/resource/type/file/resource.class.php @@ -27,10 +27,6 @@ var $maxparameters = 5; function set_parameters() { global $USER, $CFG; - if (! empty($this->course->lang)) { - $CFG->courselang = $this->course->lang; - } - $site = get_site(); diff --git a/mod/resource/type/repository/resource.class.php b/mod/resource/type/repository/resource.class.php index 7d3da0ac839..e0954693789 100644 --- a/mod/resource/type/repository/resource.class.php +++ b/mod/resource/type/repository/resource.class.php @@ -27,10 +27,6 @@ var $maxparameters = 5; function set_parameters() { global $USER, $CFG; - if (! empty($this->course->lang)) { - $CFG->courselang = $this->course->lang; - } - if (empty($USER->id)) { // No need to set up parameters $this->parameters = array(); return; diff --git a/theme/standard/meta.php b/theme/standard/meta.php index 8f7e04395fc..ba50b86ad4a 100644 --- a/theme/standard/meta.php +++ b/theme/standard/meta.php @@ -1,6 +1,6 @@ diff --git a/user/edit.php b/user/edit.php index 4407b3f9386..81adcbb4341 100644 --- a/user/edit.php +++ b/user/edit.php @@ -6,6 +6,8 @@ require_once($CFG->dirroot.'/user/editlib.php'); require_once($CFG->dirroot.'/user/profile/lib.php'); + httpsrequired(); + $course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site) if (!$course = get_record('course', 'id', $course)) { @@ -13,7 +15,6 @@ } require_login($course->id); - httpsrequired(); if (isguest()) { //TODO: add proper capability to edit own profile and change password too print_error('guestnoeditprofile'); @@ -77,7 +78,7 @@ profile_save_data($usernew); // Override old $USER session variable - $usernew = (array)get_record('user', 'id', $newuser->id); // reload from db + $usernew = (array)get_record('user', 'id', $usernew->id); // reload from db foreach ($usernew as $variable => $value) { $USER->$variable = $value; } diff --git a/user/editadvanced.php b/user/editadvanced.php index 5a2c1b55641..f159a317841 100644 --- a/user/editadvanced.php +++ b/user/editadvanced.php @@ -7,6 +7,8 @@ require_once($CFG->dirroot.'/user/editlib.php'); require_once($CFG->dirroot.'/user/profile/lib.php'); + httpsrequired(); + $id = optional_param('id', $USER->id, PARAM_INT); // user id; -1 if creating new user $course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site) @@ -14,7 +16,6 @@ error('Course ID was incorrect'); } require_login($course->id); - httpsrequired(); // HTTPS is potentially required in this page because there are passwords if ($id == -1) { // creating new user @@ -126,7 +127,7 @@ if ($user->id == $USER->id) { // Override old $USER session variable - $usernew = (array)get_record('user', 'id', $newuser->id); // reload from db + $usernew = (array)get_record('user', 'id', $usernew->id); // reload from db foreach ($usernew as $variable => $value) { $USER->$variable = $value; }