2012-04-11 08:24:45 -04:00
< ? php
/**
* Name : testdrive
2018-01-20 11:01:59 -05:00
* Description : Sample Friendica addon for creating a test drive Friendica site with automatic account expiration .
2012-04-11 08:24:45 -04:00
* Version : 1.0
* Author : Mike Macgirvin < http :// macgirvin . com / profile / mike >
*/
2018-01-24 21:29:09 -05:00
2018-07-21 09:13:02 -04:00
use Friendica\App ;
2017-11-06 18:55:24 -05:00
use Friendica\Core\Config ;
2018-12-26 02:28:16 -05:00
use Friendica\Core\Hook ;
2018-01-22 14:03:11 -05:00
use Friendica\Core\L10n ;
2020-01-04 17:59:19 -05:00
use Friendica\Core\Search ;
2018-07-21 09:13:02 -04:00
use Friendica\Database\DBA ;
2019-12-29 21:55:10 -05:00
use Friendica\DI ;
2017-11-19 17:09:54 -05:00
use Friendica\Model\User ;
2019-06-23 13:56:21 -04:00
use Friendica\Util\ConfigFileLoader ;
2018-01-26 21:39:02 -05:00
use Friendica\Util\DateTimeFormat ;
2012-04-11 08:24:45 -04:00
function testdrive_install () {
2018-12-26 02:28:16 -05:00
Hook :: register ( 'load_config' , 'addon/testdrive/testdrive.php' , 'testdrive_load_config' );
Hook :: register ( 'register_account' , 'addon/testdrive/testdrive.php' , 'testdrive_register_account' );
Hook :: register ( 'cron' , 'addon/testdrive/testdrive.php' , 'testdrive_cron' );
Hook :: register ( 'enotify' , 'addon/testdrive/testdrive.php' , 'testdrive_enotify' );
Hook :: register ( 'globaldir_update' , 'addon/testdrive/testdrive.php' , 'testdrive_globaldir_update' );
2012-05-18 04:12:02 -04:00
2012-04-11 08:24:45 -04:00
}
function testdrive_uninstall () {
2018-12-26 02:28:16 -05:00
Hook :: unregister ( 'load_config' , 'addon/testdrive/testdrive.php' , 'testdrive_load_config' );
Hook :: unregister ( 'register_account' , 'addon/testdrive/testdrive.php' , 'testdrive_register_account' );
Hook :: unregister ( 'cron' , 'addon/testdrive/testdrive.php' , 'testdrive_cron' );
Hook :: unregister ( 'enotify' , 'addon/testdrive/testdrive.php' , 'testdrive_enotify' );
Hook :: unregister ( 'globaldir_update' , 'addon/testdrive/testdrive.php' , 'testdrive_globaldir_update' );
2012-04-11 08:24:45 -04:00
}
2019-03-24 07:54:26 -04:00
function testdrive_load_config ( App $a , ConfigFileLoader $loader )
2018-06-27 23:19:11 -04:00
{
2019-02-10 14:10:59 -05:00
$a -> getConfigCache () -> load ( $loader -> loadAddonConfig ( 'testdrive' ));
2018-06-27 23:19:11 -04:00
}
2012-05-21 19:41:44 -04:00
function testdrive_globaldir_update ( $a , & $b ) {
$b [ 'url' ] = '' ;
}
2012-04-11 08:24:45 -04:00
function testdrive_register_account ( $a , $b ) {
$uid = $b ;
2017-11-06 18:55:24 -05:00
$days = Config :: get ( 'testdrive' , 'expiredays' );
2012-04-11 08:24:45 -04:00
if ( ! $days )
return ;
2014-03-16 14:13:57 -04:00
$r = q ( " UPDATE user set account_expires_on = '%s' where uid = %d " ,
2018-07-21 09:13:02 -04:00
DBA :: escape ( DateTimeFormat :: convert ( 'now +' . $days . ' days' )),
2012-04-11 08:24:45 -04:00
intval ( $uid )
);
};
2014-03-16 14:13:57 -04:00
2012-04-11 08:24:45 -04:00
function testdrive_cron ( $a , $b ) {
$r = q ( " select * from user where account_expires_on < UTC_TIMESTAMP() + INTERVAL 5 DAY and
expire_notification_sent = '0000-00-00 00:00:00' " );
if ( count ( $r )) {
foreach ( $r as $rr ) {
2018-01-15 08:15:33 -05:00
notification ([
2012-04-11 08:24:45 -04:00
'uid' => $rr [ 'uid' ],
'type' => NOTIFY_SYSTEM ,
'system_type' => 'testdrive_expire' ,
'language' => $rr [ 'language' ],
'to_name' => $rr [ 'username' ],
'to_email' => $rr [ 'email' ],
2018-01-22 14:03:11 -05:00
'source_name' => L10n :: t ( 'Administrator' ),
2019-12-29 21:55:10 -05:00
'source_link' => DI :: baseUrl () -> get (),
'source_photo' => DI :: baseUrl () -> get () . '/images/person-80.jpg' ,
2018-01-15 08:15:33 -05:00
]);
2012-04-11 08:24:45 -04:00
2014-03-16 14:13:57 -04:00
q ( " update user set expire_notification_sent = '%s' where uid = %d " ,
2018-07-21 09:13:02 -04:00
DBA :: escape ( DateTimeFormat :: utcNow ()),
2012-04-11 08:24:45 -04:00
intval ( $rr [ 'uid' ])
);
2014-03-16 14:13:57 -04:00
2012-04-11 08:24:45 -04:00
}
}
$r = q ( " select * from user where account_expired = 1 and account_expires_on < UTC_TIMESTAMP() - INTERVAL 5 DAY " );
if ( count ( $r )) {
2017-11-19 17:09:54 -05:00
foreach ( $r as $rr ) {
User :: remove ( $rr [ 'uid' ]);
}
2012-04-11 08:24:45 -04:00
}
2015-08-23 05:32:47 -04:00
}
2012-04-11 08:24:45 -04:00
function testdrive_enotify ( & $a , & $b ) {
2018-11-30 09:11:56 -05:00
if ( ! empty ( $b [ 'params' ]) && $b [ 'params' ][ 'type' ] == NOTIFY_SYSTEM
&& ! empty ( $b [ 'params' ][ 'system_type' ]) && $b [ 'params' ][ 'system_type' ] === 'testdrive_expire' ) {
2019-12-29 21:55:10 -05:00
$b [ 'itemlink' ] = DI :: baseUrl () -> get ();
2018-01-23 22:59:20 -05:00
$b [ 'epreamble' ] = $b [ 'preamble' ] = L10n :: t ( 'Your account on %s will expire in a few days.' , Config :: get ( 'system' , 'sitename' ));
2018-01-22 14:03:11 -05:00
$b [ 'subject' ] = L10n :: t ( 'Your Friendica test account is about to expire.' );
2020-01-04 18:04:04 -05:00
$b [ 'body' ] = L10n :: t ( " Hi %1 \$ s, \n \n Your test account on %2 \$ s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca. " , $b [ 'params' ][ 'to_name' ], " [url= " . Config :: get ( 'system' , 'url' ) . " ] " . Config :: get ( 'config' , 'sitename' ) . " [/url] " , Search :: getGlobalDirectory ());
2012-04-11 08:24:45 -04:00
}
}