]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixed problems with user-self registration if default widgets are set.
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 20 Feb 2011 03:46:39 +0000 (03:46 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 20 Feb 2011 03:46:39 +0000 (03:46 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8356 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/widgets.php

index 6cca2a18dad1cd64b366d4078bc6865640c444b5..7c086754853637daba601604d381d29b9e0b37e2 100644 (file)
@@ -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