Member::create_new_password() will generate a password.
So, you could do something like this, which takes the form data and puts it into a new member instance. This is the submit handler for the doForm action for where you setup your form, which would look something like:
class RegistrationForm extends Form {
function __construct($controller, $name) {
$fields = new FieldSet(
new TextField('FirstName', 'First name'),
new EmailField('Email', 'Email address')
);
$actions = new FieldSet(
new FormAction('doForm', 'Submit')
);
$validator = new RequiredFields(
'FirstName',
'Email'
);
parent::__construct($controller, $name, $fields, $actions, $validator);
}
function doForm($data, $form) {
// Create a new member instance, loading all the form data in
$member = new Member();
$form->saveInto($member);
// Set the member password and write with all the form data collected to DB
$member->Password = Member::create_new_password();
$member->write();
$form->sessionMessage('Thanks, you have been signed up!', 'good');
Director::redirectBack();
}
}
Hope that helps.
Generally a module would be great, although it would need to be fairly abstract to allow for all combination of fields that a user can sign up with.
Sean