Skip to content

Commit b9bca47

Browse files
committed
Deprecate pruneDeletedField() methods
Resolves #11054
1 parent fc103f0 commit b9bca47

File tree

8 files changed

+22
-224
lines changed

8 files changed

+22
-224
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Release Notes for Craft CMS 4
22

3+
## Unreleased
4+
5+
### Deprecated
6+
- Deprecated `craft\services\Categories::pruneDeletedField()`. ([#11054](https://github.com/craftcms/cms/discussions/11054))
7+
- Deprecated `craft\services\Globals::pruneDeletedField()`. ([#11054](https://github.com/craftcms/cms/discussions/11054))
8+
- Deprecated `craft\services\Sections::pruneDeletedField()`. ([#11054](https://github.com/craftcms/cms/discussions/11054))
9+
- Deprecated `craft\services\Tags::pruneDeletedField()`. ([#11054](https://github.com/craftcms/cms/discussions/11054))
10+
- Deprecated `craft\services\Users::pruneDeletedField()`. ([#11054](https://github.com/craftcms/cms/discussions/11054))
11+
- Deprecated `craft\services\Volumes::pruneDeletedField()`. ([#11054](https://github.com/craftcms/cms/discussions/11054))
12+
313
## 4.0.4 - 2022-06-03
414

515
### Added

src/base/ApplicationTrait.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
use craft\events\DefineFieldLayoutFieldsEvent;
2828
use craft\events\DeleteSiteEvent;
2929
use craft\events\EditionChangeEvent;
30-
use craft\events\FieldEvent;
3130
use craft\fieldlayoutelements\addresses\AddressField;
3231
use craft\fieldlayoutelements\addresses\CountryCodeField;
3332
use craft\fieldlayoutelements\addresses\LabelField;
@@ -1646,16 +1645,6 @@ private function _registerConfigListeners(): void
16461645
->onAdd(ProjectConfig::PATH_GRAPHQL_PUBLIC_TOKEN, $this->_proxy('gql', 'handleChangedPublicToken'))
16471646
->onUpdate(ProjectConfig::PATH_GRAPHQL_PUBLIC_TOKEN, $this->_proxy('gql', 'handleChangedPublicToken'));
16481647

1649-
// Prune deleted fields from their layouts
1650-
Event::on(Fields::class, Fields::EVENT_AFTER_DELETE_FIELD, function(FieldEvent $event) {
1651-
$this->getVolumes()->pruneDeletedField($event);
1652-
$this->getTags()->pruneDeletedField($event);
1653-
$this->getCategories()->pruneDeletedField($event);
1654-
$this->getUsers()->pruneDeletedField($event);
1655-
$this->getGlobals()->pruneDeletedField($event);
1656-
$this->getSections()->pruneDeletedField($event);
1657-
});
1658-
16591648
// Prune deleted sites from site settings
16601649
Event::on(Sites::class, Sites::EVENT_AFTER_DELETE_SITE, function(DeleteSiteEvent $event) {
16611650
$this->getRoutes()->handleDeletedSite($event);

src/services/Categories.php

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use craft\events\CategoryGroupEvent;
1717
use craft\events\ConfigEvent;
1818
use craft\events\DeleteSiteEvent;
19-
use craft\events\FieldEvent;
2019
use craft\helpers\App;
2120
use craft\helpers\ArrayHelper;
2221
use craft\helpers\Db;
@@ -626,43 +625,10 @@ public function handleDeletedCategoryGroup(ConfigEvent $event): void
626625
}
627626

628627
/**
629-
* Prune a deleted field from category group layouts.
630-
*
631-
* @param FieldEvent $event
628+
* @deprecated in 4.0.5. Unused fields will be pruned automatically as field layouts are resaved.
632629
*/
633-
public function pruneDeletedField(FieldEvent $event): void
630+
public function pruneDeletedField(): void
634631
{
635-
$field = $event->field;
636-
$fieldUid = $field->uid;
637-
638-
$projectConfig = Craft::$app->getProjectConfig();
639-
$categoryGroups = $projectConfig->get(ProjectConfig::PATH_CATEGORY_GROUPS);
640-
641-
// Engage stealth mode
642-
$projectConfig->muteEvents = true;
643-
644-
// Loop through the category groups and prune the UID from field layouts.
645-
if (is_array($categoryGroups)) {
646-
foreach ($categoryGroups as $categoryGroupUid => $categoryGroup) {
647-
if (!empty($categoryGroup['fieldLayouts'])) {
648-
foreach ($categoryGroup['fieldLayouts'] as $layoutUid => $layout) {
649-
if (!empty($layout['tabs'])) {
650-
foreach ($layout['tabs'] as $tabUid => $tab) {
651-
$projectConfig->remove(ProjectConfig::PATH_CATEGORY_GROUPS . '.' . $categoryGroupUid . '.fieldLayouts.' . $layoutUid . '.tabs.' . $tabUid . '.fields.' . $fieldUid, 'Prune deleted field');
652-
}
653-
}
654-
}
655-
}
656-
}
657-
}
658-
659-
// Nuke all the layout fields from the DB
660-
Db::delete(Table::FIELDLAYOUTFIELDS, [
661-
'fieldId' => $field->id,
662-
]);
663-
664-
// Allow events again
665-
$projectConfig->muteEvents = false;
666632
}
667633

668634
/**

src/services/Globals.php

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use craft\errors\ElementNotFoundException;
1616
use craft\errors\GlobalSetNotFoundException;
1717
use craft\events\ConfigEvent;
18-
use craft\events\FieldEvent;
1918
use craft\events\GlobalSetEvent;
2019
use craft\helpers\ArrayHelper;
2120
use craft\helpers\Db;
@@ -512,43 +511,10 @@ public function handleDeletedGlobalSet(ConfigEvent $event): void
512511
}
513512

514513
/**
515-
* Prune a deleted field from global set.
516-
*
517-
* @param FieldEvent $event
514+
* @deprecated in 4.0.5. Unused fields will be pruned automatically as field layouts are resaved.
518515
*/
519-
public function pruneDeletedField(FieldEvent $event): void
516+
public function pruneDeletedField(): void
520517
{
521-
$field = $event->field;
522-
$fieldUid = $field->uid;
523-
524-
$projectConfig = Craft::$app->getProjectConfig();
525-
$globalSets = $projectConfig->get(ProjectConfig::PATH_GLOBAL_SETS);
526-
527-
// Engage stealth mode
528-
$projectConfig->muteEvents = true;
529-
530-
// Loop through the global sets and prune the UID from field layouts.
531-
if (is_array($globalSets)) {
532-
foreach ($globalSets as $globalSetUid => $globalSet) {
533-
if (!empty($globalSet['fieldLayouts'])) {
534-
foreach ($globalSet['fieldLayouts'] as $layoutUid => $layout) {
535-
if (!empty($layout['tabs'])) {
536-
foreach ($layout['tabs'] as $tabUid => $tab) {
537-
$projectConfig->remove(ProjectConfig::PATH_GLOBAL_SETS . '.' . $globalSetUid . '.fieldLayouts.' . $layoutUid . '.tabs.' . $tabUid . '.fields.' . $fieldUid, 'Prune deleted field');
538-
}
539-
}
540-
}
541-
}
542-
}
543-
}
544-
545-
// Nuke all the layout fields from the DB
546-
Db::delete(Table::FIELDLAYOUTFIELDS, [
547-
'fieldId' => $field->id,
548-
]);
549-
550-
// Allow events again
551-
$projectConfig->muteEvents = false;
552518
}
553519

554520
/**

src/services/Sections.php

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use craft\events\ConfigEvent;
1919
use craft\events\DeleteSiteEvent;
2020
use craft\events\EntryTypeEvent;
21-
use craft\events\FieldEvent;
2221
use craft\events\SectionEvent;
2322
use craft\helpers\ArrayHelper;
2423
use craft\helpers\Db;
@@ -927,44 +926,10 @@ public function pruneDeletedSite(DeleteSiteEvent $event): void
927926
}
928927

929928
/**
930-
* Prune a deleted field from entry type layouts.
931-
*
932-
* @param FieldEvent $event
933-
* @since 3.1.20
929+
* @deprecated in 4.0.5. Unused fields will be pruned automatically as field layouts are resaved.
934930
*/
935-
public function pruneDeletedField(FieldEvent $event): void
931+
public function pruneDeletedField(): void
936932
{
937-
$field = $event->field;
938-
$fieldUid = $field->uid;
939-
940-
$projectConfig = Craft::$app->getProjectConfig();
941-
$entryTypes = $projectConfig->get(ProjectConfig::PATH_ENTRY_TYPES);
942-
943-
// Engage stealth mode
944-
$projectConfig->muteEvents = true;
945-
946-
// Loop through the tag groups and prune the UID from field layouts.
947-
if (is_array($entryTypes)) {
948-
foreach ($entryTypes as $entryTypeUid => $entryType) {
949-
if (!empty($entryType['fieldLayouts'])) {
950-
foreach ($entryType['fieldLayouts'] as $layoutUid => $layout) {
951-
if (!empty($layout['tabs'])) {
952-
foreach ($layout['tabs'] as $tabUid => $tab) {
953-
$projectConfig->remove(ProjectConfig::PATH_ENTRY_TYPES . '.' . $entryTypeUid . '.fieldLayouts.' . $layoutUid . '.tabs.' . $tabUid . '.fields.' . $fieldUid, 'Prune deleted field');
954-
}
955-
}
956-
}
957-
}
958-
}
959-
}
960-
961-
// Nuke all the layout fields from the DB
962-
Db::delete(Table::FIELDLAYOUTFIELDS, [
963-
'fieldId' => $field->id,
964-
]);
965-
966-
// Allow events again
967-
$projectConfig->muteEvents = false;
968933
}
969934

970935
// Entry Types

src/services/Tags.php

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use craft\elements\Tag;
1414
use craft\errors\TagGroupNotFoundException;
1515
use craft\events\ConfigEvent;
16-
use craft\events\FieldEvent;
1716
use craft\events\TagGroupEvent;
1817
use craft\helpers\ArrayHelper;
1918
use craft\helpers\Db;
@@ -406,43 +405,10 @@ public function handleDeletedTagGroup(ConfigEvent $event): void
406405
}
407406

408407
/**
409-
* Prune a deleted field from tag group layouts.
410-
*
411-
* @param FieldEvent $event
408+
* @deprecated in 4.0.5. Unused fields will be pruned automatically as field layouts are resaved.
412409
*/
413-
public function pruneDeletedField(FieldEvent $event): void
410+
public function pruneDeletedField(): void
414411
{
415-
$field = $event->field;
416-
$fieldUid = $field->uid;
417-
418-
$projectConfig = Craft::$app->getProjectConfig();
419-
$tagGroups = $projectConfig->get(ProjectConfig::PATH_TAG_GROUPS);
420-
421-
// Engage stealth mode
422-
$projectConfig->muteEvents = true;
423-
424-
// Loop through the tag groups and prune the UID from field layouts.
425-
if (is_array($tagGroups)) {
426-
foreach ($tagGroups as $tagGroupUid => $tagGroup) {
427-
if (!empty($tagGroup['fieldLayouts'])) {
428-
foreach ($tagGroup['fieldLayouts'] as $layoutUid => $layout) {
429-
if (!empty($layout['tabs'])) {
430-
foreach ($layout['tabs'] as $tabUid => $tab) {
431-
$projectConfig->remove(ProjectConfig::PATH_TAG_GROUPS . '.' . $tagGroupUid . '.fieldLayouts.' . $layoutUid . '.tabs.' . $tabUid . '.fields.' . $fieldUid, 'Prune deleted field');
432-
}
433-
}
434-
}
435-
}
436-
}
437-
}
438-
439-
// Nuke all the layout fields from the DB
440-
Db::delete(Table::FIELDLAYOUTFIELDS, [
441-
'fieldId' => $field->id,
442-
]);
443-
444-
// Allow events again
445-
$projectConfig->muteEvents = false;
446412
}
447413

448414
// Tags

src/services/Users.php

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use craft\errors\UserNotFoundException;
1818
use craft\errors\VolumeException;
1919
use craft\events\ConfigEvent;
20-
use craft\events\FieldEvent;
2120
use craft\events\UserAssignGroupEvent;
2221
use craft\events\UserEvent;
2322
use craft\events\UserGroupsAssignEvent;
@@ -1411,39 +1410,10 @@ public function canSuspend(User $suspender, User $suspendee): bool
14111410
}
14121411

14131412
/**
1414-
* Prune a deleted field from user group layout.
1415-
*
1416-
* @param FieldEvent $event
1413+
* @deprecated in 4.0.5. Unused fields will be pruned automatically as field layouts are resaved.
14171414
*/
1418-
public function pruneDeletedField(FieldEvent $event): void
1415+
public function pruneDeletedField(): void
14191416
{
1420-
$field = $event->field;
1421-
$fieldUid = $field->uid;
1422-
1423-
$projectConfig = Craft::$app->getProjectConfig();
1424-
$fieldLayouts = $projectConfig->get(ProjectConfig::PATH_USER_FIELD_LAYOUTS);
1425-
1426-
// Engage stealth mode
1427-
$projectConfig->muteEvents = true;
1428-
1429-
// Prune the user field layout.
1430-
if (is_array($fieldLayouts)) {
1431-
foreach ($fieldLayouts as $layoutUid => $layout) {
1432-
if (!empty($layout['tabs'])) {
1433-
foreach ($layout['tabs'] as $tabUid => $tab) {
1434-
$projectConfig->remove(ProjectConfig::PATH_USER_FIELD_LAYOUTS . '.' . $layoutUid . '.tabs.' . $tabUid . '.fields.' . $fieldUid, 'Prune deleted field');
1435-
}
1436-
}
1437-
}
1438-
}
1439-
1440-
// Nuke all the layout fields from the DB
1441-
Db::delete(Table::FIELDLAYOUTFIELDS, [
1442-
'fieldId' => $field->id,
1443-
]);
1444-
1445-
// Allow events again
1446-
$projectConfig->muteEvents = false;
14471417
}
14481418

14491419
/**

src/services/Volumes.php

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use craft\db\Table;
1515
use craft\elements\Asset;
1616
use craft\events\ConfigEvent;
17-
use craft\events\FieldEvent;
1817
use craft\events\VolumeEvent;
1918
use craft\fs\Temp;
2019
use craft\helpers\ArrayHelper;
@@ -574,43 +573,10 @@ public function handleDeletedVolume(ConfigEvent $event): void
574573
}
575574

576575
/**
577-
* Prune a deleted field from volume layouts.
578-
*
579-
* @param FieldEvent $event
576+
* @deprecated in 4.0.5. Unused fields will be pruned automatically as field layouts are resaved.
580577
*/
581-
public function pruneDeletedField(FieldEvent $event): void
578+
public function pruneDeletedField(): void
582579
{
583-
$field = $event->field;
584-
$fieldUid = $field->uid;
585-
586-
$projectConfig = Craft::$app->getProjectConfig();
587-
$volumes = $projectConfig->get(ProjectConfig::PATH_VOLUMES);
588-
589-
// Engage stealth mode
590-
$projectConfig->muteEvents = true;
591-
592-
// Loop through the volumes and prune the UID from field layouts.
593-
if (is_array($volumes)) {
594-
foreach ($volumes as $volumeUid => $volume) {
595-
if (!empty($volume['fieldLayouts'])) {
596-
foreach ($volume['fieldLayouts'] as $layoutUid => $layout) {
597-
if (!empty($layout['tabs'])) {
598-
foreach ($layout['tabs'] as $tabUid => $tab) {
599-
$projectConfig->remove(ProjectConfig::PATH_VOLUMES . '.' . $volumeUid . '.fieldLayouts.' . $layoutUid . '.tabs.' . $tabUid . '.fields.' . $fieldUid, 'Prune deleted field');
600-
}
601-
}
602-
}
603-
}
604-
}
605-
}
606-
607-
// Nuke all the layout fields from the DB
608-
Db::delete(Table::FIELDLAYOUTFIELDS, [
609-
'fieldId' => $field->id,
610-
]);
611-
612-
// Allow events again
613-
$projectConfig->muteEvents = false;
614580
}
615581

616582
/**

0 commit comments

Comments
 (0)