Add requiredObjectType option for user content provider
authorJoshua Rüsweg <josh@bastelstu.be>
Thu, 22 Nov 2018 10:01:43 +0000 (11:01 +0100)
committerJoshua Rüsweg <josh@bastelstu.be>
Sun, 25 Nov 2018 14:46:47 +0000 (15:46 +0100)
See #2716

wcfsetup/install/files/lib/system/worker/UserContentRemoveWorker.class.php

index 5b6a772f71e5c1e757a4156bdfbd942614e897fa..32d695acf2567576d5c53a3fa0ad672792f4f9a3 100644 (file)
@@ -120,6 +120,27 @@ class UserContentRemoveWorker extends AbstractWorker implements IWorker {
                        return 0;
                });
                
+               // add the required object types for the select content provider
+               if (is_array($this->contentProvider)) {
+                       foreach ($this->contentProvider as $contentProvider) {
+                               $objectType = ObjectTypeCache::getInstance()->getObjectTypeByName('com.woltlab.wcf.content.userContentProvider', $contentProvider);
+                               
+                               if ($objectType->requiredObjectType !== null) {
+                                       $objectTypeNames = explode(',', $objectType->requiredObjectType);
+                                       
+                                       foreach ($objectTypeNames as $objectTypeName) {
+                                               $objectType = ObjectTypeCache::getInstance()->getObjectTypeByName('com.woltlab.wcf.content.userContentProvider', $objectTypeName);
+                                               
+                                               if ($objectType === null) {
+                                                       throw new \RuntimeException('Unknown required object type "' . $objectTypeName . '" for object type "' . $contentProvider . '" given.');
+                                               }
+                                               
+                                               $this->contentProvider[] = $objectType;
+                                       }
+                               }
+                       }
+               }
+               
                foreach ($contentProviders as $contentProvider) {
                        if ($this->contentProvider === null || (is_array($this->contentProvider) && in_array($contentProvider->objectType, $this->contentProvider))) {
                                /** @var IUserContentProvider $processor */