From 251f4067b32589042ba44b18f7c9b9a54b6db7a4 Mon Sep 17 00:00:00 2001 From: jdalsem Date: Fri, 30 Sep 2016 13:08:45 +0200 Subject: [PATCH] feat(developers): explorer entity information in developer tools With the developer tools you can now lookup attributes, metadata, relationships and private settings of entities. You can also remove individual metadata, relationships or private settings for an entity or remove an entity completely. fixes #9384 --- .../developers/entity_explorer_delete.php | 38 +++++++++++++++++ mod/developers/languages/en.php | 11 +++++ mod/developers/start.php | 2 + .../admin/develop_tools/entity_explorer.php | 42 +++++++++++++++++++ .../entity_explorer/attributes.php | 31 ++++++++++++++ .../entity_explorer/metadata.php | 39 +++++++++++++++++ .../entity_explorer/private_settings.php | 34 +++++++++++++++ .../entity_explorer/relationships.php | 38 +++++++++++++++++ .../forms/developers/entity_explorer.php | 14 +++++++ 9 files changed, 249 insertions(+) create mode 100644 mod/developers/actions/developers/entity_explorer_delete.php create mode 100644 mod/developers/views/default/admin/develop_tools/entity_explorer.php create mode 100644 mod/developers/views/default/admin/develop_tools/entity_explorer/attributes.php create mode 100644 mod/developers/views/default/admin/develop_tools/entity_explorer/metadata.php create mode 100644 mod/developers/views/default/admin/develop_tools/entity_explorer/private_settings.php create mode 100644 mod/developers/views/default/admin/develop_tools/entity_explorer/relationships.php create mode 100644 mod/developers/views/default/forms/developers/entity_explorer.php diff --git a/mod/developers/actions/developers/entity_explorer_delete.php b/mod/developers/actions/developers/entity_explorer_delete.php new file mode 100644 index 00000000000..f76e75c3bf8 --- /dev/null +++ b/mod/developers/actions/developers/entity_explorer_delete.php @@ -0,0 +1,38 @@ +canEdit()) { + access_show_hidden_entities($show_hidden); + return elgg_error_response(elgg_echo('action:unauthorized')); +} + +switch ($type) { + case 'entity': + if (!($entity instanceof ElggSite)) { + $entity->delete(); + } + break; + case 'metadata': + unset($entity->$key); + break; + case 'relationship': + get_relationship($key)->delete(); + break; + case 'private_setting': + $entity->removePrivateSetting($key); + break; +} + +access_show_hidden_entities($show_hidden); +forward(REFERER); diff --git a/mod/developers/languages/en.php b/mod/developers/languages/en.php index 86b3a879717..747244149c9 100644 --- a/mod/developers/languages/en.php +++ b/mod/developers/languages/en.php @@ -6,6 +6,7 @@ 'admin:develop_tools:inspect' => 'Inspect', 'admin:inspect' => 'Inspect', 'admin:develop_tools:unit_tests' => 'Unit Tests', + 'admin:develop_tools:entity_explorer' => 'Entity Explorer', 'admin:developers' => 'Developers', 'admin:developers:settings' => 'Settings', @@ -40,6 +41,16 @@ 'developers:debug:notice' => 'Notice', 'developers:debug:info' => 'Info', + // entity explorer + 'developers:entity_explorer:help' => 'View information about entities and perform some basic actions on them.', + 'developers:entity_explorer:guid:label' => 'Enter the guid of the entity to inspect', + 'developers:entity_explorer:info' => 'Entity Information', + 'developers:entity_explorer:info:attributes' => 'Attributes', + 'developers:entity_explorer:info:metadata' => 'Metadata', + 'developers:entity_explorer:info:relationships' => 'Relationships', + 'developers:entity_explorer:info:private_settings' => 'Private Settings', + 'developers:entity_explorer:delete_entity' => 'Remove this entity', + // inspection 'developers:inspect:help' => 'Inspect configuration of the Elgg framework.', 'developers:inspect:actions' => 'Actions', diff --git a/mod/developers/start.php b/mod/developers/start.php index 9aec2e88a20..4cf1495094a 100644 --- a/mod/developers/start.php +++ b/mod/developers/start.php @@ -24,6 +24,7 @@ function developers_init() { $action_base = __DIR__ . '/actions/developers'; elgg_register_action('developers/settings', "$action_base/settings.php", 'admin'); elgg_register_action('developers/ajax_demo', "$action_base/ajax_demo.php", 'admin'); + elgg_register_action('developers/entity_explorer_delete', "$action_base/entity_explorer_delete.php", 'admin'); elgg_register_ajax_view('forms/developers/ajax_demo'); } @@ -85,6 +86,7 @@ function developers_setup_menu() { elgg_register_admin_menu_item('develop', 'inspect'); elgg_register_admin_menu_item('develop', 'sandbox', 'develop_tools'); elgg_register_admin_menu_item('develop', 'unit_tests', 'develop_tools'); + elgg_register_admin_menu_item('develop', 'entity_explorer', 'develop_tools'); elgg_register_menu_item('page', array( 'name' => 'dev_settings', diff --git a/mod/developers/views/default/admin/develop_tools/entity_explorer.php b/mod/developers/views/default/admin/develop_tools/entity_explorer.php new file mode 100644 index 00000000000..7c21a7cc29b --- /dev/null +++ b/mod/developers/views/default/admin/develop_tools/entity_explorer.php @@ -0,0 +1,42 @@ +' . elgg_echo('developers:entity_explorer:help') . '

