diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2012-12-14 14:21:32 -0200 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2012-12-14 14:21:32 -0200 |
commit | f9ca24a9407f294a9bb7305180f9f8e740ab6ec9 (patch) | |
tree | 4c9a263b7fd770151e40940d6ddaa89d27e5053d /engine/lib/river.php | |
parent | e15f0fce6940ee999cf5d6405ad1b16d00c38e4b (diff) | |
parent | 3ed289b03fa3d851fd7fffbc0441ebc9b5e98310 (diff) | |
download | elgg-f9ca24a9407f294a9bb7305180f9f8e740ab6ec9.tar.gz elgg-f9ca24a9407f294a9bb7305180f9f8e740ab6ec9.tar.bz2 |
Merge branch 'master' of git://gitorious.org/lorea/elgg into saravea
Diffstat (limited to 'engine/lib/river.php')
-rw-r--r-- | engine/lib/river.php | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/engine/lib/river.php b/engine/lib/river.php index b717a7756..33f34360e 100644 --- a/engine/lib/river.php +++ b/engine/lib/river.php @@ -361,6 +361,7 @@ function elgg_get_river(array $options = array()) { } $river_items = get_data($query, 'elgg_row_to_elgg_river_item'); + _elgg_prefetch_river_entities($river_items); return $river_items; } else { @@ -370,11 +371,56 @@ function elgg_get_river(array $options = array()) { } /** + * Prefetch entities that will be displayed in the river. + * + * @param ElggRiverItem[] $river_items + * @access private + */ +function _elgg_prefetch_river_entities(array $river_items) { + // prefetch objects and subjects + $guids = array(); + foreach ($river_items as $item) { + if ($item->subject_guid && !retrieve_cached_entity($item->subject_guid)) { + $guids[$item->subject_guid] = true; + } + if ($item->object_guid && !retrieve_cached_entity($item->object_guid)) { + $guids[$item->object_guid] = true; + } + } + if ($guids) { + // avoid creating oversized query + // @todo how to better handle this? + $guids = array_slice($guids, 0, 300, true); + // return value unneeded, just priming cache + elgg_get_entities(array( + 'guids' => array_keys($guids), + 'limit' => 0, + )); + } + + // prefetch object containers + $guids = array(); + foreach ($river_items as $item) { + $object = $item->getObjectEntity(); + if ($object->container_guid && !retrieve_cached_entity($object->container_guid)) { + $guids[$object->container_guid] = true; + } + } + if ($guids) { + $guids = array_slice($guids, 0, 300, true); + elgg_get_entities(array( + 'guids' => array_keys($guids), + 'limit' => 0, + )); + } +} + +/** * List river items * * @param array $options Any options from elgg_get_river() plus: * pagination => BOOL Display pagination links (true) - + * * @return string * @since 1.8.0 */ |