Esempio n. 1
0
 /**
  * Saves file in storage
  *
  * @param string $sFile
  * @param string $sDestination
  *
  * @return bool|ModuleUploader_EntityItem
  */
 public function Store($sFile, $sDestination = null)
 {
     if (!$sDestination) {
         $oUser = E::ModuleUser()->GetUserCurrent();
         if (!$oUser) {
             return false;
         }
         $sDestination = E::ModuleUploader()->GetUserFileDir($oUser->getId());
     }
     if ($sDestination) {
         $sMimeType = ModuleImg::MimeType($sFile);
         $bIsImage = strpos($sMimeType, 'image/') === 0;
         $iUserId = E::UserId();
         $sExtension = F::File_GetExtension($sFile, true);
         if (substr($sDestination, -1) == '/') {
             $sDestinationDir = $sDestination;
         } else {
             $sDestinationDir = dirname($sDestination) . '/';
         }
         $sUuid = ModuleMresource::CreateUuid('file', $sFile, md5_file($sFile), $iUserId);
         $sDestination = $sDestinationDir . $sUuid . '.' . $sExtension;
         if ($sStoredFile = E::ModuleUploader()->Move($sFile, $sDestination, true)) {
             $oStoredItem = E::GetEntity('Uploader_Item', array('storage' => 'file', 'uuid' => $sUuid, 'original_filename' => basename($sFile), 'url' => $this->Dir2Url($sStoredFile), 'file' => $sStoredFile, 'user_id' => $iUserId, 'mime_type' => $sMimeType, 'is_image' => $bIsImage));
             return $oStoredItem;
         }
     }
     return false;
 }
Esempio n. 2
0
 /**
  * @param int $iPageNum
  * @param int $iPageSize
  *
  * @return array
  */
 public function getList($iPageNum, $iPageSize)
 {
     $aFilter = array('user_id' => E::UserId());
     $aTalks = E::ModuleTalk()->GetTalksByFilter($aFilter, $iPageNum, $iPageSize);
     $aResult = array('total' => $aTalks['count'], 'list' => array());
     /** @var PluginAltoApi_ModuleApiTalks_EntityTalk $oTalk */
     foreach ($aTalks['collection'] as $oTalk) {
         $aResult['list'][] = $oTalk->getApiData();
     }
     return $aResult;
 }
Esempio n. 3
0
 /**
  * Компилирует тему
  *
  * @param array $aParams Передаваемые параметры
  * @return bool
  */
 public function CompileTheme($aParams, $bDownload = FALSE)
 {
     if (!E::User()) {
         return FALSE;
     }
     $sCompiledStyle = E::ModuleLess()->CompileFile(array(C::Get('path.skins.dir') . 'experience-simple/themes/custom/less/theme.less' => C::Get('path.root.web')), __DIR__ . '/../../../cache/', C::Get('path.skins.dir') . 'experience-simple/themes/custom/css/theme.custom.css.map', $aParams, $bDownload);
     if ($sCompiledStyle) {
         if (!$bDownload || E::IsAdmin()) {
             F::File_PutContents(C::Get('path.skins.dir') . 'experience-simple/themes/custom/css/theme.custom.css', $sCompiledStyle);
         } else {
             $sPath = C::Get('plugin.estheme.path_for_download') . E::UserId() . '/theme.custom.css';
             F::File_PutContents($sPath, $sCompiledStyle);
         }
     }
 }
Esempio n. 4
0
 public function EventEsTheme()
 {
     if (!E::User() || !C::Get('plugin.estheme.use_client')) {
         return R::Action('error');
     }
     $aProcessData = $this->PluginEstheme_Estheme_GetProcessData();
     if (getRequest('submit_estheme')) {
         $sCSSDownloadPath = F::File_Dir2Url(C::Get('plugin.estheme.path_for_download') . E::UserId() . '/theme.custom.css');
         $aCompiledData = $this->_processConfig($aProcessData, TRUE);
         $this->PluginEstheme_Estheme_CompileTheme($aCompiledData, TRUE);
     } else {
         $sCSSDownloadPath = FALSE;
         $this->_processConfig($aProcessData, FALSE);
     }
     E::ModuleViewer()->Assign('sCSSDownloadPath', $sCSSDownloadPath);
 }
 /**
  * Регистрируем хуки
  */
 public function RegisterHook()
 {
     if (F::AjaxRequest()) {
         return;
     }
     $xShowStats = Config::Get('general.show.stats');
     // if is null then show to admins only
     if (is_null($xShowStats) && E::IsAdmin() || $xShowStats === true || is_array($xShowStats) && in_array(E::UserId(), $xShowStats)) {
         $xShowStats = R::GetIsShowStats();
     } else {
         $xShowStats = false;
     }
     if ($xShowStats) {
         $this->AddHook('template_layout_body_end', 'Statistics', __CLASS__, -1000);
         // LS-compatibility
         $this->AddHook('template_body_end', 'Statistics', __CLASS__, -1000);
     }
 }
Esempio n. 6
0
 /**
  * Обработка отправленого админу запроса на вступление в блог
  *
  * @return string|null
  */
 protected function EventRequestBlog()
 {
     F::IncludeLib('XXTEA/encrypt.php');
     // * Получаем код подтверждения из ревеста и дешефруем его
     $sCode = xxtea_decrypt(base64_decode(rawurldecode(F::GetRequestStr('code'))), Config::Get('module.blog.encrypt'));
     if (!$sCode) {
         return $this->EventNotFound();
     }
     list($sBlogId, $sUserId) = explode('_', $sCode, 2);
     $sAction = $this->GetParam(0);
     // * Получаем текущего пользователя
     if (!E::ModuleUser()->IsAuthorization()) {
         return $this->EventNotFound();
     }
     $this->oUserCurrent = E::ModuleUser()->GetUserCurrent();
     // Получаем блог
     /** @var ModuleBlog_EntityBlog $oBlog */
     $oBlog = E::ModuleBlog()->GetBlogById($sBlogId);
     if (!$oBlog || !$oBlog->getBlogType() || !($oBlog->getBlogType()->IsPrivate() || $oBlog->getBlogType()->IsReadOnly())) {
         return $this->EventNotFound();
     }
     $this->oCurrentBlog = $oBlog;
     // Проверим, что текущий пользователь имеет право принимать решение
     if (!($oBlog->getUserIsAdministrator() || $oBlog->getUserIsModerator() || $oBlog->getOwnerId() == E::UserId())) {
         return $this->EventNotFound();
     }
     // Получим пользователя, который запрашивает приглашение
     if (!($oGuestUser = E::ModuleUser()->GetUserById($sUserId))) {
         return $this->EventNotFound();
     }
     // * Получаем связь "блог-пользователь" и проверяем, чтобы ее тип был REQUEST
     if (!($oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oGuestUser->getId()))) {
         return $this->EventNotFound();
     }
     // Пользователь уже принят в ряды
     if ($oBlogUser->getUserRole() >= ModuleBlog::BLOG_USER_ROLE_USER) {
         $sMessage = E::ModuleLang()->Get('blog_user_request_already_done');
         E::ModuleMessage()->AddError($sMessage, E::ModuleLang()->Get('error'), true);
         R::Location(R::GetPath('talk'));
         return;
     }
     // У пользователя непонятный флаг
     if ($oBlogUser->getUserRole() != ModuleBlog::BLOG_USER_ROLE_WISHES) {
         return $this->EventNotFound();
     }
     // * Обновляем роль пользователя до читателя
     $oBlogUser->setUserRole($sAction == 'accept' ? ModuleBlog::BLOG_USER_ROLE_USER : ModuleBlog::BLOG_USER_ROLE_NOTMEMBER);
     if (!E::ModuleBlog()->UpdateRelationBlogUser($oBlogUser)) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'), true);
         R::Location(R::GetPath('talk'));
         return;
     }
     if ($sAction == 'accept') {
         // * Увеличиваем число читателей блога
         $oBlog->setCountUser($oBlog->getCountUser() + 1);
         E::ModuleBlog()->UpdateBlog($oBlog);
         $sMessage = E::ModuleLang()->Get('blog_user_request_accept');
         // * Добавляем событие в ленту
         E::ModuleStream()->Write($oBlogUser->getUserId(), 'join_blog', $oBlog->getId());
     } else {
         $sMessage = E::ModuleLang()->Get('blog_user_request_no_accept');
     }
     E::ModuleMessage()->AddNotice($sMessage, E::ModuleLang()->Get('attention'), true);
     // * Перенаправляем на страницу личной почты
     R::Location(R::GetPath('talk'));
 }
