From e926b1e4cea9a366e82842bbd62cfb6d512659f1 Mon Sep 17 00:00:00 2001 From: Lee Bradley Date: Tue, 15 Mar 2022 16:21:38 +0000 Subject: [PATCH] Linkable Support: Replaces the "File" field with a `CloudinaryFile` field Overrides functionality in "sheadawson/silverstripe-linkable" module --- _config/linkable.yml | 12 ++++++++ src/Linkable/Extensions/Link.php | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 _config/linkable.yml create mode 100644 src/Linkable/Extensions/Link.php diff --git a/_config/linkable.yml b/_config/linkable.yml new file mode 100644 index 0000000..b91b887 --- /dev/null +++ b/_config/linkable.yml @@ -0,0 +1,12 @@ +--- +Name: silverstripecloudinarylinkable +After: + - '#silverstripecloudinarycore' +Only: + moduleexists: + - 'sheadawson/silverstripe-linkable' +--- + +Sheadawson\Linkable\Models\Link: + extensions: + - MadeHQ\Cloudinary\Linkable\Extensions\Link diff --git a/src/Linkable/Extensions/Link.php b/src/Linkable/Extensions/Link.php new file mode 100644 index 0000000..3d36248 --- /dev/null +++ b/src/Linkable/Extensions/Link.php @@ -0,0 +1,52 @@ + 'CloudinaryFile', + ]; + + /** + * Replaces the "File" field with Cloudinary Field + * + * @param FieldList $fields + */ + public function updateCMSFields(FieldList $fields) + { + $fields->removeByName('FileID'); + $fields->insertAfter( + 'Type', + Wrapper::create( + $this->owner->dbObject('CloudinaryFile')->scaffoldFormField('File') + ) + ->displayIf('Type') + ->isEqualTo('File') + ->end() + ); + } + + /** + * Overrides the response if "File" type is selected + * + * @param mixed $linkURL + */ + public function updateLinkURL(&$linkURL) + { + switch($this->owner->Type) { + case 'File': + $file = $this->owner->dbObject('CloudinaryFile'); + if ($file && $file->exists()) { + $linkURL = (string)$file; + } + } + } +}