/**
 * 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);
}
Beispiel #3
0
<?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');