mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 22:08:20 +01:00
2f00e1b245
1) Moved the calendar types location to a sub-folder in the calendar directory. 2) Removed/moved language strings. 3) Removed calendar types that should be downloaded as plugins. 4) Removed a Non-English language pack for the Gregorian calendar type that should be downloaded separately. 5) Removed custom files responsible for checking for updates and uninstalling calendar types, which should be done by core. 6) Removed JS from the calendar_month block as there is no non-JS alternative provided and the JS written does not make use of the YUI library to ensure multiple browser support. 7) Removed code from the base class responsible for creating timestamps that are saved in the DB. 8) Added PHPDocs. Note: In the original patch we are editing core functions responsible for saving time in the database in the calendar base class. This is very dangerous, we do not want to touch these functions as it could cause a complete fubar of the database. There are places we are forcing the use of the gregorian calendar as we are passing dates generated by the PHP date function, where as sometimes we pass dates from usergetdate (which was being overwritten to return the date specific to the calendar). We can not expect third party modules to change the calendar type depending on the format they pass to these functions.
365 lines
15 KiB
PHP
365 lines
15 KiB
PHP
<?php
|
|
|
|
function cancel_email_update($userid) {
|
|
unset_user_preference('newemail', $userid);
|
|
unset_user_preference('newemailkey', $userid);
|
|
unset_user_preference('newemailattemptsleft', $userid);
|
|
}
|
|
|
|
function useredit_load_preferences(&$user, $reload=true) {
|
|
global $USER;
|
|
|
|
if (!empty($user->id)) {
|
|
if ($reload and $USER->id == $user->id) {
|
|
// reload preferences in case it was changed in other session
|
|
unset($USER->preference);
|
|
}
|
|
|
|
if ($preferences = get_user_preferences(null, null, $user->id)) {
|
|
foreach($preferences as $name=>$value) {
|
|
$user->{'preference_'.$name} = $value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function useredit_update_user_preference($usernew) {
|
|
$ua = (array)$usernew;
|
|
foreach($ua as $key=>$value) {
|
|
if (strpos($key, 'preference_') === 0) {
|
|
$name = substr($key, strlen('preference_'));
|
|
set_user_preference($name, $value, $usernew->id);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates the provided users profile picture based upon the expected fields
|
|
* returned from the edit or edit_advanced forms.
|
|
*
|
|
* @global moodle_database $DB
|
|
* @param stdClass $usernew An object that contains some information about the user being updated
|
|
* @param moodleform $userform The form that was submitted to edit the form
|
|
* @return bool True if the user was updated, false if it stayed the same.
|
|
*/
|
|
function useredit_update_picture(stdClass $usernew, moodleform $userform, $filemanageroptions = array()) {
|
|
global $CFG, $DB;
|
|
require_once("$CFG->libdir/gdlib.php");
|
|
|
|
$context = context_user::instance($usernew->id, MUST_EXIST);
|
|
$user = $DB->get_record('user', array('id'=>$usernew->id), 'id, picture', MUST_EXIST);
|
|
|
|
$newpicture = $user->picture;
|
|
// Get file_storage to process files.
|
|
$fs = get_file_storage();
|
|
if (!empty($usernew->deletepicture)) {
|
|
// The user has chosen to delete the selected users picture
|
|
$fs->delete_area_files($context->id, 'user', 'icon'); // drop all images in area
|
|
$newpicture = 0;
|
|
|
|
} else {
|
|
// Save newly uploaded file, this will avoid context mismatch for newly created users.
|
|
file_save_draft_area_files($usernew->imagefile, $context->id, 'user', 'newicon', 0, $filemanageroptions);
|
|
if (($iconfiles = $fs->get_area_files($context->id, 'user', 'newicon')) && count($iconfiles) == 2) {
|
|
// Get file which was uploaded in draft area
|
|
foreach ($iconfiles as $file) {
|
|
if (!$file->is_directory()) {
|
|
break;
|
|
}
|
|
}
|
|
// Copy file to temporary location and the send it for processing icon
|
|
if ($iconfile = $file->copy_content_to_temp()) {
|
|
// There is a new image that has been uploaded
|
|
// Process the new image and set the user to make use of it.
|
|
// NOTE: Uploaded images always take over Gravatar
|
|
$newpicture = (int)process_new_icon($context, 'user', 'icon', 0, $iconfile);
|
|
// Delete temporary file
|
|
@unlink($iconfile);
|
|
// Remove uploaded file.
|
|
$fs->delete_area_files($context->id, 'user', 'newicon');
|
|
} else {
|
|
// Something went wrong while creating temp file.
|
|
// Remove uploaded file.
|
|
$fs->delete_area_files($context->id, 'user', 'newicon');
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($newpicture != $user->picture) {
|
|
$DB->set_field('user', 'picture', $newpicture, array('id' => $user->id));
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function useredit_update_bounces($user, $usernew) {
|
|
if (!isset($usernew->email)) {
|
|
//locked field
|
|
return;
|
|
}
|
|
if (!isset($user->email) || $user->email !== $usernew->email) {
|
|
set_bounce_count($usernew,true);
|
|
set_send_count($usernew,true);
|
|
}
|
|
}
|
|
|
|
function useredit_update_trackforums($user, $usernew) {
|
|
global $CFG;
|
|
if (!isset($usernew->trackforums)) {
|
|
//locked field
|
|
return;
|
|
}
|
|
if ((!isset($user->trackforums) || ($usernew->trackforums != $user->trackforums)) and !$usernew->trackforums) {
|
|
require_once($CFG->dirroot.'/mod/forum/lib.php');
|
|
forum_tp_delete_read_records($usernew->id);
|
|
}
|
|
}
|
|
|
|
function useredit_update_interests($user, $interests) {
|
|
tag_set('user', $user->id, $interests);
|
|
}
|
|
|
|
function useredit_shared_definition(&$mform, $editoroptions = null, $filemanageroptions = null) {
|
|
global $CFG, $USER, $DB;
|
|
|
|
$user = $DB->get_record('user', array('id' => $USER->id));
|
|
useredit_load_preferences($user, false);
|
|
|
|
$strrequired = get_string('required');
|
|
|
|
$nameformat = $CFG->fullnamedisplay;
|
|
if ($nameformat == 'language') {
|
|
$nameformat = get_string('fullnamedisplay');
|
|
}
|
|
|
|
$necessarynames = array('firstname', 'lastname');
|
|
$enablednames = array_diff(get_all_user_name_fields(), $necessarynames);
|
|
// Get a list of all of the enabled names.
|
|
$enabledadditionalusernames = array();
|
|
foreach ($enablednames as $enabledname) {
|
|
if (strpos($CFG->fullnamedisplay, $enabledname) !== false) {
|
|
$enabledadditionalusernames[] = $enabledname;
|
|
}
|
|
}
|
|
|
|
$combinednames = array_merge($necessarynames, $enabledadditionalusernames);
|
|
$requirednames = order_in_string($combinednames, $nameformat);
|
|
foreach ($necessarynames as $necessaryname) {
|
|
if (!in_array($necessaryname, $requirednames)) {
|
|
$requirednames = order_in_string($combinednames, get_string('fullnamedisplay'));
|
|
}
|
|
}
|
|
foreach ($requirednames as $fullname) {
|
|
$mform->addElement('text', $fullname, get_string($fullname), 'maxlength="100" size="30"');
|
|
$mform->setType($fullname, PARAM_NOTAGS);
|
|
}
|
|
|
|
$mform->addRule('firstname', $strrequired, 'required', null, 'client');
|
|
$mform->addRule('lastname', $strrequired, 'required', null, 'client');
|
|
|
|
$morenames = array_diff($enabledadditionalusernames, $requirednames);
|
|
foreach ($morenames as $addname) {
|
|
$mform->addElement('text', $addname, get_string($addname), 'maxlength="100" size="30"');
|
|
$mform->setType($addname, PARAM_NOTAGS);
|
|
}
|
|
|
|
// Do not show email field if change confirmation is pending
|
|
if (!empty($CFG->emailchangeconfirmation) and !empty($user->preference_newemail)) {
|
|
$notice = get_string('emailchangepending', 'auth', $user);
|
|
$notice .= '<br /><a href="edit.php?cancelemailchange=1&id='.$user->id.'">'
|
|
. get_string('emailchangecancel', 'auth') . '</a>';
|
|
$mform->addElement('static', 'emailpending', get_string('email'), $notice);
|
|
} else {
|
|
$mform->addElement('text', 'email', get_string('email'), 'maxlength="100" size="30"');
|
|
$mform->addRule('email', $strrequired, 'required', null, 'client');
|
|
$mform->setType('email', PARAM_EMAIL);
|
|
}
|
|
|
|
$choices = array();
|
|
$choices['0'] = get_string('emaildisplayno');
|
|
$choices['1'] = get_string('emaildisplayyes');
|
|
$choices['2'] = get_string('emaildisplaycourse');
|
|
$mform->addElement('select', 'maildisplay', get_string('emaildisplay'), $choices);
|
|
$mform->setDefault('maildisplay', 2);
|
|
|
|
$choices = array();
|
|
$choices['0'] = get_string('textformat');
|
|
$choices['1'] = get_string('htmlformat');
|
|
$mform->addElement('select', 'mailformat', get_string('emailformat'), $choices);
|
|
$mform->setDefault('mailformat', 1);
|
|
|
|
if (!empty($CFG->allowusermailcharset)) {
|
|
$choices = array();
|
|
$charsets = get_list_of_charsets();
|
|
if (!empty($CFG->sitemailcharset)) {
|
|
$choices['0'] = get_string('site').' ('.$CFG->sitemailcharset.')';
|
|
} else {
|
|
$choices['0'] = get_string('site').' (UTF-8)';
|
|
}
|
|
$choices = array_merge($choices, $charsets);
|
|
$mform->addElement('select', 'preference_mailcharset', get_string('emailcharset'), $choices);
|
|
}
|
|
|
|
$choices = array();
|
|
$choices['0'] = get_string('emaildigestoff');
|
|
$choices['1'] = get_string('emaildigestcomplete');
|
|
$choices['2'] = get_string('emaildigestsubjects');
|
|
$mform->addElement('select', 'maildigest', get_string('emaildigest'), $choices);
|
|
$mform->setDefault('maildigest', 0);
|
|
$mform->addHelpButton('maildigest', 'emaildigest');
|
|
|
|
$choices = array();
|
|
$choices['1'] = get_string('autosubscribeyes');
|
|
$choices['0'] = get_string('autosubscribeno');
|
|
$mform->addElement('select', 'autosubscribe', get_string('autosubscribe'), $choices);
|
|
$mform->setDefault('autosubscribe', 1);
|
|
|
|
if (!empty($CFG->forum_trackreadposts)) {
|
|
$choices = array();
|
|
$choices['0'] = get_string('trackforumsno');
|
|
$choices['1'] = get_string('trackforumsyes');
|
|
$mform->addElement('select', 'trackforums', get_string('trackforums'), $choices);
|
|
$mform->setDefault('trackforums', 0);
|
|
}
|
|
|
|
$editors = editors_get_enabled();
|
|
if (count($editors) > 1) {
|
|
$choices = array();
|
|
$choices['0'] = get_string('texteditor');
|
|
$choices['1'] = get_string('htmleditor');
|
|
$mform->addElement('select', 'htmleditor', get_string('textediting'), $choices);
|
|
$mform->setDefault('htmleditor', 1);
|
|
} else {
|
|
$mform->addElement('hidden', 'htmleditor');
|
|
$mform->setDefault('htmleditor', 1);
|
|
$mform->setType('htmleditor', PARAM_INT);
|
|
}
|
|
|
|
$mform->addElement('text', 'city', get_string('city'), 'maxlength="120" size="21"');
|
|
$mform->setType('city', PARAM_TEXT);
|
|
if (!empty($CFG->defaultcity)) {
|
|
$mform->setDefault('city', $CFG->defaultcity);
|
|
}
|
|
|
|
$choices = get_string_manager()->get_list_of_countries();
|
|
$choices= array(''=>get_string('selectacountry').'...') + $choices;
|
|
$mform->addElement('select', 'country', get_string('selectacountry'), $choices);
|
|
if (!empty($CFG->country)) {
|
|
$mform->setDefault('country', $CFG->country);
|
|
}
|
|
|
|
$choices = get_list_of_timezones();
|
|
$choices['99'] = get_string('serverlocaltime');
|
|
if ($CFG->forcetimezone != 99) {
|
|
$mform->addElement('static', 'forcedtimezone', get_string('timezone'), $choices[$CFG->forcetimezone]);
|
|
} else {
|
|
$mform->addElement('select', 'timezone', get_string('timezone'), $choices);
|
|
$mform->setDefault('timezone', '99');
|
|
}
|
|
|
|
$mform->addElement('select', 'lang', get_string('preferredlanguage'), get_string_manager()->get_list_of_translations());
|
|
$mform->setDefault('lang', $CFG->lang);
|
|
|
|
// Multi-Calendar Support - see MDL-18375.
|
|
$mform->addElement('select', 'calendartype', get_string('preferredcalendar', 'calendar'), calendar_type_plugin_factory::get_list_of_calendar_types());
|
|
|
|
if (!empty($CFG->allowuserthemes)) {
|
|
$choices = array();
|
|
$choices[''] = get_string('default');
|
|
$themes = get_list_of_themes();
|
|
foreach ($themes as $key=>$theme) {
|
|
if (empty($theme->hidefromselector)) {
|
|
$choices[$key] = get_string('pluginname', 'theme_'.$theme->name);
|
|
}
|
|
}
|
|
$mform->addElement('select', 'theme', get_string('preferredtheme'), $choices);
|
|
}
|
|
|
|
$mform->addElement('editor', 'description_editor', get_string('userdescription'), null, $editoroptions);
|
|
$mform->setType('description_editor', PARAM_CLEANHTML);
|
|
$mform->addHelpButton('description_editor', 'userdescription');
|
|
|
|
if (empty($USER->newadminuser)) {
|
|
$mform->addElement('header', 'moodle_picture', get_string('pictureofuser'));
|
|
|
|
if (!empty($CFG->enablegravatar)) {
|
|
$mform->addElement('html', html_writer::tag('p', get_string('gravatarenabled')));
|
|
}
|
|
|
|
$mform->addElement('static', 'currentpicture', get_string('currentpicture'));
|
|
|
|
$mform->addElement('checkbox', 'deletepicture', get_string('delete'));
|
|
$mform->setDefault('deletepicture', 0);
|
|
|
|
$mform->addElement('filemanager', 'imagefile', get_string('newpicture'), '', $filemanageroptions);
|
|
$mform->addHelpButton('imagefile', 'newpicture');
|
|
|
|
$mform->addElement('text', 'imagealt', get_string('imagealt'), 'maxlength="100" size="30"');
|
|
$mform->setType('imagealt', PARAM_TEXT);
|
|
|
|
}
|
|
|
|
$alladditionalnames = array_diff(get_all_user_name_fields(), $necessarynames);
|
|
if (count($enabledadditionalusernames) < count($alladditionalnames)) {
|
|
$mform->addElement('header', 'moodle_additional_names', get_string('additionalnames'));
|
|
foreach ($alladditionalnames as $allname) {
|
|
if (!in_array($allname, $enabledadditionalusernames)) {
|
|
$mform->addElement('text', $allname, get_string($allname), 'maxlength="100" size="30"');
|
|
$mform->setType($allname, PARAM_NOTAGS);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (!empty($CFG->usetags) and empty($USER->newadminuser)) {
|
|
$mform->addElement('header', 'moodle_interests', get_string('interests'));
|
|
$mform->addElement('tags', 'interests', get_string('interestslist'), array('display' => 'noofficial'));
|
|
$mform->addHelpButton('interests', 'interestslist');
|
|
}
|
|
|
|
/// Moodle optional fields
|
|
$mform->addElement('header', 'moodle_optional', get_string('optional', 'form'));
|
|
|
|
$mform->addElement('text', 'url', get_string('webpage'), 'maxlength="255" size="50"');
|
|
$mform->setType('url', PARAM_URL);
|
|
|
|
$mform->addElement('text', 'icq', get_string('icqnumber'), 'maxlength="15" size="25"');
|
|
$mform->setType('icq', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'skype', get_string('skypeid'), 'maxlength="50" size="25"');
|
|
$mform->setType('skype', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'aim', get_string('aimid'), 'maxlength="50" size="25"');
|
|
$mform->setType('aim', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'yahoo', get_string('yahooid'), 'maxlength="50" size="25"');
|
|
$mform->setType('yahoo', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'msn', get_string('msnid'), 'maxlength="50" size="25"');
|
|
$mform->setType('msn', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'idnumber', get_string('idnumber'), 'maxlength="255" size="25"');
|
|
$mform->setType('idnumber', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'institution', get_string('institution'), 'maxlength="40" size="25"');
|
|
$mform->setType('institution', PARAM_TEXT);
|
|
|
|
$mform->addElement('text', 'department', get_string('department'), 'maxlength="30" size="25"');
|
|
$mform->setType('department', PARAM_TEXT);
|
|
|
|
$mform->addElement('text', 'phone1', get_string('phone'), 'maxlength="20" size="25"');
|
|
$mform->setType('phone1', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'phone2', get_string('phone2'), 'maxlength="20" size="25"');
|
|
$mform->setType('phone2', PARAM_NOTAGS);
|
|
|
|
$mform->addElement('text', 'address', get_string('address'), 'maxlength="70" size="25"');
|
|
$mform->setType('address', PARAM_TEXT);
|
|
|
|
|
|
}
|
|
|
|
|