aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/river.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/river.php')
-rw-r--r--engine/lib/river.php227
1 files changed, 222 insertions, 5 deletions
diff --git a/engine/lib/river.php b/engine/lib/river.php
index 39be91d0d..e6ae1ca59 100644
--- a/engine/lib/river.php
+++ b/engine/lib/river.php
@@ -166,11 +166,227 @@
*/
function get_river_entries($by_user = "", $relationship = "", $limit = 10, $offset = 0)
{
+ global $CONFIG;
+
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $relationship = sanitise_string($relationship);
+
+ if (is_array($by_user) && sizeof($by_user) > 0) {
+ foreach($by_user as $key => $val) {
+ $by_user[$key] = (int) $val;
+ }
+ } else {
+ $by_user = array((int)$by_user);
+ }
+
+ // Get all potential river events from available view
+ $river_events = array();
+ foreach (elgg_view_tree('river') as $view)
+ {
+ $fragments = explode('/', $view);
+
+ if ((isset($fragments[0])) && ($fragments[0] == 'river'))
+ {
+ if (isset($fragments[1]))
+ {
+ $f = array();
+ for ($n = 1; $n < count($fragments); $n++)
+ {
+ $val = sanitise_string($fragments[$n]);
+ switch($n)
+ {
+ case 1: $key = 'type'; break;
+ case 2: $key = 'subtype'; break;
+ case 3: $key = 'event'; break;
+ }
+ $f[$key] = $val;
+ }
+ $river_events[] = $f;
+
+ }
+ }
+ }
+ // Construct query
+
+ // Objects
+ $n = 0;
+ foreach ($river_events as $details)
+ {
+ // Get what we're talking about
+ if ($n>0) $obj_query .= " or ";
+
+ if ($details['subtype'] == 'default') $details['subtype'] = '';
+
+ $obj_query .= "( sl.object_type='{$details['type']}' and sl.object_subtype='{$details['subtype']}' and sl.event='{$details['event']}' )";
+
+ $n++;
+ }
+
+
+ // User
+ $user = "sl.performed_by_guid in (".implode(',', $by_user).")";
+
+ // Relationship
+ $relationship_query = "";
+ $relationship_join = "";
+ if ($relationship)
+ {
+ $relationship_join = " join {$CONFIG->dbprefix}entity_relationships r on sl.performed_by_guid=r.entity_guid ";
+ $relationship_query = "r.relationship = '$relationship'";
+ }
+
+ $query = "SELECT sl.* from {$CONFIG->dbprefix}system_log sl $relationship_join where $user and $relationship_query ($obj_query) order by sl.time_created desc limit $offset, $limit";
+
+
+ // fetch data from system log (needs optimisation)
+ error_log("MARCUS $query");
+ $log_data = get_data($query);
+
+
+ // until count reached, loop through and render
+ $river = array();
+
+ if ($log_data)
+ {
+ foreach ($log_data as $log)
+ {
+ // See if we have access to the object we're talking about
+ $event = $log->event;
+ $class = $log->object_class;
+ $type = $log->object_type;
+ $subtype = $log->object_subtype;
+ $tmp = new $class();
+ $object = $tmp->getObjectFromID($log->object_id);
+ $by_user_obj = get_entity($log->performed_by_guid);
+
+ // Belts and braces
+ if ($object instanceof $class)
+ {
+ $tam = "";
+
+ // Construct the statement
+ $statement_object = $object; // Simple object, we don't need to do more
+
+ // This is a relationship, slighty more complicated
+ if ($object instanceof ElggRelationship) {
+
+ $statement_object = array(
+ 'subject' => get_entity($object->guid_one),
+ 'relationship' => $object->relationship,// Didn' cast to int here deliberately
+ 'object' => get_entity($object->guid_two)
+ );
+
+ // Metadata or annotations, also slightly more complicated
+ } else if ($object instanceof ElggExtender) {
+ $statement_object = array(
+ 'subject' => $object,
+ 'object' => get_entity($object->entity_guid)
+ );
+ }
+
+ // Put together a river statement
+ $statement = new ElggRiverStatement($by_user_obj, $event, $statement_object);
+
+ // Now construct and call the appropriate views
+
+ if ($subtype == "widget") { // Special case for widgets
+ $subtype = "widget/" . $object->handler;
+ }
+ if ($subtype == '')
+ $subtype = 'default';
+
+ $tam = elgg_view("river/$type/$subtype/$event", array(
+ 'statement' => $statement
+ ));
+
+
+ // Giftwrap
+ if (!empty($tam)) {
+ $tam = elgg_view("river/wrapper",array(
+ 'entry' => $tam,
+ 'time' => $log->time_created,
+ 'event' => $event,
+ 'statement' => $statement
+ ));
+ }
+
+ $river[] = $tam;
+ }
+ }
+ }
+
+ return $river;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // Construct query
+ /*
+ // Events and objects
+ $n = 0;
+ $obj_query = "";
+ foreach ($river_events as $object => $events)
+ {
+ $object = sanitise_string($object);
+
+ if ($n>0) $obj_query .= " or ";
+
+ $obj_query .= "( sl.object_class='$object' and sl.event in ('".implode("','", $events)."') )";
+
+ $n++;
+ }
+
+ // User
+ $user = "sl.performed_by_guid in (".implode(',', $by_user).")";
+
+ // Relationship
+ $relationship_query = "";
+ $relationship_join = "";
+ if ($relationship)
+ {
+ $relationship_join = " join {$CONFIG->dbprefix}entity_relationships r on sl.performed_by_guid=r.entity_guid ";
+ $relationship_query = "r.relationship = '$relationship'";
+ }
+
+ $query = "SELECT sl.* from {$CONFIG->dbprefix}system_log sl $relationship_join where $user and $relationship_query ($obj_query) order by sl.time_created desc limit $offset, $limit";
+
+
+
+
+
+
// set start limit and offset
- $cnt = $limit; // Didn' cast to int here deliberately
- $off = $offset; // here too
+ $cnt = $limit;
+ $off = $offset;
- if (is_array($by_user) && sizeof($by_user) > 0) {
+ if (is_array($by_user) && sizeof($by_user) > 0) {// Didn' cast to int here deliberately
foreach($by_user as $key => $val) {
$by_user[$key] = (int) $val;
}
@@ -185,6 +401,7 @@
do
{
+ //$log_events = get_data($query);
$log_events = get_system_log($by_user, "","", $cnt, $off);
if (!$log_events)
@@ -223,7 +440,7 @@
$statement_object = array(
'subject' => get_entity($object->guid_one),
- 'relationship' => $object->relationship,
+ 'relationship' => $object->relationship,// Didn' cast to int here deliberately
'object' => get_entity($object->guid_two)
);
} else if ($object instanceof ElggExtender) {
@@ -281,7 +498,7 @@
(!$exit)
);
- return $river;
+ return $river;*/
}
/**