Método para trocar avatar de usuário (Jom Social)
De Basef
Para trocar o avatar do usuário logado (sistema Jom Social), usar o seguinte código:
// Atualiza o avatar do Jom Social para o usuário atualmente logado. A localização da imagem deve ser informada por $pathImagem public static function jsAtualizarAvatar( $pathImagem = '' ) { require_once(JPATH_SITE . '/components/com_community/helpers/image.php'); $my = CFactory::getUser(); $userid = $my->id; $size = getimagesize( $pathImagem ); $file['tmp_name'] = $pathImagem; $file['type'] = $size['mime']; $config = CFactory::getConfig(); $uploadLimit = (double) $config->get('maxuploadsize'); $uploadLimit = ( $uploadLimit * 1024 * 1024 ); // @rule: Limit image size based on the maximum upload allowed. if (filesize($file['tmp_name']) > $uploadLimit && $uploadLimit != 0) { return false; } if (!CImageHelper::isValidType($file['type'])) { $mainframe->enqueueMessage(JText::_('CC IMAGE FILE NOT SUPPORTED'), 'error'); return false; } if (!CImageHelper::isValid($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('CC IMAGE FILE NOT SUPPORTED'), 'error'); return false; } else { // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $profileType = $my->getProfileType(); $fileName = JUtility::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); $multiprofile = & JTable::getInstance('MultiProfile', 'CTable'); $multiprofile->load($profileType); $useWatermark = $profileType != COMMUNITY_DEFAULT_PROFILE && $config->get('profile_multiprofile') && !empty($multiprofile->watermark) ? true : false; //@todo: configurable path for avatar storage? $storage = JPATH_ROOT . DS . $config->getString('imagefolder') . DS . 'avatar'; $storageImage = $storage . DS . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . DS . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); $image = $config->getString('imagefolder') . '/avatar/' . $hashFileName . CImageHelper::getExtension($file['type']); $thumbnail = $config->getString('imagefolder') . '/avatar/' . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); $userModel = CFactory::getModel('user'); // Only resize when the width exceeds the max. if (!CImageHelper::resizeProportional($file['tmp_name'], $storageImage, $file['type'], $imageMaxWidth)) { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE', $storageImage), 'error'); return false; } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE', $storageThumbnail), 'error'); return false; } if ($useWatermark) { // @rule: Before adding the watermark, we should copy the user's original image so that when the admin tries to reset the avatar, // it will be able to grab the original picture. JFile::copy($storageImage, JPATH_ROOT . DS . 'images' . DS . 'watermarks' . DS . 'original' . DS . md5($my->id . '_avatar') . CImageHelper::getExtension($file['type'])); JFile::copy($storageThumbnail, JPATH_ROOT . DS . 'images' . DS . 'watermarks' . DS . 'original' . DS . md5($my->id . '_thumb') . CImageHelper::getExtension($file['type'])); $watermarkPath = JPATH_ROOT . DS . JString::str_ireplace('/', DS, $multiprofile->watermark); list( $watermarkWidth, $watermarkHeight ) = getimagesize($watermarkPath); list( $avatarWidth, $avatarHeight ) = getimagesize($storageImage); list( $thumbWidth, $thumbHeight ) = getimagesize($storageThumbnail); $watermarkImage = $storageImage; $watermarkThumbnail = $storageThumbnail; // Avatar Properties $avatarPosition = CImageHelper::getPositions($multiprofile->watermark_location, $avatarWidth, $avatarHeight, $watermarkWidth, $watermarkHeight); // The original image file will be removed from the system once it generates a new watermark image. CImageHelper::addWatermark($storageImage, $watermarkImage, 'image/jpg', $watermarkPath, $avatarPosition->x, $avatarPosition->y); //Thumbnail Properties $thumbPosition = CImageHelper::getPositions($multiprofile->watermark_location, $thumbWidth, $thumbHeight, $watermarkWidth, $watermarkHeight); // The original thumbnail file will be removed from the system once it generates a new watermark image. CImageHelper::addWatermark($storageThumbnail, $watermarkThumbnail, 'image/jpg', $watermarkPath, $thumbPosition->x, $thumbPosition->y); $my->set('_watermark_hash', $multiprofile->watermark_hash); $my->save(); } $userModel->setImage($userid, $image, 'avatar'); $userModel->setImage($userid, $thumbnail, 'thumb'); // Update the user object so that the profile picture gets updated. $my->set('_avatar', $image); $my->set('_thumb', $thumbnail); // @rule: once user changes their profile picture, storage method should always be file. $my->set('_storage', 'file'); } }