2003-04-21 17:37:11 -04:00
< ? php
if ( ! function_exists ( '_' )) {
function _ ( $string ) {
return $string ;
}
}
2003-08-14 11:13:20 -04:00
if ( ! function_exists ( 'floatval' )) {
function floatval ( $string ) {
return (( float ) $string );
}
}
2003-04-21 17:37:11 -04:00
2003-05-28 04:40:34 -04:00
function popuplinks ( $text ) {
// Comment text in popup windows should be filtered through this.
// Right now it's a moderately dumb function, ideally it would detect whether
// a target or rel attribute was already there and adjust its actions accordingly.
$text = preg_replace ( '/<a (.+?)>/i' , " <a $ 1 target='_blank' rel='external'> " , $text );
return $text ;
}
2003-04-21 17:37:11 -04:00
function mysql2date ( $dateformatstring , $mysqlstring , $use_b2configmonthsdays = 1 ) {
global $month , $weekday ;
$m = $mysqlstring ;
if ( empty ( $m )) {
return false ;
}
$i = mktime ( substr ( $m , 11 , 2 ), substr ( $m , 14 , 2 ), substr ( $m , 17 , 2 ), substr ( $m , 5 , 2 ), substr ( $m , 8 , 2 ), substr ( $m , 0 , 4 ));
if ( ! empty ( $month ) && ! empty ( $weekday ) && $use_b2configmonthsdays ) {
$datemonth = $month [ date ( 'm' , $i )];
$dateweekday = $weekday [ date ( 'w' , $i )];
$dateformatstring = ' ' . $dateformatstring ;
$dateformatstring = preg_replace ( " /([^ \\ \ ])D/ " , " \\ 1 " . backslashit ( substr ( $dateweekday , 0 , 3 )), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])F/ " , " \\ 1 " . backslashit ( $datemonth ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])l/ " , " \\ 1 " . backslashit ( $dateweekday ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])M/ " , " \\ 1 " . backslashit ( substr ( $datemonth , 0 , 3 )), $dateformatstring );
$dateformatstring = substr ( $dateformatstring , 1 , strlen ( $dateformatstring ) - 1 );
}
$j = @ date ( $dateformatstring , $i );
if ( ! $j ) {
2003-11-14 13:55:41 -05:00
// for debug purposes
// echo $i." ".$mysqlstring;
2003-04-21 17:37:11 -04:00
}
return $j ;
}
2004-03-24 21:21:40 -05:00
function current_time ( $type , $gmt = 0 ) {
2003-11-15 03:58:18 -05:00
switch ( $type ) {
case 'mysql' :
2004-04-24 17:52:24 -04:00
if ( $gmt ) $d = gmdate ( 'Y-m-d H:i:s' );
else $d = gmdate ( 'Y-m-d H:i:s' , ( time () + ( get_settings ( 'gmt_offset' ) * 3600 )));
return $d ;
2003-11-15 03:58:18 -05:00
break ;
case 'timestamp' :
2004-04-24 17:52:24 -04:00
if ( $gmt ) $d = time ();
else $d = time () + ( get_settings ( 'gmt_offset' ) * 3600 );
return $d ;
2003-11-15 03:58:18 -05:00
break ;
}
}
2003-04-21 17:37:11 -04:00
function date_i18n ( $dateformatstring , $unixtimestamp ) {
global $month , $weekday ;
$i = $unixtimestamp ;
if (( ! empty ( $month )) && ( ! empty ( $weekday ))) {
$datemonth = $month [ date ( 'm' , $i )];
$dateweekday = $weekday [ date ( 'w' , $i )];
$dateformatstring = ' ' . $dateformatstring ;
$dateformatstring = preg_replace ( " /([^ \\ \ ])D/ " , " \\ 1 " . backslashit ( substr ( $dateweekday , 0 , 3 )), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])F/ " , " \\ 1 " . backslashit ( $datemonth ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])l/ " , " \\ 1 " . backslashit ( $dateweekday ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])M/ " , " \\ 1 " . backslashit ( substr ( $datemonth , 0 , 3 )), $dateformatstring );
$dateformatstring = substr ( $dateformatstring , 1 , strlen ( $dateformatstring ) - 1 );
}
$j = @ date ( $dateformatstring , $i );
return $j ;
}
function get_weekstartend ( $mysqlstring , $start_of_week ) {
$my = substr ( $mysqlstring , 0 , 4 );
$mm = substr ( $mysqlstring , 8 , 2 );
$md = substr ( $mysqlstring , 5 , 2 );
$day = mktime ( 0 , 0 , 0 , $md , $mm , $my );
$weekday = date ( 'w' , $day );
$i = 86400 ;
2004-03-01 01:13:32 -05:00
while ( $weekday > get_settings ( 'start_of_week' )) {
2003-04-21 17:37:11 -04:00
$weekday = date ( 'w' , $day );
$day = $day - 86400 ;
$i = 0 ;
}
$week [ 'start' ] = $day + 86400 - $i ;
$week [ 'end' ] = $day + 691199 ;
2003-06-07 13:19:38 -04:00
return $week ;
2003-04-21 17:37:11 -04:00
}
2004-02-28 12:51:41 -05:00
function get_lastpostdate ( $timezone = 'server' ) {
2004-05-24 04:22:18 -04:00
global $cache_lastpostdate , $pagenow , $wpdb ;
2004-02-28 12:51:41 -05:00
$add_seconds_blog = get_settings ( 'gmt_offset' ) * 3600 ;
$add_seconds_server = date ( 'Z' );
2004-03-31 13:06:45 -05:00
$now = current_time ( 'mysql' , 1 );
2004-04-20 18:56:47 -04:00
if ( ! isset ( $cache_lastpostdate [ $timezone ]) ) {
2004-02-28 12:51:41 -05:00
switch ( strtolower ( $timezone )) {
case 'gmt' :
2004-05-24 04:22:18 -04:00
$lastpostdate = $wpdb -> get_var ( " SELECT post_date_gmt FROM $wpdb->posts WHERE post_date_gmt <= ' $now ' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " );
2004-02-28 12:51:41 -05:00
break ;
case 'blog' :
2004-05-24 04:22:18 -04:00
$lastpostdate = $wpdb -> get_var ( " SELECT post_date FROM $wpdb->posts WHERE post_date_gmt <= ' $now ' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " );
2004-02-28 12:51:41 -05:00
break ;
case 'server' :
2004-05-24 04:22:18 -04:00
$lastpostdate = $wpdb -> get_var ( " SELECT DATE_ADD(post_date_gmt, INTERVAL ' $add_seconds_server ' SECOND) FROM $wpdb->posts WHERE post_date_gmt <= ' $now ' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " );
2004-02-28 12:51:41 -05:00
break ;
}
$cache_lastpostdate [ $timezone ] = $lastpostdate ;
2003-04-21 17:37:11 -04:00
} else {
2004-02-28 12:51:41 -05:00
$lastpostdate = $cache_lastpostdate [ $timezone ];
2003-04-21 17:37:11 -04:00
}
2003-06-07 13:19:38 -04:00
return $lastpostdate ;
2003-04-21 17:37:11 -04:00
}
2004-02-28 12:51:41 -05:00
function get_lastpostmodified ( $timezone = 'server' ) {
2004-05-24 04:22:18 -04:00
global $cache_lastpostmodified , $pagenow , $wpdb ;
2004-02-28 12:51:41 -05:00
$add_seconds_blog = get_settings ( 'gmt_offset' ) * 3600 ;
$add_seconds_server = date ( 'Z' );
2004-03-31 13:06:45 -05:00
$now = current_time ( 'mysql' , 1 );
2004-04-20 18:56:47 -04:00
if ( ! isset ( $cache_lastpostmodified [ $timezone ]) ) {
2004-03-31 13:06:45 -05:00
switch ( strtolower ( $timezone )) {
2004-02-28 12:51:41 -05:00
case 'gmt' :
2004-05-24 04:22:18 -04:00
$lastpostmodified = $wpdb -> get_var ( " SELECT post_modified_gmt FROM $wpdb->posts WHERE post_modified_gmt <= ' $now ' AND post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1 " );
2004-02-28 12:51:41 -05:00
break ;
case 'blog' :
2004-05-24 04:22:18 -04:00
$lastpostmodified = $wpdb -> get_var ( " SELECT post_modified FROM $wpdb->posts WHERE post_modified_gmt <= ' $now ' AND post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1 " );
2004-02-28 12:51:41 -05:00
break ;
case 'server' :
2004-05-24 04:22:18 -04:00
$lastpostmodified = $wpdb -> get_var ( " SELECT DATE_ADD(post_modified_gmt, INTERVAL ' $add_seconds_server ' SECOND) FROM $wpdb->posts WHERE post_modified_gmt <= ' $now ' AND post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1 " );
2004-02-28 12:51:41 -05:00
break ;
}
$lastpostdate = get_lastpostdate ( $timezone );
if ( $lastpostdate > $lastpostmodified ) {
$lastpostmodified = $lastpostdate ;
}
$cache_lastpostmodified [ $timezone ] = $lastpostmodified ;
2004-02-21 22:28:46 -05:00
} else {
2004-02-28 12:51:41 -05:00
$lastpostmodified = $cache_lastpostmodified [ $timezone ];
2004-02-21 22:28:46 -05:00
}
return $lastpostmodified ;
}
2003-04-21 17:37:11 -04:00
function user_pass_ok ( $user_login , $user_pass ) {
2004-04-20 18:56:47 -04:00
global $cache_userdata ;
if ( empty ( $cache_userdata [ $user_login ]) ) {
2003-04-21 17:37:11 -04:00
$userdata = get_userdatabylogin ( $user_login );
} else {
$userdata = $cache_userdata [ $user_login ];
}
2004-02-19 17:42:47 -05:00
return ( md5 ( $user_pass ) == $userdata -> user_pass );
2003-04-21 17:37:11 -04:00
}
2003-06-01 04:05:29 -04:00
function get_currentuserinfo () { // a bit like get_userdata(), on steroids
2004-04-15 15:05:09 -04:00
global $user_login , $userdata , $user_level , $user_ID , $user_nickname , $user_email , $user_url , $user_pass_md5 , $cookiehash ;
2003-06-01 04:05:29 -04:00
// *** retrieving user's data from cookies and db - no spoofing
2004-05-05 17:29:23 -04:00
if ( isset ( $_COOKIE [ 'wordpressuser_' . $cookiehash ]))
$user_login = $_COOKIE [ 'wordpressuser_' . $cookiehash ];
2003-06-01 04:05:29 -04:00
$userdata = get_userdatabylogin ( $user_login );
$user_level = $userdata -> user_level ;
$user_ID = $userdata -> ID ;
$user_nickname = $userdata -> user_nickname ;
$user_email = $userdata -> user_email ;
$user_url = $userdata -> user_url ;
$user_pass_md5 = md5 ( $userdata -> user_pass );
}
2003-04-21 17:37:11 -04:00
function get_userdata ( $userid ) {
2004-05-24 04:22:18 -04:00
global $wpdb , $cache_userdata ;
2004-04-26 23:59:13 -04:00
if ( empty ( $cache_userdata [ $userid ]) ) {
2004-05-24 04:22:18 -04:00
$user = $wpdb -> get_row ( " SELECT * FROM $wpdb->users WHERE ID = ' $userid ' " );
2004-05-20 09:31:48 -04:00
$user -> user_nickname = stripslashes ( $user -> user_nickname );
$user -> user_firstname = stripslashes ( $user -> user_firstname );
$user -> user_lastname = stripslashes ( $user -> user_lastname );
2003-12-31 19:55:31 -05:00
$user -> user_description = stripslashes ( $user -> user_description );
2003-06-01 04:05:29 -04:00
$cache_userdata [ $userid ] = $user ;
2003-04-21 17:37:11 -04:00
} else {
2003-06-01 04:05:29 -04:00
$user = $cache_userdata [ $userid ];
2003-04-21 17:37:11 -04:00
}
2003-06-07 13:19:38 -04:00
return $user ;
2003-04-21 17:37:11 -04:00
}
function get_userdatabylogin ( $user_login ) {
2004-05-24 04:22:18 -04:00
global $cache_userdata , $wpdb ;
2004-04-20 18:56:47 -04:00
if ( empty ( $cache_userdata [ " $user_login " ]) ) {
2004-05-24 04:22:18 -04:00
$user = $wpdb -> get_row ( " SELECT * FROM $wpdb->users WHERE user_login = ' $user_login ' " );
2003-06-01 04:05:29 -04:00
$cache_userdata [ " $user_login " ] = $user ;
2003-04-21 17:37:11 -04:00
} else {
2003-06-01 04:05:29 -04:00
$user = $cache_userdata [ " $user_login " ];
2003-04-21 17:37:11 -04:00
}
2003-06-07 13:19:38 -04:00
return $user ;
2003-04-21 17:37:11 -04:00
}
function get_userid ( $user_login ) {
2004-05-24 04:22:18 -04:00
global $cache_userdata , $wpdb ;
2004-04-20 18:56:47 -04:00
if ( empty ( $cache_userdata [ " $user_login " ]) ) {
2004-05-24 04:22:18 -04:00
$user_id = $wpdb -> get_var ( " SELECT ID FROM $wpdb->users WHERE user_login = ' $user_login ' " );
2003-06-01 04:05:29 -04:00
$cache_userdata [ " $user_login " ] = $user_id ;
2003-04-21 17:37:11 -04:00
} else {
2003-06-01 04:05:29 -04:00
$user_id = $cache_userdata [ " $user_login " ];
2003-04-21 17:37:11 -04:00
}
2003-06-07 13:19:38 -04:00
return $user_id ;
2003-04-21 17:37:11 -04:00
}
function get_usernumposts ( $userid ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
return $wpdb -> get_var ( " SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = ' $userid ' " );
2003-04-21 17:37:11 -04:00
}
2003-11-14 13:55:41 -05:00
// examine a url (supposedly from this blog) and try to
// determine the post ID it represents.
function url_to_postid ( $url = '' ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2003-11-14 13:55:41 -05:00
2004-04-28 03:27:03 -04:00
$siteurl = get_settings ( 'home' );
2003-11-14 13:55:41 -05:00
// Take a link like 'http://example.com/blog/something'
// and extract just the '/something':
$uri = preg_replace ( " # $siteurl #i " , '' , $url );
// on failure, preg_replace just returns the subject string
// so if $uri and $siteurl are the same, they didn't match:
if ( $uri == $siteurl )
return 0 ;
// First, check to see if there is a 'p=N' to match against:
preg_match ( '#[?&]p=(\d+)#' , $uri , $values );
$p = intval ( $values [ 1 ]);
if ( $p ) return $p ;
// Match $uri against our permalink structure
$permalink_structure = get_settings ( 'permalink_structure' );
// Matt's tokenizer code
$rewritecode = array (
'%year%' ,
'%monthnum%' ,
'%day%' ,
2004-05-05 03:34:41 -04:00
'%hour%' ,
'%minute%' ,
'%second%' ,
2003-12-22 18:00:45 -05:00
'%postname%' ,
'%post_id%'
2003-11-14 13:55:41 -05:00
);
$rewritereplace = array (
'([0-9]{4})?' ,
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
2004-05-05 03:34:41 -04:00
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
2004-03-08 22:55:01 -05:00
'([_0-9a-z-]+)?' ,
2003-12-22 18:00:45 -05:00
'([0-9]+)?'
2003-11-14 13:55:41 -05:00
);
// Turn the structure into a regular expression
$matchre = str_replace ( '/' , '/?' , $permalink_structure );
$matchre = str_replace ( $rewritecode , $rewritereplace , $matchre );
// Extract the key values from the uri:
preg_match ( " # $matchre # " , $uri , $values );
// Extract the token names from the structure:
preg_match_all ( " #%(.+?)%# " , $permalink_structure , $tokens );
for ( $i = 0 ; $i < count ( $tokens [ 1 ]); $i ++ ) {
$name = $tokens [ 1 ][ $i ];
$value = $values [ $i + 1 ];
2003-12-22 18:00:45 -05:00
// Create a variable named $year, $monthnum, $day, $postname, or $post_id:
2003-11-14 13:55:41 -05:00
$$name = $value ;
}
2003-12-22 18:00:45 -05:00
// If using %post_id%, we're done:
if ( intval ( $post_id )) return intval ( $post_id );
// Otherwise, build a WHERE clause, making the values safe along the way:
2004-01-29 21:39:01 -05:00
if ( $year ) $where .= " AND YEAR(post_date) = ' " . intval ( $year ) . " ' " ;
if ( $monthnum ) $where .= " AND MONTH(post_date) = ' " . intval ( $monthnum ) . " ' " ;
if ( $day ) $where .= " AND DAYOFMONTH(post_date) = ' " . intval ( $day ) . " ' " ;
2004-05-05 03:34:41 -04:00
if ( $hour ) $where .= " AND HOUR(post_date) = ' " . intval ( $hour ) . " ' " ;
if ( $minute ) $where .= " AND MINUTE(post_date) = ' " . intval ( $minute ) . " ' " ;
if ( $second ) $where .= " AND SECOND(post_date) = ' " . intval ( $second ) . " ' " ;
2003-11-14 13:55:41 -05:00
if ( $postname ) $where .= " AND post_name = ' " . $wpdb -> escape ( $postname ) . " ' " ;
// Run the query to get the post ID:
2004-05-24 04:22:18 -04:00
$id = intval ( $wpdb -> get_var ( " SELECT ID FROM $wpdb->posts WHERE 1 = 1 " . $where ));
2003-12-22 18:00:45 -05:00
return $id ;
2003-11-14 13:55:41 -05:00
}
2003-10-25 20:19:23 -04:00
/* Options functions */
2003-04-21 17:37:11 -04:00
function get_settings ( $setting ) {
2004-04-20 18:56:47 -04:00
global $wpdb , $cache_settings ;
2004-02-08 11:10:28 -05:00
if ( strstr ( $_SERVER [ 'REQUEST_URI' ], 'install.php' )) {
return false ;
}
2004-02-16 23:56:29 -05:00
2004-04-20 18:56:47 -04:00
if ( ( empty ( $cache_settings )) ) {
2003-06-12 18:45:08 -04:00
$settings = get_alloptions ();
2003-05-29 10:04:30 -04:00
$cache_settings = $settings ;
2003-04-21 17:37:11 -04:00
} else {
2003-05-29 10:04:30 -04:00
$settings = $cache_settings ;
2003-04-21 17:37:11 -04:00
}
2004-02-16 23:56:29 -05:00
2004-04-28 03:27:03 -04:00
if ( 'home' == $setting && '' == $settings -> home ) return $settings -> siteurl ;
2004-02-16 23:56:29 -05:00
if ( ! isset ( $settings -> $setting )) {
return false ;
} else {
return stripslashes ( $settings -> $setting );
2004-01-01 16:12:22 -05:00
}
2003-04-21 17:37:11 -04:00
}
2003-06-12 18:45:08 -04:00
function get_alloptions () {
2004-05-24 04:22:18 -04:00
global $wpdb ;
$options = $wpdb -> get_results ( " SELECT option_name, option_value FROM $wpdb->options " );
2004-02-16 23:56:29 -05:00
if ( $options ) {
foreach ( $options as $option ) {
// "When trying to design a foolproof system,
// never underestimate the ingenuity of the fools :)"
if ( 'siteurl' == $option -> option_name ) $option -> option_value = preg_replace ( '|/+$|' , '' , $option -> option_value );
2004-04-28 03:27:03 -04:00
if ( 'home' == $option -> option_name ) $option -> option_value = preg_replace ( '|/+$|' , '' , $option -> option_value );
2004-05-08 22:52:27 -04:00
if ( 'category_base' == $option -> option_name ) $option -> option_value = preg_replace ( '|/+$|' , '' , $option -> option_value );
2004-04-28 03:27:03 -04:00
2004-02-16 23:56:29 -05:00
$all_options -> { $option -> option_name } = $option -> option_value ;
}
}
return $all_options ;
2003-06-12 18:45:08 -04:00
}
2003-10-25 20:19:23 -04:00
function update_option ( $option_name , $newvalue ) {
2004-05-24 04:22:18 -04:00
global $wpdb , $cache_settings ;
2004-04-22 17:29:59 -04:00
$newvalue = stripslashes ( $newvalue );
$newvalue = trim ( $newvalue ); // I can't think of any situation we wouldn't want to trim
$newvalue = $wpdb -> escape ( $newvalue );
2004-05-24 04:22:18 -04:00
$wpdb -> query ( " UPDATE $wpdb->options SET option_value = ' $newvalue ' WHERE option_name = ' $option_name ' " );
2004-03-25 02:21:00 -05:00
$cache_settings = get_alloptions (); // Re cache settings
return true ;
2003-10-25 20:19:23 -04:00
}
2004-04-16 17:17:09 -04:00
// thx Alex Stapleton, http://alex.vort-x.net/blog/
function add_option ( $name , $value = '' ) {
2003-10-25 20:19:23 -04:00
// Adds an option if it doesn't already exist
2004-05-24 04:22:18 -04:00
global $wpdb ;
2004-04-16 17:17:09 -04:00
if ( ! get_settings ( $name )) {
$name = $wpdb -> escape ( $name );
$value = $wpdb -> escape ( $value );
2004-05-24 04:22:18 -04:00
$wpdb -> query ( " INSERT INTO $wpdb->options (option_name, option_value) VALUES (' $name ', ' $value ') " );
2004-04-16 17:17:09 -04:00
2004-04-20 18:56:47 -04:00
if ( $wpdb -> insert_id ) {
2004-04-16 17:17:09 -04:00
global $cache_settings ;
$cache_settings -> { $name } = $value ;
}
}
return ;
2003-10-25 20:19:23 -04:00
}
2004-04-24 17:21:19 -04:00
function delete_option ( $name ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2004-04-24 17:21:19 -04:00
// Get the ID, if no ID then return
2004-05-24 04:22:18 -04:00
$option_id = $wpdb -> get_var ( " SELECT option_id FROM $wpdb->options WHERE option_name = ' $name ' " );
2004-04-24 17:21:19 -04:00
if ( ! $option_id ) return false ;
2004-05-24 04:22:18 -04:00
$wpdb -> query ( " DELETE FROM $wpdb->optiongroup_options WHERE option_id = ' $option_id ' " );
$wpdb -> query ( " DELETE FROM $wpdb->options WHERE option_name = ' $name ' " );
2004-04-24 17:21:19 -04:00
return true ;
}
2003-04-21 17:37:11 -04:00
function get_postdata ( $postid ) {
2004-05-24 04:22:18 -04:00
global $post , $wpdb ;
2003-12-04 20:44:42 -05:00
2004-05-24 04:22:18 -04:00
$post = $wpdb -> get_row ( " SELECT * FROM $wpdb->posts WHERE ID = ' $postid ' " );
2003-05-29 10:04:30 -04:00
$postdata = array (
'ID' => $post -> ID ,
'Author_ID' => $post -> post_author ,
'Date' => $post -> post_date ,
'Content' => $post -> post_content ,
'Excerpt' => $post -> post_excerpt ,
'Title' => $post -> post_title ,
2003-06-01 09:26:54 -04:00
'Category' => $post -> post_category ,
2003-08-05 18:44:38 -04:00
'Lat' => $post -> post_lat ,
'Lon' => $post -> post_lon ,
2003-06-01 09:26:54 -04:00
'post_status' => $post -> post_status ,
'comment_status' => $post -> comment_status ,
'ping_status' => $post -> ping_status ,
2003-12-21 21:46:40 -05:00
'post_password' => $post -> post_password ,
'to_ping' => $post -> to_ping ,
2004-02-13 06:21:30 -05:00
'pinged' => $post -> pinged ,
'post_name' => $post -> post_name
2003-05-29 10:04:30 -04:00
);
2003-06-07 13:19:38 -04:00
return $postdata ;
2003-04-21 17:37:11 -04:00
}
2003-11-12 10:22:47 -05:00
function get_commentdata ( $comment_ID , $no_cache = 0 , $include_unapproved = false ) { // less flexible, but saves DB queries
2004-05-24 04:22:18 -04:00
global $postc , $id , $commentdata , $wpdb ;
2003-04-21 17:37:11 -04:00
if ( $no_cache ) {
2004-05-24 04:22:18 -04:00
$query = " SELECT * FROM $wpdb->comments WHERE comment_ID = ' $comment_ID ' " ;
2003-11-12 10:22:47 -05:00
if ( false == $include_unapproved ) {
$query .= " AND comment_approved = '1' " ;
}
$myrow = $wpdb -> get_row ( $query , ARRAY_A );
2003-04-21 17:37:11 -04:00
} else {
2003-05-29 10:04:30 -04:00
$myrow [ 'comment_ID' ] = $postc -> comment_ID ;
$myrow [ 'comment_post_ID' ] = $postc -> comment_post_ID ;
$myrow [ 'comment_author' ] = $postc -> comment_author ;
$myrow [ 'comment_author_email' ] = $postc -> comment_author_email ;
$myrow [ 'comment_author_url' ] = $postc -> comment_author_url ;
$myrow [ 'comment_author_IP' ] = $postc -> comment_author_IP ;
$myrow [ 'comment_date' ] = $postc -> comment_date ;
$myrow [ 'comment_content' ] = $postc -> comment_content ;
$myrow [ 'comment_karma' ] = $postc -> comment_karma ;
2003-04-21 17:37:11 -04:00
if ( strstr ( $myrow [ 'comment_content' ], '<trackback />' )) {
$myrow [ 'comment_type' ] = 'trackback' ;
} elseif ( strstr ( $myrow [ 'comment_content' ], '<pingback />' )) {
$myrow [ 'comment_type' ] = 'pingback' ;
} else {
$myrow [ 'comment_type' ] = 'comment' ;
}
}
2003-06-07 13:19:38 -04:00
return $myrow ;
2003-04-21 17:37:11 -04:00
}
function get_catname ( $cat_ID ) {
2004-05-24 04:22:18 -04:00
global $cache_catnames , $wpdb ;
2004-04-20 19:03:09 -04:00
if ( ! $cache_catnames ) {
2004-05-24 04:22:18 -04:00
$results = $wpdb -> get_results ( " SELECT * FROM $wpdb->categories " ) or die ( 'Oops, couldn\'t query the db for categories.' );
2003-07-19 18:51:43 -04:00
foreach ( $results as $post ) {
2003-05-29 10:04:30 -04:00
$cache_catnames [ $post -> cat_ID ] = $post -> cat_name ;
2003-04-21 17:37:11 -04:00
}
}
$cat_name = $cache_catnames [ $cat_ID ];
2003-06-07 13:19:38 -04:00
return $cat_name ;
2003-04-21 17:37:11 -04:00
}
function gzip_compression () {
global $gzip_compressed ;
2004-05-01 04:59:40 -04:00
if ( strstr ( $_SERVER [ 'PHP_SELF' ], 'wp-admin' )) return true ;
2003-04-21 17:37:11 -04:00
if ( ! $gzip_compressed ) {
$phpver = phpversion (); //start gzip compression
if ( $phpver >= " 4.0.4pl1 " ) {
2003-12-23 16:31:09 -05:00
if ( extension_loaded ( " zlib " )) {
ob_start ( " ob_gzhandler " );
}
2003-04-21 17:37:11 -04:00
} else if ( $phpver > " 4.0 " ) {
2004-04-20 18:56:47 -04:00
if ( strstr ( $_SERVER [ 'HTTP_ACCEPT_ENCODING' ], 'gzip' )) {
2003-12-23 16:31:09 -05:00
if ( extension_loaded ( " zlib " )) {
$do_gzip_compress = TRUE ;
ob_start ();
ob_implicit_flush ( 0 );
header ( " Content-Encoding: gzip " );
}
2003-04-21 17:37:11 -04:00
}
} //end gzip compression - that piece of script courtesy of the phpBB dev team
$gzip_compressed = 1 ;
}
}
// functions to count the page generation time (from phpBB2)
// ( or just any time between timer_start() and timer_stop() )
2003-06-12 18:45:08 -04:00
function timer_start () {
global $timestart ;
$mtime = microtime ();
$mtime = explode ( " " , $mtime );
$mtime = $mtime [ 1 ] + $mtime [ 0 ];
$timestart = $mtime ;
return true ;
}
function timer_stop ( $display = 0 , $precision = 3 ) { //if called like timer_stop(1), will echo $timetotal
global $timestart , $timeend ;
$mtime = microtime ();
$mtime = explode ( " " , $mtime );
$mtime = $mtime [ 1 ] + $mtime [ 0 ];
$timeend = $mtime ;
$timetotal = $timeend - $timestart ;
if ( $display )
echo number_format ( $timetotal , $precision );
return $timetotal ;
}
2003-04-21 17:37:11 -04:00
2004-03-21 02:36:07 -05:00
function weblog_ping ( $server = '' , $path = '' ) {
2004-05-10 04:13:42 -04:00
$debug = false ;
include_once ( ABSPATH . WPINC . '/class-xmlrpc.php' );
include_once ( ABSPATH . WPINC . '/class-xmlrpcs.php' );
$f = new xmlrpcmsg ( 'weblogUpdates.ping' ,
array ( new xmlrpcval ( get_settings ( 'blogname' ), 'string' ),
new xmlrpcval ( get_settings ( 'home' ) , 'string' )));
$c = new xmlrpc_client ( $path , $server , 80 );
$r = $c -> send ( $f );
2004-05-14 13:31:54 -04:00
if ( '0' != $r ) {
if ( $debug ) {
echo " <h3>Response Object Dump:</h3>
< pre > \n " ;
print_r ( $r );
echo " </pre> \n " ;
}
2004-05-10 04:13:42 -04:00
2004-05-14 13:31:54 -04:00
$v = @ phpxmlrpc_decode ( $r -> value ());
if ( ! $r -> faultCode ()) {
$result [ 'message' ] = " <p class= \" rpcmsg \" > " ;
$result [ 'message' ] = $result [ 'message' ] . $v [ " message " ] . " <br /> \n " ;
$result [ 'message' ] = $result [ 'message' ] . " </p> " ;
} else {
$result [ 'err' ] = $r -> faultCode ();
$result [ 'message' ] = " <!-- \n " ;
$result [ 'message' ] = $result [ 'message' ] . " Fault: " ;
$result [ 'message' ] = $result [ 'message' ] . " Code: " . $r -> faultCode ();
$result [ 'message' ] = $result [ 'message' ] . " Reason ' " . $r -> faultString () . " '<BR> " ;
$result [ 'message' ] = $result [ 'message' ] . " --> \n " ;
}
if ( $debug ) print '<blockquote>' . $result [ 'message' ] . '</blockquote>' ;
}
2004-03-21 02:36:07 -05:00
}
function generic_ping ( $post_id = 0 ) {
$services = get_settings ( 'ping_sites' );
2004-03-25 01:11:28 -05:00
$services = preg_replace ( " |( \ s)+| " , '$1' , $services ); // Kill dupe lines
2004-05-10 04:13:42 -04:00
$services = trim ( $services );
if ( '' != $services ) {
$services = explode ( " \n " , $services );
2004-03-25 18:05:25 -05:00
foreach ( $services as $service ) {
$uri = parse_url ( $service );
weblog_ping ( $uri [ 'host' ], $uri [ 'path' ]);
}
2004-03-21 02:36:07 -05:00
}
}
add_action ( 'publish_post' , 'generic_ping' );
2003-04-21 17:37:11 -04:00
2003-12-21 21:46:40 -05:00
// Send a Trackback
2003-04-21 17:37:11 -04:00
function trackback ( $trackback_url , $title , $excerpt , $ID ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2003-12-21 21:46:40 -05:00
$title = urlencode ( stripslashes ( $title ));
2003-04-21 17:37:11 -04:00
$excerpt = urlencode ( stripslashes ( $excerpt ));
2004-03-01 01:13:32 -05:00
$blog_name = urlencode ( stripslashes ( get_settings ( 'blogname' )));
2003-12-21 21:46:40 -05:00
$tb_url = $trackback_url ;
$url = urlencode ( get_permalink ( $ID ));
2003-04-21 17:37:11 -04:00
$query_string = " title= $title &url= $url &blog_name= $blog_name &excerpt= $excerpt " ;
2003-12-21 21:46:40 -05:00
$trackback_url = parse_url ( $trackback_url );
2004-05-05 04:07:16 -04:00
$http_request = 'POST ' . $trackback_url [ 'path' ] . $trackback_url [ 'query' ] . " HTTP/1.0 \r \n " ;
2003-12-21 21:46:40 -05:00
$http_request .= 'Host: ' . $trackback_url [ 'host' ] . " \r \n " ;
$http_request .= 'Content-Type: application/x-www-form-urlencoded' . " \r \n " ;
$http_request .= 'Content-Length: ' . strlen ( $query_string ) . " \r \n " ;
$http_request .= " \r \n " ;
$http_request .= $query_string ;
$fs = @ fsockopen ( $trackback_url [ 'host' ], 80 );
@ fputs ( $fs , $http_request );
/*
$debug_file = 'trackback.log' ;
$fp = fopen ( $debug_file , 'a' );
fwrite ( $fp , " \n ***** \n Request: \n \n $http_request\n\nResponse : \n \n " );
while ( !@ feof ( $fs )) {
fwrite ( $fp , @ fgets ( $fs , 4096 ));
}
fwrite ( $fp , " \n \n " );
fclose ( $fp );
2003-04-21 17:37:11 -04:00
*/
2003-12-21 21:46:40 -05:00
@ fclose ( $fs );
2004-05-24 04:22:18 -04:00
$wpdb -> query ( " UPDATE $wpdb->posts SET pinged = CONCAT(pinged, ' \n ', ' $tb_url ') WHERE ID = ' $ID ' " );
$wpdb -> query ( " UPDATE $wpdb->posts SET to_ping = REPLACE(to_ping, ' $tb_url ', '') WHERE ID = ' $ID ' " );
2003-04-21 17:37:11 -04:00
return $result ;
}
// trackback - reply
function trackback_response ( $error = 0 , $error_message = '' ) {
if ( $error ) {
echo '<?xml version="1.0" encoding="iso-8859-1"?' . " > \n " ;
echo " <response> \n " ;
echo " <error>1</error> \n " ;
echo " <message> $error_message </message> \n " ;
echo " </response> " ;
} else {
echo '<?xml version="1.0" encoding="iso-8859-1"?' . " > \n " ;
echo " <response> \n " ;
echo " <error>0</error> \n " ;
echo " </response> " ;
}
die ();
}
function make_url_footnote ( $content ) {
preg_match_all ( '/<a(.+?)href=\"(.+?)\"(.*?)>(.+?)<\/a>/' , $content , $matches );
$j = 0 ;
for ( $i = 0 ; $i < count ( $matches [ 0 ]); $i ++ ) {
$links_summary = ( ! $j ) ? " \n " : $links_summary ;
$j ++ ;
$link_match = $matches [ 0 ][ $i ];
$link_number = '[' . ( $i + 1 ) . ']' ;
$link_url = $matches [ 2 ][ $i ];
$link_text = $matches [ 4 ][ $i ];
$content = str_replace ( $link_match , $link_text . ' ' . $link_number , $content );
2004-04-28 03:27:03 -04:00
$link_url = ( strtolower ( substr ( $link_url , 0 , 7 )) != 'http://' ) ? get_settings ( 'home' ) . $link_url : $link_url ;
2003-04-21 17:37:11 -04:00
$links_summary .= " \n " . $link_number . ' ' . $link_url ;
}
$content = strip_tags ( $content );
$content .= $links_summary ;
2003-06-07 13:19:38 -04:00
return $content ;
2003-04-21 17:37:11 -04:00
}
function xmlrpc_getposttitle ( $content ) {
global $post_default_title ;
if ( preg_match ( '/<title>(.+?)<\/title>/is' , $content , $matchtitle )) {
$post_title = $matchtitle [ 0 ];
$post_title = preg_replace ( '/<title>/si' , '' , $post_title );
$post_title = preg_replace ( '/<\/title>/si' , '' , $post_title );
} else {
$post_title = $post_default_title ;
}
2003-06-07 13:19:38 -04:00
return $post_title ;
2003-04-21 17:37:11 -04:00
}
function xmlrpc_getpostcategory ( $content ) {
global $post_default_category ;
if ( preg_match ( '/<category>(.+?)<\/category>/is' , $content , $matchcat )) {
2004-05-22 22:55:10 -04:00
$post_category = trim ( $matchcat [ 1 ], ',' );
$post_category = explode ( ',' , $post_category );
2003-04-21 17:37:11 -04:00
} else {
$post_category = $post_default_category ;
}
2003-06-07 13:19:38 -04:00
return $post_category ;
2003-04-21 17:37:11 -04:00
}
function xmlrpc_removepostdata ( $content ) {
$content = preg_replace ( '/<title>(.+?)<\/title>/si' , '' , $content );
$content = preg_replace ( '/<category>(.+?)<\/category>/si' , '' , $content );
$content = trim ( $content );
2003-06-07 13:19:38 -04:00
return $content ;
2003-04-21 17:37:11 -04:00
}
function debug_fopen ( $filename , $mode ) {
global $debug ;
if ( $debug == 1 ) {
$fp = fopen ( $filename , $mode );
return $fp ;
} else {
return false ;
}
}
function debug_fwrite ( $fp , $string ) {
global $debug ;
if ( $debug == 1 ) {
fwrite ( $fp , $string );
}
}
function debug_fclose ( $fp ) {
global $debug ;
if ( $debug == 1 ) {
fclose ( $fp );
}
}
function pingback ( $content , $post_ID ) {
2004-04-27 19:17:16 -04:00
include_once ( ABSPATH . WPINC . '/class-xmlrpc.php' );
include_once ( ABSPATH . WPINC . '/class-xmlrpcs.php' );
2003-04-21 17:37:11 -04:00
// original code by Mort (http://mort.mine.nu:8080)
2004-02-26 11:15:48 -05:00
global $wp_version ;
2003-04-21 17:37:11 -04:00
$log = debug_fopen ( './pingback.log' , 'a' );
$post_links = array ();
debug_fwrite ( $log , 'BEGIN ' . time () . " \n " );
// Variables
$ltrs = '\w' ;
$gunk = '/#~:.?+=&%@!\-' ;
$punc = '.:?\-' ;
$any = $ltrs . $gunk . $punc ;
$pingback_str_dquote = 'rel="pingback"' ;
$pingback_str_squote = 'rel=\'pingback\'' ;
$x_pingback_str = 'x-pingback: ' ;
$pingback_href_original_pos = 27 ;
// Step 1
// Parsing the post, external links (if any) are stored in the $post_links array
2003-12-21 22:26:31 -05:00
// This regexp comes straight from phpfreaks.com
2003-04-21 17:37:11 -04:00
// http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php
preg_match_all ( " { \ b http : [ $any ] +? (?= [ $punc ] * [^ $any ] | $ )}x " , $content , $post_links_temp );
// Debug
debug_fwrite ( $log , 'Post contents:' );
debug_fwrite ( $log , $content . " \n " );
// Step 2.
// Walking thru the links array
// first we get rid of links pointing to sites, not to specific files
// Example:
// http://dummy-weblog.org
// http://dummy-weblog.org/
// http://dummy-weblog.org/post.php
// We don't wanna ping first and second types, even if they have a valid <link/>
foreach ( $post_links_temp [ 0 ] as $link_test ){
$test = parse_url ( $link_test );
if ( isset ( $test [ 'query' ])) {
$post_links [] = $link_test ;
} elseif (( $test [ 'path' ] != '/' ) && ( $test [ 'path' ] != '' )) {
$post_links [] = $link_test ;
}
}
foreach ( $post_links as $pagelinkedto ){
debug_fwrite ( $log , 'Processing -- ' . $pagelinkedto . " \n \n " );
$bits = parse_url ( $pagelinkedto );
if ( ! isset ( $bits [ 'host' ])) {
debug_fwrite ( $log , 'Couldn\'t find a hostname for ' . $pagelinkedto . " \n \n " );
continue ;
}
$host = $bits [ 'host' ];
$path = isset ( $bits [ 'path' ]) ? $bits [ 'path' ] : '' ;
if ( isset ( $bits [ 'query' ])) {
$path .= '?' . $bits [ 'query' ];
}
if ( ! $path ) {
$path = '/' ;
}
$port = isset ( $bits [ 'port' ]) ? $bits [ 'port' ] : 80 ;
// Try to connect to the server at $host
$fp = fsockopen ( $host , $port , $errno , $errstr , 30 );
if ( ! $fp ) {
debug_fwrite ( $log , 'Couldn\'t open a connection to ' . $host . " \n \n " );
continue ;
}
// Send the GET request
2003-12-21 22:26:31 -05:00
$request = " GET $path HTTP/1.1 \r \n Host: $host\r\nUser -Agent: WordPress/ $wp_version PHP/ " . phpversion () . " \r \n \r \n " ;
2003-04-21 17:37:11 -04:00
ob_end_flush ();
fputs ( $fp , $request );
// Start receiving headers and content
$contents = '' ;
$headers = '' ;
$gettingHeaders = true ;
$found_pingback_server = 0 ;
while ( ! feof ( $fp )) {
$line = fgets ( $fp , 4096 );
if ( trim ( $line ) == '' ) {
$gettingHeaders = false ;
}
if ( ! $gettingHeaders ) {
$contents .= trim ( $line ) . " \n " ;
$pingback_link_offset_dquote = strpos ( $contents , $pingback_str_dquote );
$pingback_link_offset_squote = strpos ( $contents , $pingback_str_squote );
} else {
$headers .= trim ( $line ) . " \n " ;
$x_pingback_header_offset = strpos ( strtolower ( $headers ), $x_pingback_str );
}
if ( $x_pingback_header_offset ) {
preg_match ( '#x-pingback: (.+)#is' , $headers , $matches );
$pingback_server_url = trim ( $matches [ 1 ]);
debug_fwrite ( $log , " Pingback server found from X-Pingback header @ $pingback_server_url\n " );
$found_pingback_server = 1 ;
break ;
}
if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) {
$quote = ( $pingback_link_offset_dquote ) ? '"' : '\'' ;
$pingback_link_offset = ( $quote == '"' ) ? $pingback_link_offset_dquote : $pingback_link_offset_squote ;
$pingback_href_pos = @ strpos ( $contents , 'href=' , $pingback_link_offset );
$pingback_href_start = $pingback_href_pos + 6 ;
$pingback_href_end = @ strpos ( $contents , $quote , $pingback_href_start );
$pingback_server_url_len = $pingback_href_end - $pingback_href_start ;
$pingback_server_url = substr ( $contents , $pingback_href_start , $pingback_server_url_len );
debug_fwrite ( $log , " Pingback server found from Pingback <link /> tag @ $pingback_server_url\n " );
$found_pingback_server = 1 ;
break ;
}
}
if ( ! $found_pingback_server ) {
debug_fwrite ( $log , " Pingback server not found \n \n ************************* \n \n " );
@ fclose ( $fp );
} else {
debug_fwrite ( $log , " \n \n Pingback server data \n " );
// Assuming there's a "http://" bit, let's get rid of it
$host_clear = substr ( $pingback_server_url , 7 );
// the trailing slash marks the end of the server name
$host_end = strpos ( $host_clear , '/' );
// Another clear cut
$host_len = $host_end - $host_start ;
$host = substr ( $host_clear , 0 , $host_len );
debug_fwrite ( $log , 'host: ' . $host . " \n " );
// If we got the server name right, the rest of the string is the server path
$path = substr ( $host_clear , $host_end );
debug_fwrite ( $log , 'path: ' . $path . " \n \n " );
// Now, the RPC call
$method = 'pingback.ping' ;
debug_fwrite ( $log , 'Page Linked To: ' . $pagelinkedto . " \n " );
debug_fwrite ( $log , 'Page Linked From: ' );
2003-12-21 22:26:31 -05:00
$pagelinkedfrom = get_permalink ( $post_ID );
2003-04-21 17:37:11 -04:00
debug_fwrite ( $log , $pagelinkedfrom . " \n " );
$client = new xmlrpc_client ( $path , $host , 80 );
$message = new xmlrpcmsg ( $method , array ( new xmlrpcval ( $pagelinkedfrom ), new xmlrpcval ( $pagelinkedto )));
$result = $client -> send ( $message );
if ( $result ){
if ( ! $result -> value ()){
debug_fwrite ( $log , $result -> faultCode () . ' -- ' . $result -> faultString ());
} else {
2004-03-30 20:25:12 -05:00
$value = phpxmlrpc_decode ( $result -> value ());
2003-04-21 17:37:11 -04:00
if ( is_array ( $value )) {
$value_arr = '' ;
foreach ( $value as $blah ) {
$value_arr .= $blah . ' |||| ' ;
}
debug_fwrite ( $log , $value_arr );
} else {
debug_fwrite ( $log , $value );
}
}
}
@ fclose ( $fp );
}
}
debug_fwrite ( $log , " \n END: " . time () . " \n **************************** \n \r " );
debug_fclose ( $log );
}
2004-04-25 22:34:07 -04:00
function doGeoUrlHeader ( $post_list = '' ) {
global $posts ;
2004-05-14 17:59:51 -04:00
if ( $posts && 1 === count ( $posts ) && ! empty ( $posts [ 0 ] -> post_lat )) {
2003-08-05 18:44:38 -04:00
// there's only one result see if it has a geo code
2004-05-07 19:56:33 -04:00
$row = $posts [ 0 ];
2003-08-05 18:44:38 -04:00
$lat = $row -> post_lat ;
$lon = $row -> post_lon ;
$title = $row -> post_title ;
if (( $lon != null ) && ( $lat != null ) ) {
2003-11-19 13:30:12 -05:00
echo " <meta name= \" ICBM \" content= \" " . $lat . " , " . $lon . " \" /> \n " ;
2004-04-22 03:41:57 -04:00
echo " <meta name= \" DC.title \" content= \" " . convert_chars ( strip_tags ( get_bloginfo ( " name " ))) . " - " . $title . " \" /> \n " ;
2003-11-19 13:30:12 -05:00
echo " <meta name= \" geo.position \" content= \" " . $lat . " ; " . $lon . " \" /> \n " ;
2003-08-05 18:44:38 -04:00
return ;
}
} else {
2004-03-01 14:55:45 -05:00
if ( get_settings ( 'use_default_geourl' )) {
2003-08-05 18:44:38 -04:00
// send the default here
2004-05-07 19:56:33 -04:00
echo " <meta name='ICBM' content= \" " . get_settings ( 'default_geourl_lat' ) . " , " . get_settings ( 'default_geourl_lon' ) . " \" /> \n " ;
echo " <meta name='DC.title' content= \" " . convert_chars ( strip_tags ( get_bloginfo ( " name " ))) . " \" /> \n " ;
echo " <meta name='geo.position' content= \" " . get_settings ( 'default_geourl_lat' ) . " ; " . get_settings ( 'default_geourl_lon' ) . " \" /> \n " ;
2003-08-05 18:44:38 -04:00
}
}
}
function getRemoteFile ( $host , $path ) {
2003-10-04 14:23:59 -04:00
$fp = fsockopen ( $host , 80 , $errno , $errstr );
2003-08-05 18:44:38 -04:00
if ( $fp ) {
fputs ( $fp , " GET $path HTTP/1.0 \r \n Host: $host\r\n\r\n " );
while ( $line = fgets ( $fp , 4096 )) {
$lines [] = $line ;
}
fclose ( $fp );
return $lines ;
} else {
return false ;
}
}
function pingGeoURL ( $blog_ID ) {
2004-04-28 03:27:03 -04:00
$ourUrl = get_settings ( 'home' ) . " /index.php?p= " . $blog_ID ;
2003-08-05 18:44:38 -04:00
$host = " geourl.org " ;
$path = " /ping/?p= " . $ourUrl ;
getRemoteFile ( $host , $path );
}
2003-11-12 10:22:47 -05:00
/* wp_set_comment_status :
part of otaku42 ' s comment moderation hack
changes the status of a comment according to $comment_status .
allowed values :
hold : set comment_approve field to 0
approve : set comment_approve field to 1
delete : remove comment out of database
returns true if change could be applied
returns false on database error or invalid value for $comment_status
*/
function wp_set_comment_status ( $comment_id , $comment_status ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2003-11-12 10:22:47 -05:00
switch ( $comment_status ) {
2003-11-15 03:58:18 -05:00
case 'hold' :
2004-05-24 04:22:18 -04:00
$query = " UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID=' $comment_id ' LIMIT 1 " ;
2003-11-15 03:58:18 -05:00
break ;
case 'approve' :
2004-05-24 04:22:18 -04:00
$query = " UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID=' $comment_id ' LIMIT 1 " ;
2003-11-15 03:58:18 -05:00
break ;
case 'delete' :
2004-05-24 04:22:18 -04:00
$query = " DELETE FROM $wpdb->comments WHERE comment_ID=' $comment_id ' LIMIT 1 " ;
2003-11-15 03:58:18 -05:00
break ;
default :
return false ;
2003-11-12 10:22:47 -05:00
}
if ( $wpdb -> query ( $query )) {
2004-05-26 23:49:23 -04:00
do_action ( 'wp_set_comment_status' , $comment_id );
2003-11-15 03:58:18 -05:00
return true ;
2003-11-12 10:22:47 -05:00
} else {
2003-11-15 03:58:18 -05:00
return false ;
2003-11-12 10:22:47 -05:00
}
}
/* wp_get_comment_status
part of otaku42 ' s comment moderation hack
gets the current status of a comment
returned values :
" approved " : comment has been approved
" unapproved " : comment has not been approved
" deleted " : comment not found in database
a ( boolean ) false signals an error
*/
function wp_get_comment_status ( $comment_id ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2003-11-12 10:22:47 -05:00
2004-05-24 04:22:18 -04:00
$result = $wpdb -> get_var ( " SELECT comment_approved FROM $wpdb->comments WHERE comment_ID=' $comment_id ' LIMIT 1 " );
2003-11-12 10:22:47 -05:00
if ( $result == NULL ) {
2003-11-24 19:46:52 -05:00
return " deleted " ;
2003-11-12 10:22:47 -05:00
} else if ( $result == " 1 " ) {
2003-11-24 19:46:52 -05:00
return " approved " ;
2003-11-12 10:22:47 -05:00
} else if ( $result == " 0 " ) {
2003-11-24 19:46:52 -05:00
return " unapproved " ;
2003-11-12 10:22:47 -05:00
} else {
2003-11-24 19:46:52 -05:00
return false ;
2003-11-12 10:22:47 -05:00
}
}
2003-12-07 04:45:15 -05:00
function wp_notify_postauthor ( $comment_id , $comment_type = 'comment' ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2003-11-12 10:22:47 -05:00
global $querystring_start , $querystring_equal , $querystring_separator ;
2004-05-24 04:22:18 -04:00
$comment = $wpdb -> get_row ( " SELECT * FROM $wpdb->comments WHERE comment_ID=' $comment_id ' LIMIT 1 " );
$post = $wpdb -> get_row ( " SELECT * FROM $wpdb->posts WHERE ID=' $comment->comment_post_ID ' LIMIT 1 " );
$user = $wpdb -> get_row ( " SELECT * FROM $wpdb->users WHERE ID=' $post->post_author ' LIMIT 1 " );
2003-11-12 10:22:47 -05:00
2003-11-23 17:13:33 -05:00
if ( '' == $user -> user_email ) return false ; // If there's no email to send the comment to
2003-11-12 10:22:47 -05:00
$comment_author_domain = gethostbyaddr ( $comment -> comment_author_IP );
2004-03-01 01:13:32 -05:00
$blogname = stripslashes ( get_settings ( 'blogname' ));
2003-11-23 17:13:33 -05:00
if ( 'comment' == $comment_type ) {
$notify_message = " New comment on your post # $comment->comment_post_ID \" " . stripslashes ( $post -> post_title ) . " \" \r \n \r \n " ;
$notify_message .= " Author : $comment->comment_author (IP: $comment->comment_author_IP , $comment_author_domain ) \r \n " ;
$notify_message .= " E-mail : $comment->comment_author_email\r\n " ;
$notify_message .= " URI : $comment->comment_author_url\r\n " ;
$notify_message .= " Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput= $comment->comment_author_IP\r\n " ;
$notify_message .= " Comment: \r \n " . stripslashes ( $comment -> comment_content ) . " \r \n \r \n " ;
$notify_message .= " You can see all comments on this post here: \r \n " ;
$subject = '[' . $blogname . '] Comment: "' . stripslashes ( $post -> post_title ) . '"' ;
} elseif ( 'trackback' == $comment_type ) {
$notify_message = " New trackback on your post # $comment_post_ID \" " . stripslashes ( $post -> post_title ) . " \" \r \n \r \n " ;
$notify_message .= " Website: $comment->comment_author (IP: $comment->comment_author_IP , $comment_author_domain ) \r \n " ;
$notify_message .= " URI : $comment->comment_author_url\r\n " ;
$notify_message .= " Excerpt: \n " . stripslashes ( $comment -> comment_content ) . " \r \n \r \n " ;
$notify_message .= " You can see all trackbacks on this post here: \r \n " ;
$subject = '[' . $blogname . '] Trackback: "' . stripslashes ( $post -> post_title ) . '"' ;
} elseif ( 'pingback' == $comment_type ) {
$notify_message = " New pingback on your post # $comment_post_ID \" " . stripslashes ( $post -> post_title ) . " \" \r \n \r \n " ;
$notify_message .= " Website: $comment->comment_author\r\n " ;
$notify_message .= " URI : $comment->comment_author_url\r\n " ;
$notify_message .= " Excerpt: \n [...] $original_context [...] \r \n \r \n " ;
$notify_message .= " You can see all pingbacks on this post here: \r \n " ;
$subject = '[' . $blogname . '] Pingback: "' . stripslashes ( $post -> post_title ) . '"' ;
}
2003-12-11 13:10:43 -05:00
$notify_message .= get_permalink ( $comment -> comment_post_ID ) . '#comments' ;
2003-11-23 17:13:33 -05:00
if ( '' == $comment -> comment_author_email || '' == $comment -> comment_author ) {
2004-04-20 18:56:47 -04:00
$from = " From: \" $blogname\ " < wordpress @ " . $_SERVER['SERVER_NAME'] . '>';
2003-11-12 10:22:47 -05:00
} else {
2003-11-23 17:13:33 -05:00
$from = 'From: "' . stripslashes ( $comment -> comment_author ) . " \" < $comment->comment_author_email > " ;
2003-11-12 10:22:47 -05:00
}
2004-02-21 17:53:05 -05:00
$message_headers = " MIME-Version: 1.0 \r \n "
. " $from\r\n "
2004-03-01 01:13:32 -05:00
. " Content-Type: text/plain; charset= \" " . get_settings ( 'blog_charset' ) . " \" \r \n " ;
2004-02-21 17:53:05 -05:00
@ mail ( $user -> user_email , $subject , $notify_message , $message_headers );
2003-11-23 17:13:33 -05:00
2003-11-12 10:22:47 -05:00
return true ;
}
/* wp_notify_moderator
notifies the moderator of the blog ( usually the admin )
about a new comment that waits for approval
always returns true
*/
function wp_notify_moderator ( $comment_id ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2003-11-12 10:22:47 -05:00
global $querystring_start , $querystring_equal , $querystring_separator ;
2004-05-24 04:22:18 -04:00
$comment = $wpdb -> get_row ( " SELECT * FROM $wpdb->comments WHERE comment_ID=' $comment_id ' LIMIT 1 " );
$post = $wpdb -> get_row ( " SELECT * FROM $wpdb->posts WHERE ID=' $comment->comment_post_ID ' LIMIT 1 " );
$user = $wpdb -> get_row ( " SELECT * FROM $wpdb->users WHERE ID=' $post->post_author ' LIMIT 1 " );
2003-11-12 10:22:47 -05:00
$comment_author_domain = gethostbyaddr ( $comment -> comment_author_IP );
2004-05-24 04:22:18 -04:00
$comments_waiting = $wpdb -> get_var ( " SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0' " );
2003-11-12 10:22:47 -05:00
$notify_message = " A new comment on the post # $comment->comment_post_ID \" " . stripslashes ( $post -> post_title ) . " \" is waiting for your approval \r \n \r \n " ;
$notify_message .= " Author : $comment->comment_author (IP: $comment->comment_author_IP , $comment_author_domain ) \r \n " ;
$notify_message .= " E-mail : $comment->comment_author_email\r\n " ;
$notify_message .= " URL : $comment->comment_author_url\r\n " ;
$notify_message .= " Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput= $comment->comment_author_IP\r\n " ;
$notify_message .= " Comment: \r \n " . stripslashes ( $comment -> comment_content ) . " \r \n \r \n " ;
2004-02-26 11:15:48 -05:00
$notify_message .= " To approve this comment, visit: " . get_settings ( 'siteurl' ) . " /wp-admin/post.php?action=mailapprovecomment&p= " . $comment -> comment_post_ID . " &comment= $comment_id\r\n " ;
$notify_message .= " To delete this comment, visit: " . get_settings ( 'siteurl' ) . " /wp-admin/post.php?action=confirmdeletecomment&p= " . $comment -> comment_post_ID . " &comment= $comment_id\r\n " ;
2003-11-12 10:22:47 -05:00
$notify_message .= " Currently $comments_waiting comments are waiting for approval. Please visit the moderation panel: \r \n " ;
2004-02-26 11:15:48 -05:00
$notify_message .= get_settings ( 'siteurl' ) . " /wp-admin/moderation.php \r \n " ;
2003-11-12 10:22:47 -05:00
2004-03-01 01:13:32 -05:00
$subject = '[' . stripslashes ( get_settings ( 'blogname' )) . '] Please approve: "' . stripslashes ( $post -> post_title ) . '"' ;
2003-11-12 10:22:47 -05:00
$admin_email = get_settings ( " admin_email " );
$from = " From: $admin_email " ;
2004-02-21 17:53:05 -05:00
$message_headers = " MIME-Version: 1.0 \r \n "
. " $from\r\n "
2004-03-01 01:13:32 -05:00
. " Content-Type: text/plain; charset= \" " . get_settings ( 'blog_charset' ) . " \" \r \n " ;
2004-02-21 17:53:05 -05:00
@ mail ( $admin_email , $subject , $notify_message , $message_headers );
2003-11-12 10:22:47 -05:00
return true ;
}
2003-10-17 15:26:05 -04:00
2003-12-18 04:36:13 -05:00
function start_wp () {
2003-10-27 02:00:42 -05:00
global $post , $id , $postdata , $authordata , $day , $preview , $page , $pages , $multipage , $more , $numpages ;
global $pagenow ;
if ( ! $preview ) {
$id = $post -> ID ;
} else {
$id = 0 ;
$postdata = array (
'ID' => 0 ,
2004-04-20 18:56:47 -04:00
'Author_ID' => $_GET [ 'preview_userid' ],
'Date' => $_GET [ 'preview_date' ],
'Content' => $_GET [ 'preview_content' ],
'Excerpt' => $_GET [ 'preview_excerpt' ],
'Title' => $_GET [ 'preview_title' ],
'Category' => $_GET [ 'preview_category' ],
2003-10-27 02:00:42 -05:00
'Notify' => 1
);
}
$authordata = get_userdata ( $post -> post_author );
2004-04-26 23:59:13 -04:00
2004-03-24 21:21:40 -05:00
$day = mysql2date ( 'd.m.y' , $post -> post_date );
$currentmonth = mysql2date ( 'm' , $post -> post_date );
2003-10-27 02:00:42 -05:00
$numpages = 1 ;
if ( ! $page )
$page = 1 ;
if ( isset ( $p ))
$more = 1 ;
$content = $post -> post_content ;
if ( preg_match ( '/<!--nextpage-->/' , $post -> post_content )) {
if ( $page > 1 )
$more = 1 ;
$multipage = 1 ;
$content = stripslashes ( $post -> post_content );
$content = str_replace ( " \n <!--nextpage--> \n " , '<!--nextpage-->' , $content );
$content = str_replace ( " \n <!--nextpage--> " , '<!--nextpage-->' , $content );
$content = str_replace ( " <!--nextpage--> \n " , '<!--nextpage-->' , $content );
$pages = explode ( '<!--nextpage-->' , $content );
$numpages = count ( $pages );
} else {
$pages [ 0 ] = stripslashes ( $post -> post_content );
$multipage = 0 ;
}
return true ;
}
function is_new_day () {
global $day , $previousday ;
if ( $day != $previousday ) {
return ( 1 );
} else {
return ( 0 );
}
}
2004-02-16 22:00:20 -05:00
// Filters: these are the core of WP's plugin architecture
2003-10-27 02:00:42 -05:00
function apply_filters ( $tag , $string ) {
2003-12-18 04:36:13 -05:00
global $wp_filter ;
if ( isset ( $wp_filter [ 'all' ])) {
2004-02-09 06:58:49 -05:00
foreach ( $wp_filter [ 'all' ] as $priority => $functions ) {
if ( isset ( $wp_filter [ $tag ][ $priority ]))
$wp_filter [ $tag ][ $priority ] = array_merge ( $wp_filter [ 'all' ][ $priority ], $wp_filter [ $tag ][ $priority ]);
else
$wp_filter [ $tag ][ $priority ] = array_merge ( $wp_filter [ 'all' ][ $priority ], array ());
$wp_filter [ $tag ][ $priority ] = array_unique ( $wp_filter [ $tag ][ $priority ]);
}
2003-10-27 02:00:42 -05:00
}
2004-02-09 06:58:49 -05:00
2003-12-18 04:36:13 -05:00
if ( isset ( $wp_filter [ $tag ])) {
2004-02-09 06:58:49 -05:00
ksort ( $wp_filter [ $tag ]);
foreach ( $wp_filter [ $tag ] as $priority => $functions ) {
foreach ( $functions as $function ) {
$string = $function ( $string );
}
2003-10-27 02:00:42 -05:00
}
}
return $string ;
}
2004-02-09 06:58:49 -05:00
function add_filter ( $tag , $function_to_add , $priority = 10 ) {
2003-12-18 04:36:13 -05:00
global $wp_filter ;
2004-02-09 06:58:49 -05:00
// So the format is wp_filter['tag']['array of priorities']['array of functions']
if ( !@ in_array ( $function_to_add , $wp_filter [ $tag ][ " $priority " ])) {
$wp_filter [ $tag ][ " $priority " ][] = $function_to_add ;
}
return true ;
}
function remove_filter ( $tag , $function_to_remove , $priority = 10 ) {
global $wp_filter ;
if ( @ in_array ( $function_to_remove , $wp_filter [ $tag ][ " $priority " ])) {
foreach ( $wp_filter [ $tag ][ " $priority " ] as $function ) {
if ( $function_to_remove != $function ) {
$new_function_list [] = $function ;
2003-10-27 02:00:42 -05:00
}
}
2004-02-09 06:58:49 -05:00
$wp_filter [ $tag ][ " $priority " ] = $new_function_list ;
2003-10-27 02:00:42 -05:00
}
2004-02-09 06:58:49 -05:00
//die(var_dump($wp_filter));
2003-10-27 02:00:42 -05:00
return true ;
}
2004-02-16 22:00:20 -05:00
// The *_action functions are just aliases for the *_filter functions, they take special strings instead of generic content
function do_action ( $tag , $string ) {
2004-03-25 01:11:28 -05:00
return apply_filters ( $tag , $string );
2004-02-16 22:00:20 -05:00
}
function add_action ( $tag , $function_to_add , $priority = 10 ) {
add_filter ( $tag , $function_to_add , $priority );
}
function remove_action ( $tag , $function_to_remove , $priority = 10 ) {
remove_filter ( $tag , $function_to_remove , $priority );
}
2004-02-16 21:50:57 -05:00
/* rewrite_rules
* Construct rewrite matches and queries from permalink structure .
* matches - The name of the match array to use in the query strings .
* If empty , $ 1 , $ 2 , $ 3 , etc . are used .
* Returns an associate array of matches and queries .
*/
2004-03-08 22:55:01 -05:00
function rewrite_rules ( $matches = '' , $permalink_structure = '' ) {
2004-02-16 21:50:57 -05:00
function preg_index ( $number , $matches = '' ) {
$match_prefix = '$' ;
$match_suffix = '' ;
if ( ! empty ( $matches )) {
$match_prefix = '$' . $matches . '[' ;
$match_suffix = ']' ;
}
return " $match_prefix $number $match_suffix " ;
}
$rewrite = array ();
if ( empty ( $permalink_structure )) {
2004-03-08 22:55:01 -05:00
$permalink_structure = get_settings ( 'permalink_structure' );
if ( empty ( $permalink_structure )) {
return $rewrite ;
}
2004-02-16 21:50:57 -05:00
}
2004-05-05 03:34:41 -04:00
$rewritecode =
array (
'%year%' ,
'%monthnum%' ,
'%day%' ,
'%hour%' ,
'%minute%' ,
'%second%' ,
'%postname%' ,
'%post_id%'
);
$rewritereplace =
array (
'([0-9]{4})?' ,
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
'([0-9]{1,2})?' ,
'([_0-9a-z-]+)?' ,
'([0-9]+)?'
);
$queryreplace =
array (
'year=' ,
'monthnum=' ,
'day=' ,
'hour=' ,
'minute=' ,
'second=' ,
'name=' ,
'p='
);
2004-02-16 21:50:57 -05:00
$match = str_replace ( '/' , '/?' , $permalink_structure );
$match = preg_replace ( '|/[?]|' , '' , $match , 1 );
$match = str_replace ( $rewritecode , $rewritereplace , $match );
$match = preg_replace ( '|[?]|' , '' , $match , 1 );
2004-05-14 04:47:01 -04:00
$feedmatch = trailingslashit ( str_replace ( '?/?' , '/' , $match ));
2004-02-16 21:50:57 -05:00
$trackbackmatch = $feedmatch ;
preg_match_all ( '/%.+?%/' , $permalink_structure , $tokens );
$query = 'index.php?' ;
$feedquery = 'wp-feed.php?' ;
$trackbackquery = 'wp-trackback.php?' ;
for ( $i = 0 ; $i < count ( $tokens [ 0 ]); ++ $i ) {
if ( 0 < $i ) {
$query .= '&' ;
$feedquery .= '&' ;
$trackbackquery .= '&' ;
}
$query_token = str_replace ( $rewritecode , $queryreplace , $tokens [ 0 ][ $i ]) . preg_index ( $i + 1 , $matches );
$query .= $query_token ;
$feedquery .= $query_token ;
$trackbackquery .= $query_token ;
}
++ $i ;
// Add post paged stuff
2004-03-08 00:12:11 -05:00
$match .= '([0-9]+)?/?$' ;
2004-02-16 21:50:57 -05:00
$query .= '&page=' . preg_index ( $i , $matches );
// Add post feed stuff
2004-03-08 00:12:11 -05:00
$feedregex = '(feed|rdf|rss|rss2|atom)/?$' ;
2004-02-16 21:50:57 -05:00
$feedmatch .= $feedregex ;
$feedquery .= '&feed=' . preg_index ( $i , $matches );
// Add post trackback stuff
2004-03-08 00:12:11 -05:00
$trackbackregex = 'trackback/?$' ;
2004-02-16 21:50:57 -05:00
$trackbackmatch .= $trackbackregex ;
// Site feed
2004-03-08 22:55:01 -05:00
$sitefeedmatch = 'feed/?([_0-9a-z-]+)?/?$' ;
2004-05-19 01:59:21 -04:00
$sitefeedquery = 'wp-feed.php?feed=' . preg_index ( 1 , $matches );
2004-02-16 21:50:57 -05:00
// Site comment feed
2004-03-08 22:55:01 -05:00
$sitecommentfeedmatch = 'comments/feed/?([_0-9a-z-]+)?/?$' ;
2004-05-19 01:59:21 -04:00
$sitecommentfeedquery = 'wp-feed.php?feed=' . preg_index ( 1 , $matches ) . '&withcomments=1' ;
2004-02-16 21:50:57 -05:00
// Code for nice categories and authors, currently not very flexible
$front = substr ( $permalink_structure , 0 , strpos ( $permalink_structure , '%' ));
2004-05-08 22:52:27 -04:00
if ( '' == get_settings ( 'category_base' ) )
$catmatch = $front . 'category/' ;
else
$catmatch = get_settings ( 'category_base' ) . '/' ;
2004-02-16 21:50:57 -05:00
$catmatch = preg_replace ( '|^/+|' , '' , $catmatch );
$catfeedmatch = $catmatch . '(.*)/' . $feedregex ;
$catfeedquery = 'wp-feed.php?category_name=' . preg_index ( 1 , $matches ) . '&feed=' . preg_index ( 2 , $matches );
$catmatch = $catmatch . '?(.*)' ;
$catquery = 'index.php?category_name=' . preg_index ( 1 , $matches );
$authormatch = $front . 'author/' ;
$authormatch = preg_replace ( '|^/+|' , '' , $authormatch );
$authorfeedmatch = $authormatch . '(.*)/' . $feedregex ;
$authorfeedquery = 'wp-feed.php?author_name=' . preg_index ( 1 , $matches ) . '&feed=' . preg_index ( 2 , $matches );
$authormatch = $authormatch . '?(.*)' ;
$authorquery = 'index.php?author_name=' . preg_index ( 1 , $matches );
$rewrite = array (
$catfeedmatch => $catfeedquery ,
$catmatch => $catquery ,
$authorfeedmatch => $authorfeedquery ,
$authormatch => $authorquery ,
$match => $query ,
$feedmatch => $feedquery ,
2004-03-08 00:12:11 -05:00
$trackbackmatch => $trackbackquery ,
2004-02-16 21:50:57 -05:00
$sitefeedmatch => $sitefeedquery ,
$sitecommentfeedmatch => $sitecommentfeedquery
);
return $rewrite ;
}
2004-02-21 09:10:07 -05:00
function get_posts ( $args ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2004-02-21 09:10:07 -05:00
parse_str ( $args , $r );
if ( ! isset ( $r [ 'numberposts' ])) $r [ 'numberposts' ] = 5 ;
if ( ! isset ( $r [ 'offset' ])) $r [ 'offset' ] = 0 ;
// The following not implemented yet
if ( ! isset ( $r [ 'category' ])) $r [ 'category' ] = '' ;
if ( ! isset ( $r [ 'orderby' ])) $r [ 'orderby' ] = '' ;
if ( ! isset ( $r [ 'order' ])) $r [ 'order' ] = '' ;
2004-03-24 21:21:40 -05:00
$now = current_time ( 'mysql' );
2004-02-21 09:10:07 -05:00
2004-05-24 04:22:18 -04:00
$posts = $wpdb -> get_results ( " SELECT DISTINCT * FROM $wpdb->posts WHERE post_date <= ' $now ' AND (post_status = 'publish') GROUP BY $wpdb->posts .ID ORDER BY post_date DESC LIMIT " . $r [ 'offset' ] . ',' . $r [ 'numberposts' ]);
2004-02-21 09:10:07 -05:00
return $posts ;
}
2004-03-21 03:31:33 -05:00
function check_comment ( $author , $email , $url , $comment , $user_ip ) {
2004-04-06 20:48:19 -04:00
if ( 1 == get_settings ( 'comment_moderation' )) return false ; // If moderation is set to manual
2004-05-09 18:36:47 -04:00
if ( ( count ( explode ( 'http:' , $comment )) - 1 ) >= get_settings ( 'comment_max_links' ) )
return false ; // Check # of external links
2004-04-06 20:48:19 -04:00
if ( '' == trim ( get_settings ( 'moderation_keys' ) ) ) return true ; // If moderation keys are empty
2004-03-21 03:31:33 -05:00
$words = explode ( " \n " , get_settings ( 'moderation_keys' ) );
foreach ( $words as $word ) {
$word = trim ( $word );
$pattern = " # $word #i " ;
if ( preg_match ( $pattern , $author ) ) return false ;
if ( preg_match ( $pattern , $email ) ) return false ;
if ( preg_match ( $pattern , $url ) ) return false ;
if ( preg_match ( $pattern , $comment ) ) return false ;
if ( preg_match ( $pattern , $user_ip ) ) return false ;
}
2004-03-25 05:11:58 -05:00
2004-04-06 20:48:19 -04:00
return true ;
2004-03-21 03:31:33 -05:00
}
2004-05-23 22:55:39 -04:00
function query_posts ( $query ) {
2004-05-24 21:16:49 -04:00
global $wpdb , $pagenow , $request ;
2004-05-23 22:55:39 -04:00
parse_str ( $query );
// First let's clear some variables
$whichcat = '' ;
$whichauthor = '' ;
$result = '' ;
$where = '' ;
$limits = '' ;
$distinct = '' ;
$join = '' ;
$add_hours = intval ( get_settings ( 'gmt_offset' ));
$add_minutes = intval ( 60 * ( get_settings ( 'gmt_offset' ) - $add_hours ));
$wp_posts_post_date_field = " post_date " ; // "DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)";
// If a month is specified in the querystring, load that month
if ( '' != $m ) {
$m = '' . preg_replace ( '|[^0-9]|' , '' , $m );
$where .= ' AND YEAR(post_date)=' . substr ( $m , 0 , 4 );
if ( strlen ( $m ) > 5 )
$where .= ' AND MONTH(post_date)=' . substr ( $m , 4 , 2 );
if ( strlen ( $m ) > 7 )
$where .= ' AND DAYOFMONTH(post_date)=' . substr ( $m , 6 , 2 );
if ( strlen ( $m ) > 9 )
$where .= ' AND HOUR(post_date)=' . substr ( $m , 8 , 2 );
if ( strlen ( $m ) > 11 )
$where .= ' AND MINUTE(post_date)=' . substr ( $m , 10 , 2 );
if ( strlen ( $m ) > 13 )
$where .= ' AND SECOND(post_date)=' . substr ( $m , 12 , 2 );
}
if ( '' != $hour ) {
$hour = '' . intval ( $hour );
$where .= " AND HOUR(post_date)=' $hour ' " ;
}
if ( '' != $minute ) {
$minute = '' . intval ( $minute );
$where .= " AND MINUTE(post_date)=' $minute ' " ;
}
if ( '' != $second ) {
$second = '' . intval ( $second );
$where .= " AND SECOND(post_date)=' $second ' " ;
}
if ( '' != $year ) {
$year = '' . intval ( $year );
$where .= " AND YEAR(post_date)=' $year ' " ;
}
if ( '' != $monthnum ) {
$monthnum = '' . intval ( $monthnum );
$where .= " AND MONTH(post_date)=' $monthnum ' " ;
}
if ( '' != $day ) {
$day = '' . intval ( $day );
$where .= " AND DAYOFMONTH(post_date)=' $day ' " ;
}
if ( '' != $name ) {
$name = preg_replace ( '/[^a-z0-9-_]/' , '' , $name );
$where .= " AND post_name = ' $name ' " ;
}
if ( '' != $w ) {
$w = '' . intval ( $w );
$where .= " AND WEEK(post_date, 1)=' $w ' " ;
}
// If a post number is specified, load that post
if (( $p != '' ) && ( $p != 'all' )) {
$p = intval ( $p );
$where = ' AND ID = ' . $p ;
}
// If a search pattern is specified, load the posts that match
if ( ! empty ( $s )) {
$s = addslashes_gpc ( $s );
$search = ' AND (' ;
$s = preg_replace ( '/, +/' , ' ' , $s );
$s = str_replace ( ',' , ' ' , $s );
$s = str_replace ( '"' , ' ' , $s );
$s = trim ( $s );
if ( $exact ) {
$n = '' ;
} else {
$n = '%' ;
}
if ( ! $sentence ) {
$s_array = explode ( ' ' , $s );
$search .= '((post_title LIKE \'' . $n . $s_array [ 0 ] . $n . '\') OR (post_content LIKE \'' . $n . $s_array [ 0 ] . $n . '\'))' ;
for ( $i = 1 ; $i < count ( $s_array ); $i = $i + 1 ) {
$search .= ' AND ((post_title LIKE \'' . $n . $s_array [ $i ] . $n . '\') OR (post_content LIKE \'' . $n . $s_array [ $i ] . $n . '\'))' ;
}
$search .= ' OR (post_title LIKE \'' . $n . $s . $n . '\') OR (post_content LIKE \'' . $n . $s . $n . '\')' ;
$search .= ')' ;
} else {
$search = ' AND ((post_title LIKE \'' . $n . $s . $n . '\') OR (post_content LIKE \'' . $n . $s . $n . '\'))' ;
}
}
// Category stuff
if (( empty ( $cat )) || ( $cat == 'all' ) || ( $cat == '0' ) ||
// Bypass cat checks if fetching specific posts
(
intval ( $year ) || intval ( $monthnum ) || intval ( $day ) || intval ( $w ) ||
intval ( $p ) || ! empty ( $name ) || ! empty ( $s )
)
) {
$whichcat = '' ;
} else {
$cat = '' . urldecode ( $cat ) . '' ;
$cat = addslashes_gpc ( $cat );
if ( stristr ( $cat , '-' )) {
// Note: if we have a negative, we ignore all the positives. It must
// always mean 'everything /except/ this one'. We should be able to do
// multiple negatives but we don't :-(
$eq = '!=' ;
$andor = 'AND' ;
$cat = explode ( '-' , $cat );
$cat = intval ( $cat [ 1 ]);
} else {
$eq = '=' ;
$andor = 'OR' ;
}
2004-05-24 04:22:18 -04:00
$join = " LEFT JOIN $wpdb->post2cat ON ( $wpdb->posts .ID = $wpdb->post2cat .post_id) " ;
2004-05-23 22:55:39 -04:00
$cat_array = explode ( ' ' , $cat );
$whichcat .= ' AND (category_id ' . $eq . ' ' . intval ( $cat_array [ 0 ]);
$whichcat .= get_category_children ( $cat_array [ 0 ], ' ' . $andor . ' category_id ' . $eq . ' ' );
for ( $i = 1 ; $i < ( count ( $cat_array )); $i = $i + 1 ) {
$whichcat .= ' ' . $andor . ' category_id ' . $eq . ' ' . intval ( $cat_array [ $i ]);
$whichcat .= get_category_children ( $cat_array [ $i ], ' ' . $andor . ' category_id ' . $eq . ' ' );
}
$whichcat .= ')' ;
if ( $eq == '!=' ) {
$cat = '-' . $cat ; // Put back the knowledge that we are excluding a category.
}
}
// Category stuff for nice URIs
if ( '' != $category_name ) {
if ( stristr ( $category_name , '/' )) {
$category_name = explode ( '/' , $category_name );
if ( $category_name [ count ( $category_name ) - 1 ]) {
$category_name = $category_name [ count ( $category_name ) - 1 ]; // no trailing slash
} else {
$category_name = $category_name [ count ( $category_name ) - 2 ]; // there was a trailling slash
}
}
$category_name = preg_replace ( '|[^a-z0-9-_]|i' , '' , $category_name );
2004-05-24 04:22:18 -04:00
$tables = " , $wpdb->post2cat , $wpdb->categories " ;
$join = " LEFT JOIN $wpdb->post2cat ON ( $wpdb->posts .ID = $wpdb->post2cat .post_id) LEFT JOIN $wpdb->categories ON ( $wpdb->post2cat .category_id = $wpdb->categories .cat_ID) " ;
2004-05-23 22:55:39 -04:00
$whichcat = " AND (category_nicename = ' $category_name ' " ;
2004-05-24 04:22:18 -04:00
$cat = $wpdb -> get_var ( " SELECT cat_ID FROM $wpdb->categories WHERE category_nicename = ' $category_name ' " );
2004-05-23 22:55:39 -04:00
$whichcat .= get_category_children ( $cat , " OR category_id = " );
$whichcat .= " ) " ;
}
// Author/user stuff
if (( empty ( $author )) || ( $author == 'all' ) || ( $author == '0' )) {
$whichauthor = '' ;
} else {
$author = '' . urldecode ( $author ) . '' ;
$author = addslashes_gpc ( $author );
if ( stristr ( $author , '-' )) {
$eq = '!=' ;
$andor = 'AND' ;
$author = explode ( '-' , $author );
$author = '' . intval ( $author [ 1 ]);
} else {
$eq = '=' ;
$andor = 'OR' ;
}
$author_array = explode ( ' ' , $author );
$whichauthor .= ' AND (post_author ' . $eq . ' ' . intval ( $author_array [ 0 ]);
for ( $i = 1 ; $i < ( count ( $author_array )); $i = $i + 1 ) {
$whichauthor .= ' ' . $andor . ' post_author ' . $eq . ' ' . intval ( $author_array [ $i ]);
}
$whichauthor .= ')' ;
}
// Author stuff for nice URIs
if ( '' != $author_name ) {
if ( stristr ( $author_name , '/' )) {
$author_name = explode ( '/' , $author_name );
if ( $author_name [ count ( $author_name ) - 1 ]) {
$author_name = $author_name [ count ( $author_name ) - 1 ]; #no trailing slash
} else {
$author_name = $author_name [ count ( $author_name ) - 2 ]; #there was a trailling slash
}
}
$author_name = preg_replace ( '|[^a-z0-9-_]|' , '' , strtolower ( $author_name ));
2004-05-24 04:22:18 -04:00
$author = $wpdb -> get_var ( " SELECT ID FROM $wpdb->users WHERE user_nicename=' " . $author_name . " ' " );
2004-05-23 22:55:39 -04:00
$whichauthor .= ' AND (post_author = ' . intval ( $author ) . ')' ;
}
$where .= $search . $whichcat . $whichauthor ;
if (( empty ( $order )) || (( strtoupper ( $order ) != 'ASC' ) && ( strtoupper ( $order ) != 'DESC' ))) {
$order = 'DESC' ;
}
// Order by
if ( empty ( $orderby )) {
$orderby = 'date ' . $order ;
} else {
// Used to filter values
$allowed_keys = array ( 'author' , 'date' , 'category' , 'title' );
$orderby = urldecode ( $orderby );
$orderby = addslashes_gpc ( $orderby );
$orderby_array = explode ( ' ' , $orderby );
if ( ! in_array ( $orderby_array [ 0 ], $allowed_keys )) {
$orderby_array [ 0 ] = 'date' ;
}
$orderby = $orderby_array [ 0 ] . ' ' . $order ;
if ( count ( $orderby_array ) > 1 ) {
for ( $i = 1 ; $i < ( count ( $orderby_array )); $i = $i + 1 ) {
// Only allow certain values for safety
if ( in_array ( $orderby_array [ $i ], $allowed_keys )) {
$orderby .= ',post_' . $orderby_array [ $i ] . ' ' . $order ;
}
}
}
}
if (( ! $whichcat ) && ( ! $m ) && ( ! $p ) && ( ! $w ) && ( ! $s ) && empty ( $poststart ) && empty ( $postend )) {
if ( $what_to_show == 'posts' ) {
$limits = ' LIMIT ' . $posts_per_page ;
} elseif ( $what_to_show == 'days' && empty ( $monthnum ) && empty ( $year ) && empty ( $day )) {
$lastpostdate = get_lastpostdate ();
$lastpostdate = mysql2date ( 'Y-m-d 00:00:00' , $lastpostdate );
$lastpostdate = mysql2date ( 'U' , $lastpostdate );
$otherdate = date ( 'Y-m-d H:i:s' , ( $lastpostdate - (( $posts_per_page - 1 ) * 86400 )));
$where .= " AND post_date > ' $otherdate ' " ;
}
}
if ( ! empty ( $postend ) && ( $postend > $poststart ) && ( ! $m ) && empty ( $monthnum ) && empty ( $year ) && empty ( $day ) && ( ! $w ) && ( ! $whichcat ) && ( ! $s ) && ( ! $p )) {
if ( $what_to_show == 'posts' || ( $what_to_show == 'paged' && ( ! $paged ))) {
$poststart = intval ( $poststart );
$postend = intval ( $postend );
$limposts = $postend - $poststart ;
$limits = ' LIMIT ' . $poststart . ',' . $limposts ;
} elseif ( $what_to_show == 'days' ) {
$poststart = intval ( $poststart );
$postend = intval ( $postend );
$limposts = $postend - $poststart ;
$lastpostdate = get_lastpostdate ();
$lastpostdate = mysql2date ( 'Y-m-d 00:00:00' , $lastpostdate );
$lastpostdate = mysql2date ( 'U' , $lastpostdate );
$startdate = date ( 'Y-m-d H:i:s' , ( $lastpostdate - (( $poststart - 1 ) * 86400 )));
$otherdate = date ( 'Y-m-d H:i:s' , ( $lastpostdate - (( $postend - 1 ) * 86400 )));
$where .= " AND post_date > ' $otherdate ' AND post_date < ' $startdate ' " ;
}
} else {
if (( $what_to_show == 'paged' ) && ( ! $p ) && ( ! $more )) {
if ( $pagenow != 'post.php' ) {
$pgstrt = '' ;
if ( $paged ) {
$pgstrt = ( intval ( $paged ) - 1 ) * $posts_per_page . ', ' ;
}
$limits = 'LIMIT ' . $pgstrt . $posts_per_page ;
} else {
if (( $m ) || ( $p ) || ( $w ) || ( $s ) || ( $whichcat )) {
$limits = '' ;
} else {
$pgstrt = '' ;
if ( $paged ) {
$pgstrt = ( intval ( $paged ) - 1 ) * $posts_per_page . ', ' ;
}
$limits = 'LIMIT ' . $pgstrt . $posts_per_page ;
}
}
}
elseif (( $m ) || ( $p ) || ( $w ) || ( $s ) || ( $whichcat ) || ( $author ) || $monthnum || $year || $day ) {
$limits = '' ;
}
}
if ( $p == 'all' ) {
$where = '' ;
}
$now = gmdate ( 'Y-m-d H:i:59' );
if ( $pagenow != 'post.php' && $pagenow != 'edit.php' ) {
if (( empty ( $poststart )) || ( empty ( $postend )) || ! ( $postend > $poststart )) {
$where .= " AND post_date_gmt <= ' $now ' " ;
}
$distinct = 'DISTINCT' ;
}
$where .= ' AND (post_status = "publish"' ;
// Get private posts
if ( isset ( $user_ID ) && ( '' != intval ( $user_ID )))
$where .= " OR post_author = $user_ID AND post_status != 'draft') " ;
else
$where .= ')' ;
2004-05-24 04:22:18 -04:00
$where .= " GROUP BY $wpdb->posts .ID " ;
$request = " SELECT $distinct * FROM $wpdb->posts $join WHERE 1=1 " . $where . " ORDER BY post_ $orderby $limits " ;
2004-05-23 22:55:39 -04:00
if ( $preview ) {
$request = 'SELECT 1-1' ; // dummy mysql query for the preview
// little funky fix for IEwin, rawk on that code
$is_winIE = (( preg_match ( '/MSIE/' , $HTTP_USER_AGENT )) && ( preg_match ( '/Win/' , $HTTP_USER_AGENT )));
if (( $is_winIE ) && ( ! isset ( $IEWin_bookmarklet_fix ))) {
$preview_content = preg_replace ( '/\%u([0-9A-F]{4,4})/e' , " '&#'.base_convert(' \\ 1',16,10).';' " , $preview_content );
}
}
// error_log("$request");
// echo $request;
return $wpdb -> get_results ( $request );
}
function update_post_caches ( $posts ) {
global $category_cache , $comment_count_cache , $post_meta_cache ;
2004-05-24 04:22:18 -04:00
global $wpdb ;
2004-05-23 22:55:39 -04:00
// No point in doing all this work if we didn't match any posts.
if ( ! $posts ) {
return ;
}
// Get the categories for all the posts
foreach ( $posts as $post ) {
$post_id_list [] = $post -> ID ;
}
$post_id_list = implode ( ',' , $post_id_list );
$dogs = $wpdb -> get_results ( " SELECT DISTINCT
ID , category_id , cat_name , category_nicename , category_description , category_parent
2004-05-24 04:22:18 -04:00
FROM $wpdb -> categories , $wpdb -> post2cat , $wpdb -> posts
2004-05-23 22:55:39 -04:00
WHERE category_id = cat_ID AND post_id = ID AND post_id IN ( $post_id_list ) " );
foreach ( $dogs as $catt ) {
$category_cache [ $catt -> ID ][] = $catt ;
}
// Do the same for comment numbers
$comment_counts = $wpdb -> get_results ( " SELECT ID, COUNT( comment_ID ) AS ccount
2004-05-24 04:22:18 -04:00
FROM $wpdb -> posts
LEFT JOIN $wpdb -> comments ON ( comment_post_ID = ID AND comment_approved = '1' )
2004-05-23 22:55:39 -04:00
WHERE post_status = 'publish' AND ID IN ( $post_id_list )
GROUP BY ID " );
if ( $comment_counts ) {
foreach ( $comment_counts as $comment_count ) {
$comment_count_cache [ " $comment_count->ID " ] = $comment_count -> ccount ;
}
}
// Get post-meta info
if ( $meta_list = $wpdb -> get_results ( "
SELECT post_id , meta_key , meta_value
2004-05-24 04:22:18 -04:00
FROM $wpdb -> postmeta
2004-05-23 22:55:39 -04:00
WHERE post_id IN ( $post_id_list )
ORDER BY post_id , meta_key
" , ARRAY_A) ) {
// Change from flat structure to hierarchical:
$post_meta_cache = array ();
foreach ( $meta_list as $metarow ) {
$mpid = $metarow [ 'post_id' ];
$mkey = $metarow [ 'meta_key' ];
$mval = $metarow [ 'meta_value' ];
// Force subkeys to be array type:
if ( ! isset ( $post_meta_cache [ $mpid ]) || ! is_array ( $post_meta_cache [ $mpid ]))
$post_meta_cache [ $mpid ] = array ();
if ( ! isset ( $post_meta_cache [ $mpid ][ " $mkey " ]) || ! is_array ( $post_meta_cache [ $mpid ][ " $mkey " ]))
$post_meta_cache [ $mpid ][ " $mkey " ] = array ();
// Add a value to the current pid/key:
$post_meta_cache [ $mpid ][ $mkey ][] = $mval ;
}
}
}
function update_category_cache () {
2004-05-24 04:22:18 -04:00
global $cache_categories , $wpdb ;
$dogs = $wpdb -> get_results ( " SELECT * FROM $wpdb->categories WHERE 1=1 " );
2004-05-23 22:55:39 -04:00
foreach ( $dogs as $catt ) {
$cache_categories [ $catt -> cat_ID ] = $catt ;
}
}
function update_user_cache () {
2004-05-24 04:22:18 -04:00
global $cache_userdata , $wpdb ;
2004-05-23 22:55:39 -04:00
2004-05-24 04:22:18 -04:00
$users = $wpdb -> get_results ( " SELECT * FROM $wpdb->users WHERE user_level > 0 " );
2004-05-23 22:55:39 -04:00
foreach ( $users as $user ) {
$cache_userdata [ $user -> ID ] = $user ;
}
}
2004-04-15 22:24:37 -04:00
function wp_head () {
do_action ( 'wp_head' , '' );
}
2004-02-16 23:56:29 -05:00
?>