Example #1
0
File: start.php Project: n8b/VMN
/**
 * 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;
}
    $query = array($query);
} else {
    if (empty($query)) {
        $query = array();
    }
}
// Add strict mode value to the URL query
$strict = elgg_extract('strict', $vars, true);
$query['strict'] = $strict;
$vars['data-allow-free-tagging'] = !$strict;
unset($vars['strict']);
if (isset($vars['callback'])) {
    $query['callback'] = $vars['callback'];
    unset($vars['callback']);
    $query['ts'] = time();
    $query['hmac'] = hash_hmac('sha256', $query['ts'] . $query['callback'], elgg_tokeninput_get_secret());
}
$endpoint = elgg_extract('endpoint', $vars, '/tokeninput');
unset($vars['endpoint']);
$vars['data-href'] = urldecode(elgg_http_add_url_query_elements(elgg_normalize_url($endpoint), $query));
$vars['data-placeholder'] = elgg_extract('placeholder', $vars, elgg_echo('tokeninput:text:placeholder'));
$autoexplode = elgg_extract('autoexplode', $vars, true);
unset($vars['autoexplode']);
if ($autoexplode) {
    // Add a hidden field to use in the action hook to unserialize the values
    echo elgg_view('input/hidden', array('name' => 'elgg_tokeninput_fields[]', 'value' => $vars['name']));
    if (!empty($vars['is_elgg_autocomplete'])) {
        echo elgg_view('input/hidden', array('name' => 'elgg_tokeninput_autocomplete[]', 'value' => $vars['name']));
    }
}
echo elgg_format_element('input', $vars);