<?php
/*****************************************************************************
 *   Buy Into Usergroup Module (/inc/plugins/myplaza/ugroup.php)
 *     - MyPlaza for MyBB 1.2
 *    By ZiNgA BuRgA, 2007-2008
 * 
 * Allows users to buy themselves into another usergroup.
 *****************************************************************************/

if(!defined("IN_MYBB"))
	die("This file cannot be accessed directly.");

function ugroup_lang()
{
	global $mybb, $lang;
	switch($mybb->settings['bblanguage'])
	{
		default:
			$lang->already_in_group = 'You are already a member of this usergroup.';
			
			$lang->ugroup_changed = 'You are now a member of group %1$s';
			$lang->ugroup_changed_log = 'Moved to usergroup <strong>%1$s</strong>';
	}
}

function ugroup_lang_admin()
{
	global $mybb, $lang;
	switch($mybb->settings['bblanguage'])
	{
		default:
			$lang->ugroup_name = 'Buy Into Usergroup';
			$lang->ugroup_description = 'Allows users to buy themselves into another usergroup.';
			
			//$lang->ugroup_items = 'Usergroup Items';
			
			//$lang->to_ugroup = 'To Usergroup';
			
			$lang->ugroup_item = 'Join Group "%1$s"';
			$lang->ugroup_item_desc = 'This item will make you a member of the group "%1$s"';
			
			$lang->group_timeout = 'Group Timeout (seconds)<br /><small>If a user buys him/herself into this usergroup, this is how long the user will stay in the group.  0 = no timeout</small>';
	}
}

function ugroup_info()
{
	global $lang;
	return array(
		"website"		=> "http://myplaza.zingaburga.com",
		"author"		=> "ZiNgA BuRgA",
		"authorsite"	=> "http://zingaburga.com/",
		"version"		=> "1.0.1",
		
		'compatibility'	=> array(0.5,0.51,0.52,0.53)
	);
}

function ugroup_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, $groupscache, $db, $lang;
	if(!is_array($groupscache))
		$groupscache = $cache->read("usergroups");
	
	// insert category
	$db->insert_query(MY_TABLE_PREFIX.'plaza_cat', array(
		'name' => $lang->ugroup_name,
		'visiblegroups' => 'all',
		'icon' => 'category.png'
	));
	$cid = $db->insert_id();
	
	foreach($groupscache as $g)
		ugroup_additem($g['gid'], $g['title'], $cid);
	
	// add backup groups etc.
	db_create_table('plaza_ugroup_timeouts', array(
		'uid' => array('type' => 'int', 'size' => 10, 'not_null' => true, 'unsigned' => true),
		'oldgid' => array('type' => 'smallint', 'size' => 5, 'not_null' => true, 'unsigned' => true, 'default' => 0),
		'timeout' => array('type' => 'bigint', 'size' => 30, 'not_null' => true, 'unsigned' => true, 'default' => 0)
	), array(
		array('fields' => 'uid', 'type' => 'primary'),
		array('fields' => 'timeout', 'type' => 'key')
	));
	
	// add timeouts column
	db_add_columns('usergroups', array(
		'myplaza_ugroup_timeout' => array('type' => 'int', 'size' => 10, 'unsigned' => true, 'not_null' => true, 'default' => 0)
	));
	$cache->updateusergroups();
	
	plugins_add_passive_hook('admin_usergroups_do_add', 'ugroup_new_group', 10, true);
	plugins_add_passive_hook('admin_usergroups_do_delete', 'ugroup_del_group', 10, true);
	plugins_add_passive_hook('admin_usergroups_do_edit', 'ugroup_edit_group', 10, true);
	
	plugins_add_passive_hook('admin_usergroups_add_code', 'ugroup_group_code', 30, true);
	plugins_add_passive_hook('admin_usergroups_edit_code', 'ugroup_group_code', 30, true);
	
	plugins_add_passive_hook('global_end', 'ugroup_purge_groups', 10);
}

function ugroup_deactivate()
{
	global $cache;
	myplaza_remove_module_items();
	plugins_remove_passive_hooks();
	db_drop_tables(array('plaza_ugroup_timeouts'));
	db_remove_columns('usergroups', array('myplaza_ugroup_timeout'));
	$cache->updateusergroups();
}

function ugroup_additem($gid, $name, $cid = 0)
{
	global $lang;
	myplaza_add_item(array(
		"name" => sprintf($lang->ugroup_item, $name),
		"idname" => 'ugroup_'.$gid,
		"description" => sprintf($lang->ugroup_item_desc, $name),
		"visible" => MY_NO,
		"cost" => 3000,
		"includefile" => 'ugroup',
		"cid" => $cid
	));
}

