Пример #1
0
 /**
  * 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);
     }
 }
Пример #2
0
 /**
  * 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}";
 }
Пример #3
0
 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);
     }
 }
Пример #4
0
 /**
  * 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}";
 }