<?php
/*****************************************************************************
 *   Periodic Payouts Module (/inc/plugins/myplaza/periodpay.php)
 *     - MyPlaza for MyBB 1.2
 *    By ZiNgA BuRgA, 2007-2008
 * 
 * Will periodically pay (or charge) certain usergroups.
 *****************************************************************************/

if(!defined("IN_MYBB"))
	die("This file cannot be accessed directly.");

function periodpay_lang_admin()
{
	global $mybb, $lang;
	switch($mybb->settings['bblanguage'])
	{
		default:
			$lang->periodpay_name = 'Periodic Pay/Charge';
			$lang->periodpay_description = 'Will periodically pay or charge certain usergroups.';
			
			
			$lang->periodpay_admin_groups = 'Periodic Payment Options';
			$lang->periodpay_group_amount = 'Amount to pay this Usergroup<br /><small>The amount of money to periodically pay all users in this usergroup.</small>';
			$lang->periodpay_group_period = 'How often to pay this Usergroup (seconds)<br /><small>The time (in seconds) between each payment to all users in this usergroup.</small>';
	}
}

function periodpay_info()
{
	return array(
		"website"		=> "http://myplaza.zingaburga.com",
		"author"		=> "ZiNgA BuRgA",
		"authorsite"	=> "http://zingaburga.com/",
		"version"		=> "1.0.0",
		
		'compatibility'	=> array(0.5,0.51,0.52,0.53)
	);
}

function periodpay_activate()
{
	if(!defined("IN_MYPLAZA_ADMIN"))
		cperror('This is not a normal MyBB plugin!  Please upload this file to your /inc/plugins/myplaza directory.');
	
	global $cache;
	db_add_columns('usergroups', array(
		'myplaza_periodpay_amount' => array('type' => 'decimal', 'size' => '20,10', 'default' => 0, 'not_null' => true),
		'myplaza_periodpay_period' => array('type' => 'int', 'size' => 10, 'default' => 0, 'not_null' => true, 'unsigned' => true),
		'myplaza_periodpay_lastpay' => array('type' => 'bigint', 'size' => 30, 'default' => 0, 'not_null' => true, 'unsigned' => true)
	));
	
	$cache->updateusergroups();
	
}

function periodpay_deactivate()
{
	global $cache;
	db_remove_columns('usergroups', array('myplaza_periodpay_amount', 'myplaza_periodpay_period', 'myplaza_periodpay_lastpay'));
	$cache->updateusergroups();
}

function periodpay_plugin()
{
	global $plugins;
	$plugins->add_hook('global_end', 'periodpay_execute');
	
	$plugins->add_hook('admin_usergroups_do_add', 'periodpay_group_addedit');
	$plugins->add_hook('admin_usergroups_do_edit', 'periodpay_group_addedit');
	$plugins->add_hook('admin_usergroups_add_code', 'periodpay_group_code', 1000);
	$plugins->add_hook('admin_usergroups_edit_code', 'periodpay_group_code', 1000);
}

function periodpay_execute()
{
	global $cache, $groupscache, $db, $mybb;
	if(!is_array($groupscache))
		$groupscache = $cache->read("usergroups");
	
	$gupdates = array();
	foreach($groupscache as $gid => $group)
	{
		if($group['myplaza_periodpay_amount'] && $group['myplaza_periodpay_period'] && $group['myplaza_periodpay_lastpay'] <= REQUEST_TIME - $group['myplaza_periodpay_period'])
		{
			$periods = floor((REQUEST_TIME - $group['myplaza_periodpay_lastpay']) / $group['myplaza_periodpay_period']);
			$amount = ($periods * $group['myplaza_periodpay_amount']);
			db_update('users', array(MYPLAZA_MONEY_COLUMN => MYPLAZA_MONEY_COLUMN.'+'.$amount), 'usergroup='.$gid, '', true);
			$gupdates[$gid] = array('myplaza_periodpay_lastpay' => $group['myplaza_periodpay_lastpay'] + $periods*$group['myplaza_periodpay_period']);
			
			if($mybb->user['usergroup'] == $gid) $mybb->user['money'] += $amount;
		}
	}
	
	if(!empty($gupdates))
	{
		db_shutdown_update_rows('usergroups', $gupdates, 'gid');
		add_shutdown('periodpay_shutdown_updateusergroup');
	}
}
function periodpay_shutdown_updateusergroup()
{
	global $cache;
	$cache->updateusergroups();
}

function periodpay_group_addedit()
{
	global $mybb, $grouparray;
	if($mybb->input['myplaza_periodpay_amount'] != '')
		$grouparray['myplaza_periodpay_amount'] = round(floatval($mybb->input['myplaza_periodpay_amount']), $mybb->settings['myplaza_money_decimals']);
	if($mybb->input['myplaza_periodpay_period'] != '')
		$grouparray['myplaza_periodpay_period'] = intval($mybb->input['myplaza_periodpay_period']);
	
	// force last pay time to reset
	$grouparray['myplaza_periodpay_lastpay'] = REQUEST_TIME;
	
}

function periodpay_group_code()
{
	global $lang, $usergroup, $mybb;
	
	if(isset($usergroup['myplaza_periodpay_amount']) && $mybb->input['action'] == 'edit')
		$amount = $usergroup['myplaza_periodpay_amount'];
	else
		$amount = 0;
	$amount = round($amount, $mybb->settings['myplaza_money_decimals']);
	if(isset($usergroup['myplaza_periodpay_period']) && $mybb->input['action'] == 'edit')
		$period = $usergroup['myplaza_periodpay_period'];
	else
		$period = 0;
	
	myplaza_langload('periodpay');
	tablesubheader($lang->periodpay_admin_groups);
	makeinputcode($lang->periodpay_group_amount, 'myplaza_periodpay_amount', $amount);
	makeinputcode($lang->periodpay_group_period, 'myplaza_periodpay_period', $period);
}
?>