+ // Re-init language env in case it changed (not yet, but soon)
+ common_init_language();
+ $this->showSuccess();
+ } else {
+ $this->showForm(_('Invalid username or password.'));
+ }
+ }
+ }
+
+ /**
+ * Does the given nickname already exist?
+ *
+ * Checks a canonical nickname against the database.
+ *
+ * @param string $nickname nickname to check
+ *
+ * @return boolean true if the nickname already exists
+ */
+
+ function nicknameExists($nickname)
+ {
+ $user = User::staticGet('nickname', $nickname);
+ return ($user !== false);
+ }
+
+ /**
+ * Does the given email address already exist?
+ *
+ * Checks a canonical email address against the database.
+ *
+ * @param string $email email address to check
+ *
+ * @return boolean true if the address already exists
+ */
+
+ function emailExists($email)
+ {
+ $email = common_canonical_email($email);
+ if (!$email || strlen($email) == 0) {
+ return false;
+ }
+ $user = User::staticGet('email', $email);
+ return ($user !== false);
+ }
+
+ // overrrided to add entry-title class
+ function showPageTitle() {
+ if (Event::handle('StartShowPageTitle', array($this))) {
+ $this->element('h1', array('class' => 'entry-title'), $this->title());
+ }
+ }
+
+ // overrided to add hentry, and content-inner class
+ function showContentBlock()
+ {
+ $this->elementStart('div', array('id' => 'content', 'class' => 'hentry'));
+ $this->showPageTitle();
+ $this->showPageNoticeBlock();
+ $this->elementStart('div', array('id' => 'content_inner',
+ 'class' => 'entry-content'));
+ // show the actual content (forms, lists, whatever)
+ $this->showContent();
+ $this->elementEnd('div');
+ $this->elementEnd('div');
+ }
+
+ /**
+ * Instructions or a notice for the page
+ *
+ * Shows the error, if any, or instructions for registration.
+ *
+ * @return void
+ */
+
+ function showPageNotice()
+ {
+ if ($this->registered) {
+ return;
+ } else if ($this->error) {
+ $this->element('p', 'error', $this->error);
+ } else {
+ $instr =
+ common_markup_to_html(_('With this form you can create '.
+ ' a new account. ' .
+ 'You can then post notices and '.
+ 'link up to friends and colleagues. '));
+
+ $this->elementStart('div', 'instructions');
+ $this->raw($instr);
+ $this->elementEnd('div');
+ }
+ }
+
+ /**
+ * Wrapper for showing a page
+ *
+ * Stores an error and shows the page
+ *
+ * @param string $error Error, if any
+ *
+ * @return void
+ */
+
+ function showForm($error=null)
+ {
+ $this->error = $error;
+ $this->showPage();
+ }
+
+ /**
+ * Show the page content
+ *
+ * Either shows the registration form or, if registration was successful,
+ * instructions for using the site.
+ *
+ * @return void
+ */
+
+ function showContent()
+ {
+ if ($this->registered) {
+ $this->showSuccessContent();
+ } else {
+ $this->showFormContent();
+ }
+ }
+
+ /**
+ * Show the registration form
+ *
+ * @return void
+ */
+
+ function showFormContent()
+ {
+ $code = $this->trimmed('code');
+
+ $invite = null;
+
+ if ($code) {
+ $invite = Invitation::staticGet($code);
+ }
+
+ if (common_config('site', 'inviteonly') && !($code && $invite)) {
+ $this->clientError(_('Sorry, only invited people can register.'));
+ return;
+ }
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_register',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('register')));
+ $this->elementStart('fieldset');
+ $this->element('legend', null, 'Account settings');
+ $this->hidden('token', common_session_token());
+
+ if ($this->code) {
+ $this->hidden('code', $this->code);
+ }
+
+ $this->elementStart('ul', 'form_data');
+ if (Event::handle('StartRegistrationFormData', array($this))) {
+ $this->elementStart('li');
+ $this->input('nickname', _('Nickname'), $this->trimmed('nickname'),
+ _('1-64 lowercase letters or numbers, '.
+ 'no punctuation or spaces. Required.'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->password('password', _('Password'),
+ _('6 or more characters. Required.'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->password('confirm', _('Confirm'),
+ _('Same as password above. Required.'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ if ($this->invite && $this->invite->address_type == 'email') {
+ $this->input('email', _('Email'), $this->invite->address,
+ _('Used only for updates, announcements, '.
+ 'and password recovery'));
+ } else {
+ $this->input('email', _('Email'), $this->trimmed('email'),
+ _('Used only for updates, announcements, '.
+ 'and password recovery'));
+ }
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->input('fullname', _('Full name'),
+ $this->trimmed('fullname'),
+ _('Longer name, preferably your "real" name'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->input('homepage', _('Homepage'),
+ $this->trimmed('homepage'),
+ _('URL of your homepage, blog, '.
+ 'or profile on another site'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $maxBio = Profile::maxBio();
+ if ($maxBio > 0) {
+ $bioInstr = sprintf(_('Describe yourself and your interests in %d chars'),
+ $maxBio);
+ } else {
+ $bioInstr = _('Describe yourself and your interests');
+ }
+ $this->textarea('bio', _('Bio'),
+ $this->trimmed('bio'),
+ $bioInstr);
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->input('location', _('Location'),
+ $this->trimmed('location'),
+ _('Where you are, like "City, '.
+ 'State (or Region), Country"'));
+ $this->elementEnd('li');
+ Event::handle('EndRegistrationFormData', array($this));
+ $this->elementStart('li', array('id' => 'settings_rememberme'));
+ $this->checkbox('rememberme', _('Remember me'),
+ $this->boolean('rememberme'),
+ _('Automatically login in the future; '.
+ 'not for shared computers!'));
+ $this->elementEnd('li');
+ $attrs = array('type' => 'checkbox',
+ 'id' => 'license',
+ 'class' => 'checkbox',
+ 'name' => 'license',
+ 'value' => 'true');
+ if ($this->boolean('license')) {
+ $attrs['checked'] = 'checked';
+ }
+ $this->elementStart('li');
+ $this->element('input', $attrs);
+ $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
+ $this->text(_('My text and files are available under '));
+ $this->element('a', array('href' => common_config('license', 'url')),
+ common_config('license', 'title'), _("Creative Commons Attribution 3.0"));
+ $this->text(_(' except this private data: password, '.
+ 'email address, IM address, and phone number.'));
+ $this->elementEnd('label');
+ $this->elementEnd('li');
+ }
+ $this->elementEnd('ul');
+ $this->submit('submit', _('Register'));
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ }
+
+ /**
+ * Show some information about registering for the site
+ *
+ * Save the registration flag, run showPage
+ *
+ * @return void
+ */
+
+ function showSuccess()
+ {
+ $this->registered = true;
+ $this->showPage();
+ }
+
+ /**
+ * Show some information about registering for the site
+ *
+ * Gives some information and options for new registrees.
+ *
+ * @return void
+ */
+
+ function showSuccessContent()
+ {
+ $nickname = $this->arg('nickname');
+
+ $profileurl = common_local_url('showstream',
+ array('nickname' => $nickname));
+
+ $this->elementStart('div', 'success');
+ $instr = sprintf(_('Congratulations, %s! And welcome to %%%%site.name%%%%. '.
+ 'From here, you may want to...'. "\n\n" .
+ '* Go to [your profile](%s) '.
+ 'and post your first message.' . "\n" .
+ '* Add a [Jabber/GTalk address]'.
+ '(%%%%action.imsettings%%%%) '.
+ 'so you can send notices '.
+ 'through instant messages.' . "\n" .
+ '* [Search for people](%%%%action.peoplesearch%%%%) '.
+ 'that you may know or '.
+ 'that share your interests. ' . "\n" .
+ '* Update your [profile settings]'.
+ '(%%%%action.profilesettings%%%%)'.
+ ' to tell others more about you. ' . "\n" .
+ '* Read over the [online docs](%%%%doc.help%%%%)'.
+ ' for features you may have missed. ' . "\n\n" .
+ 'Thanks for signing up and we hope '.
+ 'you enjoy using this service.'),
+ $nickname, $profileurl);
+
+ $this->raw(common_markup_to_html($instr));
+
+ $have_email = $this->trimmed('email');
+ if ($have_email) {
+ $emailinstr = _('(You should receive a message by email '.
+ 'momentarily, with ' .
+ 'instructions on how to confirm '.
+ 'your email address.)');
+ $this->raw(common_markup_to_html($emailinstr));
+ }
+ $this->elementEnd('div');
+ }
+
+ /**
+ * Show the login group nav menu
+ *
+ * @return void
+ */
+
+ function showLocalNav()
+ {
+ $nav = new LoginGroupNav($this);
+ $nav->show();
+ }