Improve type of IFormDataProcessor::processObjectData() parameter
authorMatthias Schmidt <gravatronics@live.com>
Thu, 25 Jul 2019 16:39:09 +0000 (18:39 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Thu, 25 Jul 2019 16:39:09 +0000 (18:39 +0200)
See #2988

wcfsetup/install/files/lib/system/form/builder/data/FormDataHandler.class.php
wcfsetup/install/files/lib/system/form/builder/data/processor/AbstractFormDataProcessor.class.php
wcfsetup/install/files/lib/system/form/builder/data/processor/CustomFormDataProcessor.class.php
wcfsetup/install/files/lib/system/form/builder/data/processor/IFormDataProcessor.class.php

index 5fd0a23d81708f4a55114d04d77cbefdb1c9de44..32962e2e1c641c7ffa5d17d68db4fdcc07dc76e7 100644 (file)
@@ -57,9 +57,8 @@ class FormDataHandler implements IFormDataHandler {
         */
        public function getObjectData(IFormDocument $document, IStorableObject $object) {
                $data = $object->getData();
-               $objectId = $object->{$object::getDatabaseTableIndexName()};
                foreach ($this->processors as $processor) {
-                       $data = $processor->processObjectData($document, $data, $objectId);
+                       $data = $processor->processObjectData($document, $data, $object);
                        
                        if (!is_array($data)) {
                                if ($processor instanceof CustomFormDataProcessor) {
index 6e24e879b322cba46c561721c7f90d50491d0ee5..7309408cf9cef5632fd7fbe265aeabe1438b4c1f 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system\form\builder\data\processor;
+use wcf\data\IStorableObject;
 use wcf\system\form\builder\IFormDocument;
 
 /**
@@ -25,7 +26,7 @@ abstract class AbstractFormDataProcessor implements IFormDataProcessor {
        /**
         * @inheritDoc
         */
-       public function processObjectData(IFormDocument $document, array $data, $objectId = null) {
+       public function processObjectData(IFormDocument $document, array $data, IStorableObject $object) {
                return $data;
        }
 }
index 04599e92ee3b228991724fb7b52d06435412d9ac..1920721f76628fec38013cc97fb50a8ccd467515 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system\form\builder\data\processor;
+use wcf\data\IStorableObject;
 use wcf\system\form\builder\IFormDocument;
 
 /**
@@ -68,6 +69,7 @@ class CustomFormDataProcessor extends AbstractFormDataProcessor {
                                        ($parameterClass === null ? 'any' : "'" . $parameterClass->getName() . "'") . " parameter is expected."
                                );
                        }
+                       
                        if (!$parameters[1]->isArray()) {
                                throw new \InvalidArgumentException("The form data processor function's second parameter must be an array.");
                        }
@@ -93,10 +95,16 @@ class CustomFormDataProcessor extends AbstractFormDataProcessor {
                                        ($parameterClass === null ? 'any' : "'" . $parameterClass->getName() . "'") . " parameter is expected."
                                );
                        }
+                       
                        if (!$parameters[1]->isArray()) {
                                throw new \InvalidArgumentException("The object data processor function's second parameter must be an array.");
                        }
                        
+                       $parameterClass = $parameters[2]->getClass();
+                       if ($parameterClass === null || $parameterClass->getName() !== IStorableObject::class) {
+                               throw new \InvalidArgumentException("The object data processor function's third parameter must be an instance of '" . IStorableObject::class . "', instead " . ($parameterClass === null ? 'any' : "'" . $parameterClass->getName() . "'") . " parameter is expected.");
+                       }
+                       
                        $this->objectDataProcessor = $objectDataProcessor;
                }
        }
@@ -130,12 +138,12 @@ class CustomFormDataProcessor extends AbstractFormDataProcessor {
        /**
         * @inheritDoc
         */
-       public function processObjectData(IFormDocument $document, array $data, $objectId = null) {
+       public function processObjectData(IFormDocument $document, array $data, IStorableObject $object) {
                if ($this->objectDataProcessor === null) {
-                       return parent::processObjectData($document, $data, $objectId);
+                       return parent::processObjectData($document, $data, $object);
                }
                
-               $data = call_user_func($this->objectDataProcessor, $document, $data, $objectId);
+               $data = call_user_func($this->objectDataProcessor, $document, $data, $object);
                
                if (!is_array($data)) {
                        throw new \UnexpectedValueException("Field data processor '{$this->id}' does not return an array.");
index 21964b2e38970d2881350340a4a25c9622886c06..ab75c768e3620097673742ff6a0d883d32bb544b 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system\form\builder\data\processor;
+use wcf\data\IStorableObject;
 use wcf\system\form\builder\IFormDocument;
 
 /**
@@ -30,8 +31,8 @@ interface IFormDataProcessor {
         *
         * @param       IFormDocument   $document       documents whose field values will be set using the processed data
         * @param       array           $data           data before processing
-        * @param       null|integer    $objectId       id of the object the data belongs to
+        * @param       IStorableObject $object         object the data belongs to
         * @return      array                           data after processing
         */
-       public function processObjectData(IFormDocument $document, array $data, $objectId = null);
+       public function processObjectData(IFormDocument $document, array $data, IStorableObject $object);
 }