mirror of
https://github.com/moodle/moodle.git
synced 2025-04-14 04:52:36 +02:00
MDL-76083 mod_data: Fix preset importer to remove existing fields.
* We should delete fields that have not been marked as to preserve. Co-authored by: Laurent David <laurent.david@moodle.com>
This commit is contained in:
parent
7577776565
commit
5f6d35e471
@ -283,17 +283,12 @@ abstract class preset_importer {
|
||||
}
|
||||
|
||||
// Get rid of all old unused data.
|
||||
if (!empty($preservedfields)) {
|
||||
foreach ($currentfields as $cid => $currentfield) {
|
||||
if (!array_key_exists($cid, $preservedfields)) {
|
||||
// Data not used anymore so wipe!
|
||||
print "Deleting field $currentfield->name<br />";
|
||||
|
||||
$id = $currentfield->id;
|
||||
// Why delete existing data records and related comments/ratings??
|
||||
$DB->delete_records('data_content', ['fieldid' => $id]);
|
||||
$DB->delete_records('data_fields', ['id' => $id]);
|
||||
}
|
||||
foreach ($currentfields as $cid => $currentfield) {
|
||||
if (!array_key_exists($cid, $this->fieldstoupdate)) {
|
||||
$id = $currentfield->id;
|
||||
// Why delete existing data records and related comments/ratings??
|
||||
$DB->delete_records('data_content', ['fieldid' => $id]);
|
||||
$DB->delete_records('data_fields', ['id' => $id]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2544,17 +2544,15 @@ abstract class data_preset_importer {
|
||||
}
|
||||
|
||||
/* Get rid of all old unused data */
|
||||
if (!empty($preservedfields)) {
|
||||
foreach ($currentfields as $cid => $currentfield) {
|
||||
if (!array_key_exists($cid, $preservedfields)) {
|
||||
/* Data not used anymore so wipe! */
|
||||
print "Deleting field $currentfield->name<br />";
|
||||
foreach ($currentfields as $cid => $currentfield) {
|
||||
if (!array_key_exists($cid, $preservedfields)) {
|
||||
/* Data not used anymore so wipe! */
|
||||
echo "Deleting field $currentfield->name<br />";
|
||||
|
||||
$id = $currentfield->id;
|
||||
//Why delete existing data records and related comments/ratings??
|
||||
$DB->delete_records('data_content', array('fieldid'=>$id));
|
||||
$DB->delete_records('data_fields', array('id'=>$id));
|
||||
}
|
||||
$id = $currentfield->id;
|
||||
// Why delete existing data records and related comments/ratings??
|
||||
$DB->delete_records('data_content', ['fieldid' => $id]);
|
||||
$DB->delete_records('data_fields', ['id' => $id]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,3 +161,20 @@ Feature: Users can import presets
|
||||
And I click on "Import preset and apply" "button"
|
||||
Then I should not see "Fields mappings"
|
||||
And I should see "Preset applied"
|
||||
|
||||
Scenario: Teacher can import from field page on a non-empty database and previous fields will be removed
|
||||
Given the following "mod_data > fields" exist:
|
||||
| database | type | name | description |
|
||||
| data1 | text | Test field name | Test field description |
|
||||
And I am on the "Mountain landscapes" "data activity" page logged in as teacher1
|
||||
And I follow "Presets"
|
||||
And I click on "Actions" "button"
|
||||
And I choose "Import preset" in the open action menu
|
||||
And I upload "mod/data/tests/fixtures/image_gallery_preset.zip" file to "Preset file" filemanager
|
||||
When I click on "Import preset and apply" "button"
|
||||
And I click on "Continue" "button"
|
||||
Then I should see "Preset applied."
|
||||
And I follow "Fields"
|
||||
And I should see "image"
|
||||
And I should see "title"
|
||||
And I should not see "Test field name"
|
||||
|
@ -238,3 +238,17 @@ Feature: Users can use predefined presets
|
||||
And I should see "Existing fields to be deleted: number"
|
||||
And I should not see "If fields to be deleted are of the same type as fields to be created"
|
||||
And I should see "If fields to be deleted are of the same type as new fields in the preset"
|
||||
|
||||
Scenario: Teacher can use a preset on a non-empty database and previous fields will be removed
|
||||
Given I am on the "Mountain landscapes" "data activity" page logged in as teacher1
|
||||
And I follow "Fields"
|
||||
And I should see "Test field name"
|
||||
And I follow "Presets"
|
||||
And I click on "fullname" "radio" in the "Image gallery" "table_row"
|
||||
And I click on "Use this preset" "button"
|
||||
And I should see "Existing fields to be deleted: Test field name"
|
||||
When I click on "Apply preset" "button"
|
||||
Then I should see "Preset applied."
|
||||
And I should see "image"
|
||||
And I should see "title"
|
||||
And I should not see "Test field name"
|
||||
|
Loading…
x
Reference in New Issue
Block a user