########################################################################################################################### ## MOD Title: Group Access ## MOD Version: 1.1.2 ## MOD Author: Logeen [www.kurshtml.edu.pl] ## MOD Description: Pozwala odebrac wybranej grupie osobne uprawnienia do pisania, glosowania i odpowiadania. Dziala rowniez w przypadku, kiedy subforum nie jest prywatne. Grupy z ograniczeniami nie mozna samodzielnie opuscic. ## Installation Level: Easy ## Installation Time: 5-10 Minutes ## ## Files To Edit: 6 ## includes/constants.php ## language/[your_language]/lang_main.php ## admin/admin_ug_auth.php ## admin/admin_groups.php ## posting.php ## groupcp.php ## ########################################################################################################################### # #-----[ SQL ]-------------------------------- # CREATE TABLE `phpbb_group_access` ( `group_id` mediumint(8) NOT NULL, `forum_id` smallint(5) unsigned NOT NULL default '0', `no_post` tinyint(1) NOT NULL default '0', `no_reply` tinyint(1) NOT NULL default '0', `no_vote` tinyint(1) NOT NULL default '0', PRIMARY KEY (`group_id`,`forum_id`) ); # #-----[ OPEN ]-------------------------------- # includes/constants.php # #-----[ FIND ]-------------------------------- # define('AUTH_ACCESS_TABLE', $table_prefix.'auth_access'); # #-----[ AFTER, ADD ]-------------------------------- # define('GROUP_ACCESS_TABLE', $table_prefix.'group_access'); # #-----[ OPEN ]-------------------------------- # language/[your_language]/lang_main.php # #-----[ FIND ]-------------------------------- # // // That's all, Folks! // ------------------------------------------------- # #-----[ BEFORE, ADD ]-------------------------------- # $lang['Access denied'] = 'Dostêp zabroniony'; # #-----[ OPEN ]-------------------------------- # admin/admin_ug_auth.php # #-----[ FIND ]-------------------------------- # $l_auth_return = ( $mode == 'user' ) ? $lang['Click_return_userauth'] : $lang['Click_return_groupauth']; $message = $lang['Auth_updated'] . '

' . sprintf($l_auth_return, '', '') . '

' . sprintf($lang['Click_return_admin_index'], '', ''); # #-----[ BEFORE, ADD ]-------------------------------- # ////////// GROUP ACCESS $group_access_nopost = isset($HTTP_POST_VARS) ? $HTTP_POST_VARS['group_access_nopost'] : $_POST['group_access_nopost']; $group_access_novote = isset($HTTP_POST_VARS) ? $HTTP_POST_VARS['group_access_novote'] : $_POST['group_access_novote']; $group_access_noreply = isset($HTTP_POST_VARS) ? $HTTP_POST_VARS['group_access_noreply'] : $_POST['group_access_noreply']; $sql = "SELECT forum_id, no_post, no_reply, no_vote FROM " . GROUP_ACCESS_TABLE . " WHERE group_id = $group_id"; $result = $db->sql_query($sql); $group_access_forums = array(); while($group_access_row = $db->sql_fetchrow($result)) { $group_access_forums[$group_access_row['forum_id']] = 1; } $db->sql_freeresult($result); foreach($forum_access as $group_access_f) { if ($group_access_forums[$group_access_f['forum_id']]) { $sql = "UPDATE " . GROUP_ACCESS_TABLE . " SET no_post = " . ($group_access_nopost ? '1' : '0') . ", no_reply = " . (isset($group_access_noreply) && in_array($group_access_f['forum_id'], $group_access_noreply) ? '1' : '0') . ", no_vote = " . ($group_access_novote ? '1' : '0') . " WHERE group_id = $group_id AND forum_id = " . $group_access_f['forum_id']; } else $sql = "INSERT INTO " . GROUP_ACCESS_TABLE . " (group_id, forum_id, no_post, no_reply, no_vote) VALUES ($group_id, " . $group_access_f['forum_id'] . ", " . ($group_access_nopost ? '1' : '0') . ", " . (isset($group_access_noreply) && in_array($group_access_f['forum_id'], $group_access_noreply) ? '1' : '0') . ", " . ($group_access_novote ? '1' : '0') . ")"; $db->sql_query($sql); } ////////// # #-----[ FIND ]-------------------------------- # $template->assign_block_vars("switch_group_auth", array()); # #-----[ AFTER, ADD ]-------------------------------- # ////////// GROUP ACCESS $sql = "SELECT forum_id, no_post, no_reply, no_vote FROM " . GROUP_ACCESS_TABLE . " WHERE group_id = $group_id"; $result = $db->sql_query($sql); $group_access = ''; $group_access_no = array(); while($group_access_row = $db->sql_fetchrow($result)) { if ($group_access_row['no_post']) $group_access_no['post'][$group_access_row['forum_id']] = 1; if ($group_access_row['no_reply']) $group_access_no['reply'][$group_access_row['forum_id']] = 1; if ($group_access_row['no_vote']) $group_access_no['vote'][$group_access_row['forum_id']] = 1; } $db->sql_freeresult($result); for ($group_access_i = 0, $group_access_forums = ''; $group_access_i < count($forum_access); $group_access_i++) { $group_access_forums .= ''; } $group_access = '

