Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba

Is User Registration Possible?


Go to End
Reply


6 Posts   4283 Views

Avatar
craig-oeuk

Community Member, 1 Post

8 May 2009 at 12:38am

I'm struggling to find any documentation in regards to getting users to sign up.

There seems to be a bunch of security/authentication stuff but nothing which actually tells me how to set up users in a SilverStripe project?

Avatar
TerryMiddleton

Community Member, 108 Posts

8 May 2009 at 1:00am

Oh yes, very easily.

You are going to create a new page (I called mine RegistrationForm.php) and save it in you mysite/code/RegistrationForm.php

See my RegistrationForm.php below.

Then you need to create a RegistrationForm.ss and save that in your project/templates/RegistrationForm.ss

The RegistrationForm.ss will look similar (if you want) to the Page.ss. The main variable you need in this page is $Form which is passed from the RegistrationForm.php

If you need to include the email notification like I did you will want to create a RegistrationFormEmail.ss that is used to format the email that gets sent.

Notice in the RegistrationForm.php there is a setTemplate that directs the page to use RegistrationFormEmail.ss as the template as well as the RegistrationForm.ss.

I hope this helps. You can see it in action if you would like at http://63.247.208.15/registration-request

Terry

RestrationForm.php
<?php
class RegistrationForm extends Page {
}

class RegistrationForm_Controller extends Page_Controller {

// Make sure you set this to the right group.
// See http://doc.silverstripe.com/doku.php?do=show&id=recipes%3Aforms
private $defaultGroupID = 2;

/**
* This function lets you put a form on your page, using $Form.
*/
function Form() {

return new Form($this, "Form", new FieldSet(

// List your fields here
new EmailField("Email", "Email address"),
new PasswordField("Password", "Create a Password"),
new TextField("FirstName", "First name"),
new TextField("LastName", "Last name"),
new TextField("Phone", "Phone"),
new TextField("Company", "Company/Hospital"),
new TextField("Address1", "Address 1"),
new TextField("Address2", "Address 2"),
new TextField("City", "City"),
new TextField("State", "State"),
new TextField("Zip", "Zip"),
new TextField("Country", "Country"),
new ReadonlyField("IPAddress","IPAddress",$_SERVER['REMOTE_ADDR'])

), new FieldSet(

// List the action buttons here
new FormAction("SignupAction", "Submit")

), new RequiredFields(

// List the required fields here: "Email", "FirstName"
"Email", "Password", "FirstName", "LastName", "Phone", "Company", "Address1", "City", "State", "Zip", "Country"

));
$Form->setTemplate('RegistrationForm');
}

/**
* This function is called when the user submits the form.
*/
function SignupAction($data, $form) {

// Create a new Member object and load the form data into it
$member = new Member();
$form->saveInto($member);

// Write it to the database. This needs to happen before we add it to a group
$member->write();

// Add the member to group. (Check if it exists first)
if($group = DataObject::get_one('Group', "ID = 2")) {

$member->Groups()->add($group);
// Redirect to a page thanking people for registering
//Set data
$From = $data['Email'];
$To = "email address of who gets the email, 2nd email addres";
$Subject = "Registration Request";
$email = new Email($From, $To, $Subject);
//set template
$email->setTemplate('RegistrationFormEmail');
//populate template
$email->populateTemplate($data);
//send mail
$email->send();

//$e = new Email();
//$e->setTemplate("RegistrationForm");
//$e->To = "terry@thestoreinsider.com";
//$e->Subject = "Registration Request";
// $e->Body = populateTemplate($data);

//$e->Body = $member;
//$e->send();
Director::redirect('thanks-for-registering/');

}else{

// Redirect to a failure page
Director::redirect('registration-failed/');

}

}
}

?>

Avatar
AdamJ

Community Member, 145 Posts

8 May 2009 at 2:39am

Edited: 08/05/2009 2:40am

Terry, when you post code, its best to surround it with [ code ][ /code ] tags, it displays better and makes it easier to read

Avatar
TerryMiddleton

Community Member, 108 Posts

8 May 2009 at 2:59am

Thanks for this. I will do this next time.

Terry

Avatar
rpw2

Community Member, 6 Posts

14 June 2009 at 10:12pm

Hi Terry, thanks for the example. Can you explain more about how and where the additional member data fields are processed and saved (which table). By following the example I can save names, email and password (all fields are displayed in form) into existing member table and assign to a group but am I missing something here ($db?) to save additional fields??? Thanks.
nb: I have added a similar question to another post too.

Avatar
rpw2

Community Member, 6 Posts

18 June 2009 at 1:54pm

More clues here;

http://www.silverstripe.org/customising-the-cms/show/251406#post251406

and here (this link is at bottom of above post);

this tutorial may be useful for you :
http://www.ssbits.com/custom-login-form-with-group-based-redirection/

Also, in one of the tutorials in suggests, if you want to just grab peoples details and not give them any 'logged in' capabilities, then don't register them (with a password) in the core members table.
The Forum module is perfect for seeing how to extend the current member table, if you do need to do it tho.