/** * Override avatar upload to support avatar gallery selection */ public function actionAvatarUpload() { // Receive input data $inputData = $this->_input->filter(array('delete' => XenForo_Input::UINT, 'avatar_crop_x' => XenForo_Input::UINT, 'avatar_crop_y' => XenForo_Input::UINT, 'gravatar' => XenForo_Input::STRING, 'chosen_avatar' => XenForo_Input::STRING, 'use_gravatar' => XenForo_Input::UINT)); // No point in overriding the default behaviour if the user didn't use an avatar from the gallery if ($inputData['use_gravatar'] == 1 or empty($inputData['chosen_avatar'])) { return parent::actionAvatarUpload(); } // Locate avatar $options = XenForo_Application::get('options'); $path = dirname(__FILE__) . '/../../..' . $options->avatarGalleryPath; $avatar = $path . '/' . $inputData['chosen_avatar']; // Validate it exists and is readable if (!file_exists($avatar) or !is_readable($avatar)) { throw new XenForo_Exception(new XenForo_Phrase('uploaded_file_is_not_valid_image'), true); } // Get image attributes list($width, $height, $type, $attr) = getimagesize($avatar); // Copy the image to a temp dir, since we're hooking into the avatar upload functionality $filename = sys_get_temp_dir() . '/' . uniqid(); copy($avatar, $filename); $visitor = XenForo_Visitor::getInstance(); // Apply the avatar to the user $avatarModel = $this->getModelFromCache('XenForo_Model_Avatar'); $avatarData = $avatarModel->applyAvatar($visitor['user_id'], $filename, $type, $width, $height, $visitor->getPermissions()); // merge new data into $visitor, if there is any if (isset($avatarData) && is_array($avatarData)) { foreach ($avatarData as $key => $val) { $visitor[$key] = $val; } } $message = new XenForo_Phrase('upload_completed_successfully'); // return a view if noredirect has been requested and we are not deleting if ($this->_noRedirect()) { return $this->responseView('XenForo_ViewPublic_Account_AvatarUpload', 'account_avatar_upload', array('user' => $visitor->toArray(), 'sizeCode' => 'm', 'maxWidth' => XenForo_Model_Avatar::getSizeFromCode('m'), 'maxDimension' => $visitor['avatar_width'] > $visitor['avatar_height'] ? 'height' : 'width', 'width' => $visitor['avatar_width'], 'height' => $visitor['avatar_height'], 'cropX' => $visitor['avatar_crop_x'], 'cropY' => $visitor['avatar_crop_y'], 'user_id' => $visitor['user_id'], 'avatar_date' => $visitor['avatar_date'], 'gravatar' => $visitor['gravatar'], 'message' => $message)); } else { return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('account/personal-details'), $message); } }
/** * Returns a Gravatar URL for the user * * @param array $user * @param string|integer $size (s,m,l) * @param string Override default (useful to use '404') */ protected static function _getGravatarUrl(array $user, $size, $default = '') { $md5 = md5($user['gravatar']); if ($default === '') { $default = '&d=' . urlencode(XenForo_Application::get('options')->boardUrl . '/' . self::_getDefaultAvatarUrl($user, $size)); } else { if (!empty($default)) { $default = '&d=' . urlencode($default); } } if (is_string($size)) { $size = XenForo_Model_Avatar::getSizeFromCode($size); } return "http://www.gravatar.com/avatar/{$md5}.jpg?s={$size}{$default}"; }
public function actionAvatarUpload() { $this->_assertPostOnly(); if (!XenForo_Visitor::getInstance()->canUploadAvatar()) { return $this->responseNoPermission(); } $avatar = XenForo_Upload::getUploadedFile('avatar'); /* @var $avatarModel XenForo_Model_Avatar */ $avatarModel = $this->getModelFromCache('XenForo_Model_Avatar'); /* @var $visitor XenForo_Visitor */ $visitor = XenForo_Visitor::getInstance(); $inputData = $this->_input->filter(array('delete' => XenForo_Input::UINT, 'avatar_crop_x' => XenForo_Input::UINT, 'avatar_crop_y' => XenForo_Input::UINT, 'gravatar' => XenForo_Input::STRING, 'use_gravatar' => XenForo_Input::UINT)); // upload new avatar if ($avatar) { $avatarData = $avatarModel->uploadAvatar($avatar, $visitor['user_id'], $visitor->getPermissions()); } else { if ($inputData['delete']) { $avatarData = $avatarModel->deleteAvatar(XenForo_Visitor::getUserId()); } else { if (XenForo_Application::get('options')->gravatarEnable && $inputData['use_gravatar']) { if (!$inputData['gravatar']) { $inputData['gravatar'] = $visitor['email']; } if (!XenForo_Model_Avatar::gravatarExists($inputData['gravatar'], $errorText)) { return $this->responseError($errorText); } else { $avatarData = array('gravatar' => $inputData['gravatar']); $this->_saveVisitorSettings($avatarData, $errors); } } else { if ($inputData['avatar_crop_x'] != $visitor['avatar_crop_x'] || $inputData['avatar_crop_y'] != $visitor['avatar_crop_y']) { $avatarData = $avatarModel->recropAvatar(XenForo_Visitor::getUserId(), $inputData['avatar_crop_x'], $inputData['avatar_crop_y']); } else { if ($visitor['gravatar'] && !$inputData['use_gravatar']) { $avatarData = array('gravatar' => ''); $this->_saveVisitorSettings($avatarData, $errors); } } } } } // merge new data into $visitor, if there is any if (isset($avatarData) && is_array($avatarData)) { foreach ($avatarData as $key => $val) { $visitor[$key] = $val; } } $message = new XenForo_Phrase('upload_completed_successfully'); // return a view if noredirect has been requested and we are not deleting if ($this->_noRedirect()) { return $this->responseView('XenForo_ViewPublic_Account_AvatarUpload', 'account_avatar_upload', array('user' => $visitor->toArray(), 'sizeCode' => 'm', 'maxWidth' => XenForo_Model_Avatar::getSizeFromCode('m'), 'maxDimension' => $visitor['avatar_width'] > $visitor['avatar_height'] ? 'height' : 'width', 'width' => $visitor['avatar_width'], 'height' => $visitor['avatar_height'], 'cropX' => $visitor['avatar_crop_x'], 'cropY' => $visitor['avatar_crop_y'], 'user_id' => $visitor['user_id'], 'avatar_date' => $visitor['avatar_date'], 'gravatar' => $visitor['gravatar'], 'message' => $message)); } else { return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('account/personal-details'), $message); } }
/** * Returns a Gravatar URL for the user * * @param array $user * @param string|integer $size (s,m,l) * @param string Override default (useful to use '404') */ protected static function _getGravatarUrl(array $user, $size, $default = '') { $md5 = md5(strtolower(trim($user['gravatar']))); if ($default === '') { $default = '&d=' . urlencode(XenForo_Link::convertUriToAbsoluteUri(self::_getDefaultAvatarUrl($user, $size), true)); } else { if (!empty($default)) { $default = '&d=' . urlencode($default); } } if (is_string($size)) { $size = XenForo_Model_Avatar::getSizeFromCode($size); } return (XenForo_Application::$secure ? 'https://secure' : 'http://www') . ".gravatar.com/avatar/{$md5}?s={$size}{$default}"; }