From: Morik Date: Mon, 29 Oct 2018 17:51:48 +0000 (+0100) Subject: Add event in `DefaultUploadFileSaveStrategy::save()` X-Git-Tag: 5.2.0_Alpha_1~564 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=2d49a4677812cbe0a342ce9e7f3e56cc07fb33b8;p=GitHub%2FWoltLab%2FWCF.git Add event in `DefaultUploadFileSaveStrategy::save()` --- diff --git a/wcfsetup/install/files/lib/system/upload/DefaultUploadFileSaveStrategy.class.php b/wcfsetup/install/files/lib/system/upload/DefaultUploadFileSaveStrategy.class.php index e3b6b4d201..a414a36e62 100644 --- a/wcfsetup/install/files/lib/system/upload/DefaultUploadFileSaveStrategy.class.php +++ b/wcfsetup/install/files/lib/system/upload/DefaultUploadFileSaveStrategy.class.php @@ -136,6 +136,27 @@ class DefaultUploadFileSaveStrategy implements IUploadFileSaveStrategy { // move uploaded file if (@move_uploaded_file($uploadFile->getLocation(), $object->getLocation())) { try { + $parameters = [ + 'object' => $object, + 'updateData' => [] + ]; + + EventHandler::getInstance()->fireAction($this, 'save', $parameters); + + if (!is_array($parameters['updateData'])) { + throw new \UnexpectedValueException('$updateData is no longer an array after being manipulated by event listeners.'); + } + else { + $updateData = $parameters['updateData']; + } + + if (!is_object($parameters['object']) || get_class($parameters['object']) !== get_class($object)) { + throw new \UnexpectedValueException('$object is no longer of class ' . get_class($object) . ' after being manipulated by event listeners.'); + } + else { + $object = $parameters['object']; + } + // rotate image based on the exif data if (!empty($this->options['rotateImages'])) { if ($object->isImage) { @@ -177,18 +198,14 @@ class DefaultUploadFileSaveStrategy implements IUploadFileSaveStrategy { // update width, height and filesize of the object if ($newImage !== null && ($orientation == ExifUtil::ORIENTATION_90_ROTATE || $orientation == ExifUtil::ORIENTATION_270_ROTATE)) { - /** @var DatabaseObjectEditor $editor */ - $editor = new $this->editorClassName($object); - $editor->update([ + $updateData = array_merge($updateData, [ 'height' => $object->width, 'width' => $object->height, 'filesize' => filesize($object->getLocation()) ]); } else if ($newImage !== null && $orientation == ExifUtil::ORIENTATION_180_ROTATE) { - /** @var DatabaseObjectEditor $editor */ - $editor = new $this->editorClassName($object); - $editor->update([ + $updateData = array_merge($updateData, [ 'filesize' => filesize($object->getLocation()) ]); } @@ -198,6 +215,12 @@ class DefaultUploadFileSaveStrategy implements IUploadFileSaveStrategy { } } + if (!empty($updateData)) { + /** @var DatabaseObjectEditor $editor */ + $editor = new $this->editorClassName($object); + $editor->update($updateData); + } + $this->objects[$uploadFile->getInternalFileID()] = $object; } catch (SystemException $e) {