Exemple #1
0
/**
 * Page handler for parcing autocomplete results
 *
 * @param type $page
 */
function elgg_tokeninput_page_handler($page)
{
    elgg_load_library('elgg.tokeninput');
    $user = elgg_get_logged_in_user_entity();
    $callback = urldecode(get_input('callback'));
    if ($callback) {
        $hmac = get_input('hmac');
        $ts = get_input('ts');
        if (hash_hmac('sha256', $ts . $callback, elgg_tokeninput_get_secret()) !== $hmac) {
            header('HTTP/1.1 403 Forbidden');
            exit;
        }
    } else {
        $callback = 'elgg_tokeninput_search_all';
    }
    $q = urldecode(get_input('term', get_input('q', '')));
    $strict = (bool) get_input('strict', true);
    if (!is_callable($callback)) {
        header('HTTP/1.1 400 Bad Request');
        exit;
    }
    $results = array();
    $options = get_input('options', array());
    $entities = call_user_func($callback, $q, $options);
    if (is_array($entities) && count($entities)) {
        foreach ($entities as $entity) {
            if (elgg_instanceof($entity)) {
                $results[] = elgg_tokeninput_export_entity($entity);
            } else {
                if ($entity instanceof ElggMetadata) {
                    $results[] = elgg_tokeninput_export_metadata($entity);
                } else {
                    $results[] = (array) $entity;
                }
            }
        }
    }
    if (!count($results) && $strict === false) {
        $suggest = array('label' => $q, 'value' => $q, 'html_result' => '<span>' . elgg_echo('tokeninput:suggest', array($q)) . '</span>');
        $results[] = $suggest;
    }
    header("Content-Type: application/json");
    echo json_encode($results);
    exit;
}
    if (is_string($value)) {
        $delimiter = elgg_extract('data-token-delimiter', $vars, ',');
        $value = explode($delimiter, $value);
    }
} else {
    $value = array();
}
foreach ($value as $selected) {
    if (!empty($vars['is_elgg_autocomplete'])) {
        // Elgg autocomplete uses usernames
        $user = get_user_by_username($selected);
        if ($user) {
            $selected = $user;
        }
    }
    $values[] = elgg_tokeninput_export_entity($selected);
}
$vars['data-pre-populate'] = json_encode($values);
// Limit number of possible values
if (isset($vars['limit'])) {
    $limit = elgg_extract('limit', $vars, null);
    unset($vars['limit']);
}
$vars['data-token-limit'] = !$vars['multiple'] ? 1 : $limit;
// Prepare query
if (isset($vars['query'])) {
    $query = elgg_extract('query', $vars);
    unset($vars['query']);
}
if ($query && !is_array($query)) {
    $query = array($query);