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],
];
}
}