2010-07-28 19:28:39 -04:00
< ? php
2010-12-10 07:04:35 -05:00
/**
2017-12-01 18:13:39 -05:00
* Module : invite . php
2010-12-10 07:04:35 -05:00
*
2017-12-01 18:13:39 -05:00
* Send email invitations to join social network
2010-12-10 07:04:35 -05:00
*
*/
2018-01-24 21:08:45 -05:00
2017-04-30 00:07:00 -04:00
use Friendica\App ;
2018-10-17 15:30:41 -04:00
use Friendica\BaseModule ;
2017-11-06 21:22:52 -05:00
use Friendica\Core\Config ;
2018-01-21 13:33:59 -05:00
use Friendica\Core\L10n ;
2017-11-06 21:22:52 -05:00
use Friendica\Core\PConfig ;
2018-10-31 10:35:50 -04:00
use Friendica\Core\Renderer ;
2017-08-26 02:04:21 -04:00
use Friendica\Core\System ;
2018-07-23 18:44:05 -04:00
use Friendica\Database\DBA ;
2017-12-01 14:41:27 -05:00
use Friendica\Protocol\Email ;
2018-01-26 21:38:34 -05:00
use Friendica\Util\DateTimeFormat ;
2018-10-17 08:19:58 -04:00
use Friendica\Util\Security ;
2018-11-08 10:14:37 -05:00
use Friendica\Util\Strings ;
2013-01-04 18:47:29 -05:00
2018-01-23 21:59:16 -05:00
function invite_post ( App $a )
{
2016-12-20 05:56:34 -05:00
if ( ! local_user ()) {
2018-01-21 13:33:59 -05:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2010-07-28 19:28:39 -04:00
return ;
}
2018-10-17 15:30:41 -04:00
BaseModule :: checkFormSecurityTokenRedirectOnError ( '/' , 'send_invite' );
2013-01-25 16:48:57 -05:00
2018-01-22 09:16:25 -05:00
$max_invites = intval ( Config :: get ( 'system' , 'max_invites' ));
2016-12-21 17:04:09 -05:00
if ( ! $max_invites ) {
2013-01-25 16:48:57 -05:00
$max_invites = 50 ;
2016-12-21 17:04:09 -05:00
}
2013-01-25 16:48:57 -05:00
2018-01-22 09:16:25 -05:00
$current_invites = intval ( PConfig :: get ( local_user (), 'system' , 'sent_invites' ));
2016-12-21 17:04:09 -05:00
if ( $current_invites > $max_invites ) {
2018-01-21 13:33:59 -05:00
notice ( L10n :: t ( 'Total invitation limit exceeded.' ) . EOL );
2013-01-25 16:48:57 -05:00
return ;
2016-12-21 17:04:09 -05:00
}
2013-01-25 16:48:57 -05:00
2010-07-28 19:28:39 -04:00
2018-04-06 21:48:37 -04:00
$recipients = ! empty ( $_POST [ 'recipients' ]) ? explode ( " \n " , $_POST [ 'recipients' ]) : [];
2018-11-09 13:29:42 -05:00
$message = ! empty ( $_POST [ 'message' ]) ? Strings :: escapeTags ( trim ( $_POST [ 'message' ])) : '' ;
2010-07-28 19:28:39 -04:00
$total = 0 ;
2018-01-22 09:16:25 -05:00
if ( Config :: get ( 'system' , 'invitation_only' )) {
2018-04-06 21:48:37 -04:00
$invitation_only = true ;
$invites_remaining = PConfig :: get ( local_user (), 'system' , 'invites_remaining' );
if (( ! $invites_remaining ) && ( ! is_site_admin ())) {
2011-07-17 19:08:47 -04:00
return ;
2016-12-21 17:04:09 -05:00
}
2011-07-17 19:08:47 -04:00
}
2018-04-06 21:48:37 -04:00
foreach ( $recipients as $recipient ) {
$recipient = trim ( $recipient );
2010-07-28 19:28:39 -04:00
2018-11-09 13:18:42 -05:00
if ( ! filter_var ( $recipient , FILTER_VALIDATE_EMAIL )) {
2018-04-06 21:48:37 -04:00
notice ( L10n :: t ( '%s : Not a valid email address.' , $recipient ) . EOL );
2010-07-28 19:28:39 -04:00
continue ;
}
2016-12-21 17:04:09 -05:00
2018-04-06 21:48:37 -04:00
if ( $invitation_only && ( $invites_remaining || is_site_admin ())) {
2018-10-14 11:57:28 -04:00
$code = Friendica\Model\Register :: createForInvitation ();
2018-01-22 09:16:25 -05:00
$nmessage = str_replace ( '$invite_code' , $code , $message );
2011-07-18 00:12:31 -04:00
2016-12-21 17:04:09 -05:00
if ( ! is_site_admin ()) {
2018-04-06 21:48:37 -04:00
$invites_remaining -- ;
if ( $invites_remaining >= 0 ) {
PConfig :: set ( local_user (), 'system' , 'invites_remaining' , $invites_remaining );
2016-12-21 17:04:09 -05:00
} else {
2011-07-17 19:08:47 -04:00
return ;
2016-12-21 17:04:09 -05:00
}
2011-07-17 19:08:47 -04:00
}
2016-12-21 17:04:09 -05:00
} else {
2011-07-17 19:08:47 -04:00
$nmessage = $message ;
2016-12-21 17:04:09 -05:00
}
2010-07-28 19:28:39 -04:00
2018-04-07 02:26:33 -04:00
$additional_headers = 'From: ' . $a -> user [ 'email' ] . " \n "
. 'Sender: ' . $a -> getSenderEmailAddress () . " \n "
2011-04-14 20:13:13 -04:00
. 'Content-type: text/plain; charset=UTF-8' . " \n "
2018-04-06 21:48:37 -04:00
. 'Content-transfer-encoding: 8bit' ;
$res = mail (
$recipient ,
Email :: encodeHeader ( L10n :: t ( 'Please join us on Friendica' ), 'UTF-8' ),
$nmessage ,
$additional_headers );
2011-04-14 20:13:13 -04:00
2016-12-21 17:04:09 -05:00
if ( $res ) {
2010-07-28 19:28:39 -04:00
$total ++ ;
2013-01-25 16:48:57 -05:00
$current_invites ++ ;
2018-01-22 09:16:25 -05:00
PConfig :: set ( local_user (), 'system' , 'sent_invites' , $current_invites );
if ( $current_invites > $max_invites ) {
2018-01-21 13:33:59 -05:00
notice ( L10n :: t ( 'Invitation limit exceeded. Please contact your site administrator.' ) . EOL );
2013-01-25 16:48:57 -05:00
return ;
}
2016-12-21 17:04:09 -05:00
} else {
2018-04-06 21:48:37 -04:00
notice ( L10n :: t ( '%s : Message delivery failed.' , $recipient ) . EOL );
2010-07-28 19:28:39 -04:00
}
}
2018-01-23 21:59:16 -05:00
notice ( L10n :: tt ( " %d message sent. " , " %d messages sent. " , $total ) . EOL );
2010-09-08 23:14:17 -04:00
return ;
2010-07-28 19:28:39 -04:00
}
2017-01-09 07:14:25 -05:00
function invite_content ( App $a ) {
2010-12-10 07:04:35 -05:00
2016-12-20 05:56:34 -05:00
if ( ! local_user ()) {
2018-01-21 13:33:59 -05:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2010-07-28 19:28:39 -04:00
return ;
}
2018-10-31 10:44:06 -04:00
$tpl = Renderer :: getMarkupTemplate ( 'invite.tpl' );
2011-07-17 19:08:47 -04:00
$invonly = false ;
2018-01-22 09:16:25 -05:00
if ( Config :: get ( 'system' , 'invitation_only' )) {
2011-07-17 19:08:47 -04:00
$invonly = true ;
2018-01-22 09:16:25 -05:00
$x = PConfig :: get ( local_user (), 'system' , 'invites_remaining' );
2016-12-21 17:04:09 -05:00
if (( ! $x ) && ( ! is_site_admin ())) {
2018-01-21 13:33:59 -05:00
notice ( L10n :: t ( 'You have no more invitations available' ) . EOL );
2011-07-17 19:08:47 -04:00
return '' ;
}
2015-09-15 16:29:02 -04:00
}
2011-07-17 19:08:47 -04:00
2018-01-22 09:16:25 -05:00
$dirloc = Config :: get ( 'system' , 'directory' );
2016-12-21 17:04:09 -05:00
if ( strlen ( $dirloc )) {
2018-07-15 15:04:48 -04:00
if ( intval ( Config :: get ( 'config' , 'register_policy' )) === REGISTER_CLOSED ) {
2018-01-23 21:59:16 -05:00
$linktxt = L10n :: t ( 'Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks.' , $dirloc . '/servers' );
2017-08-03 01:23:05 -04:00
} else {
2018-01-23 21:59:16 -05:00
$linktxt = L10n :: t ( 'To accept this invitation, please visit and register at %s or any other public Friendica website.' , System :: baseUrl ())
. " \r \n " . " \r \n " . L10n :: t ( 'Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join.' , $dirloc . '/servers' );
2016-12-20 15:15:53 -05:00
}
2017-08-03 01:22:29 -04:00
} else { // there is no global directory URL defined
2018-07-15 15:04:48 -04:00
if ( intval ( Config :: get ( 'config' , 'register_policy' )) === REGISTER_CLOSED ) {
2018-01-22 09:16:25 -05:00
$o = L10n :: t ( 'Our apologies. This system is not currently configured to connect with other public sites or invite members.' );
2017-08-03 01:22:29 -04:00
return $o ;
} else {
2018-01-23 21:59:16 -05:00
$linktxt = L10n :: t ( 'To accept this invitation, please visit and register at %s.' , System :: baseUrl ()
2018-01-22 09:16:25 -05:00
. " \r \n " . " \r \n " . L10n :: t ( 'Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks.' ));
2017-08-03 01:22:29 -04:00
}
2012-03-25 02:04:18 -04:00
}
2011-07-17 19:08:47 -04:00
2018-10-31 10:35:50 -04:00
$o = Renderer :: replaceMacros ( $tpl , [
2018-10-17 15:30:41 -04:00
'$form_security_token' => BaseModule :: getFormSecurityToken ( " send_invite " ),
2018-04-24 11:33:48 -04:00
'$title' => L10n :: t ( 'Send invitations' ),
'$recipients' => [ 'recipients' , L10n :: t ( 'Enter email addresses, one per line:' )],
'$message' => [ 'message' , L10n :: t ( 'Your message:' ), L10n :: t ( 'You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web.' ) . " \r \n " . " \r \n "
2012-03-25 02:04:18 -04:00
. $linktxt
2018-01-22 09:16:25 -05:00
. " \r \n " . " \r \n " . (( $invonly ) ? L10n :: t ( 'You will need to supply this invitation code: $invite_code' ) . " \r \n " . " \r \n " : '' ) . L10n :: t ( 'Once you have registered, please connect with me via my profile page at:' )
2017-08-26 03:32:10 -04:00
. " \r \n " . " \r \n " . System :: baseUrl () . '/profile/' . $a -> user [ 'nickname' ]
2018-04-24 11:33:48 -04:00
. " \r \n " . " \r \n " . L10n :: t ( 'For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca' ) . " \r \n " . " \r \n " ],
2018-01-22 09:16:25 -05:00
'$submit' => L10n :: t ( 'Submit' )
2018-01-15 08:05:12 -05:00
]);
2010-07-28 19:28:39 -04:00
return $o ;
2015-09-15 16:29:02 -04:00
}