function ugroup_new_group()
{
	myplaza_langload('ugroup');
	global $mybb, $grouparray;
	ugroup_additem(db_next_auto_increment('usergroups', 'gid'), $mybb->input['title']);
	if($mybb->input['myplaza_ugroup_timeout'] != '')
	{
		$grouparray['myplaza_ugroup_timeout'] = intval($mybb->input['myplaza_ugroup_timeout']);
		if($grouparray['myplaza_ugroup_timeout'] < 0) $grouparray['myplaza_ugroup_timeout'] = 0;
	}
}
function ugroup_del_group()
{
	global $mybb, $db;
	// get the plaza item to be deleted
	$iid = $db->fetch_field($db->simple_select(MY_TABLE_PREFIX.'plaza_items', 'iid', "idname = 'ugroup_".intval($mybb->input['gid'])."'"), 'iid');
	if($iid)
		myplaza_remove_items($iid);
}
function ugroup_edit_group()  // this function is only to update the name of the usergroup in the item
{
	myplaza_langload('ugroup');
	global $lang, $db, $mybb, $grouparray;
	if($mybb->input['myplaza_ugroup_timeout'] != '')
	{
		$grouparray['myplaza_ugroup_timeout'] = intval($mybb->input['myplaza_ugroup_timeout']);
		if($grouparray['myplaza_ugroup_timeout'] < 0) $grouparray['myplaza_ugroup_timeout'] = 0;
	}
	
	// grab the item
	$item = $db->fetch_array($db->simple_select(MY_TABLE_PREFIX.'plaza_items', 'iid,name,description', "idname = 'ugroup_".intval($mybb->input['gid'])."'"));
	if(!$item) return;
	// also grab the old name
	global $cache, $groupscache;
	if(!is_array($groupscache))
		$groupscache = $cache->read("usergroups");
	
	$oldgname = $groupscache[$new_group]['title'];
	
	
	
	//if(sprintf($lang->ugroup_item, $oldgname) == $item['name'])
	$newiname = str_replace($oldgname, $mybb->input['title'], $item['name']);
	if($item['name'] != $newiname)
	{
		$newidesc = str_replace($oldgname, $mybb->input['title'], $item['description']);
		$db->update_query(MY_TABLE_PREFIX.'plaza_items', array(
			'name' => $db->escape_string($newiname),
			'description' => $db->escape_string($newidesc)
		), 'iid='.$item['iid']);
	}
}

function ugroup_group_code()
{
	global $lang, $usergroup, $mybb;
	
	if(isset($usergroup['myplaza_ugroup_timeout']) && $mybb->input['action'] == 'edit')
		$timeout = $usergroup['myplaza_ugroup_timeout'];
	else
		$timeout = 0;
	
	myplaza_langload('ugroup');
	makeinputcode($lang->group_timeout, 'myplaza_ugroup_timeout', $timeout);
}

function ugroup_run($item)
{
	global $mybb, $lang, $buyRtnMsg, $buyLogMsg;
	
	if(substr($item['idname'], 0, 7) != 'ugroup_') return false;
	$new_group = intval(substr($item['idname'], 7));
	if($mybb->user['usergroup'] == $new_group)
	{
		$buyRtnMsg = $lang->already_in_group;
		return false;
	}
	
	require_once MYBB_ROOT."inc/datahandlers/user.php";
	$uh = new UserDataHandler('update');
	$user = array(
		'uid' => $mybb->user['uid'],
		'usergroup' => $new_group
	);
	
	$uh->set_data($user);
	if(!$uh->validate_user())
	{
		$buyRtnMsg = $uh->get_friendly_errors();
		return false;
	}
	$uh->update_user();
	
	global $cache, $groupscache, $db;
	if(!is_array($groupscache))
		$groupscache = $cache->read("usergroups");
	
	$new_gname = $groupscache[$new_group]['title'];
	
	
	$timeout_check = $db->fetch_field($db->simple_select(MY_TABLE_PREFIX.'plaza_ugroup_timeouts', 'uid', 'uid='.$mybb->user['uid']), 'uid');
	
	if($groupscache[$new_group]['myplaza_ugroup_timeout'])
	{
		// check if row already exists
		if($timeout_check)
		{
			$db->update_query(MY_TABLE_PREFIX.'plaza_ugroup_timeouts', array('timeout' => REQUEST_TIME + $groupscache[$new_group]['myplaza_ugroup_timeout']), 'uid='.$mybb->user['uid']);
		}
		else
		{
			// insert row
			$db->insert_query(MY_TABLE_PREFIX.'plaza_ugroup_timeouts', array(
				'uid' => $mybb->user['uid'],
				'oldgid' => $mybb->user['usergroup'],
				'timeout' => REQUEST_TIME + $groupscache[$new_group]['myplaza_ugroup_timeout']
			));
		}
	}
	elseif($timeout_check)
	{
		$db->delete_query(MY_TABLE_PREFIX.'plaza_ugroup_timeouts', 'uid='.$mybb->user['uid']);
	}
	
	$buyRtnMsg = sprintf($lang->ugroup_changed, $new_gname);
	$buyLogMsg = sprintf($lang->ugroup_changed_log, $new_gname);
	
	return true;
}

function ugroup_purge_groups()
{
	global $db;
	$query = $db->simple_select(MY_TABLE_PREFIX.'plaza_ugroup_timeouts', '*', 'timeout <= '.REQUEST_TIME);
	$updates = array();
	while($r = $db->fetch_array($query))
		$updates[$r['uid']] = array('usergroup' => $r['oldgid']);
	if(!empty($updates))
	{
		$db->delete_query(MY_TABLE_PREFIX.'plaza_ugroup_timeouts', 'timeout <= '.REQUEST_TIME);
		db_shutdown_update_rows('users', $updates, 'uid');
	}
}

?>