say hello to role descriptions, role ordering and tooltips on role selects

git-svn-id: file:///svn/phpbb/trunk@5791 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Meik Sievertsen 2006-04-17 22:36:43 +00:00
parent a0f8e1323a
commit 8d456a0fd7
20 changed files with 369 additions and 33 deletions

View file

@ -66,6 +66,10 @@
<dt><label for="role_name">{L_ROLE_NAME}:</label></dt> <dt><label for="role_name">{L_ROLE_NAME}:</label></dt>
<dd><input name="role_name" type="text" id="role_name" value="{ROLE_NAME}" /></dd> <dd><input name="role_name" type="text" id="role_name" value="{ROLE_NAME}" /></dd>
</dl> </dl>
<dl>
<dt><label for="role_description">{L_ROLE_DESCRIPTION}:</label><br /><span>{L_ROLE_DESCRIPTION_EXPLAIN}</span></dt>
<dd><textarea id="role_description" name="role_description" rows="3" cols="45">{ROLE_DESCRIPTION}</textarea></dd>
</dl>
<dl> <dl>
<dt><label for="pre_select">{L_DISPLAY_FOR_GROUP}:</label><br /><span>{L_DISPLAY_FOR_GROUP_EXPLAIN}</span></dt> <dt><label for="pre_select">{L_DISPLAY_FOR_GROUP}:</label><br /><span>{L_DISPLAY_FOR_GROUP_EXPLAIN}</span></dt>
<dd><select name="pre_select" id="pre_select" onchange="if(this.value=='custom'){dE('custom_group',1);}else{dE('custom_group',-1);}">{S_PRESELECT_OPTIONS}</select></dd> <dd><select name="pre_select" id="pre_select" onchange="if(this.value=='custom'){dE('custom_group',1);}else{dE('custom_group',-1);}">{S_PRESELECT_OPTIONS}</select></dd>
@ -177,13 +181,15 @@
<tr> <tr>
<th style="width: 50%">{L_ROLE_NAME}</th> <th style="width: 50%">{L_ROLE_NAME}</th>
<th>{L_DISPLAY_FOR_GROUP}</th> <th>{L_DISPLAY_FOR_GROUP}</th>
<th colspan="3">{L_OPTIONS}</th> <th colspan="2">{L_OPTIONS}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- BEGIN roles --> <!-- BEGIN roles -->
<tr> <tr>
<td style="vertical-align: top;"><b>{roles.NAME}</b></td> <td style="vertical-align: top;"><b>{roles.ROLE_NAME}</b>
<!-- IF roles.ROLE_DESCRIPTION --><br /><span>{roles.ROLE_DESCRIPTION}</span><!-- ENDIF -->
</td>
<td style="vertical-align: top;"> <td style="vertical-align: top;">
<!-- IF roles.S_GROUP --> <!-- IF roles.S_GROUP -->
<!-- a href="{roles.groups.U_GROUP}">{roles.groups.GROUP_NAME}</a><br / --> <!-- a href="{roles.groups.U_GROUP}">{roles.groups.GROUP_NAME}</a><br / -->
@ -196,9 +202,13 @@
{L_EVERY_USER_GROUP} {L_EVERY_USER_GROUP}
<!-- ENDIF --> <!-- ENDIF -->
</td> </td>
<td style="vertical-align: top; white-space: nowrap;"><a href="{roles.U_EDIT}">{L_EDIT_ROLE}</a></td>
<td style="vertical-align: top; white-space: nowrap;"><!-- IF roles.U_DISPLAY_ITEMS --><a href="{roles.U_DISPLAY_ITEMS}">{L_VIEW_ASSIGNED_ITEMS}</a><!-- ELSE -->{L_VIEW_ASSIGNED_ITEMS}<!-- ENDIF --></td> <td style="vertical-align: top; white-space: nowrap;"><!-- IF roles.U_DISPLAY_ITEMS --><a href="{roles.U_DISPLAY_ITEMS}">{L_VIEW_ASSIGNED_ITEMS}</a><!-- ELSE -->{L_VIEW_ASSIGNED_ITEMS}<!-- ENDIF --></td>
<td style="vertical-align: top; white-space: nowrap;"><a href="{roles.U_REMOVE}">{L_REMOVE_ROLE}</a></td> <td style="vertical-align: top; white-space: nowrap;">
<!-- IF not roles.S_FIRST_ROW --><a href="{roles.U_MOVE_UP}"><img src="images/icon_up.gif" alt="{L_MOVE_UP}" title="{L_MOVE_UP}" width="16" height="16" /></a> <!-- ENDIF -->
<!-- IF not roles.S_LAST_ROW --><a href="{roles.U_MOVE_DOWN}"><img src="images/icon_down.gif" alt="{L_MOVE_DOWN}" title="{L_MOVE_DOWN}" width="16" height="16" /></a> <!-- ENDIF -->
<a href="{roles.U_EDIT}"><img src="images/icon_edit.gif" alt="{L_EDIT_ROLE}" title="{L_EDIT_ROLE}" width="16" height="16" /></a>
<a href="{roles.U_REMOVE}"><img src="images/icon_delete.gif" alt="{L_REMOVE_ROLE}" title="{L_REMOVE_ROLE}" width="16" height="16" /></a>
</td>
</tr> </tr>
<!-- END roles --> <!-- END roles -->
</tbody> </tbody>

