mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-11 22:08:54 +00:00
Merge pull request #2624 from dhruvgoel92/ticket/12718
[ticket/12718] Use remove_topic_from_statistic() for delete_topic * dhruvgoel92/ticket/12718: [ticket/12718] Use a separate variable for sql query [ticket/12718] Fix spacing and type casting [ticket/12718] Fix docblocks [ticket/12718] Add tests to check user_posts on post deletion [ticket/12718] Update docblock [ticket/12718] Use remove_topic_from_statistic() for delete_topic
This commit is contained in:
commit
86f94f922c
3 changed files with 54 additions and 68 deletions
|
@ -1324,18 +1324,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data, $is_soft = false, $
|
|||
{
|
||||
delete_topics('topic_id', array($topic_id), false);
|
||||
|
||||
if ($data['topic_visibility'] == ITEM_APPROVED)
|
||||
{
|
||||
$sql_data[FORUMS_TABLE] .= 'forum_posts_approved = forum_posts_approved - 1, forum_topics_approved = forum_topics_approved - 1';
|
||||
}
|
||||
else if ($data['topic_visibility'] == ITEM_UNAPPROVED || $data['post_visibility'] == ITEM_REAPPROVE)
|
||||
{
|
||||
$sql_data[FORUMS_TABLE] .= 'forum_posts_unapproved = forum_posts_unapproved - 1, forum_topics_unapproved = forum_topics_unapproved - 1';
|
||||
}
|
||||
else if ($data['topic_visibility'] == ITEM_DELETED)
|
||||
{
|
||||
$sql_data[FORUMS_TABLE] .= 'forum_posts_softdeleted = forum_posts_softdeleted - 1, forum_topics_softdeleted = forum_topics_softdeleted - 1';
|
||||
}
|
||||
$phpbb_content_visibility->remove_topic_from_statistic($data, $sql_data);
|
||||
|
||||
$update_sql = update_post_information('forum', $forum_id, true);
|
||||
if (sizeof($update_sql))
|
||||
|
|
|
@ -570,7 +570,7 @@ class content_visibility
|
|||
* Add post to topic and forum statistics
|
||||
*
|
||||
* @param $data array Contains information from the topics table about given topic
|
||||
* @param $sql_data array Populated with the SQL changes, may be empty at call time
|
||||
* @param &$sql_data array Populated with the SQL changes, may be empty at call time
|
||||
* @return null
|
||||
*/
|
||||
public function add_post_to_statistic($data, &$sql_data)
|
||||
|
@ -591,7 +591,7 @@ class content_visibility
|
|||
* Remove post from topic and forum statistics
|
||||
*
|
||||
* @param $data array Contains information from the topics table about given topic
|
||||
* @param $sql_data array Populated with the SQL changes, may be empty at call time
|
||||
* @param &$sql_data array Populated with the SQL changes, may be empty at call time
|
||||
* @return null
|
||||
*/
|
||||
public function remove_post_from_statistic($data, &$sql_data)
|
||||
|
@ -623,64 +623,29 @@ class content_visibility
|
|||
/**
|
||||
* Remove topic from forum statistics
|
||||
*
|
||||
* @param $topic_id int The topic to act on
|
||||
* @param $forum_id int Forum where the topic is found
|
||||
* @param $topic_row array Contains information from the topic, may be empty at call time
|
||||
* @param $sql_data array Populated with the SQL changes, may be empty at call time
|
||||
* @param $data array Post and topic data
|
||||
* @param &$sql_data array Populated with the SQL changes, may be empty at call time
|
||||
* @return null
|
||||
*/
|
||||
public function remove_topic_from_statistic($topic_id, $forum_id, &$topic_row, &$sql_data)
|
||||
public function remove_topic_from_statistic($data, &$sql_data)
|
||||
{
|
||||
// Do we need to grab some topic informations?
|
||||
if (!sizeof($topic_row))
|
||||
if ($data['topic_visibility'] == ITEM_APPROVED)
|
||||
{
|
||||
$sql = 'SELECT topic_type, topic_posts_approved, topic_posts_unapproved, topic_posts_softdeleted, topic_visibility
|
||||
FROM ' . $this->topics_table . '
|
||||
WHERE topic_id = ' . (int) $topic_id;
|
||||
$result = $this->db->sql_query($sql);
|
||||
$topic_row = $this->db->sql_fetchrow($result);
|
||||
$this->db->sql_freeresult($result);
|
||||
$sql_data[FORUMS_TABLE] .= 'forum_posts_approved = forum_posts_approved - 1, forum_topics_approved = forum_topics_approved - 1';
|
||||
|
||||
if ($data['post_postcount'])
|
||||
{
|
||||
$sql_data[$this->users_table] = ((!empty($sql_data[$this->users_table])) ? $sql_data[$this->users_table] . ', ' : '') . 'user_posts = user_posts - 1';
|
||||
}
|
||||
}
|
||||
else if ($data['topic_visibility'] == ITEM_UNAPPROVED || $data['post_visibility'] == ITEM_REAPPROVE)
|
||||
{
|
||||
$sql_data[FORUMS_TABLE] .= 'forum_posts_unapproved = forum_posts_unapproved - 1, forum_topics_unapproved = forum_topics_unapproved - 1';
|
||||
}
|
||||
else if ($data['topic_visibility'] == ITEM_DELETED)
|
||||
{
|
||||
$sql_data[FORUMS_TABLE] .= 'forum_posts_softdeleted = forum_posts_softdeleted - 1, forum_topics_softdeleted = forum_topics_softdeleted - 1';
|
||||
}
|
||||
|
||||
// If this is an edited topic or the first post the topic gets completely disapproved later on...
|
||||
$sql_data[$this->forums_table] = (($sql_data[$this->forums_table]) ? $sql_data[$this->forums_table] . ', ' : '') . 'forum_topics_approved = forum_topics_approved - 1';
|
||||
$sql_data[$this->forums_table] .= ', forum_posts_approved = forum_posts_approved - ' . $topic_row['topic_posts_approved'];
|
||||
$sql_data[$this->forums_table] .= ', forum_posts_unapproved = forum_posts_unapproved - ' . $topic_row['topic_posts_unapproved'];
|
||||
$sql_data[$this->forums_table] .= ', forum_posts_softdeleted = forum_posts_softdeleted - ' . $topic_row['topic_posts_softdeleted'];
|
||||
|
||||
$this->config->increment('num_topics', -1, false);
|
||||
$this->config->increment('num_posts', $topic_row['topic_posts_approved'] * (-1), false);
|
||||
|
||||
// Get user post count information
|
||||
$sql = 'SELECT poster_id, COUNT(post_id) AS num_posts
|
||||
FROM ' . $this->posts_table . '
|
||||
WHERE topic_id = ' . (int) $topic_id . '
|
||||
AND post_postcount = 1
|
||||
AND post_visibility = ' . ITEM_APPROVED . '
|
||||
GROUP BY poster_id';
|
||||
$result = $this->db->sql_query($sql);
|
||||
|
||||
$postcounts = array();
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$postcounts[(int) $row['num_posts']][] = (int) $row['poster_id'];
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
// Decrement users post count
|
||||
foreach ($postcounts as $num_posts => $poster_ids)
|
||||
{
|
||||
$sql = 'UPDATE ' . $this->users_table . '
|
||||
SET user_posts = 0
|
||||
WHERE user_posts < ' . $num_posts . '
|
||||
AND ' . $this->db->sql_in_set('user_id', $poster_ids);
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
$sql = 'UPDATE ' . $this->users_table . '
|
||||
SET user_posts = user_posts - ' . $num_posts . '
|
||||
WHERE user_posts >= ' . $num_posts . '
|
||||
AND ' . $this->db->sql_in_set('user_id', $poster_ids);
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,6 +67,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 2, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 0, 'forum_topics_approved' => 1, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 3),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
array(
|
||||
1, 1, 1,
|
||||
|
@ -93,6 +96,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 2, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 0, 'forum_topics_approved' => 1, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 3),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
array(
|
||||
1, 1, 3,
|
||||
|
@ -119,6 +125,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 2, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 0, 'forum_topics_approved' => 1, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 2),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
array(
|
||||
1, 1, 2,
|
||||
|
@ -145,6 +154,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 2, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 1, 'forum_topics_approved' => 1, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 3),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
array(
|
||||
1, 1, 1,
|
||||
|
@ -171,6 +183,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 2, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 1, 'forum_topics_approved' => 1, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 3),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
array(
|
||||
1, 1, 3,
|
||||
|
@ -197,6 +212,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 2, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 1, 'forum_topics_approved' => 1, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 2),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
|
@ -222,6 +240,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 0, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 0, 'forum_topics_approved' => 0, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 0, 'forum_last_post_id' => 0),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
|
@ -257,6 +278,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
array(
|
||||
array('forum_posts_approved' => 0, 'forum_posts_unapproved' => 0, 'forum_posts_softdeleted' => 1, 'forum_topics_approved' => 0, 'forum_topics_unapproved' => 0, 'forum_topics_softdeleted' => 1, 'forum_last_post_id' => 0),
|
||||
),
|
||||
array(
|
||||
array('user_posts' => 3),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -264,7 +288,7 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
/**
|
||||
* @dataProvider delete_post_data
|
||||
*/
|
||||
public function test_delete_post($forum_id, $topic_id, $post_id, $data, $is_soft, $reason, $expected_posts, $expected_topic, $expected_forum)
|
||||
public function test_delete_post($forum_id, $topic_id, $post_id, $data, $is_soft, $reason, $expected_posts, $expected_topic, $expected_forum, $expected_user)
|
||||
{
|
||||
global $auth, $cache, $config, $db, $phpbb_container, $phpbb_dispatcher, $phpbb_root_path, $phpEx;
|
||||
|
||||
|
@ -313,5 +337,13 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
|
||||
$this->assertEquals($expected_forum, $db->sql_fetchrowset($result));
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$sql = 'SELECT user_posts
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE user_id = ' . (int) $data['poster_id'];
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$this->assertEquals($expected_user, $db->sql_fetchrowset($result));
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue