home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Blogs / wordpress2.6.exe / wordpress2.6 / wp-includes / user.php < prev    next >
Encoding:
PHP Script  |  2008-06-11  |  9.9 KB  |  338 lines

  1. <?php
  2.  
  3. function wp_signon( $credentials = '', $secure_cookie = '' ) {
  4.     if ( empty($credentials) ) {
  5.         if ( ! empty($_POST['log']) )
  6.             $credentials['user_login'] = $_POST['log'];
  7.         if ( ! empty($_POST['pwd']) )
  8.             $credentials['user_password'] = $_POST['pwd'];
  9.         if ( ! empty($_POST['rememberme']) )
  10.             $credentials['remember'] = $_POST['rememberme'];
  11.     }
  12.  
  13.     if ( !empty($credentials['user_login']) )
  14.         $credentials['user_login'] = sanitize_user($credentials['user_login']);
  15.     if ( !empty($credentials['user_password']) )
  16.         $credentials['user_password'] = trim($credentials['user_password']);
  17.     if ( !empty($credentials['remember']) )
  18.         $credentials['remember'] = true;
  19.     else
  20.         $credentials['remember'] = false;
  21.  
  22.     do_action_ref_array('wp_authenticate', array(&$credentials['user_login'], &$credentials['user_password']));
  23.  
  24.     if ( '' === $secure_cookie )
  25.         $secure_cookie = is_ssl() ? true : false;
  26.     
  27.     // If no credential info provided, check cookie.
  28.     if ( empty($credentials['user_login']) && empty($credentials['user_password']) ) {
  29.             $user = wp_validate_auth_cookie();
  30.             if ( $user )
  31.                 return new WP_User($user);
  32.  
  33.             if ( $secure_cookie )
  34.                 $auth_cookie = SECURE_AUTH_COOKIE;
  35.             else
  36.                 $auth_cookie = AUTH_COOKIE;
  37.  
  38.             if ( !empty($_COOKIE[$auth_cookie]) )
  39.                 return new WP_Error('expired_session', __('Please log in again.'));
  40.  
  41.             // If the cookie is not set, be silent.
  42.             return new WP_Error();
  43.     }
  44.  
  45.     if ( empty($credentials['user_login']) || empty($credentials['user_password']) ) {
  46.         $error = new WP_Error();
  47.  
  48.         if ( empty($credentials['user_login']) )
  49.             $error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));
  50.         if ( empty($credentials['user_password']) )
  51.             $error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.'));
  52.         return $error;
  53.     }
  54.  
  55.     $user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
  56.     if ( is_wp_error($user) )
  57.         return $user;
  58.  
  59.     wp_set_auth_cookie($user->ID, $credentials['remember'], $secure_cookie);
  60.     do_action('wp_login', $credentials['user_login']);
  61.     return $user;
  62. }
  63.  
  64. function get_profile($field, $user = false) {
  65.     global $wpdb;
  66.     if ( !$user )
  67.         $user = $wpdb->escape($_COOKIE[USER_COOKIE]);
  68.     return $wpdb->get_var( $wpdb->prepare("SELECT $field FROM $wpdb->users WHERE user_login = %s", $user) );
  69. }
  70.  
  71. function get_usernumposts($userid) {
  72.     global $wpdb;
  73.     $userid = (int) $userid;
  74.     return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND post_type = 'post' AND ", $userid) . get_private_posts_cap_sql('post'));
  75. }
  76.  
  77. // TODO: xmlrpc only.  Maybe move to xmlrpc.php.
  78. function user_pass_ok($user_login,$user_pass) {
  79.     $user = wp_authenticate($user_login, $user_pass);
  80.     if ( is_wp_error($user) )
  81.         return false;
  82.  
  83.     return true;
  84. }
  85.  
  86. //
  87. // User option functions
  88. //
  89.  
  90. function get_user_option( $option, $user = 0 ) {
  91.     global $wpdb;
  92.  
  93.     $option = preg_replace('|[^a-z0-9_]|i', '', $option);
  94.     if ( empty($user) )
  95.         $user = wp_get_current_user();
  96.     else
  97.         $user = get_userdata($user);
  98.  
  99.     if ( isset( $user->{$wpdb->prefix . $option} ) ) // Blog specific
  100.         $result = $user->{$wpdb->prefix . $option};
  101.     elseif ( isset( $user->{$option} ) ) // User specific and cross-blog
  102.         $result = $user->{$option};
  103.     else // Blog global
  104.         $result = get_option( $option );
  105.     
  106.     return apply_filters("get_user_option_{$option}", $result, $option, $user);
  107. }
  108.  
  109. function update_user_option( $user_id, $option_name, $newvalue, $global = false ) {
  110.     global $wpdb;
  111.     if ( !$global )
  112.         $option_name = $wpdb->prefix . $option_name;
  113.     return update_usermeta( $user_id, $option_name, $newvalue );
  114. }
  115.  
  116. // Get users with capabilities for the current blog.
  117. // For setups that use the multi-blog feature.
  118. function get_users_of_blog( $id = '' ) {
  119.     global $wpdb, $blog_id;
  120.     if ( empty($id) )
  121.         $id = (int) $blog_id;
  122.     $users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE " . $wpdb->users . ".ID = " . $wpdb->usermeta . ".user_id AND meta_key = '" . $wpdb->prefix . "capabilities' ORDER BY {$wpdb->usermeta}.user_id" );
  123.     return $users;
  124. }
  125.  
  126. //
  127. // User meta functions
  128. //
  129.  
  130. function delete_usermeta( $user_id, $meta_key, $meta_value = '' ) {
  131.     global $wpdb;
  132.     if ( !is_numeric( $user_id ) )
  133.         return false;
  134.     $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
  135.  
  136.     if ( is_array($meta_value) || is_object($meta_value) )
  137.         $meta_value = serialize($meta_value);
  138.     $meta_value = trim( $meta_value );
  139.  
  140.     if ( ! empty($meta_value) )
  141.         $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $userid, $meta_key, $meta_value) );
  142.     else
  143.         $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
  144.  
  145.     wp_cache_delete($user_id, 'users');
  146.  
  147.     return true;
  148. }
  149.  
  150. function get_usermeta( $user_id, $meta_key = '') {
  151.     global $wpdb;
  152.     $user_id = (int) $user_id;
  153.  
  154.     if ( !$user_id )
  155.         return false;
  156.  
  157.     if ( !empty($meta_key) ) {
  158.         $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
  159.         $user = wp_cache_get($user_id, 'users');
  160.         // Check the cached user object
  161.         if ( false !== $user && isset($user->$meta_key) )
  162.             $metas = array($user->$meta_key);
  163.         else
  164.             $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
  165.     } else {
  166.         $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d", $user_id) );
  167.     }
  168.  
  169.     if ( empty($metas) ) {
  170.         if ( empty($meta_key) )
  171.             return array();
  172.         else
  173.             return '';
  174.     }
  175.  
  176.     $metas = array_map('maybe_unserialize', $metas);
  177.  
  178.     if ( count($metas) == 1 )
  179.         return $metas[0];
  180.     else
  181.         return $metas;
  182. }
  183.  
  184. function update_usermeta( $user_id, $meta_key, $meta_value ) {
  185.     global $wpdb;
  186.     if ( !is_numeric( $user_id ) )
  187.         return false;
  188.     $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
  189.  
  190.     // FIXME: usermeta data is assumed to be already escaped
  191.     if ( is_string($meta_value) )
  192.         $meta_value = stripslashes($meta_value);
  193.     $meta_value = maybe_serialize($meta_value);
  194.  
  195.     if (empty($meta_value)) {
  196.         return delete_usermeta($user_id, $meta_key);
  197.     }
  198.  
  199.     $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
  200.     if ( !$cur ) {
  201.         $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->usermeta ( user_id, meta_key, meta_value )
  202.         VALUES
  203.         ( %d, %s, %s )", $user_id, $meta_key, $meta_value) );
  204.     } else if ( $cur->meta_value != $meta_value ) {
  205.         $wpdb->query( $wpdb->prepare("UPDATE $wpdb->usermeta SET meta_value = %s WHERE user_id = %d AND meta_key = %s", $meta_value, $user_id, $meta_key) );
  206.     } else {
  207.         return false;
  208.     }
  209.  
  210.     wp_cache_delete($user_id, 'users');
  211.  
  212.     return true;
  213. }
  214.  
  215. //
  216. // Private helper functions
  217. //
  218.  
  219. // Setup global user vars.  Used by set_current_user() for back compat.
  220. function setup_userdata($user_id = '') {
  221.     global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_pass_md5, $user_identity;
  222.  
  223.     if ( '' == $user_id )
  224.         $user = wp_get_current_user();
  225.     else
  226.         $user = new WP_User($user_id);
  227.  
  228.     if ( 0 == $user->ID )
  229.         return;
  230.  
  231.     $userdata = $user->data;
  232.     $user_login    = $user->user_login;
  233.     $user_level    = (int) isset($user->user_level) ? $user->user_level : 0;
  234.     $user_ID    = (int) $user->ID;
  235.     $user_email    = $user->user_email;
  236.     $user_url    = $user->user_url;
  237.     $user_pass_md5    = md5($user->user_pass);
  238.     $user_identity    = $user->display_name;
  239. }
  240.  
  241. function wp_dropdown_users( $args = '' ) {
  242.     global $wpdb;
  243.     $defaults = array(
  244.         'show_option_all' => '', 'show_option_none' => '',
  245.         'orderby' => 'display_name', 'order' => 'ASC',
  246.         'include' => '', 'exclude' => '',
  247.         'show' => 'display_name', 'echo' => 1,
  248.         'selected' => 0, 'name' => 'user', 'class' => ''
  249.     );
  250.  
  251.     $defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;
  252.  
  253.     $r = wp_parse_args( $args, $defaults );
  254.     extract( $r, EXTR_SKIP );
  255.  
  256.     $query = "SELECT * FROM $wpdb->users";
  257.  
  258.     $query_where = array();
  259.  
  260.     if ( is_array($include) )
  261.         $include = join(',', $include);
  262.     $include = preg_replace('/[^0-9,]/', '', $include); // (int)
  263.     if ( $include )
  264.         $query_where[] = "ID IN ($include)";
  265.  
  266.     if ( is_array($exclude) )
  267.         $exclude = join(',', $exclude);
  268.     $exclude = preg_replace('/[^0-9,]/', '', $exclude); // (int)
  269.     if ( $exclude )
  270.         $query_where[] = "ID NOT IN ($exclude)";
  271.  
  272.     if ( $query_where )
  273.         $query .= " WHERE " . join(' AND', $query_where);
  274.  
  275.     $query .= " ORDER BY $orderby $order";
  276.  
  277.     $users = $wpdb->get_results( $query );
  278.  
  279.     $output = '';
  280.     if ( !empty($users) ) {
  281.         $output = "<select name='$name' id='$name' class='$class'>\n";
  282.  
  283.         if ( $show_option_all )
  284.             $output .= "\t<option value='0'>$show_option_all</option>\n";
  285.  
  286.         if ( $show_option_none )
  287.             $output .= "\t<option value='-1'>$show_option_none</option>\n";
  288.  
  289.         foreach ( $users as $user ) {
  290.             $user->ID = (int) $user->ID;
  291.             $_selected = $user->ID == $selected ? " selected='selected'" : '';
  292.             $output .= "\t<option value='$user->ID'$_selected>" . wp_specialchars($user->$show) . "</option>\n";
  293.         }
  294.  
  295.         $output .= "</select>";
  296.     }
  297.  
  298.     $output = apply_filters('wp_dropdown_users', $output);
  299.  
  300.     if ( $echo )
  301.         echo $output;
  302.  
  303.     return $output;
  304. }
  305.  
  306. function _fill_user( &$user ) {
  307.     global $wpdb;
  308.  
  309.     $show = $wpdb->hide_errors();
  310.     $metavalues = $wpdb->get_results($wpdb->prepare("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = %d", $user->ID));
  311.     $wpdb->show_errors($show);
  312.  
  313.     if ( $metavalues ) {
  314.         foreach ( $metavalues as $meta ) {
  315.             $value = maybe_unserialize($meta->meta_value);
  316.             $user->{$meta->meta_key} = $value;
  317.         }
  318.     }
  319.  
  320.     $level = $wpdb->prefix . 'user_level';
  321.     if ( isset( $user->{$level} ) )
  322.         $user->user_level = $user->{$level};
  323.  
  324.     // For backwards compat.
  325.     if ( isset($user->first_name) )
  326.         $user->user_firstname = $user->first_name;
  327.     if ( isset($user->last_name) )
  328.         $user->user_lastname = $user->last_name;
  329.     if ( isset($user->description) )
  330.         $user->user_description = $user->description;
  331.  
  332.     wp_cache_add($user->ID, $user, 'users');
  333.     wp_cache_add($user->user_login, $user->ID, 'userlogins');
  334.     wp_cache_add($user->user_email, $user->ID, 'useremail');
  335. }
  336.  
  337. ?>
  338.