]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
pulled out special exception in registration action for first admin login
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 9 Oct 2010 14:01:08 +0000 (14:01 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 9 Oct 2010 14:01:08 +0000 (14:01 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7040 36083f99-b078-4883-b0ff-0f9b5a30f544

actions/register.php
install/ElggInstaller.php
install/languages/en.php

index 9c4efa9f64071675c391748dc30d89f39787894c..b9db150c17848805b08024392d7c539a2913b667 100644 (file)
@@ -43,39 +43,20 @@ if ($CONFIG->allow_registration) {
                                'invitecode' => $invitecode
                        );
 
-                       // if this user is admin, that means it was the first
-                       // registered user.  Don't trigger this hook.
-                       // @todo This can be removed in the new installer
-                       if (!$new_user->isAdmin()) {
-                               // @todo should registration be allowed no matter what the plugins return?
-                               if (!trigger_plugin_hook('register', 'user', $params, TRUE)) {
-                                       $new_user->delete();
-                                       // @todo this is a generic messages. We could have plugins
-                                       // throw a RegistrationException, but that is very odd
-                                       // for the plugin hooks system.
-                                       throw new RegistrationException(elgg_echo('registerbad'));
-                               }
+                       // @todo should registration be allowed no matter what the plugins return?
+                       if (!trigger_plugin_hook('register', 'user', $params, TRUE)) {
+                               $new_user->delete();
+                               // @todo this is a generic messages. We could have plugins
+                               // throw a RegistrationException, but that is very odd
+                               // for the plugin hooks system.
+                               throw new RegistrationException(elgg_echo('registerbad'));
                        }
 
                        system_message(sprintf(elgg_echo("registerok"), $CONFIG->sitename));
 
                        // Forward on success, assume everything else is an error...
-                       // If just registered admin user, login the user in and forward to the
-                       // plugins simple settings page.
-                       if (!datalist_get('first_admin_login') && $new_user->isAdmin()) {
-                               login($new_user);
-                               // remove the "you've registered!" system_message();
-                               $_SESSION['msg']['messages'] = array();
-
-                               // remind users to enable / disable desired tools
-                               elgg_add_admin_notice('first_installation_plugin_reminder', elgg_echo('firstadminlogininstructions'));
-
-                               datalist_set('first_admin_login', time());
-                               forward('pg/admin/plugins/simple');
-                       } else {
-                               login($new_user);
-                               forward();
-                       }
+                       login($new_user);
+                       forward();
                } else {
                        register_error(elgg_echo("registerbad"));
                }
index dc639d44af513c77c21d845cca2249e43639715f..79c6bb212f537020cec3658760a4387d4fbaca68 100644 (file)
@@ -9,6 +9,16 @@
  * @link http://elgg.org/
  */
 
+/*
+ * @todo - integrate this could in case we want to send new admin to plugins page
+                               // remind users to enable / disable desired tools
+                               elgg_add_admin_notice('first_installation_plugin_reminder', elgg_echo('firstadminlogininstructions'));
+
+                               datalist_set('first_admin_login', time());
+                               forward('pg/admin/plugins/simple');
+
+ */
+
 class ElggInstaller {
 
        protected $steps = array(
@@ -26,7 +36,9 @@ class ElggInstaller {
                'admin' => FALSE,
        );
 
-       protected $isAction;
+       protected $isAction = FALSE;
+
+       protected $autoLogin = FALSE;
 
        /**
         * Constructor bootstraps the Elgg engine
@@ -359,10 +371,10 @@ class ElggInstaller {
                                        break;
                                }
 
-                               if (!$this->createAdminAccount($submissionVars)) {
+                               if (!$this->createAdminAccount($submissionVars, $this->autoLogin)) {
                                        break;
                                }
-
+                               
                                system_message(elgg_echo('install:success:admin'));
 
                                $this->continueToNextStep('admin');
@@ -574,16 +586,19 @@ class ElggInstaller {
         */
        protected function finishBootstraping($step) {
 
-               // install has its own session handling
-               session_name('Elgg');
-               session_start();
-               unregister_elgg_event_handler('boot', 'system', 'session_init');
-
-               // once the database has been created, load rest of engine
                $dbIndex = array_search('database', $this->getSteps());
+               $settingsIndex = array_search('settings', $this->getSteps());
                $stepIndex = array_search($step, $this->getSteps());
 
+               if ($stepIndex <= $settingsIndex) {
+                       // install has its own session handling before the db created and set up
+                       session_name('Elgg');
+                       session_start();
+                       unregister_elgg_event_handler('boot', 'system', 'session_init');
+               }
+
                if ($stepIndex > $dbIndex) {
+                       // once the database has been created, load rest of engine
                        global $CONFIG;
                        $lib_dir = $CONFIG->path . 'engine/lib/';
 
@@ -1124,7 +1139,7 @@ class ElggInstaller {
                foreach ($formVars as $field => $info) {
                        if ($info['required'] == TRUE && !$submissionVars[$field]) {
                                $name = elgg_echo("install:settings:label:$field");
-                               register_error(sprintf(elgg_echo('install:error:requiredfield')), $name);
+                               register_error(sprintf(elgg_echo('install:error:requiredfield'), $name));
                                return FALSE;
                        }
                }
@@ -1151,7 +1166,7 @@ class ElggInstaller {
                }
 
                // @todo check that url is a url
-
+               // @note filter_var cannot be used because it doesn't work on international urls
 
                return TRUE;
        }
@@ -1268,9 +1283,10 @@ class ElggInstaller {
         * Create a user account for the admin
         *
         * @param array $submissionVars
+        * @param bool $login Login in the admin user?
         * @return bool
         */
-       protected function createAdminAccount($submissionVars) {
+       protected function createAdminAccount($submissionVars, $login = FALSE) {
                global $CONFIG;
 
                $guid = register_user(
@@ -1285,17 +1301,28 @@ class ElggInstaller {
                        return FALSE;
                }
 
-               // @todo - register plugin hook instead for can edit
-               // need a logged in user to set admin flag so we go directly to database
-               $result = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='yes' where guid=$guid");
-               if (!$result) {
-                       register_error("Unable to give new user account admin privileges.");
+               $user = get_entity($guid);
+               if (!$user) {
+                       register_error(elgg_echo('install:error:loadadmin'));
                        return FALSE;
                }
 
+               elgg_set_ignore_access(TRUE);
+               if ($user->makeAdmin() == FALSE) {
+                       register_error(elgg_echo('install:error:adminaccess'));
+               }
+               elgg_set_ignore_access(FALSE);
+
+               // add validation data to satisfy the user validation plugins
                create_metadata($guid, 'validated', TRUE, '', 0, ACCESS_PUBLIC);
                create_metadata($guid, 'validated_method', 'admin_user', '', 0, ACCESS_PUBLIC);
 
+               if ($login) {
+                       if (login($user) == FALSE) {
+                               register_error(elgg_echo('install:error:adminlogin'));                          
+                       }
+               }
+
                return TRUE;
        }
 }
index 4163ea5d2aeaa87c5200b1bbf2843794b061da73..577d5ddbc8ce4e6a21e716ec6fcb15f90d23846d 100644 (file)
@@ -128,6 +128,9 @@ If you are ready to proceed, click the Next button.",
        'install:error:locationdatadirectory' => 'Your data directory %s must be outside of your install path for security.',
        'install:error:emailaddress' => '%s is not a valid email address',
        'install:error:createsite' => 'Unable to create the site.',
+       'install:error:loadadmin' => 'Unable to load admin user.',
+       'install:error:adminaccess' => 'Unable to give new user account admin privileges.',
+       'install:error:adminlogin' => 'Unable to login the new admin user automatically.',
 );
 
 add_translation("en", $english);