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 ?> |