############################################################## 
## MOD Title: group moderatorZ 
## MOD Author: Ptirhiik < admin@rpgnet-fr.com > (Pierre) http://www.rpgnet-fr.com 
## MOD Description: This mod allows to have more than one moderator to a group
## MOD Version: 1.0.0
## 
## Installation Level: easy
## Installation Time: 10 Minutes 
## Files To Edit: 
##			groupcp.php
##			templates/subSilver/groupcp_info_body.tpl
##			language/lang_english/lang_main.php
## Included Files: n/a
############################################################## 
## For Security Purposes, Please Check: http://www.phpbb.com/mods/downloads/ for the 
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered 
## in our MOD-Database, located at: http://www.phpbb.com/mods/downloads/ 
############################################################## 
## Author Notes: 
##		The mod introduces a new notion : the group owner which is the main moderator.
##
##		The group owner is set on the admin panel, as usual. Then the group owner can
##		grant or ungrant the status of group moderator to anyone within the group control
##		panel.
##
##		A group moderator will receive the email of pending users, will be able to accept
##		their admittance, but won't be able to grant them (nor retire) the group moderator
##		status.
##
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
##############################################################
#
#-----[ SQL ]-------------------------------------------------
#
ALTER TABLE phpbb_user_group ADD group_moderator TINYINT(1) NOT NULL;
#
#-----[ OPEN ]------------------------------------------------
#
groupcp.php
#
#-----[ FIND ]------------------------------------------------
#
	$sql = "SELECT group_moderator 
		FROM " . GROUPS_TABLE . "  
		WHERE group_id = $group_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain user and group information', '', __LINE__, __FILE__, $sql);
	}

	$row = $db->sql_fetchrow($result);

	if ( $row['group_moderator'] != $userdata['user_id'] && $userdata['user_level'] != ADMIN )
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//	$sql = "SELECT group_moderator 
//		FROM " . GROUPS_TABLE . "  
//		WHERE group_id = $group_id";
//	if ( !($result = $db->sql_query($sql)) )
//	{
//		message_die(GENERAL_ERROR, 'Could not obtain user and group information', '', __LINE__, __FILE__, $sql);
//	}
//
//	$row = $db->sql_fetchrow($result);
//
//	if ( $row['group_moderator'] != $userdata['user_id'] && $userdata['user_level'] != ADMIN )
//-- add
	$sql = "SELECT * from " . USER_GROUP_TABLE . " as ug, " . GROUPS_TABLE . " as g 
		WHERE (ug.user_id = g.group_moderator or ug.group_moderator = 1) 
			AND g.group_id = $group_id and ug.group_id = $group_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain user and group information', '', __LINE__, __FILE__, $sql);
	}
	while ($row = $db->sql_fetchrow($result) ) $group_moderators[] = $row['user_id'];

	if ( !in_array($userdata['user_id'], $group_moderators) && $userdata['user_level'] != ADMIN )
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
	$sql = "SELECT u.user_email, u.username, u.user_lang, g.group_name 
		FROM ".USERS_TABLE . " u, " . GROUPS_TABLE . " g 
		WHERE u.user_id = g.group_moderator 
			AND g.group_id = $group_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, "Error getting group moderator data", "", __LINE__, __FILE__, $sql);
	}

	$moderator = $db->sql_fetchrow($result);

	include($phpbb_root_path . 'includes/emailer.'.$phpEx);
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//	$sql = "SELECT u.user_email, u.username, u.user_lang, g.group_name 
//		FROM ".USERS_TABLE . " u, " . GROUPS_TABLE . " g 
//		WHERE u.user_id = g.group_moderator 
//			AND g.group_id = $group_id";
//	if ( !($result = $db->sql_query($sql)) )
//	{
//		message_die(GENERAL_ERROR, "Error getting group moderator data", "", __LINE__, __FILE__, $sql);
//	}
//
//	$moderator = $db->sql_fetchrow($result);
//
//	include($phpbb_root_path . 'includes/emailer.'.$phpEx);
//-- add
	include($phpbb_root_path . 'includes/emailer.'.$phpEx);

	$sql = "SELECT u.user_email, u.username, u.user_lang, g.group_name 
		FROM ".USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g 
		WHERE (ug.user_id = g.group_moderator or ug.group_moderator = 1 )
			AND u.user_id = ug.user_id and g.group_id = $group_id and ug.group_id = g.group_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, "Error getting group moderator data", "", __LINE__, __FILE__, $sql);
	}
	while ($moderator = $db->sql_fetchrow($result))
	{
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
	$emailer->reset();

	$template->assign_vars(array(
		'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("index.$phpEx") . '">')
	);
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
	$emailer->reset();

//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- add
	}
//-- fin mod : group moderatorZ --------------------------------------------------------------------

	$template->assign_vars(array(
		'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("index.$phpEx") . '">')
	);
#
#-----[ FIND ]------------------------------------------------
#
		$group_moderator = $group_info['group_moderator'];
	
		if ( $group_moderator == $userdata['user_id'] || $userdata['user_level'] == ADMIN )
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//		$group_moderator = $group_info['group_moderator'];
//	
//		if ( $group_moderator == $userdata['user_id'] || $userdata['user_level'] == ADMIN )
//-- add
		$sql = "SELECT * from " . USER_GROUP_TABLE . " as ug, " . GROUPS_TABLE . " as g 
			WHERE (ug.user_id = g.group_moderator or ug.group_moderator = 1) 
				AND g.group_id = $group_id and ug.group_id = $group_id";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Could not obtain user and group information', '', __LINE__, __FILE__, $sql);
		}
		while ($row = $db->sql_fetchrow($result) ) $group_moderators[] = $row['user_id'];

		if ( in_array($userdata['user_id'], $group_moderators) || $userdata['user_level'] == ADMIN )
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
		if ( !empty($HTTP_POST_VARS['add']) || !empty($HTTP_POST_VARS['remove']) || isset($HTTP_POST_VARS['approve']) || isset($HTTP_POST_VARS['deny']) )
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//		if ( !empty($HTTP_POST_VARS['add']) || !empty($HTTP_POST_VARS['remove']) || isset($HTTP_POST_VARS['approve']) || isset($HTTP_POST_VARS['deny']) )
//-- add
		if ( !empty($HTTP_POST_VARS['add']) || !empty($HTTP_POST_VARS['remove']) || isset($HTTP_POST_VARS['approve']) || isset($HTTP_POST_VARS['deny']) || isset($HTTP_POST_VARS['grant_ungrant']) )
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
			if ( isset($HTTP_POST_VARS['add']) )
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//			if ( isset($HTTP_POST_VARS['add']) )
//-- add
			if ( isset($HTTP_POST_VARS['grant_ungrant']) )
			{
				$members = $HTTP_POST_VARS['members'];
				if (count($members) > 0)
				{
					$s_members = implode( ', ', $members);
					$group_owner = $group_info['group_moderator'];
					$sql = "select * from " . USER_GROUP_TABLE . " where group_id = $group_id and user_id in ($s_members) and user_id <> $group_owner and group_moderator = 1";
					if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Could not get user/group information', '', __LINE__, __FILE__, $sql);
					while ( $row = $db->sql_fetchrow($result) ) $moderators[] = $row['user_id'];
					$s_mod = (count($moderators) > 0) ? implode( ', ', $moderators) : '';
					if ($s_mod != '')
					{
						$sql = "update " . USER_GROUP_TABLE . " set group_moderator = 0 where group_id = $group_id and user_id <> $group_owner and user_id in ($s_mod)";
						if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Could not ungrant user/group mod status', '', __LINE__, __FILE__, $sql);
					}
					$sql = "update " . USER_GROUP_TABLE . " set group_moderator = 1 where group_id = $group_id and user_id <> $group_owner and user_id in ($s_members)";
					if ($s_mod != '') $sql .= " and user_id not in ($s_mod)";
					if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, 'Could not ungrant user/group mod status', '', __LINE__, __FILE__, $sql);

					$template->assign_vars(array(
						'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=$group_id") . '">')
					);

					$message = $lang['Group_grant_ungrant_mod_ok'] . '<br /><br />' . sprintf($lang['Click_return_group'], '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=$group_id") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

					message_die(GENERAL_MESSAGE, $message);
				}
			}
			else if ( isset($HTTP_POST_VARS['add']) )
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
	$sql = "SELECT u.username, u.user_id, u.user_viewemail, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, ug.user_pending 
		FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug
		WHERE ug.group_id = $group_id
			AND u.user_id = ug.user_id
			AND ug.user_pending = 0 
			AND ug.user_id <> " . $group_moderator['user_id'] . " 
		ORDER BY u.username";
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//	$sql = "SELECT u.username, u.user_id, u.user_viewemail, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, ug.user_pending 
//		FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug
//		WHERE ug.group_id = $group_id
//			AND u.user_id = ug.user_id
//			AND ug.user_pending = 0 
//			AND ug.user_id <> " . $group_moderator['user_id'] . " 
//		ORDER BY u.username"; 
//-- add
	// group owner
	$sql = "SELECT u.username, u.user_id, u.user_viewemail, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, ug.user_pending, ug.group_moderator 
		FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug
		WHERE ug.group_id = $group_id
			AND u.user_id = ug.user_id
			AND ug.user_pending = 0 
			AND ug.user_id <> " . $group_moderator['user_id'] . " 
		ORDER BY ug.group_moderator DESC, u.username";
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
		'L_GROUP_INFORMATION' => $lang['Group_Information'],
#
#-----[ BEFORE, ADD ]-----------------------------------------
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- add
		'L_GROUP_OWNER' => $lang['Group_owner'],
		'L_GRANT_UNGRANT_SELECTED' => $lang['Group_grant_mod_status'],
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
	//
	// Dump out the remaining users
	//
#
#-----[ AFTER, ADD ]------------------------------------------
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- add
	$last_member_type = -1;
	$color = false;
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
			$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
			$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];

			$template->assign_block_vars('member_row', array(
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//			$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
//			$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
//
//			$template->assign_block_vars('member_row', array(
//-- add
			if ($last_member_type != $group_members[$i]['group_moderator'] )
			{
				$template->assign_block_vars('member_type', array(
					'L_TYPE' => ( $group_members[$i]['group_moderator'] ) ? $lang['Group_Moderator'] : $lang['Group_Members'],
					)
				);
				$color = false;
			}
			$last_member_type = $group_members[$i]['group_moderator'];
			$color = !$color;
			$row_color = ( $color ) ? $theme['td_color1'] : $theme['td_color2'];
			$row_class = ( $color ) ? $theme['td_class1'] : $theme['td_class2'];

			$template->assign_block_vars('member_type.member_row', array(
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
				$template->assign_block_vars('member_row.switch_mod_option', array());
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- delete
//				$template->assign_block_vars('member_row.switch_mod_option', array());
//-- add
				if ( !$group_members[$i]['group_moderator'] || ($group_members[$i]['group_moderator'] && ( ($group_moderator['user_id'] == $userdata['user_id']) || ($userdata['user_level'] == ADMIN) )) )
				{	
					$template->assign_block_vars('member_type.member_row.switch_mod_option', array());
				}
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ FIND ]------------------------------------------------
#
		$template->assign_block_vars('switch_add_member', array());
#
#-----[ AFTER, ADD ]------------------------------------------
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- add
		if ( ($group_moderator['user_id'] == $userdata['user_id']) || ($userdata['user_level'] == ADMIN) )
		{
			$template->assign_block_vars('switch_mod_option.switch_owner_option', array());
		}
//-- fin mod : group moderatorZ --------------------------------------------------------------------

#
#-----[ OPEN ]------------------------------------------------
#
templates/subSilver/groupcp_info_body.tpl
#
#-----[ FIND ]------------------------------------------------
#
	  <td class="catSides" colspan="8" height="28"><span class="cattitle">{L_GROUP_MODERATOR}</span></td>
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
	  <td class="catSides" colspan="8" height="28"><span class="cattitle">{L_GROUP_OWNER}</span></td>
#
#-----[ FIND ]------------------------------------------------
#
	<tr> 
	  <td class="catSides" colspan="8" height="28"><span class="cattitle">{L_GROUP_MEMBERS}</span></td>
	</tr>
	<!-- BEGIN member_row -->
	<tr> 
	  <td class="{member_row.ROW_CLASS}" align="center"> {member_row.PM_IMG} </td>
	  <td class="{member_row.ROW_CLASS}" align="center"><span class="gen"><a href="{member_row.U_VIEWPROFILE}" class="gen">{member_row.USERNAME}</a></span></td>
	  <td class="{member_row.ROW_CLASS}" align="center"><span class="gen">{member_row.POSTS}</span></td>
	  <td class="{member_row.ROW_CLASS}" align="center"><span class="gen"> {member_row.FROM} 
		</span></td>
	  <td class="{member_row.ROW_CLASS}" align="center" valign="middle"><span class="gen">{member_row.EMAIL_IMG}</span></td>
	  <td class="{member_row.ROW_CLASS}" align="center"> {member_row.WWW_IMG}</td>
	  <td class="{member_row.ROW_CLASS}" align="center"> 
	  <!-- BEGIN switch_mod_option -->
	  <input type="checkbox" name="members[]" value="{member_row.USER_ID}" /> 
	  <!-- END switch_mod_option -->
	  </td>
	</tr>
	<!-- END member_row -->
#
#-----[ REPLACE WITH ]---------------------------------------- 
#
	<!-- BEGIN member_type -->
	<tr> 
	  <td class="catSides" colspan="8" height="28"><span class="cattitle">{member_type.L_TYPE}</span></td>
	</tr>
	<!-- BEGIN member_row -->
	<tr> 
	  <td class="{member_type.member_row.ROW_CLASS}" align="center"> {member_type.member_row.PM_IMG} </td>
	  <td class="{member_type.member_row.ROW_CLASS}" align="center"><span class="gen"><a href="{member_type.member_row.U_VIEWPROFILE}" class="gen">{member_type.member_row.USERNAME}</a></span></td>
	  <td class="{member_type.member_row.ROW_CLASS}" align="center"><span class="gen">{member_type.member_row.POSTS}</span></td>
	  <td class="{member_type.member_row.ROW_CLASS}" align="center"><span class="gen"> {member_type.member_row.FROM} </span></td>
	  <td class="{member_type.member_row.ROW_CLASS}" align="center" valign="middle"><span class="gen">{member_type.member_row.EMAIL_IMG}</span></td>
	  <td class="{member_type.member_row.ROW_CLASS}" align="center"> {member_type.member_row.WWW_IMG}</td>
	  <td class="{member_type.member_row.ROW_CLASS}" align="center"> 
	  <!-- BEGIN switch_mod_option -->
	  <input type="checkbox" name="members[]" value="{member_type.member_row.USER_ID}" /> 
	  <!-- END switch_mod_option -->
	  </td>
	</tr>
	<!-- END member_row -->
	<!-- END member_type -->
#
#-----[ FIND ]------------------------------------------------
#
			<input type="submit" name="remove" value="{L_REMOVE_SELECTED}" class="mainoption" />
#
#-----[ AFTER, ADD ]------------------------------------------
#
			<!-- BEGIN switch_owner_option -->
			<input type="submit" name="grant_ungrant" value="{L_GRANT_UNGRANT_SELECTED}" class="liteoption" />
			<!-- END switch_owner_option -->

#
#-----[ OPEN ]------------------------------------------------
#
language/lang_english/lang_main.php
#
#-----[ FIND ]------------------------------------------------
#
//
// That's all, Folks!
// -------------------------------------------------
#
#-----[ BEFORE, ADD ]-----------------------------------------
#
//-- mod : group moderatorZ ------------------------------------------------------------------------
//-- add
$lang['Group_owner'] = 'Group Owner';
$lang['Group_grant_mod_status'] = 'Grant/Ungrant Mod status';
$lang['Group_grant_ungrant_mod_ok'] = 'Moderators list for this group have been updated';
//-- fin mod : group moderatorZ --------------------------------------------------------------------
#
#-----[ SAVE/CLOSE ALL FILES ]--------------------------------
#
# EoM