aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-05-11 21:37:12 +0000
committernickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-05-11 21:37:12 +0000
commit25c192e75d52f5bd7db4da22bb9213421fa36b4c (patch)
treee2ef3042e4b048714a08d273700a426ac6020b1a
parente210f797ff2dda5785e64380234f1ee876bc5c12 (diff)
downloadelgg-25c192e75d52f5bd7db4da22bb9213421fa36b4c.tar.gz
elgg-25c192e75d52f5bd7db4da22bb9213421fa36b4c.tar.bz2
Do not display site pages when in Walled Garden mode, excepting system-defined whitelist.
git-svn-id: http://code.elgg.org/elgg/trunk@6004 36083f99-b078-4883-b0ff-0f9b5a30f544
-rw-r--r--actions/admin/site/update_advanced.php7
-rw-r--r--actions/systemsettings/install.php1
-rw-r--r--engine/lib/elgglib.php19
-rw-r--r--engine/lib/sites.php45
-rw-r--r--engine/lib/upgrades/2010050701.php2
-rw-r--r--views/default/admin/site/advanced.php10
6 files changed, 83 insertions, 1 deletions
diff --git a/actions/admin/site/update_advanced.php b/actions/admin/site/update_advanced.php
index 7e6bd0cc6..e65919ce1 100644
--- a/actions/admin/site/update_advanced.php
+++ b/actions/admin/site/update_advanced.php
@@ -56,6 +56,13 @@ if (datalist_get('default_site')) {
} else {
set_config('allow_registration', FALSE, $site->getGUID());
}
+
+ // setup walled garden
+ if (get_input('walled_garden', FALSE)) {
+ set_config('walled_garden', TRUE, $site->getGUID());
+ } else {
+ set_config('walled_garden', FALSE, $site->getGUID());
+ }
$https_login = get_input('https_login');
if ($https_login) {
diff --git a/actions/systemsettings/install.php b/actions/systemsettings/install.php
index 3b841caf9..6f3b75a3d 100644
--- a/actions/systemsettings/install.php
+++ b/actions/systemsettings/install.php
@@ -69,6 +69,7 @@ if (get_input('settings') == 'go') {
set_config('language', get_input('language'), $site->getGUID());
set_config('default_access', get_input('default_access'), $site->getGUID());
set_config('allow_registration', TRUE, $site->getGUID());
+ set_config('walled_garden', FALSE, $site->getGUID());
$debug = get_input('debug');
if ($debug) {
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 9ee85c559..4e141bb84 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -3107,16 +3107,28 @@ function __elgg_shutdown_hook() {
function elgg_init() {
// Page handler for JS
register_page_handler('js','js_page_handler');
-
+
// Register an event triggered at system shutdown
register_shutdown_function('__elgg_shutdown_hook');
}
+function elgg_walled_garden_index() {
+ global $CONFIG;
+
+ $login = elgg_view('account/forms/login');
+ $layout = elgg_view_layout('one_column', $login);
+
+ echo page_draw('', $layout);
+ return TRUE;
+}
+
/**
* Boot Elgg
* @return unknown_type
*/
function elgg_boot() {
+ global $CONFIG;
+
// Actions
register_action('comments/add');
register_action('comments/delete');
@@ -3126,6 +3138,11 @@ function elgg_boot() {
elgg_view_register_simplecache('css');
elgg_view_register_simplecache('js/friendsPickerv1');
elgg_view_register_simplecache('js/initialise_elgg');
+
+ // check for external page view
+ if (isset($CONFIG->site) && $CONFIG->site instanceof ElggSite) {
+ $CONFIG->site->check_walled_garden();
+ }
}
/**
diff --git a/engine/lib/sites.php b/engine/lib/sites.php
index 13521a257..c976384c2 100644
--- a/engine/lib/sites.php
+++ b/engine/lib/sites.php
@@ -243,6 +243,51 @@ class ElggSite extends ElggEntity {
'url',
));
}
+
+ public function check_walled_garden() {
+ global $CONFIG;
+
+ if ($CONFIG->walled_garden && !isloggedin()) {
+ register_plugin_hook('index', 'system', 'elgg_walled_garden_index');
+
+ if (!$this->is_public_page()) {
+ register_error(elgg_echo('walled_garden:private_page') . current_page_url());
+ forward();
+ }
+ }
+ }
+
+ public function is_public_page($url='') {
+ global $CONFIG;
+
+ if (empty($url)) {
+ $url = current_page_url();
+
+ // do not check against URL queries
+ if ($pos = strpos($url, '?')) {
+ $url = substr($url, 0, $pos);
+ }
+ }
+
+ // default public pages
+ $public = array(
+ $CONFIG->url,
+ "{$CONFIG->url}action/login",
+ "{$CONFIG->url}upgrade.php",
+ );
+
+ // include a hook for plugin authors to include public pages
+
+ // lookup admin-specific public pages
+
+ // allow public pages
+ if (in_array($url, $public)) {
+ return TRUE;
+ }
+
+ // non-public page
+ return FALSE;
+ }
}
/**
diff --git a/engine/lib/upgrades/2010050701.php b/engine/lib/upgrades/2010050701.php
index 33e4b5bae..4a02a77c6 100644
--- a/engine/lib/upgrades/2010050701.php
+++ b/engine/lib/upgrades/2010050701.php
@@ -8,8 +8,10 @@ $access = elgg_set_ignore_access(TRUE);
if (is_plugin_enabled('walledgarden')) {
disable_plugin('walledgarden');
set_config('allow_registration', FALSE);
+ set_config('walled_garden', TRUE);
} else {
set_config('allow_registration', TRUE);
+ set_config('walled_garden', FALSE);
}
elgg_set_ignore_access($access);
diff --git a/views/default/admin/site/advanced.php b/views/default/admin/site/advanced.php
index e8c6e9b9a..35c57356d 100644
--- a/views/default/admin/site/advanced.php
+++ b/views/default/admin/site/advanced.php
@@ -33,6 +33,7 @@ $form_body .= "<p>" . elgg_echo('installation:debug');
$form_body .= elgg_view('input/pulldown', array('options_values' => $debug_options, 'internalname' => 'debug', 'value' => $vars['config']->debug));
$form_body .= '</p>';
+// control new user registration
$options = array(
'options' => array(elgg_echo('installation:registration:label')),
'internalname' => 'allow_registration',
@@ -41,6 +42,15 @@ $options = array(
$form_body .= '<p>' . elgg_echo('installation:registration:description');
$form_body .= '<br />' .elgg_view('input/checkboxes', $options) . '</p>';
+// control walled garden
+$options = array(
+ 'options' => array(elgg_echo('installation:walled_garden:label')),
+ 'internalname' => 'walled_garden',
+ 'value' => $vars['config']->walled_garden ? elgg_echo('installation:walled_garden:label') : '',
+);
+$form_body .= '<p>' . elgg_echo('installation:walled_garden:description');
+$form_body .= '<br />' . elgg_view('input/checkboxes', $options) . '</p>';
+
$form_body .= "<p>" . elgg_echo('installation:httpslogin') . "<br />" .elgg_view("input/checkboxes", array('options' => array(elgg_echo('installation:httpslogin:label')), 'internalname' => 'https_login', 'value' => ($vars['config']->https_login ? elgg_echo('installation:httpslogin:label') : "") )) . "</p>";
$form_body .= "<p>" . elgg_echo('installation:disableapi') . "<br />";