Esempio n. 7
0
 /**
  * Returns IDs of similar topics by tags
  *
  * @param array $aTags
  * @param array $aExcludeTopics
  * @param null  $iLimit
  *
  * @return array
  */
 public function GetSimilarTopicsIdByTags($aTags, $aExcludeTopics = array(), $iLimit = null)
 {
     $iUserId = E::UserId();
     $aFilter = array('exclude_blogs' => E::ModuleBlog()->GetInaccessibleBlogsByUser(E::User()));
     if ($aExcludeTopics) {
         $aFilter['exclude_topics'] = is_array($aExcludeTopics) ? $aExcludeTopics : array(intval($aExcludeTopics));
     }
     if ($iLimit) {
         $aFilter['limit'] = $iLimit;
     }
     $sCacheKey = 'similar_topics_id_' . $iUserId . '_' . serialize($aFilter);
     if (false === ($aTopicsId = E::ModuleCache()->Get($sCacheKey))) {
         $aTopicsId = $this->oMapper->GetTopicsIdByTags($aTags, $aFilter);
         E::ModuleCache()->Set($aTopicsId, $sCacheKey, array('content_new', 'content_update', 'blog_new', 'blog_update'), 'P1D');
     }
     return $aTopicsId;
 }
Esempio n. 8
0
/**
 * Выводит изображение и прикрепляет его ко временному объекту
 *
 * @param $aParams
 * @param Smarty $oSmarty
 * @return string
 */
function smarty_function_img($aParams, &$oSmarty = NULL)
{
    // Пропущен тип объекта
    if (!isset($aParams['attr']['target-type'])) {
        trigger_error("img: missing 'target-type' parameter", E_USER_WARNING);
        return '';
    }
    // Пропущен идентификатор объекта
    if (!isset($aParams['attr']['target-id'])) {
        trigger_error("img: missing 'target-id' parameter", E_USER_WARNING);
        return '';
    }
    // Получим тип объекта
    $sTargetType = $aParams['attr']['target-type'];
    unset($aParams['attr']['target-type']);
    // Получим ид объекта
    $iTargetId = intval($aParams['attr']['target-id']);
    unset($aParams['attr']['target-id']);
    // Получим ид объекта
    $sCrop = isset($aParams['attr']['crop']) ? $aParams['attr']['crop'] : FALSE;
    unset($aParams['attr']['crop']);
    // Получим изображение по временному ключу, или создадим этот ключ
    if (($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) && E::IsUser()) {
        // Продлим куку
        E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, $sTargetTmp, 'P1D', FALSE);
        // Получим предыдущее изображение и если оно было, установим в качестве текущего
        // Получим и удалим все ресурсы
        $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
        if ($aMresourceRel) {
            /** @var ModuleMresource_EntityMresource $oResource */
            $oMresource = array_shift($aMresourceRel);
            if ($oMresource) {
                if ($sCrop) {
                    $aParams['attr']['src'] = E::ModuleUploader()->ResizeTargetImage($oMresource->GetUrl(), $sCrop);
                } else {
                    $aParams['attr']['src'] = $oMresource->GetUrl();
                }
                $oSmarty->assign("bImageIsTemporary", TRUE);
            }
        }
    } else {
        // Куки нет, это значит, что пользователь первый раз создает этот тип
        // и старой картинки просто нет
        if ($iTargetId == '0') {
            E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, F::RandomStr(), 'P1D', FALSE);
        } else {
            E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
            $sImage = E::ModuleUploader()->GetTargetImageUrl($sTargetType, $iTargetId, $sCrop);
            if ($sImage) {
                $aParams['attr']['src'] = $sImage;
                $oSmarty->assign("bImageIsTemporary", TRUE);
            }
        }
    }
    // Формируем строку атрибутов изображения
    $sAttr = '';
    if (isset($aParams['attr']) && is_array($aParams['attr'])) {
        foreach ($aParams['attr'] as $sAttrName => $sAttrValue) {
            $sAttr .= ' ' . $sAttrName . '="' . $sAttrValue . '"';
        }
    }
    // Сформируем тег изображения
    $sImageTag = '<img ' . $sAttr . '/>';
    return $sImageTag;
}
Esempio n. 9
0
 /**
  * Returns stats of user publications and favourites
  *
  * @param int|object $xUser
  *
  * @return int[]
  */
 public function GetUserProfileStats($xUser)
 {
     if (is_object($xUser)) {
         $iUserId = $xUser->getId();
     } else {
         $iUserId = intval($xUser);
     }
     $iCountTopicFavourite = E::ModuleTopic()->GetCountTopicsFavouriteByUserId($iUserId);
     $iCountCommentFavourite = E::ModuleComment()->GetCountCommentsFavouriteByUserId($iUserId);
     $iCountTopics = E::ModuleTopic()->GetCountTopicsPersonalByUser($iUserId, 1);
     $iCountComments = E::ModuleComment()->GetCountCommentsByUserId($iUserId, 'topic');
     $iCountWallRecords = E::ModuleWall()->GetCountWall(array('wall_user_id' => $iUserId, 'pid' => null));
     $iImageCount = E::ModuleMresource()->GetCountImagesByUserId($iUserId);
     $iCountUserNotes = $this->GetCountUserNotesByUserId($iUserId);
     $iCountUserFriends = $this->GetCountUsersFriend($iUserId);
     $aUserPublicationStats = array('favourite_topics' => $iCountTopicFavourite, 'favourite_comments' => $iCountCommentFavourite, 'count_topics' => $iCountTopics, 'count_comments' => $iCountComments, 'count_usernotes' => $iCountUserNotes, 'count_wallrecords' => $iCountWallRecords, 'count_images' => $iImageCount, 'count_friends' => $iCountUserFriends);
     $aUserPublicationStats['count_created'] = $aUserPublicationStats['count_topics'] + $aUserPublicationStats['count_comments'] + $aUserPublicationStats['count_images'];
     if ($iUserId == E::UserId()) {
         $aUserPublicationStats['count_created'] += $aUserPublicationStats['count_usernotes'];
     }
     $aUserPublicationStats['count_favourites'] = $aUserPublicationStats['favourite_topics'] + $aUserPublicationStats['favourite_comments'];
     return $aUserPublicationStats;
 }
