Esempio n. 1
0
 public function get($sProp)
 {
     if (substr($sProp, -7) == '.driver') {
         $sDriver = E::ModuleImg()->GetDriver();
         if (!class_exists('\\PHPixie\\Image\\' . $sDriver, false)) {
             F::IncludeLib('PHPixie/Image/' . $sDriver . '.php');
         }
         return $sDriver;
     }
     return null;
 }
 /**
  * @return bool|ModuleImg_EntityImage|null
  */
 protected function _getImageObject()
 {
     if ($this->isImage()) {
         $oImg = $this->getProp('__image');
         if ($oImg === null) {
             if (!($sFile = $this->GetFile()) || !($oImg = E::ModuleImg()->Read($sFile))) {
                 $oImg = false;
             }
         }
         return $oImg;
     }
     return null;
 }
Esempio n. 3
0
 /**
  * Makes image with new size
  */
 public function EventUploads()
 {
     // Раз оказались здесь, то нет соответствующего изображения. Пробуем его создать
     $sUrl = F::File_RootUrl() . '/' . $this->sCurrentEvent . '/' . implode('/', $this->GetParams());
     $sFile = F::File_Url2Dir($sUrl);
     $sNewFile = E::ModuleImg()->Duplicate($sFile);
     if (!$sNewFile) {
         if (preg_match('/\\-(\\d+)x(\\d+)\\.[a-z]{3}$/i', $sFile, $aMatches)) {
             $nSize = $aMatches[1];
         } else {
             $nSize = 0;
         }
         if (strpos(basename($sFile), 'avatar_blog') === 0) {
             // Запрашивается аватар блога
             $sNewFile = E::ModuleImg()->AutoresizeSkinImage($sFile, 'avatar_blog', $nSize ? $nSize : self::BLOG_AVATAR_SIZE);
         } elseif (strpos(basename($sFile), 'avatar') === 0) {
             // Запрашивается аватар
             $sNewFile = E::ModuleImg()->AutoresizeSkinImage($sFile, 'avatar', $nSize ? $nSize : self::USER_AVATAR_SIZE);
         } elseif (strpos(basename($sFile), 'user_photo') === 0) {
             // Запрашивается фото
             $sNewFile = E::ModuleImg()->AutoresizeSkinImage($sFile, 'user_photo', $nSize ? $nSize : self::USER_PHOTO_SIZE);
         }
     }
     // Если файл успешно создан, то выводим его
     if ($sNewFile) {
         if (headers_sent($sFile, $nLine)) {
             R::Location($sUrl . '?rnd=' . uniqid());
         } else {
             header_remove();
             E::ModuleImg()->RenderFile($sNewFile);
             exit;
         }
     }
     F::HttpHeader('404 Not Found');
     exit;
 }
Esempio n. 4
0
 /**
  * Returns URL for default photo of current skin
  *
  * @param int|string $xSize
  *
  * @return string
  */
 public function GetDefaultPhotoUrl($xSize = null)
 {
     $sPath = E::ModuleUploader()->GetUserAvatarDir(0) . 'user_photo_' . Config::Get('view.skin', Config::LEVEL_CUSTOM) . '_' . ($this->getProfileSex() == 'woman' ? 'female' : 'male') . '.png';
     if ($xSize) {
         if (strpos($xSize, 'x') !== false) {
             list($nW, $nH) = array_map('intval', explode('x', $xSize));
         } else {
             $nW = $nH = intval($xSize);
         }
         $sPath .= '-' . $nW . 'x' . $nH . '.' . pathinfo($sPath, PATHINFO_EXTENSION);
     } else {
         $nW = $nH = self::DEFAULT_PHOTO_SIZE;
     }
     if (Config::Get('module.image.autoresize') && !F::File_Exists($sPath)) {
         E::ModuleImg()->AutoresizeSkinImage($sPath, 'user_photo', max($nH, $nW));
     }
     return E::ModuleUploader()->Dir2Url($sPath);
 }
