Исправление даты вступления модератора в группу ALTER TABLE `bb_groups` ADD `group_time` INT( 11 ) NOT NULL DEFAULT '0' AFTER `group_id`; git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@369 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293
This commit is contained in:
nanosimbiot 2012-02-11 05:10:55 +00:00
commit 4235ca8446
9 changed files with 188 additions and 16 deletions

View file

@ -862,6 +862,7 @@ INSERT INTO `bb_forums` VALUES (1, 1, 'Ваш первый форум', 'Опи
CREATE TABLE `bb_groups` (
`group_id` mediumint(8) NOT NULL auto_increment,
`group_time` int(11) NOT NULL default '0',
`group_type` tinyint(4) NOT NULL default '1',
`group_name` varchar(40) NOT NULL default '',
`group_description` varchar(255) NOT NULL default '',

View file

@ -129,6 +129,7 @@ else if (!empty($_POST['group_update']))
{
// Create user_group for new group's moderator
add_user_into_group($group_id, $group_moderator);
$sql_ary['group_time'] = TIMENOW;
// Delete old moderator's user_group
if (isset($_POST['delete_old_moderator']))
@ -150,6 +151,7 @@ else if (!empty($_POST['group_update']))
}
else if ($mode == 'newgroup')
{
$sql_ary['group_time'] = TIMENOW;
$sql_args = DB()->build_array('INSERT', $sql_ary);
// Create new group

View file

@ -46,6 +46,10 @@ switch ($ajax->action)
case 'manage_user':
require(INC_DIR .'functions_admin.php');
break;
case 'group_membership':
require(INC_DIR .'functions_group.php');
break;
}
// position in $ajax->valid_actions['xxx']
@ -72,6 +76,7 @@ class ajax_common
'change_tor_status' => array('mod'),
'mod_action' => array('mod'),
'topic_tpl' => array('mod'),
'group_membership' => array('mod'),
'gen_passkey' => array('user'),
'change_torrent' => array('user'),
@ -82,8 +87,8 @@ class ajax_common
'user_register' => array('guest'),
'posts' => array('guest'),
'birthday_list' => array('guest'),
'get_forum_mods' => array('guest'),
'get_forum_mods' => array('guest'),
);
var $action = null;
@ -456,6 +461,75 @@ class ajax_common
$datastore->rm('moderators');
}
// User groups membership
function group_membership ()
{
global $user;
if (!$user_id = intval($this->request['user_id']) OR !$profiledata = get_userdata($user_id))
{
$this->ajax_die("invalid user_id: $user_id");
}
if (!$mode = (string) $this->request['mode'])
{
$this->ajax_die('invalid mode (empty)');
}
switch ($mode)
{
case 'get_group_list':
$sql = "
SELECT ug.user_pending, g.group_id, g.group_type, g.group_name, g.group_moderator, self.user_id AS can_view
FROM ". BB_USER_GROUP ." ug
INNER JOIN ". BB_GROUPS ." g ON(g.group_id = ug.group_id AND g.group_single_user = 0)
LEFT JOIN ". BB_USER_GROUP ." self ON(self.group_id = g.group_id AND self.user_id = {$user->id} AND self.user_pending = 0)
WHERE ug.user_id = $user_id
ORDER BY g.group_name
";
$html = array();
foreach (DB()->fetch_rowset($sql) as $row)
{
$class = ($row['user_pending']) ? 'med' : 'med bold';
$class .= ($row['group_moderator'] == $user_id) ? ' colorMod' : '';
$href = "groupcp.php?g={$row['group_id']}";
if (IS_ADMIN)
{
$href .= "&u=$user_id";
$link = '<a href="'. $href .'" class="'. $class .'" target="_blank">'. htmlCHR($row['group_name']) .'</a>';
$html[] = $link;
}
else
{
// скрытая группа и сам юзер не является её членом
if ($row['group_type'] == GROUP_HIDDEN && !$row['can_view'])
{
continue;
}
if ($row['group_moderator'] == $user->id)
{
$class .= ' selfMod';
$href .= "&amp;u=$user_id"; // сам юзер модератор этой группы
}
$link = '<a href="'. $href .'" class="'. $class .'" target="_blank">'. htmlCHR($row['group_name']) .'</a>';
$html[] = $link;
}
}
if ($html)
{
$this->response['group_list_html'] = '<ul><li>'. join('</li><li>', $html) .'</li></ul>';
}
else
{
$this->response['group_list_html'] = 'не член, либо у вас нет прав на просмотр скрытых групп';
}
break;
default:
$this->ajax_die("invalid mode: $mode");
}
}
function view_post ()
{
require(AJAX_DIR .'view_post.php');

View file

@ -53,8 +53,8 @@ $bb_cfg = $tr_cfg = $page_cfg = array();
// Increase number of revision after update
$bb_cfg['tp_version'] = '2.4 (beta)';
$bb_cfg['tp_release_state'] = 'R367';
$bb_cfg['tp_release_date'] = '10-02-2012';
$bb_cfg['tp_release_state'] = 'R369';
$bb_cfg['tp_release_date'] = '11-02-2012';
// Database
$charset = 'utf8';

View file

@ -16,8 +16,8 @@ function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$
global $lang, $images, $bb_cfg;
$from = ( !empty($row['user_from']) ) ? $row['user_from'] : '';
$joined = bb_date($row['user_regdate'], $lang['DATE_FORMAT']);
$user_time = ( !empty($row['user_time']) ) ? bb_date($row['user_time'], $lang['DATE_FORMAT']) : $lang['NO'];
$joined = bb_date($row['user_regdate']);
$user_time = ( !empty($row['user_time']) ) ? bb_date($row['user_time']) : $lang['NO'];
$posts = ( $row['user_posts'] ) ? $row['user_posts'] : 0;
$pm = ($bb_cfg['text_buttons']) ? '<a class="txtb" href="'. append_sid("privmsg.php?mode=post&amp;". POST_USERS_URL ."=".$row['user_id']) .'">'. $lang['SEND_PM_TXTB'] .'</a>' : '<a href="' . append_sid("privmsg.php?mode=post&amp;". POST_USERS_URL ."=".$row['user_id']) .'"><img src="' . $images['icon_pm'] . '" alt="' . $lang['SEND_PRIVATE_MESSAGE'] . '" title="' . $lang['SEND_PRIVATE_MESSAGE'] . '" border="0" /></a>';
@ -175,7 +175,9 @@ if (!$group_id)
}
else
{
bb_die($lang['NO_GROUPS_EXIST']);
if(IS_ADMIN)
{ redirect('admin/admin_groups.php'); }
else bb_die($lang['NO_GROUPS_EXIST']);
}
}
else if (!empty($_POST['groupstatus']))
@ -554,7 +556,7 @@ else
'MOD_PM' => $pm,
'MOD_EMAIL' => $email,
'MOD_WWW' => $www,
'MOD_TIME' => $user_time,
'MOD_TIME' => ( !empty($group_info['group_time']) ) ? bb_date($group_info['group_time']) : $lang['NO'],
'U_SEARCH_USER' => "search.php?mode=searchuser",
'GROUP_TYPE' => $group_type,
'S_GROUP_OPEN_TYPE' => GROUP_OPEN,

