/** * 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);