<?php
/*****************************************************************************
 *   Buy Into Secondary Usergroup Module (/inc/plugins/myplaza/ugroup2.php)
 *     - MyPlaza for MyBB 1.2
 *    By ZiNgA BuRgA, 2007-2008
 * 
 * Allows users to buy themselves into a secondary usergroup.
 *****************************************************************************/

if(!defined("IN_MYBB"))
	die("This file cannot be accessed directly.");

function ugroup2_lang()
{
	global $mybb, $lang;
	switch($mybb->settings['bblanguage'])
	{
		default:
			$lang->already_in_group = 'You are already a member of this usergroup.';
			
			$lang->ugroup2_changed = 'You are now a member of group %1$s';
			$lang->ugroup2_changed_log = 'Joined usergroup <strong>%1$s</strong>';
	}
}

function ugroup2_lang_admin()
{
	global $mybb, $lang;
	switch($mybb->settings['bblanguage'])
	{
		default:
			$lang->ugroup2_name = 'Buy Into Secondary Usergroup';
			$lang->ugroup2_description = 'Allows users to buy themselves into another secondary usergroup.';
			
			$lang->ugroup2_item = 'Join Group "%1$s"';
			$lang->ugroup2_item_desc = 'This item will make you a member of the group "%1$s"';
			
			$lang->group2_timeout = 'Secondary 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 ugroup2_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 ugroup2_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->ugroup2_name,
		'visiblegroups' => 'all',
		'icon' => 'category.png'
	));
	$cid = $db->insert_id();
	
	foreach($groupscache as $g)
		ugroup2_additem($g['gid'], $g['title'], $cid);
	
	// add backup groups etc.
	db_create_table('plaza_ugroup2_timeouts', array(
		'uid' => array('type' => 'int', 'size' => 10, 'not_null' => true, 'unsigned' => true),
		'gid' => 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,gid', 'type' => 'primary'),
		array('fields' => 'timeout', 'type' => 'key')
	));
	
	// add timeouts column
	db_add_columns('usergroups', array(
		'myplaza_ugroup2_timeout' => array('type' => 'int', 'size' => 10, 'unsigned' => true, 'not_null' => true, 'default' => 0)
	));
	$cache->updateusergroups();
	
	plugins_add_passive_hook('admin_usergroups_do_add', 'ugroup2_new_group', 10, true);
	plugins_add_passive_hook('admin_usergroups_do_delete', 'ugroup2_del_group', 10, true);
	plugins_add_passive_hook('admin_usergroups_do_edit', 'ugroup2_edit_group', 10, true);
	
	plugins_add_passive_hook('admin_usergroups_add_code', 'ugroup2_group_code', 31, true);
	plugins_add_passive_hook('admin_usergroups_edit_code', 'ugroup2_group_code', 31, true);
	plugins_add_passive_hook('global_end', 'ugroup2_purge_groups');
}

function ugroup2_deactivate()
{
	global $cache;
	myplaza_remove_module_items();
	plugins_remove_passive_hooks();
	db_drop_tables(array('plaza_ugroup2_timeouts'));
	db_remove_columns('usergroups', array('myplaza_ugroup2_timeout'));
	$cache->updateusergroups();
}


function ugroup2_additem($gid, $name, $cid = 0)
{
	global $lang;
	myplaza_add_item(array(
		"name" => sprintf($lang->ugroup2_item, $name),
		"idname" => 'ugroup2_'.$gid,
		"description" => sprintf($lang->ugroup2_item_desc, $name),
		"visible" => MY_NO,
		"cost" => 3000,
		"includefile" => 'ugroup2',
		"cid" => $cid
	));
}

