Verzeichnisstruktur phpBB-2.0.0
- Veröffentlicht
- 03.04.2002
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
prune.php
001 <?php
002 /***************************************************************************
003 * prune.php
004 * -------------------
005 * begin : Thursday, June 14, 2001
006 * copyright : (C) 2001 The phpBB Group
007 * email : support@phpbb.com
008 *
009 * $Id$
010 *
011 *
012 ***************************************************************************/
013
014 /***************************************************************************
015 *
016 * This program is free software; you can redistribute it and/or modify
017 * it under the terms of the GNU General Public License as published by
018 * the Free Software Foundation; either version 2 of the License, or
019 * (at your option) any later version.
020 *
021 ***************************************************************************/
022
023 if ( !defined('IN_PHPBB') )
024 {
025 die("Hacking attempt");
026 }
027
028 require($phpbb_root_path . 'includes/functions_search.'.$phpEx);
029
030 function prune($forum_id, $prune_date, $prune_all = false)
031 {
032 global $db, $lang;
033
034 // Before pruning, lets try to clean up the invalid topic entries
035 $sql = 'SELECT topic_id FROM ' . TOPICS_TABLE . '
036 WHERE topic_last_post_id = 0';
037 if ( !($result = $db->sql_query($sql)) )
038 {
039 message_die(GENERAL_ERROR, 'Could not obtain lists of topics to sync', '', __LINE__, __FILE__, $sql);
040 }
041
042 while( $row = $db->sql_fetchrow($result) )
043 {
044 sync('topic', $row['topic_id']);
045 }
046
047 $db->sql_freeresult($result);
048
049 $prune_all = ($prune_all) ? '' : 'AND t.topic_vote = 0 AND t.topic_type <> ' . POST_ANNOUNCE;
050 //
051 // Those without polls and announcements ... unless told otherwise!
052 //
053 $sql = "SELECT t.topic_id
054 FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t
055 WHERE t.forum_id = $forum_id
056 $prune_all
057 AND p.post_id = t.topic_last_post_id";
058 if ( $prune_date != '' )
059 {
060 $sql .= " AND p.post_time < $prune_date";
061 }
062
063 if ( !($result = $db->sql_query($sql)) )
064 {
065 message_die(GENERAL_ERROR, 'Could not obtain lists of topics to prune', '', __LINE__, __FILE__, $sql);
066 }
067
068 $sql_topics = '';
069 while( $row = $db->sql_fetchrow($result) )
070 {
071 $sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id'];
072 }
073 $db->sql_freeresult($result);
074
075 if( $sql_topics != '' )
076 {
077 $sql = "SELECT post_id
078 FROM " . POSTS_TABLE . "
079 WHERE forum_id = $forum_id
080 AND topic_id IN ($sql_topics)";
081 if ( !($result = $db->sql_query($sql)) )
082 {
083 message_die(GENERAL_ERROR, 'Could not obtain list of posts to prune', '', __LINE__, __FILE__, $sql);
084 }
085
086 $sql_post = '';
087 while ( $row = $db->sql_fetchrow($result) )
088 {
089 $sql_post .= ( ( $sql_post != '' ) ? ', ' : '' ) . $row['post_id'];
090 }
091 $db->sql_freeresult($result);
092
093 if ( $sql_post != '' )
094 {
095 $sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
096 WHERE topic_id IN ($sql_topics)";
097 if ( !$db->sql_query($sql, BEGIN_TRANSACTION) )
098 {
099 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 ?>