2014-04-05 18:54:50 +02:00
|
|
|
<?php
|
2017-01-25 13:27:11 +01:00
|
|
|
|
|
|
|
namespace Colymba\BulkUpload;
|
|
|
|
|
2018-03-14 21:21:54 +01:00
|
|
|
use Colymba\BulkTools\HTTPBulkToolsResponse;
|
2017-01-25 13:27:11 +01:00
|
|
|
use SilverStripe\Control\Controller;
|
|
|
|
use SilverStripe\Control\RequestHandler;
|
|
|
|
use SilverStripe\Control\HTTPRequest;
|
|
|
|
use SilverStripe\Control\HTTPResponse;
|
2017-12-13 10:35:09 +01:00
|
|
|
use SilverStripe\Core\Convert;
|
2020-05-15 16:56:58 +02:00
|
|
|
use SilverStripe\Versioned\RecursivePublishable;
|
2017-01-25 13:27:11 +01:00
|
|
|
|
2017-01-25 13:14:04 +01:00
|
|
|
use SilverStripe\AssetAdmin\Controller\AssetAdmin;
|
|
|
|
|
2014-04-05 18:54:50 +02:00
|
|
|
/**
|
2015-12-15 13:08:57 +01:00
|
|
|
* Handles request from the GridFieldBulkUpload component.
|
2014-04-05 18:54:50 +02:00
|
|
|
*
|
|
|
|
* @author colymba
|
|
|
|
*/
|
2018-02-27 13:38:24 +01:00
|
|
|
class BulkUploadHandler extends RequestHandler
|
2015-12-15 13:08:57 +01:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Gridfield instance.
|
|
|
|
*
|
|
|
|
* @var GridField
|
|
|
|
*/
|
|
|
|
protected $gridField;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Bulk upload component.
|
|
|
|
*
|
2017-01-25 13:27:11 +01:00
|
|
|
* @var BulkUploader
|
2015-12-15 13:08:57 +01:00
|
|
|
*/
|
|
|
|
protected $component;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* RequestHandler allowed actions.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
private static $allowed_actions = array(
|
2018-03-05 23:42:27 +01:00
|
|
|
'upload', 'attach'
|
2015-12-15 13:08:57 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* RequestHandler url => action map.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
private static $url_handlers = array(
|
2016-04-11 21:31:21 +02:00
|
|
|
'$Action!' => '$Action'
|
2015-12-15 13:08:57 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handler's constructor.
|
2016-01-18 15:49:00 +01:00
|
|
|
*
|
2017-01-25 13:27:11 +01:00
|
|
|
* @param GridField $gridField
|
2015-12-15 13:08:57 +01:00
|
|
|
* @param GridField_URLHandler $component
|
|
|
|
* @param Controller $controller
|
|
|
|
*/
|
2018-03-11 11:37:50 +01:00
|
|
|
public function __construct($gridField, $component)
|
2015-12-15 13:08:57 +01:00
|
|
|
{
|
|
|
|
$this->gridField = $gridField;
|
|
|
|
$this->component = $component;
|
|
|
|
parent::__construct();
|
|
|
|
}
|
|
|
|
|
2018-03-02 10:36:15 +01:00
|
|
|
/**
|
|
|
|
* Creates a new DataObject
|
2018-03-05 23:42:27 +01:00
|
|
|
* Add file ID to the Dataobject
|
2018-03-02 10:36:15 +01:00
|
|
|
* Add DataObject to Gridfield list
|
|
|
|
* Publish DataObject if enabled
|
|
|
|
*
|
|
|
|
* @param integer $fileID The newly uploaded/attached file ID
|
|
|
|
*
|
|
|
|
* @return DataObject The new DataObject
|
|
|
|
*/
|
|
|
|
protected function createDataObject($fileID)
|
|
|
|
{
|
|
|
|
$recordClass = $this->component->getRecordClassName($this->gridField);
|
|
|
|
$record = $recordClass::create();
|
|
|
|
$record->write();
|
|
|
|
|
|
|
|
$record->extend('onBulkUpload', $this->gridField);
|
|
|
|
|
|
|
|
$fileRelationName = $this->component->getFileRelationName($this->gridField);
|
|
|
|
$record->{"{$fileRelationName}ID"} = $fileID;
|
2018-03-06 13:36:10 +01:00
|
|
|
$record->write(); //HasManyList call write on record but not ManyManyList, so we call it here again
|
|
|
|
|
2018-03-02 10:36:15 +01:00
|
|
|
$this->gridField->list->add($record);
|
|
|
|
|
2020-05-15 16:56:58 +02:00
|
|
|
if (
|
|
|
|
$this->component->getAutoPublishDataObject()
|
|
|
|
&& $record->hasExtension(RecursivePublishable::class)
|
|
|
|
) {
|
2018-03-02 10:36:15 +01:00
|
|
|
$record->publishRecursive();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $record;
|
|
|
|
}
|
|
|
|
|
2015-12-15 13:08:57 +01:00
|
|
|
/**
|
2018-03-05 23:42:27 +01:00
|
|
|
* Process upload through AssetAdmin::apiCreateFile,
|
|
|
|
* uses result file ID to create the DataObject.
|
2015-12-15 13:08:57 +01:00
|
|
|
*
|
2017-01-25 13:27:11 +01:00
|
|
|
* @param HTTPRequest $request
|
2015-12-15 13:08:57 +01:00
|
|
|
*
|
|
|
|
* @return string json
|
|
|
|
*/
|
2017-01-25 13:14:04 +01:00
|
|
|
public function upload(HTTPRequest $request)
|
|
|
|
{
|
|
|
|
$assetAdmin = AssetAdmin::singleton();
|
|
|
|
$uploadResponse = $assetAdmin->apiCreateFile($request);
|
|
|
|
|
|
|
|
if ($uploadResponse->getStatusCode() == 200)
|
|
|
|
{
|
|
|
|
$responseData = Convert::json2array($uploadResponse->getBody());
|
|
|
|
$responseData = array_shift($responseData);
|
|
|
|
|
2018-03-14 21:21:54 +01:00
|
|
|
$record = $this->createDataObject($responseData['id']);
|
|
|
|
|
|
|
|
$bulkToolsResponse = new HTTPBulkToolsResponse(false, $this->gridField);
|
|
|
|
$bulkToolsResponse->addSuccessRecord($record);
|
|
|
|
|
2022-04-13 04:08:15 +02:00
|
|
|
$responseData['bulkTools'] = json_decode($bulkToolsResponse->getBody() ?? '');
|
2018-03-14 21:21:54 +01:00
|
|
|
$uploadResponse->setBody(json_encode(array($responseData)));
|
|
|
|
}
|
2017-01-25 13:14:04 +01:00
|
|
|
|
|
|
|
return $uploadResponse;
|
2015-12-15 13:08:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-03-05 23:03:12 +01:00
|
|
|
* Retrieve File to be attached
|
2018-03-14 21:21:54 +01:00
|
|
|
* and generated DataObject.
|
2016-01-18 15:49:00 +01:00
|
|
|
*
|
2017-01-25 13:27:11 +01:00
|
|
|
* @param HTTPRequest $request
|
2015-12-15 13:08:57 +01:00
|
|
|
*
|
2018-03-14 21:21:54 +01:00
|
|
|
* @return HTTPBulkToolsResponse
|
2015-12-15 13:08:57 +01:00
|
|
|
*/
|
2017-01-25 13:27:11 +01:00
|
|
|
public function attach(HTTPRequest $request)
|
2015-12-15 13:08:57 +01:00
|
|
|
{
|
2018-03-05 23:03:12 +01:00
|
|
|
$fileID = $request->requestVar('fileID'); //why is this not POST?
|
|
|
|
$dataObject = $this->createDataObject($fileID);
|
2015-12-15 13:08:57 +01:00
|
|
|
|
2018-03-14 21:21:54 +01:00
|
|
|
$response = new HTTPBulkToolsResponse(false, $this->gridField);
|
|
|
|
$response->addSuccessRecord($dataObject);
|
2015-12-15 13:08:57 +01:00
|
|
|
return $response;
|
|
|
|
}
|
|
|
|
|
2018-03-14 21:21:54 +01:00
|
|
|
public function getRecordRow(HTTPRequest $request)
|
|
|
|
{
|
|
|
|
$recordID = $request->requestVar('recordID');
|
|
|
|
print_r($recordID);
|
|
|
|
}
|
|
|
|
|
2015-12-15 13:08:57 +01:00
|
|
|
/**
|
|
|
|
* @param string $action
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function Link($action = null)
|
|
|
|
{
|
|
|
|
return Controller::join_links($this->gridField->Link(), '/bulkupload/', $action);
|
|
|
|
}
|
2014-07-24 12:11:52 +02:00
|
|
|
}
|