aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/classes/ElggSite.php26
-rw-r--r--engine/lib/elgglib.php16
-rw-r--r--mod/groups/start.php4
-rw-r--r--mod/groups/views/default/forms/groups/edit.php2
4 files changed, 39 insertions, 9 deletions
diff --git a/engine/classes/ElggSite.php b/engine/classes/ElggSite.php
index e793ab9c6..401939005 100644
--- a/engine/classes/ElggSite.php
+++ b/engine/classes/ElggSite.php
@@ -381,14 +381,24 @@ class ElggSite extends ElggEntity {
public function checkWalledGarden() {
global $CONFIG;
- if ($CONFIG->walled_garden && !elgg_is_logged_in()) {
- // hook into the index system call at the highest priority
- elgg_register_plugin_hook_handler('index', 'system', 'elgg_walled_garden_index', 1);
-
- if (!$this->isPublicPage()) {
- $_SESSION['last_forward_from'] = current_page_url();
- register_error(elgg_echo('loggedinrequired'));
- forward();
+ if ($CONFIG->walled_garden) {
+ if ($CONFIG->default_access == ACCESS_PUBLIC) {
+ $CONFIG->default_access = ACCESS_LOGGED_IN;
+ }
+ elgg_register_plugin_hook_handler(
+ 'access:collections:write',
+ 'user',
+ '_elgg_walled_garden_remove_public_access');
+
+ if (!elgg_is_logged_in()) {
+ // hook into the index system call at the highest priority
+ elgg_register_plugin_hook_handler('index', 'system', 'elgg_walled_garden_index', 1);
+
+ if (!$this->isPublicPage()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ register_error(elgg_echo('loggedinrequired'));
+ forward();
+ }
}
}
}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 0c42c1c08..3026a78e3 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -2098,6 +2098,22 @@ function elgg_walled_garden() {
}
/**
+ * Remove public access for walled gardens
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $accesses
+ * @return array
+ * @access private
+ */
+function _elgg_walled_garden_remove_public_access($hook, $type, $accesses) {
+ if (isset($accesses[ACCESS_PUBLIC])) {
+ unset($accesses[ACCESS_PUBLIC]);
+ }
+ return $accesses;
+}
+
+/**
* Boots the engine
*
* 1. sets error handlers
diff --git a/mod/groups/start.php b/mod/groups/start.php
index d85bb6492..193b72a4e 100644
--- a/mod/groups/start.php
+++ b/mod/groups/start.php
@@ -943,6 +943,10 @@ function discussion_create_reply_notification($hook, $type, $message, $params) {
function discussion_reply_notifications($event, $type, $annotation) {
global $CONFIG, $NOTIFICATION_HANDLERS;
+ if ($annotation->name !== 'group_topic_post') {
+ return;
+ }
+
// Have we registered notifications for this type of entity?
$object_type = 'object';
$object_subtype = 'groupforumtopic';
diff --git a/mod/groups/views/default/forms/groups/edit.php b/mod/groups/views/default/forms/groups/edit.php
index 26436ef01..8055b6430 100644
--- a/mod/groups/views/default/forms/groups/edit.php
+++ b/mod/groups/views/default/forms/groups/edit.php
@@ -55,7 +55,7 @@ if ($group_profile_fields > 0) {
<div>
<label>
<?php echo elgg_echo('groups:membership'); ?><br />
- <?php echo elgg_view('input/access', array(
+ <?php echo elgg_view('input/dropdown', array(
'name' => 'membership',
'value' => $membership,
'options_values' => array(