Esempio n. 10
0
 /**
  * @param ModuleUser_EntityUser|int $xUser
  * @param array                     $aAdditionalOptions
  *
  * @return int
  */
 public function GetCountTopicsSandboxNewByUser($xUser, $aAdditionalOptions = array())
 {
     $iUserId = is_object($xUser) ? $xUser->getId() : intval($xUser);
     $sCacheKey = 'count_topics_sandbox_user_' . $iUserId . '_' . E::UserId();
     if (FALSE === ($iCount = E::ModuleCache()->GetTmp($sCacheKey))) {
         $aOptions = array('accessible' => true, 'sandbox' => true, 'user_id' => $iUserId);
         if ($aAdditionalOptions && is_array($aAdditionalOptions)) {
             $aOptions = array_merge($aOptions, $aAdditionalOptions);
         }
         $aFilter = $this->GetNamedFilter('new', $aOptions);
         $iCount = $this->GetCountTopicsByFilter($aFilter);
         E::ModuleCache()->SetTmp($iCount, $sCacheKey);
     }
     return $iCount;
 }
Esempio n. 11
0
 public function isVoteInfoShow()
 {
     $bResult = $this->getVote() || E::UserId() == $this->getUserId() || strtotime($this->getDateAdd()) < time() - Config::Get('acl.vote.topic.limit_time');
     return $bResult;
 }
Esempio n. 12
0
 /**
  * Загружаем картинку
  */
 public function EventUploadImage()
 {
     // Устанавливаем формат 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;
     }
     $sTarget = F::GetRequest('target', FALSE);
     $sTargetId = F::GetRequest('target_id', FALSE);
     // Проверяем, целевой объект и права на его редактирование
     if (!($oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTarget, $sTargetId))) {
         // Здесь два варианта, либо редактировать нельзя, либо можно, но топика еще нет
         if ($oTarget === TRUE) {
             // Будем делать временную картинку
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
             return;
         }
     }
     // Ошибок пока нет
     $sError = '';
     // Загружаем временный файл
     $sTmpFile = E::ModuleUploader()->UploadLocal($aUploadedFile, $sTarget);
     // Вызовем хук перед началом загрузки картинки
     E::ModuleHook()->Run('uploader_upload_before', array('oTarget' => $oTarget, 'sTmpFile' => $sTmpFile, 'sTarget' => $sTarget, 'sTargetId' => $sTargetId));
     // Если все ок, и по миме проходит, то
     if ($sTmpFile) {
         if (E::ModuleImg()->MimeType($sTmpFile)) {
             // Ресайзим и сохраняем уменьшенную копию
             // Храним две копии - мелкую для показа пользователю и крупную в качестве исходной для ресайза
             $sPreviewFile = E::ModuleUploader()->GetUserImageDir(E::UserId(), true, false) . '_preview.' . F::File_GetExtension($sTmpFile);
             if ($sPreviewFile = E::ModuleImg()->Copy($sTmpFile, $sPreviewFile, self::PREVIEW_RESIZE, self::PREVIEW_RESIZE)) {
                 // * Сохраняем в сессии временный файл с изображением
                 E::ModuleSession()->Set('sTarget', $sTarget);
                 E::ModuleSession()->Set('sTargetId', $sTargetId);
                 E::ModuleSession()->Set("sTmp-{$sTarget}-{$sTargetId}", $sTmpFile);
                 E::ModuleSession()->Set("sPreview-{$sTarget}-{$sTargetId}", $sPreviewFile);
                 E::ModuleViewer()->AssignAjax('sPreview', E::ModuleUploader()->Dir2Url($sPreviewFile));
                 if (getRequest('direct', FALSE)) {
                     $this->EventDirectImage();
                 }
                 return;
             }
         } else {
             $sError = E::ModuleLang()->Get('error_upload_wrong_image_type');
         }
         // If anything wrong then deletes temp file
         F::File_Delete($sTmpFile);
     } 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. 13
0
 /**
  * Обработка завершения работу экшена
  */
 public function EventShutdown()
 {
     if (!E::User()) {
         return;
     }
     $iCountTalkFavourite = E::ModuleTalk()->GetCountTalksFavouriteByUserId($this->oUserCurrent->getId());
     E::ModuleViewer()->Assign('iCountTalkFavourite', $iCountTalkFavourite);
     $iUserId = E::UserId();
     // Get stats of various user publications topics, comments, images, etc. and stats of favourites
     $aProfileStats = E::ModuleUser()->GetUserProfileStats($iUserId);
     // Получим информацию об изображениях пользователя
     /** @var ModuleMresource_EntityMresourceCategory[] $aUserImagesInfo */
     $aUserImagesInfo = E::ModuleMresource()->GetAllImageCategoriesByUserId($iUserId);
     E::ModuleViewer()->Assign('oUserProfile', E::User());
     E::ModuleViewer()->Assign('aProfileStats', $aProfileStats);
     E::ModuleViewer()->Assign('aUserImagesInfo', $aUserImagesInfo);
     // Old style skin compatibility
     E::ModuleViewer()->Assign('iCountTopicUser', $aProfileStats['count_topics']);
     E::ModuleViewer()->Assign('iCountCommentUser', $aProfileStats['count_comments']);
     E::ModuleViewer()->Assign('iCountTopicFavourite', $aProfileStats['favourite_topics']);
     E::ModuleViewer()->Assign('iCountCommentFavourite', $aProfileStats['favourite_comments']);
     E::ModuleViewer()->Assign('iCountNoteUser', $aProfileStats['count_usernotes']);
     E::ModuleViewer()->Assign('iCountWallUser', $aProfileStats['count_wallrecords']);
     E::ModuleViewer()->Assign('iPhotoCount', $aProfileStats['count_images']);
     E::ModuleViewer()->Assign('iCountCreated', $aProfileStats['count_created']);
     E::ModuleViewer()->Assign('iCountFavourite', $aProfileStats['count_favourites']);
     E::ModuleViewer()->Assign('iCountFriendsUser', $aProfileStats['count_friends']);
     E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     // * Передаем константы состояний участников разговора
     E::ModuleViewer()->Assign('TALK_USER_ACTIVE', ModuleTalk::TALK_USER_ACTIVE);
     E::ModuleViewer()->Assign('TALK_USER_DELETE_BY_SELF', ModuleTalk::TALK_USER_DELETE_BY_SELF);
     E::ModuleViewer()->Assign('TALK_USER_DELETE_BY_AUTHOR', ModuleTalk::TALK_USER_DELETE_BY_AUTHOR);
 }
Esempio n. 14
0
 /**
  * User was deleted from friends list
  *
  * @return bool
  */
 public function isDeleted()
 {
     return $this->getStatusFrom() == ModuleUser::USER_FRIEND_DELETE and $this->getUserFrom() == E::UserId();
 }
Esempio n. 15
0
 protected function _filterBlogUsers($aBlogUsers)
 {
     if (!$aBlogUsers || E::IsAdmin() || E::UserId() == $this->oUserProfile->getId()) {
         return $aBlogUsers;
     } else {
         // Blog types for guest and all users
         $aBlogTypes = E::ModuleBlog()->GetOpenBlogTypes();
         foreach ($aBlogUsers as $n => $oBlogUser) {
             if (!in_array($oBlogUser->getBlog()->getType(), $aBlogTypes)) {
                 unset($aBlogUsers[$n]);
             }
         }
     }
     return $aBlogUsers;
 }
