web/wp-includes/user.php
branchwordpress
changeset 132 4d4862461b8d
parent 109 03b0d1493584
equal deleted inserted replaced
131:a4642baaf829 132:4d4862461b8d
   151  * @return string The value in the field.
   151  * @return string The value in the field.
   152  */
   152  */
   153 function get_profile($field, $user = false) {
   153 function get_profile($field, $user = false) {
   154 	global $wpdb;
   154 	global $wpdb;
   155 	if ( !$user )
   155 	if ( !$user )
   156 		$user = $wpdb->escape($_COOKIE[USER_COOKIE]);
   156 		$user = esc_sql( $_COOKIE[USER_COOKIE] );
   157 	return $wpdb->get_var( $wpdb->prepare("SELECT $field FROM $wpdb->users WHERE user_login = %s", $user) );
   157 	return $wpdb->get_var( $wpdb->prepare("SELECT $field FROM $wpdb->users WHERE user_login = %s", $user) );
   158 }
   158 }
   159 
   159 
   160 /**
   160 /**
   161  * Number of posts user has written.
   161  * Number of posts user has written.
   305 
   305 
   306 	if ( is_array($meta_value) || is_object($meta_value) )
   306 	if ( is_array($meta_value) || is_object($meta_value) )
   307 		$meta_value = serialize($meta_value);
   307 		$meta_value = serialize($meta_value);
   308 	$meta_value = trim( $meta_value );
   308 	$meta_value = trim( $meta_value );
   309 
   309 
       
   310 	$cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
       
   311 
       
   312 	if ( $cur && $cur->umeta_id )
       
   313 		do_action( 'delete_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );
       
   314 
   310 	if ( ! empty($meta_value) )
   315 	if ( ! empty($meta_value) )
   311 		$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $user_id, $meta_key, $meta_value) );
   316 		$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $user_id, $meta_key, $meta_value) );
   312 	else
   317 	else
   313 		$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
   318 		$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
   314 
   319 
   315 	wp_cache_delete($user_id, 'users');
   320 	wp_cache_delete($user_id, 'users');
       
   321 
       
   322 	if ( $cur && $cur->umeta_id )
       
   323 		do_action( 'deleted_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );
   316 
   324 
   317 	return true;
   325 	return true;
   318 }
   326 }
   319 
   327 
   320 /**
   328 /**
   397 	if (empty($meta_value)) {
   405 	if (empty($meta_value)) {
   398 		return delete_usermeta($user_id, $meta_key);
   406 		return delete_usermeta($user_id, $meta_key);
   399 	}
   407 	}
   400 
   408 
   401 	$cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
   409 	$cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
       
   410 
       
   411 	if ( $cur )
       
   412 		do_action( 'update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );
       
   413 
   402 	if ( !$cur )
   414 	if ( !$cur )
   403 		$wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
   415 		$wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
   404 	else if ( $cur->meta_value != $meta_value )
   416 	else if ( $cur->meta_value != $meta_value )
   405 		$wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') );
   417 		$wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') );
   406 	else
   418 	else
   407 		return false;
   419 		return false;
   408 
   420 
   409 	wp_cache_delete($user_id, 'users');
   421 	wp_cache_delete($user_id, 'users');
       
   422 
       
   423 	if ( !$cur )
       
   424 		do_action( 'added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value );
       
   425 	else
       
   426 		do_action( 'updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );
   410 
   427 
   411 	return true;
   428 	return true;
   412 }
   429 }
   413 
   430 
   414 //
   431 //
   429  * @global string $user_email The email address of the user
   446  * @global string $user_email The email address of the user
   430  * @global string $user_url The url in the user's profile
   447  * @global string $user_url The url in the user's profile
   431  * @global string $user_pass_md5 MD5 of the user's password
   448  * @global string $user_pass_md5 MD5 of the user's password
   432  * @global string $user_identity The display name of the user
   449  * @global string $user_identity The display name of the user
   433  *
   450  *
   434  * @param int $user_id Optional. User ID to setup global data.
   451  * @param int $for_user_id Optional. User ID to setup global data.
   435  */
   452  */
   436 function setup_userdata($user_id = '') {
   453 function setup_userdata($for_user_id = '') {
   437 	global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_pass_md5, $user_identity;
   454 	global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_pass_md5, $user_identity;
   438 
   455 
   439 	if ( '' == $user_id )
   456 	if ( '' == $for_user_id )
   440 		$user = wp_get_current_user();
   457 		$user = wp_get_current_user();
   441 	else
   458 	else
   442 		$user = new WP_User($user_id);
   459 		$user = new WP_User($for_user_id);
   443 
   460 
   444 	if ( 0 == $user->ID )
   461 	if ( 0 == $user->ID )
   445 		return;
   462 		return;
   446 
   463 
   447 	$userdata = $user->data;
   464 	$userdata = $user->data;
   448 	$user_login	= $user->user_login;
   465 	$user_login	= $user->user_login;
   449 	$user_level	= (int) isset($user->user_level) ? $user->user_level : 0;
   466 	$user_level	= (int) isset($user->user_level) ? $user->user_level : 0;
   450 	$user_ID	= (int) $user->ID;
   467 	$user_ID = (int) $user->ID;
   451 	$user_email	= $user->user_email;
   468 	$user_email	= $user->user_email;
   452 	$user_url	= $user->user_url;
   469 	$user_url	= $user->user_url;
   453 	$user_pass_md5	= md5($user->user_pass);
   470 	$user_pass_md5	= md5($user->user_pass);
   454 	$user_identity	= $user->display_name;
   471 	$user_identity	= $user->display_name;
   455 }
   472 }
   598 	wp_cache_add($user->user_login, $user->ID, 'userlogins');
   615 	wp_cache_add($user->user_login, $user->ID, 'userlogins');
   599 	wp_cache_add($user->user_email, $user->ID, 'useremail');
   616 	wp_cache_add($user->user_email, $user->ID, 'useremail');
   600 	wp_cache_add($user->user_nicename, $user->ID, 'userslugs');
   617 	wp_cache_add($user->user_nicename, $user->ID, 'userslugs');
   601 }
   618 }
   602 
   619 
       
   620 /**
       
   621  * Sanitize every user field.
       
   622  *
       
   623  * If the context is 'raw', then the user object or array will get minimal santization of the int fields.
       
   624  *
       
   625  * @since 2.3.0
       
   626  * @uses sanitize_user_field() Used to sanitize the fields.
       
   627  *
       
   628  * @param object|array $user The User Object or Array
       
   629  * @param string $context Optional, default is 'display'. How to sanitize user fields.
       
   630  * @return object|array The now sanitized User Object or Array (will be the same type as $user)
       
   631  */
       
   632 function sanitize_user_object($user, $context = 'display') {
       
   633 	if ( is_object($user) ) {
       
   634 		if ( !isset($user->ID) )
       
   635 			$user->ID = 0;
       
   636 		if ( isset($user->data) )
       
   637 			$vars = get_object_vars( $user->data );
       
   638 		else
       
   639 			$vars = get_object_vars($user);
       
   640 		foreach ( array_keys($vars) as $field ) {
       
   641 			if ( is_string($user->$field) || is_numeric($user->$field) ) 
       
   642 				$user->$field = sanitize_user_field($field, $user->$field, $user->ID, $context);
       
   643 		}
       
   644 		$user->filter = $context;
       
   645 	} else {
       
   646 		if ( !isset($user['ID']) )
       
   647 			$user['ID'] = 0;
       
   648 		foreach ( array_keys($user) as $field )
       
   649 			$user[$field] = sanitize_user_field($field, $user[$field], $user['ID'], $context);
       
   650 		$user['filter'] = $context;
       
   651 	}
       
   652 
       
   653 	return $user;
       
   654 }
       
   655 
       
   656 /**
       
   657  * Sanitize user field based on context.
       
   658  *
       
   659  * Possible context values are:  'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The
       
   660  * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'
       
   661  * when calling filters.
       
   662  *
       
   663  * @since 2.3.0
       
   664  * @uses apply_filters() Calls 'edit_$field' and '${field_no_prefix}_edit_pre' passing $value and
       
   665  *  $user_id if $context == 'edit' and field name prefix == 'user_'.
       
   666  *
       
   667  * @uses apply_filters() Calls 'edit_user_$field' passing $value and $user_id if $context == 'db'.
       
   668  * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db' and field name prefix == 'user_'.
       
   669  * @uses apply_filters() Calls '${field}_pre' passing $value if $context == 'db' and field name prefix != 'user_'.
       
   670  *
       
   671  * @uses apply_filters() Calls '$field' passing $value, $user_id and $context if $context == anything
       
   672  *  other than 'raw', 'edit' and 'db' and field name prefix == 'user_'.
       
   673  * @uses apply_filters() Calls 'user_$field' passing $value if $context == anything other than 'raw',
       
   674  *  'edit' and 'db' and field name prefix != 'user_'.
       
   675  *
       
   676  * @param string $field The user Object field name.
       
   677  * @param mixed $value The user Object value.
       
   678  * @param int $user_id user ID.
       
   679  * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display',
       
   680  *               'attribute' and 'js'.
       
   681  * @return mixed Sanitized value.
       
   682  */
       
   683 function sanitize_user_field($field, $value, $user_id, $context) {
       
   684 	$int_fields = array('ID');
       
   685 	if ( in_array($field, $int_fields) )
       
   686 		$value = (int) $value;
       
   687 
       
   688 	if ( 'raw' == $context )
       
   689 		return $value;
       
   690 
       
   691 	if ( !is_string($value) && !is_numeric($value) )
       
   692 		return $value;
       
   693 
       
   694 	$prefixed = false;
       
   695 	if ( false !== strpos($field, 'user_') ) {
       
   696 		$prefixed = true;
       
   697 		$field_no_prefix = str_replace('user_', '', $field);
       
   698 	}
       
   699 
       
   700 	if ( 'edit' == $context ) {
       
   701 		if ( $prefixed ) {
       
   702 			$value = apply_filters("edit_$field", $value, $user_id);
       
   703 		} else {
       
   704 			$value = apply_filters("edit_user_$field", $value, $user_id);
       
   705 		}
       
   706 
       
   707 		if ( 'description' == $field )
       
   708 			$value = esc_html($value);
       
   709 		else
       
   710 			$value = esc_attr($value);
       
   711 	} else if ( 'db' == $context ) {
       
   712 		if ( $prefixed ) {
       
   713 			$value = apply_filters("pre_$field", $value);
       
   714 		} else {
       
   715 			$value = apply_filters("pre_user_$field", $value);
       
   716 		}
       
   717 	} else {
       
   718 		// Use display filters by default.
       
   719 		if ( $prefixed )
       
   720 			$value = apply_filters($field, $value, $user_id, $context);
       
   721 		else
       
   722 			$value = apply_filters("user_$field", $value, $user_id, $context);
       
   723 	}
       
   724 
       
   725 	if ( 'user_url' == $field )
       
   726 		$value = esc_url($value);
       
   727 
       
   728 	if ( 'attribute' == $context )
       
   729 		$value = esc_attr($value);
       
   730 	else if ( 'js' == $context )
       
   731 		$value = esc_js($value);
       
   732 
       
   733 	return $value;
       
   734 }
       
   735 
   603 ?>
   736 ?>