' . $lang['Lock'] . '

' . $lang['Post'] . '

' . $lang['Vote'] . '
' . $lang['Reply'] . ':
'; $t_usergroup_list .= $group_access; ////////// # #-----[ OPEN ]-------------------------------- # admin/admin_groups.php # #-----[ FIND ]-------------------------------- # $message = $lang['Deleted_group'] . '

' . sprintf($lang['Click_return_groupsadmin'], '', '') . '

' . sprintf($lang['Click_return_admin_index'], '', ''); # #-----[ BEFORE, ADD ]-------------------------------- # ////////// GROUP ACCESS $sql = "DELETE FROM " . GROUP_ACCESS_TABLE . " WHERE group_id = " . $group_id; $db->sql_query($sql); ////////// # #-----[ OPEN ]-------------------------------- # posting.php # #-----[ FIND ]-------------------------------- # // // What auth type do we need to check? // # #-----[ BEFORE, ADD ]-------------------------------- # ////////// GROUP ACCESS if ($userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD) { if ($topic_id) { $sql = "SELECT ga.no_post, ga.no_reply, ga.no_vote FROM " . GROUP_ACCESS_TABLE . " AS ga, " . USER_GROUP_TABLE . " AS ug, " . TOPICS_TABLE . " AS t WHERE ga.group_id = ug.group_id AND ga.forum_id = t.forum_id AND t.topic_id = " . intval($topic_id) . " AND ug.user_id = " . $userdata['user_id']; } else if ($post_id) { $sql = "SELECT ga.no_post, ga.no_reply, ga.no_vote FROM " . GROUP_ACCESS_TABLE . " AS ga, " . USER_GROUP_TABLE . " AS ug, " . POSTS_TABLE . " AS p WHERE ga.group_id = ug.group_id AND ga.forum_id = p.forum_id AND p.post_id = " . intval($post_id) . " AND ug.user_id = " . $userdata['user_id']; } else { $sql = "SELECT ga.no_post, ga.no_reply, ga.no_vote FROM " . GROUP_ACCESS_TABLE . " AS ga, " . USER_GROUP_TABLE . " AS ug, " . FORUMS_TABLE . " AS f WHERE ga.group_id = ug.group_id AND ga.forum_id = f.forum_id AND f.forum_id = " . intval($forum_id) . " AND ug.user_id = " . $userdata['user_id']; } $result = $db->sql_query($sql); while( $group_access_row = $db->sql_fetchrow($result) ) { switch( $mode ) { case 'newtopic': if ($group_access_row['no_post']) message_die(GENERAL_MESSAGE, $lang['Access denied']); break; case 'reply': case 'quote': if ($group_access_row['no_reply']) message_die(GENERAL_MESSAGE, $lang['Access denied']); break; case 'vote': if ($group_access_row['no_vote']) message_die(GENERAL_MESSAGE, $lang['Access denied']); break; } } $db->sql_freeresult($result); } ////////// # #-----[ OPEN ]-------------------------------- # groupcp.php # #-----[ FIND ]-------------------------------- # // // Second, unsubscribing from a group // Check for confirmation of unsub. // # #-----[ BEFORE, ADD ]-------------------------------- # ////////// GROUP ACCESS if ($userdata['user_level'] != ADMIN && $userdata['user_level'] != MOD) { $sql = "SELECT no_post, no_reply, no_vote FROM " . GROUP_ACCESS_TABLE . " WHERE group_id = " . intval($group_id); $result = $db->sql_query($sql); while( $group_access_row = $db->sql_fetchrow($result) ) { if ($group_access_row['no_post'] || $group_access_row['no_reply'] || $group_access_row['no_vote']) message_die(GENERAL_MESSAGE, $lang['Access denied']); } $db->sql_freeresult($result); } ////////// # #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ # # EoM