Esempio n. 16
0
 /**
  * Проверяет доступность того или иного целевого объекта, переопределяется
  * плагинами. По умолчанию всё грузить запрещено.
  * Если всё нормально и пользователю разрешено сюда загружать картинки,
  * то метод возвращает целевой объект, иначе значение FALSE.
  *
  * @param string $sTarget
  * @param int    $iTargetId
  *
  * @return bool
  */
 public function CheckAccessAndGetTarget($sTarget, $iTargetId = null)
 {
     // Проверяем право пользователя на прикрепление картинок к топику
     if (mb_strpos($sTarget, 'single-image-uploader') === 0 || $sTarget == 'photoset') {
         // Проверям, авторизован ли пользователь
         if (!E::IsUser()) {
             return FALSE;
         }
         // Топик редактируется
         if ($oTopic = E::ModuleTopic()->GetTopicById($iTargetId)) {
             if (!E::ModuleACL()->IsAllowEditTopic($oTopic, E::User())) {
                 return FALSE;
             }
             return $oTopic;
         }
         return TRUE;
     }
     // Загружать аватарки можно только в свой профиль
     if ($sTarget == 'profile_avatar') {
         if ($iTargetId && E::IsUser() && $iTargetId == E::UserId()) {
             return E::User();
         }
         return FALSE;
     }
     // Загружать аватарки можно только в свой профиль
     if ($sTarget == 'profile_photo') {
         if ($iTargetId && E::IsUser() && $iTargetId == E::UserId()) {
             return E::User();
         }
         return FALSE;
     }
     if ($sTarget == 'blog_avatar') {
         /** @var ModuleBlog_EntityBlog $oBlog */
         $oBlog = E::ModuleBlog()->GetBlogById($iTargetId);
         if (!E::IsUser()) {
             return false;
         }
         if (!$oBlog) {
             // Блог еще не создан
             return E::ModuleACL()->CanCreateBlog(E::User()) || E::IsAdminOrModerator();
         }
         if ($oBlog && (E::ModuleACL()->CheckBlogEditBlog($oBlog, E::User()) || E::IsAdminOrModerator())) {
             return $oBlog;
         }
         return '';
     }
     if ($sTarget == 'topic') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleTopic_EntityTopic $oTopic */
         $oTopic = E::ModuleTopic()->GetTopicById($iTargetId);
         if (!$oTopic) {
             // Топик еще не создан
             return TRUE;
         }
         if ($oTopic && (E::ModuleACL()->IsAllowEditTopic($oTopic, E::User()) || E::IsAdminOrModerator())) {
             return $oTopic;
         }
         return '';
     }
     if ($sTarget == 'topic_comment') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleComment_EntityComment $oComment */
         $oComment = E::ModuleComment()->GetCommentById($iTargetId);
         if (!$oComment) {
             // Комментарий еще не создан
             return TRUE;
         }
         if ($oComment && (E::ModuleACL()->CanPostComment(E::User(), $oComment->getTarget()) && E::ModuleAcl()->CanPostCommentTime(E::User()) || E::IsAdminOrModerator())) {
             return $oComment;
         }
         return '';
     }
     if ($sTarget == 'talk_comment') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleComment_EntityComment $oComment */
         $oComment = E::ModuleComment()->GetCommentById($iTargetId);
         if (!$oComment) {
             // Комментарий еще не создан
             return TRUE;
         }
         if ($oComment && (E::ModuleAcl()->CanPostTalkCommentTime(E::User()) || E::IsAdminOrModerator())) {
             return $oComment;
         }
         return '';
     }
     if ($sTarget == 'talk') {
         if (!E::IsUser()) {
             return false;
         }
         /** @var ModuleComment_EntityComment $oTalk */
         $oTalk = E::ModuleTalk()->GetTalkById($iTargetId);
         if (!$oTalk) {
             // Комментарий еще не создан
             return TRUE;
         }
         if ($oTalk && (E::ModuleAcl()->CanSendTalkTime(E::User()) || E::IsAdminOrModerator())) {
             return $oTalk;
         }
         return '';
     }
     return FALSE;
 }
