From 651b7f179a2bf6c072a4f475ffa75bc45d34b6bf Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Mon, 3 Feb 2014 14:07:39 +0000 Subject: [PATCH] MDL-35373 mod_assign Add functionality to enforce onlinetext word limit Signed-off-by: Tony Butler --- .../lang/en/assignsubmission_onlinetext.php | 4 ++- mod/assign/submission/onlinetext/locallib.php | 34 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/mod/assign/submission/onlinetext/lang/en/assignsubmission_onlinetext.php b/mod/assign/submission/onlinetext/lang/en/assignsubmission_onlinetext.php index bb8cce2ac97..68ce4f54085 100644 --- a/mod/assign/submission/onlinetext/lang/en/assignsubmission_onlinetext.php +++ b/mod/assign/submission/onlinetext/lang/en/assignsubmission_onlinetext.php @@ -37,4 +37,6 @@ $string['numwords'] = '({$a} words)'; $string['numwordsforlog'] = 'Submission word count: {$a} words'; $string['wordlimit'] = 'Word limit'; $string['wordlimit_help'] = 'If online text submissions are enabled, this is the maximum number ' . - 'of words that each student will be allowed to submit.'; \ No newline at end of file + 'of words that each student will be allowed to submit.'; +$string['wordlimitexceeded'] = 'The word limit for this assignment is {$a->limit} words and you ' . + 'are attempting to submit {$a->count} words. Please review your submission and try again.'; \ No newline at end of file diff --git a/mod/assign/submission/onlinetext/locallib.php b/mod/assign/submission/onlinetext/locallib.php index 30fbdfa880c..790c0ec9d98 100644 --- a/mod/assign/submission/onlinetext/locallib.php +++ b/mod/assign/submission/onlinetext/locallib.php @@ -211,6 +211,13 @@ class assign_submission_onlinetext extends assign_submission_plugin { 'id', false); + // Check word count before submitting anything. + $exceeded = $this->check_word_count(trim($data->onlinetext)); + if ($exceeded) { + $this->set_error($exceeded); + return false; + } + $params = array( 'context' => context_module::instance($this->assignment->get_course_module()->id), 'courseid' => $this->assignment->get_course()->id, @@ -597,6 +604,33 @@ class assign_submission_onlinetext extends assign_submission_plugin { return array('onlinetext_editor' => $editorstructure); } + /** + * Compare word count of onlinetext submission to word limit, and return result. + * + * @param string $submissiontext Onlinetext submission text from editor + * @return string Error message if limit is enabled and exceeded, otherwise null + */ + public function check_word_count($submissiontext) { + global $OUTPUT; + + $wordlimitenabled = $this->get_config('wordlimitenabled'); + $wordlimit = $this->get_config('wordlimit'); + + if ($wordlimitenabled == 0) { + return null; + } + + // Count words and compare to limit. + $wordcount = count_words($submissiontext); + if ($wordcount <= $wordlimit) { + return null; + } else { + $errormsg = get_string('wordlimitexceeded', 'assignsubmission_onlinetext', + array('limit' => $wordlimit, 'count' => $wordcount)); + return $OUTPUT->error_text($errormsg); + } + } + }