'; + +echo elgg_view_form('developers/entity_explorer', [ + 'action' => 'admin/develop_tools/entity_explorer', + 'method' => 'GET', + 'disable_security' => true, +]); + +$guid = get_input('guid'); +if ($guid === null) { + return; +} + +$show_hidden = access_show_hidden_entities(true); +$entity = get_entity($guid); +if (!$entity) { + echo elgg_echo('notfound'); + return; +} + +// Entity Information +echo elgg_view('admin/develop_tools/entity_explorer/attributes', ['entity' => $entity]); + +// Metadata Information +echo elgg_view('admin/develop_tools/entity_explorer/metadata', ['entity' => $entity]); + +// Relationship Information +echo elgg_view('admin/develop_tools/entity_explorer/relationships', ['entity' => $entity]); + +// Private Settings Information +echo elgg_view('admin/develop_tools/entity_explorer/private_settings', ['entity' => $entity]); + +access_show_hidden_entities($show_hidden); + +echo elgg_view('output/url', [ + 'text' => elgg_echo('developers:entity_explorer:delete_entity'), + 'href' => 'action/developers/entity_explorer_delete?guid=' . $entity->guid . '&type=entity&key=' . $entity->guid, + 'confirm' => true, + 'class' => 'elgg-button elgg-button-submit', +]); \ No newline at end of file diff --git a/mod/developers/views/default/admin/develop_tools/entity_explorer/attributes.php b/mod/developers/views/default/admin/develop_tools/entity_explorer/attributes.php new file mode 100644 index 00000000000..28e9d05c0a5 --- /dev/null +++ b/mod/developers/views/default/admin/develop_tools/entity_explorer/attributes.php @@ -0,0 +1,31 @@ +'; + +foreach ($entity_rows as $entity_row) { + + $value = elgg_view('output/text', ['value' => $entity->$entity_row]); + + $entity_info .= ''; + $entity_info .= '' . $entity_row . '' . $value . ''; + $entity_info .= ''; +} + +$entity_info .= ''; + +echo elgg_view_module('inline', elgg_echo('developers:entity_explorer:info:attributes'), $entity_info); diff --git a/mod/developers/views/default/admin/develop_tools/entity_explorer/metadata.php b/mod/developers/views/default/admin/develop_tools/entity_explorer/metadata.php new file mode 100644 index 00000000000..26f18ac12a0 --- /dev/null +++ b/mod/developers/views/default/admin/develop_tools/entity_explorer/metadata.php @@ -0,0 +1,39 @@ + $entity->guid, 'limit' => false]); + +if (empty($entity_metadata)) { + $metadata_info = elgg_echo('notfound'); +} else { + $md_columns = ['id', 'name_id', 'name', 'value_id', 'value', 'value_type', 'access_id', 'time_created', 'enabled']; + + $metadata_info = ''; + $metadata_info .= ''; + foreach ($md_columns as $md_col) { + $metadata_info .= ''; + } + $metadata_info .= ''; + $metadata_info .= ''; + + foreach ($entity_metadata as $md) { + $metadata_info .= ''; + foreach ($md_columns as $md_col) { + $value = elgg_view('output/text', ['value' => $md->$md_col]); + $metadata_info .= ''; + } + $metadata_info .= ''; + $metadata_info .= ''; + } + $metadata_info .= '
' . $md_col . ' 
' . $value . '' . elgg_view('output/url', [ + 'text' => elgg_view_icon('remove'), + 'href' => elgg_http_add_url_query_elements('action/developers/entity_explorer_delete', [ + 'guid' => $entity->guid, + 'type' => 'metadata', + 'key' => $md->name, + ]), + 'confirm' => true, + ]) . '
'; +} +echo elgg_view_module('inline', elgg_echo('developers:entity_explorer:info:metadata'), $metadata_info); diff --git a/mod/developers/views/default/admin/develop_tools/entity_explorer/private_settings.php b/mod/developers/views/default/admin/develop_tools/entity_explorer/private_settings.php new file mode 100644 index 00000000000..16a116dc305 --- /dev/null +++ b/mod/developers/views/default/admin/develop_tools/entity_explorer/private_settings.php @@ -0,0 +1,34 @@ +guid); +if (empty($private_settings)) { + $private_settings_info = elgg_echo('notfound'); +} else { + $private_settings_info = ''; + $private_settings_info .= ''; + $private_settings_info .= ''; + $private_settings_info .= ''; + + foreach ($private_settings as $key => $value) { + + $key_val = elgg_view('output/text', ['value' => $key]); + $value = elgg_view('output/text', ['value' => $value]); + + $private_settings_info .= ''; + $private_settings_info .= ""; + $private_settings_info .= ''; + $private_settings_info .= ''; + } + $private_settings_info .= '
keyvalue 
$key_val$value' . elgg_view('output/url', [ + 'text' => elgg_view_icon('remove'), + 'href' => elgg_http_add_url_query_elements('action/developers/entity_explorer_delete', [ + 'guid' => $entity->guid, + 'type' => 'private_setting', + 'key' => $key, + ]), + 'confirm' => true, + ]) . '
'; +} +echo elgg_view_module('inline', elgg_echo('developers:entity_explorer:info:private_settings'), $private_settings_info); diff --git a/mod/developers/views/default/admin/develop_tools/entity_explorer/relationships.php b/mod/developers/views/default/admin/develop_tools/entity_explorer/relationships.php new file mode 100644 index 00000000000..b7e068af774 --- /dev/null +++ b/mod/developers/views/default/admin/develop_tools/entity_explorer/relationships.php @@ -0,0 +1,38 @@ +guid); + +if (empty($entity_relationships)) { + $relationship_info = elgg_echo('notfound'); +} else { + $relationship_columns = ['id', 'time_created', 'guid_one', 'relationship', 'guid_two']; + + $relationship_info = ''; + $relationship_info .= ''; + foreach ($relationship_columns as $relationship_col) { + $relationship_info .= ''; + } + $relationship_info .= ''; + $relationship_info .= ''; + + foreach ($entity_relationships as $relationship) { + $relationship_info .= ''; + foreach ($relationship_columns as $relationship_col) { + $relationship_info .= ''; + } + $relationship_info .= ''; + $relationship_info .= ''; + } + $relationship_info .= '
' . $relationship_col . ' 
' . $relationship->$relationship_col . '' . elgg_view('output/url', [ + 'text' => elgg_view_icon('remove'), + 'href' => elgg_http_add_url_query_elements('action/developers/entity_explorer_delete', [ + 'guid' => $entity->guid, + 'type' => 'relationship', + 'key' => $relationship->id, + ]), + 'confirm' => true, + ]) . '
'; +} +echo elgg_view_module('inline', elgg_echo('developers:entity_explorer:info:relationships'), $relationship_info); diff --git a/mod/developers/views/default/forms/developers/entity_explorer.php b/mod/developers/views/default/forms/developers/entity_explorer.php new file mode 100644 index 00000000000..ccacbc9de3b --- /dev/null +++ b/mod/developers/views/default/forms/developers/entity_explorer.php @@ -0,0 +1,14 @@ + 'guid', + 'value' => get_input('guid'), + 'required' => true, + 'label' => elgg_echo('developers:entity_explorer:guid:label'), +]); + +$footer = elgg_view('input/submit', [ + 'value' => elgg_echo('submit'), +]); + +elgg_set_form_footer($footer); \ No newline at end of file