diff --git a/CHANGELOG.md b/CHANGELOG.md index c9a29fe2..de7545b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.8.2 +## mm/dd/2018 + +1. [](#bugfix) + * Added custom object support for filepicker field + # v1.8.1 ## 05/15/2018 diff --git a/classes/adminbasecontroller.php b/classes/adminbasecontroller.php index 5803a91c..1a4090ec 100644 --- a/classes/adminbasecontroller.php +++ b/classes/adminbasecontroller.php @@ -2,8 +2,10 @@ namespace Grav\Plugin\Admin; use Grav\Common\Config\Config; +use Grav\Common\Data\Data; use Grav\Common\Filesystem\Folder; use Grav\Common\Grav; +use Grav\Common\Media\Interfaces\MediaInterface; use Grav\Common\Page\Media; use Grav\Common\Utils; use Grav\Common\Plugin; @@ -743,8 +745,17 @@ class AdminBaseController return false; } - $data = $this->view === 'pages' ? $this->admin->page(true) : $this->prepareData([]); - $settings = $data->blueprints()->schema()->getProperty($this->post['name']); + $data = $this->view === 'pages' ? $this->admin->page(true) : $this->prepareData([]); + + if (null === $data) { + return false; + } + + if ($data instanceof Data) { + $settings = $data->blueprints()->schema()->getProperty($this->post['name']); + } elseif (method_exists($data, 'getBlueprint')) { + $settings = $data->getBlueprint()->schema()->getProperty($this->post['name']); + } if (isset($settings['folder'])) { $folder = $settings['folder']; @@ -754,19 +765,24 @@ class AdminBaseController // Do not use self@ outside of pages if ($this->view !== 'pages' && in_array($folder, ['@self', 'self@', '@self@'])) { - $this->admin->json_response = [ - 'status' => 'error', - 'message' => sprintf($this->admin->translate('PLUGIN_ADMIN.FILEUPLOAD_PREVENT_SELF', null), $folder) - ]; + if (!$data instanceof MediaInterface) { + $this->admin->json_response = [ + 'status' => 'error', + 'message' => sprintf($this->admin->translate('PLUGIN_ADMIN.FILEUPLOAD_PREVENT_SELF', null), $folder) + ]; - return false; + return false; + } + + $media = $data->getMedia(); + } else { + // Set destination + $folder = Folder::getRelativePath(rtrim($folder, '/')); + $folder = $this->admin->getPagePathFromToken($folder); + + $media = new Media($folder); } - // Set destination - $folder = Folder::getRelativePath(rtrim($folder, '/')); - $folder = $this->admin->getPagePathFromToken($folder); - - $media = new Media($folder); $available_files = []; $metadata = []; $thumbs = [];