[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /*************************************************************************** 3 * prune.php 4 * ------------------- 5 * begin : Thursday, June 14, 2001 6 * copyright : (C) 2001 The phpBB Group 7 * email : support@phpbb.com 8 * 9 * $Id: prune.php 5508 2006-01-29 17:31:16Z grahamje $ 10 * 11 * 12 ***************************************************************************/ 13 14 /*************************************************************************** 15 * 16 * This program is free software; you can redistribute it and/or modify 17 * it under the terms of the GNU General Public License as published by 18 * the Free Software Foundation; either version 2 of the License, or 19 * (at your option) any later version. 20 * 21 ***************************************************************************/ 22 23 if ( !defined('IN_PHPBB') ) 24 { 25 die("Hacking attempt"); 26 } 27 28 require($phpbb_root_path . 'includes/functions_search.'.$phpEx); 29 30 function prune($forum_id, $prune_date, $prune_all = false) 31 { 32 global $db, $lang; 33 34 // Before pruning, lets try to clean up the invalid topic entries 35 $sql = 'SELECT topic_id FROM ' . TOPICS_TABLE . ' 36 WHERE topic_last_post_id = 0'; 37 if ( !($result = $db->sql_query($sql)) ) 38 { 39 message_die(GENERAL_ERROR, 'Could not obtain lists of topics to sync', '', __LINE__, __FILE__, $sql); 40 } 41 42 while( $row = $db->sql_fetchrow($result) ) 43 { 44 sync('topic', $row['topic_id']); 45 } 46 47 $db->sql_freeresult($result); 48 49 $prune_all = ($prune_all) ? '' : 'AND t.topic_vote = 0 AND t.topic_type <> ' . POST_ANNOUNCE; 50 // 51 // Those without polls and announcements ... unless told otherwise! 52 // 53 $sql = "SELECT t.topic_id 54 FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t 55 WHERE t.forum_id = $forum_id 56 $prune_all 57 AND p.post_id = t.topic_last_post_id"; 58 if ( $prune_date != '' ) 59 { 60 $sql .= " AND p.post_time < $prune_date"; 61 } 62 63 if ( !($result = $db->sql_query($sql)) ) 64 { 65 message_die(GENERAL_ERROR, 'Could not obtain lists of topics to prune', '', __LINE__, __FILE__, $sql); 66 } 67 68 $sql_topics = ''; 69 while( $row = $db->sql_fetchrow($result) ) 70 { 71 $sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id']; 72 } 73 $db->sql_freeresult($result); 74 75 if( $sql_topics != '' ) 76 { 77 $sql = "SELECT post_id 78 FROM " . POSTS_TABLE . " 79 WHERE forum_id = $forum_id 80 AND topic_id IN ($sql_topics)"; 81 if ( !($result = $db->sql_query($sql)) ) 82 { 83 message_die(GENERAL_ERROR, 'Could not obtain list of posts to prune', '', __LINE__, __FILE__, $sql); 84 } 85 86 $sql_post = ''; 87 while ( $row = $db->sql_fetchrow($result) ) 88 { 89 $sql_post .= ( ( $sql_post != '' ) ? ', ' : '' ) . $row['post_id']; 90 } 91 $db->sql_freeresult($result); 92 93 if ( $sql_post != '' ) 94 { 95 $sql = "DELETE FROM " . TOPICS_WATCH_TABLE . " 96 WHERE topic_id IN ($sql_topics)"; 97 if ( !$db->sql_query($sql, BEGIN_TRANSACTION) ) 98 { 99 message_die(GENERAL_ERROR, 'Could not delete watched topics during prune', '', __LINE__, __FILE__, $sql); 100 } 101 102 $sql = "DELETE FROM " . TOPICS_TABLE . " 103 WHERE topic_id IN ($sql_topics)"; 104 if ( !$db->sql_query($sql) ) 105 { 106 message_die(GENERAL_ERROR, 'Could not delete topics during prune', '', __LINE__, __FILE__, $sql); 107 } 108 109 $pruned_topics = $db->sql_affectedrows(); 110 111 $sql = "DELETE FROM " . POSTS_TABLE . " 112 WHERE post_id IN ($sql_post)"; 113 if ( !$db->sql_query($sql) ) 114 { 115 message_die(GENERAL_ERROR, 'Could not delete post_text during prune', '', __LINE__, __FILE__, $sql); 116 } 117 118 $pruned_posts = $db->sql_affectedrows(); 119 120 $sql = "DELETE FROM " . POSTS_TEXT_TABLE . " 121 WHERE post_id IN ($sql_post)"; 122 if ( !$db->sql_query($sql) ) 123 { 124 message_die(GENERAL_ERROR, 'Could not delete post during prune', '', __LINE__, __FILE__, $sql); 125 } 126 127 remove_search_post($sql_post); 128 129 return array ('topics' => $pruned_topics, 'posts' => $pruned_posts); 130 } 131 } 132 133 return array('topics' => 0, 'posts' => 0); 134 } 135 136 // 137 // Function auto_prune(), this function will read the configuration data from 138 // the auto_prune table and call the prune function with the necessary info. 139 // 140 function auto_prune($forum_id = 0) 141 { 142 global $db, $lang; 143 144 $sql = "SELECT * 145 FROM " . PRUNE_TABLE . " 146 WHERE forum_id = $forum_id"; 147 if ( !($result = $db->sql_query($sql)) ) 148 { 149 message_die(GENERAL_ERROR, 'Could not read auto_prune table', '', __LINE__, __FILE__, $sql); 150 } 151 152 if ( $row = $db->sql_fetchrow($result) ) 153 { 154 if ( $row['prune_freq'] && $row['prune_days'] ) 155 { 156 $prune_date = time() - ( $row['prune_days'] * 86400 ); 157 $next_prune = time() + ( $row['prune_freq'] * 86400 ); 158 159 prune($forum_id, $prune_date); 160 sync('forum', $forum_id); 161 162 $sql = "UPDATE " . FORUMS_TABLE . " 163 SET prune_next = $next_prune 164 WHERE forum_id = $forum_id"; 165 if ( !$db->sql_query($sql) ) 166 { 167 message_die(GENERAL_ERROR, 'Could not update forum table', '', __LINE__, __FILE__, $sql); 168 } 169 } 170 } 171 172 return; 173 } 174 175 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Jan 14 19:21:40 2013 | Cross-referenced by PHPXref 0.7.1 |