コード例 #1
0
ファイル: photos.php プロジェクト: Jougito/DynWeb
 /**
  * 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;
     }
 }
コード例 #2
0
ファイル: photos.php プロジェクト: bizanto/Hooked
 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;
 }
コード例 #3
0
ファイル: profile.php プロジェクト: joshjim27/jobsglobal
 /**
  * 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__);
 }
コード例 #4
0
ファイル: image.php プロジェクト: Jougito/DynWeb
 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;
     }
 }
コード例 #5
0
ファイル: events.php プロジェクト: joshjim27/jobsglobal
 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__);
 }
コード例 #6
0
ファイル: groups.php プロジェクト: Jougito/DynWeb
 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);
 }