/** * Perform a somewhat complicated query to extract river data from the system log based on available views. * * NOTE: Do not use this function directly. It is called elsewhere and is subject to change without warning. * * @param unknown_type $by_user * @param unknown_type $relationship * @param unknown_type $limit * @param unknown_type $offset * @return unknown */ function __get_river_from_log($by_user = "", $relationship = "", $limit = 10, $offset = 0) { global $CONFIG; // Get all potential river events from available view $river_events = array(); $river_views = elgg_view_tree('river'); foreach ($river_views 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 (isset($details['subtype']) && $details['subtype'] == 'default') { $details['subtype'] = ''; } if (isset($details['type']) && isset($details['event'])) { if ($n > 0) { $obj_query .= " or "; } $access = ""; if ($details['type'] != 'relationship') { $access = " and " . get_access_sql_suffix('sl'); } $obj_query .= "( sl.object_type='{$details['type']}' and sl.object_subtype='{$details['subtype']}' and sl.event='{$details['event']}' {$access} )"; $n++; } } // User $user = "******" . 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) return get_data($query); }
/** * Construct and execute the query required for the activity stream. * * @deprecated 1.8 This is outdated and uses the systemlog table instead of the river table. * Don't use it. */ function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype = "", $owner_guid = "", $owner_relationship = "") { elgg_deprecated_notice("get_activity_stream_data was deprecated", 1.8); global $CONFIG; $limit = (int) $limit; $offset = (int) $offset; if ($type) { if (!is_array($type)) { $type = array(sanitise_string($type)); } else { foreach ($type as $k => $v) { $type[$k] = sanitise_string($v); } } } if ($subtype) { if (!is_array($subtype)) { $subtype = array(sanitise_string($subtype)); } else { foreach ($subtype as $k => $v) { $subtype[$k] = sanitise_string($v); } } } if ($owner_guid) { if (is_array($owner_guid)) { foreach ($owner_guid as $k => $v) { $owner_guid[$k] = (int) $v; } } else { $owner_guid = array((int) $owner_guid); } } $owner_relationship = sanitise_string($owner_relationship); // Get a list of possible views $activity_events = array(); $activity_views = array_merge(elgg_view_tree('activity', 'default'), elgg_view_tree('river', 'default')); $done = array(); foreach ($activity_views as $view) { $fragments = explode('/', $view); $tmp = explode('/', $view, 2); $tmp = $tmp[1]; if (isset($fragments[0]) && ($fragments[0] == 'river' || $fragments[0] == 'activity') && !in_array($tmp, $done)) { 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; } // Filter result based on parameters $add = true; if ($type) { if (!in_array($f['type'], $type)) { $add = false; } } if ($add && $subtype) { if (!in_array($f['subtype'], $subtype)) { $add = false; } } if ($add) { $activity_events[] = $f; } } $done[] = $tmp; } } $n = 0; foreach ($activity_events as $details) { // Get what we're talking about if ($details['subtype'] == 'default') { $details['subtype'] = ''; } if ($details['type'] && $details['event']) { if ($n > 0) { $obj_query .= " or "; } $access = ""; if ($details['type'] != 'relationship') { $access = " and " . get_access_sql_suffix('sl'); } $obj_query .= "( sl.object_type='{$details['type']}'\n\t\t\t\tAND sl.object_subtype='{$details['subtype']}'\n\t\t\t\tAND sl.event='{$details['event']}' {$access} )"; $n++; } } // User if (count($owner_guid) && $owner_guid[0] != 0) { $user = "******" . implode(',', $owner_guid) . ")"; if ($owner_relationship) { $friendsarray = ""; if ($friends = elgg_get_entities_from_relationship(array('relationship' => $owner_relationship, 'relationship_guid' => $owner_guid[0], 'inverse_relationship' => FALSE, 'type' => 'user', 'subtype' => $subtype, 'limit' => false))) { $friendsarray = array(); foreach ($friends as $friend) { $friendsarray[] = $friend->getGUID(); } $user = "******" . implode(',', $friendsarray) . ")"; } } } $query = "SELECT sl.* FROM {$CONFIG->dbprefix}system_log sl\n\t\tWHERE 1 {$user} AND ({$obj_query})\n\t\tORDER BY sl.time_created desc limit {$offset}, {$limit}"; return get_data($query); }
<?php namespace Elgg\Roles\UI; // VIEWS FOR AUTOCOMPLETE $views = elgg_view_tree('', ''); foreach ($views as $view) { $views_config[] = trim($view, '/'); } // HOOKS FOR AUTOCOMPLETE $hooks = elgg_get_config('hooks'); if (!array_key_exists('all', $hooks)) { $hooks['all'] = array(); } foreach ($hooks as $name => $params) { if (!array_key_exists('all', $params)) { $params['all'] = array(); } foreach ($params as $type => $handlers) { $hooks_config[] = "{$name}::{$type}"; $hook_handlers_config["{$name}::{$type}"] = array_values($handlers); $menu_type = explode(':', $type); if ($menu_type[0] == 'menu') { unset($menu_type[0]); $registered_menu_hooks[] = implode(':', $menu_type); } } } sort($hooks_config); // EVENTS FOR AUTOCOMPLETE $events = elgg_get_config('events');