function ugroup2_new_group()
{
	myplaza_langload('ugroup2');
	global $mybb, $grouparray;
	ugroup2_additem(db_next_auto_increment('usergroups', 'gid'), $mybb->input['title']);
	if($mybb->input['myplaza_ugroup2_timeout'] != '')
	{
		$grouparray['myplaza_ugroup2_timeout'] = intval($mybb->input['myplaza_ugroup2_timeout']);
		if($grouparray['myplaza_ugroup2_timeout'] < 0) $grouparray['myplaza_ugroup2_timeout'] = 0;
	}
}
function ugroup2_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 = 'ugroup2_".intval($mybb->input['gid'])."'"), 'iid');
	if($iid)
		myplaza_remove_items($iid);
}
function ugroup2_edit_group()  // this function is only to update the name of the usergroup in the item
{
	myplaza_langload('ugroup2');
	global $lang, $db, $mybb, $grouparray;
	if($mybb->input['myplaza_ugroup2_timeout'] != '')
	{
		$grouparray['myplaza_ugroup2_timeout'] = intval($mybb->input['myplaza_ugroup2_timeout']);
		if($grouparray['myplaza_ugroup2_timeout'] < 0) $grouparray['myplaza_ugroup2_timeout'] = 0;
	}
	
	// grab the item
	$item = $db->fetch_array($db->simple_select(MY_TABLE_PREFIX.'plaza_items', 'iid,name,description', "idname = 'ugroup2_".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'];
	
	
	
	$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 ugroup2_group_code()
{
	global $lang, $usergroup, $mybb;
	
	if(isset($usergroup['myplaza_ugroup2_timeout']) && $mybb->input['action'] == 'edit')
		$timeout = $usergroup['myplaza_ugroup2_timeout'];
	else
		$timeout = 0;
	
	myplaza_langload('ugroup2');
	makeinputcode($lang->group2_timeout, 'myplaza_ugroup2_timeout', $timeout);
}


function ugroup2_run($item)
{
	global $mybb, $lang, $buyRtnMsg, $buyLogMsg;
	
	if(substr($item['idname'], 0, 8) != 'ugroup2_') return false;
	$new_group = intval(substr($item['idname'], 8));
	$additionalgroups = explode(',', $mybb->user['additionalgroups']);
	if(in_array($new_group, $additionalgroups))
	{
		$buyRtnMsg = $lang->already_in_group;
		return false;
	}
	
	join_usergroup($mybb->user['uid'], $new_group);
	
	global $cache, $groupscache, $db;
	if(!is_array($groupscache))
		$groupscache = $cache->read("usergroups");
	
	$new_gname = $groupscache[$new_group]['title'];
	
	if($groupscache[$new_group]['myplaza_ugroup2_timeout'])
	{
		if($db->fetch_field($db->simple_select(MY_TABLE_PREFIX.'plaza_ugroup2_timeouts', 'uid', 'uid='.$mybb->user['uid'].' AND gid='.$new_group), 'uid'))
		{
			$db->update_query(MY_TABLE_PREFIX.'plaza_ugroup2_timeouts', array('timeout' => REQUEST_TIME + $groupscache[$new_group]['myplaza_ugroup2_timeout']), 'uid='.$mybb->user['uid'].' AND gid='.$new_group);
		}
		else
		{
			// insert row
			$db->insert_query(MY_TABLE_PREFIX.'plaza_ugroup2_timeouts', array(
				'uid' => $mybb->user['uid'],
				'gid' => $new_group,
				'timeout' => REQUEST_TIME + $groupscache[$new_group]['myplaza_ugroup2_timeout']
			));
		}
	}
	
	$buyRtnMsg = sprintf($lang->ugroup2_changed, $new_gname);
	$buyLogMsg = sprintf($lang->ugroup2_changed_log, $new_gname);
	
	return true;
}

function ugroup2_purge_groups()
{
	global $db;
	$query = $db->simple_select(MY_TABLE_PREFIX.'plaza_ugroup2_timeouts', 'uid,gid', 'timeout <= '.REQUEST_TIME);
	$qcache = array();
	while($r = $db->fetch_array($query))
		$qcache[$r['uid']][$r['gid']] = $r['gid'];
	
	if(!empty($qcache))
	{
		// get uids
		$query = $db->simple_select(MY_TABLE_PREFIX.'users', 'uid,additionalgroups', 'uid IN ('.implode(',', array_keys($qcache)).')');
		$users = array();
		while($u = $db->fetch_array($query))
		{
			$tempA = explode(',', $u['additionalgroups']);
			// remove gids
			$users[$u['uid']] = array('additionalgroups' => implode(',',array_diff($tempA, $qcache[$u['uid']])));
		}
		
		// finally update
		$db->delete_query(MY_TABLE_PREFIX.'plaza_ugroup2_timeouts', 'timeout <= '.REQUEST_TIME);
		db_shutdown_update_rows('users', $users, 'uid');
	}
}

?>