aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/functions_admin.php
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2003-09-07 17:16:12 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2003-09-07 17:16:12 +0000
commitdb2a73d2f07cd04e787c0b9ecc5533e4895a400b (patch)
tree02b4efb589aac7d7f7663c24ed2bd48feef2d156 /phpBB/includes/functions_admin.php
parent734b62cca6e72d1722a90c63f5779d79186d136f (diff)
downloadforums-db2a73d2f07cd04e787c0b9ecc5533e4895a400b.tar
forums-db2a73d2f07cd04e787c0b9ecc5533e4895a400b.tar.gz
forums-db2a73d2f07cd04e787c0b9ecc5533e4895a400b.tar.bz2
forums-db2a73d2f07cd04e787c0b9ecc5533e4895a400b.tar.xz
forums-db2a73d2f07cd04e787c0b9ecc5533e4895a400b.zip
okie, using array_merge. :D
fixed: admin_prune added: prune topics last viewed at... (only admin_prune ATM) moved: delete_attachments to functions_admin git-svn-id: file:///svn/phpbb/trunk@4482 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/functions_admin.php')
-rw-r--r--phpBB/includes/functions_admin.php232
1 files changed, 225 insertions, 7 deletions
diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php
index d4da25127b..25439ac4d9 100644
--- a/phpBB/includes/functions_admin.php
+++ b/phpBB/includes/functions_admin.php
@@ -407,9 +407,9 @@ function delete_posts($where_type, $where_ids, $auto_sync = TRUE)
}
unset($table_ary);
- $db->sql_transaction('commit');
+ delete_attachments($post_ids);
-// delete_attachment($post_ids);
+ $db->sql_transaction('commit');
if ($auto_sync)
{
@@ -438,6 +438,217 @@ function delete_posts($where_type, $where_ids, $auto_sync = TRUE)
return count($post_ids);
}
+// Delete Attachments
+function delete_attachments($post_id_array = -1, $attach_id_array = -1, $page = 'post', $user_id = -1)
+{
+ global $db;
+
+ if ($post_id_array == -1 && $attach_id_array == -1 && $page == -1)
+ {
+ return;
+ }
+
+ // Generate Array, if it's not an array
+ if ($post_id_array == -1 && $attach_id_array != -1)
+ {
+ $post_id_array = array();
+
+ if (!is_array($attach_id_array))
+ {
+ $attach_id_array = (strstr($attach_id_array, ',')) ? explode(',', str_replace(', ', ',', $attach_id_array)) : array((int) $attach_id_array);
+ }
+
+ // Get the post_ids to fill the array
+ $sql = 'SELECT ' . (($page == 'privmsgs') ? 'privmsgs_id' : 'post_id') . ' as id
+ FROM ' . ATTACHMENTS_TABLE . '
+ WHERE attach_id IN (' . implode(', ', $attach_id_array) . ')
+ GROUP BY id';
+ $result = $db->sql_query($sql);
+
+ if (!($row = $db->sql_fetchrow($result)))
+ {
+ return;
+ }
+
+ do
+ {
+ $post_id_array[] = $row['id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+ $db->sql_freeresult($result);
+ }
+
+ if (!is_array($post_id_array))
+ {
+ if (trim($post_id_array) == '')
+ {
+ return;
+ }
+
+ $post_id_array = (strstr($post_id_array, ',')) ? explode(',', str_replace(', ', ',', $attach_id_array)) : array((int) $post_id_array);
+ }
+
+ if (!count($post_id_array))
+ {
+ return;
+ }
+
+ // First of all, determine the post id and attach_id
+ if ($attach_id_array == -1)
+ {
+ $attach_id_array = array();
+
+ // Get the attach_ids to fill the array
+ $sql = 'SELECT attach_id
+ FROM ' . ATTACHMENTS_TABLE . '
+ WHERE ' . (($page == 'privmsgs') ? 'privmsgs_id' : 'post_id') . ' IN (' . implode(', ', $post_id_array) . ')
+ GROUP BY attach_id';
+ $result = $db->sql_query($sql);
+
+ if (!($row = $db->sql_fetchrow($result)))
+ {
+ return;
+ }
+
+ do
+ {
+ $attach_id_array[] = $row['attach_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+ $db->sql_freeresult($result);
+ }
+
+ if (!is_array($attach_id_array))
+ {
+ $attach_id_array = (strstr($post_id_array, ',')) ? explode(',', str_replace(', ', ',', $attach_id_array)) : array((int) $attach_id_array);
+ }
+
+ if (!count($attach_id_array))
+ {
+ return;
+ }
+
+ $sql = 'DELETE FROM ' . ATTACHMENTS_TABLE . '
+ WHERE attach_id IN (' . implode(', ', $attach_id_array) . ')
+ AND post_id IN (' . implode(', ', $post_id_array) . ')';
+ $db->sql_query($sql);
+
+ foreach ($attach_id_array as $attach_id)
+ {
+ $sql = 'SELECT attach_id
+ FROM ' . ATTACHMENTS_TABLE . "
+ WHERE attach_id = $attach_id";
+ $select_result = $db->sql_query($sql);
+
+ if (!is_array($db->sql_fetchrow($select_result)))
+ {
+ $sql = 'SELECT attach_id, physical_filename, thumbnail
+ FROM ' . ATTACHMENTS_DESC_TABLE . "
+ WHERE attach_id = $attach_id";
+ $result = $db->sql_query($sql);
+
+ // delete attachments
+ while ($row = $db->sql_fetchrow($result))
+ {
+ phpbb_unlink($row['physical_filename'], 'file', $config['use_ftp_upload']);
+ if ($row['thumbnail'])
+ {
+ phpbb_unlink($row['physical_filename'], 'thumbnail', $config['use_ftp_upload']);
+ }
+
+ $sql = 'DELETE FROM ' . ATTACHMENTS_DESC_TABLE . '
+ WHERE attach_id = ' . $row['attach_id'];
+ $db->sql_query($sql);
+ }
+ $db->sql_freeresult($result);
+ }
+ $db->sql_freeresult($select_result);
+ }
+
+ // Now Sync the Topic/PM
+ if ($page == 'privmsgs')
+ {
+ foreach ($post_id_array as $privmsgs_id)
+ {
+ $sql = 'SELECT attach_id
+ FROM ' . ATTACHMENTS_TABLE . '
+ WHERE privmsgs_id = ' . $privmsgs_id;
+ $select_result = $db->sql_query($sql);
+
+ if (!is_array($db->sql_fetchrow($select_result)))
+ {
+ $sql = 'UPDATE ' . PRIVMSGS_TABLE . '
+ SET privmsgs_attachment = 0
+ WHERE privmsgs_id = ' . $privmsgs_id;
+ $db->sql_query($sql);
+ }
+ $db->sql_freeresult($select_result);
+ }
+ }
+ else
+ {
+ $sql = 'SELECT topic_id
+ FROM ' . POSTS_TABLE . '
+ WHERE post_id IN (' . implode(', ', $post_id_array) . ')
+ GROUP BY topic_id';
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $topic_id = $row['topic_id'];
+
+ $sql = 'SELECT post_id
+ FROM ' . POSTS_TABLE . "
+ WHERE topic_id = $topic_id
+ GROUP BY post_id";
+ $result2 = $db->sql_query($sql);
+
+ $post_ids = array();
+
+ while ($post_row = $db->sql_fetchrow($result2))
+ {
+ $post_ids[] = $post_row['post_id'];
+ }
+ $db->sql_freeresult($result2);
+
+ if (count($post_ids))
+ {
+ $post_id_sql = implode(', ', $post_ids);
+
+ $sql = 'SELECT attach_id
+ FROM ' . ATTACHMENTS_TABLE . "
+ WHERE post_id IN ($post_id_sql)";
+ $select_result = $db->sql_query_limit($sql, 1);
+ $set_id = (!is_array($db->sql_fetchrow($select_result))) ? 0 : 1;
+ $db->sql_freeresult($select_result);
+
+ $sql = 'UPDATE ' . TOPICS_TABLE . "
+ SET topic_attachment = $set_id
+ WHERE topic_id = $topic_id";
+ $db->sql_query($sql);
+
+ foreach ($post_ids as $post_id)
+ {
+ $sql = 'SELECT attach_id
+ FROM ' . ATTACHMENTS_TABLE . "
+ WHERE post_id = $post_id";
+ $select_result = $db->sql_query_limit($sql, 1);
+ $set_id = (!is_array($db->sql_fetchrow($select_result))) ? 0 : 1;
+ $db->sql_freeresult($select_result);
+
+ $sql = 'UPDATE ' . POSTS_TABLE . "
+ SET post_attachment = $set_id
+ WHERE post_id = $post_id";
+ $db->sql_query($sql);
+ }
+ }
+ }
+ $db->sql_freeresult($result);
+ }
+
+ // TODO - Return number of deleted attachments
+}
+
// All-encompasing sync function
//
// Usage:
@@ -1120,7 +1331,7 @@ function verify_data($type, $fieldname, &$need_update, &$data)
}
}
-function prune($forum_id, $prune_date, $prune_flags = 0, $auto_sync = true)
+function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true)
{
global $db;
@@ -1136,10 +1347,18 @@ function prune($forum_id, $prune_date, $prune_flags = 0, $auto_sync = true)
$sql_and .= ' AND topic_type <> ' . POST_STICKY;
}
+ if ($prune_mode == 'posted')
+ {
+ $sql_and .= " AND topic_last_post_time < $prune_date";
+ }
+ if ($prune_mode == 'viewed')
+ {
+ $sql_and .= " AND topic_last_view_time < $prune_date";
+ }
+
$sql = 'SELECT topic_id
FROM ' . TOPICS_TABLE . "
WHERE forum_id $sql_forum
- AND topic_last_post_time < $prune_date
AND poll_start = 0
$sql_and";
$result = $db->sql_query($sql);
@@ -1158,7 +1377,6 @@ function prune($forum_id, $prune_date, $prune_flags = 0, $auto_sync = true)
WHERE forum_id $sql_forum
AND poll_start > 0
AND poll_last_vote < $prune_date
- AND topic_last_post_time < $prune_date
$sql_and";
$result = $db->sql_query($sql);
@@ -1175,7 +1393,7 @@ function prune($forum_id, $prune_date, $prune_flags = 0, $auto_sync = true)
}
// Function auto_prune(), this function now relies on passed vars
-function auto_prune($forum_id, $prune_flags, $prune_days, $prune_freq)
+function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_freq)
{
global $db;
@@ -1189,7 +1407,7 @@ function auto_prune($forum_id, $prune_flags, $prune_days, $prune_freq)
$prune_date = time() - ($prune_days * 86400);
$next_prune = time() + ($prune_freq * 86400);
- prune($forum_id, $prune_date, $prune_flags, true);
+ prune($forum_id, $prune_mode, $prune_date, $prune_flags, true);
$sql = 'UPDATE ' . FORUMS_TABLE . "
SET prune_next = $next_prune