MDL-14589 /. files are not created anymore when browsing empty areas, yay!

This commit is contained in:
skodak 2008-09-07 10:06:26 +00:00
parent cfe9446817
commit 96fef79f5f
4 changed files with 191 additions and 21 deletions

View File

@ -8,6 +8,7 @@ require_once("$CFG->libdir/file/file_info_user.php");
require_once("$CFG->libdir/file/file_info_coursecat.php");
require_once("$CFG->libdir/file/file_info_course.php");
require_once("$CFG->libdir/file/file_info_coursefile.php");
require_once("$CFG->libdir/file/virtual_root_file.php");
/**
* Main interface for browsing of file tree (local files, areas, virtual files, etc.).
@ -57,7 +58,7 @@ class file_browser {
if (!$storedfile = $fs->get_file($context->id, $filearea, 0, $filepath, $filename)) {
if ($filepath === '/' and $filename === '.') {
$storedfile = $fs->create_directory($context->id, $filearea, 0, $filepath, $USER->id);
$storedfile = new virtual_root_file($context->id, $filearea, 0);
} else {
// not found
return null;
@ -110,7 +111,7 @@ class file_browser {
$urlbase = $CFG->wwwroot.'/pluginfile.php';
if (!$storedfile = $fs->get_file($context->id, $filearea, 0, $filepath, $filename)) {
if ($filepath === '/' and $filename === '.') {
$storedfile = $fs->create_directory($context->id, $filearea, 0, $filepath);
$storedfile = new virtual_root_file($context->id, $filearea, 0);
} else {
// not found
return null;
@ -152,7 +153,7 @@ class file_browser {
$urlbase = $CFG->wwwroot.'/pluginfile.php';
if (!$storedfile = $fs->get_file($context->id, $filearea, 0, $filepath, $filename)) {
if ($filepath === '/' and $filename === '.') {
$storedfile = $fs->create_directory($context->id, $filearea, 0, $filepath);
$storedfile = new virtual_root_file($context->id, $filearea, 0);
} else {
// not found
return null;
@ -169,7 +170,7 @@ class file_browser {
$urlbase = $CFG->wwwroot.'/pluginfile.php';
if (!$storedfile = $fs->get_file($context->id, $filearea, 0, $filepath, $filename)) {
if ($filepath === '/' and $filename === '.') {
$storedfile = $fs->create_directory($context->id, $filearea, 0, $filepath);
$storedfile = new virtual_root_file($context->id, $filearea, 0);
} else {
// not found
return null;
@ -188,7 +189,7 @@ class file_browser {
if (!$storedfile = $fs->get_file($context->id, $filearea, 0, $filepath, $filename)) {
if ($filepath === '/' and $filename === '.') {
$storedfile = $fs->create_directory($context->id, $filearea, 0, $filepath);
$storedfile = new virtual_root_file($context->id, $filearea, 0);
} else {
// not found
return null;
@ -247,7 +248,7 @@ class file_browser {
$urlbase = $CFG->wwwroot.'/pluginfile.php';
if (!$storedfile = $fs->get_file($context->id, $filearea, 0, $filepath, $filename)) {
if ($filepath === '/' and $filename === '.') {
$storedfile = $fs->create_directory($context->id, $filearea, 0, $filepath);
$storedfile = new virtual_root_file($context->id, $filearea, 0);
} else {
// not found
return null;

View File

@ -14,7 +14,7 @@ class file_info_coursefile extends file_info_stored {
return null;
}
if ($this->lf->get_filename() === '.') {
if ($this->lf->is_directory()) {
return null;
}
@ -28,8 +28,8 @@ class file_info_coursefile extends file_info_stored {
}
public function get_children() {
if ($this->lf->get_filename() !== '.') {
return array(); //not a dir
if (!$this->lf->is_directory()) {
return array();
}
return $this->browser->build_coursefile_children($this->context, $this->lf->get_filepath());
}

View File

@ -102,23 +102,19 @@ class file_info_stored extends file_info {
}
public function is_directory() {
if (!$this->lf) {
return true;
}
return ($this->lf->get_filename() === '.');
return $this->lf->is_directory();
}
public function get_children() {
if ($this->lf->get_filename() !== '.') {
return array(); //not a dir
if (!$this->lf->is_directory()) {
return array();
}
return $this->browser->build_stored_file_children($this->context, $this->lf->get_filearea(), $this->lf->get_itemid(), $this->lf->get_filepath(),
$this->urlbase, $this->areavisiblename, $this->itemidused, $this->readaccess, $this->writeaccess);
}
public function get_parent() {
if ($this->lf->get_filename() !== '.') {
if (!$this->lf->is_directory()) {
return $this->browser->get_file_info($this->context, $this->lf->get_filearea(), $this->lf->get_itemid(), $this->lf->get_filepath(), '.');
}
@ -141,7 +137,7 @@ class file_info_stored extends file_info {
}
public function create_directory($newdirname, $userid=null) {
if (!$this->is_writable() or $this->lf->get_filename() !== '.') {
if (!$this->is_writable() or !$this->lf->is_directory()) {
return null;
}
@ -162,7 +158,7 @@ class file_info_stored extends file_info {
public function create_file_from_string($newfilename, $content, $userid=null) {
if (!$this->is_writable() or $this->lf->get_filename() !== '.') {
if (!$this->is_writable() or !$this->lf->is_directory()) {
return null;
}
@ -194,7 +190,7 @@ class file_info_stored extends file_info {
}
public function create_file_from_pathname($newfilename, $pathname, $userid=null) {
if (!$this->is_writable() or $this->lf->get_filename() !== '.') {
if (!$this->is_writable() or !$this->lf->is_directory()) {
return null;
}
@ -258,7 +254,7 @@ class file_info_stored extends file_info {
}
public function delete() {
if (!$this->lf or !$this->is_writable()) {
if (!$this->is_writable()) {
return false;
}

View File

@ -0,0 +1,173 @@
<?php //$Id$
/**
* Root directory in empty file area
*/
class virtual_root_file {
protected $contextid;
protected $filearea;
protected $itemid;
/**
* Constructor
*/
public function __construct($contextid, $filearea, $itemid) {
$this->contextid = $contextid;
$this->filearea = $filearea;
$this->itemid = $itemid;
}
/**
* Is this a directory?
* @return bool
*/
public function is_directory() {
return true;
}
/**
* Delete file
* @return success
*/
public function delete() {
return true;
}
/**
* adds this file path to a curl request (POST only)
*
* @param curl $curlrequest the curl request object
* @param string $key what key to use in the POST request
*/
public function add_to_curl_request(&$curlrequest, $key) {
return;
}
/**
* Returns file handle - read only mode, no writing allowed into pool files!
* @return file handle
*/
public function get_content_file_handle() {
return null;
}
/**
* Dumps file content to page
* @return file handle
*/
public function readfile() {
return;
}
/**
* Returns file content as string
* @return string content
*/
public function get_content() {
return '';
}
/**
* Copy content of file to give npathname
* @param string $pathnema rela path to new file
* @return bool success
*/
public function copy_content_to($pathname) {
return false;
}
/**
* List contents of archive
* @param object $file_packer
* @return array of file infos
*/
public function list_files(file_packer $packer) {
return null;
}
/**
* Extract file to given file path (real OS filesystem), existing files are overwrited
* @param object $file_packer
* @param string $pathname target directory
* @return mixed list of processed files; false if error
*/
public function extract_to_pathname(file_packer $packer, $pathname) {
return false;
}
/**
* Extract file to given file path (real OS filesystem), existing files are overwrited
* @param object $file_packer
* @param int $contextid
* @param string $filearea
* @param int $itemid
* @param string $pathbase
* @param int $userid
* @return mixed list of processed files; false if error
*/
public function extract_to_storage(file_packer $packer, $contextid, $filearea, $itemid, $pathbase, $userid=null) {
return false;
}
/**
* Add file/directory into archive
* @param object $filearch
* @param string $archivepath pathname in archive
* @return bool success
*/
public function archive_file(file_archive $filearch, $archivepath) {
return false;
}
public function get_contextid() {
return $this->contextid;
}
public function get_filearea() {
return $this->filearea;
}
public function get_itemid() {
return $this->itemid;
}
public function get_filepath() {
return '/';
}
public function get_filename() {
return '.';
}
public function get_userid() {
return null;
}
public function get_filesize() {
return 0;
}
public function get_mimetype() {
return null;
}
public function get_timecreated() {
return 0;
}
public function get_timemodified() {
return 0;
}
public function get_status() {
return 0;
}
public function get_id() {
return 0;
}
public function get_contenthash() {
return sha1('');
}
}