. */ define('GRAVATAR_DOMAIN', 'Gravatar'); load_plugin_textdomain(GRAVATAR_DOMAIN, dirname(__FILE__) . '/locale'); /* Template stuff ======================================== */ // Find a proper default image function GAGetUserDefaultImageURI($id=0) { $bbUser = new BB_User($id); $options = bb_get_option('GAOptions'); $defaultImageURI = $options['defaultRoleImages'][$bbUser->roles[0]]; // Find Role Default Image if (empty($defaultImageURI)) // No Role Default Image available for this user, use default, instead. $defaultImageURI = $options['defaultImage']; return $defaultImageURI; } // retrun src for img tag or false function GAGetImageURI($id=0, $size=0) { if ($id==0 || $id===null) if (is_topic()) $id = get_post_author_id(); $options = bb_get_option('GAOptions'); if ($size<1) $size = $options['size']; if (!empty($size)) $size = "&size=$size"; if (!empty($options['rating'])) $rating = "&rating=$options[rating]"; if (!$user = bb_get_user(bb_get_user_id($id))) // Not a member return $options['defaultImage']; $defaultImageURI = GAGetUserDefaultImageURI($user->ID); if (!GAVerified($user->ID)) // No Gravatar return $defaultImageURI; $gravatarEmail = GAGetUserGravatarEmail($user->ID); if (isset($user->gravatar['md5']) && !empty($gravatarEmail)) { if (!empty($defaultImageURI)) $defaultImageURI = '&default=' . urlencode($defaultImageURI); return "http://www.gravatar.com/avatar.php?gravatar_id=" . $user->gravatar['md5'] . "$defaultImageURI$rating$size"; } return $options['defaultImage']; } // echo version of GAGetImageURI function GAImageURI($id=0, $size=0) { echo GAGetImageURI($id, $size); } // return preset complete img tag function GAGetImage($id=0, $size=0, $style='border: 1px solid black', $class='', $link=true) { global $GA_DEFAULT_IMAGE; if ($id==0 || $id===null) if (is_topic()) $id = get_post_author_id(); $options = bb_get_option('GAOptions'); if ($size<1) $size = $options['size']; if (!empty($size)) $style = "width: {$size}px; height: {$size}px;" . $style; // Check style and class if ($style!='') $style = " style=\"$style\""; if ($class!='') $class = " class=\"$class\""; if (!$user = bb_get_user(bb_get_user_id($id))) if (!empty($options['defaultImage'])) return ""; else return ""; $GravatarURI = GAGetImageURI($user->ID, $size); if (empty($GravatarURI)) return ""; $img = "'; if ($link) return '$img"; return $img; } // echo version of GAGetImage without link function GAImage($id=0, $size=0, $style='border: 1px solid black', $class='') { echo GAGetImage($id, $size, $style, $class, false); } // echo version of GAGetImage with link function GAImageLink($id=0, $size=0, $style='border: 1px solid black', $class='') { echo GAGetImage($id, $size, $style, $class); } /* Internal stuff used only when useRegisteredEmail is true ======================================== */ function GAGetUserGravatarEmail($userID) { $options = bb_get_option('GAOptions'); if ($options['useRegisteredEmail']) { $user = bb_get_user($userID); $gravatarEmail = $user->user_email; } else $gravatarEmail = bb_get_usermeta($userID, 'gravatar_email'); return $gravatarEmail; } function GAVerified($userID) { $gravatarEmail = GAGetUserGravatarEmail($userID); $gravatarVCode = bb_get_usermeta($userID, 'gravatar_vcode'); // No such usermetas? if (!$gravatarEmail || !$gravatarVCode) return false; $gravatar = bb_get_usermeta($userID, 'gravatar'); return ($gravatarEmail == $gravatar['email'] && $gravatarVCode == $gravatar['vcode']); } // Make profile editing page adds a field Gravatar Email, and block other users. function GAHook_get_profile_info_keys($keys) { global $user_id; $options = bb_get_option('GAOptions'); if (is_bb_profile()) { $currentUserID = bb_get_current_user_info( 'id' ); // A powerful user or user him/herself if (bb_current_user_can('edit_user', $user_id)) { if (!$options['useRegisteredEmail']) $keys['gravatar_email'] = array(0, __('Gravatar Email', GRAVATAR_DOMAIN)); $keys['gravatar_vcode'] = array(0, __('Gravatar Verification Code', GRAVATAR_DOMAIN)); } } elseif (bb_get_location() == 'register-page' && !$options['useRegisteredEmail']) $keys['gravatar_email'] = array(0, __('Gravatar Email', GRAVATAR_DOMAIN)); return $keys; } // Send the Verification Code function GASendVCode($userID) { $gravatar = bb_get_usermeta($userID, 'gravatar'); $message = __("New Gravatar Email is %1\$s.\nNew Verification Code is %2\$s\n\nIt is an 8-letter string. Note that before you successfully verify your new Gravatar Email, your Gravatar will not work.\n\n%3\$s\n%4\$s", GRAVATAR_DOMAIN); if (false === bb_mail( bb_get_user_email($userID), bb_get_option('name') . ': ' . __('Your Gravatar usage verification code', GRAVATAR_DOMAIN), sprintf($message, $gravatar['new_email'],$gravatar['new_vcode'], bb_get_option('name'), bb_get_option('uri')))) error_log("bPress GA: Failed to send notification mail (user ID $userID)"); } // Generate the Verification Code function GAGenerateVCode($userID) { $gravatar = bb_get_usermeta($userID, 'gravatar'); $gravatar['new_vcode'] = bb_random_pass(8); // from registration-functions.php bb_update_usermeta($userID, 'gravatar', $gravatar); } // Check gravatar_email usermeta after profile edited or new user registered function GAHook_profile_edited($userID) { $options = bb_get_option('GAOptions'); $gravatar = bb_get_usermeta($userID, 'gravatar'); $gravatarEmail = GAGetUserGravatarEmail($userID); $gravatarVCode = bb_get_usermeta($userID, 'gravatar_vcode'); $gravatar = bb_get_usermeta($userID, 'gravatar'); // No email inputed if ($gravatarEmail === null || $gravatarEmail == '') { if ($options['useRegisteredEmail']) bb_delete_usermeta($userID, 'gravatar_email'); bb_delete_usermeta($userID, 'gravatar'); return; } // New email? if (!GAVerified($userID)) if (isset($gravatar['new_email']) && isset($gravatar['new_vcode'])) { if ($gravatarEmail == $gravatar['new_email'] && $gravatarVCode == $gravatar['new_vcode']) { // New email verified, update with news $gravatar['email'] = $gravatar['new_email']; $gravatar['vcode'] = $gravatar['new_vcode']; $gravatar['md5'] = md5($gravatar['email']); unset($gravatar['new_email'], $gravatar['new_vcode']); bb_update_usermeta($userID, 'gravatar', $gravatar); } elseif ($gravatarEmail != $gravatar['new_email']) { // Save newer email $gravatar['new_email'] = $gravatarEmail; bb_update_usermeta($userID, 'gravatar', $gravatar); bb_update_usermeta($userID, 'gravatar_vcode', 'Newer code should be in you mail box.'); #__('Newer code should be in you mail box.', GRAVATAR_DOMAIN)); // New email has been changed again, regenerate the vcode GAGenerateVCode($userID); GASendVCode($userID); } else { // New email has not been changed, send vcode again bb_update_usermeta($userID, 'gravatar_vcode', 'Code has been sent again.'); #__('Code has been sent again.', GRAVATAR_DOMAIN)); GASendVCode($userID); } } else { // Verify the email format if (bb_verify_email($gravatarEmail) === false) { bb_update_usermeta($userID, 'gravatar_vcode', 'Not a Valid Email!'); #__('Not a Valid Email!', GRAVATAR_DOMAIN)); bb_delete_usermeta($userID, 'gravatar'); return; } // Generate new verification code $gravatar['new_email'] = $gravatarEmail; bb_update_usermeta($userID, 'gravatar_vcode', 'Check Your Mailbox.'); #__('Check Your Mailbox.', GRAVATAR_DOMAIN)); bb_update_usermeta($userID, 'gravatar', $gravatar); GAGenerateVCode($userID); GASendVCode($userID); } } // Detects Registration page function GAHook_get_location($prevResult, $src) { if (bb_find_filename($src) == 'register.php') return 'register-page'; return $prevResult; } /* Hooks for Internal Stuff ======================================== */ add_filter('get_profile_info_keys', 'GAHook_get_profile_info_keys'); add_filter('bb_get_location', 'GAHook_get_location', 10, 2); add_action('profile_edited', 'GAHook_profile_edited'); add_action('register_user', 'GAHook_profile_edited'); /* Options ======================================== */ function GAGetAllDefaultOptions() { $options = array(); $options = array_merge(GAGetDefaultGeneralOptions() , $options); $options = array_merge(GAGetDefaultImageOptions() , $options); return $options; } function GAGetDefaultGeneralOptions() { $options = array(); $options['useRegisteredEmail'] = false; $options['rating'] = 'G'; # [ G | PG | R | X ] $options['size'] = 64; # 1..80 return $options; } function GAGetDefaultImageOptions() { $options = array(); $options['defaultImage'] = ''; // Find one in plugin directory or theme directory if (file_exists(dirname(__FILE__) . '/gravatar-default.jpg')) $options['defaultImage'] = bb_path_to_url(dirname(__FILE__) . '/gravatar-default.jpg'); elseif (file_exists(dirname(__FILE__) . '/gravatar-default.gif')) $options['defaultImage'] = bb_path_to_url(dirname(__FILE__) . '/gravatar-default.gif'); elseif (file_exists(dirname(__FILE__) . '/gravatar-default.png')) $options['defaultImage'] = bb_path_to_url(dirname(__FILE__) . '/gravatar-default.png'); elseif (file_exists(bb_get_active_theme_folder() . '/gravatar-default.jpg')) $options['defaultImage'] = bb_path_to_url(bb_get_active_theme_folder() . '/gravatar-default.jpg'); elseif (file_exists(bb_get_active_theme_folder() . '/gravatar-default.gif')) $options['defaultImage'] = bb_path_to_url(bb_get_active_theme_folder() . '/gravatar-default.gif'); elseif (file_exists(bb_get_active_theme_folder() . '/gravatar-default.png')) $options['defaultImage'] = bb_path_to_url(bb_get_active_theme_folder() . '/gravatar-default.png'); return $options; } /* Admin ======================================== */ function GAAdminMenu() { global $bb_submenu; $bb_submenu['plugins.php'][] = array(__('Gravatar', GRAVATAR_DOMAIN), 'manage_options', 'GAOptions'); $options = bb_get_option('GAOptions'); // Check options for 0.2 or first install if (empty($options)) { $options = GAGetAllDefaultOptions(); bb_update_option('GAOptions', $options); } } function GADeactivate() { if ($_GET['by'] == 'plugin') { bb_delete_option('GAOptions'); // Remove usermeta global $bbdb; $bbdb->query("DELETE FROM $bbdb->usermeta WHERE meta_key like 'gravatar%'"); } } include_once('OptionsPage.php'); add_action('bb_admin_menu_generator', 'GAAdminMenu'); //bb_register_deactivation_hook(__FILE__, 'GADeactivate'); // Bug in bbPress 0.8.3, do same thing using next line add_action('bb_deactivate_plugin_' . bb_plugin_basename(__FILE__), 'GADeactivate'); ?>