Esempio n. 17
0
 /**
  * Загрузка страницы картинок
  */
 protected function EventImageManagerLoadImages()
 {
     E::ModuleSecurity()->ValidateSendForm();
     // Менеджер изображений может запускаться в том числе и из админки
     // Если передано название скина админки, то используем его, если же
     // нет, то ту тему, которая установлена для сайта
     if (($sAdminTheme = F::GetRequest('admin')) && E::IsAdmin()) {
         C::Set('view.skin', $sAdminTheme);
     }
     // Получим идентификатор пользователя, изображения которого нужно загрузить
     $iUserId = (int) F::GetRequest('profile', FALSE);
     if ($iUserId && E::ModuleUser()->GetUserById($iUserId)) {
         C::Set('menu.data.profile_images.uid', $iUserId);
     } else {
         // Только пользователь может смотреть своё дерево изображений
         if (!E::IsUser()) {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'));
             return;
         }
         $iUserId = E::UserId();
     }
     $sCategory = F::GetRequestStr('category', FALSE);
     $iPage = intval(F::GetRequestStr('page', '1'));
     $sTopicId = F::GetRequestStr('topic_id', FALSE);
     $sTargetType = F::GetRequestStr('target');
     if (!$sCategory) {
         return;
     }
     $aTplVariables = array('sTargetType' => $sTargetType, 'sTargetId' => $sTopicId);
     // Страница загрузки картинки с компьютера
     if ($sCategory == 'insert-from-pc') {
         $sImages = E::ModuleViewer()->Fetch('modals/insert_img/inject.pc.tpl', $aTplVariables);
         E::ModuleViewer()->AssignAjax('images', $sImages);
         return;
     }
     // Страница загрузки из интернета
     if ($sCategory == 'insert-from-link') {
         $sImages = E::ModuleViewer()->Fetch('modals/insert_img/inject.link.tpl', $aTplVariables);
         E::ModuleViewer()->AssignAjax('images', $sImages);
         return;
     }
     $sTemplateName = 'inject.images.tpl';
     $aResources = array('collection' => array());
     $iPagesCount = 0;
     if ($sCategory == 'user') {
         //ок
         // * Аватар и фото пользователя
         $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('target_type' => array('profile_avatar', 'profile_photo'), 'user_id' => $iUserId), $iPage, Config::Get('module.topic.images_per_page'));
         $sTemplateName = 'inject.images.user.tpl';
         $iPagesCount = 0;
     } elseif ($sCategory == '_topic') {
         // * Конкретный топик
         $oTopic = E::ModuleTopic()->GetTopicById($sTopicId);
         if ($oTopic && ($oTopic->isPublished() || $oTopic->getUserId() == E::UserId()) && E::ModuleACL()->IsAllowShowBlog($oTopic->getBlog(), E::User())) {
             $aResourcesId = E::ModuleMresource()->GetCurrentTopicResourcesId($iUserId, $sTopicId);
             if ($aResourcesId) {
                 $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('user_id' => $iUserId, 'mresource_id' => $aResourcesId), $iPage, Config::Get('module.topic.images_per_page'));
                 $aResources['count'] = count($aResourcesId);
                 $iPagesCount = ceil($aResources['count'] / Config::Get('module.topic.images_per_page'));
                 $aTplVariables['oTopic'] = $oTopic;
             }
         }
         $sTemplateName = 'inject.images.tpl';
     } elseif ($sCategory == 'talk') {
         // * Письмо
         /** @var ModuleTalk_EntityTalk $oTopic */
         $oTopic = E::ModuleTalk()->GetTalkById($sTopicId);
         if ($oTopic && E::ModuleTalk()->GetTalkUser($sTopicId, $iUserId)) {
             $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('user_id' => $iUserId, 'target_type' => 'talk', 'target_id' => $sTopicId), $iPage, Config::Get('module.topic.images_per_page'));
             $aResources['count'] = E::ModuleMresource()->GetMresourcesCountByTargetIdAndUserId('talk', $sTopicId, $iUserId);
             $iPagesCount = ceil($aResources['count'] / Config::Get('module.topic.images_per_page'));
             $aTplVariables['oTopic'] = $oTopic;
         }
         $sTemplateName = 'inject.images.tpl';
     } elseif ($sCategory == 'comments') {
         // * Комментарии
         $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('user_id' => $iUserId, 'target_type' => array('talk_comment', 'topic_comment')), $iPage, Config::Get('module.topic.images_per_page'));
         $aResources['count'] = E::ModuleMresource()->GetMresourcesCountByTargetAndUserId(array('talk_comment', 'topic_comment'), $iUserId);
         $iPagesCount = ceil($aResources['count'] / Config::Get('module.topic.images_per_page'));
         $sTemplateName = 'inject.images.tpl';
     } elseif ($sCategory == 'current') {
         //ок
         // * Картинки текущего топика (текст, фотосет, одиночные картинки)
         $aResourcesId = E::ModuleMresource()->GetCurrentTopicResourcesId($iUserId, $sTopicId);
         if ($aResourcesId) {
             $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('user_id' => $iUserId, 'mresource_id' => $aResourcesId), $iPage, Config::Get('module.topic.images_per_page'));
             $aResources['count'] = count($aResourcesId);
             $iPagesCount = ceil($aResources['count'] / Config::Get('module.topic.images_per_page'));
         }
         $sTemplateName = 'inject.images.tpl';
     } elseif ($sCategory == 'blog_avatar') {
         // ок
         // * Аватары созданных блогов
         $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('target_type' => 'blog_avatar', 'user_id' => $iUserId), $iPage, Config::Get('module.topic.group_images_per_page'));
         $aResources['count'] = E::ModuleMresource()->GetMresourcesCountByTargetAndUserId('blog_avatar', $iUserId);
         // Получим блоги
         $aBlogsId = array();
         foreach ($aResources['collection'] as $oResource) {
             $aBlogsId[] = $oResource->getTargetId();
         }
         if ($aBlogsId) {
             $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aBlogsId);
             $aTplVariables['aBlogs'] = $aBlogs;
         }
         $sTemplateName = 'inject.images.blog.tpl';
         $iPagesCount = ceil($aResources['count'] / Config::Get('module.topic.group_images_per_page'));
     } elseif ($sCategory == 'topics') {
         // ок
         // * Страница топиков
         $aTopicsData = E::ModuleMresource()->GetTopicsPage($iUserId, $iPage, Config::Get('module.topic.group_images_per_page'));
         $aTplVariables['aTopics'] = $aTopicsData['collection'];
         $sTemplateName = 'inject.images.topic.tpl';
         $iPagesCount = ceil($aTopicsData['count'] / Config::Get('module.topic.group_images_per_page'));
         $aResources = array('collection' => array());
     } elseif (in_array($sCategory, E::ModuleTopic()->GetTopicTypes())) {
         // ок
         // * Страница топиков
         $aTopicsData = E::ModuleMresource()->GetTopicsPageByType($iUserId, $sCategory, $iPage, Config::Get('module.topic.group_images_per_page'));
         $aTplVariables['aTopics'] = $aTopicsData['collection'];
         $sTemplateName = 'inject.images.topic.tpl';
         $iPagesCount = ceil($aTopicsData['count'] / Config::Get('module.topic.group_images_per_page'));
         $aResources = array('collection' => array());
     } elseif ($sCategory == 'talks') {
         // ок
         // * Страница писем
         $aTalksData = E::ModuleMresource()->GetTalksPage($iUserId, $iPage, Config::Get('module.topic.group_images_per_page'));
         $aTplVariables['aTalks'] = $aTalksData['collection'];
         $sTemplateName = 'inject.images.talk.tpl';
         $iPagesCount = ceil($aTalksData['count'] / Config::Get('module.topic.group_images_per_page'));
         $aResources = array('collection' => array());
     } else {
         // * Прочие изображения
         $aResources = E::ModuleMresource()->GetMresourcesByFilter(array('target_type' => $sCategory, 'user_id' => $iUserId), $iPage, Config::Get('module.topic.images_per_page'));
         $iPagesCount = ceil($aResources['count'] / Config::Get('module.topic.images_per_page'));
     }
     $aTplVariables['aResources'] = $aResources['collection'];
     $sPath = F::GetRequest('profile', FALSE) ? 'actions/profile/created_photos/' : 'modals/insert_img/';
     $sImages = E::ModuleViewer()->GetLocalViewer()->Fetch($sPath . $sTemplateName, $aTplVariables);
     E::ModuleViewer()->AssignAjax('images', $sImages);
     E::ModuleViewer()->AssignAjax('category', $sCategory);
     E::ModuleViewer()->AssignAjax('page', $iPage);
     E::ModuleViewer()->AssignAjax('pages', $iPagesCount);
 }
Esempio n. 18
0
 /**
  * Получает число новых тем и комментов где есть юзер
  *
  * @param int $iUserId    ID пользователя
  *
  * @return int
  */
 public function GetCountTrackNew($iUserId)
 {
     $iUserId = (int) $iUserId;
     if (!$iUserId) {
         return false;
     }
     $sCacheKey = E::ModuleCache()->Key('track_count_new_user_', $iUserId);
     if (false === ($data = E::ModuleCache()->Get($sCacheKey, 'tmp,'))) {
         $data = $this->oMapper->GetCountTrackNew($iUserId);
         if ($iUserId == E::UserId()) {
             $sCacheType = ',tmp';
         } else {
             $sCacheType = null;
         }
         E::ModuleCache()->Set($data, $sCacheKey, array('topic_update', 'topic_new', "topic_read_user_{$iUserId}"), 'P1D', $sCacheType);
     }
     return $data;
 }
Esempio n. 19
0
 /**
  * Прикрепляет временный ресурс к вновь созданному объекту
  *
  * @param string $sTargetType
  * @param string $sTargetId
  * @param $sTargetTmp
  *
  * @return bool|ModuleMresource_EntityMresource
  */
 public function LinkTempResource($sTargetType, $sTargetId, $sTargetTmp)
 {
     if ($sTargetTmp && E::IsUser()) {
         $sNewPath = E::ModuleUploader()->GetUserImageDir(E::UserId(), true, false);
         $aMresourceRel = $this->GetMresourcesRelByTargetAndUser($sTargetType, 0, E::UserId());
         if ($aMresourceRel) {
             $oResource = array_shift($aMresourceRel);
             $sOldPath = $oResource->GetFile();
             $oStoredFile = E::ModuleUploader()->Store($sOldPath, $sNewPath);
             /** @var ModuleMresource_EntityMresource $oResource */
             $oResource = $this->GetMresourcesByUuid($oStoredFile->getUuid());
             if ($oResource) {
                 $oResource->setUrl($this->NormalizeUrl(E::ModuleUploader()->GetTargetUrl($sTargetType, $sTargetId)));
                 $oResource->setType($sTargetType);
                 $oResource->setUserId(E::UserId());
                 // 4. В свойство поля записать адрес картинки
                 $this->UnlinkFile($sTargetType, 0, E::UserId());
                 $this->AddTargetRel($oResource, $sTargetType, $sTargetId);
                 return $oResource;
             }
         }
     }
     return false;
 }