Esempio n. 5
0
 /**
  * Загружаем картинку
  */
 public function EventMultiUpload()
 {
     // Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json', FALSE);
     E::ModuleSecurity()->ValidateSendForm();
     // Проверяем, загружен ли файл
     if (!($aUploadedFile = $this->GetUploadedFile('uploader-upload-image'))) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('error_upload_image'), E::ModuleLang()->Get('error'));
         return false;
     }
     $sTarget = F::GetRequest('target', FALSE);
     $sTargetId = F::GetRequest('target_id', FALSE);
     $oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTarget, $sTargetId);
     $bTmp = F::GetRequest('tmp', FALSE);
     $bTmp = $bTmp == 'true' ? true : false;
     // Проверяем, целевой объект и права на его редактирование
     if (!$oTarget) {
         // Здесь два варианта, либо редактировать нельзя, либо можно, но топика еще нет
         if ($oTarget === TRUE) {
             // Будем делать временную картинку
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
             return false;
         }
     }
     // Ошибок пока нет
     $sError = '';
     // Сделаем временный файд
     $sTmpFile = E::ModuleUploader()->UploadLocal($aUploadedFile);
     // Вызовем хук перед началом загрузки картинки
     E::ModuleHook()->Run('uploader_upload_before', array('oTarget' => $oTarget, 'sTmpFile' => $sTmpFile, 'sTarget' => $sTarget));
     // Если все ок, и по миме проходит, то
     if ($sTmpFile && E::ModuleImg()->MimeType($sTmpFile)) {
         // Проверим, проходит ли по количеству
         if (!E::ModuleUploader()->GetAllowedCount($sTarget = F::GetRequest('target', FALSE), $sTargetId = F::GetRequest('target_id', FALSE))) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('uploader_photoset_error_count_photos', array('MAX' => Config::Get('module.topic.photoset.count_photos_max'))), E::ModuleLang()->Get('error'));
             return FALSE;
         }
         // Определим, существует ли объект или он будет создан позже
         if (!($sTmpKey = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) && $sTargetId == '0' && $bTmp) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('error_upload_image'), E::ModuleLang()->Get('error'));
             return FALSE;
         }
         // Пересохраним файл из кэша
         // Сохраняем фото во временный файл
         $oImg = E::ModuleImg()->Read($sTmpFile);
         $sExtension = strtolower(pathinfo($sTmpFile, PATHINFO_EXTENSION));
         if (!($sTmpFile = $oImg->Save(F::File_UploadUniqname($sExtension)))) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('error_upload_image'), E::ModuleLang()->Get('error'));
             return FALSE;
         }
         // Окончательная запись файла только через модуль Uploader
         if ($oStoredFile = E::ModuleUploader()->StoreImage($sTmpFile, $sTarget, $sTargetId, null, true)) {
             /** @var ModuleMresource_EntityMresource $oResource */
             //$oResource = $this->AddUploadedFileRelationInfo($oStoredFile, $sTarget, $sTargetId, TRUE);
             $oResource = E::ModuleMresource()->GetMresourcesByUuid($oStoredFile->getUuid());
             $sFile = $oStoredFile->GetUrl();
             if ($oResource) {
                 $oResource->setType(ModuleMresource::TYPE_PHOTO);
                 E::ModuleMresource()->UpdateType($oResource);
             }
             $sFilePreview = $sFile;
             if ($sSize = F::GetRequest('crop_size', FALSE)) {
                 $sFilePreview = E::ModuleUploader()->ResizeTargetImage($sFile, $sSize);
             }
             // Запускаем хук на действия после загрузки картинки
             E::ModuleHook()->Run('uploader_upload_image_after', array('sFile' => $sFile, 'sFilePreview' => $sFilePreview, 'sTargetId' => $sTargetId, 'sTarget' => $sTarget, 'oTarget' => $oTarget));
             E::ModuleViewer()->AssignAjax('file', $sFilePreview);
             E::ModuleViewer()->AssignAjax('id', $oResource->getMresourceId());
             // Чистим
             E::ModuleImg()->Delete($sTmpFile);
             return TRUE;
         }
     } else {
         // Ошибки загрузки картинки
         $sError = E::ModuleUploader()->GetErrorMsg();
         if (!$sError) {
             $sError = E::ModuleLang()->Get('error_upload_image');
         }
     }
     // Выведем ошибки пользователю
     E::ModuleMessage()->AddError($sError, E::ModuleLang()->Get('error'));
     // Удалим ранее загруженый файл
     F::File_Delete($sTmpFile);
 }
