Revision [6298]
This is an old revision of RegisterAction made by IanAndolina on 2005-02-24 23:14:37.
Register Action
See also:
Documentation: RegisterActionInfo.I've started working on a new version of an action for user registration. The motivation behind this is to replace the current usersetting action with three distinct actions:
- register action - handling operations related to user registration and first login;
- login action - handling operations related to login/logout and password retrieval of registered users;
- usersettings action - handling user preferences (See UserSettingsPanel for more info).
The code
Save the following as ./actions/register.php and use it as {{register}}.
- <?php
- /**
- * Display a form for user registration.
- *
- * This action allows new users to register an account, if user registration is enabled.
- * All the required fields are validated before the new user is created.
- *
- * @package Actions
- * @name Register
- *
- * @author {@link http://wikka.jsnx.com/DarTar Dario Taraborelli}
- * @version 0.1
- * @since Wikka 1.1.X.X
- *
- * @todo
- * - (optionally) drop WikiName restriction on usernames;
- * - use core functions to validate fields;
- * - add done/failed icons for each field after form is posted;
- * - use central error handler for printing error messages;
- * - define strategy to link hardcoded login/logout page;
- * - define welcome page where new users must be redirected;
- */
- print $this->Format('===== Registration page =====');
- if ($this->GetConfigValue("allow_new_users") == "0") {
- // user registration is disabled
- print $this->Format('//User registration is disabled on this wiki//');
- } else {
- if ($user = $this->GetUser()){
- // user is logged in
- // is this the first time the user is logged in?
- print $this->Format('--- **Registration successful!** --- You are currently logged in as '.$this->GetUserName());
- } else {
- print $this->Format('--- You are currently logged in as '.$this->GetUserName());
- }
- } else {
- // user is not logged in
- print "<script type=\"text/javascript\"><!-- \nfunction hov(loc,cls){ \n if(loc.className) loc.className=cls;\n}\n //-->\n</script>\n";
- // is user trying to register?
- // get POST values
- if ($_POST['password']) $password = $_POST['password'];
- if ($_POST['confpassword']) $confpassword = $_POST['confpassword'];
- // validate fields
- // note: all these validation checks should use core functions to preserve consistency
- if ($this->LoadUser($name)) $error = 'Sorry, this username already exists. Please choose a different name.';
- elseif ($this->ExistsPage($name)) $error = 'Sorry, this username is reserved for a page. Please choose a different name.';
- elseif (!$this->IsWikiName($name)) $error = 'Please fill in a valid username (formatted as a ##""WikiName""##).';
- elseif (!preg_match("/^.+?\@.+?\..+$/", $email)) $error = 'That does not quite look like an email address.';
- elseif ($confpassword != $password) $error = 'Sorry, passwords do not match.';
- else {
- // all required fields are valid and non-empty
- // create user
- $this->Query("insert into ".$this->config["table_prefix"]."users set ".
- "signuptime = now(), ".
- // log in
- $this->SetUser($this->LoadUser($name));
- // forward
- $this->Redirect($this->href());
- }
- }
- $intro = $this->Format(' --- If you are a **new user** you can register an account using this form (if you already have an account, please go to the [[UserSettings login page]]). --- --- To register, the following fields are required:
- ~-your **username** (it must be formatted like a ##""WikiName""##, for example: ##""JuliusCaesar""##);
- ~-a **valid email address** (this will only be used to retrieve your password in case you lose it);
- ~-a **valid password** (min. 5 characters, no space allowed).
- --- ---');
- // build registration form
- $form = $this->FormOpen();
- $form .= '<input type="hidden" name="action" value="register" />';
- $form .= ' <table>';
- $form .= '<tr><td></td><td><span class="error">'.$this->Format($error).'</span></td></tr>';
- }
- $form .= ' <tr>';
- $form .= ' <td align="right">Your username:</td>';
- $form .= ' <td><input name="name" size="40" value="';
- $form .= '" title="Choose a valid username (formatted as a WikiName)" /></td>';
- $form .= ' </tr>';
- $form .= ' <tr>';
- $form .= ' <td align="right">Your email address:</td>';
- $form .= ' <td><input name="email" size="40" value="';
- $form .= '" title="Fill in a valid email address"/></td>';
- $form .= ' </tr>';
- $form .= ' <tr>';
- $form .= ' <td align="right">Your password:</td>';
- $form .= ' <td><input type="password" name="password" size="40" title="Choose a valid password (min. 5 chars, no space)" /></td>';
- $form .= ' </tr>';
- $form .= ' <tr>';
- $form .= ' <td align="right">Confirm password:</td>';
- $form .= ' <td><input type="password" name="confpassword" size="40" title="Type again your password for confirmation" /></td>';
- $form .= ' </tr>';
- $form .= ' <tr>';
- $form .= ' <td align="right"></td>';
- $form .= ' <td><input type="submit" value="Register" size="40" title="Click to register" /></td>';
- $form .= ' </tr>';
- $form .= ' </table>';
- $form .= $this->FormClose();
- // output intro and form
- print $intro.$form;
- }
- }
- ?>
Try to use SemanticMarkup if this is going to be rewritten anyway, instead of:
$form .= '<tr>';
$form .= ' <td align="right">Confirm password:</td>';
$form .= ' <td><input type="password" name="confpassword" size="40" title="Type again your password for confirmation" /></td>';
$form .= '</tr>';
$form .= ' <td align="right">Confirm password:</td>';
$form .= ' <td><input type="password" name="confpassword" size="40" title="Type again your password for confirmation" /></td>';
$form .= '</tr>';
use:
$form .= '<label>Confirm password:<input type="password" name="confpassword" size="40" title="Type again your password for confirmation" /></label>';
It is more elegant, semantically clean and frees some bytes to run free in forests! --IanAndolina
CategoryDevelopment