/** * Called when the user uploaded a new photo and process avatar upload & resize * @return type */ public function changeAvatar() { $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; /* get variables */ $type = $jinput->get('type', null, 'NONE'); $id = $jinput->get('id', null, 'INT'); $saveAction = $jinput->get('repeattype', null, 'STRING'); $filter = JFilterInput::getInstance(); $type = $filter->clean($type, 'string'); $id = $filter->clean($id, 'integer'); $params = new JRegistry(); $cTable = JTable::getInstance(ucfirst($type), 'CTable'); $cTable->load($id); if ($type == "profile") { $my = CFactory::getUser($id); } else { $my = CFactory::getUser(); } $config = CFactory::getConfig(); $userid = $my->id; $fileFilter = new JInput($_FILES); $file = $fileFilter->get('filedata', '', 'array'); if (!CImageHelper::checkImageSize(filesize($file['tmp_name']))) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_VIDEOS_IMAGE_FILE_SIZE_EXCEEDED_MB', CFactory::getConfig()->get('maxuploadsize'))); return; } //check if file is allwoed if (!CImageHelper::isValidType($file['type'])) { $this->_showUploadError(true, JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED')); return; } CImageHelper::autoRotate($file['tmp_name']); $album = JTable::getInstance('Album', 'CTable'); //create the avatar default album if it does not exists if (!($albumId = $album->isAvatarAlbumExists($id, $type))) { $albumId = $album->addAvatarAlbum($id, $type); } //start image processing // Get a hash for the file name. $fileName = JApplication::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); $avatarFolder = $type != 'profile' && $type != '' ? $type . '/' : ''; //avatar store path $storage = JPATH_ROOT . '/' . $config->getString('imagefolder') . '/avatar' . '/' . $avatarFolder; if (!JFolder::exists($storage)) { JFolder::create($storage); } $storageImage = $storage . '/' . $hashFileName . CImageHelper::getExtension($file['type']); $image = $config->getString('imagefolder') . '/avatar/' . $avatarFolder . $hashFileName . CImageHelper::getExtension($file['type']); /** * reverse image use for cropping feature * @uses <type>-<hashFileName>.<ext> */ $storageReserve = $storage . '/' . $type . '-' . $hashFileName . CImageHelper::getExtension($file['type']); // filename for stream attachment $imageAttachment = $config->getString('imagefolder') . '/avatar/' . $hashFileName . '_stream_' . CImageHelper::getExtension($file['type']); //avatar thumbnail path $storageThumbnail = $storage . '/thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); $thumbnail = $config->getString('imagefolder') . '/avatar/' . $avatarFolder . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); //Minimum height/width checking for Avatar uploads list($currentWidth, $currentHeight) = getimagesize($file['tmp_name']); if ($currentWidth < COMMUNITY_AVATAR_PROFILE_WIDTH || $currentHeight < COMMUNITY_AVATAR_PROFILE_HEIGHT) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MINIMUM_AVATAR_DIMENSION', COMMUNITY_AVATAR_PROFILE_WIDTH, COMMUNITY_AVATAR_PROFILE_HEIGHT)); return; } /** * Generate square avatar */ if (!CImageHelper::createThumb($file['tmp_name'], $storageImage, $file['type'], COMMUNITY_AVATAR_PROFILE_WIDTH, COMMUNITY_AVATAR_PROFILE_HEIGHT)) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage)); return; } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage)); return; } /** * 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 */ $newWidth = 0; $newHeight = 0; if ($currentWidth >= $currentHeight) { if ($this->testResize($currentWidth, $currentHeight, COMMUNITY_AVATAR_RESERVE_WIDTH, 0, COMMUNITY_AVATAR_PROFILE_WIDTH, COMMUNITY_AVATAR_RESERVE_WIDTH)) { $newWidth = COMMUNITY_AVATAR_RESERVE_WIDTH; $newHeight = 0; } else { $newWidth = 0; $newHeight = COMMUNITY_AVATAR_RESERVE_HEIGHT; } } else { if ($this->testResize($currentWidth, $currentHeight, 0, COMMUNITY_AVATAR_RESERVE_HEIGHT, COMMUNITY_AVATAR_PROFILE_HEIGHT, COMMUNITY_AVATAR_RESERVE_HEIGHT)) { $newWidth = 0; $newHeight = COMMUNITY_AVATAR_RESERVE_HEIGHT; } else { $newWidth = COMMUNITY_AVATAR_RESERVE_WIDTH; $newHeight = 0; } } if (!CImageHelper::resizeProportional($file['tmp_name'], $storageReserve, $file['type'], $newWidth, $newHeight)) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageReserve)); return; } /* * Generate photo to be stored in default avatar album * notes: just in case this need to be used in registration, just get the code below. */ $originalPath = $storage . 'original_' . md5($my->id . '_avatar' . time()) . CImageHelper::getExtension($file['type']); $fullImagePath = $storage . md5($my->id . '_avatar' . time()) . CImageHelper::getExtension($file['type']); $thumbPath = $storage . 'thumb_' . md5($my->id . '_avatar' . time()) . CImageHelper::getExtension($file['type']); // Generate full image if (!CImageHelper::resizeProportional($file['tmp_name'], $fullImagePath, $file['type'], 1024)) { $msg['error'] = JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $file['tmp_name']); echo json_encode($msg); exit; } CPhotos::generateThumbnail($file['tmp_name'], $thumbPath, $file['type']); if (!JFile::copy($file['tmp_name'], $originalPath)) { exit; } //store this picture into default avatar album $now = new JDate(); $photo = JTable::getInstance('Photo', 'CTable'); $photo->albumid = $albumId; $photo->image = str_replace(JPATH_ROOT . '/', '', $fullImagePath); $photo->caption = $file['name']; $photo->filesize = $file['size']; $photo->creator = $my->id; $photo->created = $now->toSql(); $photo->published = 1; $photo->thumbnail = str_replace(JPATH_ROOT . '/', '', $thumbPath); $photo->original = str_replace(JPATH_ROOT . '/', '', $originalPath); if ($photo->store()) { $album->load($albumId); $album->photoid = $photo->id; $album->setParam('thumbnail', $photo->thumbnail); $album->store(); } //end storing user avatar in avatar album if ($type == 'profile') { $profileType = $my->getProfileType(); $multiprofile = JTable::getInstance('MultiProfile', 'CTable'); $multiprofile->load($profileType); $useWatermark = $profileType != COMMUNITY_DEFAULT_PROFILE && $config->get('profile_multiprofile') && !empty($multiprofile->watermark) ? true : false; if ($useWatermark && $multiprofile->watermark) { 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); } // We need to make a copy of current avatar and set it as stream 'attachement' // which will only gets deleted once teh stream is deleted $my->_cparams->set('avatar_photo_id', $photo->id); //we also set the id of the avatar photo $my->save(); JFile::copy($image, $imageAttachment); $params->set('attachment', $imageAttachment); } //end of storing this picture into default avatar album if (empty($saveAction)) { $cTable->setImage($image, 'avatar'); $cTable->setImage($thumbnail, 'thumb'); } else { // This is for event recurring save option ( current / future event ) $cTable->setImage($image, 'avatar', $saveAction); $cTable->setImage($thumbnail, 'thumb', $saveAction); } // add points & activity stream switch ($type) { case 'profile': /** * Generate activity stream * @todo Should we use CApiActivities::add */ // do not have to generate a stream if the user is not the user itself (eg admin change user avatar) if (CUserPoints::assignPoint('profile.avatar.upload') && $my->id == CFactory::getUser()->id) { $act = new stdClass(); $act->cmd = 'profile.avatar.upload'; $act->actor = $userid; $act->target = 0; $act->title = ''; $act->content = ''; $act->access = $my->_cparams->get("privacyPhotoView", 0); $act->app = 'profile.avatar.upload'; /* Profile app */ $act->cid = isset($photo->id) && $photo->id ? $photo->id : 0; $act->verb = 'upload'; /* We uploaded new avatar - NOT change avatar */ $act->params = $params; $params->set('photo_id', $photo->id); $params->set('album_id', $photo->albumid); $act->comment_id = CActivities::COMMENT_SELF; $act->comment_type = 'profile.avatar.upload'; $act->like_id = CActivities::LIKE_SELF; $act->like_type = 'profile.avatar.upload'; } break; case 'group': CUserPoints::assignPoint('group.avatar.upload'); /** * Generate activity stream * @todo Should we use CApiActivities::add */ $act = new stdClass(); $act->cmd = 'groups.avatar.upload'; $act->actor = $userid; $act->target = 0; $act->title = ''; $act->content = ''; $act->app = 'groups.avatar.upload'; /* Groups app */ $act->cid = $id; $act->groupid = $id; $act->verb = 'update'; /* We do update */ $params->set('photo_id', $photo->id); $params->set('album_id', $photo->albumid); $act->comment_id = CActivities::COMMENT_SELF; $act->comment_type = 'groups.avatar.upload'; $act->like_id = CActivities::LIKE_SELF; $act->like_type = 'groups.avatar.upload'; break; case 'event': //CUserPoints::assignPoint('events.avatar.upload'); @disabled since 4.0 /** * Generate activity stream * @todo Should we use CApiActivities::add */ $act = new stdClass(); $act->cmd = 'events.avatar.upload'; $act->actor = $userid; $act->target = 0; $act->title = ''; $act->content = ''; $act->app = 'events.avatar.upload'; /* Events app */ $act->cid = $id; $act->eventid = $id; $act->verb = 'update'; /* We do update */ $act->comment_id = CActivities::COMMENT_SELF; $act->comment_type = 'events.avatar.upload'; $act->like_id = CActivities::LIKE_SELF; $act->like_type = 'events.avatar.upload'; break; } //we only generate stream if the uploader is the user himself, not admin or anyone else if (isset($act) && $my->id == $id || $type != 'profile') { // $return = CApiActivities::add($act); /** * use internal Stream instead use for 3rd part API */ $return = CActivityStream::add($act, $params->toString()); //add the reference to the activity so that we can do something when someone update the avatar if ($type == 'profile') { // overwrite the params because some of the param might be updated through $my object above $cTableParams = $my->_cparams; } else { $cTableParams = new JRegistry($cTable->params); } $cTableParams->set('avatar_activity_id', $return->id); $cTable->params = $cTableParams->toString(); $cTable->store(); } if (method_exists($cTable, 'getLargeAvatar')) { $this->_showUploadError(false, $cTable->getLargeAvatar(), CUrlHelper::avatarURI($thumbnail, 'user_thumb.png')); } else { $this->_showUploadError(false, $cTable->getAvatar(), CUrlHelper::avatarURI($thumbnail, 'user_thumb.png')); } }
public function mapAvatar($avatarUrl = '', $joomlaUserId, $addWaterMark) { $image = ''; if (!empty($avatarUrl)) { // Make sure user is properly added into the database table first $user = CFactory::getUser($joomlaUserId); $fbUser = $this->getUser(); // Load image helper library as it is needed. CFactory::load('helpers', 'image'); // Store image on a temporary folder. $tmpPath = JPATH_ROOT . DS . 'images' . DS . 'originalphotos' . DS . 'facebook_connect_' . $fbUser; /* print_r($avatarUrl); exit; $url = parse_url( $avatarUrl ); $host = $url[ 'host' ]; $fp = fsockopen("profile.ak.fbcdn.net", 80, $errno, $errstr, 30); $path = CString::str_ireplace( $url['scheme'] . '://' . $host , '' , $avatarUrl ); $source = ''; if( $fp ) { $out = "GET $path HTTP/1.1\r\n"; $out .= "Host: " . $host . "\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $body = false; while( !feof( $fp ) ) { $return = fgets( $fp , 1024 ); if( $body ) { $source .= $return; } if( $return == "\r\n" ) { $body = true; } } fclose($fp); } */ // Need to extract the non-https version since it will cause // certificate issue $avatarUrl = str_replace('https://', 'http://', $avatarUrl); CFactory::load('helpers', 'remote'); $source = CRemoteHelper::getContent($avatarUrl, true); list($headers, $source) = explode("\r\n\r\n", $source, 2); JFile::write($tmpPath, $source); // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JUtility::getHash($fbUser . time()); $hashFileName = JString::substr($fileName, 0, 24); $extension = JString::substr($avatarUrl, JString::strrpos($avatarUrl, '.')); $type = 'image/jpg'; if ($extension == '.png') { $type = 'image/png'; } if ($extension == '.gif') { $type = 'image/gif'; } //@todo: configurable path for avatar storage? $config = CFactory::getConfig(); $storage = JPATH_ROOT . DS . $config->getString('imagefolder') . DS . 'avatar'; $storageImage = $storage . DS . $hashFileName . $extension; $storageThumbnail = $storage . DS . 'thumb_' . $hashFileName . $extension; $image = $config->getString('imagefolder') . '/avatar/' . $hashFileName . $extension; $thumbnail = $config->getString('imagefolder') . '/avatar/' . 'thumb_' . $hashFileName . $extension; $userModel = CFactory::getModel('user'); // Only resize when the width exceeds the max. CImageHelper::resizeProportional($tmpPath, $storageImage, $type, $imageMaxWidth); CImageHelper::createThumb($tmpPath, $storageThumbnail, $type); if ($addWaterMark) { // Get the width and height so we can calculate where to place the watermark. list($watermarkWidth, $watermarkHeight) = getimagesize(FACEBOOK_FAVICON); list($imageWidth, $imageHeight) = getimagesize($storageImage); list($thumbWidth, $thumbHeight) = getimagesize($storageThumbnail); CImageHelper::addWatermark($storageImage, $storageImage, $type, FACEBOOK_FAVICON, $imageWidth - $watermarkWidth, $imageHeight - $watermarkHeight); CImageHelper::addWatermark($storageThumbnail, $storageThumbnail, $type, FACEBOOK_FAVICON, $thumbWidth - $watermarkWidth, $thumbHeight - $watermarkHeight); } // Update the CUser object with the correct avatar. $user->set('_thumb', $thumbnail); $user->set('_avatar', $image); // @rule: once user changes their profile picture, storage method should always be file. $user->set('_storage', 'file'); $userModel->setImage($joomlaUserId, $image, 'avatar'); $userModel->setImage($joomlaUserId, $thumbnail, 'thumb'); $user->save(); } }
public static function fromContent($content) { $urls = self::fetchUrlsFromContent($content); /** * Crawle data * We only work with first url */ if (count($urls) > 0) { $url = array_shift($urls); $curl = new CCurl(); $header = $curl->getHeaderOnly($url); if (strpos($header['Content-Type'], ';') !== false) { $header = explode(';', $header['Content-Type']); $header = trim($header[0]); } else { $header = $header['Content-Type']; } switch ($header) { case 'text/html': /* now we do curl again to get body */ /** * @todo Somehow it's bug here that incorrect body content */ //$curl->setCurl(CURLOPT_HEADER); /* ya don't need header again */ $response = $curl->get($url); $body = $response->getBody(); /* get meta object */ $metasParser = new CParserMetas(); $metasParser->setContent($body); $graphObject = $metasParser->extract(); /* Do image fetch into local and resize */ $images = $graphObject->get('image'); /** * @todo allow config save dir */ if (is_array($images)) { $saveDir = JPATH_ROOT . '/images/community/activities'; /* Create save dir if not exists */ if (!JFolder::exists($saveDir)) { JFolder::create($saveDir); } /* Do copy into local */ $localImages = array(); foreach ($images as $image) { /* Hashing remote image url to use as fileName */ $localFileName = md5($image); /* Get file extension */ $locaFileExt = JFile::getExt($image); /* Generate local filename from hashed and extesion */ $localFile = $localFileName . '.' . $locaFileExt; /* Local thumbnail filename by adding _thumb */ $localThumbFile = $localFileName . '_thumb.' . $locaFileExt; /* Do save local */ copy($image, $saveDir . '/' . $localFile); /* Get image file informantion */ $info = getimagesize($saveDir . '/' . $localFile); /* Get image type than use it to createThumb */ $imgType = image_type_to_mime_type($info[2]); /* Do make thumb */ CImageHelper::createThumb($saveDir . '/' . $localFile, $saveDir . '/' . $localThumbFile, $imgType); $localImages[] = array('image' => $localFile, 'thumb' => $localThumbFile); } /* Save back */ $graphObject->set('localImages', $localImages); } return $graphObject; break; default: break; } } }
/** * Deprecated since 1.8 * Use CImageHelper::createThumb instead. */ function cImageCreateThumb($srcPath, $destPath, $destType, $destWidth = 64, $destHeight = 64) { return CImageHelper::createThumb($srcPath, $destPath, $destType, $destWidth, $destHeight); }
/** * Step 5 * Upload a new user avatar */ public function registerAvatar() { $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; jimport('joomla.filesystem.file'); jimport('joomla.utilities.utility'); $mySess = JFactory::getSession(); $user = $mySess->get('tmpUser', ''); /* Just for incase this's incomplete object */ if (!is_object($user) && gettype($user) == 'object') { $user = unserialize(serialize($user)); } if (empty($user)) { //throw error. JError::raiseError(500, JText::_('COM_COMMUNITY_REGISTRATION_MISSING_USER_OBJ')); return; } $view = $this->getView('register'); $profileType = JRequest::getInt('profileType', 0); // If uplaod is detected, we process the uploaded avatar if ($jinput->post->get('action', '')) { $my = CFactory::getUser($user->id); $fileFilter = new JInput($_FILES); $file = $fileFilter->get('Filedata', '', 'array'); if ($my->id == 0) { return $this->blockUnregister(); } if (!CImageHelper::isValidType($file['type'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); $url = $profileType !== 0 ? CRoute::_('index.php?option=com_community&view=register&task=registerAvatar&profileType=' . $profileType, false) : CRoute::_('index.php?option=com_community&view=register&task=registerAvatar', false); $mainframe->redirect($url); return; } if (!isset($file['tmp_name']) || empty($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_NO_POST_DATA'), 'error'); } else { $config = CFactory::getConfig(); $uploadLimit = (double) $config->get('maxuploadsize'); $uploadLimit = $uploadLimit * 1024 * 1024; 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=register&task=registerAvatar&profileType=' . $profileType, false)); } if (!CImageHelper::isValid($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED'), 'error'); } else { $config = CFactory::getConfig(); $useWatermark = $profileType != COMMUNITY_DEFAULT_PROFILE && $config->get('profile_multiprofile') ? true : false; // @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? $config = CFactory::getConfig(); $storage = JPATH_ROOT . '/' . $config->getString('imagefolder') . '/avatar'; $storageImage = $storage . '/' . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . '/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'); // 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'); } if ($useWatermark) { if (!JFolder::exists(JPATH_ROOT . '/images/watermarks/original')) { JFolder::create(JPATH_ROOT . '/images/watermarks/original'); } // @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 . '/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'])); $multiprofile = JTable::getInstance('MultiProfile', 'CTable'); $multiprofile->load($profileType); if ($multiprofile->watermark) { $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(); } } // Since this is a new registration, we definitely do not want to remove the old image. $removeOldImage = false; $userModel->setImage($my->id, $image, 'avatar', $removeOldImage); $userModel->setImage($my->id, $thumbnail, 'thumb', $removeOldImage); // Update the user object so that the profile picture gets updated. $my->set('_avatar', $image); $my->set('_thumb', $thumbnail); } } } echo $view->get(__FUNCTION__); }
public function mapAvatar($avatarUrl = '', $joomlaUserId, $addWaterMark) { $image = ''; if (!empty($avatarUrl)) { // Make sure user is properly added into the database table first $user = CFactory::getUser($joomlaUserId); $fbUser = $this->getUser(); // Store image on a temporary folder. $tmpPath = JPATH_ROOT . '/images/originalphotos/facebook_connect_' . $fbUser; // Need to extract the non-https version since it will cause // certificate issue $avatarUrl = str_replace('https://', 'http://', $avatarUrl); $source = CRemoteHelper::getContent($avatarUrl, true); list($headers, $source) = explode("\r\n\r\n", $source, 2); JFile::write($tmpPath, $source); // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JApplication::getHash($fbUser . time()); $hashFileName = JString::substr($fileName, 0, 24); $uri_parts = explode('?', $avatarUrl, 2); $extension = JString::substr($uri_parts[0], JString::strrpos($uri_parts[0], '.')); $type = 'image/jpg'; if ($extension == '.png') { $type = 'image/png'; } if ($extension == '.gif') { $type = 'image/gif'; } //@todo: configurable path for avatar storage? $config = CFactory::getConfig(); $storage = JPATH_ROOT . '/' . $config->getString('imagefolder') . '/avatar'; $storageImage = $storage . '/' . $hashFileName . $extension; $storageThumbnail = $storage . '/thumb_' . $hashFileName . $extension; $image = $config->getString('imagefolder') . '/avatar/' . $hashFileName . $extension; $thumbnail = $config->getString('imagefolder') . '/avatar/' . 'thumb_' . $hashFileName . $extension; $userModel = CFactory::getModel('user'); // Only resize when the width exceeds the max. CImageHelper::resizeProportional($tmpPath, $storageImage, $type, $imageMaxWidth); CImageHelper::createThumb($tmpPath, $storageThumbnail, $type); if ($addWaterMark) { // Get the width and height so we can calculate where to place the watermark. list($watermarkWidth, $watermarkHeight) = getimagesize(FACEBOOK_FAVICON); list($imageWidth, $imageHeight) = getimagesize($storageImage); list($thumbWidth, $thumbHeight) = getimagesize($storageThumbnail); CImageHelper::addWatermark($storageImage, $storageImage, $type, FACEBOOK_FAVICON, $imageWidth - $watermarkWidth, $imageHeight - $watermarkHeight); CImageHelper::addWatermark($storageThumbnail, $storageThumbnail, $type, FACEBOOK_FAVICON, $thumbWidth - $watermarkWidth, $thumbHeight - $watermarkHeight); } // Update the CUser object with the correct avatar. $user->set('_thumb', $thumbnail); $user->set('_avatar', $image); // @rule: once user changes their profile picture, storage method should always be file. $user->set('_storage', 'file'); $userModel->setImage($joomlaUserId, $image, 'avatar'); $userModel->setImage($joomlaUserId, $thumbnail, 'thumb'); $user->save(); } }
/** * 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 function uploadAvatar() { $mainframe =& JFactory::getApplication(); $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->getName()); $view =& $this->getView($viewName, '', $viewType); $eventid = JRequest::getInt('eventid', '0', 'REQUEST'); $model =& $this->getModel('events'); $event =& JTable::getInstance('Event', 'CTable'); $event->load($eventid); CFactory::load('helpers', 'event'); $handler = CEventHelper::getHandler($event); if (!$handler->manageable()) { echo JText::_('COM_COMMUNITY_ACCESS_FORBIDDEN'); return; } if (JRequest::getMethod() == 'POST') { JRequest::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'); $file = JRequest::getVar('filedata', '', 'FILES', '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::_('COM_COMMUNITY_VIDEOS_IMAGE_FILE_SIZE_EXCEEDED'), '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 { // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JUtility::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); // @todo: configurable path for avatar storage? $storage = JPATH_ROOT . DS . $config->getString('imagefolder') . DS . 'avatar' . DS . 'events'; $storageImage = $storage . DS . $hashFileName . CImageHelper::getExtension($file['type']); $image = $config->getString('imagefolder') . '/avatar/events/' . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . DS . '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)); } // Update the event with the new image $event->setImage($image, 'avatar'); $event->setImage($thumbnail, 'thumb'); CFactory::load('helpers', 'event'); $handler = CEventHelper::getHandler($event); if ($handler->isPublic()) { $actor = $my->id; $target = 0; $content = '<img class="event-thumb" src="' . rtrim(JURI::root(), '/') . '/' . $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)); CFactory::load('libraries', 'activities'); CActivityStream::add($act, $params->toString()); } //add user points CFactory::load('libraries', 'userpoints'); CUserPoints::assignPoint('event.avatar.upload'); //$this->cacheClean( array(COMMUNITY_CACHE_TAG_EVENTS, COMMUNITY_CACHE_TAG_FRONTPAGE,COMMUNITY_CACHE_TAG_ACTIVITIES) ); $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__); }
/** * Upload a new user avatar */ public function registerAvatar() { $mainframe =& JFactory::getApplication(); jimport('joomla.filesystem.file'); jimport('joomla.utilities.utility'); $mySess =& JFactory::getSession(); $user = $mySess->get('tmpUser', ''); if (empty($user)) { //throw error. JError::raiseError(500, JText::_('CC REGISTRATION MISSING USER OBJ')); return; } //CFactory::setActiveProfile($user->id); $view =& $this->getView('register'); CFactory::load('helpers', 'image'); $profileType = JRequest::getInt('profileType', 0); // If uplaod is detected, we process the uploaded avatar if (JRequest::getVar('action', '', 'POST')) { // Load avatar library CFactory::load('libraries', 'avatar'); $my = CFactory::getUser($user->id); $file = JRequest::getVar('Filedata', '', 'FILES', 'array'); if ($my->id == 0) { return $this->blockUnregister(); } if (!isset($file['tmp_name']) || empty($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('CC NO POST DATA'), 'error'); } else { if (!CImageHelper::isValid($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('CC IMAGE FILE NOT SUPPORTED'), 'error'); } else { $config = CFactory::getConfig(); $useWatermark = $profileType != COMMUNITY_DEFAULT_PROFILE && $config->get('profile_multiprofile') ? true : false; // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JUtility::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); //@todo: configurable path for avatar storage? $config = CFactory::getConfig(); $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'); // Generate full image if (!CImageHelper::resizeProportional($file['tmp_name'], $storageImage, $file['type'], $imageMaxWidth)) { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE', $storageImage), 'error'); } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE', $storageThumbnail), 'error'); } 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'])); $multiprofile =& JTable::getInstance('MultiProfile', 'CTable'); $multiprofile->load($profileType); $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(); } // Since this is a new registration, we definitely do not want to remove the old image. $removeOldImage = false; $userModel->setImage($my->id, $image, 'avatar', $removeOldImage); $userModel->setImage($my->id, $thumbnail, 'thumb', $removeOldImage); // Update the user object so that the profile picture gets updated. $my->set('_avatar', $image); $my->set('_thumb', $thumbnail); } } //redirect to successful page $mainframe->redirect(CRoute::_('index.php?option=com_community&view=register&task=registerSucess&profileType=' . $profileType, false)); } echo $view->get(__FUNCTION__); }
/** * Upload a new user avatar */ public function uploadAvatar() { CFactory::setActiveProfile(); jimport('joomla.filesystem.file'); jimport('joomla.utilities.utility'); $view =& $this->getView('profile'); CFactory::load('helpers', 'image'); $my = CFactory::getUser(); if ($my->id == 0) { return $this->blockUnregister(); } // If uplaod is detected, we process the uploaded avatar if (JRequest::getVar('action', '', 'POST')) { $mainframe =& JFactory::getApplication(); $file = JRequest::getVar('Filedata', '', 'FILES', 'array'); $userid = $my->id; if (JRequest::getVar('userid', '', 'POST') != '') { $userid = JRequest::getInt('userid', '', 'POST'); $url = CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid); } if (!isset($file['tmp_name']) || empty($file['tmp_name'])) { $mainframe->enqueueMessage(JText::_('CC 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::_('CC IMAGE FILE SIZE EXCEEDED'), '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::_('CC 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::_('CC IMAGE FILE NOT SUPPORTED'), 'error'); if (isset($url)) { $mainframe->redirect($url); } } 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'); if (isset($url)) { $mainframe->redirect($url); } } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE', $storageThumbnail), 'error'); if (isset($url)) { $mainframe->redirect($url); } } 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'); if (isset($url)) { $mainframe->redirect($url); } //add user points CFactory::load('libraries', 'userpoints'); CFactory::load('libraries', 'activities'); $act = new stdClass(); $act->cmd = 'profile.avatar.upload'; $act->actor = $userid; $act->target = 0; $act->title = JText::_('CC ACTIVITIES NEW AVATAR'); $act->content = ''; $act->app = 'profile'; $act->cid = 0; // Add activity logging CFactory::load('libraries', 'activities'); CActivityStream::add($act); CUserPoints::assignPoint('profile.avatar.upload'); } } } echo $view->get(__FUNCTION__); }
public function saveAvatarFromURL($url) { $tmpPath = JPATH_ROOT . DS . 'images'; $my = CFactory::getUser(); // Need to extract the non-https version since it will cause // certificate issue $avatarUrl = str_replace('https://', 'http://', $url); CFactory::load('helpers', 'remote'); $source = CRemoteHelper::getContent($url, true); JFile::write($tmpPath, $source); // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JUtility::getHash($my->getDisplayName() . time()); $hashFileName = JString::substr($fileName, 0, 24); $extension = JString::substr($url, JString::strrpos($url, '.')); $type = 'image/jpg'; if ($extension == '.png') { $type = 'image/png'; } if ($extension == '.gif') { $type = 'image/gif'; } //@todo: configurable path for avatar storage? $config = CFactory::getConfig(); $storage = JPATH_ROOT . DS . $config->getString('imagefolder') . DS . 'avatar'; $storageImage = $storage . DS . $hashFileName . $extension; $storageThumbnail = $storage . DS . 'thumb_' . $hashFileName . $extension; $image = $config->getString('imagefolder') . '/avatar/' . $hashFileName . $extension; $thumbnail = $config->getString('imagefolder') . '/avatar/' . 'thumb_' . $hashFileName . $extension; $userModel = CFactory::getModel('user'); // Only resize when the width exceeds the max. CImageHelper::resizeProportional($tmpPath, $storageImage, $type, $imageMaxWidth); CImageHelper::createThumb($tmpPath, $storageThumbnail, $type); $removeOldImage = false; $userModel->setImage($my->id, $image, 'avatar', $removeOldImage); $userModel->setImage($my->id, $thumbnail, 'thumb', $removeOldImage); // Update the user object so that the profile picture gets updated. $my->set('_avatar', $image); $my->set('_thumb', $thumbnail); return true; }
public function changeAvatar() { $objResponse = new JAXResponse(); $type = JRequest::getVar('type'); $id = JRequest::getVar('id'); $filter = JFilterInput::getInstance(); $type = $filter->clean($type, 'string'); $id = $filter->clean($id, 'integer'); $cTable =& JTable::getInstance(ucfirst($type), 'CTable'); $cTable->load($id); $my = CFactory::getUser(); $config = CFactory::getConfig(); CFactory::load('helpers', 'image'); $file = JRequest::getVar('filedata', '', 'FILES', 'array'); //check if file is allwoed if (!CImageHelper::isValidType($file['type'])) { $this->_showUploadError(true, JText::_('COM_COMMUNITY_IMAGE_FILE_NOT_SUPPORTED')); return; } //check upload file size $uploadlimit = (double) $config->get('maxuploadsize'); $uploadlimit = $uploadlimit * 1024 * 1024; if (filesize($file['tmp_name']) > $uploadlimit && $uploadlimit != 0) { $this->_showUploadError(true, JText::_('COM_COMMUNITY_VIDEOS_IMAGE_FILE_SIZE_EXCEEDED')); return; } //start image processing $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JUtility::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); $avatarFolder = $type != 'profile' && $type != '' ? $type . DS : ''; //avatar store path $storage = JPATH_ROOT . DS . $config->getString('imagefolder') . DS . 'avatar' . DS . $avatarFolder; $storageImage = $storage . DS . $hashFileName . CImageHelper::getExtension($file['type']); $image = $config->getString('imagefolder') . '/avatar/' . $avatarFolder . $hashFileName . CImageHelper::getExtension($file['type']); //avatar thumbnail path $storageThumbnail = $storage . DS . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); $thumbnail = $config->getString('imagefolder') . '/avatar/' . $avatarFolder . 'thumb_' . $hashFileName . CImageHelper::getExtension($file['type']); // Generate full image if (!CImageHelper::resizeProportional($file['tmp_name'], $storageImage, $file['type'], $imageMaxWidth)) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage)); return; } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $this->_showUploadError(true, JText::sprintf('COM_COMMUNITY_ERROR_MOVING_UPLOADED_FILE', $storageImage)); return; } $cTable->setImage($image, 'avatar'); $cTable->setImage($thumbnail, 'thumb'); $this->_showUploadError(false, $cTable->getAvatar(), CUrlHelper::avatarURI($thumbnail, 'user_thumb.png')); }
public function uploadAvatar() { $mainframe =& JFactory::getApplication(); $document =& JFactory::getDocument(); $viewType = $document->getType(); $viewName = JRequest::getCmd('view', $this->getName()); $view =& $this->getView($viewName, '', $viewType); $my =& JFactory::getUser(); $config = CFactory::getConfig(); $groupid = JRequest::getVar('groupid', '', 'REQUEST'); $data = new stdClass(); $data->id = $groupid; $groupsModel =& $this->getModel('groups'); $group =& JTable::getInstance('Group', 'CTable'); $group->load($groupid); if ($my->id == 0) { return $this->blockUnregister(); } if (!$group->isAdmin($my->id) && !COwnerHelper::isCommunityAdmin()) { echo $view->noAccess(); return; } if (JRequest::getMethod() == 'POST') { CFactory::load('helpers', 'image'); $file = JRequest::getVar('filedata', '', 'FILES', 'array'); if (!CImageHelper::isValidType($file['type'])) { $mainframe->enqueueMessage(JText::_('CC 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::_('CC 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::_('CC IMAGE FILE SIZE EXCEEDED'), '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::_('CC IMAGE FILE NOT SUPPORTED'), 'error'); } else { // @todo: configurable width? $imageMaxWidth = 160; // Get a hash for the file name. $fileName = JUtility::getHash($file['tmp_name'] . time()); $hashFileName = JString::substr($fileName, 0, 24); // @todo: configurable path for avatar storage? $storage = JPATH_ROOT . DS . $config->getString('imagefolder') . DS . 'avatar' . DS . 'groups'; $storageImage = $storage . DS . $hashFileName . CImageHelper::getExtension($file['type']); $storageThumbnail = $storage . DS . '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('CC ERROR MOVING UPLOADED FILE', $storageImage), 'error'); } // Generate thumbnail if (!CImageHelper::createThumb($file['tmp_name'], $storageThumbnail, $file['type'])) { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE', $storageThumbnail), 'error'); } // 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('CC ACTIVITIES NEW GROUP AVATAR', '{group_url}', $group->name); $act->content = '<img src="' . rtrim(JURI::root(), '/') . '/' . $thumbnail . '" style="border: 1px solid #eee;margin-right: 3px;" />'; $act->app = 'groups'; $act->cid = $group->id; $params = new JParameter(''); $params->set('group_url', 'index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id); CFactory::load('libraries', 'activities'); 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::_('CC GROUP AVATAR UPLOADED')); exit; } } } } echo $view->get(__FUNCTION__, $data); }
static function save_avatar_jomsocial($userid, $pic_url) { $pic = JoomdleHelperContent::get_file($pic_url); if (!$pic) { return; } require_once JPATH_ROOT . '/' . 'components' . '/' . 'com_community' . '/' . 'libraries' . '/' . 'core.php'; CFactory::load('helpers', 'image'); $config = CFactory::getConfig(); $imageMaxWidth = 160; $comp_params = JComponentHelper::getParams('com_joomdle'); $moodle_version = $comp_params->get('moodle_version'); if ($moodle_version == 19) { $extension = '.jpg'; // Moodle stores JPG always in 1.9 $type = 'image/jpeg'; } else { $extension = '.png'; // Moodle stores PNG always in 2.0 $type = 'image/png'; } $jconfig = JFactory::getConfig(); $tmp_file = $jconfig->get('tmp_path') . '/' . 'tmp_pic' . time(); file_put_contents($tmp_file, $pic); // Get a hash for the file name. $fileName = JApplication::getHash($pic_url . time()); $hashFileName = JString::substr($fileName, 0, 24); $storage = JPATH_ROOT . '/' . $config->getString('imagefolder') . '/' . 'avatar'; $storageImage = $storage . '/' . $hashFileName . $extension; $storageThumbnail = $storage . '/' . 'thumb_' . $hashFileName . $extension; $image = $config->getString('imagefolder') . '/avatar/' . $hashFileName . $extension; $thumbnail = $config->getString('imagefolder') . '/avatar/' . 'thumb_' . $hashFileName . $extension; $userModel = CFactory::getModel('user'); // Only resize when the width exceeds the max. list($currentWidth, $currentHeight) = getimagesize($tmp_file); if ($currentWidth < $imageMaxWidth) { $imageMaxWidth = $currentWidth; } CImageHelper::resizeProportional($tmp_file, $storageImage, $type, $imageMaxWidth); /* if( !CImageHelper::resizeProportional( $tmp_file , $storageImage , $type , $imageMaxWidth ) ) //Moodle always stores png in 2.0? XXX { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE' , $storageImage), 'error'); if(isset($url)){ $mainframe->redirect($url); } } */ // Generate thumbnail // if(!CImageHelper::createThumb( $tmp_file , $storageThumbnail , 'image/png' )) //Moodle always stores png CImageHelper::createThumb($tmp_file, $storageThumbnail, $type); /* if(!CImageHelper::createThumb( $tmp_file , $storageThumbnail , $type )) //Moodle always stores png { $mainframe->enqueueMessage(JText::sprintf('CC ERROR MOVING UPLOADED FILE' , $storageThumbnail), 'error'); if(isset($url)){ $mainframe->redirect($url); } } */ $userModel->setImage($userid, $image, 'avatar'); $userModel->setImage($userid, $thumbnail, 'thumb'); }
/** * Generate photo thumbnail */ public function generateThumbnail($srcPath, $destPath, $destType) { $aspect = CPhotos::getPhotoAspectRatio($srcPath); list($currentWidth, $currentHeight) = getimagesize($srcPath); $origWidth = $currentWidth; $origHeight = $currentHeight; $destWidth = COMMUNITY_PHOTO_THUMBNAIL_SIZE; $destHeight = COMMUNITY_PHOTO_THUMBNAIL_SIZE; $sourceX = 0; $sourceY = 0; switch ($aspect) { /* case CPhotos::ASPECT_PORTRAIT: $currentHeight = $currentWidth / CPhotos::ASPECT_PORTRAIT_RATIO; $sourceY = intval( ( $origHeight - $currentHeight ) / 2 ); $sourceX = 0; $destHeight = 84; break; case CPhotos::ASPECT_LANDSCAPE: $currentWidth = $currentHeight * CPhotos::ASPECT_LANDSCAPE_RATIO; $sourceX = intval( ( $origWidth - $currentWidth ) / 2 ); $sourceY = 0; $destWidth = 84; break; */ default: } //CImageHelper::resize( $srcPath , $destPath , $destType , $destWidth , $destHeight , $sourceX , $sourceY , $currentWidth , $currentHeight); CImageHelper::createThumb($srcPath, $destPath, $destType, $destWidth, $destHeight); }
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); }