first cut at a testdrive addon

pull/44/merge
friendica 2012-04-11 05:24:45 -07:00
parent 9295f179b1
commit d679a38e9e
5 changed files with 114 additions and 4 deletions

Binary file not shown.

View File

@ -8,10 +8,8 @@
*
*
*
* Addons are registered with the system in the
* .htconfig.php file.
*
* $a->config['system']['addon'] = 'plugin1,plugin2,etc.';
* Addons are registered with the system through the admin
* panel.
*
* When registration is detected, the system calls the plugin
* name_install() function, located in 'addon/name/name.php',

BIN
testdrive.tgz Normal file

Binary file not shown.

23
testdrive/README.md Normal file
View File

@ -0,0 +1,23 @@
TestDrive
=========
Testdrive is a Friendica plugin which implements automatic account expiration so that a site may be used as a public
test bed.
When an account is created on the site, it is given a hard expiration date of
$a->config['testdrive']['expiredays'] = 30;
Set this in your .htconfig.php file to allow a 30 day test drive period. By default no expiration period is defined
in case the plugin is activated accidentally.
There is no opportunity to extend an expired account using this plugin. Expiration is final. Other plugins may be created
which charge for service and extend the expiration as long as a balance is maintained. This plugin is purely for creating
a limited use test site.
An email warning will be sent out approximately five days before the expiration occurs. Once it occurs logins and many
system functions are disabled. Five days later the account is removed completely.

89
testdrive/testdrive.php Normal file
View File

@ -0,0 +1,89 @@
<?php
/**
* Name: testdrive
* Description: Sample Friendica plugin/addon for creating a test drive Friendica site with automatic account expiration.
* Version: 1.0
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
*/
function testdrive_install() {
register_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account');
register_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron');
}
function testdrive_uninstall() {
unregister_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account');
unregister_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron');
}
function testdrive_register_account($a,$b) {
$uid = $b;
$days = get_config('testdrive','expiredays');
if(! $days)
return;
$r = q("UPDATE user set account_expires_on = '%s' where uid = %d limit 1",
dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')),
intval($uid)
);
};
function testdrive_cron($a,$b) {
require_once('include/enotify.php');
$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) {
notification(array(
'uid' => $rr['uid'],
'type' => NOTIFY_SYSTEM,
'system_type' => 'testdrive_expire',
'language' => $rr['language'],
'to_name' => $rr['username'],
'to_email' => $rr['email'],
'source_name' => t('Administrator'),
'source_link' => $a->get_baseurl(),
'source_photo' => $a->get_baseurl() . '/images/person-80.jpg',
));
q("update user set expire_notification_sent = '%s' where uid = %d limit 1",
dbesc(datetime_convert()),
intval($rr['uid'])
);
}
}
$r = q("select * from user where account_expired = 1 and account_expires_on < UTC_TIMESTAMP() - INTERVAL 5 DAY ");
if(count($r)) {
require_once('include/Contact.php');
foreach($r as $rr)
user_remove($rr['uid']);
}
}
function testdrive_enotify(&$a, &$b) {
if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM
&& x($b['params'], 'system_type') && $b['params']['system_type'] === 'testdrive_expire') {
$b['itemlink'] = $a->get_baseurl();
$b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), get_config('system','sitename'));
$b['subject'] = t('Your Friendica test account is about to expire.');
$b['body'] = sprintf( t("Hi %1\$s,\n\nYour 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 http://dir.friendica.com/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]");
}
}