diff --git a/README.md b/README.md index 549f83ac..dec38e82 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,11 @@ public function registerSchematicFieldModels() ## Changelog +###3.1.2### + - Sections are not imported when nothing has changed + - Fields are not imported when nothing has changed + - Field import is repeated after everything else has been imported to make sure sources are set correctly + ###3.1.1### - Folders are now CamelCased to add support for case-sensitive systems and PSR-4 (thanks to @ostark and @ukautz) diff --git a/src/Services/Fields.php b/src/Services/Fields.php index 186cdc41..d89c4f85 100644 --- a/src/Services/Fields.php +++ b/src/Services/Fields.php @@ -292,6 +292,14 @@ private function importFields(array $fieldDefinitions, FieldGroupModel $group) foreach ($fieldDefinitions as $fieldHandle => $fieldDef) { $field = $this->getFieldModel($fieldHandle); $schematicFieldModel = $fieldFactory->build($fieldDef['type']); + + if ($schematicFieldModel->getDefinition($field, true) === $fieldDef ) { + Craft::log(Craft::t('Skipping `{name}`, no changes detected', ['name' => $field->name])); + continue; + } + + Craft::log(Craft::t('Importing `{name}`', ['name' => $fieldDef['name']])); + $schematicFieldModel->populate($fieldDef, $field, $fieldHandle, $group); $this->saveFieldModel($field); } diff --git a/src/Services/Schematic.php b/src/Services/Schematic.php index 08b6672f..01e831ce 100644 --- a/src/Services/Schematic.php +++ b/src/Services/Schematic.php @@ -100,6 +100,7 @@ private function importDataModel(Data $model, $force) $sectionImportResult = Craft::app()->schematic_sections->import($model->getAttribute('sections'), $force); $userGroupImportResult = Craft::app()->schematic_userGroups->import($model->getAttribute('userGroups'), $force); $userImportResult = Craft::app()->schematic_users->import($model->getAttribute('users'), true); + $fieldImportResultFinal = Craft::app()->schematic_fields->import($model->getAttribute('fields'), $force); // Element index settings are supported from Craft 2.5 if (version_compare(CRAFT_VERSION, '2.5', '>=')) { @@ -116,6 +117,7 @@ private function importDataModel(Data $model, $force) $result->consume($sectionImportResult); $result->consume($userGroupImportResult); $result->consume($userImportResult); + $result->consume($fieldImportResultFinal); // Element index settings are supported from Craft 2.5 if (version_compare(CRAFT_VERSION, '2.5', '>=')) { diff --git a/src/Services/Sections.php b/src/Services/Sections.php index 7ae97aa6..f836d5f7 100644 --- a/src/Services/Sections.php +++ b/src/Services/Sections.php @@ -158,6 +158,11 @@ public function import(array $sectionDefinitions, $force = false) unset($sections[$sectionHandle]); + if($sectionDefinition === $this->getSectionDefinition($section, null)){ + Craft::log(Craft::t('Skipping `{name}`, no changes detected', ['name' => $section->name])); + continue; + } + if (!array_key_exists('locales', $sectionDefinition)) { $this->addError('`sections[handle].locales` must be defined'); @@ -170,6 +175,8 @@ public function import(array $sectionDefinitions, $force = false) continue; } + Craft::log(Craft::t('Importing section `{name}`', ['name' => $sectionDefinition['name']])); + $this->populateSection($section, $sectionDefinition, $sectionHandle); // Create initial section record