Source of file BulkUploadHandler.php
Size: 4,373 Bytes - Last Modified: 2021-12-24T06:41:11+00:00
/var/www/docs.ssmods.com/process/src/src/BulkUploader/BulkUploadHandler.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | <?php namespace Colymba\BulkUpload; use Colymba\BulkTools\HTTPBulkToolsResponse; use SilverStripe\Control\Controller; use SilverStripe\Control\RequestHandler; use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\HTTPResponse; use SilverStripe\Core\Convert; //use SilverStripe\Core\Injector\Injector; //use SilverStripe\ORM\DataObject; use SilverStripe\AssetAdmin\Controller\AssetAdmin; /** * Handles request from the GridFieldBulkUpload component. * * @author colymba */ class BulkUploadHandler extends RequestHandler { /** * Gridfield instance. * * @var GridField */ protected $gridField; /** * Bulk upload component. * * @var BulkUploader */ protected $component; /** * RequestHandler allowed actions. * * @var array */ private static $allowed_actions = array( 'upload', 'attach' ); /** * RequestHandler url => action map. * * @var array */ private static $url_handlers = array( '$Action!' => '$Action' ); /** * Handler's constructor. * * @param GridField $gridField * @param GridField_URLHandler $component * @param Controller $controller */ public function __construct($gridField, $component) { $this->gridField = $gridField; $this->component = $component; parent::__construct(); } /** * Creates a new DataObject * Add file ID to the Dataobject * 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; $record->write(); //HasManyList call write on record but not ManyManyList, so we call it here again $this->gridField->list->add($record); if ($this->component->getAutoPublishDataObject() && $record->hasExtension('Versioned')) { $record->publishRecursive(); } return $record; } /** * Process upload through AssetAdmin::apiCreateFile, * uses result file ID to create the DataObject. * * @param HTTPRequest $request * * @return string json */ 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); $record = $this->createDataObject($responseData['id']); $bulkToolsResponse = new HTTPBulkToolsResponse(false, $this->gridField); $bulkToolsResponse->addSuccessRecord($record); $responseData['bulkTools'] = json_decode($bulkToolsResponse->getBody()); $uploadResponse->setBody(json_encode(array($responseData))); } return $uploadResponse; } /** * Retrieve File to be attached * and generated DataObject. * * @param HTTPRequest $request * * @return HTTPBulkToolsResponse */ public function attach(HTTPRequest $request) { $fileID = $request->requestVar('fileID'); //why is this not POST? $dataObject = $this->createDataObject($fileID); $response = new HTTPBulkToolsResponse(false, $this->gridField); $response->addSuccessRecord($dataObject); return $response; } public function getRecordRow(HTTPRequest $request) { $recordID = $request->requestVar('recordID'); print_r($recordID); } /** * @param string $action * * @return string */ public function Link($action = null) { return Controller::join_links($this->gridField->Link(), '/bulkupload/', $action); } } |