View file

@ -12,6 +12,13 @@ if (IS_ADMIN)
{
require(LANG_ROOT_DIR ."lang_{$userdata['user_lang']}/lang_admin.php");
$bb_cfg['require_activation'] = false;
$new_user = (int) request_var('admin', '');
if($new_user) $gen_simple_header = true;
$template->assign_vars(array(
'NEW_USER' => $new_user,
));
}
$can_register = (IS_GUEST || IS_ADMIN);

View file

@ -100,7 +100,7 @@ $template->assign_vars(array(
'USERNAME' => $profiledata['username'],
'PROFILE_USER_ID' => $profiledata['user_id'],
'USER_REGDATE' => bb_date($profiledata['user_regdate'], 'Y-m-d H:i', 'false'),
'POSTER_RANK' => $poster_rank,
'POSTER_RANK' => ($poster_rank) ? $poster_rank : 'User',
'RANK_IMAGE' => $rank_image,
'RANK_SELECT' => $rank_select,
'POSTS' => $profiledata['user_posts'],
@ -132,8 +132,57 @@ $template->assign_vars(array(
'S_PROFILE_ACTION' => "profile.php",
'SIGNATURE' => $signature,
'SHOW_ROLE' => (IS_AM || $profile_user_id || $profiledata['user_active']),
'GROUP_MEMBERSHIP' => false,
));
if (IS_ADMIN)
{
$group_membership = array();
$sql = "
SELECT COUNT(g.group_id) AS groups_cnt, g.group_single_user, ug.user_pending
FROM ". BB_USER_GROUP ." ug
LEFT JOIN ". BB_GROUPS ." g USING(group_id)
WHERE ug.user_id = {$profiledata['user_id']}
GROUP BY ug.user_id, g.group_single_user, ug.user_pending
ORDER BY NULL
";
if ($rowset = DB()->fetch_rowset($sql))
{
$member = $pending = $single = 0;
foreach ($rowset as $row)
{
if (!$row['group_single_user'] && !$row['user_pending'])
{
$member = $row['groups_cnt'];
}
else if (!$row['group_single_user'] && $row['user_pending'])
{
$pending = $row['groups_cnt'];
}
else if ($row['group_single_user'])
{
$single = $row['groups_cnt'];
}
}
if ($member) $group_membership[] = "участник: <b>$member</b>";
if ($pending) $group_membership[] = "кандидат: <b>$pending</b>";
if ($single) $group_membership[] = "имеет индивидуальные права";
$group_membership = join(', ', $group_membership);
}
$template->assign_vars(array(
'GROUP_MEMBERSHIP' => (bool) $group_membership,
'GROUP_MEMBERSHIP_TXT' => $group_membership,
));
}
else if (IS_MOD)
{
$template->assign_vars(array(
'SHOW_GROUP_MEMBERSHIP' => ($profiledata['user_level'] != USER),
));
}
if (!bf($profiledata['user_opt'], 'user_opt', 'allow_dls') || (IS_AM || $profile_user_id))
{
// Show users torrent-profile

View file

@ -154,7 +154,7 @@
<!-- BEGIN switch_no_members -->
<tr>
<td colspan="10" class="row1 tCenter">{L_NO_GROUP_MEMBERS}</td>
<td colspan="10" class="row1 tCenter pad_10">{L_NO_GROUP_MEMBERS}</td>
</tr>
<!-- END switch_no_members -->

View file

@ -110,11 +110,29 @@ ajax.mod_action = function(mode) {
});
}
ajax.callback.mod_action = function(data) {
$('#ip_list').html(data.ip_list_html);
$('#ip_list').toggle().html(data.ip_list_html);
}
</script>
<script type="text/javascript">
ajax.group_membership = function(mode) {
$('#gr-mem-list').html('<i class="loading-1">загружается...</i>');
ajax.exec({
action : 'group_membership',
mode : mode,
user_id : {PROFILE_USER_ID}
});
}
ajax.callback.group_membership = function(data) {
$('#gr-mem-list').html(data.group_list_html);
}
</script>
<!-- ENDIF / IS_AM -->
<style type="text/css">
#gr-mem-list ul { margin: 2px 4px; }
#gr-mem-list li { margin-bottom: 2px; }
a.selfMod, a.selfMod:visited { color: #0000FF; }
</style>
<!-- ENDIF / IS_AM -->
<a name="editprofile"></a>
<h1 class="pagetitle">{L_VIEWING_PROFILE}</h1>
@ -145,7 +163,7 @@ ajax.callback.mod_action = function(data) {
</script>
<div id="rank-msg" class="mrg_6"></div>
<!-- ELSE IF POSTER_RANK -->
{POSTER_RANK}
{RANK_IMAGE}
<!-- ENDIF -->
</p>
<h4 class="cat border bw_TB" id="username">{L_CONTACT} <span class="editable bold">{USERNAME}</span></h4>
@ -205,6 +223,25 @@ ajax.callback.mod_action = function(data) {
<!-- ENDIF -->
<table class="user_details borderless w100">
<!-- IF SHOW_ROLE -->
<tr>
<th>Роль:</th>
<td id="role">
<b>{POSTER_RANK}</b>
<!-- IF GROUP_MEMBERSHIP and IS_MOD -->
<span id="gr-mod-a">[ <a href="#" class="med" onclick="ajax.group_membership('get_group_list'); $('#gr-mem-tr').show(); $('#gr-mod-a').hide(); return false;">членство в группах</a> ]</span>
<!-- ENDIF -->
</td>
</tr>
<!-- ENDIF -->
<!-- IF GROUP_MEMBERSHIP -->
<tr id="gr-mem-tr"<!-- IF IS_MOD --> style="display: none;"<!-- ENDIF -->>
<th>Членство в группах:</th>
<td id="gr-mem-list">
<!-- IF IS_ADMIN --><a href="#" class="med" onclick="ajax.group_membership('get_group_list'); return false;">{GROUP_MEMBERSHIP_TXT}</a><!-- ENDIF -->
</td>
</tr>
<!-- ENDIF -->
<tr>
<th>{L_JOINED}:</th>
<td id="user_regdate">
@ -308,11 +345,11 @@ ajax.callback.mod_action = function(data) {
<th>{L_ACCESS}:</th>
<td id="ignore_srv_load">{L_ACCESS_SRV_LOAD}: <b class="editable">{IGNORE_SRV_LOAD}</b></td>
</tr>
<!-- ENDIF -->
<!-- ENDIF -->
</table><!--/user_details-->
<!-- IF IS_AM --><span id="ip_list"></span><!-- ENDIF -->
</td>
</tr>
<!-- IF SIGNATURE -->
@ -411,7 +448,7 @@ ajax.callback.mod_action = function(data) {
</td>
</tr>
<tr>
<th colspan="4" class="thHead">{L_CUR_ACTIVE_DLS}</th>
</tr>