2012-04-11 12:24:45 +00:00
< ? php
/**
* Name : testdrive
2018-01-20 16:01:59 +00:00
* Description : Sample Friendica addon for creating a test drive Friendica site with automatic account expiration .
2012-04-11 12:24:45 +00:00
* Version : 1.0
* Author : Mike Macgirvin < http :// macgirvin . com / profile / mike >
*/
2018-01-25 02:29:09 +00:00
2018-07-21 13:13:02 +00:00
use Friendica\App ;
2018-12-26 07:28:16 +00:00
use Friendica\Core\Hook ;
2020-01-04 22:59:19 +00:00
use Friendica\Core\Search ;
2018-07-21 13:13:02 +00:00
use Friendica\Database\DBA ;
2019-12-30 02:55:10 +00:00
use Friendica\DI ;
2021-01-23 20:36:36 +00:00
use Friendica\Model\Notification ;
2017-11-19 22:09:54 +00:00
use Friendica\Model\User ;
2023-01-01 19:21:56 +00:00
use Friendica\Core\Config\Util\ConfigFileManager ;
2018-01-27 02:39:02 +00:00
use Friendica\Util\DateTimeFormat ;
2012-04-11 12:24:45 +00:00
2022-06-23 05:16:22 +00:00
function testdrive_install ()
{
2018-12-26 07:28:16 +00: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-04-11 12:24:45 +00:00
}
2023-01-14 02:16:09 +00:00
function testdrive_load_config ( ConfigFileManager $loader )
2018-06-28 03:19:11 +00:00
{
2023-01-14 02:16:09 +00:00
DI :: app () -> getConfigCache () -> load ( $loader -> loadAddonConfig ( 'testdrive' ), \Friendica\Core\Config\ValueObject\Cache :: SOURCE_STATIC );
2018-06-28 03:19:11 +00:00
}
2023-01-14 02:16:09 +00:00
function testdrive_globaldir_update ( array & $b )
2022-06-23 05:16:22 +00:00
{
2012-05-21 23:41:44 +00:00
$b [ 'url' ] = '' ;
}
2023-01-14 02:16:09 +00:00
function testdrive_register_account ( $b )
2022-06-23 05:16:22 +00:00
{
2012-04-11 12:24:45 +00:00
$uid = $b ;
2020-01-19 20:21:12 +00:00
$days = DI :: config () -> get ( 'testdrive' , 'expiredays' );
2022-06-23 05:16:22 +00:00
if ( ! $days ) {
2012-04-11 12:24:45 +00:00
return ;
2022-06-23 05:16:22 +00:00
}
2012-04-11 12:24:45 +00:00
2021-10-07 05:53:16 +00:00
DBA :: update ( 'user' , [ 'account_expires_on' => DateTimeFormat :: convert ( 'now +' . $days . ' days' )], [ 'uid' => $uid ]);
2022-06-23 05:16:22 +00:00
}
2014-03-16 18:13:57 +00:00
2012-04-11 12:24:45 +00:00
2023-01-14 02:16:09 +00:00
function testdrive_cron ( $b )
2022-06-23 05:16:22 +00:00
{
2021-12-03 12:35:02 +00:00
$users = DBA :: selectToArray ( 'user' , [], [ " `account_expires_on` < ? AND `expire_notification_sent` <= ? " ,
2022-06-23 05:16:22 +00:00
DateTimeFormat :: utc ( 'now + 5 days' ), DBA :: NULL_DATETIME ]);
foreach ( $users as $rr ) {
2021-10-19 19:53:10 +00:00
DI :: notify () -> createFromArray ([
2021-10-07 05:53:16 +00:00
'type' => Notification\Type :: SYSTEM ,
'uid' => $rr [ 'uid' ],
'system_type' => 'testdrive_expire' ,
'source_name' => DI :: l10n () -> t ( 'Administrator' ),
2023-02-18 19:57:09 +00:00
'source_link' => DI :: baseUrl (),
'source_photo' => DI :: baseUrl () . '/images/person-80.jpg' ,
2021-10-07 05:53:16 +00:00
]);
DBA :: update ( 'user' , [ 'expire_notification_sent' => DateTimeFormat :: utcNow ()], [ 'uid' => $rr [ 'uid' ]]);
2012-04-11 12:24:45 +00:00
}
2021-12-03 12:35:02 +00:00
$users = DBA :: selectToArray ( 'user' , [], [ " `account_expired` AND `account_expires_on` < ? " , DateTimeFormat :: utc ( 'now - 5 days' )]);
2021-10-07 05:53:16 +00:00
foreach ( $users as $rr ) {
User :: remove ( $rr [ 'uid' ]);
2012-04-11 12:24:45 +00:00
}
2015-08-23 09:32:47 +00:00
}
2012-04-11 12:24:45 +00:00
2023-01-14 02:16:09 +00:00
function testdrive_enotify ( array & $b )
2022-06-23 05:16:22 +00:00
{
if ( ! empty ( $b [ 'params' ]) && $b [ 'params' ][ 'type' ] == Notification\Type :: SYSTEM
2018-11-30 14:11:56 +00:00
&& ! empty ( $b [ 'params' ][ 'system_type' ]) && $b [ 'params' ][ 'system_type' ] === 'testdrive_expire' ) {
2023-02-18 19:57:09 +00:00
$b [ 'itemlink' ] = DI :: baseUrl ();
2022-06-23 05:16:22 +00:00
$b [ 'epreamble' ] = $b [ 'preamble' ] = DI :: l10n () -> t ( 'Your account on %s will expire in a few days.' , DI :: config () -> get ( 'system' , 'sitename' ));
$b [ 'subject' ] = DI :: l10n () -> t ( 'Your Friendica test account is about to expire.' );
$b [ 'body' ] = DI :: 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= " . DI :: config () -> get ( 'system' , 'url' ) . " ] " . DI :: config () -> get ( 'config' , 'sitename' ) . " [/url] " , Search :: getGlobalDirectory ());
}
2012-04-11 12:24:45 +00:00
}