aboutsummaryrefslogtreecommitdiff
path: root/engine/classes/ElggDiskFilestore.php
diff options
context:
space:
mode:
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-09-20 21:07:18 +0000
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-09-20 21:07:18 +0000
commit45c14238add012729c01f3196076e33965e365a9 (patch)
tree1296239cdcc43a39b4118515f1c97ce65e2b725c /engine/classes/ElggDiskFilestore.php
parent0ecbe633a83170e0f487f14cc8783117795230e1 (diff)
downloadelgg-45c14238add012729c01f3196076e33965e365a9.tar.gz
elgg-45c14238add012729c01f3196076e33965e365a9.tar.bz2
Refs #2450: Documented first bit of the classes.
git-svn-id: http://code.elgg.org/elgg/trunk@6952 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/classes/ElggDiskFilestore.php')
-rw-r--r--engine/classes/ElggDiskFilestore.php144
1 files changed, 126 insertions, 18 deletions
diff --git a/engine/classes/ElggDiskFilestore.php b/engine/classes/ElggDiskFilestore.php
index 6b0fa2554..b0924fbe7 100644
--- a/engine/classes/ElggDiskFilestore.php
+++ b/engine/classes/ElggDiskFilestore.php
@@ -1,8 +1,13 @@
<?php
/**
- * @class ElggDiskFilestore
- * This class uses disk storage to save data.
- * @author Curverider Ltd
+ * A filestore that uses disk as storage.
+ *
+ * @warning This should be used by a wrapper class
+ * like {@link ElggFile}.
+ *
+ * @package Elgg.Core
+ * @subpackage FileStore.Disk
+ * @link http://docs.elgg.org/DataModel/FileStore/Disk
*/
class ElggDiskFilestore extends ElggFilestore {
/**
@@ -30,6 +35,19 @@ class ElggDiskFilestore extends ElggFilestore {
}
}
+ /**
+ * Open a file for reading, writing, or both.
+ *
+ * @note All files are opened binary safe.
+ * @warning This will try to create the a directory if it doesn't exist,
+ * even in read-only mode.
+ *
+ * @param ElggFile $file
+ * @param string $mode read, write, or append.
+ * @throws InvalidParameterException
+ * @return resource File pointer resource
+ * @todo This really shouldn't try to create directories if not writing.
+ */
public function open(ElggFile $file, $mode) {
$fullname = $this->getFilenameOnFilestore($file);
@@ -71,10 +89,25 @@ class ElggDiskFilestore extends ElggFilestore {
}
+ /**
+ * Write data to a file.
+ *
+ * @param resource $f File pointer resource
+ * @param mixed $data The data to write.
+ * @return bool
+ */
public function write($f, $data) {
return fwrite($f, $data);
}
+ /**
+ * Read data from a file.
+ *
+ * @param resource $f File pointer resource
+ * @param int $length The number of bytes to read
+ * @param inf $offset The number of bytes to start after
+ * @return mixed Contents of file or false on fail.
+ */
public function read($f, $length, $offset = 0) {
if ($offset) {
$this->seek($f, $offset);
@@ -83,10 +116,22 @@ class ElggDiskFilestore extends ElggFilestore {
return fread($f, $length);
}
+ /**
+ * Close a file pointer
+ *
+ * @param resource $f A file pointer resource
+ * @return bool
+ */
public function close($f) {
return fclose($f);
}
+ /**
+ * Delete an ElggFile file.
+ *
+ * @param ElggFile $file File to delete
+ * @return bool
+ */
public function delete(ElggFile $file) {
$filename = $this->getFilenameOnFilestore($file);
if (file_exists($filename)) {
@@ -96,22 +141,49 @@ class ElggDiskFilestore extends ElggFilestore {
}
}
+ /**
+ * Seek to the specified position.
+ *
+ * @param resource $f File resource
+ * @param int $position Position in bytes
+ */
public function seek($f, $position) {
return fseek($f, $position);
}
+ /**
+ * Return the current location of the internal pointer
+ *
+ * @param resource $f File pointer resource
+ */
public function tell($f) {
return ftell($f);
}
+ /**
+ * Tests for end of file on a file pointer
+ * @param resource $f File pointer resource
+ */
public function eof($f) {
return feof($f);
}
+ /**
+ * Returns the file size of an ElggFile file.
+ *
+ * @param ElggFile $file
+ * @return int The file size
+ */
public function getFileSize(ElggFile $file) {
return filesize($this->getFilenameOnFilestore($file));
}
+ /**
+ * Returns the filename as saved on disk for an ElggFile object
+ *
+ * @param ElggFile $file
+ * @return string The full path of where the file is stored
+ */
public function getFilenameOnFilestore(ElggFile $file) {
$owner = $file->getOwnerEntity();
if (!$owner) {
@@ -125,26 +197,47 @@ class ElggDiskFilestore extends ElggFilestore {
return $this->dir_root . $this->make_file_matrix($owner->guid) . $file->getFilename();
}
+ /**
+ * Returns the contents of the ElggFile file.
+ *
+ * @param ElggFile $file
+ * @return mixed
+ */
public function grabFile(ElggFile $file) {
return file_get_contents($file->getFilenameOnFilestore());
}
+ /**
+ * Tests if an ElggFile file exists.
+ *
+ * @param ElggFile $file
+ * @return bool
+ */
public function exists(ElggFile $file) {
return file_exists($this->getFilenameOnFilestore($file));
}
- public function getSize($prefix,$container_guid) {
+ /**
+ * Returns the size of all data stored under a directory in the disk store.
+ *
+ * @param string $prefix Optional/ The prefix to check under.
+ * @param string $container_guid The guid of the entity whose data you want to check.
+ * @return int|false
+ */
+ public function getSize($prefix = '', $container_guid) {
if ($container_guid) {
- return get_dir_size($this->dir_root.$this->make_file_matrix($container_guid).$prefix);
+ return get_dir_size($this->dir_root . $this->make_file_matrix($container_guid) . $prefix);
} else {
return false;
}
}
/**
- * Make the directory root.
+ * Create a directory $dirroot
*
- * @param string $dirroot
+ * @param string $dirroot The full path of the directory to create
+ * @throws IOException
+ * @return true
*/
protected function make_directory_root($dirroot) {
if (!file_exists($dirroot)) {
@@ -165,6 +258,7 @@ class ElggDiskFilestore extends ElggFilestore {
* @param string $string String
* @param string $charset The charset, defaults to UTF8
* @return array
+ * @todo Can be deprecated since we no long split on usernames
*/
private function mb_str_split($string, $charset = 'UTF8') {
if (is_callable('mb_substr')) {
@@ -187,10 +281,10 @@ class ElggDiskFilestore extends ElggFilestore {
}
/**
- * Construct the filename matrix.
+ * Construct a file path matrix for an entity.
*
- * @param int | string $identifier
- * @return str
+ * @param int The guide of the entity to store the data under.
+ * @return str The path where the entity's data will be stored.
*/
protected function make_file_matrix($identifier) {
if (is_numeric($identifier)) {
@@ -201,19 +295,22 @@ class ElggDiskFilestore extends ElggFilestore {
}
/**
- * Construct the filename matrix with user info
+ * Construct a filename matrix.
*
- * This method will generate a matrix using the entity's creation time and
- * unique guid. This is intended only to determine a user's data directory.
+ * Generates a matrix using the entity's creation time and
+ * unique guid.
*
- * @param int $guid
- * @return str
+ * File path matrixes are:
+ * YYYY/MM/DD/guid/
+ *
+ * @param int $guid The entity to contrust a matrix for
+ * @return str The
+ * @todo This would work with non-users. Why is it restricted to only users?
*/
protected function user_file_matrix($guid) {
// lookup the entity
$user = get_entity($guid);
- if ($user->type != 'user')
- {
+ if ($user->type != 'user') {
// only to be used for user directories
return FALSE;
}
@@ -248,10 +345,21 @@ class ElggDiskFilestore extends ElggFilestore {
return $this->user_file_matrix($user->guid);
}
+ /**
+ * Returns a list of attributes to save to the database when saving
+ * the ElggFile object using this file store.
+ *
+ * @return array
+ */
public function getParameters() {
return array("dir_root" => $this->dir_root);
}
+ /**
+ * Sets parameters that should be saved to database.
+ *
+ * return bool
+ */
public function setParameters(array $parameters) {
if (isset($parameters['dir_root'])) {
$this->dir_root = $parameters['dir_root'];
@@ -260,4 +368,4 @@ class ElggDiskFilestore extends ElggFilestore {
return false;
}
-}
+} \ No newline at end of file