/** * Rotate the given image file */ private function _rotatePhoto($imageFile, $photoTable, $storedPath, $thumbPath) { $config = CFactory::getConfig(); // Read orientation data from original file $orientation = CImageHelper::getOrientation($imageFile['tmp_name']); // A newly uplaoded image might not be resized yet, do it now $displayWidth = $config->getInt('photodisplaysize'); JRequest::setVar('imgid', $photoTable->id, 'GET'); JRequest::setVar('maxW', $displayWidth, 'GET'); JRequest::setVar('maxH', $displayWidth, 'GET'); $this->showimage(false); // Rotata resized files ince it is smaller switch ($orientation) { case 1: // nothing break; case 2: // horizontal flip // $image->flipImage($public,1); break; case 3: // 180 rotate left // $image->rotateImage($public,180); CImageHelper::rotate($storedPath, $storedPath, 180); CImageHelper::rotate($thumbPath, $thumbPath, 180); break; case 4: // vertical flip // $image->flipImage($public,2); break; case 5: // vertical flip + 90 rotate right //$image->flipImage($public, 2); //$image->rotateImage($public, -90); break; case 6: // 90 rotate right // $image->rotateImage($public, -90); CImageHelper::rotate($storedPath, $storedPath, -90); CImageHelper::rotate($thumbPath, $thumbPath, -90); break; case 7: // horizontal flip + 90 rotate right // $image->flipImage($public,1); // $image->rotateImage($public, -90); break; case 8: // 90 rotate left // $image->rotateImage($public, 90); CImageHelper::rotate($storedPath, $storedPath, 90); CImageHelper::rotate($thumbPath, $thumbPath, 90); break; } }
public function upload() { $my = $this->plugin->get('user'); $config = CFactory::getConfig(); $returns = array(); // Load up required models and properties CFactory::load('controllers', 'photos'); CFactory::load('libraries', 'photos'); CFactory::load('models', 'photos'); CFactory::load('helpers', 'image'); $photos = JRequest::get('Files'); $albumId = JRequest::getVar('albumid', '', 'REQUEST'); $album =& JTable::getInstance('Album', 'CTable'); $album->load($albumId); $handler = $this->_getHandler($album); foreach ($photos as $imageFile) { if (!$this->_validImage($imageFile)) { $this->_showUploadError(true, $this->getError()); return; } if ($this->_imageLimitExceeded(filesize($imageFile['tmp_name']))) { $this->_showUploadError(true, JText::_('CC IMAGE FILE SIZE EXCEEDED')); return; } // We need to read the filetype as uploaded always return application/octet-stream // regardless od the actual file type $info = getimagesize($imageFile['tmp_name']); $isDefaultPhoto = JRequest::getVar('defaultphoto', false, 'REQUEST'); if ($album->id == 0 || $my->id != $album->creator && $album->type != PHOTOS_GROUP_TYPE) { $this->_showUploadError(true, JText::_('CC INVALID ALBUM')); return; } if (!$album->hasAccess($my->id, 'upload')) { $this->_showUploadError(true, JText::_('CC INVALID ALBUM')); return; } // Hash the image file name so that it gets as unique possible $fileName = JUtility::getHash($imageFile['tmp_name'] . time()); $hashFilename = JString::substr($fileName, 0, 24); $imgType = image_type_to_mime_type($info[2]); // Load the tables $photoTable =& JTable::getInstance('Photo', 'CTable'); // @todo: configurable paths? $storage = JPATH_ROOT . DS . $config->getString('photofolder'); $albumPath = empty($album->path) ? '' : $album->id . DS; // Test if the photos path really exists. jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); CFactory::load('helpers', 'limits'); $originalPath = $handler->getOriginalPath($storage, $albumPath, $album->id); CFactory::load('helpers', 'owner'); // @rule: Just in case user tries to exploit the system, we should prevent this from even happening. if ($handler->isExceedUploadLimit() && !COwnerHelper::isCommunityAdmin()) { $config = CFactory::getConfig(); $photoLimit = $config->get('groupphotouploadlimit'); echo JText::sprintf('CC GROUP PHOTO UPLOAD LIMIT REACHED', $photoLimit); return; } if (!JFolder::exists($originalPath)) { if (!JFolder::create($originalPath, (int) octdec($config->get('folderpermissionsphoto')))) { $this->_showUploadError(true, JText::_('CC ERROR CREATING USERS PHOTO FOLDER')); return; } } $locationPath = $handler->getLocationPath($storage, $albumPath, $album->id); if (!JFolder::exists($locationPath)) { if (!JFolder::create($locationPath, (int) octdec($config->get('folderpermissionsphoto')))) { $this->_showUploadError(true, JText::_('CC ERROR CREATING USERS PHOTO FOLDER')); return; } } $thumbPath = $handler->getThumbPath($storage, $album->id); $thumbPath = $thumbPath . DS . $albumPath . 'thumb_' . $hashFilename . CImageHelper::getExtension($imageFile['type']); CPhotos::generateThumbnail($imageFile['tmp_name'], $thumbPath, $imgType); // Original photo need to be kept to make sure that, the gallery works $useAlbumId = empty($album->path) ? 0 : $album->id; $originalFile = $originalPath . $hashFilename . CImageHelper::getExtension($imgType); $this->_storeOriginal($imageFile['tmp_name'], $originalFile, $useAlbumId); $photoTable->original = JString::str_ireplace(JPATH_ROOT . DS, '', $originalFile); // Set photos properties $photoTable->albumid = $albumId; $photoTable->caption = $imageFile['name']; $photoTable->creator = $my->id; $photoTable->created = gmdate('Y-m-d H:i:s'); // Remove the filename extension from the caption if (JString::strlen($photoTable->caption) > 4) { $photoTable->caption = JString::substr($photoTable->caption, 0, JString::strlen($photoTable->caption) - 4); } // @todo: configurable options? // Permission should follow album permission $photoTable->published = '1'; $photoTable->permissions = $album->permissions; // Set the relative path. // @todo: configurable path? $storedPath = $handler->getStoredPath($storage, $albumId); $storedPath = $storedPath . DS . $albumPath . $hashFilename . CImageHelper::getExtension($imageFile['type']); $photoTable->image = JString::str_ireplace(JPATH_ROOT . DS, '', $storedPath); $photoTable->thumbnail = JString::str_ireplace(JPATH_ROOT . DS, '', $thumbPath); //photo filesize, use sprintf to prevent return of unexpected results for large file. $photoTable->filesize = sprintf("%u", filesize($originalPath)); // @rule: Set the proper ordering for the next photo upload. $photoTable->setOrdering(); // Store the object $photoTable->store(); // We need to see if we need to rotate this image, from EXIF orientation data // Only for jpeg image. if ($config->get('photos_auto_rotate') && $imgType == 'image/jpeg') { // Read orientation data from original file $orientation = CImageHelper::getOrientation($imageFile['tmp_name']); //echo $orientation; exit; // A newly uplaoded image might not be resized yet, do it now $displayWidth = $config->getInt('photodisplaysize'); JRequest::setVar('imgid', $photoTable->id, 'GET'); JRequest::setVar('maxW', $displayWidth, 'GET'); JRequest::setVar('maxH', $displayWidth, 'GET'); $this->showimage(false); // Rotata resized files ince it is smaller switch ($orientation) { case 1: // nothing break; case 2: // horizontal flip // $image->flipImage($public,1); break; case 3: // 180 rotate left // $image->rotateImage($public,180); CImageHelper::rotate($storedPath, $storedPath, 180); CImageHelper::rotate($thumbPath, $thumbPath, 180); break; case 4: // vertical flip // $image->flipImage($public,2); break; case 5: // vertical flip + 90 rotate right //$image->flipImage($public, 2); //$image->rotateImage($public, -90); break; case 6: // 90 rotate right // $image->rotateImage($public, -90); CImageHelper::rotate($storedPath, $storedPath, -90); CImageHelper::rotate($thumbPath, $thumbPath, -90); break; case 7: // horizontal flip + 90 rotate right // $image->flipImage($public,1); // $image->rotateImage($public, -90); break; case 8: // 90 rotate left // $image->rotateImage($public, 90); CImageHelper::rotate($storedPath, $storedPath, 90); CImageHelper::rotate($thumbPath, $thumbPath, 90); break; } } // Trigger for onPhotoCreate CFactory::load('libraries', 'apps'); $apps =& CAppPlugins::getInstance(); $apps->loadApplications(); $params = array(); $params[] =& $photoTable; $apps->triggerEvent('onPhotoCreate', $params); // Set image as default if necessary // Load photo album table if ($isDefaultPhoto) { // Set the photo id $album->photoid = $photoTable->id; $album->store(); } // @rule: Set first photo as default album cover if enabled if (!$isDefaultPhoto && $config->get('autoalbumcover')) { $photosModel = CFactory::getModel('Photos'); $totalPhotos = $photosModel->getTotalPhotos($album->id); if ($totalPhotos <= 1) { $album->photoid = $photoTable->id; $album->store(); } } $act = new stdClass(); $act->cmd = 'photo.upload'; $act->actor = $my->id; $act->access = $my->getParam('privacyPhotoView'); $act->target = 0; $act->title = JText::sprintf($handler->getUploadActivityTitle(), '{photo_url}', $album->name); $act->content = '<img src="' . rtrim(JURI::root(), '/') . '/' . $photoTable->thumbnail . '" style=\\"border: 1px solid #eee;margin-right: 3px;" />'; $act->app = 'photos'; $act->cid = $albumId; $params = new JParameter(''); $params->set('multiUrl', $handler->getAlbumURI($albumId, false)); $params->set('photoid', $photoTable->id); $params->set('action', 'upload'); $params->set('photo_url', $handler->getPhotoURI($albumId, $photoTable->id, false)); // Add activity logging CFactory::load('libraries', 'activities'); CActivityStream::add($act, $params->toString()); //add user points CFactory::load('libraries', 'userpoints'); CUserPoints::assignPoint('photo.upload'); // Photo upload was successfull, display a proper message //$this->_showUploadError( false , JText::sprintf('CC PHOTO UPLOADED SUCCESSFULLY', $photoTable->caption ) , $photoTable->getThumbURI(), $albumId ); $returns[] = array('album_id' => $albumId, 'image_id' => $photoTable->id, 'caption' => $photoTable->caption, 'created' => $photoTable->created, 'storage' => $photoTable->storage, 'thumbnail' => $photoTable->getThumbURI(), 'image' => $photoTable->getImageURI()); } return $returns; exit; }
/** * Upload a new user avatar, called from the profile/change avatar page */ public function uploadAvatar() { CFactory::setActiveProfile(); jimport('joomla.filesystem.file'); jimport('joomla.utilities.utility'); $view = $this->getView('profile'); $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; $my = CFactory::getUser(); if ($my->id == 0) { return $this->blockUnregister(); } // If uplaod is detected, we process the uploaded avatar if ($jinput->post->get('action', '')) { $mainframe = JFactory::getApplication(); $fileFilter = new JInput($_FILES); $file = $fileFilter->get('Filedata', '', 'array'); $userid = $my->id; if ($jinput->post->get('userid', '', 'INT') != '') { $userid = JRequest::getInt('userid', '', 'POST'); $url = CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid); $my = CFactory::getUser($userid); } if (!isset($file['tmp_name']) || empty($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_NO_POST_DATA'), 'error'); if (isset($url)) { $mainframe->redirect($url); } } else { $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) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_VIDEOS_IMAGE_FILE_SIZE_EXCEEDED_MB', CFactory::getConfig()->get('maxuploadsize')), 'error'); if (isset($url)) { $mainframe->redirect($url); } $mainframe->redirect(CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid . '&task=uploadAvatar', false)); } if (!CImageHelper::isValidType($file['type'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); if (isset($url)) { $mainframe->redirect($url); } $mainframe->redirect(CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid . '&task=uploadAvatar', false)); } if (!CImageHelper::isValid($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); if (isset($url)) { $mainframe->redirect($url); } } else { // @todo: configurable width? //$imageMaxWidth = 160; //$imageMaxHeight = 240; // Get a hash for the file name. $profileType = $my->getProfileType(); $fileName = JApplication::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 . '/' . $config->getString('imagefolder') . '/avatar'; /* physical path */ $storageImage = $storage . '/' . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . '/thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); /** * reverse image use for cropping feature * @uses <type>-<hashFileName>.<ext> */ $storageReserve = $storage . '/profile-' . $hashFileName . CImageHelper::getExtension($file['type']); /* relative path to save in database */ $image = $config->getString('imagefolder') . '/avatar/' . $hashFileName . CImageHelper::getExtension($file['type']); $thumbnail = $config->getString('imagefolder') . '/avatar/' . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); // filename for stream attachment $imageAttachment = $config->getString('imagefolder') . '/avatar/' . $hashFileName . '_stream_' . CImageHelper::getExtension($file['type']); $userModel = CFactory::getModel('user'); //Minimum height/width checking for Avatar uploads list($currentWidth, $currentHeight) = getimagesize($file['tmp_name']); /** * Do square avatar 160x160 * @since 3.0 */ if ($currentWidth < COMMUNITY_AVATAR_PROFILE_WIDTH || $currentHeight < COMMUNITY_AVATAR_PROFILE_HEIGHT) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MINIMUM_AVATAR_DIMENSION', COMMUNITY_AVATAR_PROFILE_WIDTH, COMMUNITY_AVATAR_PROFILE_HEIGHT), 'error'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=profile&task=uploadAvatar', false)); } // // Only resize when the width exceeds the max. // if ( ! CImageHelper::resizeProportional($file['tmp_name'], $storageImage, $file['type'], $imageMaxWidth, $imageMaxHeight)) // { // $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage), 'error'); // // if (isset($url)) // { // $mainframe->redirect($url); // } // } /** * Generate square avatar */ if (!CImageHelper::createThumb($file['tmp_name'], $storageImage, $file['type'], COMMUNITY_AVATAR_PROFILE_WIDTH, COMMUNITY_AVATAR_PROFILE_HEIGHT)) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage), 'error'); if (isset($url)) { $mainframe->redirect($url); } } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageThumbnail), 'error'); if (isset($url)) { $mainframe->redirect($url); } } /** * Generate large image use for avatar thumb cropping * It must be larget than profile avatar size because we'll use it for profile avatar recrop also */ if ($currentWidth >= $currentHeight) { if (!CImageHelper::resizeProportional($file['tmp_name'], $storageReserve, $file['type'], 0, COMMUNITY_AVATAR_RESERVE_HEIGHT)) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageReserve)); return; } } else { if (!CImageHelper::resizeProportional($file['tmp_name'], $storageReserve, $file['type'], COMMUNITY_AVATAR_RESERVE_WIDTH, 0)) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageReserve)); return; } } 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. if (!JFolder::exists(JPATH_ROOT . '/images/watermarks/original/')) { JFolder::create(JPATH_ROOT . '/images/watermarks/original/'); } JFile::copy($storageImage, JPATH_ROOT . '/images/watermarks/original/' . md5($my->id . '_avatar') . CImageHelper::getExtension($file['type'])); JFile::copy($storageThumbnail, JPATH_ROOT . '/images/watermarks/original/' . md5($my->id . '_thumb') . CImageHelper::getExtension($file['type'])); $watermarkPath = JPATH_ROOT . '/' . CString::str_ireplace('/', '/', $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, $file['type'], $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, $file['type'], $watermarkPath, $thumbPosition->x, $thumbPosition->y); $my->set('_watermark_hash', $multiprofile->watermark_hash); $my->save(); } // Autorotate avatar based on EXIF orientation value if ($file['type'] == 'image/jpeg') { $orientation = CImageHelper::getOrientation($file['tmp_name']); CImageHelper::autoRotate($storageImage, $orientation); CImageHelper::autoRotate($storageThumbnail, $orientation); CImageHelper::autoRotate($storageReserve, $orientation); } // @todo: Change to use table code and get rid of model code $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'); if (isset($url)) { $mainframe->redirect($url); } // Generate activity stream. $this->_addAvatarUploadActivity($userid, $thumbnail); $this->cacheClean(array(COMMUNITY_CACHE_TAG_ACTIVITIES, COMMUNITY_CACHE_TAG_FRONTPAGE)); } } } echo $view->get(__FUNCTION__); }
public static function autoRotate($imagePath, $orientation = null) { if (!$orientation) { // Read orientation data from original file $orientation = CImageHelper::getOrientation($imagePath); } // Rotate resized files ince it is smaller switch ($orientation) { case 1: // nothing break; case 2: // horizontal flip break; case 3: // 180 rotate left CImageHelper::rotate($imagePath, $imagePath, 180); break; case 4: // vertical flip break; case 5: // vertical flip + 90 rotate right break; case 6: // 90 rotate right CImageHelper::rotate($imagePath, $imagePath, -90); break; case 7: // horizontal flip + 90 rotate right break; case 8: // 90 rotate left CImageHelper::rotate($imagePath, $imagePath, 90); break; } }
public function uploadAvatar() { $mainframe = JFactory::getApplication(); $document = JFactory::getDocument(); $viewType = $document->getType(); $jinput = $mainframe->input; $viewName = $jinput->get('view', $this->getName(), 'String'); $view = $this->getView($viewName, '', $viewType); $eventid = $jinput->request->get('eventid', 0, 'Int'); $model = $this->getModel('events'); $event = JTable::getInstance('Event', 'CTable'); $event->load($eventid); $handler = CEventHelper::getHandler($event); if (!$handler->manageable()) { echo JText::_('COM_COMMUNITY_ACCESS_FORBIDDEN'); return; } if ($jinput->getMethod() == 'POST') { JSession::checkToken() or jexit(JText::_('COM_COMMUNITY_INVALID_TOKEN')); //CFactory::load( 'libraries' , 'apps' ); $my = CFactory::getUser(); $config = CFactory::getConfig(); $appsLib = CAppPlugins::getInstance(); $saveSuccess = $appsLib->triggerEvent('onFormSave', array('jsform-events-uploadavatar')); if (empty($saveSuccess) || !in_array(false, $saveSuccess)) { //CFactory::load( 'helpers' , 'image' ); $fileFilter = new JInput($_FILES); $file = $fileFilter->get('filedata', '', 'array'); if (!CImageHelper::isValidType($file['type'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); $mainframe->redirect($handler->getFormattedLink('index.php?option=com_community&view=events&task=viewevent&eventid=' . $event->id . '&task=uploadAvatar', false)); } if (empty($file)) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_NO_POST_DATA'), 'error'); } else { $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) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_VIDEOS_IMAGE_FILE_SIZE_EXCEEDED_MB', CFactory::getConfig()->get('maxuploadsize')), 'error'); $mainframe->redirect($handler->getFormattedLink('index.php?option=com_community&view=events&task=uploadavatar&eventid=' . $event->id, false)); } if (!CImageHelper::isValid($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); $mainframe->redirect($handler->getFormattedLink('index.php?option=com_community&view=events&task=uploadavatar&eventid=' . $event->id, false)); } else { CImageHelper::autorotate($file['tmp_name']); // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JApplication::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); // @todo: configurable path for avatar storage? $storage = JPATH_ROOT . '/' . $config->getString('imagefolder') . '/avatar/events'; $storageImage = $storage . '/' . $hashFileName . CImageHelper::getExtension($file['type']); $image = $config->getString('imagefolder') . '/avatar/events/' . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . '/thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); $thumbnail = $config->getString('imagefolder') . '/avatar/events/' . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); // Generate full image if (!CImageHelper::resizeProportional($file['tmp_name'], $storageImage, $file['type'], $imageMaxWidth)) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage), 'error'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=events&task=uploadavatar&eventid=' . $event->id, false)); } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage), 'error'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=events&task=uploadavatar&eventid=' . $event->id, false)); } // Autorotate avatar based on EXIF orientation value if ($file['type'] == 'image/jpeg') { $orientation = CImageHelper::getOrientation($file['tmp_name']); CImageHelper::autoRotate($storageImage, $orientation); CImageHelper::autoRotate($storageThumbnail, $orientation); } // Update the event with the new image $event->setImage($image, 'avatar'); $event->setImage($thumbnail, 'thumb'); $handler = CEventHelper::getHandler($event); if ($handler->isPublic()) { $actor = $my->id; $target = 0; $content = '<img class="event-thumb" src="' . JURI::root(true) . '/' . $image . '" style="border: 1px solid #eee;margin-right: 3px;" />'; $cid = $event->id; $app = 'events'; $act = $handler->getActivity('events.avatar.upload', $actor, $target, $content, $cid, $app); $act->eventid = $event->id; $params = new CParameter(''); $params->set('event_url', $handler->getFormattedLink('index.php?option=com_community&view=events&task=viewevent&eventid=' . $event->id, false, true, false)); CActivityStream::add($act, $params->toString()); } //add user points CUserPoints::assignPoint('event.avatar.upload'); $mainframe = JFactory::getApplication(); $mainframe->redirect($handler->getFormattedLink('index.php?option=com_community&view=events&task=viewevent&eventid=' . $eventid, false), JText::_('COM_COMMUNITY_EVENTS_AVATAR_UPLOADED')); exit; } } } } echo $view->get(__FUNCTION__); }
public function uploadAvatar() { $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->getName()); $view = $this->getView($viewName, '', $viewType); $my = CFactory::getUser(); $config = CFactory::getConfig(); $groupid = $jinput->request->get('groupid', '', 'INT'); $data = new stdClass(); $data->id = $groupid; $groupsModel = $this->getModel('groups'); $group = JTable::getInstance('Group', 'CTable'); $group->load($groupid); if (!$my->authorise('community.upload', 'groups.avatar.' . $groupid, $group)) { $errorMsg = $my->authoriseErrorMsg(); if (!$errorMsg) { return $this->blockUnregister(); } else { echo $errorMsg; } return; } if ($jinput->getMethod() == 'POST') { //CFactory::load( 'helpers' , 'image' ); $fileFilter = new JInput($_FILES); $file = $fileFilter->get('filedata', '', 'array'); //$file = JRequest::getVar('filedata' , '' , 'FILES' , 'array'); if (!CImageHelper::isValidType($file['type'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id . '&task=uploadAvatar', false)); } //CFactory::load( 'libraries' , 'apps' ); $appsLib = CAppPlugins::getInstance(); $saveSuccess = $appsLib->triggerEvent('onFormSave', array('jsform-groups-uploadavatar')); if (empty($saveSuccess) || !in_array(false, $saveSuccess)) { if (empty($file)) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_NO_POST_DATA'), 'error'); } else { $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) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_VIDEOS_IMAGE_FILE_SIZE_EXCEEDED_MB', CFactory::getConfig()->get('maxuploadsize')), 'error'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=groups&task=uploadavatar&groupid=' . $group->id, false)); } if (!CImageHelper::isValid($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); } else { // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JApplication::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); // @todo: configurable path for avatar storage? $storage = JPATH_ROOT . '/' . $config->getString('imagefolder') . '/avatar/groups'; $storageImage = $storage . '/' . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . '/thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); $image = $config->getString('imagefolder') . '/avatar/groups/' . $hashFileName . CImageHelper::getExtension($file['type']); $thumbnail = $config->getString('imagefolder') . '/avatar/groups/' . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); // Generate full image if (!CImageHelper::resizeProportional($file['tmp_name'], $storageImage, $file['type'], $imageMaxWidth)) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage), 'error'); } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageThumbnail), 'error'); } // Autorotate avatar based on EXIF orientation value if ($file['type'] == 'image/jpeg') { $orientation = CImageHelper::getOrientation($file['tmp_name']); CImageHelper::autoRotate($storageImage, $orientation); CImageHelper::autoRotate($storageThumbnail, $orientation); } // Update the group with the new image $groupsModel->setImage($groupid, $image, 'avatar'); $groupsModel->setImage($groupid, $thumbnail, 'thumb'); // @rule: only add the activities of the news if the group is not private. if ($group->approvals == COMMUNITY_PUBLIC_GROUP) { $url = CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupid); $act = new stdClass(); $act->cmd = 'group.avatar.upload'; $act->actor = $my->id; $act->target = 0; $act->title = JText::sprintf('COM_COMMUNITY_GROUPS_NEW_GROUP_AVATAR', '{group_url}', $group->name); $act->content = '<img src="' . JURI::root(true) . '/' . $thumbnail . '" style="border: 1px solid #eee;margin-right: 3px;" />'; $act->app = 'groups'; $act->cid = $group->id; $act->groupid = $group->id; $params = new CParameter(''); $params->set('group_url', 'index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id); CActivityStream::add($act, $params->toString()); } //add user points //CFactory::load( 'libraries' , 'userpoints' ); CUserPoints::assignPoint('group.avatar.upload'); $mainframe = JFactory::getApplication(); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupid, false), JText::_('COM_COMMUNITY_GROUPS_AVATAR_UPLOADED')); exit; } } } } //ClearCache in frontpage $this->cacheClean(array(COMMUNITY_CACHE_TAG_FRONTPAGE, COMMUNITY_CACHE_TAG_GROUPS, COMMUNITY_CACHE_TAG_FEATURED, COMMUNITY_CACHE_TAG_ACTIVITIES)); echo $view->get(__FUNCTION__, $data); }