/** * Get ID of target parent folder * * @return int */ protected function getFolderID() { $folderName = $this->getFolderName(); if (!$folderName) { return 0; } $folder = Folder::find_or_make($folderName); return $folder ? $folder->ID : 0; }
/** * Build the file selection form. * * @skipUpgrade * @return Form */ public function Form() { // Find out the requested folder ID. $folderID = $this->parent->getRequest()->requestVar('ParentID'); if ($folderID === null && $this->parent->getDisplayFolderName()) { $folder = Folder::find_or_make($this->parent->getDisplayFolderName()); $folderID = $folder ? $folder->ID : 0; } // Construct the form $action = new FormAction('doAttach', _t('UploadField.AttachFile', 'Attach file(s)')); $action->addExtraClass('ss-ui-action-constructive icon-accept'); $form = new Form($this, 'Form', new FieldList($this->getListField($folderID)), new FieldList($action)); // Add a class so we can reach the form from the frontend. $form->addExtraClass('uploadfield-form'); return $form; }
/** * Check if file exists, both checking filtered filename and exact filename * * @param string $originalFile Filename * @return bool */ protected function checkFileExists($originalFile) { // Check both original and safely filtered filename $nameFilter = FileNameFilter::create(); $filteredFile = $nameFilter->filter($originalFile); // Resolve expected folder name $folderName = $this->getFolderName(); $folder = Folder::find_or_make($folderName); $parentPath = $folder ? $folder->getFilename() : ''; // check if either file exists return File::find($parentPath . $originalFile) || File::find($parentPath . $filteredFile); }
public function testIllegalFilenames() { // Test that generating a filename with invalid characters generates a correctly named folder. $folder = Folder::find_or_make('/FolderTest/EN_US Lang'); $this->assertEquals('FolderTest/EN-US-Lang/', $folder->getFilename()); // Test repeatitions of folder $folder2 = Folder::find_or_make('/FolderTest/EN_US Lang'); $this->assertEquals($folder->ID, $folder2->ID); $folder3 = Folder::find_or_make('/FolderTest/EN--US_L!ang'); $this->assertEquals($folder->ID, $folder3->ID); $folder4 = Folder::find_or_make('/FolderTest/EN-US-Lang'); $this->assertEquals($folder->ID, $folder4->ID); }
public function testCreateWithFilenameWithSubfolder() { // Note: We can't use fixtures/setUp() for this, as we want to create the db record manually. // Creating the folder is necessary to avoid having "Filename" overwritten by setName()/setRelativePath(), // because the parent folders don't exist in the database $folder = Folder::find_or_make('/FileTest/'); $testfilePath = BASE_PATH . '/assets/FileTest/CreateWithFilenameHasCorrectPath.txt'; // Important: No leading slash $fh = fopen($testfilePath, "w"); fwrite($fh, str_repeat('x', 1000000)); fclose($fh); $file = new File(); $file->setFromLocalFile($testfilePath); $file->ParentID = $folder->ID; $file->write(); $this->assertEquals('CreateWithFilenameHasCorrectPath.txt', $file->Name, '"Name" property is automatically set from "Filename"'); $this->assertEquals('FileTest/CreateWithFilenameHasCorrectPath.txt', $file->Filename, '"Filename" property remains unchanged'); // TODO This should be auto-detected, see File->updateFilesystem() // $this->assertInstanceOf('Folder', $file->Parent(), 'Parent folder is created in database'); // $this->assertFileExists($file->Parent()->getURL(), 'Parent folder is created on filesystem'); // $this->assertEquals('FileTest', $file->Parent()->Name); // $this->assertInstanceOf('Folder', $file->Parent()->Parent(), 'Grandparent folder is created in database'); // $this->assertFileExists($file->Parent()->Parent()->getURL(), // 'Grandparent folder is created on filesystem'); // $this->assertEquals('assets', $file->Parent()->Parent()->Name); }