diff options
Diffstat (limited to 'engine')
| -rw-r--r-- | engine/classes/ElggFile.php | 51 | 
1 files changed, 24 insertions, 27 deletions
| diff --git a/engine/classes/ElggFile.php b/engine/classes/ElggFile.php index 961a6ef13..a6ed44a68 100644 --- a/engine/classes/ElggFile.php +++ b/engine/classes/ElggFile.php @@ -313,44 +313,41 @@ class ElggFile extends ElggObject {  			return $this->filestore;  		} -		// If filestore meta set then retrieve filestore -		// @todo Better way of doing this? -		// ^ Yes....yes there is. -		$metas = elgg_get_metadata(array( -			'guid' => $this->guid, -			'limit' => 0 -		)); -		$parameters = array(); -		if (is_array($metas)) { -			foreach ($metas as $meta) { -				if (strpos($meta->name, "filestore::") !== false) { -					// Filestore parameter tag -					$comp = explode("::", $meta->name); -					$name = $comp[1]; - -					$parameters[$name] = $meta->value; +		// ask for entity specific filestore +		// saved as filestore::className in metadata. +		// need to get all filestore::* metadata because the rest are "parameters" that +		// get passed to filestore::setParameters() +		if ($this->guid) { +			$db_prefix = elgg_get_config('dbprefix'); +			$options = array( +				'guid' => $this->guid, +				'where' => array("n.string LIKE 'filestore::%'"), +			); +			 +			$mds = elgg_get_metadata($options); + +			$parameters = array(); +			foreach ($mds as $md) { +				list($foo, $name) = explode("::", $md->name); +				if ($name == 'filestore') { +					$filestore = $md->value;  				} +				$parameters[$name] = $md->value;  			} -		} -		if (isset($parameters['filestore'])) { -			if (!class_exists($parameters['filestore'])) { +			if (!class_exists($filestore)) {  				$msg = elgg_echo('ClassNotFoundException:NotFoundNotSavedWithFile', -								array($parameters['filestore'], +								array($filestore,  								$this->guid));  				throw new ClassNotFoundException($msg);  			} -			// Create new filestore object -			$this->filestore = new $parameters['filestore'](); - +			$this->filestore = new $filestore();  			$this->filestore->setParameters($parameters); -		} else { -			// @todo - should we log error if filestore not set  		} - -		// if still nothing then set filestore to default +		// sometimes it doesn't get saved in the metadata. +		// fallback to default...  		if (!$this->filestore) {  			$this->filestore = get_default_filestore();  		} | 
