[ Index ]

WordPress Source Cross Reference

title

Body

[close]

/wp-includes/ -> pluggable.php (source)

   1  <?php
   2  
   3      /* These functions can be replaced via plugins.  They are loaded after
   4       plugins are loaded. */
   5  
   6  if ( !function_exists('set_current_user') ) :
   7  function set_current_user($id, $name = '') {
   8      return wp_set_current_user($id, $name);
   9  }
  10  endif;
  11  
  12  if ( !function_exists('wp_set_current_user') ) :
  13  function wp_set_current_user($id, $name = '') {
  14      global $current_user;
  15  
  16      if ( isset($current_user) && ($id == $current_user->ID) )
  17          return $current_user;
  18  
  19      $current_user = new WP_User($id, $name);
  20  
  21      setup_userdata($current_user->ID);
  22  
  23      do_action('set_current_user');
  24  
  25      return $current_user;
  26  }
  27  endif;
  28  
  29  if ( !function_exists('wp_get_current_user') ) :
  30  function wp_get_current_user() {
  31      global $current_user;
  32  
  33      get_currentuserinfo();
  34  
  35      return $current_user;
  36  }
  37  endif;
  38  
  39  if ( !function_exists('get_currentuserinfo') ) :
  40  function get_currentuserinfo() {
  41      global $current_user;
  42  
  43      if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST )
  44          return false;
  45  
  46      if ( ! empty($current_user) )
  47          return;
  48  
  49      if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) || 
  50          !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true) ) {
  51          wp_set_current_user(0);
  52          return false;
  53      }
  54  
  55      $user_login = $_COOKIE[USER_COOKIE];
  56      wp_set_current_user(0, $user_login);
  57  }
  58  endif;
  59  
  60  if ( !function_exists('get_userdata') ) :
  61  function get_userdata( $user_id ) {
  62      global $wpdb;
  63      $user_id = (int) $user_id;
  64      if ( $user_id == 0 )
  65          return false;
  66  
  67      $user = wp_cache_get($user_id, 'users');
  68  
  69      if ( $user )
  70          return $user;
  71  
  72      if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID = '$user_id' LIMIT 1") )
  73          return false;
  74  
  75      $wpdb->hide_errors();
  76      $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user_id'");
  77      $wpdb->show_errors();
  78  
  79      if ($metavalues) {
  80          foreach ( $metavalues as $meta ) {
  81              @ $value = unserialize($meta->meta_value);
  82              if ($value === FALSE)
  83                  $value = $meta->meta_value;
  84              $user->{$meta->meta_key} = $value;
  85  
  86              // We need to set user_level from meta, not row
  87              if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
  88                  $user->user_level = $meta->meta_value;
  89          } // end foreach
  90      } //end if
  91  
  92      // For backwards compat.
  93      if ( isset($user->first_name) )
  94          $user->user_firstname = $user->first_name;
  95      if ( isset($user->last_name) )
  96          $user->user_lastname = $user->last_name;
  97      if ( isset($user->description) )
  98          $user->user_description = $user->description;
  99  
 100      wp_cache_add($user_id, $user, 'users');
 101      wp_cache_add($user->user_login, $user, 'userlogins');
 102  
 103      return $user;
 104  }
 105  endif;
 106  
 107  if ( !function_exists('update_user_cache') ) :
 108  function update_user_cache() {
 109      return true;
 110  }
 111  endif;
 112  
 113  if ( !function_exists('get_userdatabylogin') ) :
 114  function get_userdatabylogin($user_login) {
 115      global $wpdb;
 116      $user_login = sanitize_user( $user_login );
 117  
 118      if ( empty( $user_login ) )
 119          return false;
 120  
 121      $userdata = wp_cache_get($user_login, 'userlogins');
 122      if ( $userdata )
 123          return $userdata;
 124  
 125      if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") )
 126          return false;
 127  
 128      $wpdb->hide_errors();
 129      $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'");
 130      $wpdb->show_errors();
 131  
 132      if ($metavalues) {
 133          foreach ( $metavalues as $meta ) {
 134              @ $value = unserialize($meta->meta_value);
 135              if ($value === FALSE)
 136                  $value = $meta->meta_value;
 137              $user->{$meta->meta_key} = $value;
 138  
 139              // We need to set user_level from meta, not row
 140              if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
 141                  $user->user_level = $meta->meta_value;
 142          }
 143      }
 144  
 145      // For backwards compat.
 146      if ( isset($user->first_name) )
 147          $user->user_firstname = $user->first_name;
 148      if ( isset($user->last_name) )
 149          $user->user_lastname = $user->last_name;
 150      if ( isset($user->description) )
 151          $user->user_description = $user->description;
 152  
 153      wp_cache_add($user->ID, $user, 'users');
 154      wp_cache_add($user->user_login, $user, 'userlogins');
 155  
 156      return $user;
 157  
 158  }
 159  endif;
 160  
 161  if ( !function_exists('wp_mail') ) :
 162  function wp_mail($to, $subject, $message, $headers = '') {
 163      if( $headers == '' ) {
 164          $headers = "MIME-Version: 1.0\n" .
 165              "From: wordpress@" . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . "\n" . 
 166              "Content-Type: text/plain; charset=\"" . get_settings('blog_charset') . "\"\n";
 167      }
 168  
 169      return @mail($to, $subject, $message, $headers);
 170  }
 171  endif;
 172  
 173  if ( !function_exists('wp_login') ) :
 174  function wp_login($username, $password, $already_md5 = false) {
 175      global $wpdb, $error;
 176  
 177      if ( '' == $username )
 178          return false;
 179  
 180      if ( '' == $password ) {
 181          $error = __('<strong>Error</strong>: The password field is empty.');
 182          return false;
 183      }
 184  
 185      $login = get_userdatabylogin($username);
 186      //$login = $wpdb->get_row("SELECT ID, user_login, user_pass FROM $wpdb->users WHERE user_login = '$username'");
 187  
 188      if (!$login) {
 189          $error = __('<strong>Error</strong>: Wrong username.');
 190          return false;
 191      } else {
 192          // If the password is already_md5, it has been double hashed.
 193          // Otherwise, it is plain text.
 194          if ( ($already_md5 && md5($login->user_pass) == $password) || ($login->user_login == $username && $login->user_pass == md5($password)) ) {
 195              return true;
 196          } else {
 197              $error = __('<strong>Error</strong>: Incorrect password.');
 198              $pwd = '';
 199              return false;
 200          }
 201      }
 202  }
 203  endif;
 204  
 205  if ( !function_exists('is_user_logged_in') ) :
 206  function is_user_logged_in() {
 207      $user = wp_get_current_user();
 208  
 209      if ( $user->id == 0 )
 210          return false;
 211  
 212      return true;
 213  }
 214  endif;
 215  
 216  if ( !function_exists('auth_redirect') ) :
 217  function auth_redirect() {
 218      // Checks if a user is logged in, if not redirects them to the login page
 219      if ( (!empty($_COOKIE[USER_COOKIE]) && 
 220                  !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) ||
 221               (empty($_COOKIE[USER_COOKIE])) ) {
 222          nocache_headers();
 223  
 224          wp_redirect(get_settings('siteurl') . '/wp-login.php?redirect_to=' . urlencode($_SERVER['REQUEST_URI']));
 225          exit();
 226      }
 227  }
 228  endif;
 229  
 230  if ( !function_exists('check_admin_referer') ) :
 231  function check_admin_referer($action = -1) {
 232      $adminurl = strtolower(get_settings('siteurl')).'/wp-admin';
 233      $referer = strtolower(wp_get_referer());
 234      if ( !wp_verify_nonce($_REQUEST['_wpnonce'], $action) &&
 235          !(-1 == $action && strstr($referer, $adminurl)) ) {
 236          wp_nonce_ays($action);
 237          die();
 238      }
 239      do_action('check_admin_referer', $action);
 240  }endif;
 241  
 242  if ( !function_exists('check_ajax_referer') ) :
 243  function check_ajax_referer() {
 244      $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie
 245      foreach ( $cookie as $tasty ) {
 246          if ( false !== strpos($tasty, USER_COOKIE) )
 247              $user = substr(strstr($tasty, '='), 1);
 248          if ( false !== strpos($tasty, PASS_COOKIE) )
 249              $pass = substr(strstr($tasty, '='), 1);
 250      }
 251      if ( !wp_login( $user, $pass, true ) )
 252          die('-1');
 253      do_action('check_ajax_referer');
 254  }
 255  endif;
 256  
 257  // Cookie safe redirect.  Works around IIS Set-Cookie bug.
 258  // http://support.microsoft.com/kb/q176113/
 259  if ( !function_exists('wp_redirect') ) :
 260  function wp_redirect($location) {
 261      global $is_IIS;
 262  
 263      $location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%]|i', '', $location);
 264      $location = wp_kses_no_null($location);
 265  
 266      $strip = array('%0d', '%0a');
 267      $location = str_replace($strip, '', $location);
 268  
 269      if ($is_IIS)
 270          header("Refresh: 0;url=$location");
 271      else
 272          header("Location: $location");
 273  }
 274  endif;
 275  
 276  if ( !function_exists('wp_get_cookie_login') ):
 277  function wp_get_cookie_login() {
 278      if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) )
 279          return false;
 280  
 281      return array('login' => $_COOKIE[USER_COOKIE],    'password' => $_COOKIE[PASS_COOKIE]);
 282  }
 283  
 284  endif;
 285  
 286  if ( !function_exists('wp_setcookie') ) :
 287  function wp_setcookie($username, $password, $already_md5 = false, $home = '', $siteurl = '', $remember = false) {
 288      if ( !$already_md5 )
 289          $password = md5( md5($password) ); // Double hash the password in the cookie.
 290  
 291      if ( empty($home) )
 292          $cookiepath = COOKIEPATH;
 293      else
 294          $cookiepath = preg_replace('|https?://[^/]+|i', '', $home . '/' );
 295  
 296      if ( empty($siteurl) ) {
 297          $sitecookiepath = SITECOOKIEPATH;
 298          $cookiehash = COOKIEHASH;
 299      } else {
 300          $sitecookiepath = preg_replace('|https?://[^/]+|i', '', $siteurl . '/' );
 301          $cookiehash = md5($siteurl);
 302      }
 303  
 304      if ( $remember )
 305          $expire = time() + 31536000;
 306      else
 307          $expire = 0;
 308  
 309      setcookie(USER_COOKIE, $username, $expire, $cookiepath, COOKIE_DOMAIN);
 310      setcookie(PASS_COOKIE, $password, $expire, $cookiepath, COOKIE_DOMAIN);
 311  
 312      if ( $cookiepath != $sitecookiepath ) {
 313          setcookie(USER_COOKIE, $username, $expire, $sitecookiepath, COOKIE_DOMAIN);
 314          setcookie(PASS_COOKIE, $password, $expire, $sitecookiepath, COOKIE_DOMAIN);
 315      }
 316  }
 317  endif;
 318  
 319  if ( !function_exists('wp_clearcookie') ) :
 320  function wp_clearcookie() {
 321      setcookie(USER_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
 322      setcookie(PASS_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
 323      setcookie(USER_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
 324      setcookie(PASS_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
 325  }
 326  endif;
 327  
 328  if ( ! function_exists('wp_notify_postauthor') ) :
 329  function wp_notify_postauthor($comment_id, $comment_type='') {
 330      global $wpdb;
 331      
 332      $comment = get_comment($comment_id);
 333      $post    = get_post($comment->comment_post_ID);
 334      $user    = get_userdata( $post->post_author );
 335  
 336      if ('' == $user->user_email) return false; // If there's no email to send the comment to
 337  
 338      $comment_author_domain = gethostbyaddr($comment->comment_author_IP);
 339  
 340      $blogname = get_settings('blogname');
 341  
 342      if ( empty( $comment_type ) ) $comment_type = 'comment';
 343  
 344      if ('comment' == $comment_type) {
 345          $notify_message  = sprintf( __('New comment on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n";
 346          $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
 347          $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n";
 348          $notify_message .= sprintf( __('URI    : %s'), $comment->comment_author_url ) . "\r\n";
 349          $notify_message .= sprintf( __('Whois  : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s'), $comment->comment_author_IP ) . "\r\n";
 350          $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
 351          $notify_message .= __('You can see all comments on this post here: ') . "\r\n";
 352          $subject = sprintf( __('[%1$s] Comment: "%2$s"'), $blogname, $post->post_title );
 353      } elseif ('trackback' == $comment_type) {
 354          $notify_message  = sprintf( __('New trackback on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n";
 355          $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
 356          $notify_message .= sprintf( __('URI    : %s'), $comment->comment_author_url ) . "\r\n";
 357          $notify_message .= __('Excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
 358          $notify_message .= __('You can see all trackbacks on this post here: ') . "\r\n";
 359          $subject = sprintf( __('[%1$s] Trackback: "%2$s"'), $blogname, $post->post_title );
 360      } elseif ('pingback' == $comment_type) {
 361          $notify_message  = sprintf( __('New pingback on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n";
 362          $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
 363          $notify_message .= sprintf( __('URI    : %s'), $comment->comment_author_url ) . "\r\n";
 364          $notify_message .= __('Excerpt: ') . "\r\n" . sprintf('[...] %s [...]', $comment->comment_content ) . "\r\n\r\n";
 365          $notify_message .= __('You can see all pingbacks on this post here: ') . "\r\n";
 366          $subject = sprintf( __('[%1$s] Pingback: "%2$s"'), $blogname, $post->post_title );
 367      }
 368      $notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n";
 369      $notify_message .= sprintf( __('To delete this comment, visit: %s'), get_settings('siteurl').'/wp-admin/comment.php?action=confirmdeletecomment&p='.$comment->comment_post_ID."&comment=$comment_id" ) . "\r\n";
 370      $notify_message .= sprintf( __('To mark this comment as spam, visit: %s'), get_settings('siteurl').'/wp-admin/comment.php?action=confirmdeletecomment&delete_type=spam&p='.$comment->comment_post_ID."&comment=$comment_id" ) . "\r\n";
 371  
 372      $wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
 373  
 374      if ( '' == $comment->comment_author ) {
 375          $from = "From: \"$blogname\" <$wp_email>";
 376          if ( '' != $comment->comment_author_email )
 377              $reply_to = "Reply-To: $comment->comment_author_email";
 378       } else {
 379          $from = "From: \"$comment->comment_author\" <$wp_email>";
 380          if ( '' != $comment->comment_author_email )
 381              $reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>";
 382       }
 383  
 384      $message_headers = "MIME-Version: 1.0\n"
 385          . "$from\n"
 386          . "Content-Type: text/plain; charset=\"" . get_settings('blog_charset') . "\"\n";
 387  
 388      if ( isset($reply_to) )
 389          $message_headers .= $reply_to . "\n";
 390  
 391      $notify_message =