aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/posting.php
diff options
context:
space:
mode:
authorJosh Woody <a_jelly_doughnut@phpbb.com>2010-06-27 14:22:36 -0500
committerJoas Schilling <nickvergessen@gmx.de>2012-08-29 17:50:11 +0200
commitfb13ab83e476d2afbc7bb181f7ab90df98f996da (patch)
treea86bc9db9c4e65efb50857d6ca18633c87a5027c /phpBB/posting.php
parentc32d76080605f843bb23e9a608c368d4b5dc55d8 (diff)
downloadforums-fb13ab83e476d2afbc7bb181f7ab90df98f996da.tar
forums-fb13ab83e476d2afbc7bb181f7ab90df98f996da.tar.gz
forums-fb13ab83e476d2afbc7bb181f7ab90df98f996da.tar.bz2
forums-fb13ab83e476d2afbc7bb181f7ab90df98f996da.tar.xz
forums-fb13ab83e476d2afbc7bb181f7ab90df98f996da.zip
[feature/soft-delete] Implement the ability to soft-delete and restore posts
The soft delete feature seems to work. Tests are pending. A real icon is pending. Add the permissions and the interface to soft-delete posts. Also able to restore posts via the MCP queue PHPBB3-9657
Diffstat (limited to 'phpBB/posting.php')
-rw-r--r--phpBB/posting.php51
1 files changed, 42 insertions, 9 deletions
diff --git a/phpBB/posting.php b/phpBB/posting.php
index 30b897c068..221d469b4a 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -38,8 +38,20 @@ $load = (isset($_POST['load'])) ? true : false;
$delete = (isset($_POST['delete'])) ? true : false;
$cancel = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false;
-$refresh = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['cancel_unglobalise']) || $save || $load || $preview) ? true : false;
-$mode = ($delete && !$preview && !$refresh && $submit) ? 'delete' : request_var('mode', '');
+$refresh = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['cancel_unglobalise']) || $save || $load || $preview);
+$mode = request_var('mode', '');
+
+if ($submit && !$refresh)
+{
+ if (isset($_POST['soft_delete']))
+ {
+ $mode = 'soft_delete';
+ }
+ else if (isset($_POST['delete']))
+ {
+ $mode = 'delete';
+ }
+}
$error = $post_data = array();
$current_time = time();
@@ -93,6 +105,7 @@ switch ($mode)
case 'quote':
case 'edit':
case 'delete':
+ case 'soft_delete':
if (!$post_id)
{
$user->setup('posting');
@@ -168,6 +181,13 @@ if ($auth->acl_get('m_approve', $forum_id) && ((($mode == 'reply' || $mode == 'b
trigger_error(($mode == 'reply' || $mode == 'bump') ? 'TOPIC_UNAPPROVED' : 'POST_UNAPPROVED');
}
+if ($mode == 'edit' && $post_data['post_visibility'] == ITEM_DELETED && !isset($_POST['soft_delete']) && phpbb_visibility::can_restore($forum_id, $post_data['poster_id'], $post_data['post_edit_locked']))
+{
+ // don't feel that a confirm_box is needed for this
+ // do not return / trigger_error after this because the post content can also be changed
+ phpbb_visibility::unhide_posts_topics('restore', array($post_id => $post_data), array($post_id));
+}
+
if ($mode == 'popup')
{
upload_popup($post_data['forum_style']);
@@ -259,6 +279,13 @@ switch ($mode)
$is_authed = true;
}
break;
+
+ case 'soft_delete':
+ if ($user->data['is_registered'] && $auth->acl_gets('f_softdelete', 'm_softdelete', $forum_id))
+ {
+ $is_authed = true;
+ }
+ break;
}
if (!$is_authed)
@@ -306,9 +333,9 @@ if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
}
// Handle delete mode...
-if ($mode == 'delete')
+if ($mode == 'delete' || $mode == 'soft_delete')
{
- handle_post_delete($forum_id, $topic_id, $post_id, $post_data);
+ handle_post_delete($forum_id, $topic_id, $post_id, $post_data, ($mode == 'soft_delete'));
return;
}
@@ -1401,6 +1428,10 @@ $template->assign_vars(array(
'S_LOCK_TOPIC_CHECKED' => ($lock_topic_checked) ? ' checked="checked"' : '',
'S_LOCK_POST_ALLOWED' => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
'S_LOCK_POST_CHECKED' => ($lock_post_checked) ? ' checked="checked"' : '',
+ 'S_SOFT_DELETE_CHECKED' => ($mode == 'edit' && $post_data['post_visibility'] == ITEM_DELETED) ? ' checked="checked"' : '',
+ 'S_SOFT_DELETE_ALLOWED' => (phpbb_visibility::can_soft_delete($forum_id, $post_data['poster_id'], $lock_post_checked)) ? true : false,
+ 'S_RESTORE_ALLOWED' => (phpbb_visibility::can_restore($forum_id, $post_data['poster_id'], $lock_post_checked)) ? true : false,
+ 'S_IS_DELETED' => ($post_data['post_visibility'] == POST_DELETED) ? true : false,
'S_LINKS_ALLOWED' => $url_status,
'S_MAGIC_URL_CHECKED' => ($urls_checked) ? ' checked="checked"' : '',
'S_TYPE_TOGGLE' => $topic_type_toggle,
@@ -1494,19 +1525,21 @@ function upload_popup($forum_style = 0)
/**
* Do the various checks required for removing posts as well as removing it
*/
-function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data)
+function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $is_soft)
{
global $user, $db, $auth, $config;
global $phpbb_root_path, $phpEx;
+ $perm_check = ($is_soft) ? 'softdelete' : 'delete';
+
// If moderator removing post or user itself removing post, present a confirmation screen
- if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
+ if ($auth->acl_get("m_$perm_check", $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get("f_$perm_check", $forum_id) && $post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
{
$s_hidden_fields = build_hidden_fields(array(
'p' => $post_id,
'f' => $forum_id,
- 'mode' => 'delete')
- );
+ 'mode' => ($is_soft) ? 'soft_delete' : 'delete',
+ ));
if (confirm_box(true))
{
@@ -1523,7 +1556,7 @@ function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data)
'post_postcount' => $post_data['post_postcount']
);
- $next_post_id = delete_post($forum_id, $topic_id, $post_id, $data);
+ $next_post_id = delete_post($forum_id, $topic_id, $post_id, $data, $is_soft);
$post_username = ($post_data['poster_id'] == ANONYMOUS && !empty($post_data['post_username'])) ? $post_data['post_username'] : $post_data['username'];
if ($next_post_id === false)