mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
Added: more sync() stuff, to be documented in the dev forum
git-svn-id: file:///svn/phpbb/trunk@3936 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
3847fc47ec
commit
e13b0efc6a
1 changed files with 94 additions and 10 deletions
|
@ -263,6 +263,7 @@ function delete_topics($where_type, $where_ids, $auto_sync = TRUE)
|
||||||
if ($auto_sync)
|
if ($auto_sync)
|
||||||
{
|
{
|
||||||
sync('forum', 'forum_id', $forum_ids, TRUE);
|
sync('forum', 'forum_id', $forum_ids, TRUE);
|
||||||
|
sync('topic_reported', $where_type, $where_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
|
@ -329,7 +330,7 @@ function delete_posts($where_type, $where_ids, $auto_sync = TRUE)
|
||||||
//
|
//
|
||||||
function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE, $sync_extra = FALSE)
|
function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE, $sync_extra = FALSE)
|
||||||
{
|
{
|
||||||
global $db;
|
global $db, $dbms;
|
||||||
|
|
||||||
if (is_array($where_ids))
|
if (is_array($where_ids))
|
||||||
{
|
{
|
||||||
|
@ -340,12 +341,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
|
||||||
$where_ids = array($where_ids);
|
$where_ids = array($where_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($mode == 'approved' || $mode == 'reported')
|
if ($mode == 'forum' || $mode == 'topic')
|
||||||
{
|
|
||||||
$where_sql = "WHERE t.$where_type IN (" . implode(', ', $where_ids) . ')';
|
|
||||||
$where_sql_and = $where_sql . "\n\tAND";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (!$where_type)
|
if (!$where_type)
|
||||||
{
|
{
|
||||||
|
@ -358,10 +354,15 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
|
||||||
$where_sql_and = $where_sql . "\n\tAND";
|
$where_sql_and = $where_sql . "\n\tAND";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$where_sql = "WHERE t.$where_type IN (" . implode(', ', $where_ids) . ')';
|
||||||
|
$where_sql_and = $where_sql . "\n\tAND";
|
||||||
|
}
|
||||||
|
|
||||||
switch ($mode)
|
switch ($mode)
|
||||||
{
|
{
|
||||||
case 'approved':
|
case 'topic_approved':
|
||||||
$sql = 'SELECT t.topic_id, p.post_approved
|
$sql = 'SELECT t.topic_id, p.post_approved
|
||||||
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
|
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
|
||||||
$where_sql_and p.post_id = t.topic_first_post_id
|
$where_sql_and p.post_id = t.topic_first_post_id
|
||||||
|
@ -387,6 +388,75 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'post_attachment':
|
||||||
|
$post_ids = array();
|
||||||
|
|
||||||
|
switch ($dbms)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
$sql = 'SELECT t.post_id, t.post_attachment, COUNT(a.attachment_id) AS attachments
|
||||||
|
FROM ' . POSTS_TABLE . ' t
|
||||||
|
LEFT JOIN ' . ATTACHMENTS_TABLE . " a ON t.post_id = a.post_id
|
||||||
|
$where_sql
|
||||||
|
GROUP BY t.post_id";
|
||||||
|
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
if (($row['post_attachment'] && !$row['attachments']) || ($row['attachments'] && !$row['post_attachment']))
|
||||||
|
{
|
||||||
|
$post_ids[] = $row['post_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!count($post_ids))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'UPDATE ' . POSTS_TABLE . '
|
||||||
|
SET post_attachment = 1 - post_attachment
|
||||||
|
WHERE post_id IN (' . implode(', ', $post_ids) . ')';
|
||||||
|
$db->sql_query($sql);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'topic_attachment':
|
||||||
|
$topic_ids = array();
|
||||||
|
|
||||||
|
switch ($dbms)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
$sql = 'SELECT t.topic_id, t.topic_attachment, COUNT(a.attachment_id) AS attachments
|
||||||
|
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
|
||||||
|
LEFT JOIN ' . ATTACHMENTS_TABLE . " a ON p.post_id = a.post_id
|
||||||
|
$where_sql_and t.topic_id = p.topic_id
|
||||||
|
AND ((t.topic_attachment = 1 AND attachments = 0)
|
||||||
|
OR (t.topic_attachment = 0 AND attachments > 0))
|
||||||
|
GROUP BY t.topic_id";
|
||||||
|
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
if (($row['topic_attachment'] && !$row['attachments'])
|
||||||
|
|| ($row['attachments'] && !$row['topic_attachment']))
|
||||||
|
{
|
||||||
|
$topic_ids[] = $row['topic_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($topic_ids))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'UPDATE ' . TOPICS_TABLE . '
|
||||||
|
SET topic_attachment = 1 - topic_attachment
|
||||||
|
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
|
||||||
|
$db->sql_query($sql);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'reported':
|
case 'reported':
|
||||||
$topic_data = $topic_ids = $post_ids = array();
|
$topic_data = $topic_ids = $post_ids = array();
|
||||||
|
|
||||||
|
@ -398,7 +468,8 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
|
||||||
LEFT JOIN ' . REPORTS_TABLE . " r ON r.post_id = t.post_id
|
LEFT JOIN ' . REPORTS_TABLE . " r ON r.post_id = t.post_id
|
||||||
$where_sql
|
$where_sql
|
||||||
AND ((t.post_reported = 1 AND r.post_id IS NULL)
|
AND ((t.post_reported = 1 AND r.post_id IS NULL)
|
||||||
OR (t.post_reported = 0 AND r.post_id > 0))";
|
OR (t.post_reported = 0 AND r.post_id > 0))
|
||||||
|
GROUP p.post_id";
|
||||||
$result = $db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
|
@ -816,7 +887,20 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
|
||||||
$topic_data[$row['topic_id']]['reported'] = 1;
|
$topic_data[$row['topic_id']]['reported'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resync topic_attachment as well?
|
// This routine assumes that post_attachment values are correct
|
||||||
|
// if they are not, use sync('post_attachment') instead
|
||||||
|
$fieldnames[] = 'attachment';
|
||||||
|
$sql = 'SELECT t.topic_id, p.post_id
|
||||||
|
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
|
||||||
|
$where_sql_and p.topic_id = t.topic_id
|
||||||
|
AND p.post_attachment = 1
|
||||||
|
GROUP t.topic_id";
|
||||||
|
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$topic_data[$row['topic_id']]['attachment'] = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($topic_data as $topic_id => $row)
|
foreach ($topic_data as $topic_id => $row)
|
||||||
|
|
Loading…
Add table
Reference in a new issue