MDL-68706 customfield_textarea: allow field content to be cleared.

This commit is contained in:
Paul Holden
2020-07-24 13:44:48 +01:00
parent d8b0be3eb3
commit ac7cb0921b
2 changed files with 36 additions and 1 deletions
@@ -96,7 +96,7 @@ class data_controller extends \core_customfield\data_controller {
$this->save();
}
if ($fromform['text']) {
if (array_key_exists('text', $fromform)) {
$textoptions = $this->value_editor_options();
$data = (object) ['field_editor' => $fromform];
$data = file_postupdate_standard_editor($data, 'field', $textoptions, $textoptions['context'],
@@ -145,6 +145,41 @@ class customfield_textarea_plugin_testcase extends advanced_testcase {
$handler->instance_form_save($data);
}
/**
* Test that instance form save empties the field content for blank values
*/
public function test_instance_form_save_clear(): void {
global $CFG;
require_once("{$CFG->dirroot}/customfield/tests/fixtures/test_instance_form.php");
$this->setAdminUser();
$handler = $this->cfcat->get_handler();
// Set our custom field to a known value.
$submitdata = (array) $this->courses[1] + [
'customfield_myfield1_editor' => ['text' => 'I can see it in your eyes', 'format' => FORMAT_HTML],
'customfield_myfield2_editor' => ['text' => 'I can see it in your smile', 'format' => FORMAT_HTML],
];
core_customfield_test_instance_form::mock_submit($submitdata, []);
$form = new core_customfield_test_instance_form('post', ['handler' => $handler, 'instance' => $this->courses[1]]);
$handler->instance_form_save($form->get_data());
$this->assertEquals($submitdata['customfield_myfield1_editor']['text'],
core_customfield\data_controller::create($this->cfdata[1]->get('id'))->export_value());
// Now empty our non-required field.
$submitdata['customfield_myfield1_editor']['text'] = '';
core_customfield_test_instance_form::mock_submit($submitdata, []);
$form = new core_customfield_test_instance_form('post', ['handler' => $handler, 'instance' => $this->courses[1]]);
$handler->instance_form_save($form->get_data());
$this->assertEmpty(core_customfield\data_controller::create($this->cfdata[1]->get('id'))->export_value());
}
/**
* Test for data_controller::get_value and export_value
*/