diff options
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/adm/style/acp_permission_roles.html | 18 | ||||
-rw-r--r-- | phpBB/adm/style/acp_permissions.html | 8 | ||||
-rw-r--r-- | phpBB/adm/style/admin.css | 16 | ||||
-rw-r--r-- | phpBB/adm/style/permission_mask.html | 2 | ||||
-rw-r--r-- | phpBB/adm/style/tooltip.js | 223 | ||||
-rw-r--r-- | phpBB/includes/acp/acp_permission_roles.php | 58 | ||||
-rw-r--r-- | phpBB/includes/acp/auth.php | 6 | ||||
-rw-r--r-- | phpBB/includes/functions_posting.php | 2 | ||||
-rw-r--r-- | phpBB/includes/mcp/mcp_queue.php | 2 | ||||
-rwxr-xr-x | phpBB/includes/mcp/mcp_reports.php | 2 | ||||
-rw-r--r-- | phpBB/includes/ucp/ucp_pm_viewmessage.php | 2 | ||||
-rw-r--r-- | phpBB/install/schemas/firebird_schema.sql | 3 | ||||
-rw-r--r-- | phpBB/install/schemas/mssql_schema.sql | 8 | ||||
-rw-r--r-- | phpBB/install/schemas/mysql_schema.sql | 5 | ||||
-rw-r--r-- | phpBB/install/schemas/oracle_schema.sql | 4 | ||||
-rw-r--r-- | phpBB/install/schemas/postgres_schema.sql | 3 | ||||
-rw-r--r-- | phpBB/install/schemas/sqlite_schema.sql | 3 | ||||
-rw-r--r-- | phpBB/language/en/acp/permissions.php | 2 | ||||
-rw-r--r-- | phpBB/posting.php | 33 | ||||
-rw-r--r-- | phpBB/viewtopic.php | 2 |
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 @@ <!-- ELSE --> <!-- IF p_mask.f_mask.S_ROLE_OPTIONS --> - <b>{L_ROLE}:</b> <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> <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 . '&action=edit&role_id=' . $row['role_id'], 'U_REMOVE' => $this->u_action . '&action=remove&role_id=' . $row['role_id'], + 'U_MOVE_UP' => $this->u_action . '&action=move_up&order=' . $row['role_order'], + 'U_MOVE_DOWN' => $this->u_action . '&action=move_down&order=' . $row['role_order'], 'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&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&p=" . $row['post_id'] . '#p' . $row['post_id'], - 'U_MCP_DETAILS' => ($auth->acl_get('m_', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx$SID&mode=post_details&p=" . $row['post_id'] : '', + 'U_MCP_DETAILS' => ($auth->acl_get('m_info', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx$SID&mode=post_details&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&i=queue&p=$post_id&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&i=reports&p=$post_id&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&mode=pm_details&p=" . $message_row['msg_id'] : '', + 'U_INFO' => ($auth->acl_get('m_info') && $message_row['forwarded']) ? "{$phpbb_root_path}mcp.$phpEx$SID&mode=pm_details&p=" . $message_row['msg_id'] : '', 'U_DELETE' => ($auth->acl_get('u_pm_delete')) ? "$url&mode=compose&action=delete&f=$folder_id&p=" . $message_row['msg_id'] : '', 'U_AUTHOR_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&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&f=" . $data['forum_id'] . '&t=' . $data['topic_id'] : "{$phpbb_root_path}viewforum.$phpEx$SID&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&f=" . $data['forum_id'] . '&t=' . $data['topic_id'] : "{$phpbb_root_path}viewforum.$phpEx$SID&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&f={$data['forum_id']}&t={$data['topic_id']}&p={$data['post_id']}#p{$data['post_id']}" : "{$phpbb_root_path}viewtopic.$phpEx$SID&f={$data['forum_id']}&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&f={$data['forum_id']}&t={$data['topic_id']}&p={$data['post_id']}#p{$data['post_id']}" : "{$phpbb_root_path}viewtopic.$phpEx$SID&f={$data['forum_id']}&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 .'&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 .'&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&mode=edit&f=$forum_id&p=" . $row['post_id'] : '', 'U_QUOTE' => ($auth->acl_get('f_reply', $forum_id)) ? "posting.$phpEx$SID&mode=quote&f=$forum_id&p=" . $row['post_id'] : '', - 'U_INFO' => ($auth->acl_get('m_', $forum_id)) ? "mcp.$phpEx$SID&i=main&mode=post_details&p=" . $row['post_id'] : '', + 'U_INFO' => ($auth->acl_get('m_info', $forum_id)) ? "mcp.$phpEx$SID&i=main&mode=post_details&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&mode=delete&f=$forum_id&p=" . $row['post_id'] : '', 'U_PROFILE' => $user_cache[$poster_id]['profile'], |