diff options
author | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2010-09-20 21:07:18 +0000 |
---|---|---|
committer | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2010-09-20 21:07:18 +0000 |
commit | 45c14238add012729c01f3196076e33965e365a9 (patch) | |
tree | 1296239cdcc43a39b4118515f1c97ce65e2b725c /engine/classes/ElggDiskFilestore.php | |
parent | 0ecbe633a83170e0f487f14cc8783117795230e1 (diff) | |
download | elgg-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.php | 144 |
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 |