Esempio n. 20
0
 /**
  * Выполняется при завершении работы экшена
  *
  */
 public function EventShutdown()
 {
     $iUserId = E::UserId();
     // Get stats of various user publications topics, comments, images, etc. and stats of favourites
     $aProfileStats = E::ModuleUser()->GetUserProfileStats($iUserId);
     // Получим информацию об изображениях пользователя
     /** @var ModuleMresource_EntityMresourceCategory[] $aUserImagesInfo */
     $aUserImagesInfo = E::ModuleMresource()->GetAllImageCategoriesByUserId($iUserId);
     E::ModuleViewer()->Assign('oUserProfile', E::User());
     E::ModuleViewer()->Assign('aProfileStats', $aProfileStats);
     E::ModuleViewer()->Assign('aUserImagesInfo', $aUserImagesInfo);
     // Old style skin compatibility
     E::ModuleViewer()->Assign('iCountTopicUser', $aProfileStats['count_topics']);
     E::ModuleViewer()->Assign('iCountCommentUser', $aProfileStats['count_comments']);
     E::ModuleViewer()->Assign('iCountTopicFavourite', $aProfileStats['favourite_topics']);
     E::ModuleViewer()->Assign('iCountCommentFavourite', $aProfileStats['favourite_comments']);
     E::ModuleViewer()->Assign('iCountNoteUser', $aProfileStats['count_usernotes']);
     E::ModuleViewer()->Assign('iCountWallUser', $aProfileStats['count_wallrecords']);
     E::ModuleViewer()->Assign('iPhotoCount', $aProfileStats['count_images']);
     E::ModuleViewer()->Assign('iCountCreated', $aProfileStats['count_created']);
     E::ModuleViewer()->Assign('iCountFavourite', $aProfileStats['count_favourites']);
     E::ModuleViewer()->Assign('iCountFriendsUser', $aProfileStats['count_friends']);
     // * Загружаем в шаблон необходимые переменные
     E::ModuleViewer()->Assign('sMenuItemSelect', $this->sMenuItemSelect);
     E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     E::ModuleHook()->Run('action_shutdown_settings');
 }
Esempio n. 21
0
 protected function _eventUsersCmdBan($aUsersId, $nDays, $sComment)
 {
     if ($aUsersId) {
         if (in_array(E::UserId(), $aUsersId)) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.cannot_ban_self'), null, true);
             return false;
         }
         if (in_array(1, $aUsersId)) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.cannot_ban_admin'), null, true);
             return false;
         }
         $aUsers = E::ModuleUser()->GetUsersByArrayId($aUsersId);
         foreach ($aUsers as $oUser) {
             if ($oUser->isAdministrator()) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.cannot_ban_admin'), null, true);
                 return false;
             }
         }
         if (E::ModuleAdmin()->BanUsers($aUsersId, $nDays, $sComment)) {
             E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.action_ok'), null, true);
             return true;
         } else {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.action_err'), null, true);
         }
     }
     return false;
 }
Esempio n. 22
0
/**
 * Выводит изображение и прикрепляет его ко временному объекту
 *
 * @param $aParams
 * @param Smarty $oSmarty
 * @return string
 */
function smarty_function_imgs($aParams, &$oSmarty = NULL)
{
    // Пропущен тип объекта
    if (!isset($aParams['target-type'])) {
        trigger_error("img: missing 'target-type' parameter", E_USER_WARNING);
        return '';
    }
    // Пропущен идентификатор объекта
    if (!isset($aParams['target-id'])) {
        trigger_error("img: missing 'target-id' parameter", E_USER_WARNING);
        return '';
    }
    // Получим тип объекта
    $sTargetType = $aParams['target-type'];
    unset($aParams['target-type']);
    // Получим ид объекта
    $iTargetId = intval($aParams['target-id']);
    unset($aParams['target-id']);
    // Получим параметры обрезки объекта
    $sCrop = isset($aParams['crop']) ? $aParams['crop'] : FALSE;
    unset($aParams['crop']);
    // Получим ид объекта
    $sTemplate = isset($aParams['template']) ? $aParams['template'] : FALSE;
    unset($aParams['template']);
    // Получим изображение по временному ключу, или создадим этот ключ
    $aParams['src'] = array();
    if (($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) && E::IsUser()) {
        // Продлим куку
        E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, $sTargetTmp, 'P1D', FALSE);
    } else {
        // Куки нет, это значит, что пользователь первый раз создает этот тип
        // и старой картинки просто нет
        if ($iTargetId == '0') {
            E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, F::RandomStr(), 'P1D', FALSE);
        } else {
            E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
        }
    }
    // Получим предыдущее изображение и если оно было, установим в качестве текущего
    // Получим и удалим все ресурсы
    $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
    if ($aMresourceRel && is_array($aMresourceRel)) {
        /** @var ModuleMresource_EntityMresource $oResource */
        foreach ($aMresourceRel as $oMresource) {
            if ($sCrop) {
                $aParams['src'][$oMresource->getMresourceId()] = array('url' => E::ModuleUploader()->ResizeTargetImage($oMresource->GetUrl(), $sCrop), 'cover' => $oMresource->IsCover());
            } else {
                $aParams['src'][$oMresource->getMresourceId()] = array('url' => $oMresource->GetUrl(), 'cover' => $oMresource->IsCover());
            }
            $oSmarty->assign("bHasImage", TRUE);
        }
    }
    // Создадим массив картинок
    $sItems = '';
    if ($aParams['src']) {
        foreach ($aParams['src'] as $sID => $aData) {
            $sItems .= str_replace(array('ID', 'uploader_item_SRC', 'MARK_AS_PREVIEW'), array($sID, $aData['url'], $aData['cover'] ? E::ModuleLang()->Get('topic_photoset_is_preview') : E::ModuleLang()->Get('topic_photoset_mark_as_preview')), $sTemplate);
        }
    }
    return $sItems;
}
Esempio n. 23
0
 /**
  * Удаление картинки
  */
 public function EventRemoveImage()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     // Проверяем, целевой объект и права на его редактирование
     if (!($oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTargetType = F::GetRequest('target', FALSE), $sTargetId = F::GetRequest('target_id', FALSE)))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Удаляем картинку
     E::ModuleMresource()->UnlinkFile($sTargetType, $sTargetId, E::UserId());
     // Запускаем хук на действия после загрузки картинки
     E::ModuleHook()->Run('uploader_remove_image_after', array('sTargetId' => $sTargetId, 'sTarget' => $sTargetType, 'oTarget' => $oTarget));
     // * Возвращает дефолтную аватарку
     E::ModuleViewer()->AssignAjax('sTitleUpload', E::ModuleLang()->Get('uploader_upload_success'));
 }
