mirror of
https://github.com/silverstripe/silverstripe-dms
synced 2024-10-22 14:05:56 +02:00
Merge pull request #88 from xini/fix-edit-after-upload
fix edit after upload (from @benmanu), fixes #53
This commit is contained in:
commit
25aab70810
@ -214,12 +214,126 @@ class DMSUploadField extends UploadField
|
|||||||
{
|
{
|
||||||
return DMSUploadField_ItemHandler::create($this, $itemID);
|
return DMSUploadField_ItemHandler::create($this, $itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FieldList $fields for the EditForm
|
||||||
|
* @example 'getCMSFields'
|
||||||
|
*
|
||||||
|
* @param File $file File context to generate fields for
|
||||||
|
* @return FieldList List of form fields
|
||||||
|
*/
|
||||||
|
public function getDMSFileEditFields($file)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Empty actions, generate default
|
||||||
|
if(empty($this->fileEditFields)) {
|
||||||
|
$fields = $file->getCMSFields();
|
||||||
|
// Only display main tab, to avoid overly complex interface
|
||||||
|
if($fields->hasTabSet() && ($mainTab = $fields->findOrMakeTab('Root.Main'))) {
|
||||||
|
$fields = $mainTab->Fields();
|
||||||
|
}
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fields instance
|
||||||
|
if ($this->fileEditFields instanceof FieldList) return $this->fileEditFields;
|
||||||
|
|
||||||
|
// Method to call on the given file
|
||||||
|
if($file->hasMethod($this->fileEditFields)) {
|
||||||
|
return $file->{$this->fileEditFields}();
|
||||||
|
}
|
||||||
|
|
||||||
|
user_error("Invalid value for UploadField::fileEditFields", E_USER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FieldList $actions or string $name (of a method on File to provide a actions) for the EditForm
|
||||||
|
* @example 'getCMSActions'
|
||||||
|
*
|
||||||
|
* @param File $file File context to generate form actions for
|
||||||
|
* @return FieldList Field list containing FormAction
|
||||||
|
*/
|
||||||
|
public function getDMSFileEditActions($file)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Empty actions, generate default
|
||||||
|
if(empty($this->fileEditActions)) {
|
||||||
|
$actions = new FieldList($saveAction = new FormAction('doEdit', _t('UploadField.DOEDIT', 'Save')));
|
||||||
|
$saveAction->addExtraClass('ss-ui-action-constructive icon-accept');
|
||||||
|
return $actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actions instance
|
||||||
|
if ($this->fileEditActions instanceof FieldList) return $this->fileEditActions;
|
||||||
|
|
||||||
|
// Method to call on the given file
|
||||||
|
if($file->hasMethod($this->fileEditActions)) {
|
||||||
|
return $file->{$this->fileEditActions}();
|
||||||
|
}
|
||||||
|
|
||||||
|
user_error("Invalid value for UploadField::fileEditActions", E_USER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines the validator to use for the edit form
|
||||||
|
* @example 'getCMSValidator'
|
||||||
|
*
|
||||||
|
* @param File $file File context to generate validator from
|
||||||
|
* @return Validator Validator object
|
||||||
|
*/
|
||||||
|
public function getDMSFileEditValidator($file)
|
||||||
|
{
|
||||||
|
// Empty validator
|
||||||
|
if(empty($this->fileEditValidator)) return null;
|
||||||
|
|
||||||
|
// Validator instance
|
||||||
|
if($this->fileEditValidator instanceof Validator) return $this->fileEditValidator;
|
||||||
|
|
||||||
|
// Method to call on the given file
|
||||||
|
if($file->hasMethod($this->fileEditValidator)) {
|
||||||
|
return $file->{$this->fileEditValidator}();
|
||||||
|
}
|
||||||
|
|
||||||
|
user_error("Invalid value for UploadField::fileEditValidator", E_USER_ERROR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DMSUploadField_ItemHandler extends UploadField_ItemHandler
|
class DMSUploadField_ItemHandler extends UploadField_ItemHandler
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static $allowed_actions = array(
|
||||||
|
'delete',
|
||||||
|
'edit',
|
||||||
|
'EditForm',
|
||||||
|
);
|
||||||
|
|
||||||
public function getItem()
|
public function getItem()
|
||||||
{
|
{
|
||||||
return DataObject::get_by_id('DMSDocument', $this->itemID);
|
return DataObject::get_by_id('DMSDocument', $this->itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Form
|
||||||
|
*/
|
||||||
|
public function EditForm() {
|
||||||
|
$file = $this->getItem();
|
||||||
|
|
||||||
|
// Get form components
|
||||||
|
$fields = $this->parent->getDMSFileEditFields($file);
|
||||||
|
$actions = $this->parent->getDMSFileEditActions($file);
|
||||||
|
$validator = $this->parent->getDMSFileEditValidator($file);
|
||||||
|
$form = new Form(
|
||||||
|
$this,
|
||||||
|
__FUNCTION__,
|
||||||
|
$fields,
|
||||||
|
$actions,
|
||||||
|
$validator
|
||||||
|
);
|
||||||
|
$form->loadDataFrom($file);
|
||||||
|
$form->addExtraClass('small');
|
||||||
|
|
||||||
|
return $form;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user