diff options
author | Joas Schilling <nickvergessen@gmx.de> | 2012-10-05 13:12:36 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@gmx.de> | 2012-10-05 13:12:36 +0200 |
commit | bfa6a50a4ff2caf1589a1039c1037d4153223d63 (patch) | |
tree | 83e8676be5d80d8b8cc8adf4ec2c9d571d025fde | |
parent | 63d11c976b0bcef68ce4809c8c76124451df88ea (diff) | |
download | forums-bfa6a50a4ff2caf1589a1039c1037d4153223d63.tar forums-bfa6a50a4ff2caf1589a1039c1037d4153223d63.tar.gz forums-bfa6a50a4ff2caf1589a1039c1037d4153223d63.tar.bz2 forums-bfa6a50a4ff2caf1589a1039c1037d4153223d63.tar.xz forums-bfa6a50a4ff2caf1589a1039c1037d4153223d63.zip |
[feature/soft-delete] Extend functionality for updating a hole topic
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
PHPBB3-9567
-rw-r--r-- | phpBB/includes/content_visibility.php | 37 | ||||
-rw-r--r-- | tests/content_visibility/set_post_visibility_test.php | 12 |
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), - ), - ), ); } |