View file

@ -343,6 +343,14 @@
<br /><br /> <br /><br />
<!-- include tooltip file -->
<script type="text/javascript" src="style/tooltip.js"></script>
<script type="text/javascript">
<!--
window.onload = function(){enable_tooltips_select('set_permissions', 'Role Description', 'role')};
//-->
</script>
<form id="set_permissions" method="post" action="{U_ACTION}"> <form id="set_permissions" method="post" action="{U_ACTION}">
{S_HIDDEN_FIELDS} {S_HIDDEN_FIELDS}

View file

@ -871,6 +871,22 @@ table.pmask td.name {
color: #333333; color: #333333;
} }
.tooltip {
width: 200px;
color: #000;
text-align: center;
}
.tooltip span.top {
background: #EFEFEF;
font-weight: bold;
}
.tooltip span.bottom {
padding: 5px;
color: #000;
background: #fff;
}
/* /*
Format Buttons for signature editor Format Buttons for signature editor

View file

@ -156,7 +156,7 @@
&nbsp; &nbsp;
<!-- ELSE --> <!-- ELSE -->
<!-- IF p_mask.f_mask.S_ROLE_OPTIONS --> <!-- IF p_mask.f_mask.S_ROLE_OPTIONS -->
<b>{L_ROLE}:</b>&nbsp; &nbsp;<select id="role{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}" name="role[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" onchange="set_role_settings(this.options[selectedIndex].value, 'a_options{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}')">{p_mask.f_mask.S_ROLE_OPTIONS}</select> <b>{L_ROLE}:</b>&nbsp; &nbsp;<select id="role{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}" name="role[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" onchange="set_role_settings(this.options[selectedIndex].value, 'a_options{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}')"><option value="-2" title="testing">testing</option>{p_mask.f_mask.S_ROLE_OPTIONS}</select>
<!-- ELSE --> <!-- ELSE -->
<b>{L_ROLE}:</b> {L_NO_ROLE_AVAILABLE} <b>{L_ROLE}:</b> {L_NO_ROLE_AVAILABLE}
<!-- ENDIF --> <!-- ENDIF -->

223
phpBB/adm/style/tooltip.js Normal file
View file

@ -0,0 +1,223 @@
/*
javascript for Bubble Tooltips by Alessandro Fulciniti
- http://pro.html.it - http://web-graphics.com
obtained from: http://web-graphics.com/mtarchive/001717.php
phpBB Development Team:
- modified to adhere to our coding guidelines
- integration into our design
- added ability to perform tooltips on select elements
- further adjustements
*/
var head_text, tooltip_mode;
/**
* Enable tooltip replacements for links
*/
function enable_tooltips_link(id, headline, sub_id)
{
var links, i, hold;
head_text = headline;
if (!document.getElementById || !document.getElementsByTagName)
{
return;
}
hold = document.createElement('span');
hold.id = '_tooltip_container';
hold.setAttribute('id', '_tooltip_container');
hold.style.position = 'absolute';
document.getElementsByTagName('body')[0].appendChild(hold);
if (id == null)
{
links = document.getElementsByTagName('a');
}
else
{
links = document.getElementById(id).getElementsByTagName('a');
}
for (i = 0; i < links.length; i++)
{
if (sub_id)
{
if (links[i].id.substr(0, sub_id.length) == sub_id)
{
prepare(links[i]);
}
}
else
{
prepare(links[i]);
}
}
tooltip_mode = 'link';
}
function enable_tooltips_select(id, headline, sub_id)
{
var links, i, hold;
head_text = headline;
if (!document.getElementById || !document.getElementsByTagName)
{
return;
}
hold = document.createElement('span');
hold.id = '_tooltip_container';
hold.setAttribute('id', '_tooltip_container');
hold.style.position = 'absolute';
document.getElementsByTagName('body')[0].appendChild(hold);
if (id == null)
{
links = document.getElementsByTagName('option');
}
else
{
links = document.getElementById(id).getElementsByTagName('option');
}
for (i = 0; i < links.length; i++)
{
if (sub_id)
{
if (links[i].parentNode.id.substr(0, sub_id.length) == sub_id)
{
prepare(links[i]);
}
}
else
{
prepare(links[i]);
}
}
tooltip_mode = 'select';
}
function prepare(element)
{
var tooltip, text, desc, title;
text = element.getAttribute('title');
if (text == null || text.length == 0)
{
return;
}
element.removeAttribute('title');
tooltip = create_element('span', 'tooltip');
title = create_element('span', 'top');
title.appendChild(document.createTextNode(head_text));
tooltip.appendChild(title);
desc = create_element('span', 'bottom');
desc.innerHTML = text;
tooltip.appendChild(desc);
set_opacity(tooltip);
element.tooltip = tooltip;
element.onmouseover = show_tooltip;
element.onmouseout = hide_tooltip;
}
function show_tooltip(e)
{
document.getElementById('_tooltip_container').appendChild(this.tooltip);
locate(this);
}
function hide_tooltip(e)
{
var d = document.getElementById('_tooltip_container');
if (d.childNodes.length > 0)
{
d.removeChild(d.firstChild);
}
}
function set_opacity(element)
{
element.style.filter = 'alpha(opacity:95)';
element.style.KHTMLOpacity = '0.95';
element.style.MozOpacity = '0.95';
element.style.opacity = '0.95';
}
function create_element(tag, c)
{
var x = document.createElement(tag);
x.className = c;
x.style.display = 'block';
return x;
}
function locate(e)
{
var posx = 0;
var posy = 0;
if (tooltip_mode == 'link')
{
if (e == null)
{
e = window.event;
}
if (e.pageX || e.pageY)
{
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY)
{
if (document.documentElement.scrollTop)
{
posx = e.clientX+document.documentElement.scrollLeft;
posy = e.clientY+document.documentElement.scrollTop;
}
else
{
posx = e.clientX+document.body.scrollLeft;
posy = e.clientY+document.body.scrollTop;
}
}
document.getElementById('_tooltip_container').style.top=(posy+10) + 'px';
document.getElementById('_tooltip_container').style.left=(posx-20) + 'px';
}
else
{
e = e.parentNode;
if (e.offsetParent)
{
for (var posx = 0, posy = 0; e.offsetParent; e = e.offsetParent)
{
posx += e.offsetLeft;
posy += e.offsetTop;
}
}
else
{
posx = e.offsetLeft;
posy = e.offsetTop;
}
document.getElementById('_tooltip_container').style.top=(posy+30) + 'px';
document.getElementById('_tooltip_container').style.left=(posx-205) + 'px';
}
}