Esempio n. 6
0
 protected function _getInfoData()
 {
     $aPlugins = E::ModulePlugin()->GetList(null, false);
     $aActivePlugins = E::ModulePlugin()->GetActivePlugins();
     $aPluginList = array();
     foreach ($aActivePlugins as $aPlugin) {
         if (is_array($aPlugin)) {
             $sPlugin = $aPlugin['id'];
         } else {
             $sPlugin = (string) $aPlugin;
         }
         if (isset($aPlugins[$sPlugin])) {
             $oPluginEntity = $aPlugins[$sPlugin];
             $sPluginName = $oPluginEntity->GetName();
             $aPluginInfo = array('item' => $sPlugin, 'label' => $sPluginName);
             if ($sVersion = $oPluginEntity->GetVersion()) {
                 $aPluginInfo['value'] = 'v.' . $sVersion;
             }
             $sPluginClass = 'Plugin' . ucfirst($sPlugin);
             if (class_exists($sPluginClass) && method_exists($sPluginClass, 'GetUpdateInfo')) {
                 $oPlugin = new $sPluginClass();
                 $aPluginInfo['.html'] = ' - ' . $oPlugin->GetUpdateInfo();
             }
             $aPluginList[$sPlugin] = $aPluginInfo;
         }
     }
     $aSiteStat = E::ModuleAdmin()->GetSiteStat();
     $sSmartyVersion = E::ModuleViewer()->GetSmartyVersion();
     $aImgSupport = E::ModuleImg()->GetDriversInfo();
     $sImgSupport = '';
     if ($aImgSupport) {
         foreach ($aImgSupport as $sDriver => $sVersion) {
             if ($sImgSupport) {
                 $sImgSupport .= '; ';
             }
             $sImgSupport .= $sDriver . ': ' . $sVersion;
         }
     } else {
         $sImgSupport = 'none';
     }
     $aInfo = array('versions' => array('label' => E::ModuleLang()->Get('action.admin.info_versions'), 'data' => array('php' => array('label' => E::ModuleLang()->Get('action.admin.info_version_php'), 'value' => PHP_VERSION), 'img' => array('label' => E::ModuleLang()->Get('action.admin.info_version_img'), 'value' => $sImgSupport), 'smarty' => array('label' => E::ModuleLang()->Get('action.admin.info_version_smarty'), 'value' => $sSmartyVersion ? $sSmartyVersion : 'n/a'), 'alto' => array('label' => E::ModuleLang()->Get('action.admin.info_version_alto'), 'value' => ALTO_VERSION))), 'site' => array('label' => E::ModuleLang()->Get('action.admin.site_info'), 'data' => array('url' => array('label' => E::ModuleLang()->Get('action.admin.info_site_url'), 'value' => Config::Get('path.root.url')), 'skin' => array('label' => E::ModuleLang()->Get('action.admin.info_site_skin'), 'value' => Config::Get('view.skin', Config::LEVEL_CUSTOM)), 'client' => array('label' => E::ModuleLang()->Get('action.admin.info_site_client'), 'value' => $_SERVER['HTTP_USER_AGENT']), 'empty' => array('label' => '', 'value' => ''))), 'plugins' => array('label' => E::ModuleLang()->Get('action.admin.active_plugins'), 'data' => $aPluginList), 'stats' => array('label' => E::ModuleLang()->Get('action.admin.site_statistics'), 'data' => array('users' => array('label' => E::ModuleLang()->Get('action.admin.site_stat_users'), 'value' => $aSiteStat['users']), 'blogs' => array('label' => E::ModuleLang()->Get('action.admin.site_stat_blogs'), 'value' => $aSiteStat['blogs']), 'topics' => array('label' => E::ModuleLang()->Get('action.admin.site_stat_topics'), 'value' => $aSiteStat['topics']), 'comments' => array('label' => E::ModuleLang()->Get('action.admin.site_stat_comments'), 'value' => $aSiteStat['comments']))));
     return $aInfo;
 }
