From e35e62addacd5e29d85eaf351bc7eddc3dc4edd4 Mon Sep 17 00:00:00 2001 From: colymba Date: Wed, 25 Jan 2017 14:14:04 +0200 Subject: [PATCH] Basic BulkUploader support for SS4 --- bulkUpload/code/BulkUploadField.php | 3 +- bulkUpload/code/BulkUploader.php | 29 ++++--- bulkUpload/code/BulkUploaderRequest.php | 40 ++++++++-- bulkUpload/javascript/GridFieldBulkUpload.js | 2 +- .../GridFieldBulkUpload_downloadtemplate.js | 30 ------- bulkUpload/templates/BulkUploadField.ss | 80 ------------------- .../Colymba/BulkUpload/BulkUploader.ss | 12 +-- composer.json | 5 +- 8 files changed, 65 insertions(+), 136 deletions(-) delete mode 100644 bulkUpload/javascript/GridFieldBulkUpload_downloadtemplate.js delete mode 100644 bulkUpload/templates/BulkUploadField.ss diff --git a/bulkUpload/code/BulkUploadField.php b/bulkUpload/code/BulkUploadField.php index 15ca462..69f5a7a 100644 --- a/bulkUpload/code/BulkUploadField.php +++ b/bulkUpload/code/BulkUploadField.php @@ -3,7 +3,8 @@ namespace Colymba\BulkUpload; use SilverStripe\Control\Controller; -use SilverStripe\Forms\UploadField; +//use SilverStripe\Forms\UploadField; +use SilverStripe\AssetAdmin\Forms\UploadField; /** * Custom UploadField used to override Link() diff --git a/bulkUpload/code/BulkUploader.php b/bulkUpload/code/BulkUploader.php index 69faff1..f585a63 100644 --- a/bulkUpload/code/BulkUploader.php +++ b/bulkUpload/code/BulkUploader.php @@ -230,7 +230,7 @@ class BulkUploader implements GridField_HTMLProvider, GridField_URLHandler /** * Returns the class name of container `DataObject` record. - * Either as set in the component config or fron the `Gridfield` `dataClass. + * Either as set in the component config or from the `Gridfield` `dataClass`. * * @return string */ @@ -314,21 +314,22 @@ class BulkUploader implements GridField_HTMLProvider, GridField_URLHandler $uploadField = BulkUploadField::create($gridField, $fileRelationName, '') ->setForm($gridField->getForm()) - ->setConfig('previewMaxWidth', 20) + /*->setConfig('previewMaxWidth', 20) ->setConfig('previewMaxHeight', 20) - ->setConfig('changeDetection', false) + ->setConfig('changeDetection', false)*/ ->setRecord(DataObject::create()) // avoid UploadField to get auto-config from the Page (e.g fix allowedMaxFileNumber) - ->setTemplate('BulkUploadField') + /*->setTemplate('BulkUploadField') ->setDownloadTemplateName('colymba-bulkuploaddownloadtemplate') ->setConfig('url', $gridField->Link('bulkupload/upload')) ->setConfig('urlSelectDialog', $gridField->Link('bulkupload/select')) ->setConfig('urlAttach', $gridField->Link('bulkupload/attach')) - ->setConfig('urlFileExists', $gridField->Link('bulkupload/fileexists')) + ->setConfig('urlFileExists', $gridField->Link('bulkupload/fileexists'))*/ ; + /* //set UploadField config foreach ($this->ufConfig as $key => $val) { $uploadField->setConfig($key, $val); @@ -343,6 +344,17 @@ class BulkUploader implements GridField_HTMLProvider, GridField_URLHandler foreach ($this->ufValidatorSetup as $fn => $param) { $uploadField->getValidator()->{$fn}($param); } + */ + + + + $uploadLink = $gridField->Link('bulkupload/upload'); + $schema['data']['createFileEndpoint'] = [ + 'url' => $uploadLink, + 'method' => 'post', + 'payloadFormat' => 'urlencoded', + ]; + $uploadField->setSchemaData($schema); return $uploadField; } @@ -410,13 +422,12 @@ class BulkUploader implements GridField_HTMLProvider, GridField_URLHandler $uploadField->ClearErrorButton = $clearErrorButton; $data = ArrayData::create(array( - 'Colspan' => count($gridField->getColumns()), - 'UploadField' => $uploadField->Field(), // call ->Field() to get requirements in right order + 'Colspan' => (count($gridField->getColumns())), + 'UploadField' => $uploadField->Field() // call ->Field() to get requirements in right order )); Requirements::css(BULKEDITTOOLS_UPLOAD_PATH . '/css/GridFieldBulkUpload.css'); Requirements::javascript(BULKEDITTOOLS_UPLOAD_PATH . '/javascript/GridFieldBulkUpload.js'); - Requirements::javascript(BULKEDITTOOLS_UPLOAD_PATH . '/javascript/GridFieldBulkUpload_downloadtemplate.js'); Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH . '/lang/js'); return array( @@ -453,7 +464,7 @@ class BulkUploader implements GridField_HTMLProvider, GridField_URLHandler public function handleBulkUpload($gridField, $request) { $controller = $gridField->getForm()->getController(); - $handler = new BulkUploaderRequest($gridField, $this, $controller); + $handler = new \Colymba\BulkUpload\BulkUploaderRequest($gridField, $this, $controller); return $handler->handleRequest($request, DataModel::inst()); } diff --git a/bulkUpload/code/BulkUploaderRequest.php b/bulkUpload/code/BulkUploaderRequest.php index a02fe43..b5e5726 100644 --- a/bulkUpload/code/BulkUploaderRequest.php +++ b/bulkUpload/code/BulkUploaderRequest.php @@ -12,6 +12,8 @@ use SilverStripe\Control\HTTPResponse; use SilverStripe\Dev\Deprecation; use SilverStripe\ORM\DataObject; +use SilverStripe\AssetAdmin\Controller\AssetAdmin; + /** * Handles request from the GridFieldBulkUpload component. * @@ -93,7 +95,7 @@ class BulkUploaderRequest extends RequestHandler * * @return string json */ - public function upload(HTTPRequest $request) + /*public function upload(HTTPRequest $request) { //create record $recordClass = $this->component->getRecordClassName($this->gridField); @@ -102,10 +104,6 @@ class BulkUploaderRequest extends RequestHandler // passes the current gridfield-instance to a call-back method on the new object $record->extend('onBulkUpload', $this->gridField); - if ($record->hasMethod('onBulkImageUpload')) { - Deprecation::notice('2.0', '"onBulkImageUpload" callback is deprecated, use "onBulkUpload" instead.'); - $record->extend('onBulkImageUpload', $this->gridField); - } //get uploadField and process upload $uploadField = $this->getUploadField(); @@ -131,6 +129,38 @@ class BulkUploaderRequest extends RequestHandler $this->contentTypeNegotiation($response); return $response; + }*/ + + public function upload(HTTPRequest $request) + { + // 1. DataObject + //create record + $recordClass = $this->component->getRecordClassName($this->gridField); + $record = Object::create($recordClass); + $record->write(); + + // passes the current gridfield-instance to a call-back method on the new object + $record->extend('onBulkUpload', $this->gridField); + + // 2. File Upload + $assetAdmin = AssetAdmin::singleton(); + $uploadResponse = $assetAdmin->apiCreateFile($request); + $file = null; + + if ($uploadResponse->getStatusCode() == 200) + { + $responseData = Convert::json2array($uploadResponse->getBody()); + $responseData = array_shift($responseData); + } + + // 3. Add File to Record + $fileRelationName = $this->component->getFileRelationName($this->gridField); + $record->{"{$fileRelationName}ID"} = $responseData['id']; + + // 4. Add to Gridfield List + $this->gridField->list->add($record); + + return $uploadResponse; } /** diff --git a/bulkUpload/javascript/GridFieldBulkUpload.js b/bulkUpload/javascript/GridFieldBulkUpload.js index 3f33182..3bc91c6 100644 --- a/bulkUpload/javascript/GridFieldBulkUpload.js +++ b/bulkUpload/javascript/GridFieldBulkUpload.js @@ -7,7 +7,7 @@ /** * Makes sure the component is at the top :) */ - $('.bulkUpload').entwine({ + $('.bulkUploader').entwine({ onmatch: function(){ var $tr = this.parents('thead').find('tr'), $component = this.clone(), diff --git a/bulkUpload/javascript/GridFieldBulkUpload_downloadtemplate.js b/bulkUpload/javascript/GridFieldBulkUpload_downloadtemplate.js deleted file mode 100644 index 11a51cb..0000000 --- a/bulkUpload/javascript/GridFieldBulkUpload_downloadtemplate.js +++ /dev/null @@ -1,30 +0,0 @@ -window.tmpl.cache['colymba-bulkuploaddownloadtemplate'] = tmpl( - '{% for (var i=0, files=o.files, l=files.length, file=files[0]; i' + - '
' + - '' + - '
' + - '
' + - '{% if (!file.error) { %}' + - '' + - '{% } %}' + - '' + - '{% if (file.error) { %}' + - '
' + - '
' + - '
' + - '{% } else { %}' + - '{% } %}' + - '
' + - '' + - '{% } %}' -); \ No newline at end of file diff --git a/bulkUpload/templates/BulkUploadField.ss b/bulkUpload/templates/BulkUploadField.ss deleted file mode 100644 index c913d6a..0000000 --- a/bulkUpload/templates/BulkUploadField.ss +++ /dev/null @@ -1,80 +0,0 @@ -<% if $canUpload || $canAttachExisting %> -
- <% if canUpload %> -
- <% if $multiple %> - <% _t('UploadField.DROPFILES', 'drop files') %> - <% else %> - <% _t('UploadField.DROPFILE', 'drop a file') %> - <% end_if %> -
- <% end_if %> -
- - <% if $canUpload %> - - <% else %> - - <% end_if %> - - <% if $canAttachExisting %> - - <% end_if %> - <% if $canUpload %> - <% if not $autoUpload %> - - <% end_if %> - <% end_if %> -
-
-
-
- -
- $FinishButton - $CancelButton - - $ClearErrorButton - $EditAllButton -
-<% end_if %> - - \ No newline at end of file diff --git a/bulkUpload/templates/Colymba/BulkUpload/BulkUploader.ss b/bulkUpload/templates/Colymba/BulkUpload/BulkUploader.ss index c23f98f..67b9044 100644 --- a/bulkUpload/templates/Colymba/BulkUpload/BulkUploader.ss +++ b/bulkUpload/templates/Colymba/BulkUpload/BulkUploader.ss @@ -1,9 +1,5 @@ - - - -
- $UploadField -
- - + + + $UploadField + \ No newline at end of file diff --git a/composer.json b/composer.json index 27e61c6..14813fe 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "colymba/gridfield-bulk-editing-tools", "type": "silverstripe-module", - "description": "SilverStripe 3 GridField component to upload images and edit records in bulk", + "description": "SilverStripe GridField component to upload images and edit records in bulk", "homepage": "https://github.com/colymba/GridFieldBulkEditingTools", "keywords": ["silverstripe", "bulk upload", "image upload", "gridfield bulk upload"], "license": "BSD Simplified", @@ -16,7 +16,8 @@ } ], "require": { - "silverstripe/framework": "^4.0@dev" + "silverstripe/framework": "^4.0@dev", + "silverstripe/asset-admin": "^4.0@dev" }, "extra": { "branch-alias": {