View file

@ -150,6 +150,7 @@ class acp_permission_roles
case 'add': case 'add':
$role_name = request_var('role_name', '', true); $role_name = request_var('role_name', '', true);
$role_description = request_var('role_description', '', true);
$role_group_ids = request_var('role_group_ids', array(0)); $role_group_ids = request_var('role_group_ids', array(0));
$pre_select = request_var('pre_select', 'custom'); $pre_select = request_var('pre_select', 'custom');
$auth_settings = request_var('setting', array('' => 0)); $auth_settings = request_var('setting', array('' => 0));
@ -275,6 +276,7 @@ class acp_permission_roles
$sql_ary = array( $sql_ary = array(
'role_name' => (string) $role_name, 'role_name' => (string) $role_name,
'role_description' => (string) $role_description,
'role_type' => (string) $permission_type, 'role_type' => (string) $permission_type,
'role_group_ids' => (string) implode(':', $role_group_ids), 'role_group_ids' => (string) implode(':', $role_group_ids),
); );
@ -288,6 +290,16 @@ class acp_permission_roles
} }
else else
{ {
// Get maximum role order for inserting a new role...
$sql = 'SELECT MAX(role_order) as max_order
FROM ' . ACL_ROLES_TABLE . "
WHERE role_type = '" . $db->sql_escape($permission_type) . "'";
$result = $db->sql_query($sql);
$max_order = (int) $db->sql_fetchfield('max_order');
$db->sql_freeresult($result);
$sql_ary['role_order'] = $max_order + 1;
$sql = 'INSERT INTO ' . ACL_ROLES_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary); $sql = 'INSERT INTO ' . ACL_ROLES_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql); $db->sql_query($sql);
@ -302,6 +314,7 @@ class acp_permission_roles
trigger_error($user->lang['ROLE_' . strtoupper($action) . '_SUCCESS'] . adm_back_link($this->u_action)); trigger_error($user->lang['ROLE_' . strtoupper($action) . '_SUCCESS'] . adm_back_link($this->u_action));
break; break;
} }
} }
@ -314,6 +327,7 @@ class acp_permission_roles
$role_row = array( $role_row = array(
'role_name' => request_var('role_name', '', true), 'role_name' => request_var('role_name', '', true),
'role_description' => request_var('role_description', '', true),
'role_type' => $permission_type, 'role_type' => $permission_type,
'role_group_ids' => implode(':', request_var('role_group_ids', array(0))), 'role_group_ids' => implode(':', request_var('role_group_ids', array(0))),
); );
@ -400,6 +414,7 @@ class acp_permission_roles
'U_BACK' => $this->u_action, 'U_BACK' => $this->u_action,
'ROLE_NAME' => $role_row['role_name'], 'ROLE_NAME' => $role_row['role_name'],
'ROLE_DESCRIPTION' => $role_row['role_description'],
'L_ACL_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)], 'L_ACL_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
) )
); );
@ -445,13 +460,49 @@ class acp_permission_roles
return; return;
break; break;
case 'move_up':
case 'move_down':
$order = request_var('order', 0);
$order_total = $order * 2 + (($action == 'move_up') ? -1 : 1);
$sql = 'UPDATE ' . ACL_ROLES_TABLE . '
SET role_order = ' . $order_total . " - role_order
WHERE role_type = '" . $db->sql_escape($permission_type) . "'
AND role_order IN ($order, " . (($action == 'move_up') ? $order - 1 : $order + 1) . ')';
$db->sql_query($sql);
break;
} }
// By default, check that image_order is valid and fix it if necessary
$sql = 'SELECT role_id, role_order
FROM ' . ACL_ROLES_TABLE . "
WHERE role_type = '" . $db->sql_escape($permission_type) . "'
ORDER BY role_order";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
{
$order = 0;
do
{
$order++;
if ($row['role_order'] != $order)
{
$db->sql_query('UPDATE ' . ACL_ROLES_TABLE . " SET role_order = $order WHERE role_id = {$row['role_id']}");
}
}
while ($row = $db->sql_fetchrow($result));
}
$db->sql_freeresult($result);
// Select existing roles // Select existing roles
$sql = 'SELECT * $sql = 'SELECT *
FROM ' . ACL_ROLES_TABLE . " FROM ' . ACL_ROLES_TABLE . "
WHERE role_type = '" . $db->sql_escape($permission_type) . "' WHERE role_type = '" . $db->sql_escape($permission_type) . "'
ORDER BY role_name ASC"; ORDER BY role_order ASC";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$roles = $groups = $group_ids = $group_info = array(); $roles = $groups = $group_ids = $group_info = array();
@ -490,12 +541,15 @@ class acp_permission_roles
foreach ($roles as $row) foreach ($roles as $row)
{ {
$template->assign_block_vars('roles', array( $template->assign_block_vars('roles', array(
'NAME' => $row['role_name'], 'ROLE_NAME' => $row['role_name'],
'ROLE_DESCRIPTION' => nl2br($row['role_description']),
'S_GROUP' => ($row['role_group_ids']) ? true : false, 'S_GROUP' => ($row['role_group_ids']) ? true : false,
'U_EDIT' => $this->u_action . '&amp;action=edit&amp;role_id=' . $row['role_id'], 'U_EDIT' => $this->u_action . '&amp;action=edit&amp;role_id=' . $row['role_id'],
'U_REMOVE' => $this->u_action . '&amp;action=remove&amp;role_id=' . $row['role_id'], 'U_REMOVE' => $this->u_action . '&amp;action=remove&amp;role_id=' . $row['role_id'],
'U_MOVE_UP' => $this->u_action . '&amp;action=move_up&amp;order=' . $row['role_order'],
'U_MOVE_DOWN' => $this->u_action . '&amp;action=move_down&amp;order=' . $row['role_order'],
'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&amp;display_item=' . $row['role_id'] . '#assigned_to') 'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&amp;display_item=' . $row['role_id'] . '#assigned_to')
); );

View file

@ -285,7 +285,8 @@ class auth_admin extends auth
// Get available roles // Get available roles
$sql = 'SELECT * $sql = 'SELECT *
FROM ' . ACL_ROLES_TABLE . " FROM ' . ACL_ROLES_TABLE . "
WHERE role_type = '" . $db->sql_escape($permission_type) . "'"; WHERE role_type = '" . $db->sql_escape($permission_type) . "'
ORDER BY role_order ASC";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$roles = array(); $roles = array();
@ -413,7 +414,8 @@ class auth_admin extends auth
{ {
if ($role_id == $current_role_id || !sizeof($role_row['groups']) || ($user_mode == 'group' && in_array($ug_id, $role_row['groups']))) if ($role_id == $current_role_id || !sizeof($role_row['groups']) || ($user_mode == 'group' && in_array($ug_id, $role_row['groups'])))
{ {
$s_role_options .= '<option value="' . $role_id . '"' . (($role_id == $current_role_id) ? ' selected="selected"' : '') . '>' . $role_row['role_name'] . '</option>'; $title = ($role_row['role_description']) ? ' title="' . nl2br($role_row['role_description']) . '"' : '';
$s_role_options .= '<option value="' . $role_id . '"' . (($role_id == $current_role_id) ? ' selected="selected"' : '') . $title . '>' . $role_row['role_name'] . '</option>';
} }
} }

View file

@ -833,7 +833,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
'U_POST_ID' => $row['post_id'], 'U_POST_ID' => $row['post_id'],
'U_MINI_POST' => "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;p=" . $row['post_id'] . '#p' . $row['post_id'], 'U_MINI_POST' => "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;p=" . $row['post_id'] . '#p' . $row['post_id'],
'U_MCP_DETAILS' => ($auth->acl_get('m_', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;mode=post_details&amp;p=" . $row['post_id'] : '', 'U_MCP_DETAILS' => ($auth->acl_get('m_info', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;mode=post_details&amp;p=" . $row['post_id'] : '',
'U_QUOTE' => ($show_quote_button && $auth->acl_get('f_reply', $forum_id)) ? 'javascript:addquote(' . $row['post_id'] . ", '" . str_replace("'", "\\'", $poster) . "')" : '') 'U_QUOTE' => ($show_quote_button && $auth->acl_get('f_reply', $forum_id)) ? 'javascript:addquote(' . $row['post_id'] . ", '" . str_replace("'", "\\'", $poster) . "')" : '')
); );
unset($rowset[$i]); unset($rowset[$i]);

