aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/widgets.php27
1 files changed, 27 insertions, 0 deletions
diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php
index 6cca2a18d..7c0867548 100644
--- a/engine/lib/widgets.php
+++ b/engine/lib/widgets.php
@@ -290,6 +290,9 @@ function elgg_default_widgets_init() {
if ($default_widgets) {
elgg_add_admin_menu_item('default_widgets', elgg_echo('admin:appearance:default_widgets'), 'appearance', 30);
+ // override permissions for creating widget on logged out / just created entities
+ elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'elgg_default_widgets_permissions_override');
+
foreach ($default_widgets as $info) {
elgg_register_event_handler($info['event'], $info['entity_type'], 'elgg_default_widgets_hook');
}
@@ -323,6 +326,10 @@ function elgg_default_widgets_hook($event, $type, $object) {
}
}
+ // need to be able to access everything
+ $old_ia = elgg_get_ignore_access(true);
+ elgg_push_context('create_default_widgets');
+
// pull in by widget context with widget owners as the site
// not using elgg_get_widgets() because it sorts by columns and we don't care right now.
$options = array(
@@ -352,10 +359,30 @@ function elgg_default_widgets_hook($event, $type, $object) {
$new_widget->save();
}
+ elgg_get_ignore_access($old_ia);
+ elgg_pop_context();
+
// failure here shouldn't stop the event.
return null;
}
+/**
+ * Overrides permissions checks when creating widgets for logged out users.
+ *
+ * @param string $hook The permissions hook.
+ * @param string $type The type of entity being created.
+ * @param string $return Value
+ * @param mixed $params Params
+ * @return true|null
+ */
+function elgg_default_widgets_permissions_override($hook, $type, $return, $params) {
+ if ($type == 'object' && $params['subtype'] == 'widget') {
+ return elgg_in_context('create_default_widgets') ? true : null;
+ }
+
+ return null;
+}
+
elgg_register_event_handler('init', 'system', 'elgg_widgets_init');
// register default widget hooks from plugins
elgg_register_event_handler('ready', 'system', 'elgg_default_widgets_init'); \ No newline at end of file