summaryrefslogtreecommitdiff
path: root/actions/invite.php
diff options
context:
space:
mode:
authorEvan Prodromou <evan@prodromou.name>2008-08-26 20:19:27 -0400
committerEvan Prodromou <evan@prodromou.name>2008-08-26 20:19:27 -0400
commite248066b74aa697a1dfd99153b1e8c2e18f32831 (patch)
tree38be118593b899768755da8b74efdb6738dd44fd /actions/invite.php
parentc2839a80f00991fa4fe6ec3d3fd654bcc27840f4 (diff)
updates for invitations
Add the code to registration to handle invitation codes. Some edge cases on invitations: is the user already subbed to this person? Tell them. Is the person already on the system? Sub the user to them, then, and tell the user. Add some code to User to auto-sub invitees whenever the email address changes. Call it from a new registration with an invite code, and also from confirmaddress. Some whitespace cleanup in the files touched. darcs-hash:20080827001927-84dde-b50e5d921ca3f2fb894821730ff93cac09d2ba66.gz
Diffstat (limited to 'actions/invite.php')
-rw-r--r--actions/invite.php147
1 files changed, 100 insertions, 47 deletions
diff --git a/actions/invite.php b/actions/invite.php
index e230ec6ee..3a68a60de 100644
--- a/actions/invite.php
+++ b/actions/invite.php
@@ -20,11 +20,11 @@
if (!defined('LACONICA')) { exit(1); }
class InviteAction extends Action {
-
- function is_readonly() {
+
+ function is_readonly() {
return false;
}
-
+
function handle($args) {
parent::handle($args);
if (!common_logged_in()) {
@@ -32,70 +32,79 @@ class InviteAction extends Action {
common_config('site', 'name')));
return;
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- $this->send_invitation();
+ $this->send_invitations();
} else {
$this->show_form();
}
}
-
- function send_invitation() {
-
+
+ function send_invitations() {
+
$user = common_current_user();
$profile = $user->getProfile();
-
+
$bestname = $profile->getBestName();
$sitename = common_config('site', 'name');
$personal = $this->trimmed('personal');
$addresses = explode("\n", $this->trimmed('addresses'));
-
+
foreach ($addresses as $email) {
-
$email = trim($email);
-
if (!Validate::email($email, true)) {
$this->show_form(sprintf(_('Invalid email address: %s'), $email));
return;
}
}
-
+
+ $already = array();
+ $subbed = array();
+
foreach ($addresses as $email) {
-
- $email = trim($email);
-
- $recipients = array($email);
-
- $headers['From'] = mail_notify_from();
- $headers['To'] = $email;
- $headers['Subject'] = sprintf(_('%1s has invited you to join them on %2s'), $bestname, $sitename);
-
- $body = sprintf(_("%1s has invited you to join them on %2s (%3s).\n\n".
- "%4s is a micro-blogging service that lets you keep up-to-date with people you know and people who interest you.\n\n".
- "You can also share news about yourself, your thoughts, or your life online with people who know about you.\n\n".
- "%5s said:\n\n%6s\n\n".
- "You can see %7s's profile page on %8s here:\n\n".
- "%9s\n\n".
- "If you'd like to try the service, click on the link below to accept the invitation.\n\n".
- "%10s\n\n".
- "If not, you can ignore this message. Thanks for your patience and your time.\n\n".
- "Sincerely, %11s\n"),
- $bestname, $sitename, common_root_url(),
- $sitename,
- $bestname, $personal,
- $bestname, $sitename,
- common_local_url('showstream', array('nickname' => $user->nickname)),
- common_local_url('register', array('code' => $invite->code)),
- $sitename);
-
- mail_send($recipients, $headers, $body);
+ $email = common_canonical_email($email);
+ $other = User::staticGet('email', $email);
+ if ($other) {
+ if ($user->isSubscribed($other)) {
+ $already[] = $other;
+ } else {
+ subs_subscribe_to($user, $other);
+ $subbed[] = $other;
+ }
+ } else {
+ $sent[] = $email;
+ $this->send_invitation($email, $user);
+ }
}
-
common_show_header(_('Invitation(s) sent'));
- common_element('p', NULL, _('Invitation(s) sent. You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!'));
+ if ($already) {
+ common_element('p', NULL, _('You are already subscribed to these users:'));
+ common_element_start('ul');
+ foreach ($already as $other) {
+ common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email));
+ }
+ common_element_end('ul');
+ }
+ if ($subbed) {
+ common_element('p', NULL, _('These people are already users and you were automatically subscribed to them:'));
+ common_element_start('ul');
+ foreach ($subbed as $other) {
+ common_element('li', NULL, sprintf(_('%s (%s)'), $other->nickname, $other->email));
+ }
+ common_element_end('ul');
+ }
+ if ($sent) {
+ common_element('p', NULL, _('Invitation(s) sent to the following people:'));
+ common_element_start('ul');
+ foreach ($sent as $other) {
+ common_element('li', NULL, $sent);
+ }
+ common_element_end('ul');
+ common_element('p', NULL, _('You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!'));
+ }
common_show_footer();
}
-
+
function show_top($error=NULL) {
if ($error) {
common_element('p', 'error', $error);
@@ -108,7 +117,7 @@ class InviteAction extends Action {
}
function show_form($error=NULL) {
-
+
global $config;
common_show_header(_('Invite new users'), NULL, $error, array($this, 'show_top'));
@@ -120,15 +129,59 @@ class InviteAction extends Action {
common_textarea('addresses', _('Email addresses'),
$this->trimmed('addresses'),
_('Addresses of friends to invite (one per line)'));
-
+
common_textarea('personal', _('Personal message'),
$this->trimmed('personal'),
_('Optionally add a personal message to the invitation.'));
-
+
common_submit('preview', _('Preview'));
common_element_end('form');
-
+
common_show_footer();
}
+
+ function send_invitation($email, $user) {
+
+ $email = trim($email);
+
+ $invite = new Invitation();
+
+ $invite->address = $email;
+ $invite->type = 'email';
+ $invite->user_id = $user->id;
+ $invite->created = common_sql_now();
+
+ if (!$invite->insert()) {
+ common_log_db_error($invite, 'INSERT', __FILE__);
+ return false;
+ }
+
+ $recipients = array($email);
+
+ $headers['From'] = mail_notify_from();
+ $headers['To'] = $email;
+ $headers['Subject'] = sprintf(_('%1s has invited you to join them on %2s'), $bestname, $sitename);
+
+ $body = sprintf(_("%1s has invited you to join them on %2s (%3s).\n\n".
+ "%4s is a micro-blogging service that lets you keep up-to-date with people you know and people who interest you.\n\n".
+ "You can also share news about yourself, your thoughts, or your life online with people who know about you.\n\n".
+ "%5s said:\n\n%6s\n\n".
+ "You can see %7s's profile page on %8s here:\n\n".
+ "%9s\n\n".
+ "If you'd like to try the service, click on the link below to accept the invitation.\n\n".
+ "%10s\n\n".
+ "If not, you can ignore this message. Thanks for your patience and your time.\n\n".
+ "Sincerely, %11s\n"),
+ $bestname, $sitename, common_root_url(),
+ $sitename,
+ $bestname, $personal,
+ $bestname, $sitename,
+ common_local_url('showstream', array('nickname' => $user->nickname)),
+ common_local_url('register', array('code' => $invite->code)),
+ $sitename);
+
+ mail_send($recipients, $headers, $body);
+ }
+
}