Esempio n. 24
0
 /**
  * Прямая загрузка изображения без открытия окна ресайза
  *
  * @return bool
  */
 public function EventDirectImage()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     // * Достаем из сессии временный файл
     $sTarget = E::ModuleSession()->Get('sTarget');
     $sTargetId = E::ModuleSession()->Get('sTargetId');
     $sTmpFile = E::ModuleSession()->Get("sTmp-{$sTarget}-{$sTargetId}");
     $sPreviewFile = E::ModuleSession()->Get("sPreview-{$sTarget}-{$sTargetId}");
     if ($sTargetId == '0') {
         if (!E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) {
             return FALSE;
         }
     }
     if (!F::File_Exists($sTmpFile)) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'));
         return false;
     }
     // Проверяем, целевой объект и права на его редактирование
     if (!($oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTarget, $sTargetId))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
         return false;
     }
     E::ModuleMresource()->UnlinkFile($sTarget, $sTargetId, E::UserId());
     $oImg = E::ModuleImg()->Read($sTmpFile);
     $sExtension = strtolower(pathinfo($sTmpFile, PATHINFO_EXTENSION));
     // Сохраняем фото во временный файл
     if ($sTmpFile = $oImg->Save(F::File_UploadUniqname($sExtension))) {
         // Окончательная запись файла только через модуль Uploader
         if ($oStoredFile = E::ModuleUploader()->StoreImage($sTmpFile, $sTarget, $sTargetId)) {
             $sFile = $oStoredFile->GetUrl();
             $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('sFile', $sFile);
             E::ModuleViewer()->AssignAjax('sFilePreview', $sFilePreview);
             // Чистим
             $sTmpFile = E::ModuleSession()->Get("sTmp-{$sTarget}-{$sTargetId}");
             $sPreviewFile = E::ModuleSession()->Get("sPreview-{$sTarget}-{$sTargetId}");
             E::ModuleImg()->Delete($sTmpFile);
             E::ModuleImg()->Delete($sPreviewFile);
             // * Удаляем из сессии
             E::ModuleSession()->Drop('sTarget');
             E::ModuleSession()->Drop('sTargetId');
             E::ModuleSession()->Drop("sTmp-{$sTarget}-{$sTargetId}");
             E::ModuleSession()->Drop("sPreview-{$sTarget}-{$sTargetId}");
             return true;
         }
     }
     // * В случае ошибки, возвращаем false
     E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'));
     return false;
 }
Esempio n. 25
0
 /**
  * Возвращает количество сообщений для пользователя
  *
  * @param bool $sTemplate
  * @return int|mixed|string
  */
 public function CountMessages($sTemplate = false)
 {
     if (!E::IsUser()) {
         return '';
     }
     $sKeyString = 'menu_count_messages_' . E::UserId() . '_' . (string) $sTemplate;
     if (FALSE === ($sData = E::ModuleCache()->GetTmp($sKeyString))) {
         $iValue = (int) $this->CountTrack() + (int) $this->NewTalk();
         if ($sTemplate && $iValue) {
             $sData = str_replace('{{count_messages}}', $iValue, $sTemplate);
         } else {
             $sData = $iValue ? $iValue : '';
         }
         E::ModuleCache()->SetTmp($sData, $sKeyString);
     }
     return $sData;
 }
Esempio n. 26
0
 /**
  * Returns types of blogs which user cannot read (without personal subscriptions/membership)
  *
  * @param ModuleUser_EntityUser $oUser
  *
  * @return array
  */
 public function GetCloseBlogTypes($oUser = null)
 {
     if (is_null($oUser)) {
         $iUserId = E::UserId();
     } else {
         $iUserId = is_object($oUser) ? $oUser->getId() : intval($oUser);
     }
     $sCacheKey = 'blog_types_close_' . ($iUserId ? 'user' : 'guest');
     if (false === ($aBlogTypes = E::ModuleCache()->Get($sCacheKey, 'tmp'))) {
         if ($this->oUserCurrent) {
             $aFilter = array('acl_read' => ModuleBlog::BLOG_USER_ACL_MEMBER);
         } else {
             $aFilter = array('acl_read' => ModuleBlog::BLOG_USER_ACL_USER | ModuleBlog::BLOG_USER_ACL_MEMBER);
         }
         // Blog types for guest and all users
         $aBlogTypes = $this->GetBlogTypes($aFilter, true);
         E::ModuleCache()->Set($aBlogTypes, $sCacheKey, array('blog_update', 'blog_new'), 'P30D', 'tmp');
     }
     return $aBlogTypes;
 }
