1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-01-18 22:58:10 +01: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:
Ludovic Arnaud 2003-04-23 21:57:53 +00:00
parent 3847fc47ec
commit e13b0efc6a

View File

@ -263,6 +263,7 @@ function delete_topics($where_type, $where_ids, $auto_sync = TRUE)
if ($auto_sync)
{
sync('forum', 'forum_id', $forum_ids, TRUE);
sync('topic_reported', $where_type, $where_ids);
}
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)
{
global $db;
global $db, $dbms;
if (is_array($where_ids))
{
@ -340,12 +341,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
$where_ids = array($where_ids);
}
if ($mode == 'approved' || $mode == 'reported')
{
$where_sql = "WHERE t.$where_type IN (" . implode(', ', $where_ids) . ')';
$where_sql_and = $where_sql . "\n\tAND";
}
else
if ($mode == 'forum' || $mode == 'topic')
{
if (!$where_type)
{
@ -358,10 +354,15 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = FALSE,
$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)
{
case 'approved':
case 'topic_approved':
$sql = 'SELECT t.topic_id, p.post_approved
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p
$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);
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':
$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
$where_sql
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);
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;
}
// 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)