diff options
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  | 
