diff --git a/mod/assign/submission/onlinetext/locallib.php b/mod/assign/submission/onlinetext/locallib.php index 3013327977f..3cbb382a6ee 100644 --- a/mod/assign/submission/onlinetext/locallib.php +++ b/mod/assign/submission/onlinetext/locallib.php @@ -599,12 +599,17 @@ class assign_submission_onlinetext extends assign_submission_plugin { public function is_empty(stdClass $submission) { $onlinetextsubmission = $this->get_onlinetext_submission($submission->id); $wordcount = 0; + $hasinsertedresources = false; if (isset($onlinetextsubmission->onlinetext)) { $wordcount = count_words(trim($onlinetextsubmission->onlinetext)); + // Check if the online text submission contains video, audio or image elements + // that can be ignored and stripped by count_words(). + $hasinsertedresources = preg_match('/<\s*((video|audio)[^>]*>(.*?)<\s*\/\s*(video|audio)>)|(img[^>]*>(.*?))/', + trim($onlinetextsubmission->onlinetext)); } - return $wordcount == 0; + return $wordcount == 0 && !$hasinsertedresources; } /** @@ -621,12 +626,17 @@ class assign_submission_onlinetext extends assign_submission_plugin { return true; } $wordcount = 0; + $hasinsertedresources = false; if (isset($data->onlinetext_editor['text'])) { $wordcount = count_words(trim((string)$data->onlinetext_editor['text'])); + // Check if the online text submission contains video, audio or image elements + // that can be ignored and stripped by count_words(). + $hasinsertedresources = preg_match('/<\s*((video|audio)[^>]*>(.*?)<\s*\/\s*(video|audio)>)|(img[^>]*>(.*?))/', + trim((string)$data->onlinetext_editor['text'])); } - return $wordcount == 0; + return $wordcount == 0 && !$hasinsertedresources; } /** diff --git a/mod/assign/submission/onlinetext/tests/locallib_test.php b/mod/assign/submission/onlinetext/tests/locallib_test.php index 2448c39318a..19af03217a8 100644 --- a/mod/assign/submission/onlinetext/tests/locallib_test.php +++ b/mod/assign/submission/onlinetext/tests/locallib_test.php @@ -103,7 +103,10 @@ class assignsubmission_onlinetext_locallib_testcase extends advanced_testcase { 'Empty submission null' => [null, true], 'Value 0' => [0, false], 'String 0' => ['0', false], - 'Text' => ['Ai! laurië lantar lassi súrinen, yéni únótimë ve rámar aldaron!', false] + 'Text' => ['Ai! laurië lantar lassi súrinen, yéni únótimë ve rámar aldaron!', false], + 'Image' => ['', false], + 'Video' => ['', false], + 'Audio' => ['', false], ]; } }