diff --git a/lib/form/password.php b/lib/form/password.php index 1883897edab..c157a47fad6 100644 --- a/lib/form/password.php +++ b/lib/form/password.php @@ -15,6 +15,16 @@ class MoodleQuickForm_password extends HTML_QuickForm_password{ */ var $_helpbutton=''; function MoodleQuickForm_password($elementName=null, $elementLabel=null, $attributes=null) { + global $CFG; + if (empty($CFG->xmlstrictheaders)) { + // no standard mform in moodle should allow autocomplete of passwords + // this is valid attribute in html5, sorry, we have to ignore validation errors in legacy xhtml 1.0 + $attributes = (array)$attributes; + if (!isset($attributes['autocomplete'])) { + $attributes['autocomplete'] = 'off'; + } + } + parent::HTML_QuickForm_password($elementName, $elementLabel, $attributes); } /** diff --git a/lib/form/passwordunmask.php b/lib/form/passwordunmask.php index c0e517d2ca9..7210323536e 100644 --- a/lib/form/passwordunmask.php +++ b/lib/form/passwordunmask.php @@ -15,6 +15,15 @@ require_once($CFG->libdir.'/form/password.php'); class MoodleQuickForm_passwordunmask extends MoodleQuickForm_password { function MoodleQuickForm_passwordunmask($elementName=null, $elementLabel=null, $attributes=null) { + global $CFG; + if (empty($CFG->xmlstrictheaders)) { + // no standard mform in moodle should allow autocomplete of passwords + // this is valid attribute in html5, sorry, we have to ignore validation errors in legacy xhtml 1.0 + $attributes = (array)$attributes; + if (!isset($attributes['autocomplete'])) { + $attributes['autocomplete'] = 'off'; + } + } parent::MoodleQuickForm_password($elementName, $elementLabel, $attributes); } @@ -25,7 +34,6 @@ class MoodleQuickForm_passwordunmask extends MoodleQuickForm_password { return $this->getFrozenHtml(); } else { $unmask = get_string('unmaskpassword', 'form'); - $this->updateAttributes(array('autocomplete' => 'off')); //Pass id of the element, so that unmask checkbox can be attached. $PAGE->requires->yui_module('moodle-form-passwordunmask', 'M.form.passwordunmask', array(array('formid' => $this->getAttribute('id'), 'checkboxname' => $unmask))); diff --git a/lib/formslib.php b/lib/formslib.php index ca83c7c6001..c426942ef65 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -139,6 +139,16 @@ abstract class moodleform { * @return object moodleform */ function moodleform($action=null, $customdata=null, $method='post', $target='', $attributes=null, $editable=true) { + global $CFG; + if (empty($CFG->xmlstrictheaders)) { + // no standard mform in moodle should allow autocomplete with the exception of user signup + // this is valid attribute in html5, sorry, we have to ignore validation errors in legacy xhtml 1.0 + $attributes = (array)$attributes; + if (!isset($attributes['autocomplete'])) { + $attributes['autocomplete'] = 'off'; + } + } + if (empty($action)){ $action = strip_querystring(qualified_me()); } diff --git a/lib/javascript-static.js b/lib/javascript-static.js index 02254220386..07f8cfc6c40 100644 --- a/lib/javascript-static.js +++ b/lib/javascript-static.js @@ -920,13 +920,14 @@ function unmaskPassword(id) { try { // first try IE way - it can not set name attribute later if (chb.checked) { - var newpw = document.createElement(''); + var newpw = document.createElement(''); } else { - var newpw = document.createElement(''); + var newpw = document.createElement(''); } newpw.attributes['class'].nodeValue = pw.attributes['class'].nodeValue; } catch (e) { var newpw = document.createElement('input'); + newpw.setAttribute('autocomplete', 'off'); newpw.setAttribute('name', pw.name); if (chb.checked) { newpw.setAttribute('type', 'text'); diff --git a/login/signup.php b/login/signup.php index f3b83be65d3..fb27841c8b3 100644 --- a/login/signup.php +++ b/login/signup.php @@ -43,7 +43,7 @@ $PAGE->https_required(); $PAGE->set_url('/login/signup.php'); $PAGE->set_context(get_context_instance(CONTEXT_SYSTEM)); -$mform_signup = new login_signup_form(); +$mform_signup = new login_signup_form(null, null, 'post', '', array('autocomplete'=>'on')); if ($mform_signup->is_cancelled()) { redirect(get_login_url());