2003-04-21 21:37:11 +00:00
< ? php
2004-10-11 13:22:33 +00:00
require_once ( dirname ( __FILE__ ) . '/functions-compat.php' );
2005-10-10 09:25:38 +00:00
if ( ! function_exists ( '_' ) ) {
2003-04-21 21:37:11 +00:00
function _ ( $string ) {
return $string ;
}
}
2004-08-07 01:22:17 +00:00
function get_profile ( $field , $user = false ) {
global $wpdb ;
2005-10-10 09:25:38 +00:00
if ( ! $user )
2005-07-18 20:12:48 +00:00
$user = $wpdb -> escape ( $_COOKIE [ USER_COOKIE ]);
2004-08-07 01:22:17 +00:00
return $wpdb -> get_var ( " SELECT $field FROM $wpdb->users WHERE user_login = ' $user ' " );
}
2005-02-21 04:19:43 +00:00
function mysql2date ( $dateformatstring , $mysqlstring , $translate = true ) {
2006-04-02 00:20:11 +00:00
global $wp_locale ;
2003-04-21 21:37:11 +00:00
$m = $mysqlstring ;
2005-10-10 09:25:38 +00:00
if ( empty ( $m ) ) {
2003-04-21 21:37:11 +00:00
return false ;
}
2005-10-10 09:25:38 +00:00
$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 ));
2006-02-12 07:53:23 +00:00
2006-03-07 21:24:49 +00:00
if ( 'U' == $dateformatstring )
return $i ;
2005-12-25 21:42:07 +00:00
if ( - 1 == $i || false == $i )
$i = 0 ;
2006-04-02 00:20:11 +00:00
if ( ! empty ( $wp_locale -> month ) && ! empty ( $wp_locale -> weekday ) && $translate ) {
$datemonth = $wp_locale -> get_month ( date ( 'm' , $i ));
$datemonth_abbrev = $wp_locale -> get_month_abbrev ( $datemonth );
$dateweekday = $wp_locale -> get_weekday ( date ( 'w' , $i ));
$dateweekday_abbrev = $wp_locale -> get_weekday_abbrev ( $dateweekday );
$datemeridiem = $wp_locale -> get_meridiem ( date ( 'a' , $i ));
$datemeridiem_capital = $wp_locale -> get_meridiem ( date ( 'A' , $i ));
2003-04-21 21:37:11 +00:00
$dateformatstring = ' ' . $dateformatstring ;
2006-03-21 04:19:52 +00:00
$dateformatstring = preg_replace ( " /([^ \\ \ ])D/ " , " \$ { 1} " . backslashit ( $dateweekday_abbrev ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])F/ " , " \$ { 1} " . backslashit ( $datemonth ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])l/ " , " \$ { 1} " . backslashit ( $dateweekday ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])M/ " , " \$ { 1} " . backslashit ( $datemonth_abbrev ), $dateformatstring );
2006-04-02 00:20:11 +00:00
$dateformatstring = preg_replace ( " /([^ \\ \ ])a/ " , " \$ { 1} " . backslashit ( $datemeridiem ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])A/ " , " \$ { 1} " . backslashit ( $datemeridiem_capital ), $dateformatstring );
2005-10-10 09:25:38 +00:00
2003-04-21 21:37:11 +00:00
$dateformatstring = substr ( $dateformatstring , 1 , strlen ( $dateformatstring ) - 1 );
}
$j = @ date ( $dateformatstring , $i );
2005-10-10 09:25:38 +00:00
if ( ! $j ) {
2003-11-14 18:55:41 +00:00
// for debug purposes
// echo $i." ".$mysqlstring;
2003-04-21 21:37:11 +00:00
}
return $j ;
}
2004-03-25 02:21:40 +00:00
function current_time ( $type , $gmt = 0 ) {
2003-11-15 08:58:18 +00:00
switch ( $type ) {
case 'mysql' :
2005-10-10 09:25:38 +00:00
if ( $gmt ) $d = gmdate ( 'Y-m-d H:i:s' );
2004-04-24 21:52:24 +00:00
else $d = gmdate ( 'Y-m-d H:i:s' , ( time () + ( get_settings ( 'gmt_offset' ) * 3600 )));
return $d ;
2003-11-15 08:58:18 +00:00
break ;
case 'timestamp' :
2005-10-10 09:25:38 +00:00
if ( $gmt ) $d = time ();
2004-04-24 21:52:24 +00:00
else $d = time () + ( get_settings ( 'gmt_offset' ) * 3600 );
return $d ;
2003-11-15 08:58:18 +00:00
break ;
}
}
2003-04-21 21:37:11 +00:00
function date_i18n ( $dateformatstring , $unixtimestamp ) {
2006-04-02 00:20:11 +00:00
global $wp_locale ;
2005-10-10 09:25:38 +00:00
$i = $unixtimestamp ;
2006-04-02 00:20:11 +00:00
if ( ( ! empty ( $wp_locale -> month )) && ( ! empty ( $wp_locale -> weekday )) ) {
$datemonth = $wp_locale -> get_month ( date ( 'm' , $i ));
$datemonth_abbrev = $wp_locale -> get_month_abbrev ( $datemonth );
$dateweekday = $wp_locale -> get_weekday ( date ( 'w' , $i ));
$dateweekday_abbrev = $wp_locale -> get_weekday_abbrev ( $dateweekday );
$datemeridiem = $wp_locale -> get_meridiem ( date ( 'a' , $i ));
$datemeridiem_capital = $wp_locale -> get_meridiem ( date ( 'A' , $i ));
2003-04-21 21:37:11 +00:00
$dateformatstring = ' ' . $dateformatstring ;
2006-03-04 22:41:16 +00:00
$dateformatstring = preg_replace ( " /([^ \\ \ ])D/ " , " \$ { 1} " . backslashit ( $dateweekday_abbrev ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])F/ " , " \$ { 1} " . backslashit ( $datemonth ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])l/ " , " \$ { 1} " . backslashit ( $dateweekday ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])M/ " , " \$ { 1} " . backslashit ( $datemonth_abbrev ), $dateformatstring );
2006-04-02 00:20:11 +00:00
$dateformatstring = preg_replace ( " /([^ \\ \ ])a/ " , " \$ { 1} " . backslashit ( $datemeridiem ), $dateformatstring );
$dateformatstring = preg_replace ( " /([^ \\ \ ])A/ " , " \$ { 1} " . backslashit ( $datemeridiem_capital ), $dateformatstring );
2003-04-21 21:37:11 +00:00
$dateformatstring = substr ( $dateformatstring , 1 , strlen ( $dateformatstring ) - 1 );
}
$j = @ date ( $dateformatstring , $i );
return $j ;
2006-04-02 00:20:11 +00:00
}
2003-04-21 21:37:11 +00:00
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 ;
2005-04-10 20:07:46 +00:00
2005-10-10 09:25:38 +00:00
if ( $weekday < get_settings ( 'start_of_week' ) )
2005-04-10 20:07:46 +00:00
$weekday = 7 - ( get_settings ( 'start_of_week' ) - $weekday );
2004-03-01 06:13:32 +00:00
while ( $weekday > get_settings ( 'start_of_week' )) {
2003-04-21 21:37:11 +00:00
$weekday = date ( 'w' , $day );
2005-10-10 09:25:38 +00:00
if ( $weekday < get_settings ( 'start_of_week' ) )
2005-04-10 20:07:46 +00:00
$weekday = 7 - ( get_settings ( 'start_of_week' ) - $weekday );
2003-04-21 21:37:11 +00:00
$day = $day - 86400 ;
$i = 0 ;
}
$week [ 'start' ] = $day + 86400 - $i ;
2005-10-10 09:25:38 +00:00
// $week['end'] = $day - $i + 691199;
2005-04-10 20:07:46 +00:00
$week [ 'end' ] = $week [ 'start' ] + 604799 ;
2003-06-07 17:19:38 +00:00
return $week ;
2003-04-21 21:37:11 +00:00
}
2004-02-28 17:51:41 +00:00
function get_lastpostdate ( $timezone = 'server' ) {
2004-05-24 08:22:18 +00:00
global $cache_lastpostdate , $pagenow , $wpdb ;
2004-02-28 17:51:41 +00:00
$add_seconds_blog = get_settings ( 'gmt_offset' ) * 3600 ;
$add_seconds_server = date ( 'Z' );
2004-04-20 22:56:47 +00:00
if ( ! isset ( $cache_lastpostdate [ $timezone ]) ) {
2004-02-28 17:51:41 +00:00
switch ( strtolower ( $timezone )) {
case 'gmt' :
2006-02-12 07:41:56 +00:00
$lastpostdate = $wpdb -> get_var ( " SELECT post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " );
2004-02-28 17:51:41 +00:00
break ;
case 'blog' :
2006-02-12 07:41:56 +00:00
$lastpostdate = $wpdb -> get_var ( " SELECT post_date FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " );
2004-02-28 17:51:41 +00:00
break ;
case 'server' :
2006-02-12 07:41:56 +00:00
$lastpostdate = $wpdb -> get_var ( " SELECT DATE_ADD(post_date_gmt, INTERVAL ' $add_seconds_server ' SECOND) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1 " );
2004-02-28 17:51:41 +00:00
break ;
}
$cache_lastpostdate [ $timezone ] = $lastpostdate ;
2003-04-21 21:37:11 +00:00
} else {
2004-02-28 17:51:41 +00:00
$lastpostdate = $cache_lastpostdate [ $timezone ];
2003-04-21 21:37:11 +00:00
}
2003-06-07 17:19:38 +00:00
return $lastpostdate ;
2003-04-21 21:37:11 +00:00
}
2004-02-28 17:51:41 +00:00
function get_lastpostmodified ( $timezone = 'server' ) {
2004-05-24 08:22:18 +00:00
global $cache_lastpostmodified , $pagenow , $wpdb ;
2004-02-28 17:51:41 +00:00
$add_seconds_blog = get_settings ( 'gmt_offset' ) * 3600 ;
$add_seconds_server = date ( 'Z' );
2004-04-20 22:56:47 +00:00
if ( ! isset ( $cache_lastpostmodified [ $timezone ]) ) {
2004-03-31 18:06:45 +00:00
switch ( strtolower ( $timezone )) {
2004-02-28 17:51:41 +00:00
case 'gmt' :
2006-02-12 07:41:56 +00:00
$lastpostmodified = $wpdb -> get_var ( " SELECT post_modified_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1 " );
2004-02-28 17:51:41 +00:00
break ;
case 'blog' :
2006-02-12 07:41:56 +00:00
$lastpostmodified = $wpdb -> get_var ( " SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1 " );
2004-02-28 17:51:41 +00:00
break ;
case 'server' :
2006-02-12 07:41:56 +00:00
$lastpostmodified = $wpdb -> get_var ( " SELECT DATE_ADD(post_modified_gmt, INTERVAL ' $add_seconds_server ' SECOND) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC LIMIT 1 " );
2004-02-28 17:51:41 +00:00
break ;
}
$lastpostdate = get_lastpostdate ( $timezone );
2005-10-10 09:25:38 +00:00
if ( $lastpostdate > $lastpostmodified ) {
2004-02-28 17:51:41 +00:00
$lastpostmodified = $lastpostdate ;
}
$cache_lastpostmodified [ $timezone ] = $lastpostmodified ;
2004-02-22 03:28:46 +00:00
} else {
2004-02-28 17:51:41 +00:00
$lastpostmodified = $cache_lastpostmodified [ $timezone ];
2004-02-22 03:28:46 +00:00
}
return $lastpostmodified ;
}
2003-04-21 21:37:11 +00:00
function user_pass_ok ( $user_login , $user_pass ) {
2004-04-20 22:56:47 +00:00
global $cache_userdata ;
if ( empty ( $cache_userdata [ $user_login ]) ) {
2003-04-21 21:37:11 +00:00
$userdata = get_userdatabylogin ( $user_login );
} else {
$userdata = $cache_userdata [ $user_login ];
}
2004-02-19 22:42:47 +00:00
return ( md5 ( $user_pass ) == $userdata -> user_pass );
2003-04-21 21:37:11 +00:00
}
function get_usernumposts ( $userid ) {
2004-05-24 08:22:18 +00:00
global $wpdb ;
2006-02-09 10:03:48 +00:00
return $wpdb -> get_var ( " SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = ' $userid ' AND post_type = 'post' AND post_status = 'publish' " );
2003-04-21 21:37:11 +00:00
}
2005-11-29 07:58:50 +00:00
function maybe_unserialize ( $original ) {
2005-11-30 00:25:05 +00:00
if ( false !== $gm = @ unserialize ( $original ) )
2005-11-29 07:58:50 +00:00
return $gm ;
else
return $original ;
}
2003-10-26 00:19:23 +00:00
/* Options functions */
2003-04-21 21:37:11 +00:00
function get_settings ( $setting ) {
2005-11-09 21:30:40 +00:00
global $wpdb ;
2004-02-17 04:56:29 +00:00
2005-11-09 21:30:40 +00:00
$value = wp_cache_get ( $setting , 'options' );
2004-09-29 20:33:05 +00:00
2005-11-09 21:30:40 +00:00
if ( false === $value ) {
2005-11-14 06:51:09 +00:00
if ( defined ( 'WP_INSTALLING' ) )
$wpdb -> hide_errors ();
2005-11-14 09:08:27 +00:00
$row = $wpdb -> get_row ( " SELECT option_value FROM $wpdb->options WHERE option_name = ' $setting ' LIMIT 1 " );
2005-11-14 06:51:09 +00:00
if ( defined ( 'WP_INSTALLING' ) )
$wpdb -> show_errors ();
2005-11-14 09:08:27 +00:00
if ( is_object ( $row ) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values
$value = $row -> option_value ;
2005-11-09 21:30:40 +00:00
wp_cache_set ( $setting , $value , 'options' );
2005-11-14 09:08:27 +00:00
} else {
2005-11-10 20:59:20 +00:00
return false ;
2005-11-14 09:08:27 +00:00
}
2005-11-09 21:30:40 +00:00
}
2004-09-29 20:33:05 +00:00
2005-11-09 21:30:40 +00:00
// If home is not set use siteurl.
if ( 'home' == $setting && '' == $value )
return get_settings ( 'siteurl' );
2004-09-29 20:33:05 +00:00
2005-11-09 21:30:40 +00:00
if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting )
$value = preg_replace ( '|/+$|' , '' , $value );
2004-11-28 19:53:11 +00:00
2005-11-29 07:58:50 +00:00
return apply_filters ( 'option_' . $setting , maybe_unserialize ( $value ) );
2003-04-21 21:37:11 +00:00
}
2004-09-05 00:24:28 +00:00
function get_option ( $option ) {
return get_settings ( $option );
}
2005-12-13 03:46:08 +00:00
function get_user_option ( $option , $user = 0 ) {
2006-02-22 19:08:55 +00:00
global $wpdb ;
2006-02-12 07:53:23 +00:00
2005-12-13 03:46:08 +00:00
if ( empty ( $user ) )
2006-02-22 19:08:55 +00:00
$user = wp_get_current_user ();
2005-12-13 03:46:08 +00:00
else
$user = get_userdata ( $user );
if ( isset ( $user -> { $wpdb -> prefix . $option } ) ) // Blog specific
return $user -> { $wpdb -> prefix . $option };
elseif ( isset ( $user -> { $option } ) ) // User specific and cross-blog
return $user -> { $option };
2005-08-07 19:23:41 +00:00
else // Blog global
return get_option ( $option );
}
2004-09-05 00:24:28 +00:00
function form_option ( $option ) {
2004-12-12 20:41:19 +00:00
echo htmlspecialchars ( get_option ( $option ), ENT_QUOTES );
2004-09-05 00:24:28 +00:00
}
2003-06-12 22:45:08 +00:00
function get_alloptions () {
2004-10-08 19:49:58 +00:00
global $wpdb , $wp_queries ;
$wpdb -> hide_errors ();
2005-10-10 09:25:38 +00:00
if ( ! $options = $wpdb -> get_results ( " SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes' " ) ) {
2004-10-08 19:49:58 +00:00
$options = $wpdb -> get_results ( " SELECT option_name, option_value FROM $wpdb->options " );
}
$wpdb -> show_errors ();
foreach ( $options as $option ) {
2005-10-10 09:25:38 +00:00
// "When trying to design a foolproof system,
2004-10-08 19:49:58 +00:00
// never underestimate the ingenuity of the fools :)" -- Dougal
2005-10-10 09:25:38 +00:00
if ( 'siteurl' == $option -> option_name )
$option -> option_value = preg_replace ( '|/+$|' , '' , $option -> option_value );
if ( 'home' == $option -> option_name )
$option -> option_value = preg_replace ( '|/+$|' , '' , $option -> option_value );
if ( 'category_base' == $option -> option_name )
$option -> option_value = preg_replace ( '|/+$|' , '' , $option -> option_value );
2005-11-29 07:58:50 +00:00
$value = maybe_unserialize ( $option -> option_value );
2005-01-27 18:39:52 +00:00
$all_options -> { $option -> option_name } = apply_filters ( 'pre_option_' . $option -> option_name , $value );
2004-02-17 04:56:29 +00:00
}
2005-01-27 18:39:52 +00:00
return apply_filters ( 'all_options' , $all_options );
2003-06-12 22:45:08 +00:00
}
2003-10-26 00:19:23 +00:00
function update_option ( $option_name , $newvalue ) {
2005-11-09 21:30:40 +00:00
global $wpdb ;
2004-07-23 09:14:30 +00:00
2005-07-17 18:41:11 +00:00
if ( is_string ( $newvalue ) )
$newvalue = trim ( $newvalue );
2005-10-10 09:25:38 +00:00
2005-07-16 21:13:14 +00:00
// If the new and old values are the same, no need to update.
2005-11-11 02:24:09 +00:00
$oldvalue = get_option ( $option_name );
2006-01-09 22:24:57 +00:00
if ( $newvalue == $oldvalue ) {
2005-11-12 09:36:20 +00:00
return false ;
2006-01-09 22:24:57 +00:00
}
2005-07-16 21:13:14 +00:00
2006-01-09 22:24:57 +00:00
if ( false === $oldvalue ) {
add_option ( $option_name , $newvalue );
return true ;
2005-11-11 02:24:09 +00:00
}
2006-03-25 21:46:53 +00:00
$_newvalue = $newvalue ;
2005-07-16 21:13:14 +00:00
if ( is_array ( $newvalue ) || is_object ( $newvalue ) )
$newvalue = serialize ( $newvalue );
2004-06-24 01:00:31 +00:00
2005-11-09 21:30:40 +00:00
wp_cache_set ( $option_name , $newvalue , 'options' );
2005-11-07 21:56:03 +00:00
2004-04-22 21:29:59 +00:00
$newvalue = $wpdb -> escape ( $newvalue );
2005-11-09 21:30:40 +00:00
$option_name = $wpdb -> escape ( $option_name );
2004-05-24 08:22:18 +00:00
$wpdb -> query ( " UPDATE $wpdb->options SET option_value = ' $newvalue ' WHERE option_name = ' $option_name ' " );
2006-01-25 06:46:21 +00:00
if ( $wpdb -> rows_affected == 1 ) {
2006-03-25 21:46:53 +00:00
do_action ( " update_option_ { $option_name } " , array ( 'old' => $oldvalue , 'new' => $_newvalue ));
2006-01-25 06:46:21 +00:00
return true ;
}
return false ;
2003-10-26 00:19:23 +00:00
}
2005-08-07 19:23:41 +00:00
function update_user_option ( $user_id , $option_name , $newvalue , $global = false ) {
global $wpdb ;
if ( ! $global )
$option_name = $wpdb -> prefix . $option_name ;
return update_usermeta ( $user_id , $option_name , $newvalue );
}
2004-04-16 21:17:09 +00:00
// thx Alex Stapleton, http://alex.vort-x.net/blog/
2004-12-19 02:30:40 +00:00
function add_option ( $name , $value = '' , $description = '' , $autoload = 'yes' ) {
2005-11-09 21:30:40 +00:00
global $wpdb ;
2005-09-08 21:08:48 +00:00
// Make sure the option doesn't already exist
2005-11-09 21:30:40 +00:00
if ( false !== get_option ( $name ) )
2005-09-08 21:08:48 +00:00
return ;
2004-07-23 09:14:30 +00:00
if ( is_array ( $value ) || is_object ( $value ) )
$value = serialize ( $value );
2005-11-09 21:30:40 +00:00
wp_cache_set ( $name , $value , 'options' );
$name = $wpdb -> escape ( $name );
$value = $wpdb -> escape ( $value );
$description = $wpdb -> escape ( $description );
$wpdb -> query ( " INSERT INTO $wpdb->options (option_name, option_value, option_description, autoload) VALUES (' $name ', ' $value ', ' $description ', ' $autoload ') " );
2004-04-16 21:17:09 +00:00
return ;
2003-10-26 00:19:23 +00:00
}
2004-04-24 21:21:19 +00:00
function delete_option ( $name ) {
2004-05-24 08:22:18 +00:00
global $wpdb ;
2004-04-24 21:21:19 +00:00
// Get the ID, if no ID then return
2004-05-24 08:22:18 +00:00
$option_id = $wpdb -> get_var ( " SELECT option_id FROM $wpdb->options WHERE option_name = ' $name ' " );
2005-10-10 09:25:38 +00:00
if ( ! $option_id ) return false ;
2004-05-24 08:22:18 +00:00
$wpdb -> query ( " DELETE FROM $wpdb->options WHERE option_name = ' $name ' " );
2005-11-09 21:30:40 +00:00
wp_cache_delete ( $name , 'options' );
2004-04-24 21:21:19 +00:00
return true ;
}
2004-09-27 00:45:53 +00:00
function add_post_meta ( $post_id , $key , $value , $unique = false ) {
2005-09-23 23:22:51 +00:00
global $wpdb , $post_meta_cache ;
2005-10-10 09:25:38 +00:00
if ( $unique ) {
if ( $wpdb -> get_var ( " SELECT meta_key FROM $wpdb->postmeta WHERE meta_key
2004-09-27 00:45:53 +00:00
= '$key' AND post_id = '$post_id' " ) ) {
return false ;
}
}
2005-09-23 23:22:51 +00:00
$original = $value ;
if ( is_array ( $value ) || is_object ( $value ) )
$value = $wpdb -> escape ( serialize ( $value ));
2005-10-10 09:25:38 +00:00
$wpdb -> query ( " INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (' $post_id ',' $key ',' $value ') " );
2005-09-23 23:22:51 +00:00
$post_meta_cache [ '$post_id' ][ $key ][] = $original ;
2004-09-27 00:45:53 +00:00
return true ;
}
function delete_post_meta ( $post_id , $key , $value = '' ) {
2005-09-23 23:22:51 +00:00
global $wpdb , $post_meta_cache ;
2004-09-27 00:45:53 +00:00
2005-10-10 09:25:38 +00:00
if ( empty ( $value ) ) {
2004-09-27 00:45:53 +00:00
$meta_id = $wpdb -> get_var ( " SELECT meta_id FROM $wpdb->postmeta WHERE
post_id = '$post_id' AND meta_key = '$key' " );
} else {
$meta_id = $wpdb -> get_var ( " SELECT meta_id FROM $wpdb->postmeta WHERE
post_id = '$post_id' AND meta_key = '$key' AND meta_value = '$value' " );
}
2005-10-10 09:25:38 +00:00
if ( ! $meta_id )
return false ;
2004-09-27 00:45:53 +00:00
2005-10-10 09:25:38 +00:00
if ( empty ( $value ) ) {
2004-09-27 00:45:53 +00:00
$wpdb -> query ( " DELETE FROM $wpdb->postmeta WHERE post_id = ' $post_id '
AND meta_key = '$key' " );
2005-09-23 23:22:51 +00:00
unset ( $post_meta_cache [ '$post_id' ][ $key ]);
2004-09-27 00:45:53 +00:00
} else {
$wpdb -> query ( " DELETE FROM $wpdb->postmeta WHERE post_id = ' $post_id '
AND meta_key = '$key' AND meta_value = '$value' " );
2005-09-23 23:22:51 +00:00
$cache_key = $post_meta_cache [ '$post_id' ][ $key ];
2006-01-27 19:22:55 +00:00
if ( $cache_key ) foreach ( $cache_key as $index => $data )
2005-09-23 23:22:51 +00:00
if ( $data == $value )
unset ( $post_meta_cache [ '$post_id' ][ $key ][ $index ]);
2004-09-27 00:45:53 +00:00
}
2005-09-23 23:22:51 +00:00
unset ( $post_meta_cache [ '$post_id' ][ $key ]);
2005-10-10 09:25:38 +00:00
2004-09-27 00:45:53 +00:00
return true ;
}
2004-10-06 05:11:11 +00:00
function get_post_meta ( $post_id , $key , $single = false ) {
2004-09-27 00:45:53 +00:00
global $wpdb , $post_meta_cache ;
2005-10-10 09:25:38 +00:00
if ( isset ( $post_meta_cache [ $post_id ][ $key ]) ) {
if ( $single ) {
2005-11-29 07:58:50 +00:00
return maybe_unserialize ( $post_meta_cache [ $post_id ][ $key ][ 0 ] );
2004-10-06 05:11:11 +00:00
} else {
2006-01-06 01:30:13 +00:00
return maybe_unserialize ( $post_meta_cache [ $post_id ][ $key ] );
2004-10-06 05:11:11 +00:00
}
2004-09-27 00:45:53 +00:00
}
$metalist = $wpdb -> get_results ( " SELECT meta_value FROM $wpdb->postmeta WHERE post_id = ' $post_id ' AND meta_key = ' $key ' " , ARRAY_N );
$values = array ();
2005-10-10 09:25:38 +00:00
if ( $metalist ) {
2004-09-27 00:45:53 +00:00
foreach ( $metalist as $metarow ) {
$values [] = $metarow [ 0 ];
}
}
2005-10-10 09:25:38 +00:00
if ( $single ) {
if ( count ( $values ) ) {
2005-11-29 07:58:50 +00:00
$return = maybe_unserialize ( $values [ 0 ] );
2004-10-06 05:11:11 +00:00
} else {
return '' ;
}
} else {
2005-09-23 23:22:51 +00:00
$return = $values ;
2004-10-06 05:11:11 +00:00
}
2005-09-23 23:22:51 +00:00
2005-11-29 07:58:50 +00:00
return maybe_unserialize ( $return );
2004-09-27 00:45:53 +00:00
}
function update_post_meta ( $post_id , $key , $value , $prev_value = '' ) {
global $wpdb , $post_meta_cache ;
2005-09-23 23:22:51 +00:00
$original_value = $value ;
if ( is_array ( $value ) || is_object ( $value ) )
$value = $wpdb -> escape ( serialize ( $value ));
$original_prev = $prev_value ;
if ( is_array ( $prev_value ) || is_object ( $prev_value ) )
2005-12-13 19:19:56 +00:00
$prev_value = $wpdb -> escape ( serialize ( $prev_value ));
2005-10-10 09:25:38 +00:00
if ( ! $wpdb -> get_var ( " SELECT meta_key FROM $wpdb->postmeta WHERE meta_key
2004-10-06 05:11:11 +00:00
= '$key' AND post_id = '$post_id' " ) ) {
2005-09-23 23:22:51 +00:00
return false ;
}
2004-10-06 05:11:11 +00:00
2005-10-10 09:25:38 +00:00
if ( empty ( $prev_value ) ) {
2004-09-27 00:45:53 +00:00
$wpdb -> query ( " UPDATE $wpdb->postmeta SET meta_value = ' $value ' WHERE
meta_key = '$key' AND post_id = '$post_id' " );
2005-09-23 23:22:51 +00:00
$cache_key = $post_meta_cache [ '$post_id' ][ $key ];
2005-11-22 00:36:36 +00:00
if ( ! empty ( $cache_key ) )
foreach ( $cache_key as $index => $data )
$post_meta_cache [ '$post_id' ][ $key ][ $index ] = $original_value ;
2004-09-27 00:45:53 +00:00
} else {
$wpdb -> query ( " UPDATE $wpdb->postmeta SET meta_value = ' $value ' WHERE
meta_key = '$key' AND post_id = '$post_id' AND meta_value = '$prev_value' " );
2005-09-23 23:22:51 +00:00
$cache_key = $post_meta_cache [ '$post_id' ][ $key ];
2005-11-22 00:36:36 +00:00
if ( ! empty ( $cache_key ) )
foreach ( $cache_key as $index => $data )
if ( $data == $original_prev )
$post_meta_cache [ '$post_id' ][ $key ][ $index ] = $original_value ;
2004-09-27 00:45:53 +00:00
}
return true ;
}
2005-10-10 09:25:38 +00:00
// Retrieves post data given a post ID or post object.
2005-03-27 20:45:01 +00:00
// Handles post caching.
function & get_post ( & $post , $output = OBJECT ) {
global $post_cache , $wpdb ;
if ( empty ( $post ) ) {
if ( isset ( $GLOBALS [ 'post' ]) )
2005-06-26 19:55:12 +00:00
$_post = & $GLOBALS [ 'post' ];
2005-03-27 20:45:01 +00:00
else
2005-06-26 19:55:12 +00:00
$_post = null ;
2005-10-10 09:25:38 +00:00
} elseif ( is_object ( $post ) ) {
2006-02-09 10:03:48 +00:00
if ( 'page' == $post -> post_type )
2005-12-11 18:01:19 +00:00
return get_page ( $post , $output );
2005-10-10 09:25:38 +00:00
if ( ! isset ( $post_cache [ $post -> ID ]) )
2005-03-27 20:45:01 +00:00
$post_cache [ $post -> ID ] = & $post ;
2005-06-26 19:55:12 +00:00
$_post = & $post_cache [ $post -> ID ];
2005-03-27 20:45:01 +00:00
} else {
2005-12-11 18:01:19 +00:00
if ( $_post = wp_cache_get ( $post , 'pages' ) )
return get_page ( $_post , $output );
elseif ( isset ( $post_cache [ $post ]) )
2005-06-26 19:55:12 +00:00
$_post = & $post_cache [ $post ];
2005-03-27 20:45:01 +00:00
else {
2005-11-09 21:30:40 +00:00
$query = " SELECT * FROM $wpdb->posts WHERE ID = ' $post ' LIMIT 1 " ;
2005-12-11 18:01:19 +00:00
$_post = & $wpdb -> get_row ( $query );
2006-02-09 10:03:48 +00:00
if ( 'page' == $_post -> post_type )
2005-12-11 18:01:19 +00:00
return get_page ( $_post , $output );
$post_cache [ $post ] = & $_post ;
2003-04-21 21:37:11 +00:00
}
}
2005-03-27 20:45:01 +00:00
2006-01-05 05:34:28 +00:00
if ( defined ( WP_IMPORTING ) )
unset ( $post_cache );
2005-03-27 20:45:01 +00:00
if ( $output == OBJECT ) {
2005-06-26 19:55:12 +00:00
return $_post ;
2005-03-27 20:45:01 +00:00
} elseif ( $output == ARRAY_A ) {
2005-06-26 19:55:12 +00:00
return get_object_vars ( $_post );
2005-03-27 20:45:01 +00:00
} elseif ( $output == ARRAY_N ) {
2005-06-26 19:55:12 +00:00
return array_values ( get_object_vars ( $_post ));
2005-03-27 20:45:01 +00:00
} else {
2005-06-26 19:55:12 +00:00
return $_post ;
2005-03-27 20:45:01 +00:00
}
}
2005-12-16 09:50:10 +00:00
function & get_children ( $post = 0 , $output = OBJECT ) {
global $post_cache , $wpdb ;
if ( empty ( $post ) ) {
if ( isset ( $GLOBALS [ 'post' ]) )
$post_parent = & $GLOBALS [ 'post' ] -> post_parent ;
else
return false ;
} elseif ( is_object ( $post ) ) {
$post_parent = $post -> post_parent ;
} else {
$post_parent = $post ;
}
$post_parent = ( int ) $post_parent ;
$query = " SELECT * FROM $wpdb->posts WHERE post_parent = $post_parent " ;
$children = $wpdb -> get_results ( $query );
if ( $children ) {
foreach ( $children as $key => $child ) {
$post_cache [ $child -> ID ] =& $children [ $key ];
$kids [ $child -> ID ] =& $children [ $key ];
}
} else {
return false ;
}
if ( $output == OBJECT ) {
return $kids ;
} elseif ( $output == ARRAY_A ) {
foreach ( $kids as $kid )
$weeuns [ $kid -> ID ] = get_object_vars ( $kids [ $kid -> ID ]);
return $weeuns ;
} elseif ( $output == ARRAY_N ) {
foreach ( $kids as $kid )
$babes [ $kid -> ID ] = array_values ( get_object_vars ( $kids [ $kid -> ID ]));
return $babes ;
} else {
return $kids ;
}
}
2006-02-28 08:00:39 +00:00
function get_page_by_path ( $page_path , $output = OBJECT ) {
2006-02-10 00:54:16 +00:00
global $wpdb ;
2006-02-13 07:04:14 +00:00
$page_path = rawurlencode ( urldecode ( $page_path ));
$page_path = str_replace ( '%2F' , '/' , $page_path );
$page_path = str_replace ( '%20' , ' ' , $page_path );
2006-02-10 00:54:16 +00:00
$page_paths = '/' . trim ( $page_path , '/' );
$leaf_path = sanitize_title ( basename ( $page_paths ));
$page_paths = explode ( '/' , $page_paths );
foreach ( $page_paths as $pathdir )
$full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title ( $pathdir );
2006-02-20 17:13:06 +00:00
$pages = $wpdb -> get_results ( " SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = ' $leaf_path ' AND post_type='page' " );
2006-02-10 00:54:16 +00:00
if ( empty ( $pages ) )
2006-02-28 08:00:39 +00:00
return NULL ;
2006-02-10 00:54:16 +00:00
foreach ( $pages as $page ) {
$path = '/' . $leaf_path ;
$curpage = $page ;
while ( $curpage -> post_parent != 0 ) {
2006-02-20 17:13:06 +00:00
$curpage = $wpdb -> get_row ( " SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = ' $curpage->post_parent ' and post_type='page' " );
2006-02-10 00:54:16 +00:00
$path = '/' . $curpage -> post_name . $path ;
}
if ( $path == $full_path )
2006-02-28 08:00:39 +00:00
return get_page ( $page -> ID , $output );
2006-02-10 00:54:16 +00:00
}
2006-02-28 08:00:39 +00:00
return NULL ;
2006-02-10 00:54:16 +00:00
}
2005-10-10 09:25:38 +00:00
// Retrieves page data given a page ID or page object.
2005-03-27 21:56:10 +00:00
// Handles page caching.
function & get_page ( & $page , $output = OBJECT ) {
2005-11-09 21:30:40 +00:00
global $wpdb ;
2005-03-27 21:56:10 +00:00
if ( empty ( $page ) ) {
2005-11-09 21:30:40 +00:00
if ( isset ( $GLOBALS [ 'page' ]) ) {
2005-06-26 19:55:12 +00:00
$_page = & $GLOBALS [ 'page' ];
2005-11-09 21:30:40 +00:00
wp_cache_add ( $_page -> ID , $_page , 'pages' );
} else {
2005-06-26 19:55:12 +00:00
$_page = null ;
2005-11-09 21:30:40 +00:00
}
2005-10-10 09:25:38 +00:00
} elseif ( is_object ( $page ) ) {
2006-02-09 10:03:48 +00:00
if ( 'post' == $page -> post_type )
2005-12-11 18:01:19 +00:00
return get_post ( $page , $output );
2005-11-09 21:30:40 +00:00
wp_cache_add ( $page -> ID , $page , 'pages' );
$_page = $page ;
2005-03-27 21:56:10 +00:00
} else {
2005-11-09 21:30:40 +00:00
if ( isset ( $GLOBALS [ 'page' ]) && ( $page == $GLOBALS [ 'page' ] -> ID ) ) {
2005-06-26 19:55:12 +00:00
$_page = & $GLOBALS [ 'page' ];
2005-11-09 21:30:40 +00:00
wp_cache_add ( $_page -> ID , $_page , 'pages' );
2005-12-11 18:01:19 +00:00
} elseif ( $_page = $GLOBALS [ 'post_cache' ][ $page ] ) {
return get_post ( $page , $output );
2005-11-09 21:30:40 +00:00
} elseif ( $_page = wp_cache_get ( $page , 'pages' ) ) {
// Got it.
} else {
$query = " SELECT * FROM $wpdb->posts WHERE ID= ' $page ' LIMIT 1 " ;
$_page = & $wpdb -> get_row ( $query );
2006-02-09 10:03:48 +00:00
if ( 'post' == $_page -> post_type )
2005-12-11 18:01:19 +00:00
return get_post ( $_page , $output );
2005-11-09 21:30:40 +00:00
wp_cache_add ( $_page -> ID , $_page , 'pages' );
2005-03-27 21:56:10 +00:00
}
}
2006-02-12 07:53:23 +00:00
2005-03-27 21:56:10 +00:00
if ( $output == OBJECT ) {
2005-06-26 19:55:12 +00:00
return $_page ;
2005-03-27 21:56:10 +00:00
} elseif ( $output == ARRAY_A ) {
2005-06-26 19:55:12 +00:00
return get_object_vars ( $_page );
2005-03-27 21:56:10 +00:00
} elseif ( $output == ARRAY_N ) {
2005-06-26 19:55:12 +00:00
return array_values ( get_object_vars ( $_page ));
2005-03-27 21:56:10 +00:00
} else {
2005-06-26 19:55:12 +00:00
return $_page ;
2005-03-27 21:56:10 +00:00
}
}
2006-02-28 08:00:39 +00:00
function get_category_by_path ( $category_path , $full_match = true , $output = OBJECT ) {
global $wpdb ;
$category_path = rawurlencode ( urldecode ( $category_path ));
$category_path = str_replace ( '%2F' , '/' , $category_path );
$category_path = str_replace ( '%20' , ' ' , $category_path );
$category_paths = '/' . trim ( $category_path , '/' );
$leaf_path = sanitize_title ( basename ( $category_paths ));
$category_paths = explode ( '/' , $category_paths );
foreach ( $category_paths as $pathdir )
$full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title ( $pathdir );
$categories = $wpdb -> get_results ( " SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE category_nicename = ' $leaf_path ' " );
if ( empty ( $categories ) )
return NULL ;
foreach ( $categories as $category ) {
$path = '/' . $leaf_path ;
$curcategory = $category ;
while ( $curcategory -> category_parent != 0 ) {
$curcategory = $wpdb -> get_row ( " SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE cat_ID = ' $curcategory->category_parent ' " );
$path = '/' . $curcategory -> category_nicename . $path ;
}
if ( $path == $full_path )
return get_category ( $category -> cat_ID , $output );
2005-11-09 21:30:40 +00:00
}
2006-02-12 07:53:23 +00:00
2006-02-28 08:00:39 +00:00
// If full matching is not required, return the first cat that matches the leaf.
if ( ! $full_match )
return get_category ( $categories [ 0 ] -> cat_ID , $output );
2005-11-09 21:30:40 +00:00
2006-02-28 08:00:39 +00:00
return NULL ;
2005-11-09 21:30:40 +00:00
}
2005-10-10 09:25:38 +00:00
// Retrieves category data given a category ID or category object.
2005-03-30 23:33:37 +00:00
// Handles category caching.
2005-03-27 20:45:01 +00:00
function & get_category ( & $category , $output = OBJECT ) {
2005-11-09 21:30:40 +00:00
global $wpdb ;
2005-03-30 23:33:37 +00:00
2005-04-03 05:09:31 +00:00
if ( empty ( $category ) )
return null ;
2005-10-10 09:25:38 +00:00
if ( is_object ( $category ) ) {
2005-11-09 21:30:40 +00:00
wp_cache_add ( $category -> cat_ID , $category , 'category' );
$_category = $category ;
2005-03-30 23:33:37 +00:00
} else {
2005-11-09 21:30:40 +00:00
if ( ! $_category = wp_cache_get ( $category , 'category' ) ) {
$_category = $wpdb -> get_row ( " SELECT * FROM $wpdb->categories WHERE cat_ID = ' $category ' LIMIT 1 " );
wp_cache_add ( $category , $_category , 'category' );
2005-06-26 19:55:12 +00:00
}
}
if ( $output == OBJECT ) {
return $_category ;
} elseif ( $output == ARRAY_A ) {
return get_object_vars ( $_category );
} elseif ( $output == ARRAY_N ) {
return array_values ( get_object_vars ( $_category ));
} else {
return $_category ;
}
}
2005-03-27 20:45:01 +00:00
function get_catname ( $cat_ID ) {
$category = & get_category ( $cat_ID );
return $category -> cat_name ;
2003-04-21 21:37:11 +00:00
}
2005-11-09 21:30:40 +00:00
function get_all_category_ids () {
global $wpdb ;
2006-02-12 07:53:23 +00:00
2005-11-09 21:30:40 +00:00
if ( ! $cat_ids = wp_cache_get ( 'all_category_ids' , 'category' ) ) {
$cat_ids = $wpdb -> get_col ( " SELECT cat_ID FROM $wpdb->categories " );
wp_cache_add ( 'all_category_ids' , $cat_ids , 'category' );
}
2006-02-12 07:53:23 +00:00
2005-11-09 21:30:40 +00:00
return $cat_ids ;
}
2005-11-29 01:43:32 +00:00
function get_all_page_ids () {
global $wpdb ;
2006-02-12 07:53:23 +00:00
2006-01-28 06:19:11 +00:00
if ( ! $page_ids = wp_cache_get ( 'all_page_ids' , 'pages' ) ) {
2006-02-09 10:03:48 +00:00
$page_ids = $wpdb -> get_col ( " SELECT ID FROM $wpdb->posts WHERE post_type = 'page' " );
2005-11-29 01:43:32 +00:00
wp_cache_add ( 'all_page_ids' , $page_ids , 'pages' );
}
2006-02-12 07:53:23 +00:00
2005-11-29 01:43:32 +00:00
return $page_ids ;
}
2003-04-21 21:37:11 +00:00
function gzip_compression () {
2004-06-10 10:01:45 +00:00
if ( ! get_settings ( 'gzipcompression' ) ) return false ;
2005-10-10 09:25:38 +00:00
if ( extension_loaded ( 'zlib' ) ) {
2004-06-14 23:16:03 +00:00
ob_start ( 'ob_gzhandler' );
2004-06-14 22:42:43 +00:00
}
2003-04-21 21:37:11 +00:00
}
// functions to count the page generation time (from phpBB2)
// ( or just any time between timer_start() and timer_stop() )
2004-06-10 10:01:45 +00:00
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 ;
2005-10-10 09:25:38 +00:00
if ( $display )
2004-06-10 10:01:45 +00:00
echo number_format ( $timetotal , $precision );
return $timetotal ;
2003-06-12 22:45:08 +00:00
}
2003-04-21 21:37:11 +00:00
2004-03-21 07:36:07 +00:00
function weblog_ping ( $server = '' , $path = '' ) {
2004-09-16 17:08:56 +00:00
global $wp_version ;
include_once ( ABSPATH . WPINC . '/class-IXR.php' );
// using a timeout of 3 seconds should be enough to cover slow servers
2004-09-17 08:39:12 +00:00
$client = new IXR_Client ( $server , (( ! strlen ( trim ( $path )) || ( '/' == $path )) ? false : $path ));
2004-09-16 17:08:56 +00:00
$client -> timeout = 3 ;
2004-09-17 14:11:28 +00:00
$client -> useragent .= ' -- WordPress/' . $wp_version ;
2004-09-16 17:08:56 +00:00
// when set to true, this outputs debug messages by itself
$client -> debug = false ;
2005-02-14 01:57:48 +00:00
$home = trailingslashit ( get_option ( 'home' ) );
2005-04-22 21:17:10 +00:00
if ( ! $client -> query ( 'weblogUpdates.extendedPing' , get_settings ( 'blogname' ), $home , get_bloginfo ( 'rss2_url' ) ) ) // then try a normal ping
$client -> query ( 'weblogUpdates.ping' , get_settings ( 'blogname' ), $home );
2004-03-21 07:36:07 +00:00
}
function generic_ping ( $post_id = 0 ) {
$services = get_settings ( 'ping_sites' );
2004-03-25 06:11:28 +00:00
$services = preg_replace ( " |( \ s)+| " , '$1' , $services ); // Kill dupe lines
2004-05-10 08:13:42 +00:00
$services = trim ( $services );
2005-10-10 09:25:38 +00:00
if ( '' != $services ) {
2004-05-10 08:13:42 +00:00
$services = explode ( " \n " , $services );
2004-03-25 23:05:25 +00:00
foreach ( $services as $service ) {
2004-09-17 08:39:12 +00:00
weblog_ping ( $service );
2004-03-25 23:05:25 +00:00
}
2004-03-21 07:36:07 +00:00
}
2004-09-03 20:33:15 +00:00
return $post_id ;
2004-03-21 07:36:07 +00:00
}
2003-12-22 02:46:40 +00:00
// Send a Trackback
2003-04-21 21:37:11 +00:00
function trackback ( $trackback_url , $title , $excerpt , $ID ) {
2005-03-18 15:48:30 +00:00
global $wpdb , $wp_version ;
2005-05-18 03:17:55 +00:00
2005-10-10 09:25:38 +00:00
if ( empty ( $trackback_url ) )
2005-05-18 03:17:55 +00:00
return ;
2004-06-18 00:22:09 +00:00
$title = urlencode ( $title );
$excerpt = urlencode ( $excerpt );
$blog_name = urlencode ( get_settings ( 'blogname' ));
2003-12-22 02:46:40 +00:00
$tb_url = $trackback_url ;
$url = urlencode ( get_permalink ( $ID ));
2003-04-21 21:37:11 +00:00
$query_string = " title= $title &url= $url &blog_name= $blog_name &excerpt= $excerpt " ;
2003-12-22 02:46:40 +00:00
$trackback_url = parse_url ( $trackback_url );
2005-10-10 09:25:38 +00:00
$http_request = 'POST ' . $trackback_url [ 'path' ] . ( $trackback_url [ 'query' ] ? '?' . $trackback_url [ 'query' ] : '' ) . " HTTP/1.0 \r \n " ;
2003-12-22 02:46:40 +00:00
$http_request .= 'Host: ' . $trackback_url [ 'host' ] . " \r \n " ;
2004-06-14 22:43:27 +00:00
$http_request .= 'Content-Type: application/x-www-form-urlencoded; charset=' . get_settings ( 'blog_charset' ) . " \r \n " ;
2003-12-22 02:46:40 +00:00
$http_request .= 'Content-Length: ' . strlen ( $query_string ) . " \r \n " ;
2005-03-18 15:48:30 +00:00
$http_request .= " User-Agent: WordPress/ " . $wp_version ;
2005-02-17 09:03:23 +00:00
$http_request .= " \r \n \r \n " ;
2003-12-22 02:46:40 +00:00
$http_request .= $query_string ;
2004-09-07 03:15:48 +00:00
if ( '' == $trackback_url [ 'port' ] )
$trackback_url [ 'port' ] = 80 ;
2004-09-10 10:55:44 +00:00
$fs = @ fsockopen ( $trackback_url [ 'host' ], $trackback_url [ 'port' ], $errno , $errstr , 4 );
2003-12-22 02:46:40 +00:00
@ 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 21:37:11 +00:00
*/
2003-12-22 02:46:40 +00:00
@ fclose ( $fs );
2005-09-27 03:34:37 +00:00
$tb_url = addslashes ( $tb_url );
2004-05-24 08:22:18 +00:00
$wpdb -> query ( " UPDATE $wpdb->posts SET pinged = CONCAT(pinged, ' \n ', ' $tb_url ') WHERE ID = ' $ID ' " );
2005-12-16 03:04:33 +00:00
return $wpdb -> query ( " UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, ' $tb_url ', '')) WHERE ID = ' $ID ' " );
2003-04-21 21:37:11 +00:00
}
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 );
2006-01-19 00:21:42 +00:00
$link_url = (( strtolower ( substr ( $link_url , 0 , 7 )) != 'http://' ) && ( strtolower ( substr ( $link_url , 0 , 8 )) != 'https://' )) ? get_settings ( 'home' ) . $link_url : $link_url ;
2003-04-21 21:37:11 +00:00
$links_summary .= " \n " . $link_number . ' ' . $link_url ;
}
$content = strip_tags ( $content );
$content .= $links_summary ;
2003-06-07 17:19:38 +00:00
return $content ;
2003-04-21 21:37:11 +00:00
}
function xmlrpc_getposttitle ( $content ) {
global $post_default_title ;
2005-10-10 09:25:38 +00:00
if ( preg_match ( '/<title>(.+?)<\/title>/is' , $content , $matchtitle ) ) {
2003-04-21 21:37:11 +00:00
$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 17:19:38 +00:00
return $post_title ;
2003-04-21 21:37:11 +00:00
}
2005-10-10 09:25:38 +00:00
2003-04-21 21:37:11 +00:00
function xmlrpc_getpostcategory ( $content ) {
global $post_default_category ;
2005-10-10 09:25:38 +00:00
if ( preg_match ( '/<category>(.+?)<\/category>/is' , $content , $matchcat ) ) {
2004-05-23 02:55:10 +00:00
$post_category = trim ( $matchcat [ 1 ], ',' );
$post_category = explode ( ',' , $post_category );
2003-04-21 21:37:11 +00:00
} else {
$post_category = $post_default_category ;
}
2003-06-07 17:19:38 +00:00
return $post_category ;
2003-04-21 21:37:11 +00: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 17:19:38 +00:00
return $content ;
2003-04-21 21:37:11 +00:00
}
function debug_fopen ( $filename , $mode ) {
global $debug ;
2005-10-10 09:25:38 +00:00
if ( $debug == 1 ) {
2003-04-21 21:37:11 +00:00
$fp = fopen ( $filename , $mode );
return $fp ;
} else {
return false ;
}
}
function debug_fwrite ( $fp , $string ) {
global $debug ;
2005-10-10 09:25:38 +00:00
if ( $debug == 1 ) {
2003-04-21 21:37:11 +00:00
fwrite ( $fp , $string );
}
}
function debug_fclose ( $fp ) {
global $debug ;
2005-10-10 09:25:38 +00:00
if ( $debug == 1 ) {
2003-04-21 21:37:11 +00:00
fclose ( $fp );
}
}
2004-10-18 12:09:20 +00:00
function do_enclose ( $content , $post_ID ) {
global $wp_version , $wpdb ;
include_once ( ABSPATH . WPINC . '/class-IXR.php' );
2005-02-12 08:58:10 +00:00
$log = debug_fopen ( ABSPATH . '/enclosures.log' , 'a' );
2004-10-18 12:09:20 +00:00
$post_links = array ();
debug_fwrite ( $log , 'BEGIN ' . date ( 'YmdHis' , time ()) . " \n " );
2005-02-12 08:58:10 +00:00
$pung = get_enclosed ( $post_ID );
2004-10-18 12:09:20 +00:00
$ltrs = '\w' ;
$gunk = '/#~:.?+=&%@!\-' ;
$punc = '.:?\-' ;
$any = $ltrs . $gunk . $punc ;
preg_match_all ( " { \ b http : [ $any ] +? (?= [ $punc ] * [^ $any ] | $ )}x " , $content , $post_links_temp );
debug_fwrite ( $log , 'Post contents:' );
debug_fwrite ( $log , $content . " \n " );
foreach ( $post_links_temp [ 0 ] as $link_test ) :
if ( ! in_array ( $link_test , $pung ) ) : // If we haven't pung it already
$test = parse_url ( $link_test );
2005-10-10 09:25:38 +00:00
if ( isset ( $test [ 'query' ]) )
2004-10-18 12:09:20 +00:00
$post_links [] = $link_test ;
2005-10-10 09:25:38 +00:00
elseif (( $test [ 'path' ] != '/' ) && ( $test [ 'path' ] != '' ))
2004-10-18 12:09:20 +00:00
$post_links [] = $link_test ;
endif ;
endforeach ;
2005-03-07 08:56:47 +00:00
foreach ( $post_links as $url ) :
2005-04-20 21:07:19 +00:00
if ( $url != '' && ! $wpdb -> get_var ( " SELECT post_id FROM $wpdb->postmeta WHERE post_id = ' $post_ID ' AND meta_key = 'enclosure' AND meta_value LIKE (' $url %') " ) ) {
2005-03-07 08:56:47 +00:00
if ( $headers = wp_get_http_headers ( $url ) ) {
2005-10-10 09:25:38 +00:00
$len = ( int ) $headers [ 'content-length' ];
2005-07-05 20:47:22 +00:00
$type = $wpdb -> escape ( $headers [ 'content-type' ] );
2005-03-07 08:56:47 +00:00
$allowed_types = array ( 'video' , 'audio' );
2005-10-10 09:25:38 +00:00
if ( in_array ( substr ( $type , 0 , strpos ( $type , " / " ) ), $allowed_types ) ) {
2005-03-07 08:56:47 +00:00
$meta_value = " $url\n $len\n $type\n " ;
2005-04-20 21:07:19 +00:00
$wpdb -> query ( " INSERT INTO ` $wpdb->postmeta ` ( `post_id` , `meta_key` , `meta_value` )
VALUES ( '$post_ID' , 'enclosure' , '$meta_value' ) " );
2005-03-07 08:56:47 +00:00
}
}
}
endforeach ;
}
2005-10-19 06:09:23 +00:00
function wp_get_http_headers ( $url , $red = 1 ) {
2005-10-10 16:36:54 +00:00
global $wp_version ;
2005-10-10 09:25:38 +00:00
@ set_time_limit ( 60 );
2005-10-19 06:09:23 +00:00
if ( $red > 5 )
return false ;
2005-03-07 08:56:47 +00:00
$parts = parse_url ( $url );
2005-10-10 09:25:38 +00:00
$file = $parts [ 'path' ] . ( $parts [ 'query' ] ? '?' . $parts [ 'query' ] : '' );
$host = $parts [ 'host' ];
2005-03-07 08:56:47 +00:00
if ( ! isset ( $parts [ 'port' ] ) )
$parts [ 'port' ] = 80 ;
2005-10-10 16:36:54 +00:00
$head = " HEAD $file HTTP/1.1 \r \n HOST: $host\r\nUser -Agent: WordPress/ " . $wp_version . " \r \n \r \n " ;
2005-03-07 08:56:47 +00:00
$fp = @ fsockopen ( $host , $parts [ 'port' ], $err_num , $err_msg , 3 );
if ( ! $fp )
return false ;
$response = '' ;
fputs ( $fp , $head );
while ( ! feof ( $fp ) && strpos ( $response , " \r \n \r \n " ) == false )
$response .= fgets ( $fp , 2048 );
fclose ( $fp );
preg_match_all ( '/(.*?): (.*)\r/' , $response , $matches );
$count = count ( $matches [ 1 ]);
for ( $i = 0 ; $i < $count ; $i ++ ) {
$key = strtolower ( $matches [ 1 ][ $i ]);
$headers [ " $key " ] = $matches [ 2 ][ $i ];
}
2005-10-19 06:09:23 +00:00
$code = preg_replace ( '/.*?(\d{3}).*/i' , '$1' , $response );
$headers [ 'status_code' ] = $code ;
if ( '302' == $code || '301' == $code )
return wp_get_http_headers ( $url , ++ $red );
2005-03-07 08:56:47 +00:00
preg_match ( '/.*([0-9]{3}).*/' , $response , $return );
$headers [ 'response' ] = $return [ 1 ]; // HTTP response code eg 204, 200, 404
return $headers ;
2004-10-18 12:09:20 +00:00
}
2005-01-19 02:21:36 +00:00
// Setup global post data.
function setup_postdata ( $post ) {
2005-10-10 09:25:38 +00:00
global $id , $postdata , $authordata , $day , $page , $pages , $multipage , $more , $numpages , $wp_query ;
2005-01-19 02:21:36 +00:00
global $pagenow ;
2004-08-08 15:31:50 +00:00
2005-04-09 17:12:36 +00:00
$id = $post -> ID ;
2003-10-27 07:00:42 +00:00
$authordata = get_userdata ( $post -> post_author );
2004-04-27 03:59:13 +00:00
2004-03-25 02:21:40 +00:00
$day = mysql2date ( 'd.m.y' , $post -> post_date );
$currentmonth = mysql2date ( 'm' , $post -> post_date );
2003-10-27 07:00:42 +00:00
$numpages = 1 ;
2005-04-14 04:24:22 +00:00
$page = get_query_var ( 'page' );
2005-10-10 09:25:38 +00:00
if ( ! $page )
2003-10-27 07:00:42 +00:00
$page = 1 ;
2005-10-10 09:25:38 +00:00
if ( is_single () || is_page () )
2003-10-27 07:00:42 +00:00
$more = 1 ;
$content = $post -> post_content ;
2005-10-10 09:25:38 +00:00
if ( preg_match ( '/<!--nextpage-->/' , $content ) ) {
if ( $page > 1 )
2003-10-27 07:00:42 +00:00
$more = 1 ;
$multipage = 1 ;
$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 {
2004-06-11 16:51:39 +00:00
$pages [ 0 ] = $post -> post_content ;
2003-10-27 07:00:42 +00:00
$multipage = 0 ;
}
return true ;
}
2006-02-22 19:08:55 +00:00
// Setup global user vars. Used by set_current_user() for back compat.
function setup_userdata ( $user_id = '' ) {
global $user_login , $userdata , $user_level , $user_ID , $user_email , $user_url , $user_pass_md5 , $user_identity ;
if ( '' == $user_id )
$user = wp_get_current_user ();
else
$user = new WP_User ( $user_id );
if ( 0 == $user -> ID )
return ;
$userdata = $user -> data ;
$user_login = $user -> user_login ;
$user_level = $user -> user_level ;
$user_ID = $user -> ID ;
$user_email = $user -> user_email ;
$user_url = $user -> user_url ;
$user_pass_md5 = md5 ( $user -> user_pass );
$user_identity = $user -> display_name ;
}
2003-10-27 07:00:42 +00:00
function is_new_day () {
global $day , $previousday ;
2005-10-10 09:25:38 +00:00
if ( $day != $previousday ) {
2003-10-27 07:00:42 +00:00
return ( 1 );
} else {
return ( 0 );
}
}
2004-02-17 03:00:20 +00:00
// Filters: these are the core of WP's plugin architecture
2005-02-01 06:20:54 +00:00
function merge_filters ( $tag ) {
2003-12-18 09:36:13 +00:00
global $wp_filter ;
2005-10-10 09:25:38 +00:00
if ( isset ( $wp_filter [ 'all' ]) ) {
2004-02-09 11:58:49 +00:00
foreach ( $wp_filter [ 'all' ] as $priority => $functions ) {
2005-10-10 09:25:38 +00:00
if ( isset ( $wp_filter [ $tag ][ $priority ]) )
2004-02-09 11:58:49 +00:00
$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 07:00:42 +00:00
}
2004-09-27 00:45:53 +00:00
2005-03-07 15:20:56 +00:00
if ( isset ( $wp_filter [ $tag ]) )
ksort ( $wp_filter [ $tag ] );
2005-02-01 06:20:54 +00:00
}
function apply_filters ( $tag , $string ) {
global $wp_filter ;
2005-10-10 09:25:38 +00:00
2005-03-02 15:28:32 +00:00
$args = array_slice ( func_get_args (), 2 );
2005-02-06 06:13:26 +00:00
2005-02-01 06:20:54 +00:00
merge_filters ( $tag );
2005-10-10 09:25:38 +00:00
if ( ! isset ( $wp_filter [ $tag ]) ) {
2005-03-02 15:28:32 +00:00
return $string ;
}
foreach ( $wp_filter [ $tag ] as $priority => $functions ) {
2005-10-10 09:25:38 +00:00
if ( ! is_null ( $functions ) ) {
2005-03-02 15:28:32 +00:00
foreach ( $functions as $function ) {
$all_args = array_merge ( array ( $string ), $args );
$function_name = $function [ 'function' ];
$accepted_args = $function [ 'accepted_args' ];
2005-10-10 09:25:38 +00:00
if ( $accepted_args == 1 )
2005-03-11 00:57:34 +00:00
$the_args = array ( $string );
2005-10-10 09:25:38 +00:00
elseif ( $accepted_args > 1 )
2005-03-11 00:57:34 +00:00
$the_args = array_slice ( $all_args , 0 , $accepted_args );
2005-10-10 09:25:38 +00:00
elseif ( $accepted_args == 0 )
2005-03-11 00:57:34 +00:00
$the_args = NULL ;
2005-10-10 09:25:38 +00:00
else
2005-03-11 00:57:34 +00:00
$the_args = $all_args ;
2005-03-02 15:28:32 +00:00
2005-03-11 00:57:34 +00:00
$string = call_user_func_array ( $function_name , $the_args );
2004-09-27 00:45:53 +00:00
}
2003-10-27 07:00:42 +00:00
}
}
return $string ;
}
2005-03-02 15:28:32 +00:00
function add_filter ( $tag , $function_to_add , $priority = 10 , $accepted_args = 1 ) {
2003-12-18 09:36:13 +00:00
global $wp_filter ;
2005-03-02 15:28:32 +00:00
// check that we don't already have the same filter at the same priority
2005-10-10 09:25:38 +00:00
if ( isset ( $wp_filter [ $tag ][ " $priority " ]) ) {
2005-03-02 15:28:32 +00:00
foreach ( $wp_filter [ $tag ][ " $priority " ] as $filter ) {
// uncomment if we want to match function AND accepted_args
2005-10-10 09:25:38 +00:00
// if ( $filter == array($function, $accepted_args) ) {
if ( $filter [ 'function' ] == $function_to_add ) {
2005-03-02 15:28:32 +00:00
return true ;
}
}
2004-02-09 11:58:49 +00:00
}
2005-03-02 15:28:32 +00:00
// So the format is wp_filter['tag']['array of priorities']['array of ['array (functions, accepted_args)]']
$wp_filter [ $tag ][ " $priority " ][] = array ( 'function' => $function_to_add , 'accepted_args' => $accepted_args );
2004-02-09 11:58:49 +00:00
return true ;
}
2005-03-02 15:28:32 +00:00
function remove_filter ( $tag , $function_to_remove , $priority = 10 , $accepted_args = 1 ) {
2004-02-09 11:58:49 +00:00
global $wp_filter ;
2005-03-02 15:28:32 +00:00
// rebuild the list of filters
2005-10-10 09:25:38 +00:00
if ( isset ( $wp_filter [ $tag ][ " $priority " ]) ) {
2005-03-02 15:28:32 +00:00
foreach ( $wp_filter [ $tag ][ " $priority " ] as $filter ) {
2005-10-10 09:25:38 +00:00
if ( $filter [ 'function' ] != $function_to_remove ) {
2005-03-02 15:28:32 +00:00
$new_function_list [] = $filter ;
2003-10-27 07:00:42 +00:00
}
}
2004-02-09 11:58:49 +00:00
$wp_filter [ $tag ][ " $priority " ] = $new_function_list ;
2003-10-27 07:00:42 +00:00
}
return true ;
}
2004-02-17 03:00:20 +00:00
// The *_action functions are just aliases for the *_filter functions, they take special strings instead of generic content
2005-02-01 06:20:54 +00:00
function do_action ( $tag , $arg = '' ) {
global $wp_filter ;
2005-03-02 15:28:32 +00:00
$extra_args = array_slice ( func_get_args (), 2 );
2005-03-11 00:57:34 +00:00
if ( is_array ( $arg ) )
$args = array_merge ( $arg , $extra_args );
2005-02-01 06:20:54 +00:00
else
2005-03-02 15:28:32 +00:00
$args = array_merge ( array ( $arg ), $extra_args );
2005-10-10 09:25:38 +00:00
2005-02-01 06:20:54 +00:00
merge_filters ( $tag );
2005-10-10 09:25:38 +00:00
if ( ! isset ( $wp_filter [ $tag ]) ) {
2005-03-02 15:28:32 +00:00
return ;
}
foreach ( $wp_filter [ $tag ] as $priority => $functions ) {
2005-10-10 09:25:38 +00:00
if ( ! is_null ( $functions ) ) {
2005-03-02 15:28:32 +00:00
foreach ( $functions as $function ) {
$function_name = $function [ 'function' ];
$accepted_args = $function [ 'accepted_args' ];
2005-10-10 09:25:38 +00:00
if ( $accepted_args == 1 ) {
2005-03-11 00:57:34 +00:00
if ( is_array ( $arg ) )
$the_args = $arg ;
else
$the_args = array ( $arg );
2005-10-10 09:25:38 +00:00
} elseif ( $accepted_args > 1 ) {
2005-03-11 00:57:34 +00:00
$the_args = array_slice ( $args , 0 , $accepted_args );
2005-10-10 09:25:38 +00:00
} elseif ( $accepted_args == 0 ) {
2005-03-11 00:57:34 +00:00
$the_args = NULL ;
2005-03-02 15:28:32 +00:00
} else {
2005-03-11 00:57:34 +00:00
$the_args = $args ;
2005-02-01 06:20:54 +00:00
}
2005-03-02 15:28:32 +00:00
2005-03-11 00:57:34 +00:00
$string = call_user_func_array ( $function_name , $the_args );
2005-02-01 06:20:54 +00:00
}
}
}
2004-02-17 03:00:20 +00:00
}
2005-03-02 15:28:32 +00:00
function add_action ( $tag , $function_to_add , $priority = 10 , $accepted_args = 1 ) {
add_filter ( $tag , $function_to_add , $priority , $accepted_args );
2004-02-17 03:00:20 +00:00
}
2005-03-02 15:28:32 +00:00
function remove_action ( $tag , $function_to_remove , $priority = 10 , $accepted_args = 1 ) {
remove_filter ( $tag , $function_to_remove , $priority , $accepted_args );
2004-02-17 03:00:20 +00:00
}
2005-02-16 15:12:04 +00:00
function get_page_uri ( $page_id ) {
2005-03-27 21:56:10 +00:00
$page = get_page ( $page_id );
2004-11-02 01:56:29 +00:00
$uri = urldecode ( $page -> post_name );
2004-10-06 02:18:37 +00:00
2004-11-24 00:12:46 +00:00
// A page cannot be it's own parent.
2005-10-10 09:25:38 +00:00
if ( $page -> post_parent == $page -> ID )
2004-11-24 00:12:46 +00:00
return $uri ;
2005-10-10 09:25:38 +00:00
2004-10-06 02:18:37 +00:00
while ( $page -> post_parent != 0 ) {
2005-03-27 21:56:10 +00:00
$page = get_page ( $page -> post_parent );
2004-11-02 01:56:29 +00:00
$uri = urldecode ( $page -> post_name ) . " / " . $uri ;
2004-10-06 02:18:37 +00:00
}
return $uri ;
}
2004-02-21 14:10:07 +00:00
function get_posts ( $args ) {
2004-05-24 08:22:18 +00:00
global $wpdb ;
2006-03-21 04:26:50 +00:00
if ( is_array ( $args ) )
$r = & $args ;
else
parse_str ( $args , $r );
$defaults = array ( 'numberposts' => 5 , 'offset' => 0 , 'category' => '' ,
2006-03-21 22:46:38 +00:00
'orderby' => 'post_date' , 'order' => 'DESC' , 'include' => '' , 'exclude' => '' , 'meta_key' => '' , 'meta_value' => '' );
2006-03-21 04:26:50 +00:00
$r = array_merge ( $defaults , $r );
extract ( $r );
$inclusions = '' ;
if ( ! empty ( $include ) ) {
2006-03-21 22:46:38 +00:00
$offset = 0 ; //ignore offset, category, exclude, meta_key, and meta_value params if using include
2006-03-21 04:26:50 +00:00
$category = '' ;
$exclude = '' ;
2006-03-21 22:46:38 +00:00
$meta_key = '' ;
$meta_value = '' ;
2006-03-21 04:26:50 +00:00
$incposts = preg_split ( '/[\s,]+/' , $include );
$numberposts = count ( $incposts ); // only the number of posts included
if ( count ( $incposts ) ) {
foreach ( $incposts as $incpost ) {
if ( empty ( $inclusions ))
$inclusions = ' AND ( ID = ' . intval ( $incpost ) . ' ' ;
else
$inclusions .= ' OR ID = ' . intval ( $incpost ) . ' ' ;
}
}
}
if ( ! empty ( $inclusions ))
$inclusions .= ')' ;
$exclusions = '' ;
if ( ! empty ( $exclude ) ) {
$exposts = preg_split ( '/[\s,]+/' , $exclude );
if ( count ( $exposts ) ) {
foreach ( $exposts as $expost ) {
if ( empty ( $exclusions ))
$exclusions = ' AND ( ID <> ' . intval ( $expost ) . ' ' ;
else
$exclusions .= ' AND ID <> ' . intval ( $expost ) . ' ' ;
}
}
}
if ( ! empty ( $exclusions ))
$exclusions .= ')' ;
2004-02-21 14:10:07 +00:00
2006-03-21 22:46:38 +00:00
$query = " SELECT DISTINCT * FROM $wpdb->posts " ;
$query .= ( empty ( $category ) ? " " : " , $wpdb->post2cat " ) ;
$query .= ( empty ( $meta_key ) ? " " : " , $wpdb->postmeta " ) ;
$query .= " WHERE (post_type = 'post' AND post_status = 'publish') $exclusions $inclusions " ;
$query .= ( empty ( $category ) ? " " : " AND ( $wpdb->posts .ID = $wpdb->post2cat .post_id AND $wpdb->post2cat .category_id = " . $category . " ) " ) ;
$query .= ( empty ( $meta_key ) | empty ( $meta_value ) ? " " : " AND ( $wpdb->posts .ID = $wpdb->postmeta .post_id AND $wpdb->postmeta .meta_key = ' $meta_key ' AND $wpdb->postmeta .meta_value = ' $meta_value ' ) " ) ;
$query .= " GROUP BY $wpdb->posts .ID ORDER BY " . $orderby . " " . $order . " LIMIT " . $offset . ',' . $numberposts ;
$posts = $wpdb -> get_results ( $query );
2005-10-10 09:25:38 +00:00
update_post_caches ( $posts );
2004-02-21 14:10:07 +00:00
return $posts ;
}
2005-03-27 20:45:01 +00:00
function update_post_cache ( & $posts ) {
global $post_cache ;
2005-03-01 09:10:12 +00:00
if ( ! $posts )
return ;
2005-03-27 20:45:01 +00:00
for ( $i = 0 ; $i < count ( $posts ); $i ++ ) {
$post_cache [ $posts [ $i ] -> ID ] = & $posts [ $i ];
}
}
2005-09-14 00:34:04 +00:00
function clean_post_cache ( $id ) {
global $post_cache ;
2005-10-10 09:25:38 +00:00
2005-09-14 00:34:04 +00:00
if ( isset ( $post_cache [ $id ] ) )
unset ( $post_cache [ $id ] );
}
2005-03-27 21:56:10 +00:00
function update_page_cache ( & $pages ) {
global $page_cache ;
if ( ! $pages )
return ;
for ( $i = 0 ; $i < count ( $pages ); $i ++ ) {
$page_cache [ $pages [ $i ] -> ID ] = & $pages [ $i ];
2005-11-09 21:30:40 +00:00
wp_cache_add ( $pages [ $i ] -> ID , $pages [ $i ], 'pages' );
2005-03-27 21:56:10 +00:00
}
}
2005-09-14 00:34:04 +00:00
function clean_page_cache ( $id ) {
global $page_cache ;
2005-10-10 09:25:38 +00:00
2005-09-14 00:34:04 +00:00
if ( isset ( $page_cache [ $id ] ) )
unset ( $page_cache [ $id ] );
}
2005-03-27 20:45:01 +00:00
function update_post_category_cache ( $post_ids ) {
2005-11-09 21:30:40 +00:00
global $wpdb , $category_cache ;
2005-03-27 20:45:01 +00:00
2005-10-10 09:25:38 +00:00
if ( empty ( $post_ids ) )
2005-03-27 20:45:01 +00:00
return ;
2005-10-10 09:25:38 +00:00
if ( is_array ( $post_ids ) )
2005-03-27 20:45:01 +00:00
$post_ids = implode ( ',' , $post_ids );
2005-03-01 09:10:12 +00:00
2005-11-28 09:44:56 +00:00
$dogs = $wpdb -> get_results ( " SELECT post_id, category_id FROM $wpdb->post2cat WHERE post_id IN ( $post_ids ) " );
2005-03-27 20:45:01 +00:00
2005-11-09 21:30:40 +00:00
if ( empty ( $dogs ) )
return ;
2006-02-12 07:53:23 +00:00
2005-11-09 21:30:40 +00:00
foreach ( $dogs as $catt )
2005-11-28 09:44:56 +00:00
$category_cache [ $catt -> post_id ][ $catt -> category_id ] = & get_category ( $catt -> category_id );
2005-03-27 20:45:01 +00:00
}
function update_post_caches ( & $posts ) {
2006-04-19 02:53:02 +00:00
global $post_cache , $category_cache , $post_meta_cache ;
2005-03-27 20:45:01 +00:00
global $wpdb ;
2005-10-10 09:25:38 +00:00
2005-03-27 20:45:01 +00: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
for ( $i = 0 ; $i < count ( $posts ); $i ++ ) {
2005-10-29 23:23:17 +00:00
$post_id_array [] = $posts [ $i ] -> ID ;
2005-03-27 20:45:01 +00:00
$post_cache [ $posts [ $i ] -> ID ] = & $posts [ $i ];
}
2005-10-29 23:23:17 +00:00
$post_id_list = implode ( ',' , $post_id_array );
2005-10-10 09:25:38 +00:00
2005-03-27 20:45:01 +00:00
update_post_category_cache ( $post_id_list );
2005-03-01 09:10:12 +00:00
2005-10-10 09:25:38 +00:00
// Get post-meta info
if ( $meta_list = $wpdb -> get_results ( " SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN( $post_id_list ) ORDER BY post_id, meta_key " , ARRAY_A ) ) {
2005-03-01 09:10:12 +00:00
// 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:
2005-10-10 09:25:38 +00:00
if ( ! isset ( $post_meta_cache [ $mpid ]) || ! is_array ( $post_meta_cache [ $mpid ]) )
2005-03-01 09:10:12 +00:00
$post_meta_cache [ $mpid ] = array ();
2005-10-10 09:25:38 +00:00
if ( ! isset ( $post_meta_cache [ $mpid ][ " $mkey " ]) || ! is_array ( $post_meta_cache [ $mpid ][ " $mkey " ]) )
2005-03-01 09:10:12 +00:00
$post_meta_cache [ $mpid ][ " $mkey " ] = array ();
// Add a value to the current pid/key:
$post_meta_cache [ $mpid ][ $mkey ][] = $mval ;
}
}
2004-05-24 02:55:39 +00:00
}
function update_category_cache () {
2005-11-09 21:30:40 +00:00
return true ;
2005-09-14 00:03:02 +00:00
}
2004-04-16 02:24:37 +00:00
function wp_head () {
2005-02-01 06:20:54 +00:00
do_action ( 'wp_head' );
2004-04-16 02:24:37 +00:00
}
2005-03-29 15:11:36 +00:00
function wp_footer () {
do_action ( 'wp_footer' );
}
2004-10-02 00:46:30 +00:00
// Borrowed from the PHP Manual user notes. Convert entities, while
// preserving already-encoded entities:
function htmlentities2 ( $myHTML ) {
$translation_table = get_html_translation_table ( HTML_ENTITIES , ENT_QUOTES );
$translation_table [ chr ( 38 )] = '&' ;
return preg_replace ( " /&(?![A-Za-z] { 0,4} \ w { 2,3};|#[0-9] { 2,3};)/ " , " & " , strtr ( $myHTML , $translation_table ));
}
2004-10-20 21:28:37 +00:00
/*
add_query_arg : Returns a modified querystring by adding
a single key & value or an associative array .
Setting a key value to emptystring removes the key .
Omitting oldquery_or_uri uses the $_SERVER value .
Parameters :
add_query_arg ( newkey , newvalue , oldquery_or_uri ) or
add_query_arg ( associative_array , oldquery_or_uri )
*/
function add_query_arg () {
$ret = '' ;
2005-10-10 09:25:38 +00:00
if ( is_array ( func_get_arg ( 0 )) ) {
2006-01-23 23:42:25 +00:00
if ( @ func_num_args () < 2 )
$uri = $_SERVER [ 'REQUEST_URI' ];
else
$uri = @ func_get_arg ( 1 );
2005-10-10 09:25:38 +00:00
} else {
if ( @ func_num_args () < 3 )
2004-11-21 06:03:19 +00:00
$uri = $_SERVER [ 'REQUEST_URI' ];
2005-10-10 09:25:38 +00:00
else
2004-11-21 06:03:19 +00:00
$uri = @ func_get_arg ( 2 );
2004-10-20 21:28:37 +00:00
}
2004-11-21 06:03:19 +00:00
2005-10-10 09:25:38 +00:00
if ( strstr ( $uri , '?' ) ) {
2004-10-20 21:28:37 +00:00
$parts = explode ( '?' , $uri , 2 );
2005-10-10 09:25:38 +00:00
if ( 1 == count ( $parts ) ) {
2004-10-20 21:28:37 +00:00
$base = '?' ;
$query = $parts [ 0 ];
2005-10-10 09:25:38 +00:00
} else {
2004-10-20 21:28:37 +00:00
$base = $parts [ 0 ] . '?' ;
$query = $parts [ 1 ];
}
}
2005-10-10 09:25:38 +00:00
else if ( strstr ( $uri , '/' ) ) {
2004-10-20 21:28:37 +00:00
$base = $uri . '?' ;
$query = '' ;
2005-04-01 05:42:46 +00:00
} else {
$base = '' ;
$query = $uri ;
2004-10-20 21:28:37 +00:00
}
2005-04-01 05:42:46 +00:00
2004-10-20 21:28:37 +00:00
parse_str ( $query , $qs );
2005-10-10 09:25:38 +00:00
if ( is_array ( func_get_arg ( 0 )) ) {
2004-10-20 21:28:37 +00:00
$kayvees = func_get_arg ( 0 );
$qs = array_merge ( $qs , $kayvees );
2005-10-10 09:25:38 +00:00
} else {
$qs [ func_get_arg ( 0 )] = func_get_arg ( 1 );
2004-10-20 21:28:37 +00:00
}
2005-10-10 09:25:38 +00:00
foreach ( $qs as $k => $v ) {
if ( $v != '' ) {
if ( $ret != '' )
$ret .= '&' ;
$ret .= " $k = $v " ;
}
}
$ret = $base . $ret ;
2004-10-20 21:28:37 +00:00
return trim ( $ret , '?' );
}
function remove_query_arg ( $key , $query ) {
2005-06-20 02:03:35 +00:00
return add_query_arg ( $key , '' , $query );
2004-10-20 21:28:37 +00:00
}
2004-12-04 00:12:08 +00:00
2004-12-16 02:57:05 +00:00
function add_magic_quotes ( $array ) {
2005-07-05 20:47:22 +00:00
global $wpdb ;
2004-12-16 02:57:05 +00:00
foreach ( $array as $k => $v ) {
2005-10-10 09:25:38 +00:00
if ( is_array ( $v ) ) {
2004-12-16 02:57:05 +00:00
$array [ $k ] = add_magic_quotes ( $v );
} else {
2005-07-05 20:47:22 +00:00
$array [ $k ] = $wpdb -> escape ( $v );
2004-12-16 02:57:05 +00:00
}
}
return $array ;
}
2005-05-03 07:52:11 +00:00
function wp_remote_fopen ( $uri ) {
2005-05-13 21:53:18 +00:00
if ( ini_get ( 'allow_url_fopen' ) ) {
$fp = fopen ( $uri , 'r' );
if ( ! $fp )
return false ;
$linea = '' ;
while ( $remote_read = fread ( $fp , 4096 ) )
$linea .= $remote_read ;
fclose ( $fp );
2005-10-10 09:25:38 +00:00
return $linea ;
2005-05-13 21:53:18 +00:00
} else if ( function_exists ( 'curl_init' ) ) {
2005-05-03 07:52:11 +00:00
$handle = curl_init ();
curl_setopt ( $handle , CURLOPT_URL , $uri );
curl_setopt ( $handle , CURLOPT_CONNECTTIMEOUT , 1 );
curl_setopt ( $handle , CURLOPT_RETURNTRANSFER , 1 );
$buffer = curl_exec ( $handle );
curl_close ( $handle );
return $buffer ;
} else {
2005-05-13 21:53:18 +00:00
return false ;
2005-10-10 09:25:38 +00:00
}
2005-05-03 07:52:11 +00:00
}
2005-06-10 23:15:13 +00:00
function wp ( $query_vars = '' ) {
global $wp ;
2006-02-12 07:53:23 +00:00
2005-06-10 23:15:13 +00:00
$wp -> main ( $query_vars );
}
2005-06-09 00:17:43 +00:00
function status_header ( $header ) {
2005-10-10 09:25:38 +00:00
if ( 200 == $header )
2005-06-09 00:17:43 +00:00
$text = 'OK' ;
2005-10-10 09:25:38 +00:00
elseif ( 301 == $header )
2005-06-09 00:17:43 +00:00
$text = 'Moved Permanently' ;
2005-10-10 09:25:38 +00:00
elseif ( 302 == $header )
2005-06-09 00:17:43 +00:00
$text = 'Moved Temporarily' ;
2005-10-10 09:25:38 +00:00
elseif ( 304 == $header )
2005-06-09 00:17:43 +00:00
$text = 'Not Modified' ;
2005-10-10 09:25:38 +00:00
elseif ( 404 == $header )
2005-06-09 00:17:43 +00:00
$text = 'Not Found' ;
2005-10-10 09:25:38 +00:00
elseif ( 410 == $header )
2005-06-09 00:17:43 +00:00
$text = 'Gone' ;
2005-10-10 09:25:38 +00:00
2005-11-07 09:05:47 +00:00
@ header ( " HTTP/1.1 $header $text " );
@ header ( " Status: $header $text " );
2005-06-09 00:17:43 +00:00
}
function nocache_headers () {
@ header ( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
@ header ( 'Last-Modified: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' );
@ header ( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
@ header ( 'Pragma: no-cache' );
}
2005-07-11 22:39:50 +00:00
function get_usermeta ( $user_id , $meta_key = '' ) {
global $wpdb ;
$user_id = ( int ) $user_id ;
if ( ! empty ( $meta_key ) ) {
$meta_key = preg_replace ( '|a-z0-9_|i' , '' , $meta_key );
2005-07-17 19:55:19 +00:00
$metas = $wpdb -> get_results ( " SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = ' $user_id ' AND meta_key = ' $meta_key ' " );
2005-07-11 22:39:50 +00:00
} else {
2005-07-17 19:55:19 +00:00
$metas = $wpdb -> get_results ( " SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = ' $user_id ' " );
2005-07-11 22:39:50 +00:00
}
2005-07-19 14:24:06 +00:00
if ( empty ( $metas ) ) {
if ( empty ( $meta_key ) )
return array ();
else
return '' ;
}
2005-10-10 09:25:38 +00:00
2005-07-11 22:39:50 +00:00
foreach ( $metas as $index => $meta ) {
2005-07-17 19:55:19 +00:00
@ $value = unserialize ( $meta -> meta_value );
2005-10-10 09:25:38 +00:00
if ( $value === FALSE )
2005-07-17 19:55:19 +00:00
$value = $meta -> meta_value ;
2005-10-10 09:25:38 +00:00
2005-07-17 19:55:19 +00:00
$values [] = $value ;
2005-07-11 22:39:50 +00:00
}
2005-07-17 19:55:19 +00:00
if ( count ( $values ) == 1 )
return $values [ 0 ];
2005-07-11 22:39:50 +00:00
else
2005-07-17 19:55:19 +00:00
return $values ;
2005-07-11 22:39:50 +00:00
}
2005-06-12 20:49:13 +00:00
function update_usermeta ( $user_id , $meta_key , $meta_value ) {
global $wpdb ;
2005-07-09 01:27:46 +00:00
if ( ! is_numeric ( $user_id ) )
return false ;
2005-07-23 06:29:46 +00:00
$meta_key = preg_replace ( '|[^a-z0-9_]|i' , '' , $meta_key );
2005-07-11 22:39:50 +00:00
if ( is_array ( $meta_value ) || is_object ( $meta_value ) )
$meta_value = serialize ( $meta_value );
2005-11-28 08:48:18 +00:00
$meta_value = trim ( $meta_value );
2006-02-12 07:53:23 +00:00
2006-01-29 19:48:09 +00:00
if ( empty ( $meta_value )) {
2006-03-30 23:15:35 +00:00
return delete_usermeta ( $user_id , $meta_key );
2006-01-29 19:48:09 +00:00
}
2005-11-28 08:48:18 +00:00
2005-06-12 20:49:13 +00:00
$cur = $wpdb -> get_row ( " SELECT * FROM $wpdb->usermeta WHERE user_id = ' $user_id ' AND meta_key = ' $meta_key ' " );
2005-09-23 23:22:51 +00:00
if ( ! $cur ) {
2005-06-12 20:49:13 +00:00
$wpdb -> query ( " INSERT INTO $wpdb->usermeta ( user_id, meta_key, meta_value )
VALUES
( '$user_id' , '$meta_key' , '$meta_value' ) " );
2005-12-01 17:38:37 +00:00
} else if ( $cur -> meta_value != $meta_value ) {
2005-06-12 20:49:13 +00:00
$wpdb -> query ( " UPDATE $wpdb->usermeta SET meta_value = ' $meta_value ' WHERE user_id = ' $user_id ' AND meta_key = ' $meta_key ' " );
2005-12-01 17:38:37 +00:00
} else {
2006-02-12 07:53:23 +00:00
return false ;
2005-12-01 17:38:37 +00:00
}
2006-02-12 07:53:23 +00:00
2005-12-01 17:38:37 +00:00
$user = get_userdata ( $user_id );
2005-11-09 21:30:40 +00:00
wp_cache_delete ( $user_id , 'users' );
2005-12-19 19:14:22 +00:00
wp_cache_delete ( $user -> user_login , 'userlogins' );
2006-02-12 07:53:23 +00:00
2005-12-01 17:38:37 +00:00
return true ;
2005-06-12 20:49:13 +00:00
}
2005-11-30 19:19:47 +00:00
function delete_usermeta ( $user_id , $meta_key , $meta_value = '' ) {
global $wpdb ;
if ( ! is_numeric ( $user_id ) )
return false ;
$meta_key = preg_replace ( '|[^a-z0-9_]|i' , '' , $meta_key );
if ( is_array ( $meta_value ) || is_object ( $meta_value ) )
$meta_value = serialize ( $meta_value );
$meta_value = trim ( $meta_value );
if ( ! empty ( $meta_value ) )
$wpdb -> query ( " DELETE FROM $wpdb->usermeta WHERE user_id = ' $user_id ' AND meta_key = ' $meta_key ' AND meta_value = ' $meta_value ' " );
else
$wpdb -> query ( " DELETE FROM $wpdb->usermeta WHERE user_id = ' $user_id ' AND meta_key = ' $meta_key ' " );
2006-02-12 07:53:23 +00:00
2005-12-01 17:38:37 +00:00
$user = get_userdata ( $user_id );
2005-11-30 19:19:47 +00:00
wp_cache_delete ( $user_id , 'users' );
2005-12-19 19:14:22 +00:00
wp_cache_delete ( $user -> user_login , 'userlogins' );
2006-02-12 07:53:23 +00:00
2005-12-01 17:38:37 +00:00
return true ;
2005-11-30 19:19:47 +00:00
}
2005-07-04 21:53:26 +00:00
function register_activation_hook ( $file , $function ) {
$file = plugin_basename ( $file );
2005-10-10 09:25:38 +00:00
2005-07-04 21:53:26 +00:00
add_action ( 'activate_' . $file , $function );
}
function register_deactivation_hook ( $file , $function ) {
$file = plugin_basename ( $file );
2005-10-10 09:25:38 +00:00
2005-07-04 21:53:26 +00:00
add_action ( 'deactivate_' . $file , $function );
}
function plugin_basename ( $file ) {
2005-12-22 05:18:18 +00:00
$file = preg_replace ( '|\\\\+|' , '\\\\' , $file );
2005-11-09 21:01:24 +00:00
$file = preg_replace ( '/^.*wp-content[\\\\\/]plugins[\\\\\/]/' , '' , $file );
2005-11-09 20:58:58 +00:00
return $file ;
2005-07-04 21:53:26 +00:00
}
2005-11-16 23:48:12 +00:00
function get_num_queries () {
global $wpdb ;
return $wpdb -> num_queries ;
}
2006-02-18 07:40:43 +00:00
function privacy_ping_filter ( $sites ) {
if ( get_option ( 'blog_public' ) )
return $sites ;
else
return '' ;
}
2006-02-27 04:57:30 +00:00
function bool_from_yn ( $yn ) {
if ( $yn == 'Y' ) return 1 ;
return 0 ;
}
2006-03-12 22:57:00 +00:00
function do_feed () {
$feed = get_query_var ( 'feed' );
// Remove the pad, if present.
$feed = preg_replace ( '/^_+/' , '' , $feed );
if ( $feed == '' || $feed == 'feed' )
$feed = 'rss2' ;
$for_comments = false ;
2006-03-17 01:16:22 +00:00
if ( is_single () || ( get_query_var ( 'withcomments' ) == 1 ) ) {
2006-03-12 22:57:00 +00:00
$feed = 'rss2' ;
$for_comments = true ;
}
$hook = 'do_feed_' . $feed ;
do_action ( $hook , $for_comments );
}
function do_feed_rdf () {
load_template ( ABSPATH . 'wp-rdf.php' );
}
function do_feed_rss () {
load_template ( ABSPATH . 'wp-rss.php' );
}
function do_feed_rss2 ( $for_comments ) {
2006-03-17 01:16:22 +00:00
if ( $for_comments ) {
2006-03-12 22:57:00 +00:00
load_template ( ABSPATH . 'wp-commentsrss2.php' );
2006-03-17 01:16:22 +00:00
} else {
2006-03-12 22:57:00 +00:00
load_template ( ABSPATH . 'wp-rss2.php' );
2006-03-17 01:16:22 +00:00
}
2006-03-12 22:57:00 +00:00
}
function do_feed_atom () {
load_template ( ABSPATH . 'wp-atom.php' );
}
2006-03-31 08:07:39 +00:00
function is_blog_installed () {
global $wpdb ;
$wpdb -> hide_errors ();
$installed = $wpdb -> get_var ( " SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl' " );
$wpdb -> show_errors ();
return $installed ;
}
2005-11-30 00:25:05 +00:00
?>