2010-07-29 01:28:39 +02:00
< ? php
2010-12-10 13:04:35 +01:00
/**
2017-12-02 00:13:39 +01:00
* Module : invite . php
2010-12-10 13:04:35 +01:00
*
2017-12-02 00:13:39 +01:00
* Send email invitations to join social network
2010-12-10 13:04:35 +01:00
*
*/
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2017-11-07 03:22:52 +01:00
use Friendica\Core\Config ;
2018-01-21 19:33:59 +01:00
use Friendica\Core\L10n ;
2017-11-07 03:22:52 +01:00
use Friendica\Core\PConfig ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2017-12-01 20:41:27 +01:00
use Friendica\Protocol\Email ;
2013-01-05 00:47:29 +01:00
2017-01-09 13:14:25 +01:00
function invite_post ( App $a ) {
2010-12-10 13:04:35 +01:00
2016-12-20 11:56:34 +01:00
if ( ! local_user ()) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2010-07-29 01:28:39 +02:00
return ;
}
2013-01-25 22:48:57 +01:00
check_form_security_token_redirectOnErr ( '/' , 'send_invite' );
2017-11-07 03:22:52 +01:00
$max_invites = intval ( Config :: get ( 'system' , 'max_invites' ));
2016-12-21 23:04:09 +01:00
if ( ! $max_invites ) {
2013-01-25 22:48:57 +01:00
$max_invites = 50 ;
2016-12-21 23:04:09 +01:00
}
2013-01-25 22:48:57 +01:00
2017-11-07 03:22:52 +01:00
$current_invites = intval ( PConfig :: get ( local_user (), 'system' , 'sent_invites' ));
2016-12-21 23:04:09 +01:00
if ( $current_invites > $max_invites ) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Total invitation limit exceeded.' ) . EOL );
2013-01-25 22:48:57 +01:00
return ;
2016-12-21 23:04:09 +01:00
}
2013-01-25 22:48:57 +01:00
2010-07-29 01:28:39 +02:00
2018-01-15 14:05:12 +01:00
$recips = (( x ( $_POST , 'recipients' )) ? explode ( " \n " , $_POST [ 'recipients' ]) : []);
2010-12-10 13:04:35 +01:00
$message = (( x ( $_POST , 'message' )) ? notags ( trim ( $_POST [ 'message' ])) : '' );
2010-07-29 01:28:39 +02:00
$total = 0 ;
2017-11-07 03:22:52 +01:00
if ( Config :: get ( 'system' , 'invitation_only' )) {
2011-07-18 01:08:47 +02:00
$invonly = true ;
2017-11-07 03:22:52 +01:00
$x = PConfig :: get ( local_user (), 'system' , 'invites_remaining' );
2016-12-21 23:04:09 +01:00
if (( ! $x ) && ( ! is_site_admin ())) {
2011-07-18 01:08:47 +02:00
return ;
2016-12-21 23:04:09 +01:00
}
2011-07-18 01:08:47 +02:00
}
2016-12-21 23:04:09 +01:00
foreach ( $recips as $recip ) {
2010-07-29 01:28:39 +02:00
$recip = trim ( $recip );
2016-12-21 23:04:09 +01:00
if ( ! valid_email ( $recip )) {
2011-03-11 00:22:21 +01:00
notice ( sprintf ( t ( '%s : Not a valid email address.' ), $recip ) . EOL );
2010-07-29 01:28:39 +02:00
continue ;
}
2016-12-21 23:04:09 +01:00
if ( $invonly && ( $x || is_site_admin ())) {
2011-07-18 01:08:47 +02:00
$code = autoname ( 8 ) . srand ( 1000 , 9999 );
$nmessage = str_replace ( '$invite_code' , $code , $message );
2011-07-18 06:12:31 +02:00
$r = q ( " INSERT INTO `register` (`hash`,`created`) VALUES ('%s', '%s') " ,
dbesc ( $code ),
dbesc ( datetime_convert ())
);
2011-07-18 01:08:47 +02:00
2016-12-21 23:04:09 +01:00
if ( ! is_site_admin ()) {
2011-07-18 01:08:47 +02:00
$x -- ;
2016-12-21 23:04:09 +01:00
if ( $x >= 0 ) {
2017-11-07 03:22:52 +01:00
PConfig :: set ( local_user (), 'system' , 'invites_remaining' , $x );
2016-12-21 23:04:09 +01:00
} else {
2011-07-18 01:08:47 +02:00
return ;
2016-12-21 23:04:09 +01:00
}
2011-07-18 01:08:47 +02:00
}
2016-12-21 23:04:09 +01:00
} else {
2011-07-18 01:08:47 +02:00
$nmessage = $message ;
2016-12-21 23:04:09 +01:00
}
2010-07-29 01:28:39 +02:00
2017-12-02 03:05:06 +01:00
$res = mail ( $recip , Email :: encodeHeader ( t ( 'Please join us on Friendica' ), 'UTF-8' ),
2017-01-09 13:14:25 +01:00
$nmessage ,
2011-04-15 02:13:13 +02:00
" From: " . $a -> user [ 'email' ] . " \n "
. 'Content-type: text/plain; charset=UTF-8' . " \n "
. 'Content-transfer-encoding: 8bit' );
2016-12-21 23:04:09 +01:00
if ( $res ) {
2010-07-29 01:28:39 +02:00
$total ++ ;
2013-01-25 22:48:57 +01:00
$current_invites ++ ;
2017-11-07 03:22:52 +01:00
PConfig :: set ( local_user (), 'system' , 'sent_invites' , $current_invites );
2017-03-21 17:02:59 +01:00
if ( $current_invites > $max_invites ) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Invitation limit exceeded. Please contact your site administrator.' ) . EOL );
2013-01-25 22:48:57 +01:00
return ;
}
2016-12-21 23:04:09 +01:00
} else {
2011-03-11 00:22:21 +01:00
notice ( sprintf ( t ( '%s : Message delivery failed.' ), $recip ) . EOL );
2010-07-29 01:28:39 +02:00
}
}
2011-03-13 13:50:44 +01:00
notice ( sprintf ( tt ( " %d message sent. " , " %d messages sent. " , $total ) , $total ) . EOL );
2010-09-09 05:14:17 +02:00
return ;
2010-07-29 01:28:39 +02:00
}
2016-02-07 15:11:34 +01:00
2017-01-09 13:14:25 +01:00
function invite_content ( App $a ) {
2010-12-10 13:04:35 +01:00
2016-12-20 11:56:34 +01:00
if ( ! local_user ()) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2010-07-29 01:28:39 +02:00
return ;
}
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( 'invite.tpl' );
2011-07-18 01:08:47 +02:00
$invonly = false ;
2017-11-07 03:22:52 +01:00
if ( Config :: get ( 'system' , 'invitation_only' )) {
2011-07-18 01:08:47 +02:00
$invonly = true ;
2017-11-07 03:22:52 +01:00
$x = PConfig :: get ( local_user (), 'system' , 'invites_remaining' );
2016-12-21 23:04:09 +01:00
if (( ! $x ) && ( ! is_site_admin ())) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'You have no more invitations available' ) . EOL );
2011-07-18 01:08:47 +02:00
return '' ;
}
2015-09-15 22:29:02 +02:00
}
2011-07-18 01:08:47 +02:00
2017-11-07 03:22:52 +01:00
$dirloc = Config :: get ( 'system' , 'directory' );
2016-12-21 23:04:09 +01:00
if ( strlen ( $dirloc )) {
2016-12-20 21:15:53 +01:00
if ( $a -> config [ 'register_policy' ] == REGISTER_CLOSED ) {
2017-08-02 08:47:09 +02:00
$linktxt = sprintf ( 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 07:23:05 +02:00
} else {
2017-08-26 09:32:10 +02:00
$linktxt = sprintf ( t ( 'To accept this invitation, please visit and register at %s or any other public Friendica website.' ), System :: baseUrl ())
2017-08-02 08:48:01 +02:00
. " \r \n " . " \r \n " . sprintf ( 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 21:15:53 +01:00
}
2017-08-03 07:22:29 +02:00
} else { // there is no global directory URL defined
if ( $a -> config [ 'register_policy' ] == REGISTER_CLOSED ) {
$o = t ( 'Our apologies. This system is not currently configured to connect with other public sites or invite members.' );
return $o ;
} else {
2017-08-26 09:32:10 +02:00
$linktxt = sprintf ( t ( 'To accept this invitation, please visit and register at %s.' ), System :: baseUrl ()
2017-08-10 10:31:45 +02:00
. " \r \n " . " \r \n " . 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 07:22:29 +02:00
}
2012-03-25 08:04:18 +02:00
}
2011-07-18 01:08:47 +02:00
2018-01-15 14:05:12 +01:00
$o = replace_macros ( $tpl , [
2013-01-25 22:48:57 +01:00
'$form_security_token' => get_form_security_token ( " send_invite " ),
2016-12-20 21:15:53 +01:00
'$invite' => t ( 'Send invitations' ),
'$addr_text' => t ( 'Enter email addresses, one per line:' ),
'$msg_text' => t ( 'Your message:' ),
'$default_message' => 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 08:04:18 +02:00
. $linktxt
2017-01-09 13:14:25 +01:00
. " \r \n " . " \r \n " . (( $invonly ) ? t ( 'You will need to supply this invitation code: $invite_code' ) . " \r \n " . " \r \n " : '' ) . t ( 'Once you have registered, please connect with me via my profile page at:' )
2017-08-26 09:32:10 +02:00
. " \r \n " . " \r \n " . System :: baseUrl () . '/profile/' . $a -> user [ 'nickname' ]
2017-08-12 07:46:37 +02:00
. " \r \n " . " \r \n " . t ( 'For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca' ) . " \r \n " . " \r \n " ,
2016-12-20 21:15:53 +01:00
'$submit' => t ( 'Submit' )
2018-01-15 14:05:12 +01:00
]);
2010-07-29 01:28:39 +02:00
return $o ;
2015-09-15 22:29:02 +02:00
}