Esempio n. 7
0
 /**
  * Deletes media resources by ID
  *
  * @param $aMresources
  * @param $bDeleteFiles
  * @param $bNoCheckTargets
  *
  * @return bool
  */
 public function DeleteMresources($aMresources, $bDeleteFiles = true, $bNoCheckTargets = false)
 {
     $aId = $this->_entitiesId($aMresources);
     $bResult = true;
     if ($aId) {
         if ($bDeleteFiles) {
             $aMresources = $this->oMapper->GetMresourcesById($aId);
             if (!$bNoCheckTargets && $aMresources) {
                 /** @var ModuleMresource_EntityMresource $oMresource */
                 foreach ($aMresources as $oMresource) {
                     // Если число ссылок > 0, то не удаляем
                     if ($oMresource->getTargetsCount() > 0) {
                         $iIdx = array_search($oMresource->getId(), $aId);
                         if ($iIdx !== false) {
                             unset($aId[$iIdx]);
                         }
                     }
                 }
             }
         }
         $bResult = $this->oMapper->DeleteMresources($aId);
         if ($bDeleteFiles) {
             if ($bResult && $aMresources && $aId) {
                 // Удаляем файлы
                 foreach ($aId as $nId) {
                     if (isset($aMresources[$nId]) && $aMresources[$nId]->IsFile() && $aMresources[$nId]->CanDelete()) {
                         if ($aMresources[$nId]->IsImage()) {
                             E::ModuleImg()->Delete($aMresources[$nId]->GetFile());
                         } else {
                             F::File_Delete($aMresources[$nId]->GetFile());
                         }
                     }
                 }
             }
         }
     }
     E::ModuleCache()->CleanByTags(array('mresource_update', 'mresource_rel_update'));
     return $bResult;
 }
Esempio n. 8
0
 /**
  * @param int|string $xSize
  * @param string     $sSex
  *
  * @return string
  */
 public function GetDefaultPhotoUrl($xSize, $sSex)
 {
     $sPath = E::ModuleUploader()->GetUserAvatarDir(0) . 'user_photo_' . Config::Get('view.skin', Config::LEVEL_CUSTOM) . '_' . $sSex . '.png';
     if (strpos($xSize, 'x') !== false) {
         list($nW, $nH) = array_map('intval', explode('x', $xSize));
     } else {
         $nW = $nH = (int) $xSize;
     }
     $sPath .= '-' . $nW . 'x' . $nH . '.' . pathinfo($sPath, PATHINFO_EXTENSION);
     if (Config::Get('module.image.autoresize') && !F::File_Exists($sPath)) {
         $sPath = E::ModuleImg()->AutoresizeSkinImage($sPath, 'user_photo', max($nH, $nW));
     }
     return E::ModuleUploader()->Dir2Url($sPath);
 }
Esempio n. 9
0
 /**
  * Удаляет фото пользователя
  *
  * @param ModuleUser_EntityUser $oUser
  */
 public function DeletePhoto($oUser)
 {
     E::ModuleImg()->Delete(E::ModuleUploader()->Url2Dir($oUser->getProfilePhoto()));
 }
Esempio n. 10
0
 /**
  * Returns default avatar of the blog
  *
  * @param int|string $xSize
  *
  * @return string
  */
 public function getDefaultAvatarUrl($xSize = null)
 {
     if (!$xSize) {
         if (Config::Get('module.user.profile_avatar_size')) {
             $xSize = Config::Get('module.user.profile_avatar_size');
         } else {
             $xSize = self::DEFAULT_AVATAR_SIZE;
         }
     }
     $sPath = E::ModuleUploader()->GetUserAvatarDir(0) . 'avatar_blog_' . Config::Get('view.skin', Config::LEVEL_CUSTOM) . '.png';
     $sResizePath = null;
     if ($xSize) {
         if ($sRealSize = C::Get('module.uploader.images.profile_avatar.size.' . $xSize)) {
             $xSize = $sRealSize;
         }
         if (is_string($xSize) && $xSize[0] == 'x') {
             $xSize = substr($xSize, 1);
         }
         if ($iSize = intval($xSize)) {
             $sResizePath = $sPath . '-' . $iSize . 'x' . $iSize . '.' . strtolower(pathinfo($sPath, PATHINFO_EXTENSION));
             if (Config::Get('module.image.autoresize') && !F::File_Exists($sResizePath)) {
                 $sResizePath = E::ModuleImg()->AutoresizeSkinImage($sResizePath, 'avatar_blog', $iSize ? $iSize : null);
             }
         }
     }
     if ($sResizePath) {
         $sPath = $sResizePath;
     } elseif (!F::File_Exists($sPath)) {
         $sPath = E::ModuleImg()->AutoresizeSkinImage($sPath, 'avatar_blog', null);
     }
     return E::ModuleUploader()->Dir2Url($sPath);
 }