View file

@ -106,7 +106,7 @@ class mcp_queue
$template->assign_vars(array( $template->assign_vars(array(
'S_MCP_QUEUE' => true, 'S_MCP_QUEUE' => true,
'S_APPROVE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=queue&amp;p=$post_id&amp;f=$forum_id", 'S_APPROVE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=queue&amp;p=$post_id&amp;f=$forum_id",
'S_CAN_VIEWIP' => $auth->acl_get('m_ip', $post_info['forum_id']), 'S_CAN_VIEWIP' => $auth->acl_get('m_info', $post_info['forum_id']),
'S_POST_REPORTED' => $post_info['post_reported'], 'S_POST_REPORTED' => $post_info['post_reported'],
'S_POST_UNAPPROVED' => !$post_info['post_approved'], 'S_POST_UNAPPROVED' => !$post_info['post_approved'],
'S_POST_LOCKED' => $post_info['post_edit_locked'], 'S_POST_LOCKED' => $post_info['post_edit_locked'],

View file

@ -113,7 +113,7 @@ class mcp_reports
$template->assign_vars(array( $template->assign_vars(array(
'S_MCP_REPORT' => true, 'S_MCP_REPORT' => true,
'S_CLOSE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=reports&amp;p=$post_id&amp;f=$forum_id", 'S_CLOSE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=reports&amp;p=$post_id&amp;f=$forum_id",
'S_CAN_VIEWIP' => $auth->acl_get('m_ip', $post_info['forum_id']), 'S_CAN_VIEWIP' => $auth->acl_get('m_info', $post_info['forum_id']),
'S_POST_REPORTED' => $post_info['post_reported'], 'S_POST_REPORTED' => $post_info['post_reported'],
'S_POST_UNAPPROVED' => !$post_info['post_approved'], 'S_POST_UNAPPROVED' => !$post_info['post_approved'],
'S_POST_LOCKED' => $post_info['post_edit_locked'], 'S_POST_LOCKED' => $post_info['post_edit_locked'],

View file

@ -187,7 +187,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
'SIGNATURE' => ($message_row['enable_sig']) ? $signature : '', 'SIGNATURE' => ($message_row['enable_sig']) ? $signature : '',
'EDITED_MESSAGE' => $l_edited_by, 'EDITED_MESSAGE' => $l_edited_by,
'U_INFO' => ($auth->acl_get('m_') && $message_row['forwarded']) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;mode=pm_details&amp;p=" . $message_row['msg_id'] : '', 'U_INFO' => ($auth->acl_get('m_info') && $message_row['forwarded']) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;mode=pm_details&amp;p=" . $message_row['msg_id'] : '',
'U_DELETE' => ($auth->acl_get('u_pm_delete')) ? "$url&amp;mode=compose&amp;action=delete&amp;f=$folder_id&amp;p=" . $message_row['msg_id'] : '', 'U_DELETE' => ($auth->acl_get('u_pm_delete')) ? "$url&amp;mode=compose&amp;action=delete&amp;f=$folder_id&amp;p=" . $message_row['msg_id'] : '',
'U_AUTHOR_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $author_id, 'U_AUTHOR_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $author_id,
'U_EMAIL' => $user_info['email'], 'U_EMAIL' => $user_info['email'],

View file

@ -81,13 +81,16 @@ END;;
CREATE TABLE phpbb_auth_roles ( CREATE TABLE phpbb_auth_roles (
role_id INTEGER NOT NULL, role_id INTEGER NOT NULL,
role_name VARCHAR(255) NOT NULL, role_name VARCHAR(255) NOT NULL,
role_description BLOB SUB_TYPE TEXT,
role_type VARCHAR(10) NOT NULL, role_type VARCHAR(10) NOT NULL,
role_order INTEGER DEFAULT 0 NOT NULL,
role_group_ids VARCHAR(255) NOT NULL role_group_ids VARCHAR(255) NOT NULL
);; );;
ALTER TABLE phpbb_auth_roles ADD PRIMARY KEY (role_id);; ALTER TABLE phpbb_auth_roles ADD PRIMARY KEY (role_id);;
CREATE INDEX phpbb_auth_roles_role_type ON phpbb_auth_roles(role_type);; CREATE INDEX phpbb_auth_roles_role_type ON phpbb_auth_roles(role_type);;
CREATE INDEX phpbb_auth_roles_role_order ON phpbb_auth_roles(role_order);;
CREATE GENERATOR phpbb_auth_roles_gen;; CREATE GENERATOR phpbb_auth_roles_gen;;
SET GENERATOR phpbb_auth_roles_gen TO 0;; SET GENERATOR phpbb_auth_roles_gen TO 0;;

View file

@ -128,9 +128,11 @@ GO
CREATE TABLE [phpbb_auth_roles] ( CREATE TABLE [phpbb_auth_roles] (
[role_id] [int] IDENTITY (1, 1) NOT NULL , [role_id] [int] IDENTITY (1, 1) NOT NULL ,
[role_name] [varchar] (255) NOT NULL , [role_name] [varchar] (255) NOT NULL ,
[role_description] [text] ,
[role_type] [varchar] (10) NOT NULL , [role_type] [varchar] (10) NOT NULL ,
[role_order] [int] NOT NULL ,
[role_group_ids] [varchar] (255) NOT NULL [role_group_ids] [varchar] (255) NOT NULL
) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO GO
ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD
@ -141,12 +143,16 @@ ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD
GO GO
ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD
CONSTRAINT [DF_auth_p_role_role_order] DEFAULT(0) FOR [role_order],
CONSTRAINT [DF_auth_p_role_group_ids] DEFAULT ('') FOR [role_group_ids] CONSTRAINT [DF_auth_p_role_group_ids] DEFAULT ('') FOR [role_group_ids]
GO GO
CREATE INDEX [role_type] ON [phpbb_auth_roles]([role_type]) ON [PRIMARY] CREATE INDEX [role_type] ON [phpbb_auth_roles]([role_type]) ON [PRIMARY]
GO GO
CREATE INDEX [role_order] ON [phpbb_auth_roles]([role_order]) ON [PRIMARY]
GO
/* /*
Table: phpbb_auth_roles_data Table: phpbb_auth_roles_data

View file

@ -55,10 +55,13 @@ CREATE TABLE phpbb_auth_options (
CREATE TABLE phpbb_auth_roles ( CREATE TABLE phpbb_auth_roles (
role_id mediumint(8) UNSIGNED NOT NULL auto_increment, role_id mediumint(8) UNSIGNED NOT NULL auto_increment,
role_name varchar(255) DEFAULT '' NOT NULL, role_name varchar(255) DEFAULT '' NOT NULL,
role_description text,
role_type varchar(10) DEFAULT '' NOT NULL, role_type varchar(10) DEFAULT '' NOT NULL,
role_order smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
role_group_ids varchar(255) DEFAULT '' NOT NULL, role_group_ids varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (role_id), PRIMARY KEY (role_id),
KEY role_type (role_type) KEY role_type (role_type),
KEY role_order (role_order)
); );
# Table: 'phpbb_auth_roles_data' # Table: 'phpbb_auth_roles_data'

View file

@ -146,7 +146,9 @@ CREATE INDEX phpbb_auth_options_auth_option on phpbb_auth_options (auth_option)
CREATE TABLE phpbb_auth_roles ( CREATE TABLE phpbb_auth_roles (
role_id number(8) NOT NULL, role_id number(8) NOT NULL,
role_name varchar2(255) DEFAULT '', role_name varchar2(255) DEFAULT '',
role_description clob,
role_type varchar2(10) DEFAULT '', role_type varchar2(10) DEFAULT '',
role_order number(4) DEFAULT '0' NOT NULL,
role_group_ids varchar2(255) DEFAULT '' NOT NULL, role_group_ids varchar2(255) DEFAULT '' NOT NULL,
CONSTRAINT pk_phpbb_auth_roles PRIMARY KEY (role_id) CONSTRAINT pk_phpbb_auth_roles PRIMARY KEY (role_id)
) )
@ -170,6 +172,8 @@ END;
CREATE INDEX phpbb_auth_roles_role_type on phpbb_auth_roles (role_type) CREATE INDEX phpbb_auth_roles_role_type on phpbb_auth_roles (role_type)
/ /
CREATE INDEX phpbb_auth_roles_role_order on phpbb_auth_roles (role_order)
/
/* /*
Table: phpbb_auth_roles_data Table: phpbb_auth_roles_data

View file

@ -81,12 +81,15 @@ CREATE SEQUENCE phpbb_auth_roles_seq;
CREATE TABLE phpbb_auth_roles ( CREATE TABLE phpbb_auth_roles (
role_id INT4 DEFAULT nextval('phpbb_auth_roles_seq'), role_id INT4 DEFAULT nextval('phpbb_auth_roles_seq'),
role_name varchar(255) DEFAULT '' NOT NULL, role_name varchar(255) DEFAULT '' NOT NULL,
role_description TEXT,
role_type varchar(10) DEFAULT '' NOT NULL, role_type varchar(10) DEFAULT '' NOT NULL,
role_order INT4 DEFAULT '0' NOT NULL,
role_group_ids varchar(255) DEFAULT '' NOT NULL, role_group_ids varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (role_id) PRIMARY KEY (role_id)
); );
CREATE INDEX phpbb_auth_roles_role_type ON phpbb_auth_roles (role_type); CREATE INDEX phpbb_auth_roles_role_type ON phpbb_auth_roles (role_type);
CREATE INDEX phpbb_auth_roles_role_order ON phpbb_auth_roles (role_order);
SELECT SETVAL('phpbb_auth_roles_seq',(select case when max(role_id)>0 then max(role_id)+1 else 1 end from phpbb_auth_roles)); SELECT SETVAL('phpbb_auth_roles_seq',(select case when max(role_id)>0 then max(role_id)+1 else 1 end from phpbb_auth_roles));

View file

@ -61,11 +61,14 @@ CREATE INDEX phpbb_auth_options_auth_option on phpbb_auth_options (auth_option);
CREATE TABLE phpbb_auth_roles ( CREATE TABLE phpbb_auth_roles (
role_id INTEGER PRIMARY KEY NOT NULL, role_id INTEGER PRIMARY KEY NOT NULL,
role_name varchar(50) NOT NULL DEFAULT '', role_name varchar(50) NOT NULL DEFAULT '',
role_description text(65535),
role_type varchar(10) NOT NULL DEFAULT '', role_type varchar(10) NOT NULL DEFAULT '',
role_order mediumint(8) NOT NULL DEFAULT '0',
role_group_ids varchar(255) NOT NULL DEFAULT '' role_group_ids varchar(255) NOT NULL DEFAULT ''
); );
CREATE INDEX phpbb_auth_roles_role_type on phpbb_auth_roles (role_type); CREATE INDEX phpbb_auth_roles_role_type on phpbb_auth_roles (role_type);
CREATE INDEX phpbb_auth_roles_role_order on phpbb_auth_roles (role_order);
# Table: phpbb_auth_roles_data # Table: phpbb_auth_roles_data

View file

@ -131,6 +131,8 @@ $lang = array_merge($lang, array(
'ROLE_ADD_SUCCESS' => 'Role successfully added.', 'ROLE_ADD_SUCCESS' => 'Role successfully added.',
'ROLE_ASSIGNED_TO' => 'Users/Groups assigned to %s', 'ROLE_ASSIGNED_TO' => 'Users/Groups assigned to %s',
'ROLE_DELETED' => 'Role successfully removed.', 'ROLE_DELETED' => 'Role successfully removed.',
'ROLE_DESCRIPTION' => 'Role Description',
'ROLE_DESCRIPTION_EXPLAIN' => 'You are able to enter a short explanation of what the role is doing or for what it is meant for. The text you enter here will be displayed within the permissions screens too.',
'ROLE_DETAILS' => 'Role Details', 'ROLE_DETAILS' => 'Role Details',
'ROLE_EDIT_SUCCESS' => 'Role successfully edited.', 'ROLE_EDIT_SUCCESS' => 'Role successfully edited.',
'ROLE_NAME' => 'Role Name', 'ROLE_NAME' => 'Role Name',

View file

@ -1354,7 +1354,7 @@ function delete_post($mode, $post_id, $topic_id, $forum_id, &$data)
$sql = 'SELECT MAX(post_id) as last_post_id $sql = 'SELECT MAX(post_id) as last_post_id
FROM ' . POSTS_TABLE . " FROM ' . POSTS_TABLE . "
WHERE topic_id = $topic_id " . WHERE topic_id = $topic_id " .
((!$auth->acl_get('m_approve')) ? 'AND post_approved = 1' : ''); ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND post_approved = 1' : '');
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1367,11 +1367,10 @@ function delete_post($mode, $post_id, $topic_id, $forum_id, &$data)
$sql = 'SELECT post_id $sql = 'SELECT post_id
FROM ' . POSTS_TABLE . " FROM ' . POSTS_TABLE . "
WHERE topic_id = $topic_id " . WHERE topic_id = $topic_id " .
((!$auth->acl_get('m_approve')) ? 'AND post_approved = 1' : '') . ' ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND post_approved = 1' : '') . '
AND post_time > ' . $data['post_time'] . ' AND post_time > ' . $data['post_time'] . '
ORDER BY post_time ASC'; ORDER BY post_time ASC';
$result = $db->sql_query_limit($sql, 1); $result = $db->sql_query_limit($sql, 1);
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1452,7 +1451,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'poster_ip' => $user->ip, 'poster_ip' => $user->ip,
'post_time' => $current_time, 'post_time' => $current_time,
'post_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve')) ? 0 : 1, 'post_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'enable_bbcode' => $data['enable_bbcode'], 'enable_bbcode' => $data['enable_bbcode'],
'enable_smilies' => $data['enable_smilies'], 'enable_smilies' => $data['enable_smilies'],
'enable_magic_url' => $data['enable_urls'], 'enable_magic_url' => $data['enable_urls'],
@ -1502,7 +1501,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'poster_id' => $data['poster_id'], 'poster_id' => $data['poster_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'post_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve')) ? 0 : 1, 'post_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'enable_bbcode' => $data['enable_bbcode'], 'enable_bbcode' => $data['enable_bbcode'],
'enable_smilies' => $data['enable_smilies'], 'enable_smilies' => $data['enable_smilies'],
'enable_magic_url' => $data['enable_urls'], 'enable_magic_url' => $data['enable_urls'],
@ -1536,7 +1535,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
'topic_time' => $current_time, 'topic_time' => $current_time,
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'topic_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve')) ? 0 : 1, 'topic_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'topic_title' => $subject, 'topic_title' => $subject,
'topic_first_poster_name' => (!$user->data['is_registered'] && $username) ? stripslashes($username) : $user->data['username'], 'topic_first_poster_name' => (!$user->data['is_registered'] && $username) ? stripslashes($username) : $user->data['username'],
'topic_type' => $topic_type, 'topic_type' => $topic_type,
@ -1559,19 +1558,19 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
if ($topic_type != POST_GLOBAL) if ($topic_type != POST_GLOBAL)
{ {
if (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) if (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id']))
{ {
$sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1'; $sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1';
} }
$sql_data[FORUMS_TABLE]['stat'][] = 'forum_topics_real = forum_topics_real + 1' . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) ? ', forum_topics = forum_topics + 1' : ''); $sql_data[FORUMS_TABLE]['stat'][] = 'forum_topics_real = forum_topics_real + 1' . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? ', forum_topics = forum_topics + 1' : '');
} }
break; break;
case 'reply': case 'reply':
$sql_data[TOPICS_TABLE]['stat'][] = 'topic_replies_real = topic_replies_real + 1, topic_bumped = 0, topic_bumper = 0' . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) ? ', topic_replies = topic_replies + 1' : ''); $sql_data[TOPICS_TABLE]['stat'][] = 'topic_replies_real = topic_replies_real + 1, topic_bumped = 0, topic_bumper = 0' . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? ', topic_replies = topic_replies + 1' : '');
$sql_data[USERS_TABLE]['stat'][] = "user_lastpost_time = $current_time" . (($auth->acl_get('f_postcount', $data['forum_id'])) ? ', user_posts = user_posts + 1' : ''); $sql_data[USERS_TABLE]['stat'][] = "user_lastpost_time = $current_time" . (($auth->acl_get('f_postcount', $data['forum_id'])) ? ', user_posts = user_posts + 1' : '');
if ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) && $topic_type != POST_GLOBAL) if ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) && $topic_type != POST_GLOBAL)
{ {
$sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1'; $sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1';
} }
@ -1583,7 +1582,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$sql_data[TOPICS_TABLE]['sql'] = array( $sql_data[TOPICS_TABLE]['sql'] = array(
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'topic_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve')) ? 0 : 1, 'topic_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'topic_title' => $subject, 'topic_title' => $subject,
'topic_first_poster_name' => stripslashes($username), 'topic_first_poster_name' => stripslashes($username),
'topic_type' => $topic_type, 'topic_type' => $topic_type,
@ -1878,7 +1877,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
} }
// Update total post count, do not consider moderated posts/topics // Update total post count, do not consider moderated posts/topics
if (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) if (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id']))
{ {
if ($post_mode == 'post') if ($post_mode == 'post')
{ {
@ -1971,24 +1970,24 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
markread('topic', $data['forum_id'], $data['topic_id'], time()); markread('topic', $data['forum_id'], $data['topic_id'], time());
// Send Notifications // Send Notifications
if ($mode != 'edit' && $mode != 'delete' && (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve'))) if ($mode != 'edit' && $mode != 'delete' && (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])))
{ {
user_notification($mode, stripslashes($subject), stripslashes($data['topic_title']), stripslashes($data['forum_name']), $data['forum_id'], $data['topic_id'], $data['post_id']); user_notification($mode, stripslashes($subject), stripslashes($data['topic_title']), stripslashes($data['forum_name']), $data['forum_id'], $data['topic_id'], $data['post_id']);
} }
if ($mode == 'post') if ($mode == 'post')
{ {
$url = (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $data['forum_id'] . '&amp;t=' . $data['topic_id'] : "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $data['forum_id']; $url = (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $data['forum_id'] . '&amp;t=' . $data['topic_id'] : "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $data['forum_id'];
} }
else else
{ {
$url = (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f={$data['forum_id']}&amp;t={$data['topic_id']}&amp;p={$data['post_id']}#p{$data['post_id']}" : "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f={$data['forum_id']}&amp;t={$data['topic_id']}"; $url = (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f={$data['forum_id']}&amp;t={$data['topic_id']}&amp;p={$data['post_id']}#p{$data['post_id']}" : "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f={$data['forum_id']}&amp;t={$data['topic_id']}";
} }
meta_refresh(3, $url); meta_refresh(3, $url);
$message = ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve')) ? (($mode == 'edit') ? 'POST_EDITED_MOD' : 'POST_STORED_MOD') : (($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED'); $message = ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? (($mode == 'edit') ? 'POST_EDITED_MOD' : 'POST_STORED_MOD') : (($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED');
$message = $user->lang[$message] . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve')) ? '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $url . '">', '</a>') : '') . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="viewforum.' . $phpEx . $SID .'&amp;f=' . $data['forum_id'] . '">', '</a>'); $message = $user->lang[$message] . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $url . '">', '</a>') : '') . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="viewforum.' . $phpEx . $SID .'&amp;f=' . $data['forum_id'] . '">', '</a>');
trigger_error($message); trigger_error($message);
} }

View file

@ -1274,7 +1274,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
'U_EDIT' => (($user->data['user_id'] == $poster_id && $auth->acl_get('f_edit', $forum_id) && ($row['post_time'] > time() - $config['edit_time'] || !$config['edit_time'])) || $auth->acl_get('m_edit', $forum_id)) ? "posting.$phpEx$SID&amp;mode=edit&amp;f=$forum_id&amp;p=" . $row['post_id'] : '', 'U_EDIT' => (($user->data['user_id'] == $poster_id && $auth->acl_get('f_edit', $forum_id) && ($row['post_time'] > time() - $config['edit_time'] || !$config['edit_time'])) || $auth->acl_get('m_edit', $forum_id)) ? "posting.$phpEx$SID&amp;mode=edit&amp;f=$forum_id&amp;p=" . $row['post_id'] : '',
'U_QUOTE' => ($auth->acl_get('f_reply', $forum_id)) ? "posting.$phpEx$SID&amp;mode=quote&amp;f=$forum_id&amp;p=" . $row['post_id'] : '', 'U_QUOTE' => ($auth->acl_get('f_reply', $forum_id)) ? "posting.$phpEx$SID&amp;mode=quote&amp;f=$forum_id&amp;p=" . $row['post_id'] : '',
'U_INFO' => ($auth->acl_get('m_', $forum_id)) ? "mcp.$phpEx$SID&amp;i=main&amp;mode=post_details&amp;p=" . $row['post_id'] : '', 'U_INFO' => ($auth->acl_get('m_info', $forum_id)) ? "mcp.$phpEx$SID&amp;i=main&amp;mode=post_details&amp;p=" . $row['post_id'] : '',
'U_DELETE' => (($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - $config['edit_time'] || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? "posting.$phpEx$SID&amp;mode=delete&amp;f=$forum_id&amp;p=" . $row['post_id'] : '', 'U_DELETE' => (($user->data['user_id'] == $poster_id && $auth->acl_get('f_delete', $forum_id) && $topic_data['topic_last_post_id'] == $row['post_id'] && ($row['post_time'] > time() - $config['edit_time'] || !$config['edit_time'])) || $auth->acl_get('m_delete', $forum_id)) ? "posting.$phpEx$SID&amp;mode=delete&amp;f=$forum_id&amp;p=" . $row['post_id'] : '',
'U_PROFILE' => $user_cache[$poster_id]['profile'], 'U_PROFILE' => $user_cache[$poster_id]['profile'],