mirror of
https://github.com/silverstripe/silverstripe-dms
synced 2024-10-22 14:05:56 +02:00
Edit form for upload
This commit is contained in:
parent
d6740d8482
commit
66a7a0a738
@ -544,7 +544,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface {
|
|||||||
CompositeField::create(
|
CompositeField::create(
|
||||||
new ReadonlyField("ID", "ID number". ':', $this->ID),
|
new ReadonlyField("ID", "ID number". ':', $this->ID),
|
||||||
new ReadonlyField("FileType", _t('AssetTableField.TYPE','File type') . ':', self::get_file_type($extension)),
|
new ReadonlyField("FileType", _t('AssetTableField.TYPE','File type') . ':', self::get_file_type($extension)),
|
||||||
new ReadonlyField("Size", _t('AssetTableField.SIZE','File size') . ':', File::format_size(filesize($this->getFullPath()))),
|
new ReadonlyField("Size", _t('AssetTableField.SIZE','File size') . ':', $this->getFileSizeFormatted()),
|
||||||
$urlField = new ReadonlyField('ClickableURL', _t('AssetTableField.URL','URL'),
|
$urlField = new ReadonlyField('ClickableURL', _t('AssetTableField.URL','URL'),
|
||||||
sprintf('<a href="%s" target="_blank" class="file-url">%s</a>', $this->getDownloadLink(), $this->getDownloadLink())
|
sprintf('<a href="%s" target="_blank" class="file-url">%s</a>', $this->getDownloadLink(), $this->getDownloadLink())
|
||||||
),
|
),
|
||||||
@ -571,7 +571,6 @@ class DMSDocument extends DataObject implements DMSDocumentInterface {
|
|||||||
$this->replaceDocument($file);
|
$this->replaceDocument($file);
|
||||||
$file->delete();
|
$file->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class DMSDocument_Controller extends Controller {
|
class DMSDocument_Controller extends Controller {
|
||||||
|
@ -27,6 +27,107 @@ class DMSUploadField extends UploadField {
|
|||||||
$document = $dms->storeDocument($file);
|
$document = $dms->storeDocument($file);
|
||||||
$file->delete();
|
$file->delete();
|
||||||
$document->addPage($page);
|
$document->addPage($page);
|
||||||
|
|
||||||
|
return $document;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action to handle upload of a single file
|
||||||
|
*
|
||||||
|
* @param SS_HTTPRequest $request
|
||||||
|
* @return string json
|
||||||
|
*/
|
||||||
|
public function upload(SS_HTTPRequest $request) {
|
||||||
|
if($this->isDisabled() || $this->isReadonly()) return $this->httpError(403);
|
||||||
|
|
||||||
|
// Protect against CSRF on destructive action
|
||||||
|
$token = $this->getForm()->getSecurityToken();
|
||||||
|
if(!$token->checkRequest($request)) return $this->httpError(400);
|
||||||
|
|
||||||
|
$name = $this->getName();
|
||||||
|
$tmpfile = $request->postVar($name);
|
||||||
|
$record = $this->getRecord();
|
||||||
|
|
||||||
|
// Check if the file has been uploaded into the temporary storage.
|
||||||
|
if (!$tmpfile) {
|
||||||
|
$return = array('error' => _t('UploadField.FIELDNOTSET', 'File information not found'));
|
||||||
|
} else {
|
||||||
|
$return = array(
|
||||||
|
'name' => $tmpfile['name'],
|
||||||
|
'size' => $tmpfile['size'],
|
||||||
|
'type' => $tmpfile['type'],
|
||||||
|
'error' => $tmpfile['error']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for constraints on the record to which the file will be attached.
|
||||||
|
if (!$return['error'] && $this->relationAutoSetting && $record && $record->exists()) {
|
||||||
|
$tooManyFiles = false;
|
||||||
|
// Some relationships allow many files to be attached.
|
||||||
|
if ($this->getConfig('allowedMaxFileNumber') && ($record->has_many($name) || $record->many_many($name))) {
|
||||||
|
if(!$record->isInDB()) $record->write();
|
||||||
|
$tooManyFiles = $record->{$name}()->count() >= $this->getConfig('allowedMaxFileNumber');
|
||||||
|
// has_one only allows one file at any given time.
|
||||||
|
} elseif($record->has_one($name)) {
|
||||||
|
$tooManyFiles = $record->{$name}() && $record->{$name}()->exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Report the constraint violation.
|
||||||
|
if ($tooManyFiles) {
|
||||||
|
if(!$this->getConfig('allowedMaxFileNumber')) $this->setConfig('allowedMaxFileNumber', 1);
|
||||||
|
$return['error'] = _t(
|
||||||
|
'UploadField.MAXNUMBEROFFILES',
|
||||||
|
'Max number of {count} file(s) exceeded.',
|
||||||
|
array('count' => $this->getConfig('allowedMaxFileNumber'))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process the uploaded file
|
||||||
|
if (!$return['error']) {
|
||||||
|
$fileObject = null;
|
||||||
|
|
||||||
|
if ($this->relationAutoSetting) {
|
||||||
|
// Search for relations that can hold the uploaded files.
|
||||||
|
if ($relationClass = $this->getRelationAutosetClass()) {
|
||||||
|
// Create new object explicitly. Otherwise rely on Upload::load to choose the class.
|
||||||
|
$fileObject = Object::create($relationClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the uploaded file into a new file object.
|
||||||
|
try {
|
||||||
|
$this->upload->loadIntoFile($tmpfile, $fileObject, $this->folderName);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// we shouldn't get an error here, but just in case
|
||||||
|
$return['error'] = $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$return['error']) {
|
||||||
|
if ($this->upload->isError()) {
|
||||||
|
$return['error'] = implode(' '.PHP_EOL, $this->upload->getErrors());
|
||||||
|
} else {
|
||||||
|
$file = $this->upload->getFile();
|
||||||
|
|
||||||
|
// Attach the file to the related record.
|
||||||
|
$document = $this->attachFile($file);
|
||||||
|
|
||||||
|
// Collect all output data.
|
||||||
|
$return = array_merge($return, array(
|
||||||
|
'id' => $document->ID,
|
||||||
|
'name' => $document->getTitle(),
|
||||||
|
'thumbnail_url' => $document->UploadFieldThumbnailURL,
|
||||||
|
'edit_url' => $this->getItemHandler($document->ID)->EditLink(),
|
||||||
|
'size' => $document->getFileSizeFormatted(),
|
||||||
|
'buttons' => $document->UploadFieldFileButtons,
|
||||||
|
'showeditform' => true
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$response = new SS_HTTPResponse(Convert::raw2json(array($return)));
|
||||||
|
$response->addHeader('Content-Type', 'text/plain');
|
||||||
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -47,4 +148,19 @@ class DMSUploadField extends UploadField {
|
|||||||
|
|
||||||
return $fields;
|
return $fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $itemID
|
||||||
|
* @return UploadField_ItemHandler
|
||||||
|
*/
|
||||||
|
public function getItemHandler($itemID) {
|
||||||
|
return DMSUploadField_ItemHandler::create($this, $itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DMSUploadField_ItemHandler extends UploadField_ItemHandler {
|
||||||
|
function getItem() {
|
||||||
|
return DataObject::get_by_id('DMSDocument', $this->itemID);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,9 @@ window.tmpl.cache['ss-uploadfield-downloadtemplate'] = tmpl(
|
|||||||
'<div class="ss-uploadfield-item-actions">(refresh the page to display new file information)</div>' +
|
'<div class="ss-uploadfield-item-actions">(refresh the page to display new file information)</div>' +
|
||||||
'{% } %}' +
|
'{% } %}' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
|
'{% if (!file.error) { %}' +
|
||||||
|
'<div class="ss-uploadfield-item-editform loading"><iframe frameborder="0" src="{%=file.edit_url%}"></iframe></div>' +
|
||||||
|
'{% } %}' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'{% } %}'
|
'{% } %}'
|
||||||
);
|
);
|
Loading…
Reference in New Issue
Block a user