diff --git a/wcfsetup/install/files/lib/acp/form/LabelGroupAddForm.class.php b/wcfsetup/install/files/lib/acp/form/LabelGroupAddForm.class.php index 32df844522b..f0f12ee1b4d 100644 --- a/wcfsetup/install/files/lib/acp/form/LabelGroupAddForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/LabelGroupAddForm.class.php @@ -129,12 +129,13 @@ public function readData() // get label object type handlers $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.label.objectType'); foreach ($objectTypes as $objectType) { - $this->labelObjectTypes[$objectType->objectTypeID] = $objectType->getProcessor(); - $this->labelObjectTypes[$objectType->objectTypeID]->setObjectTypeID($objectType->objectTypeID); - } + $handler = $objectType->getProcessor(); + \assert($handler instanceof ILabelObjectTypeHandler); + + $container = $handler->getContainerForObjectType($objectType); - foreach ($this->labelObjectTypes as $objectTypeID => $labelObjectType) { - $this->labelObjectTypeContainers[$objectTypeID] = $labelObjectType->getContainer(); + $this->labelObjectTypes[$objectType->objectTypeID] = $handler; + $this->labelObjectTypeContainers[$objectType->objectTypeID] = $container; } parent::readData(); diff --git a/wcfsetup/install/files/lib/system/label/object/type/AbstractLabelObjectTypeHandler.class.php b/wcfsetup/install/files/lib/system/label/object/type/AbstractLabelObjectTypeHandler.class.php index 79310cbd7eb..380b44ba6fe 100644 --- a/wcfsetup/install/files/lib/system/label/object/type/AbstractLabelObjectTypeHandler.class.php +++ b/wcfsetup/install/files/lib/system/label/object/type/AbstractLabelObjectTypeHandler.class.php @@ -2,6 +2,7 @@ namespace wcf\system\label\object\type; +use wcf\data\object\type\ObjectType; use wcf\system\SingletonFactory; /** @@ -16,36 +17,41 @@ abstract class AbstractLabelObjectTypeHandler extends SingletonFactory implement /** * label object type container * @var LabelObjectTypeContainer + * @deprecated 6.2 Use `getContainerForObjectType()` instead. */ public $container; /** * object type id * @var int + * @deprecated 6.2 Use `getContainerForObjectType()` instead. */ public $objectTypeID = 0; - /** - * @inheritDoc - */ + #[\Override] public function setObjectTypeID($objectTypeID) { $this->objectTypeID = $objectTypeID; } - /** - * @inheritDoc - */ + #[\Override] public function getObjectTypeID() { return $this->objectTypeID; } - /** - * @inheritDoc - */ + #[\Override] public function getContainer() { return $this->container; } + + #[\Override] + public function getContainerForObjectType(ObjectType $objectType): LabelObjectTypeContainer + { + // This exists for backwards-compatibility only; Implementations are + // expected to implement this method themselves. + $this->setObjectTypeID($objectType->objectTypeID); + return $this->getContainer(); + } } diff --git a/wcfsetup/install/files/lib/system/label/object/type/ILabelObjectTypeHandler.class.php b/wcfsetup/install/files/lib/system/label/object/type/ILabelObjectTypeHandler.class.php index 7fc04855d81..133a06e15cf 100644 --- a/wcfsetup/install/files/lib/system/label/object/type/ILabelObjectTypeHandler.class.php +++ b/wcfsetup/install/files/lib/system/label/object/type/ILabelObjectTypeHandler.class.php @@ -2,6 +2,8 @@ namespace wcf\system\label\object\type; +use wcf\data\object\type\ObjectType; + /** * Every label object type handler has to implement this interface. * @@ -11,11 +13,22 @@ */ interface ILabelObjectTypeHandler { + /** + * Provides a container object that groups all objects that can be assigned + * a label group. + * + * Implementations must not rely on any state provided by `getObjectTypeID()`. + * + * @since 6.2 + */ + public function getContainerForObjectType(ObjectType $objectType): LabelObjectTypeContainer; + /** * Sets object type id. * * @param int $objectTypeID * @return void + * @deprecated 6.2 Use `getContainerForObjectType()` instead. */ public function setObjectTypeID($objectTypeID); @@ -23,6 +36,7 @@ public function setObjectTypeID($objectTypeID); * Returns object type id. * * @return int + * @deprecated 6.2 Use `getContainerForObjectType()` instead. */ public function getObjectTypeID(); @@ -30,6 +44,7 @@ public function getObjectTypeID(); * Returns a label object type container. * * @return LabelObjectTypeContainer + * @deprecated 6.2 Use `getContainerForObjectType()` instead. */ public function getContainer();