Esempio n. 11
0
 /**
  * Возвращает URL изображения по новому размеру
  *
  * @param string $sOriginalPath
  * @param string $xSize
  *
  * @return string
  */
 public function ResizeTargetImage($sOriginalPath, $xSize)
 {
     $sModSuffix = F::File_ImgModSuffix($xSize, pathinfo($sOriginalPath, PATHINFO_EXTENSION));
     $sUrl = $sOriginalPath . $sModSuffix;
     if (Config::Get('module.image.autoresize')) {
         $sFile = $this->Url2Dir($sUrl);
         if (!F::File_Exists($sFile)) {
             E::ModuleImg()->Duplicate($sFile);
         }
     }
     if ($sUrl[0] == '@') {
         $sUrl = Config::Get('path.root.url') . substr($sUrl, 1);
     }
     return $sUrl;
 }
Esempio n. 12
0
 /**
  * Удаляет аватар блога с сервера
  *
  * @param ModuleBlog_EntityBlog $oBlog    Блог
  */
 public function DeleteAvatar($oBlog)
 {
     if ($oBlog) {
         // * Если аватар есть, удаляем его и его рейсайзы (старая схема)
         if ($sUrl = $oBlog->getAvatar()) {
             E::ModuleImg()->Delete(E::ModuleUploader()->Url2Dir($sUrl));
         }
         // Deletes blog avatar from media resources
         E::ModuleMresource()->DeleteMresourcesRelByTarget('blog_avatar', $oBlog->getid());
     }
 }
Esempio n. 13
0
 /**
  * Возвращает URL изображения по новому размеру
  *
  * @param string $sOriginalPath
  * @param string $xSize
  *
  * @return string
  */
 public function ResizeTargetImage($sOriginalPath, $xSize)
 {
     $sModSuffix = F::File_ImgModSuffix($xSize, pathinfo($sOriginalPath, PATHINFO_EXTENSION));
     $sUrl = $sOriginalPath . $sModSuffix;
     if (Config::Get('module.image.autoresize')) {
         $sFile = $this->Url2Dir($sUrl);
         if ($sFile && !F::File_Exists($sFile)) {
             E::ModuleImg()->Duplicate($sFile);
         }
     }
     $sUrl = $this->CompleteUrl($sUrl);
     return $sUrl;
 }
Esempio n. 14
0
 /**
  * Возвращает дефолтный аватар пользователя
  *
  * @param int|string $xSize
  * @param string     $sSex
  *
  * @return string
  */
 public function getDefaultAvatarUrl($xSize = null, $sSex = null)
 {
     if (!$sSex) {
         $sSex = $this->getProfileSex() === 'woman' ? 'female' : 'male';
     }
     if ($sSex !== 'female' && $sSex !== 'male') {
         $sSex = 'male';
     }
     $sPath = E::ModuleUploader()->GetUserAvatarDir(0) . 'avatar_' . Config::Get('view.skin', Config::LEVEL_CUSTOM) . '_' . $sSex . '.png';
     if (!$xSize) {
         if (Config::Get('module.user.profile_avatar_size')) {
             $xSize = Config::Get('module.user.profile_avatar_size');
         } else {
             $xSize = self::DEFAULT_AVATAR_SIZE;
         }
     }
     if ($sRealSize = C::Get('module.uploader.images.profile_avatar.size.' . $xSize)) {
         $xSize = $sRealSize;
     }
     if (is_string($xSize) && strpos($xSize, 'x')) {
         list($nW, $nH) = array_map('intval', explode('x', $xSize));
     } else {
         $nW = $nH = intval($xSize);
     }
     $sResizePath = $sPath . '-' . $nW . 'x' . $nH . '.' . pathinfo($sPath, PATHINFO_EXTENSION);
     if (Config::Get('module.image.autoresize') && !F::File_Exists($sResizePath)) {
         $sResizePath = E::ModuleImg()->AutoresizeSkinImage($sResizePath, 'avatar', max($nH, $nW));
     }
     if ($sResizePath) {
         $sPath = $sResizePath;
     } elseif (!F::File_Exists($sPath)) {
         $sPath = E::ModuleImg()->AutoresizeSkinImage($sPath, 'avatar', null);
     }
     return E::ModuleUploader()->Dir2Url($sPath);
 }
