From b6af7c58089806a7d99192750f865474be0909b6 Mon Sep 17 00:00:00 2001 From: cash Date: Wed, 23 Mar 2011 00:58:04 +0000 Subject: Fixes #3205 reverting [8762] git-svn-id: http://code.elgg.org/elgg/trunk@8821 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/classes/ElggFile.php | 51 ++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/engine/classes/ElggFile.php b/engine/classes/ElggFile.php index a6ed44a68..961a6ef13 100644 --- a/engine/classes/ElggFile.php +++ b/engine/classes/ElggFile.php @@ -313,41 +313,44 @@ class ElggFile extends ElggObject { return $this->filestore; } - // 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; + // 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; } - $parameters[$name] = $md->value; } + } - if (!class_exists($filestore)) { + if (isset($parameters['filestore'])) { + if (!class_exists($parameters['filestore'])) { $msg = elgg_echo('ClassNotFoundException:NotFoundNotSavedWithFile', - array($filestore, + array($parameters['filestore'], $this->guid)); throw new ClassNotFoundException($msg); } - $this->filestore = new $filestore(); + // Create new filestore object + $this->filestore = new $parameters['filestore'](); + $this->filestore->setParameters($parameters); + } else { + // @todo - should we log error if filestore not set } - // sometimes it doesn't get saved in the metadata. - // fallback to default... + + // if still nothing then set filestore to default if (!$this->filestore) { $this->filestore = get_default_filestore(); } -- cgit v1.2.3