aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/content_visibility.php37
-rw-r--r--tests/content_visibility/set_post_visibility_test.php12
2 files changed, 30 insertions, 19 deletions
diff --git a/phpBB/includes/content_visibility.php b/phpBB/includes/content_visibility.php
index fbcdf27f08..be08a5f536 100644
--- a/phpBB/includes/content_visibility.php
+++ b/phpBB/includes/content_visibility.php
@@ -162,18 +162,28 @@ class phpbb_content_visibility
}
/**
- * @param $visibility - int - element of {ITEM_UNAPPROVED, ITEM_APPROVED, ITEM_DELETED}
- * @param $post_id - int - the post ID to act on
- * @param $topic_id - int - forum where $post_id is found
- * @param $forum_id - int - forum ID where $topic_id resides
- * @param $is_starter - bool - is this the first post of the topic
- * @param $is_latest - bool - is this the last post of the topic
+ * Change visibility status of one post or a hole topic
+ *
+ * @param $visibility int Element of {ITEM_APPROVED, ITEM_DELETED}
+ * @param $post_id mixed Post ID to act on, if it is empty,
+ * all posts of topic_id will be modified
+ * @param $topic_id int Topic where $post_id is found
+ * @param $forum_id int Forum where $topic_id is found
+ * @param $is_starter bool Is this the first post of the topic changed?
+ * @param $is_latest bool Is this the last post of the topic changed?
+ * @param $limit_visibility mixed Limit updating per topic_id to a certain visibility
+ * @param $limit_delete_time mixed Limit updating per topic_id to a certain deletion time
* @return void
*/
- static public function set_post_visibility($visibility, $post_id, $topic_id, $forum_id, $user_id, $time, $reason, $is_starter, $is_latest)
+ static public function set_post_visibility($visibility, $post_id, $topic_id, $forum_id, $user_id, $time, $reason, $is_starter, $is_latest, $limit_visibility = false, $limit_delete_time = false)
{
global $db;
+ if (!in_array($visibility, array(ITEM_APPROVED, ITEM_DELETED)))
+ {
+ return;
+ }
+
if ($post_id)
{
$where_sql = 'post_id = ' . (int) $post_id;
@@ -181,6 +191,19 @@ class phpbb_content_visibility
else if ($topic_id)
{
$where_sql = 'topic_id = ' . (int) $topic_id;
+
+ // Limit the posts to a certain visibility and deletion time
+ // This allows us to only restore posts, that were approved
+ // when the topic got soft deleted. So previous soft deleted
+ // and unapproved posts are still soft deleted/unapproved
+ if ($limit_visibility !== false)
+ {
+ $where_sql .= ' AND post_visibility = ' . (int) $limit_visibility;
+ }
+ if ($limit_delete_time !== false)
+ {
+ $where_sql .= ' AND post_delete_time = ' . (int) $limit_delete_time;
+ }
}
else
{
diff --git a/tests/content_visibility/set_post_visibility_test.php b/tests/content_visibility/set_post_visibility_test.php
index 0fc2f349c0..42459c515a 100644
--- a/tests/content_visibility/set_post_visibility_test.php
+++ b/tests/content_visibility/set_post_visibility_test.php
@@ -107,18 +107,6 @@ class phpbb_content_visibility_set_post_visibility_test extends phpbb_database_t
array('topic_visibility' => 2, 'topic_first_post_id' => 8, 'topic_last_post_id' => 8),
),
),
- array(
- ITEM_UNAPPROVED,
- 8, 3, 1,
- 2, time(), 'unapproved',
- true, true,
- array(
- array('post_id' => 8, 'post_visibility' => 0, 'post_delete_reason' => 'unapproved'),
- ),
- array(
- array('topic_visibility' => 0, 'topic_first_post_id' => 8, 'topic_last_post_id' => 8),
- ),
- ),
);
}