Esempio n. 15
0
 /**
  * Возвращает ссылку фото определенного размера
  *
  * @param string|null $xSize    Размер фото, например, '100' или '150crop' или '150x100' или 'x100'
  *
  * @return null|string
  */
 public function getLink($xSize = null)
 {
     if ($sUrl = $this->getPath()) {
         if ($xSize) {
             $sResizedUrl = $this->getProp('_size-' . $xSize . '-url');
             if ($sResizedUrl) {
                 return $sResizedUrl;
             }
             $aPathInfo = pathinfo($sUrl);
             if (E::ActivePlugin('ls')) {
                 // Включена совместимость с LS
                 $sResizedUrl = $aPathInfo['dirname'] . '/' . $aPathInfo['filename'] . '_' . $xSize . '.' . $aPathInfo['extension'];
                 if (F::File_LocalUrl($sResizedUrl) && !F::File_Exists(F::File_Url2Dir($sResizedUrl))) {
                     $sResizedUrl = '';
                 }
             }
             if (!$sResizedUrl) {
                 $sModSuffix = F::File_ImgModSuffix($xSize, $aPathInfo['extension']);
                 if ($sModSuffix) {
                     $sResizedUrl = $sUrl . $sModSuffix;
                     if (Config::Get('module.image.autoresize')) {
                         $sFile = E::ModuleUploader()->Url2Dir($sResizedUrl);
                         $this->setProp('_size-' . $xSize . '-file', $sFile);
                         if (!F::File_Exists($sFile)) {
                             E::ModuleImg()->Duplicate($sFile);
                         }
                     }
                 }
             }
             if ($sResizedUrl) {
                 $sUrl = F::File_NormPath($sResizedUrl);
             }
             $this->setProp('_size-' . $xSize . '-url', $sUrl);
         }
     }
     return $sUrl;
 }
Esempio n. 16
0
 /**
  * Renders and ouputs the image
  *
  * @param string $sImageFormat - Image format (gif, png or jpeg)
  */
 public function Render($sImageFormat = null)
 {
     /** @var PHPixie\Image $oImage */
     if ($oImage = $this->GetImage()) {
         if ($sImageFormat) {
             $sImageFormat = E::ModuleImg()->GetFormat($sImageFormat);
             $oImage->render($sImageFormat);
         } else {
             $oImage->render();
         }
     }
 }
Esempio n. 17
0
 /**
  * Удаляет фото пользователя
  *
  * @param ModuleUser_EntityUser $oUser
  *
  * @return bool
  */
 public function DeletePhoto($oUser)
 {
     $bResult = true;
     if ($sPhoto = $oUser->getProfilePhoto()) {
         $sFile = E::ModuleUploader()->Url2Dir($sPhoto);
         $bResult = E::ModuleImg()->Delete($sFile);
         if ($bResult) {
             $oUser->setProfilePhoto(null);
             E::ModuleUser()->Update($oUser);
         }
     }
     return $bResult;
 }
