From 350d7b068657ea7c84ff68679b82e677ddafc98d Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 24 Jul 2018 16:28:27 +0800 Subject: [PATCH 1/4] MDL-50225 core: properly deprecate print_textarea --- lib/deprecatedlib.php | 25 ++++++++++--------------- lib/outputrenderers.php | 29 +++++++++++++++++++++++++++++ lib/upgrade.txt | 1 + 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/lib/deprecatedlib.php b/lib/deprecatedlib.php index daf12c48e66..1ee7e16549b 100644 --- a/lib/deprecatedlib.php +++ b/lib/deprecatedlib.php @@ -881,7 +881,10 @@ function print_side_block($heading='', $content='', $list=NULL, $icons=NULL, $fo /** * Prints a basic textarea field. * - * @deprecated since Moodle 2.0 + * This was 'deprecated' in 2.0, but not properly (there was no alternative) so the + * debugging message was commented out. + * + * @deprecated since Moodle 3.6 * * When using this function, you should * @@ -903,13 +906,12 @@ function print_textarea($unused, $rows, $cols, $width, $height, $name, $value='' /// However, you can set them to zero to override the mincols and minrows values below. // Disabling because there is not yet a viable $OUTPUT option for cases when mforms can't be used - // debugging('print_textarea() has been deprecated. You should be using mforms and the editor element.'); + debugging('print_textarea() is deprecated. Please use $OUTPUT->print_textarea() instead.', DEBUG_DEVELOPER); - global $CFG; + global $OUTPUT; $mincols = 65; $minrows = 10; - $str = ''; if ($id === '') { $id = 'edit-'.$name; @@ -922,19 +924,12 @@ function print_textarea($unused, $rows, $cols, $width, $height, $name, $value='' $cols = $mincols; } - editors_head_setup(); - $editor = editors_get_preferred_editor(FORMAT_HTML); - $editor->set_text($value); - $editor->use_editor($id, array('legacy'=>true)); - - $str .= "\n".''."\n"; - + $textarea = $OUTPUT->print_textarea($name, $id, $value, $rows, $cols); if ($return) { - return $str; + return $textarea; } - echo $str; + + echo $textarea; } /** diff --git a/lib/outputrenderers.php b/lib/outputrenderers.php index 1223ef64a8d..de9787645ce 100644 --- a/lib/outputrenderers.php +++ b/lib/outputrenderers.php @@ -1518,6 +1518,35 @@ class core_renderer extends renderer_base { return $this->render($menu); } + /** + * Returns the HTML for a basic textarea field. + * + * @param string $name Name to use for the textarea element + * @param string $id The id to use fort he textarea element + * @param string $value Initial content to display in the textarea + * @param int $rows Number of rows to display + * @param int $cols Number of columns to display + * @return string the HTML to display + */ + public function print_textarea($name, $id, $value, $rows, $cols) { + global $OUTPUT; + + editors_head_setup(); + $editor = editors_get_preferred_editor(FORMAT_HTML); + $editor->set_text($value); + $editor->use_editor($id, []); + + $context = [ + 'id' => $id, + 'name' => $name, + 'value' => $value, + 'rows' => $rows, + 'cols' => $cols + ]; + + return $OUTPUT->render_from_template('core_form/editor_textarea', $context); + } + /** * Renders an action menu component. * diff --git a/lib/upgrade.txt b/lib/upgrade.txt index f2e8d0b5243..b8be5ed8433 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -6,6 +6,7 @@ information provided here is intended especially for developers. * Custom AJAX handlers for the form autocomplete fields can now optionally return string in their processResults() callback. If a string is returned, it is displayed instead of the list if suggested items. This can be used, for example, to inform the user that there are too many items matching the current search criteria. +* The print_textarea() function has been deprecated. Please use $OUTPUT->print_textarea() instead. * The following functions have been finally deprecated and can not be used any more: - external_function_info() * Following api's have been removed in behat_config_manager, please use behat_config_util instead. From c1f7cf67f4e93be40d5c4e5355f88c4584de01fa Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Mon, 23 Jul 2018 18:27:42 +0800 Subject: [PATCH 2/4] MDL-50225 mod_wiki: removed unused file wiki/editors/html.php --- mod/wiki/editors/html.php | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 mod/wiki/editors/html.php diff --git a/mod/wiki/editors/html.php b/mod/wiki/editors/html.php deleted file mode 100644 index 96b4e80e66a..00000000000 --- a/mod/wiki/editors/html.php +++ /dev/null @@ -1,34 +0,0 @@ -heading(strtoupper(get_string('formathtml', 'wiki')), 3); - - $action = $CFG->wwwroot.'/mod/wiki/edit.php?pageid='.$pageid; - - if (!empty($section)) { - $action .= "§ion=".urlencode($section); - } - - echo $OUTPUT->container_start('container'); - echo '
'; - $textarea = print_textarea(true, 20, 100, 0, 0, "newcontent", $content, 0, true, '', 'form-textarea-advanced'); - echo $OUTPUT->container($textarea, 'wiki_editor'); - wiki_print_edit_form_default_fields('html', $pageid, $version, $upload, $deleteuploads); - echo '
'; - echo $OUTPUT->container_end(); -} From dc4dea0e40946d4d95fa6fd2bde91930674205e6 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 24 Jul 2018 14:02:13 +0800 Subject: [PATCH 3/4] MDL-50225 core: removed unused message bulk action files In core we now use a modal to perform these actions. I initially thought these were kept because they were a fall back if JS was disabled. However, the functionality is broken and doesn't work. Since we do not have to support non-JS anymore these files have simply been removed as well as relevant strings deprecated. --- lang/en/deprecated.txt | 15 +++ lang/en/message.php | 4 +- lang/en/moodle.php | 31 ++++--- user/message.html | 59 ------------ user/messageselect.php | 205 ----------------------------------------- 5 files changed, 34 insertions(+), 280 deletions(-) delete mode 100644 user/message.html delete mode 100644 user/messageselect.php diff --git a/lang/en/deprecated.txt b/lang/en/deprecated.txt index d3b31d187aa..5a3e19451a1 100644 --- a/lang/en/deprecated.txt +++ b/lang/en/deprecated.txt @@ -120,3 +120,18 @@ selectnotestate,core_notes extendenrol,core groupextendenrol,core virusfounduser,core_antivirus +formattexttype,core +currentlyselectedusers,core +emailuserhasnone,core +emaildisplayhidden,core +sitemessage,core +coursemessage,core +addedrecip,core +addedrecips,core +messagingdisabled,core_message +messagedselectedcountusersfailed,core +backtoparticipants,core +keepsearching,core +allfieldsrequired,core +previewhtml,core +messagedselecteduserfailed,core diff --git a/lang/en/message.php b/lang/en/message.php index 917d352ef9d..5428f689275 100644 --- a/lang/en/message.php +++ b/lang/en/message.php @@ -72,7 +72,6 @@ $string['message'] = 'Message'; $string['messagepreferences'] = 'Message preferences'; $string['messages'] = 'Messages'; $string['messagingdatahasnotbeenmigrated'] = 'Your messages are temporarily unavailable due to upgrades in the messaging infrastructure. Please wait for them to be migrated.'; -$string['messagingdisabled'] = 'Messaging is disabled on this site, emails will be sent instead'; $string['newonlymsg'] = 'Show only new'; $string['newmessage'] = 'New message'; $string['newmessagesearch'] = 'Select or search for a contact to send a new message.'; @@ -179,3 +178,6 @@ $string['viewnotificationresource'] = 'Go to: {$a}'; $string['viewunreadmessageswith'] = 'View unread messages with {$a}'; $string['writeamessage'] = 'Write a message...'; $string['you'] = 'You:'; + +// Deprecated since Moodle 3.6. +$string['messagingdisabled'] = 'Messaging is disabled on this site, emails will be sent instead'; diff --git a/lang/en/moodle.php b/lang/en/moodle.php index 84b7020e4fd..df329321d0f 100644 --- a/lang/en/moodle.php +++ b/lang/en/moodle.php @@ -51,8 +51,6 @@ $string['addcountertousername'] = 'Create user by adding number to username'; $string['addcreator'] = 'Add course creator'; $string['adddots'] = 'Add...'; $string['added'] = 'Added {$a}'; -$string['addedrecip'] = 'Added {$a} new recipient'; -$string['addedrecips'] = 'Added {$a} new recipients'; $string['addedtogroup'] = 'Added to group "{$a}"'; $string['addedtogroupnot'] = 'Not added to group "{$a}"'; $string['addedtogroupnotenrolled'] = 'Not added to group "{$a}", because not enrolled in course'; @@ -127,7 +125,6 @@ $string['allactions'] = 'All actions'; $string['allactivities'] = 'All activities'; $string['allcategories'] = 'All categories'; $string['alldays'] = 'All days'; -$string['allfieldsrequired'] = 'All fields are required'; $string['allfiles'] = 'All files'; $string['allgroups'] = 'All groups'; $string['allchanges'] = 'All changes'; @@ -173,7 +170,6 @@ $string['backto'] = 'Back to {$a}'; $string['backtocourselisting'] = 'Back to course listing'; $string['backtohome'] = 'Back to the site home'; $string['backtopageyouwereon'] = 'Back to the page you were on'; -$string['backtoparticipants'] = 'Back to participants list'; $string['backup'] = 'Backup'; $string['backupactivehelp'] = 'Choose whether or not to do automated backups.'; $string['backupcancelled'] = 'Backup cancelled'; @@ -347,7 +343,6 @@ $string['courseoverviewfilesext'] = 'Course summary files extensions'; $string['courseoverviewfileslimit'] = 'Course summary files limit'; $string['courseoverviewfiles_help'] = 'Course summary files, such as images, are displayed in the list of courses together with the summary.'; $string['courseinfo'] = 'Course info'; -$string['coursemessage'] = 'Message course users'; $string['coursenotaccessible'] = 'This course does not allow public access'; $string['courselegacyfiles'] = 'Legacy course files'; $string['courselegacyfiles_help'] = 'The course files area provides some backward compatibility with Moodle 1.9 and earlier. All files in this area are always accessible to all participants in the course (whether you link to them or not) and there is no way to know where any of these files are being used in Moodle. @@ -437,7 +432,6 @@ $string['currentcourseadding'] = 'Current course, adding data to it'; $string['currentcoursedeleting'] = 'Current course, deleting it first'; $string['currentlanguage'] = 'Current language'; $string['currentlocaltime'] = 'your current local time'; -$string['currentlyselectedusers'] = 'Currently selected users'; $string['currentpicture'] = 'Current picture'; $string['currentrelease'] = 'Current release information'; $string['currentversion'] = 'Current version'; @@ -632,7 +626,6 @@ $string['emaildisableclick'] = 'Click here to disable all email from being sent $string['emaildisplay'] = 'Email display'; $string['emaildisplay_help'] = 'Privileged users (such as teachers and managers) will always be able to see your email address.'; $string['emaildisplaycourse'] = 'Allow only other course members to see my email address'; -$string['emaildisplayhidden'] = 'Email hidden'; $string['emaildisplayno'] = 'Hide my email address from non-privileged users'; $string['emaildisplayyes'] = 'Allow everyone to see my email address'; $string['emailenable'] = 'This email address is enabled'; @@ -726,7 +719,6 @@ $string['emailresetconfirmsent'] = 'An email has been sent to your address at - - - - -box_start(); ?> - - - - - - - - - - - - -
- : - - -
- '; - ?> -
- - -
-box_end(); ?> - -emailto[$id])) { - foreach ($SESSION->emailto[$id] as $user) { - echo ''; - // Check to see if we should be showing the email address. - if ($user->maildisplay == 0) { // 0 = don't display my email to anyone. - echo ''; - } - } - else { - echo ''; - } -?> -
'.fullname($user,true).'' . get_string('emaildisplayhidden') . ''; - } else { - echo ''.$user->email.''; - } - if (empty($user->email)) { - $error = get_string('emailuserhasnone'); - } - if (!empty($error)) { - echo $OUTPUT->pix_icon('t/emailno', $error); - unset($error); - } - echo '
'.get_string('nousersyet').'
- diff --git a/user/messageselect.php b/user/messageselect.php deleted file mode 100644 index 9d7412d428c..00000000000 --- a/user/messageselect.php +++ /dev/null @@ -1,205 +0,0 @@ -. - -/** - * This file is part of the User section Moodle - * - * @copyright 1999 Martin Dougiamas http://dougiamas.com - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @package core_user - */ - -require_once('../config.php'); -require_once($CFG->dirroot.'/message/lib.php'); -require_once($CFG->dirroot . '/course/lib.php'); - -$id = required_param('id', PARAM_INT); -$messagebody = optional_param('messagebody', '', PARAM_CLEANHTML); -$send = optional_param('send', '', PARAM_BOOL); -$preview = optional_param('preview', '', PARAM_BOOL); -$edit = optional_param('edit', '', PARAM_BOOL); -$returnto = optional_param('returnto', '', PARAM_LOCALURL); -$format = optional_param('format', FORMAT_MOODLE, PARAM_INT); -$deluser = optional_param('deluser', 0, PARAM_INT); - -$url = new moodle_url('/user/messageselect.php', array('id' => $id)); -if ($messagebody !== '') { - $url->param('messagebody', $messagebody); -} -if ($send !== '') { - $url->param('send', $send); -} -if ($preview !== '') { - $url->param('preview', $preview); -} -if ($edit !== '') { - $url->param('edit', $edit); -} -if ($returnto !== '') { - $url->param('returnto', $returnto); -} -if ($format !== FORMAT_MOODLE) { - $url->param('format', $format); -} -if ($deluser !== 0) { - $url->param('deluser', $deluser); -} -$PAGE->set_url($url); - -if (!$course = $DB->get_record('course', array('id' => $id))) { - print_error('invalidcourseid'); -} - -require_login($course); - -$coursecontext = context_course::instance($id); // Course context. -$systemcontext = context_system::instance(); // SYSTEM context. -require_capability('moodle/course:bulkmessaging', $coursecontext); - -if (empty($SESSION->emailto)) { - $SESSION->emailto = array(); -} -if (!array_key_exists($id, $SESSION->emailto)) { - $SESSION->emailto[$id] = array(); -} - -if ($deluser) { - if (array_key_exists($id, $SESSION->emailto) && array_key_exists($deluser, $SESSION->emailto[$id])) { - unset($SESSION->emailto[$id][$deluser]); - } -} - -if (empty($SESSION->emailselect[$id]) || $messagebody) { - $SESSION->emailselect[$id] = array('messagebody' => $messagebody); -} - -$messagebody = $SESSION->emailselect[$id]['messagebody']; - -$count = 0; - -if ($data = data_submitted()) { - require_sesskey(); - $namefields = get_all_user_name_fields(true); - foreach ($data as $k => $v) { - if (preg_match('/^(user|teacher)(\d+)$/', $k, $m)) { - if (!array_key_exists($m[2], $SESSION->emailto[$id])) { - if ($user = $DB->get_record_select('user', "id = ?", array($m[2]), 'id, '. - $namefields . ', idnumber, email, mailformat, lastaccess, lang, '. - 'maildisplay, auth, suspended, deleted, emailstop, username')) { - $SESSION->emailto[$id][$m[2]] = $user; - $count++; - } - } - } - } -} - -if ($course->id == SITEID) { - $strtitle = get_string('sitemessage'); - $PAGE->set_pagelayout('admin'); -} else { - $strtitle = get_string('coursemessage'); - $PAGE->set_pagelayout('incourse'); -} - -$link = null; -if (course_can_view_participants($coursecontext) || course_can_view_participants($systemcontext)) { - $link = new moodle_url("/user/index.php", array('id' => $course->id)); -} -$PAGE->navbar->add(get_string('participants'), $link); -$PAGE->navbar->add($strtitle); -$PAGE->set_title($strtitle); -$PAGE->set_heading($strtitle); -echo $OUTPUT->header(); -// If messaging is disabled on site, we can still allow users with capabilities to send emails instead. -if (empty($CFG->messaging)) { - echo $OUTPUT->notification(get_string('messagingdisabled', 'message')); -} - -if ($count) { - if ($count == 1) { - $heading = get_string('addedrecip', 'moodle', $count); - } else { - $heading = get_string('addedrecips', 'moodle', $count); - } - echo $OUTPUT->heading($heading); -} - -if (!empty($messagebody) && !$edit && !$deluser && ($preview || $send)) { - require_sesskey(); - if (count($SESSION->emailto[$id])) { - if (!empty($preview)) { - echo '
- - - - -'; - echo "

".get_string('previewhtml')."

"; - echo "
\n".format_text($messagebody, $format)."\n
\n"; - echo '

'."\n"; - echo '

'; - echo "\n
"; - } else if (!empty($send)) { - $fails = array(); - foreach ($SESSION->emailto[$id] as $user) { - if (!message_post_message($USER, $user, $messagebody, $format)) { - $user->fullname = fullname($user); - $fails[] = get_string('messagedselecteduserfailed', 'moodle', $user); - }; - } - if (empty($fails)) { - echo $OUTPUT->heading(get_string('messagedselectedusers')); - unset($SESSION->emailto[$id]); - unset($SESSION->emailselect[$id]); - } else { - echo $OUTPUT->heading(get_string('messagedselectedcountusersfailed', 'moodle', count($fails))); - echo '
    '; - foreach ($fails as $f) { - echo '
  • ', $f, '
  • '; - } - echo '
'; - } - echo '

'.get_string('backtoparticipants').'

'; - } - echo $OUTPUT->footer(); - exit; - } else { - echo $OUTPUT->notification(get_string('nousersyet')); - } -} - -echo '

'.get_string("keepsearching").''. - ((count($SESSION->emailto[$id])) ? ', '.get_string('usemessageform') : '').'

'; - -if ((!empty($send) || !empty($preview) || !empty($edit)) && (empty($messagebody))) { - echo $OUTPUT->notification(get_string('allfieldsrequired')); -} - -if (count($SESSION->emailto[$id])) { - require_sesskey(); - require("message.html"); -} - -$PAGE->requires->yui_module('moodle-core-formchangechecker', - 'M.core_formchangechecker.init', - array(array( - 'formid' => 'theform' - )) -); -$PAGE->requires->string_for_js('changesmadereallygoaway', 'moodle'); - -echo $OUTPUT->footer(); From 4d67fe61613d90287f4bd89f6efb3bcd786ddc63 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 24 Jul 2018 16:28:01 +0800 Subject: [PATCH 4/4] MDL-50225 core: replace usages of print_textarea() --- lib/form/htmleditor.php | 18 +++++++----------- mod/feedback/show_nonrespondents.php | 8 ++++++-- mod/wiki/editors/wiki_editor.php | 3 ++- mod/wiki/instancecomments.php | 6 +++++- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/form/htmleditor.php b/lib/form/htmleditor.php index 32353d67376..c3aeb405d4b 100644 --- a/lib/form/htmleditor.php +++ b/lib/form/htmleditor.php @@ -88,21 +88,17 @@ class MoodleQuickForm_htmleditor extends MoodleQuickForm_textarea{ * * @return string */ - function toHtml(){ + public function toHtml() { + global $OUTPUT; + if ($this->_flagFrozen) { return $this->getFrozenHtml(); } else { + $value = preg_replace("/(\r\n|\n|\r)/", ' ', $this->getValue()); + return $this->_getTabs() . - print_textarea(true, - $this->_options['rows'], - $this->_options['cols'], - $this->_options['width'], - $this->_options['height'], - $this->getName(), - preg_replace("/(\r\n|\n|\r)/", ' ',$this->getValue()), - 0, // unused anymore - true, - $this->getAttribute('id')); + $OUTPUT->print_textarea($this->getName(), $this->getAttribute('id'), $value, $this->_options['rows'], + $this->_options['cols']); } } diff --git a/mod/feedback/show_nonrespondents.php b/mod/feedback/show_nonrespondents.php index d6297362dd3..8be8e65cc21 100644 --- a/mod/feedback/show_nonrespondents.php +++ b/mod/feedback/show_nonrespondents.php @@ -31,7 +31,7 @@ require_once($CFG->libdir.'/tablelib.php'); //////////////////////////////////////////////////////// $id = required_param('id', PARAM_INT); $subject = optional_param('subject', '', PARAM_CLEANHTML); -$message = optional_param('message', '', PARAM_CLEANHTML); +$message = optional_param_array('message', '', PARAM_CLEANHTML); $format = optional_param('format', FORMAT_MOODLE, PARAM_INT); $messageuser = optional_param_array('messageuser', false, PARAM_INT); $action = optional_param('action', '', PARAM_ALPHA); @@ -44,6 +44,10 @@ $current_tab = 'nonrespondents'; //get the objects //////////////////////////////////////////////////////// +if ($message) { + $message = $message['text']; +} + list ($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback'); if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { print_error('invalidcoursemodule'); @@ -275,7 +279,7 @@ if (empty($students)) { echo ''; echo ''; echo ''; - print_textarea(true, 15, 25, 30, 10, "message", $message); + echo $OUTPUT->print_textarea('message', 'edit-message', $message, 15, 25); print_string('formathtml'); echo ''; echo '
'; diff --git a/mod/wiki/editors/wiki_editor.php b/mod/wiki/editors/wiki_editor.php index 07166e4cf91..d68d9acc89f 100644 --- a/mod/wiki/editors/wiki_editor.php +++ b/mod/wiki/editors/wiki_editor.php @@ -75,7 +75,8 @@ function wiki_print_editor_wiki($pageid, $content, $editor, $version = -1, $sect echo $OUTPUT->container_start(); echo '
'; - echo $OUTPUT->container(print_textarea(false, 20, 60, 0, 0, "newcontent", $content, 0, true), false, 'wiki_editor'); + $textarea = $OUTPUT->print_textarea('newcontent', 'edit-newcontent', $content, 20, 60); + echo $OUTPUT->container($textarea, false, 'wiki_editor'); echo $OUTPUT->container_start(); wiki_print_edit_form_default_fields($editor, $pageid, $version, $upload, $deleteuploads); echo $OUTPUT->container_end(); diff --git a/mod/wiki/instancecomments.php b/mod/wiki/instancecomments.php index 85366c9691b..b2466b6b57a 100644 --- a/mod/wiki/instancecomments.php +++ b/mod/wiki/instancecomments.php @@ -41,9 +41,13 @@ $pageid = required_param('pageid', PARAM_TEXT); $action = optional_param('action', '', PARAM_ALPHANUMEXT); $id = optional_param('id', 0, PARAM_INT); $commentid = optional_param('commentid', 0, PARAM_INT); -$newcontent = optional_param('newcontent', '', PARAM_CLEANHTML); +$newcontent = optional_param_array('newcontent', '', PARAM_CLEANHTML); $confirm = optional_param('confirm', 0, PARAM_BOOL); +if ($newcontent) { + $newcontent = $newcontent['text']; +} + if (!$page = wiki_get_page($pageid)) { print_error('incorrectpageid', 'wiki'); }