Skip to content

Commit

Permalink
MDL-14589 /. files are not created anymore when browsing empty areas,…
Browse files Browse the repository at this point in the history
… yay!
  • Loading branch information
skodak committed Sep 7, 2008
1 parent cfe9446 commit 96fef79
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 21 deletions.
13 changes: 7 additions & 6 deletions lib/file/file_browser.php
Expand Up @@ -8,6 +8,7 @@
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.).
Expand Down Expand Up @@ -57,7 +58,7 @@ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=

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;
Expand Down Expand Up @@ -110,7 +111,7 @@ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=
$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;
Expand Down Expand Up @@ -152,7 +153,7 @@ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=
$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;
Expand All @@ -169,7 +170,7 @@ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=
$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;
Expand All @@ -188,7 +189,7 @@ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=

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;
Expand Down Expand Up @@ -247,7 +248,7 @@ public function get_file_info($context, $filearea=null, $itemid=null, $filepath=
$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;
Expand Down
6 changes: 3 additions & 3 deletions lib/file/file_info_coursefile.php
Expand Up @@ -14,7 +14,7 @@ public function get_url($forcedownload=false, $https=false) {
return null;
}

if ($this->lf->get_filename() === '.') {
if ($this->lf->is_directory()) {
return null;
}

Expand All @@ -28,8 +28,8 @@ public function get_url($forcedownload=false, $https=false) {
}

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());
}
Expand Down
20 changes: 8 additions & 12 deletions lib/file/file_info_stored.php
Expand Up @@ -102,23 +102,19 @@ public function get_timemodified() {
}

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(), '.');
}

Expand All @@ -141,7 +137,7 @@ public function get_parent() {
}

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;
}

Expand All @@ -162,7 +158,7 @@ public function create_directory($newdirname, $userid=null) {


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;
}

Expand Down Expand Up @@ -194,7 +190,7 @@ public function create_file_from_string($newfilename, $content, $userid=null) {
}

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;
}

Expand Down Expand Up @@ -258,7 +254,7 @@ public function create_file_from_storedfile($newfilename, $fid, $userid=null) {
}

public function delete() {
if (!$this->lf or !$this->is_writable()) {
if (!$this->is_writable()) {
return false;
}

Expand Down
173 changes: 173 additions & 0 deletions lib/file/virtual_root_file.php
@@ -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('');
}
}

0 comments on commit 96fef79

Please sign in to comment.