Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added the option to select a folder on the editablefilefield #177

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion code/model/UserDefinedForm.php
Expand Up @@ -939,13 +939,14 @@ public function process($data, $form) {
if(!empty($data[$field->Name])){
if(in_array("EditableFileField", $field->getClassAncestry())) {
if(isset($_FILES[$field->Name])) {
$foldername = $field->getFormField()->getFolderName();

// create the file from post data
$upload = new Upload();
$file = new File();
$file->ShowInSearch = 0;
try {
$upload->loadIntoFile($_FILES[$field->Name], $file);
$upload->loadIntoFile($_FILES[$field->Name], $file, $foldername);
} catch( ValidationException $e ) {
$validationResult = $e->getResult();
$form->addErrorMessage($field->Name, $validationResult->message(), 'bad');
Expand Down
35 changes: 33 additions & 2 deletions code/model/formfields/EditableFileField.php
Expand Up @@ -12,14 +12,45 @@ class EditableFileField extends EditableFormField {

private static $plural_names = 'File Fields';

function getFieldConfiguration() {
$field = parent::getFieldConfiguration();

$folder = ($this->getSetting('Folder')) ? $this->getSetting('Folder') : '';

$folderList = array();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move this code for getting folders as an array into a separate method with appropriate extend hooks to make it easier to write unit tests for and other services to modify / extend (e.g subsite module may want to modify this source list).

$folders = Folder::get()->filter('ParentID',0);
$mapMethod = function( $ID,$level=0 ) use ( &$mapMethod ) {
$folders = Folder::get()->filter('ParentID',$ID);
$result = array();
foreach ($folders as $folder) {
$result[$folder->ID] = str_repeat('- ',$level).$folder->Title;
$children = $mapMethod($folder->ID,$level+1);
if (count($children) > 0) {
$result = $result + $children;
}
}
return $result;
};
$map = $mapMethod(0);

$folderField = DropdownField::create($this->getSettingName("Folder"), _t('EditableUploadField.FOLDER', 'Select upload folder'),$map);
$folderField->setValue($folder);
$field->push($folderField);

return $field;
}

public function getFormField() {
$field = new FileField($this->Name, $this->Title);

if ($this->getSetting('Folder')) {
$folder = DataObject::get_by_id('Folder',$this->getSetting('Folder'));
$field->setFolderName(preg_replace("/^assets\//","",$folder->Filename));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs a guard cause to account for time where a folder has been deleted from the server.

}
return $field;
}


public function getSubmittedFormField() {
return new SubmittedFileField();
}
}
}