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; }
/** * 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; }
/** * 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); }
/** * Загружаем картинку */ 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); }
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; }
/** * 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; }
/** * @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); }
/** * Удаляет фото пользователя * * @param ModuleUser_EntityUser $oUser */ public function DeletePhoto($oUser) { E::ModuleImg()->Delete(E::ModuleUploader()->Url2Dir($oUser->getProfilePhoto())); }
/** * 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); }
/** * Возвращает 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; }
/** * Удаляет аватар блога с сервера * * @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()); } }
/** * Возвращает 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; }
/** * Возвращает дефолтный аватар пользователя * * @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); }
/** * Возвращает ссылку фото определенного размера * * @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; }
/** * 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(); } } }
/** * Удаляет фото пользователя * * @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; }
/** * Загрузка изображения * */ 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')); } }
/** * Удалить изображение * * @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')); }
/** * 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; }