/** * Make inspection values into a table structure * * @param mixed $key the key to present * @param array $merged_values the base array to show from * @param array $elgg_values the Elgg values * @param array $elgg_values the Elasticsearch values * @param int $depth internal usage only * * @return false|array */ function elasticsearch_inspect_show_values($key, $merged_values, $elgg_values, $elasticsearch_values, $depth = 0) { if (empty($merged_values) || !is_array($merged_values)) { return false; } $rows = []; if (empty($depth)) { $rows[] = elgg_format_element('th', ['colspan' => 3], $key); } else { $rows[] = elgg_format_element('td', ['colspan' => 3], "<b>{$key}</b>"); } foreach ($merged_values as $key => $values) { if (!is_array($values)) { $rows[] = implode('', [elgg_format_element('td', [], $key), elgg_format_element('td', [], elgg_extract($key, $elgg_values)), elgg_format_element('td', [], elgg_extract($key, $elasticsearch_values))]); } else { $subvalues = elasticsearch_inspect_show_values($key, $values, elgg_extract($key, $elgg_values), elgg_extract($key, $elasticsearch_values), $depth + 1); if (!empty($subvalues)) { $rows = array_merge($rows, $subvalues); } } } return $rows; }
} $client = elasticsearch_get_client(); $elasticsearch_content = $client->inspect($guid); if (empty($elasticsearch_content)) { $result = elgg_echo('elasticsearch:inspect:result:error:not_indexed'); } else { // needed for listing all possible values $merged = array_replace_recursive($current_content, $elasticsearch_content); $rows = []; $extras = []; $rows[] = implode('', [elgg_format_element('th', [], ' '), elgg_format_element('th', [], elgg_echo('elasticsearch:inspect:result:elgg')), elgg_format_element('th', [], elgg_echo('elasticsearch:inspect:result:elasticsearch'))]); foreach ($merged as $key => $values) { if (!is_array($values)) { // main content $rows[] = implode('', [elgg_format_element('td', [], $key), elgg_format_element('td', [], elgg_extract($key, $current_content)), elgg_format_element('td', [], elgg_extract($key, $elasticsearch_content))]); } else { // has subvalues $subvalues = elasticsearch_inspect_show_values($key, $values, elgg_extract($key, $current_content), elgg_extract($key, $elasticsearch_content)); if (!empty($subvalues)) { $extras = array_merge($extras, $subvalues); } } } $rows = array_merge($rows, $extras); $result .= elgg_format_element('table', ['class' => 'elgg-table'], '<tr>' . implode('</tr><tr>', $rows) . '</tr>'); } } } if (!empty($result)) { echo elgg_view_module('inline', elgg_echo('elasticsearch:inspect:result:title'), $result); }