diff options
author | Paul S. Owen <psotfx@users.sourceforge.net> | 2002-07-14 14:34:34 +0000 |
---|---|---|
committer | Paul S. Owen <psotfx@users.sourceforge.net> | 2002-07-14 14:34:34 +0000 |
commit | 0b285c07f61b2c4be45ff4430fb8b9a0fa6329b2 (patch) | |
tree | f8a106f4dc0b3e89a897e48cd53e976aaca4d6fc /phpBB/includes | |
parent | 72db8c4a5e058db14b7a5e703cf01503a906463d (diff) | |
download | forums-0b285c07f61b2c4be45ff4430fb8b9a0fa6329b2.tar forums-0b285c07f61b2c4be45ff4430fb8b9a0fa6329b2.tar.gz forums-0b285c07f61b2c4be45ff4430fb8b9a0fa6329b2.tar.bz2 forums-0b285c07f61b2c4be45ff4430fb8b9a0fa6329b2.tar.xz forums-0b285c07f61b2c4be45ff4430fb8b9a0fa6329b2.zip |
Combine various admin related functions
git-svn-id: file:///svn/phpbb/trunk@2664 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes')
-rw-r--r-- | phpBB/includes/functions_admin.php | 326 |
1 files changed, 287 insertions, 39 deletions
diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 353e36b4b9..f5b965a160 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -8,7 +8,6 @@ * * $Id$ * - * ***************************************************************************/ /*************************************************************************** @@ -18,7 +17,6 @@ * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * - * ***************************************************************************/ // @@ -26,28 +24,23 @@ // function make_forum_select($box_name, $ignore_forum = false) { - global $db, $userdata; - - $is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata); + global $db, $userdata, $acl, $lang; $sql = "SELECT forum_id, forum_name FROM " . FORUMS_TABLE . " ORDER BY cat_id, forum_order"; - if ( !($result = $db->sql_query($sql)) ) - { - message_die(GENERAL_ERROR, 'Couldn not obtain forums information', '', __LINE__, __FILE__, $sql); - } + $result = $db->sql_query($sql); $forum_list = ''; while( $row = $db->sql_fetchrow($result) ) { - if ( $is_auth_ary[$row['forum_id']]['auth_read'] && $ignore_forum != $row['forum_id'] ) + if ( $acl->get_acl($row['forum_id'], 'forum', 'read') && $ignore_forum != $row['forum_id'] ) { $forum_list .= '<option value="' . $row['forum_id'] . '">' . $row['forum_name'] . '</option>'; } } - $forum_list = ( $forum_list == '' ) ? '<option value="-1">-- ! No Forums ! --</option>' : '<select name="' . $box_name . '">' . $forum_list . '</select>'; + $forum_list = ( $forum_list == '' ) ? '<option value="-1">' . $lang['No_forums'] . '</option>' : '<select name="' . $box_name . '">' . $forum_list . '</select>'; return $forum_list; } @@ -64,10 +57,7 @@ function sync($type, $id) case 'all forums': $sql = "SELECT forum_id FROM " . FORUMS_TABLE; - if ( !$result = $db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not get forum IDs', '', __LINE__, __FILE__, $sql); - } + $result = $db->sql_query($sql); while( $row = $db->sql_fetchrow($result) ) { @@ -78,10 +68,7 @@ function sync($type, $id) case 'all topics': $sql = "SELECT topic_id FROM " . TOPICS_TABLE; - if ( !$result = $db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not get topic ID', '', __LINE__, __FILE__, $sql); - } + $result = $db->sql_query($sql); while( $row = $db->sql_fetchrow($result) ) { @@ -95,10 +82,7 @@ function sync($type, $id) WHERE p.forum_id = $id AND t.topic_id = p.topic_id AND t.topic_status <> " . TOPIC_MOVED; - if ( !$result = $db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql); - } + $result = $db->sql_query($sql); if ( $row = $db->sql_fetchrow($result) ) { @@ -115,46 +99,310 @@ function sync($type, $id) FROM " . TOPICS_TABLE . " WHERE forum_id = $id AND topic_status <> " . TOPIC_MOVED; - if ( !$result = $db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not get topic count', '', __LINE__, __FILE__, $sql); - } + $result = $db->sql_query($sql); $total_topics = ( $row = $db->sql_fetchrow($result) ) ? ( ( $row['total'] ) ? $row['total'] : 0 ) : 0; $sql = "UPDATE " . FORUMS_TABLE . " SET forum_last_post_id = $last_post, forum_posts = $total_posts, forum_topics = $total_topics WHERE forum_id = $id"; - if ( !$db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not update forum', '', __LINE__, __FILE__, $sql); - } + $db->sql_query($sql); break; case 'topic': $sql = "SELECT MAX(post_id) AS last_post, MIN(post_id) AS first_post, COUNT(post_id) AS total_posts FROM " . POSTS_TABLE . " WHERE topic_id = $id"; - if ( !$result = $db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql); - } + $result = $db->sql_query($sql); if ( $row = $db->sql_fetchrow($result) ) { $sql = "UPDATE " . TOPICS_TABLE . " SET topic_replies = " . ( $row['total_posts'] - 1 ) . ", topic_first_post_id = " . $row['first_post'] . ", topic_last_post_id = " . $row['last_post'] . " WHERE topic_id = $id"; - if ( !$db->sql_query($sql) ) - { - message_die(GENERAL_ERROR, 'Could not update topic', '', __LINE__, __FILE__, $sql); - } + $db->sql_query($sql); } + case 'post': + break; + break; } return true; } +function prune($forum_id, $prune_date) +{ + global $db, $lang, $phpEx, $phpbb_root_path; + + require_once($phpbb_root_path . 'includes/functions_posting.'.$phpEx); + + // + // Those without polls ... + // + $sql = "SELECT t.topic_id + FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t + WHERE t.forum_id = $forum_id + AND t.topic_vote = 0 + AND t.topic_type <> " . POST_ANNOUNCE . " + AND ( p.post_id = t.topic_last_post_id + OR t.topic_last_post_id = 0 )"; + if ( $prune_date != '' ) + { + $sql .= " AND p.post_time < $prune_date"; + } + $result = $db->sql_query($sql); + + $sql_topics = ''; + while ( $row = $db->sql_fetchrow($result) ) + { + $sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id']; + } + + if ( $sql_topics != '' ) + { + $sql = "SELECT post_id + FROM " . POSTS_TABLE . " + WHERE forum_id = $forum_id + AND topic_id IN ($sql_topics)"; + $result = $db->sql_query($sql); + + $sql_post = ''; + while ( $row = $db->sql_fetchrow($result) ) + { + $sql_post .= ( ( $sql_post != '' ) ? ', ' : '' ) . $row['post_id']; + } + + if ( $sql_post != '' ) + { + $db->sql_transaction(); + + $sql = "DELETE FROM " . TOPICS_TABLE . " + WHERE topic_id IN ($sql_topics)"; + $db->sql_query($sql); + + $pruned_topics = $db->sql_affectedrows(); + + $sql = "DELETE FROM " . POSTS_TABLE . " + WHERE post_id IN ($sql_post)"; + $db->sql_query($sql); + + $pruned_posts = $db->sql_affectedrows(); + + $sql = "DELETE FROM " . POSTS_TEXT_TABLE . " + WHERE post_id IN ($sql_post)"; + $db->sql_query($sql); + + $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " + WHERE post_id IN ($sql_post)"; + $db->sql_query($sql); + + remove_search_post($sql_post); + + $db->sql_transaction('commit'); + + return array ('topics' => $pruned_topics, 'posts' => $pruned_posts); + } + } + + return array('topics' => 0, 'posts' => 0); +} + +// +// Function auto_prune(), this function will read the configuration data from +// the auto_prune table and call the prune function with the necessary info. +// +function auto_prune($forum_id = 0) +{ + global $db, $lang; + + $sql = "SELECT prune_freq, prune_days + FROM " . FORUMS_TABLE . " + WHERE forum_id = $forum_id"; + $result = $db->sql_query($sql); + + if ( $row = $db->sql_fetchrow($result) ) + { + if ( $row['prune_freq'] && $row['prune_days'] ) + { + $prune_date = time() - ( $row['prune_days'] * 86400 ); + $next_prune = time() + ( $row['prune_freq'] * 86400 ); + + prune($forum_id, $prune_date); + sync('forum', $forum_id); + + $sql = "UPDATE " . FORUMS_TABLE . " + SET prune_next = $next_prune + WHERE forum_id = $forum_id"; + $db->sql_query($sql); + } + } + + return; +} + +/*************************************************************************** +* +* These functions are mainly for use in the db_utilities under the admin +* however in order to make these functions available elsewhere, specifically +* in the installation phase of phpBB I have seperated out a couple of +* functions into this file. JLH +* +\***************************************************************************/ + +// +// remove_comments will strip the sql comment lines out of an uploaded sql file +// specifically for mssql and postgres type files in the install.... +// +function remove_comments(&$output) +{ + $lines = explode("\n", $output); + $output = ''; + + // try to keep mem. use down + $linecount = count($lines); + + $in_comment = false; + for($i = 0; $i < $linecount; $i++) + { + if ( preg_match('/^\/\*/', preg_quote($lines[$i])) ) + { + $in_comment = true; + } + + if ( !$in_comment ) + { + $output .= $lines[$i] . "\n"; + } + + if ( preg_match('/\*\/$/', preg_quote($lines[$i])) ) + { + $in_comment = false; + } + } + + unset($lines); + return $output; +} + +// +// remove_remarks will strip the sql comment lines out of an uploaded sql file +// +function remove_remarks($sql) +{ + $lines = explode("\n", $sql); + + // try to keep mem. use down + $sql = ''; + + $linecount = count($lines); + $output = ''; + + for ($i = 0; $i < $linecount; $i++) + { + if ( $i != $linecount - 1 || strlen($lines[$i]) > 0 ) + { + $output .= ( $lines[$i][0] != '#' ) ? $lines[$i] . "\n" : "\n"; + // Trading a bit of speed for lower mem. use here. + $lines[$i] = ''; + } + } + + return $output; + +} + +// +// split_sql_file will split an uploaded sql file into single sql statements. +// Note: expects trim() to have already been run on $sql. +// +function split_sql_file($sql, $delimiter) +{ + // Split up our string into "possible" SQL statements. + $tokens = explode($delimiter, $sql); + + // try to save mem. + $sql = ''; + $output = array(); + + // we don't actually care about the matches preg gives us. + $matches = array(); + + // this is faster than calling count($oktens) every time thru the loop. + $token_count = count($tokens); + for ($i = 0; $i < $token_count; $i++) + { + // Don't wanna add an empty string as the last thing in the array. + if ( $i != $token_count - 1 || strlen($tokens[$i] > 0) ) + { + // This is the total number of single quotes in the token. + $total_quotes = preg_match_all("/'/", $tokens[$i], $matches); + // Counts single quotes that are preceded by an odd number of backslashes, + // which means they're escaped quotes. + $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches); + + $unescaped_quotes = $total_quotes - $escaped_quotes; + + // If the number of unescaped quotes is even, then the delimiter did NOT occur inside a string literal. + if ( !($unescaped_quotes % 2) ) + { + // It's a complete sql statement. + $output[] = $tokens[$i]; + // save memory. + $tokens[$i] = ''; + } + else + { + // incomplete sql statement. keep adding tokens until we have a complete one. + // $temp will hold what we have so far. + $temp = $tokens[$i] . $delimiter; + // save memory.. + $tokens[$i] = ''; + + // Do we have a complete statement yet? + $complete_stmt = false; + + for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++) + { + // This is the total number of single quotes in the token. + $total_quotes = preg_match_all("/'/", $tokens[$j], $matches); + // Counts single quotes that are preceded by an odd number of backslashes, + // which means they're escaped quotes. + $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches); + + $unescaped_quotes = $total_quotes - $escaped_quotes; + + if ( ($unescaped_quotes % 2) == 1 ) + { + // odd number of unescaped quotes. In combination with the previous incomplete + // statement(s), we now have a complete statement. (2 odds always make an even) + $output[] = $temp . $tokens[$j]; + + // save memory. + $tokens[$j] = ''; + $temp = ''; + + // exit the loop. + $complete_stmt = true; + // make sure the outer loop continues at the right point. + $i = $j; + } + else + { + // even number of unescaped quotes. We still don't have a complete statement. + // (1 odd and 1 even always make an odd) + $temp .= $tokens[$j] . $delimiter; + // save memory. + $tokens[$j] = ''; + } + + } // for.. + } // else + } + } + + return $output; +} + ?>
\ No newline at end of file |