aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/adm/style/acp_permission_roles.html18
-rw-r--r--phpBB/adm/style/acp_permissions.html8
-rw-r--r--phpBB/adm/style/admin.css16
-rw-r--r--phpBB/adm/style/permission_mask.html2
-rw-r--r--phpBB/adm/style/tooltip.js223
-rw-r--r--phpBB/includes/acp/acp_permission_roles.php58
-rw-r--r--phpBB/includes/acp/auth.php6
-rw-r--r--phpBB/includes/functions_posting.php2
-rw-r--r--phpBB/includes/mcp/mcp_queue.php2
-rwxr-xr-xphpBB/includes/mcp/mcp_reports.php2
-rw-r--r--phpBB/includes/ucp/ucp_pm_viewmessage.php2
-rw-r--r--phpBB/install/schemas/firebird_schema.sql3
-rw-r--r--phpBB/install/schemas/mssql_schema.sql8
-rw-r--r--phpBB/install/schemas/mysql_schema.sql5
-rw-r--r--phpBB/install/schemas/oracle_schema.sql4
-rw-r--r--phpBB/install/schemas/postgres_schema.sql3
-rw-r--r--phpBB/install/schemas/sqlite_schema.sql3
-rw-r--r--phpBB/language/en/acp/permissions.php2
-rw-r--r--phpBB/posting.php33
-rw-r--r--phpBB/viewtopic.php2
20 files changed, 369 insertions, 33 deletions
diff --git a/phpBB/adm/style/acp_permission_roles.html b/phpBB/adm/style/acp_permission_roles.html
index b24312d21d..4a8654f82c 100644
--- a/phpBB/adm/style/acp_permission_roles.html
+++ b/phpBB/adm/style/acp_permission_roles.html
@@ -67,6 +67,10 @@
<dd><input name="role_name" type="text" id="role_name" value="{ROLE_NAME}" /></dd>
</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>
<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 id="custom_group"<!-- IF not S_CUSTOM_GROUP_IDS --> style="display:none;"<!-- ENDIF -->>
@@ -177,13 +181,15 @@
<tr>
<th style="width: 50%">{L_ROLE_NAME}</th>
<th>{L_DISPLAY_FOR_GROUP}</th>
- <th colspan="3">{L_OPTIONS}</th>
+ <th colspan="2">{L_OPTIONS}</th>
</tr>
</thead>
<tbody>
<!-- BEGIN roles -->
<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;">
<!-- IF roles.S_GROUP -->
<!-- a href="{roles.groups.U_GROUP}">{roles.groups.GROUP_NAME}</a><br / -->
@@ -196,9 +202,13 @@
{L_EVERY_USER_GROUP}
<!-- ENDIF -->
</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;"><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>
<!-- END roles -->
</tbody>
diff --git a/phpBB/adm/style/acp_permissions.html b/phpBB/adm/style/acp_permissions.html
index 1801892218..ad0e97cccd 100644
--- a/phpBB/adm/style/acp_permissions.html
+++ b/phpBB/adm/style/acp_permissions.html
@@ -343,6 +343,14 @@
<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}">
{S_HIDDEN_FIELDS}
diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css
index 5e18443092..1b6e284a30 100644
--- a/phpBB/adm/style/admin.css
+++ b/phpBB/adm/style/admin.css
@@ -871,6 +871,22 @@ table.pmask td.name {
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
diff --git a/phpBB/adm/style/permission_mask.html b/phpBB/adm/style/permission_mask.html
index 8999c2b9da..b757b00d1a 100644
--- a/phpBB/adm/style/permission_mask.html
+++ b/phpBB/adm/style/permission_mask.html
@@ -156,7 +156,7 @@
&nbsp;
<!-- ELSE -->
<!-- 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 -->
<b>{L_ROLE}:</b> {L_NO_ROLE_AVAILABLE}
<!-- ENDIF -->
diff --git a/phpBB/adm/style/tooltip.js b/phpBB/adm/style/tooltip.js
new file mode 100644
index 0000000000..0b5a2408f4
--- /dev/null
+++ b/phpBB/adm/style/tooltip.js
@@ -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';
+ }
+}
diff --git a/phpBB/includes/acp/acp_permission_roles.php b/phpBB/includes/acp/acp_permission_roles.php
index e4c4cafa85..5701ebb699 100644
--- a/phpBB/includes/acp/acp_permission_roles.php
+++ b/phpBB/includes/acp/acp_permission_roles.php
@@ -150,6 +150,7 @@ class acp_permission_roles
case 'add':
$role_name = request_var('role_name', '', true);
+ $role_description = request_var('role_description', '', true);
$role_group_ids = request_var('role_group_ids', array(0));
$pre_select = request_var('pre_select', 'custom');
$auth_settings = request_var('setting', array('' => 0));
@@ -275,6 +276,7 @@ class acp_permission_roles
$sql_ary = array(
'role_name' => (string) $role_name,
+ 'role_description' => (string) $role_description,
'role_type' => (string) $permission_type,
'role_group_ids' => (string) implode(':', $role_group_ids),
);
@@ -288,6 +290,16 @@ class acp_permission_roles
}
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);
$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));
break;
+
}
}
@@ -314,6 +327,7 @@ class acp_permission_roles
$role_row = array(
'role_name' => request_var('role_name', '', true),
+ 'role_description' => request_var('role_description', '', true),
'role_type' => $permission_type,
'role_group_ids' => implode(':', request_var('role_group_ids', array(0))),
);
@@ -400,6 +414,7 @@ class acp_permission_roles
'U_BACK' => $this->u_action,
'ROLE_NAME' => $role_row['role_name'],
+ 'ROLE_DESCRIPTION' => $role_row['role_description'],
'L_ACL_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
)
);
@@ -445,13 +460,49 @@ class acp_permission_roles
return;
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
$sql = 'SELECT *
FROM ' . ACL_ROLES_TABLE . "
WHERE role_type = '" . $db->sql_escape($permission_type) . "'
- ORDER BY role_name ASC";
+ ORDER BY role_order ASC";
$result = $db->sql_query($sql);
$roles = $groups = $group_ids = $group_info = array();
@@ -490,12 +541,15 @@ class acp_permission_roles
foreach ($roles as $row)
{
$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,
'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_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')
);
diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php
index e8c2c12079..183e4a1db7 100644
--- a/phpBB/includes/acp/auth.php
+++ b/phpBB/includes/acp/auth.php
@@ -285,7 +285,8 @@ class auth_admin extends auth
// Get available roles
$sql = 'SELECT *
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);
$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'])))
{
- $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>';
}
}
diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php
index 6fa73d10f6..4202c8bc0b 100644
--- a/phpBB/includes/functions_posting.php
+++ b/phpBB/includes/functions_posting.php
@@ -833,7 +833,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_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_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) . "')" : '')
);
unset($rowset[$i]);
diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php
index 8e592d3ce8..b94d873a88 100644
--- a/phpBB/includes/mcp/mcp_queue.php
+++ b/phpBB/includes/mcp/mcp_queue.php
@@ -106,7 +106,7 @@ class mcp_queue
$template->assign_vars(array(
'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_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_UNAPPROVED' => !$post_info['post_approved'],
'S_POST_LOCKED' => $post_info['post_edit_locked'],
diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php
index 1daad04d84..552af357db 100755
--- a/phpBB/includes/mcp/mcp_reports.php
+++ b/phpBB/includes/mcp/mcp_reports.php
@@ -113,7 +113,7 @@ class mcp_reports
$template->assign_vars(array(
'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_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_UNAPPROVED' => !$post_info['post_approved'],
'S_POST_LOCKED' => $post_info['post_edit_locked'],
diff --git a/phpBB/includes/ucp/ucp_pm_viewmessage.php b/phpBB/includes/ucp/ucp_pm_viewmessage.php
index f09bd2d39c..e12732b84b 100644
--- a/phpBB/includes/ucp/ucp_pm_viewmessage.php
+++ b/phpBB/includes/ucp/ucp_pm_viewmessage.php
@@ -187,7 +187,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
'SIGNATURE' => ($message_row['enable_sig']) ? $signature : '',
'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_AUTHOR_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $author_id,
'U_EMAIL' => $user_info['email'],
diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql
index 7d604447bf..aa38dfc853 100644
--- a/phpBB/install/schemas/firebird_schema.sql
+++ b/phpBB/install/schemas/firebird_schema.sql
@@ -81,13 +81,16 @@ END;;
CREATE TABLE phpbb_auth_roles (
role_id INTEGER NOT NULL,
role_name VARCHAR(255) NOT NULL,
+ role_description BLOB SUB_TYPE TEXT,
role_type VARCHAR(10) NOT NULL,
+ role_order INTEGER DEFAULT 0 NOT NULL,
role_group_ids VARCHAR(255) NOT NULL
);;
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_order ON phpbb_auth_roles(role_order);;
CREATE GENERATOR phpbb_auth_roles_gen;;
SET GENERATOR phpbb_auth_roles_gen TO 0;;
diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql
index bce22a6f89..2cd34cfd4e 100644
--- a/phpBB/install/schemas/mssql_schema.sql
+++ b/phpBB/install/schemas/mssql_schema.sql
@@ -128,9 +128,11 @@ GO
CREATE TABLE [phpbb_auth_roles] (
[role_id] [int] IDENTITY (1, 1) NOT NULL ,
[role_name] [varchar] (255) NOT NULL ,
+ [role_description] [text] ,
[role_type] [varchar] (10) NOT NULL ,
+ [role_order] [int] NOT NULL ,
[role_group_ids] [varchar] (255) NOT NULL
-) ON [PRIMARY]
+) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD
@@ -141,12 +143,16 @@ ALTER TABLE [phpbb_auth_roles] WITH NOCHECK ADD
GO
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]
GO
CREATE INDEX [role_type] ON [phpbb_auth_roles]([role_type]) ON [PRIMARY]
GO
+CREATE INDEX [role_order] ON [phpbb_auth_roles]([role_order]) ON [PRIMARY]
+GO
+
/*
Table: phpbb_auth_roles_data
diff --git a/phpBB/install/schemas/mysql_schema.sql b/phpBB/install/schemas/mysql_schema.sql
index 562d5de95d..a4de0cd981 100644
--- a/phpBB/install/schemas/mysql_schema.sql
+++ b/phpBB/install/schemas/mysql_schema.sql
@@ -55,10 +55,13 @@ CREATE TABLE phpbb_auth_options (
CREATE TABLE phpbb_auth_roles (
role_id mediumint(8) UNSIGNED NOT NULL auto_increment,
role_name varchar(255) DEFAULT '' NOT NULL,
+ role_description text,
role_type varchar(10) DEFAULT '' NOT NULL,
+ role_order smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
role_group_ids varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (role_id),
- KEY role_type (role_type)
+ KEY role_type (role_type),
+ KEY role_order (role_order)
);
# Table: 'phpbb_auth_roles_data'
diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql
index 9d5a743dab..c7b9bb60a7 100644
--- a/phpBB/install/schemas/oracle_schema.sql
+++ b/phpBB/install/schemas/oracle_schema.sql
@@ -146,7 +146,9 @@ CREATE INDEX phpbb_auth_options_auth_option on phpbb_auth_options (auth_option)
CREATE TABLE phpbb_auth_roles (
role_id number(8) NOT NULL,
role_name varchar2(255) DEFAULT '',
+ role_description clob,
role_type varchar2(10) DEFAULT '',
+ role_order number(4) DEFAULT '0' NOT NULL,
role_group_ids varchar2(255) DEFAULT '' NOT NULL,
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_order on phpbb_auth_roles (role_order)
+/
/*
Table: phpbb_auth_roles_data
diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql
index 313c2864cf..2857ea2d87 100644
--- a/phpBB/install/schemas/postgres_schema.sql
+++ b/phpBB/install/schemas/postgres_schema.sql
@@ -81,12 +81,15 @@ CREATE SEQUENCE phpbb_auth_roles_seq;
CREATE TABLE phpbb_auth_roles (
role_id INT4 DEFAULT nextval('phpbb_auth_roles_seq'),
role_name varchar(255) DEFAULT '' NOT NULL,
+ role_description TEXT,
role_type varchar(10) DEFAULT '' NOT NULL,
+ role_order INT4 DEFAULT '0' NOT NULL,
role_group_ids varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (role_id)
);
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));
diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql
index 482299e0ae..291e5f7be5 100644
--- a/phpBB/install/schemas/sqlite_schema.sql
+++ b/phpBB/install/schemas/sqlite_schema.sql
@@ -61,11 +61,14 @@ CREATE INDEX phpbb_auth_options_auth_option on phpbb_auth_options (auth_option);
CREATE TABLE phpbb_auth_roles (
role_id INTEGER PRIMARY KEY NOT NULL,
role_name varchar(50) NOT NULL DEFAULT '',
+ role_description text(65535),
role_type varchar(10) NOT NULL DEFAULT '',
+ role_order mediumint(8) NOT NULL DEFAULT '0',
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_order on phpbb_auth_roles (role_order);
# Table: phpbb_auth_roles_data
diff --git a/phpBB/language/en/acp/permissions.php b/phpBB/language/en/acp/permissions.php
index 9c67e3e8b5..00a42e36db 100644
--- a/phpBB/language/en/acp/permissions.php
+++ b/phpBB/language/en/acp/permissions.php
@@ -131,6 +131,8 @@ $lang = array_merge($lang, array(
'ROLE_ADD_SUCCESS' => 'Role successfully added.',
'ROLE_ASSIGNED_TO' => 'Users/Groups assigned to %s',
'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_EDIT_SUCCESS' => 'Role successfully edited.',
'ROLE_NAME' => 'Role Name',
diff --git a/phpBB/posting.php b/phpBB/posting.php
index 646002a696..01616c8e85 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -1354,7 +1354,7 @@ function delete_post($mode, $post_id, $topic_id, $forum_id, &$data)
$sql = 'SELECT MAX(post_id) as last_post_id
FROM ' . POSTS_TABLE . "
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);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
@@ -1367,11 +1367,10 @@ function delete_post($mode, $post_id, $topic_id, $forum_id, &$data)
$sql = 'SELECT post_id
FROM ' . POSTS_TABLE . "
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'] . '
ORDER BY post_time ASC';
$result = $db->sql_query_limit($sql, 1);
-
$row = $db->sql_fetchrow($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'],
'poster_ip' => $user->ip,
'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_smilies' => $data['enable_smilies'],
'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'],
'poster_id' => $data['poster_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_smilies' => $data['enable_smilies'],
'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,
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_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_first_poster_name' => (!$user->data['is_registered'] && $username) ? stripslashes($username) : $user->data['username'],
'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 (!$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_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;
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' : '');
- 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';
}
@@ -1583,7 +1582,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$sql_data[TOPICS_TABLE]['sql'] = array(
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_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_first_poster_name' => stripslashes($username),
'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
- 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')
{
@@ -1971,24 +1970,24 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
markread('topic', $data['forum_id'], $data['topic_id'], time());
// 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']);
}
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
{
- $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);
- $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 = $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 = ($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', $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);
}
diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php
index a1dfeff11a..afffb21b51 100644
--- a/phpBB/viewtopic.php
+++ b/phpBB/viewtopic.php
@@ -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_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_PROFILE' => $user_cache[$poster_id]['profile'],