Esempio n. 18
0
 /**
  * Загрузка изображения
  *
  */
 protected function EventUploadImage()
 {
     /*
      * Т.к. используется обработка отправки формы, то устанавливаем тип ответа 'jsonIframe'
      * (тот же JSON только обернутый в textarea)
      * Это позволяет избежать ошибок в некоторых браузерах, например, Opera
      */
     E::ModuleViewer()->SetResponseAjax(F::AjaxRequest(true) ? 'json' : 'jsonIframe', false);
     // * Пользователь авторизован?
     if (!$this->oUserCurrent) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     $sFile = null;
     // * Был выбран файл с компьютера и он успешно загрузился?
     if ($aUploadedFile = $this->GetUploadedFile('img_file')) {
         $aOptions = array();
         // Check options of uploaded image
         if ($nWidth = $this->GetPost('img_width')) {
             if ($this->GetPost('img_width_unit') == 'percent') {
                 // Max width according width of text area
                 if ($this->GetPost('img_width_ref') == 'text' && ($nWidthText = intval($this->GetPost('img_width_text')))) {
                     $nWidth = round($nWidthText * $nWidth / 100);
                     $aOptions['size']['width'] = $nWidth;
                 }
             }
         }
         $sFile = E::ModuleTopic()->UploadTopicImageFile($aUploadedFile, $this->oUserCurrent, $aOptions);
         if (!$sFile) {
             $sMessage = E::ModuleLang()->Get('uploadimg_file_error');
             if (E::ModuleUploader()->GetError()) {
                 $sMessage .= ' (' . E::ModuleUploader()->GetErrorMsg() . ')';
             }
             E::ModuleMessage()->AddErrorSingle($sMessage, E::ModuleLang()->Get('error'));
             return;
         }
     } elseif (($sUrl = $this->GetPost('img_url')) && $sUrl != 'http://') {
         // * Загрузка файла по URL
         if (preg_match('~(https?:\\/\\/)(\\w([\\w]+)?\\.[\\w\\.\\-\\/]+.*)$~i', $sUrl, $aM)) {
             // Иногда перед нормальным адресом встречается лишний 'http://' и прочий "мусор"
             $sUrl = $aM[1] . $aM[2];
             $sFile = E::ModuleTopic()->UploadTopicImageUrl($sUrl, $this->oUserCurrent);
         }
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('uploadimg_file_error'));
         return;
     }
     // * Если файл успешно загружен, формируем HTML вставки и возвращаем в ajax ответе
     if ($sFile) {
         $sText = E::ModuleImg()->BuildHTML($sFile, $_REQUEST);
         E::ModuleViewer()->AssignAjax('sText', $sText);
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleUploader()->GetErrorMsg(), E::ModuleLang()->Get('error'));
     }
 }
Esempio n. 19
0
 /**
  * Удалить изображение
  *
  * @param ModuleTopic_EntityTopicPhoto $oPhoto - Объект фото
  */
 public function DeleteTopicPhoto($oPhoto)
 {
     $this->oMapper->deleteTopicPhoto($oPhoto->getId());
     $sFile = E::ModuleUploader()->Url2Dir($oPhoto->getPath());
     E::ModuleImg()->Delete($sFile);
     E::ModuleCache()->CleanByTags(array('photoset_photo_update'));
 }
Esempio n. 20
0
 /**
  * Returns image URL with requested size
  *
  * @param string|int $xSize
  *
  * @return string
  */
 public function GetImgUrl($xSize = null)
 {
     $sUrl = $this->GetUrl();
     if (!$xSize) {
         return $sUrl;
     }
     $sModSuffix = F::File_ImgModSuffix($xSize, pathinfo($sUrl, PATHINFO_EXTENSION));
     $sPropKey = '_img-url-' . ($sModSuffix ? $sModSuffix : $xSize);
     $sResultUrl = $this->getProp($sPropKey);
     if ($sResultUrl) {
         return $sResultUrl;
     }
     if (!$this->IsLink() && $this->IsType(ModuleMresource::TYPE_IMAGE | ModuleMresource::TYPE_PHOTO)) {
         if (F::File_IsLocalUrl($sUrl) && $sModSuffix) {
             $sUrl = $sUrl . $sModSuffix;
             if (Config::Get('module.image.autoresize')) {
                 $sFile = E::ModuleUploader()->Url2Dir($sUrl);
                 if (!F::File_Exists($sFile)) {
                     E::ModuleImg()->Duplicate($sFile);
                 }
             }
         }
     }
     $this->setProp($sPropKey, $sUrl);
     return $sUrl;
 }