static function create($namespace, $userinfo, $network_info) { Logger::log("ShadowUser::create " . serialize($userinfo), LOGGER_ACTION); // setup the needed info if (empty($userinfo['login_name'])) { $userinfo['display_login_name'] = $userinfo['first_name'] . '.' . $userinfo['last_name']; } else { $userinfo['display_login_name'] = $userinfo['login_name']; } // this is the real internal PA login_name // which should NOT be displayed // instead use the display_login_name $userinfo['login_name'] = $namespace . "." . $userinfo['user_id']; $userinfo['confirm_password'] = $userinfo['password'] = substr(md5($userinfo['email'] . rand()), 0, 12); // Test to see if the email was used before $res = Dal::query("SELECT user_id FROM users WHERE email=?", array($userinfo['email'])); if ($res->numrows() > 0) { // oops email has been used // use the prefix.email@address,tld format // to ensure we have an unique string for email $userinfo['email'] = $userinfo['user_id'] . "+" . $userinfo['email']; } $reg_user = new User_Registration(); if ($reg_user->register($userinfo, $network_info)) { // Success! $reg_user->newuser->set_last_login(); // also save the external user_id $reg_user->newuser->set_profile_field($namespace, 'user_id', $userinfo['user_id'], 0); $reg_user->newuser->set_profile_field($namespace, 'display_login_name', $userinfo['display_login_name'], 0); $reg_user->newuser->is_active = ACTIVE; $reg_user->newuser->save(); // load it as a shadow user Cache::reset(); $su = new ShadowUser($namespace); $su->load($userinfo['user_id']); // and make sure all info is actually stored $su->sync($userinfo); Logger::log("ShadowUser::create done " . serialize($userinfo), LOGGER_ACTION); return $su; } else { throw new PAException(BAD_PARAMETER, $reg_user->msg); return NULL; } }