2008-08-25 20:29:46 +01:00
< ? php
/*
2009-08-25 23:14:12 +01:00
* StatusNet - the distributed open - source microblogging tool
2009-08-25 23:12:20 +01:00
* Copyright ( C ) 2008 , 2009 , StatusNet , Inc .
2008-08-25 20:29:46 +01:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
2009-08-26 15:41:36 +01:00
if ( ! defined ( 'STATUSNET' ) && ! defined ( 'LACONICA' )) { exit ( 1 ); }
2008-08-25 20:29:46 +01:00
2009-05-24 04:42:19 +01:00
class InviteAction extends CurrentUserDesignAction
2008-12-23 19:49:23 +00:00
{
2009-01-22 22:51:37 +00:00
var $mode = null ;
2009-01-22 22:59:18 +00:00
var $error = null ;
var $already = null ;
var $subbed = null ;
var $sent = null ;
2008-08-27 01:19:27 +01:00
2009-04-13 20:49:26 +01:00
function isReadOnly ( $args )
2008-12-23 19:33:23 +00:00
{
2008-12-23 19:19:07 +00:00
return false ;
}
2008-08-27 01:19:27 +01:00
2008-12-23 19:33:23 +00:00
function handle ( $args )
{
2008-08-25 20:29:46 +01:00
parent :: handle ( $args );
2009-06-14 09:17:22 +01:00
if ( ! common_config ( 'invite' , 'enabled' )) {
$this -> clientError ( _ ( 'Invites have been disabled.' ));
} else if ( ! common_logged_in ()) {
2009-01-15 23:03:38 +00:00
$this -> clientError ( sprintf ( _ ( 'You must be logged in to invite other users to use %s' ),
2008-12-23 19:19:07 +00:00
common_config ( 'site' , 'name' )));
return ;
} else if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) {
2009-01-22 22:51:37 +00:00
$this -> sendInvitations ();
2008-12-23 19:19:07 +00:00
} else {
2009-01-22 22:51:37 +00:00
$this -> showForm ();
2008-12-23 19:19:07 +00:00
}
}
2009-01-22 22:51:37 +00:00
function sendInvitations ()
2008-12-23 19:33:23 +00:00
{
2008-12-23 19:19:07 +00:00
# CSRF protection
$token = $this -> trimmed ( 'token' );
if ( ! $token || $token != common_session_token ()) {
2009-01-22 22:51:37 +00:00
$this -> showForm ( _ ( 'There was a problem with your session token. Try again, please.' ));
2008-12-23 19:19:07 +00:00
return ;
}
$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 );
2009-10-26 14:31:12 +00:00
if ( ! Validate :: email ( $email , common_config ( 'email' , 'check_domain' ))) {
2009-01-22 22:51:37 +00:00
$this -> showForm ( sprintf ( _ ( 'Invalid email address: %s' ), $email ));
2008-12-23 19:19:07 +00:00
return ;
}
}
2009-01-22 22:51:37 +00:00
$this -> already = array ();
$this -> subbed = array ();
2008-12-23 19:19:07 +00:00
foreach ( $addresses as $email ) {
$email = common_canonical_email ( $email );
$other = User :: staticGet ( 'email' , $email );
if ( $other ) {
if ( $user -> isSubscribed ( $other )) {
2009-01-22 22:51:37 +00:00
$this -> already [] = $other ;
2008-12-23 19:19:07 +00:00
} else {
subs_subscribe_to ( $user , $other );
2009-01-22 22:51:37 +00:00
$this -> subbed [] = $other ;
2008-12-23 19:19:07 +00:00
}
} else {
2009-01-22 22:51:37 +00:00
$this -> sent [] = $email ;
$this -> sendInvitation ( $email , $user , $personal );
2008-12-23 19:19:07 +00:00
}
}
2009-01-22 22:51:37 +00:00
$this -> mode = 'sent' ;
$this -> showPage ();
}
2009-09-03 20:42:50 +01:00
function showScripts ()
{
parent :: showScripts ();
$this -> autofocus ( 'addresses' );
}
2009-01-22 22:51:37 +00:00
function title ()
{
if ( $this -> mode == 'sent' ) {
return _ ( 'Invitation(s) sent' );
} else {
return _ ( 'Invite new users' );
}
}
function showContent ()
{
if ( $this -> mode == 'sent' ) {
$this -> showInvitationSuccess ();
} else {
$this -> showInviteForm ();
}
}
function showInvitationSuccess ()
{
if ( $this -> already ) {
2009-01-15 22:57:15 +00:00
$this -> element ( 'p' , null , _ ( 'You are already subscribed to these users:' ));
$this -> elementStart ( 'ul' );
2009-01-22 22:51:37 +00:00
foreach ( $this -> already as $other ) {
2010-01-10 00:45:58 +00:00
$this -> element ( 'li' , null , sprintf ( _ ( '%1$s (%2$s)' ), $other -> nickname , $other -> email ));
2008-12-23 19:19:07 +00:00
}
2009-01-15 22:57:15 +00:00
$this -> elementEnd ( 'ul' );
2008-12-23 19:19:07 +00:00
}
2009-01-22 22:51:37 +00:00
if ( $this -> subbed ) {
2009-01-15 22:57:15 +00:00
$this -> element ( 'p' , null , _ ( 'These people are already users and you were automatically subscribed to them:' ));
$this -> elementStart ( 'ul' );
2009-01-22 22:51:37 +00:00
foreach ( $this -> subbed as $other ) {
2010-01-10 00:45:58 +00:00
$this -> element ( 'li' , null , sprintf ( _ ( '%1$s (%2$s)' ), $other -> nickname , $other -> email ));
2008-12-23 19:19:07 +00:00
}
2009-01-15 22:57:15 +00:00
$this -> elementEnd ( 'ul' );
2008-12-23 19:19:07 +00:00
}
2009-01-22 22:51:37 +00:00
if ( $this -> sent ) {
2009-01-15 22:57:15 +00:00
$this -> element ( 'p' , null , _ ( 'Invitation(s) sent to the following people:' ));
$this -> elementStart ( 'ul' );
2009-01-22 22:51:37 +00:00
foreach ( $this -> sent as $other ) {
2009-01-15 22:57:15 +00:00
$this -> element ( 'li' , null , $other );
2008-12-23 19:19:07 +00:00
}
2009-01-15 22:57:15 +00:00
$this -> elementEnd ( 'ul' );
$this -> element ( 'p' , null , _ ( 'You will be notified when your invitees accept the invitation and register on the site. Thanks for growing the community!' ));
2008-12-23 19:19:07 +00:00
}
}
2009-01-22 22:51:37 +00:00
function showPageNotice ()
2008-12-23 19:33:23 +00:00
{
2009-01-22 22:51:37 +00:00
if ( $this -> mode != 'sent' ) {
if ( $this -> error ) {
$this -> element ( 'p' , 'error' , $this -> error );
} else {
$this -> elementStart ( 'div' , 'instructions' );
$this -> element ( 'p' , null ,
_ ( 'Use this form to invite your friends and colleagues to use this service.' ));
$this -> elementEnd ( 'div' );
}
2008-12-23 19:19:07 +00:00
}
}
2009-01-22 22:51:37 +00:00
function showForm ( $error = null )
2008-12-23 19:33:23 +00:00
{
2009-01-22 22:51:37 +00:00
$this -> mode = 'form' ;
$this -> error = $error ;
$this -> showPage ();
}
2008-12-23 19:19:07 +00:00
2009-01-22 22:51:37 +00:00
function showInviteForm ()
{
2009-01-15 22:57:15 +00:00
$this -> elementStart ( 'form' , array ( 'method' => 'post' ,
2009-01-24 03:18:34 +00:00
'id' => 'form_invite' ,
'class' => 'form_settings' ,
2008-12-23 19:19:07 +00:00
'action' => common_local_url ( 'invite' )));
2009-01-24 03:18:34 +00:00
$this -> elementStart ( 'fieldset' );
$this -> element ( 'legend' , null , 'Send an invitation' );
2009-01-15 22:57:15 +00:00
$this -> hidden ( 'token' , common_session_token ());
2008-12-23 19:19:07 +00:00
2009-01-24 03:18:34 +00:00
$this -> elementStart ( 'ul' , 'form_data' );
$this -> elementStart ( 'li' );
2009-01-15 22:57:15 +00:00
$this -> textarea ( 'addresses' , _ ( 'Email addresses' ),
2008-12-23 19:19:07 +00:00
$this -> trimmed ( 'addresses' ),
_ ( 'Addresses of friends to invite (one per line)' ));
2009-01-24 03:18:34 +00:00
$this -> elementEnd ( 'li' );
$this -> elementStart ( 'li' );
2009-01-15 22:57:15 +00:00
$this -> textarea ( 'personal' , _ ( 'Personal message' ),
2008-12-23 19:19:07 +00:00
$this -> trimmed ( 'personal' ),
_ ( 'Optionally add a personal message to the invitation.' ));
2009-01-24 03:18:34 +00:00
$this -> elementEnd ( 'li' );
$this -> elementEnd ( 'ul' );
2010-03-02 15:38:36 +00:00
// TRANS: Send button for inviting friends
$this -> submit ( 'send' , _m ( 'BUTTON' , 'Send' ));
2009-01-24 03:18:34 +00:00
$this -> elementEnd ( 'fieldset' );
2009-01-15 22:57:15 +00:00
$this -> elementEnd ( 'form' );
2008-12-23 19:19:07 +00:00
}
2009-01-22 22:51:37 +00:00
function sendInvitation ( $email , $user , $personal )
2008-12-23 19:33:23 +00:00
{
2008-12-23 19:19:07 +00:00
$profile = $user -> getProfile ();
$bestname = $profile -> getBestName ();
$sitename = common_config ( 'site' , 'name' );
$invite = new Invitation ();
$invite -> address = $email ;
$invite -> address_type = 'email' ;
$invite -> code = common_confirmation_code ( 128 );
$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 ();
2009-07-27 21:02:03 +01:00
$headers [ 'To' ] = trim ( $email );
2008-12-23 19:19:07 +00:00
$headers [ 'Subject' ] = sprintf ( _ ( '%1$s has invited you to join them on %2$s' ), $bestname , $sitename );
$body = sprintf ( _ ( " %1 \$ s has invited you to join them on %2 \$ s (%3 \$ s). \n \n " .
" %2 \$ s 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. " .
" It's also great for meeting new people who share your interests. \n \n " .
" %1 \$ s said: \n \n %4 \$ s \n \n " .
" You can see %1 \$ s's profile page on %2 \$ s here: \n \n " .
" %5 \$ s \n \n " .
" If you'd like to try the service, click on the link below to accept the invitation. \n \n " .
" %6 \$ s \n \n " .
" If not, you can ignore this message. Thanks for your patience and your time. \n \n " .
" Sincerely, %2 \$ s \n " ),
$bestname ,
$sitename ,
common_root_url (),
$personal ,
common_local_url ( 'showstream' , array ( 'nickname' => $user -> nickname )),
2009-08-21 21:45:42 +01:00
common_local_url ( 'register' , array ( 'code' => $invite -> code )));
2008-12-23 19:19:07 +00:00
mail_send ( $recipients , $headers , $body );
}
2008-08-27 01:19:27 +01:00
2009-01-22 22:53:05 +00:00
function showLocalNav ()
{
$nav = new SubGroupNav ( $this , common_current_user ());
$nav -> show ();
}
2008-08-25 20:29:46 +01:00
}