aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/classes/ElggFile.php51
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();
}