Skip to content

Commit dc49a8a

Browse files
committed
Merge pull request phpbb#4804 from rxu/ticket/15186
[ticket/15186] Fully implement the force_delete_allowed feature
2 parents 71f9c6e + f178c06 commit dc49a8a

2 files changed

Lines changed: 50 additions & 9 deletions

File tree

phpBB/includes/functions_posting.php

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2691,16 +2691,54 @@ function phpbb_upload_popup($forum_style = 0)
26912691

26922692
/**
26932693
* Do the various checks required for removing posts as well as removing it
2694+
*
2695+
* @param int $forum_id The id of the forum
2696+
* @param int $topic_id The id of the topic
2697+
* @param int $post_id The id of the post
2698+
* @param array $post_data Array with the post data
2699+
* @param bool $is_soft The flag indicating whether it is the soft delete mode
2700+
* @param string $delete_reason Description for the post deletion reason
2701+
*
2702+
* @return null
26942703
*/
26952704
function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $is_soft = false, $delete_reason = '')
26962705
{
26972706
global $user, $auth, $config, $request;
2698-
global $phpbb_root_path, $phpEx;
2707+
global $phpbb_root_path, $phpEx, $phpbb_dispatcher;
26992708

2709+
$force_delete_allowed = $force_softdelete_allowed = false;
27002710
$perm_check = ($is_soft) ? 'softdelete' : 'delete';
27012711

2712+
/**
2713+
* This event allows to modify the conditions for the post deletion
2714+
*
2715+
* @event core.handle_post_delete_conditions
2716+
* @var int forum_id The id of the forum
2717+
* @var int topic_id The id of the topic
2718+
* @var int post_id The id of the post
2719+
* @var array post_data Array with the post data
2720+
* @var bool is_soft The flag indicating whether it is the soft delete mode
2721+
* @var string delete_reason Description for the post deletion reason
2722+
* @var bool force_delete_allowed Allow the user to delete the post (all permissions and conditions are ignored)
2723+
* @var bool force_softdelete_allowed Allow the user to softdelete the post (all permissions and conditions are ignored)
2724+
* @var string perm_check The deletion mode softdelete|delete
2725+
* @since 3.1.11-RC1
2726+
*/
2727+
$vars = array(
2728+
'forum_id',
2729+
'topic_id',
2730+
'post_id',
2731+
'post_data',
2732+
'is_soft',
2733+
'delete_reason',
2734+
'force_delete_allowed',
2735+
'force_softdelete_allowed',
2736+
'perm_check',
2737+
);
2738+
extract($phpbb_dispatcher->trigger_event('core.handle_post_delete_conditions', compact($vars)));
2739+
27022740
// If moderator removing post or user itself removing post, present a confirmation screen
2703-
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'])))
2741+
if ($force_delete_allowed || ($is_soft && $force_softdelete_allowed) || $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'])))
27042742
{
27052743
$s_hidden_fields = array(
27062744
'p' => $post_id,
@@ -2757,10 +2795,10 @@ function phpbb_handle_post_delete($forum_id, $topic_id, $post_id, &$post_data, $
27572795
}
27582796
else
27592797
{
2760-
global $user, $template, $request;
2798+
global $template;
27612799

2762-
$can_delete = $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));
2763-
$can_softdelete = $auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id));
2800+
$can_delete = $force_delete_allowed || ($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)));
2801+
$can_softdelete = $force_softdelete_allowed || ($auth->acl_get('m_softdelete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_softdelete', $forum_id)));
27642802

27652803
$template->assign_vars(array(
27662804
'S_SOFTDELETED' => $post_data['post_visibility'] == ITEM_DELETED,

phpBB/viewtopic.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,7 +1812,7 @@
18121812
$s_first_unread = $first_unread = true;
18131813
}
18141814

1815-
$force_edit_allowed = $force_delete_allowed = false;
1815+
$force_edit_allowed = $force_delete_allowed = $force_softdelete_allowed = false;
18161816

18171817
$s_cannot_edit = !$auth->acl_get('f_edit', $forum_id) || $user->data['user_id'] != $poster_id;
18181818
$s_cannot_edit_time = $config['edit_time'] && $row['post_time'] <= time() - ($config['edit_time'] * 60);
@@ -1842,7 +1842,9 @@
18421842
* @var bool s_cannot_delete_lastpost User can not delete the post because it's not the last post of the topic
18431843
* @var bool s_cannot_delete_locked User can not delete the post because it's locked
18441844
* @var bool s_cannot_delete_time User can not delete the post because edit_time has passed
1845+
* @var bool force_softdelete_allowed Allow the user to ыoftdelete the post (all permissions and conditions are ignored)
18451846
* @since 3.1.0-b4
1847+
* @changed 3.1.11-RC1 Added force_softdelete_allowed var
18461848
*/
18471849
$vars = array(
18481850
'row',
@@ -1856,6 +1858,7 @@
18561858
's_cannot_delete_lastpost',
18571859
's_cannot_delete_locked',
18581860
's_cannot_delete_time',
1861+
'force_softdelete_allowed',
18591862
);
18601863
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_action_conditions', compact($vars)));
18611864

@@ -1877,10 +1880,10 @@
18771880
(!$s_cannot_delete && !$s_cannot_delete_lastpost && !$s_cannot_delete_time && !$s_cannot_delete_locked)
18781881
));
18791882

1880-
$softdelete_allowed = ($auth->acl_get('m_softdelete', $forum_id) ||
1881-
($auth->acl_get('f_softdelete', $forum_id) && $user->data['user_id'] == $poster_id)) && ($row['post_visibility'] != ITEM_DELETED);
1883+
$softdelete_allowed = $force_softdelete_allowed || (($auth->acl_get('m_softdelete', $forum_id) ||
1884+
($auth->acl_get('f_softdelete', $forum_id) && $user->data['user_id'] == $poster_id)) && ($row['post_visibility'] != ITEM_DELETED));
18821885

1883-
$permanent_delete_allowed = ($auth->acl_get('m_delete', $forum_id) ||
1886+
$permanent_delete_allowed = $force_delete_allowed || ($auth->acl_get('m_delete', $forum_id) ||
18841887
($auth->acl_get('f_delete', $forum_id) && $user->data['user_id'] == $poster_id));
18851888

18861889
// Can this user receive a Private Message?

0 commit comments

Comments
 (0)