Esempio n. 27
0
 /**
  * Обработка дополнительных полей топика
  *
  * @param ModuleTopic_EntityTopic $oTopic
  * @param string $sType
  *
  * @return bool
  */
 public function processTopicFields($oTopic, $sType = 'add')
 {
     /** @var ModuleTopic_EntityContentValues $aValues */
     $aValues = array();
     if ($sType == 'update') {
         // * Получаем существующие значения
         if ($aData = $this->GetTopicValuesByArrayId(array($oTopic->getId()))) {
             $aValues = $aData[$oTopic->getId()];
         }
         // * Чистим существующие значения
         E::ModuleTopic()->DeleteTopicValuesByTopicId($oTopic->getId());
     }
     if ($oType = E::ModuleTopic()->GetContentTypeByUrl($oTopic->getType())) {
         //получаем поля для данного типа
         if ($aFields = $oType->getFields()) {
             foreach ($aFields as $oField) {
                 $sData = null;
                 if (isset($_REQUEST['fields'][$oField->getFieldId()]) || isset($_FILES['fields_' . $oField->getFieldId()]) || $oField->getFieldType() == 'single-image-uploader') {
                     //текстовые поля
                     if (in_array($oField->getFieldType(), array('input', 'textarea', 'select'))) {
                         $sData = E::ModuleText()->Parser($_REQUEST['fields'][$oField->getFieldId()]);
                     }
                     //поле ссылки
                     if ($oField->getFieldType() == 'link') {
                         $sData = $_REQUEST['fields'][$oField->getFieldId()];
                     }
                     //поле даты
                     if ($oField->getFieldType() == 'date') {
                         if (isset($_REQUEST['fields'][$oField->getFieldId()])) {
                             if (F::CheckVal($_REQUEST['fields'][$oField->getFieldId()], 'text', 6, 10) && substr_count($_REQUEST['fields'][$oField->getFieldId()], '.') == 2) {
                                 list($d, $m, $y) = explode('.', $_REQUEST['fields'][$oField->getFieldId()]);
                                 if (@checkdate($m, $d, $y)) {
                                     $sData = $_REQUEST['fields'][$oField->getFieldId()];
                                 }
                             }
                         }
                     }
                     //поле с файлом
                     if ($oField->getFieldType() == 'file') {
                         //если указано удаление файла
                         if (F::GetRequest('topic_delete_file_' . $oField->getFieldId())) {
                             if ($oTopic->getFieldFile($oField->getFieldId())) {
                                 @unlink(Config::Get('path.root.dir') . $oTopic->getFieldFile($oField->getFieldId())->getFileUrl());
                                 //$oTopic->setValueField($oField->getFieldId(),'');
                                 $sData = null;
                             }
                         } else {
                             //если удаление файла не указано, уже ранее залит файл^ и нового файла не загружалось
                             if ($sType == 'update' && isset($aValues[$oField->getFieldId()])) {
                                 $sData = $aValues[$oField->getFieldId()]->getValueSource();
                             }
                         }
                         if (isset($_FILES['fields_' . $oField->getFieldId()]) && is_uploaded_file($_FILES['fields_' . $oField->getFieldId()]['tmp_name'])) {
                             $iMaxFileSize = F::MemSize2Int(Config::Get('module.uploader.files.default.file_maxsize'));
                             $aFileExtensions = Config::Get('module.uploader.files.default.file_extensions');
                             if (!$iMaxFileSize || filesize($_FILES['fields_' . $oField->getFieldId()]['tmp_name']) <= $iMaxFileSize) {
                                 $aPathInfo = pathinfo($_FILES['fields_' . $oField->getFieldId()]['name']);
                                 if (!$aFileExtensions || in_array(strtolower($aPathInfo['extension']), $aFileExtensions)) {
                                     $sFileTmp = $_FILES['fields_' . $oField->getFieldId()]['tmp_name'];
                                     $sDirSave = Config::Get('path.uploads.root') . '/files/' . E::ModuleUser()->GetUserCurrent()->getId() . '/' . F::RandomStr(16);
                                     mkdir(Config::Get('path.root.dir') . $sDirSave, 0777, true);
                                     if (is_dir(Config::Get('path.root.dir') . $sDirSave)) {
                                         $sFile = $sDirSave . '/' . F::RandomStr(10) . '.' . strtolower($aPathInfo['extension']);
                                         $sFileFullPath = Config::Get('path.root.dir') . $sFile;
                                         if (copy($sFileTmp, $sFileFullPath)) {
                                             //удаляем старый файл
                                             if ($oTopic->getFieldFile($oField->getFieldId())) {
                                                 $sOldFile = Config::Get('path.root.dir') . $oTopic->getFieldFile($oField->getFieldId())->getFileUrl();
                                                 F::File_Delete($sOldFile);
                                             }
                                             $aFileObj = array();
                                             $aFileObj['file_hash'] = F::RandomStr(32);
                                             $aFileObj['file_name'] = E::ModuleText()->Parser($_FILES['fields_' . $oField->getFieldId()]['name']);
                                             $aFileObj['file_url'] = $sFile;
                                             $aFileObj['file_size'] = $_FILES['fields_' . $oField->getFieldId()]['size'];
                                             $aFileObj['file_extension'] = $aPathInfo['extension'];
                                             $aFileObj['file_downloads'] = 0;
                                             $sData = serialize($aFileObj);
                                             F::File_Delete($sFileTmp);
                                         }
                                     }
                                 } else {
                                     $sTypes = implode(', ', $aFileExtensions);
                                     E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_field_file_upload_err_type', array('types' => $sTypes)), null, true);
                                 }
                             } else {
                                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_field_file_upload_err_size', array('size' => $iMaxFileSize)), null, true);
                             }
                             F::File_Delete($_FILES['fields_' . $oField->getFieldId()]['tmp_name']);
                         }
                     }
                     // Поле с изображением
                     if ($oField->getFieldType() == 'single-image-uploader') {
                         $sTargetType = $oField->getFieldType() . '-' . $oField->getFieldId();
                         $iTargetId = $oTopic->getId();
                         // 1. Удалить значение target_tmp
                         // Нужно затереть временный ключ в ресурсах, что бы в дальнейшем картнка не
                         // воспринималась как временная.
                         if ($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) {
                             // 2. Удалить куку.
                             // Если прозошло сохранение вновь созданного топика, то нужно
                             // удалить куку временной картинки. Если же сохранялся уже существующий топик,
                             // то удаление куки ни на что влиять не будет.
                             E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
                             // 3. Переместить фото
                             $sNewPath = E::ModuleUploader()->GetUserImageDir(E::UserId(), true, false);
                             $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, 0, E::UserId());
                             if ($aMresourceRel) {
                                 $oResource = array_shift($aMresourceRel);
                                 $sOldPath = $oResource->GetFile();
                                 $oStoredFile = E::ModuleUploader()->Store($sOldPath, $sNewPath);
                                 /** @var ModuleMresource_EntityMresource $oResource */
                                 $oResource = E::ModuleMresource()->GetMresourcesByUuid($oStoredFile->getUuid());
                                 if ($oResource) {
                                     $oResource->setUrl(E::ModuleMresource()->NormalizeUrl(E::ModuleUploader()->GetTargetUrl($sTargetType, $iTargetId)));
                                     $oResource->setType($sTargetType);
                                     $oResource->setUserId(E::UserId());
                                     // 4. В свойство поля записать адрес картинки
                                     $sData = $oResource->getMresourceId();
                                     $oResource = array($oResource);
                                     E::ModuleMresource()->UnlinkFile($sTargetType, 0, $oTopic->getUserId());
                                     E::ModuleMresource()->AddTargetRel($oResource, $sTargetType, $iTargetId);
                                 }
                             }
                         } else {
                             // Топик редактируется, просто обновим поле
                             $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
                             if ($aMresourceRel) {
                                 $oResource = array_shift($aMresourceRel);
                                 $sData = $oResource->getMresourceId();
                             } else {
                                 $sData = false;
                                 //                                    $this->DeleteField($oField);
                             }
                         }
                     }
                     E::ModuleHook()->Run('content_field_proccess', array('sData' => &$sData, 'oField' => $oField, 'oTopic' => $oTopic, 'aValues' => $aValues, 'sType' => &$sType));
                     //Добавляем поле к топику.
                     if ($sData) {
                         /** @var ModuleTopic_EntityContentValues $oValue */
                         $oValue = E::GetEntity('Topic_ContentValues');
                         $oValue->setTargetId($oTopic->getId());
                         $oValue->setTargetType('topic');
                         $oValue->setFieldId($oField->getFieldId());
                         $oValue->setFieldType($oField->getFieldType());
                         $oValue->setValue($sData);
                         $oValue->setValueSource(in_array($oField->getFieldType(), array('file', 'single-image-uploader')) ? $sData : $_REQUEST['fields'][$oField->getFieldId()]);
                         $this->AddTopicValue($oValue);
                     }
                 }
             }
         }
     }
     return true;
 }
Esempio n. 28
0
 /**
  * Сколько секунд осталось до конца редактирования
  *
  * @param bool $bFormat
  *
  * @return int
  */
 public function getEditTime($bFormat = false)
 {
     $xEditTime = C::Get('module.comment.edit.enable');
     if (!$xEditTime) {
         return 0;
     }
     if ($xEditTime && E::User() && E::UserId() == $this->getUserId()) {
         $sNow = date('Y-m-d H:i:s');
         if ($xEditTime === true) {
             $sDateTime = F::DateTimeAdd($sNow, '10 minutes');
         } else {
             $sDateTime = F::DateTimeAdd($this->getDate(), $xEditTime);
         }
         if ($sNow < $sDateTime) {
             $nRest = F::DateDiffSeconds($sNow, $sDateTime);
             if (!$bFormat) {
                 return $nRest;
             }
             if ($nRest < 60) {
                 return sprintf('%2d sec', $nRest);
             }
             $nS = $nRest % 60;
             $nM = ($nRest - $nS) / 60;
             if ($nM < 60) {
                 return sprintf('%2d:%02d', $nM, $nS);
             }
             $nRest = $nM;
             $nM = $nRest % 60;
             $nH = ($nRest - $nM) / 60;
             if ($nH < 24) {
                 return sprintf('%2d:%02d:%02d', $nH, $nM, $nS);
             }
             $nRest = $nH;
             $nH = $nRest % 24;
             $nD = ($nRest - $nH) / 24;
             return sprintf('%3d, %2d:%02d:%02d', $nD, $nH, $nM, $nS);
         }
     }
     return 0;
 }