Esempio n. 1
0
 /**
  * @param string $sKeyString
  * @param string $sKeyName
  *
  * @return int
  */
 public function Verify($sKeyString, $sKeyName = null)
 {
     $iResult = 0;
     if (empty($sKeyString)) {
         $iResult = static::ERR_KEYSTRING_EMPTY;
     } elseif (!is_string($sKeyString)) {
         $iResult = static::ERR_KEYSTRING_NOT_STR;
     } else {
         if (!$sKeyName) {
             $sKeyName = $this->sKeyName;
         }
         $sSavedString = E::ModuleSession()->Get($sKeyName);
         // issue#342. При регистрации метод вызывается несколько раз в том
         // числе и при проверки формы аяксом при первой проверке значение
         // капчи сбрасывается и в дальнейшем проверка не проходит. Сброс капчи
         // теперь происходит только после успешной регистрации
         // E::ModuleSession()->Drop($sKeyName);
         if (empty($sSavedString) || !is_string($sSavedString)) {
             $iResult = static::ERR_KEYSTRING_NOT_DEFINED;
         } elseif ($sSavedString != $sKeyString) {
             $iResult = static::ERR_KEYSTRING_NOT_VALID;
         }
     }
     return $iResult;
 }
Esempio n. 2
0
 /**
  * Инициализация
  *
  */
 public function Init()
 {
     // Устанавливаем title страницы
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('people'));
     if (!E::ModuleSession()->GetCookie('view') && F::GetRequestStr('view')) {
         E::ModuleSession()->DelCookie('view');
     }
     E::ModuleSession()->SetCookie('view', F::GetRequestStr('view', '2'), 60 * 60 * 24 * 365);
 }
Esempio n. 3
0
 /**
  * При завершении работы модуля передаем списки сообщений в шаблоны Smarty
  *
  */
 public function Shutdown()
 {
     /**
      * Добавляем в сессию те сообщения, которые были отмечены для сессионного использования
      */
     E::ModuleSession()->Set('message_notice_session', $this->GetNoticeSession());
     E::ModuleSession()->Set('message_error_session', $this->GetErrorSession());
     E::ModuleViewer()->Assign('aMsgNotice', $this->GetNotice());
     E::ModuleViewer()->Assign('aMsgError', $this->GetError());
 }
Esempio n. 4
0
 /**
  * Assign messages to template variables and save special messages to session
  * (they will be shown in the next page)
  *
  */
 public function Shutdown()
 {
     // Save messages in session
     if ($aMessages = $this->GetNoticeSession()) {
         E::ModuleSession()->Set('message_notice_session', $aMessages);
     }
     if ($aMessages = $this->GetErrorSession()) {
         E::ModuleSession()->Set('message_error_session', $aMessages);
     }
     E::ModuleViewer()->Assign('aMsgNotice', $this->GetNotice());
     E::ModuleViewer()->Assign('aMsgError', $this->GetError());
 }
Esempio n. 5
0
 /**
  * Инициализация экшена
  *
  */
 public function Init()
 {
     /**
      * issue #104, {@see https://github.com/altocms/altocms/issues/104}
      * Проверим, не пришли ли мы в ошибку с логаута, если да, то перейдем на главную,
      * поскольку страница на самом деле есть, но только когда мы авторизованы.
      */
     if (isset($_SERVER['HTTP_REFERER']) && E::ModuleSession()->GetCookie('lgp') === md5(F::RealUrl($_SERVER['HTTP_REFERER']) . 'logout')) {
         return R::Location((string) Config::Get('module.user.logout.redirect'));
     }
     /**
      * Устанавливаем дефолтный евент
      */
     $this->SetDefaultEvent('index');
     /**
      * Запрешаем отображать статистику выполнения
      */
     R::SetIsShowStats(false);
 }
Esempio n. 6
0
 /**
  * @param array  $aUsers
  * @param int    $nDays
  * @param string $sComment
  *
  * @return bool
  */
 public function BanUsers($aUsers, $nDays = null, $sComment = null)
 {
     $aUserIds = $this->_entitiesId($aUsers);
     $bOk = true;
     if ($aUserIds) {
         // для все юзеров, добавляемых в бан, закрываются сессии
         foreach ($aUserIds as $nUserId) {
             if ($nUserId) {
                 E::ModuleSession()->Drop($nUserId);
                 E::ModuleUser()->CloseAllSessions($nUserId);
             }
         }
         if (!$nDays) {
             $nUnlim = 1;
             $dDate = null;
         } else {
             $nUnlim = 0;
             $dDate = date('Y-m-d H:i:s', time() + 3600 * 24 * $nDays);
         }
         $bOk = $this->oMapper->BanUsers($aUserIds, $dDate, $nUnlim, $sComment);
         E::ModuleCache()->CleanByTags(array('user_update'));
     }
     return $bOk;
 }
Esempio n. 7
0
 /**
  * @param ModuleTopic_EntityTopic $oTopic
  * @param null $sTargetTmp
  * @return bool
  */
 public function AttachTmpPhotoToTopic($oTopic, $sTargetTmp = null)
 {
     if (is_null($sTargetTmp)) {
         $sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP);
     }
     E::ModuleMresource()->ResetTmpRelById($sTargetTmp, $oTopic->getId());
     return $this->oMapper->attachTmpPhotoToTopic($oTopic, $sTargetTmp);
 }
Esempio n. 8
0
 /**
  * Обрабатываем процесс разлогинивания
  *
  */
 protected function EventExit()
 {
     E::ModuleSecurity()->ValidateSendForm();
     E::ModuleUser()->Logout();
     $iShowTime = Config::Val('module.user.logout.show_exit', 3);
     $sRedirect = Config::Get('module.user.logout.redirect');
     if (!$sRedirect) {
         if (isset($_SERVER['HTTP_REFERER']) && F::File_IsLocalUrl($_SERVER['HTTP_REFERER'])) {
             $sRedirect = $_SERVER['HTTP_REFERER'];
         }
     }
     /**
      * issue #104, {@see https://github.com/altocms/altocms/issues/104}
      * Установим в lgp (last_good_page) хэш имени страницы с постфиксом "logout". Такая
      * кука будет означать, что на этой странице пользователь вышел с сайта. Время 60 -
      * заранее достаточное время, что бы произошел редирект на страницу HTTP_REFERER. Если
      * же эта страница выпадет в 404 то в экшене ActionError уйдем на главную, поскольку
      * эта страница недоступна стала после выхода с сайта, а до этого была вполне ничего.
      */
     if ($iShowTime) {
         $sUrl = F::RealUrl($sRedirect);
         $sReferrer = Config::Get('path.root.web') . R::GetAction() . "/" . R::GetActionEvent() . '/?security_key=' . F::GetRequest('security_key', '');
         E::ModuleSession()->SetCookie('lgp', md5($sReferrer . 'logout'), 60);
         E::ModuleViewer()->SetHtmlHeadTag('meta', array('http-equiv' => 'Refresh', 'Content' => $iShowTime . '; url=' . $sUrl));
     } elseif ($sRedirect) {
         // Если установлена пользовтаельская страница выхода, то считаем,
         // что она без ошибки и смело не нее редиректим, в других случаях
         // возможна 404
         if (!Config::Get('module.user.logout.redirect')) {
             E::ModuleSession()->SetCookie('lgp', md5(F::RealUrl($sRedirect) . 'logout'), 60);
         }
         R::Location($sRedirect);
         exit;
     } else {
         // E::ModuleViewer()->Assign('bRefreshToHome', true);
         // Время показа страницы выхода не задано, поэтому просто редирект
         R::Location(Config::Get('path.root.web'));
         exit;
     }
 }
Esempio n. 9
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. 10
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. 11
0
 /**
  * Разлогинивание
  *
  */
 public function Logout()
 {
     if ($this->oSession) {
         // Обновляем сессию
         $this->oMapper->UpdateSession($this->oSession);
     }
     if ($this->oUserCurrent) {
         // Close current session of the current user
         $this->CloseSession();
     }
     E::ModuleCache()->CleanByTags(array('user_session_update'));
     // * Удаляем из сессии
     E::ModuleSession()->Drop('user_id');
     // * Удаляем куки
     E::ModuleSession()->DelCookie($this->GetKeyName());
     E::ModuleSession()->DropSession();
     $this->oUserCurrent = null;
     $this->oSession = null;
 }
Esempio n. 12
0
 /**
  * Протоколирование запросов
  *
  * @param array|null $aVars
  */
 public function OutLog($aVars = null)
 {
     if (!$this->bLogEnable) {
         return;
     }
     if (!($sLogFile = Config::Get('module.search.logs.file'))) {
         $sLogFile = 'search.log';
     }
     if (!$this->oUser) {
         if ($sUserId = E::ModuleSession()->Get('user_id')) {
             $this->oUser = E::ModuleUser()->GetUserById($sUserId);
         }
     }
     if (!$this->oUser) {
         $sUserLogin = '******';
     } else {
         $sUserLogin = $this->oUser->GetLogin();
     }
     $path = R::GetPathWebCurrent();
     $uri = $_SERVER['REQUEST_URI'];
     $sStrLog = 'user=>"' . $sUserLogin . '" ip=>"' . $_SERVER['REMOTE_ADDR'] . '"' . "\n" . str_repeat(' ', 22) . 'path=>' . $path . '"' . "\n" . str_repeat(' ', 22) . 'uri=>' . $uri . '"';
     if (is_array($aVars) && sizeof($aVars)) {
         foreach ($aVars as $key => $val) {
             $sStrLog .= "\n" . str_repeat(' ', 22) . $key . '=>"' . $val . '"';
         }
     }
     E::ModuleLogger()->Dump($sLogFile, $sStrLog);
 }
Esempio n. 13
0
 /**
  * Returns current session of user
  *
  * @return ModuleUser_EntitySession|null
  */
 public function getCurrentSession()
 {
     if (!$this->getProp('_current_session')) {
         $this->_aData['_current_session'] = E::ModuleUser()->GetSessionByUserId($this->getId(), E::ModuleSession()->GetKey());
     }
     return $this->getProp('_current_session');
 }
Esempio n. 14
0
 protected function EventReset()
 {
     $this->sMainMenuItem = 'tools';
     $this->_setTitle(E::ModuleLang()->Get('action.admin.reset_title'));
     $this->SetTemplateAction('tools/reset');
     $aSettings = array();
     if ($this->GetPost('adm_reset_submit')) {
         $aConfig = array();
         if ($this->GetPost('adm_cache_clear_data')) {
             E::ModuleCache()->Clean();
             $aSettings['adm_cache_clear_data'] = 1;
         }
         if ($this->GetPost('adm_cache_clear_assets')) {
             E::ModuleViewer()->ClearAssetsFiles();
             $aConfig['assets.version'] = time();
             $aSettings['adm_cache_clear_assets'] = 1;
         }
         if ($this->GetPost('adm_cache_clear_smarty')) {
             E::ModuleViewer()->ClearSmartyFiles();
             $aSettings['adm_cache_clear_smarty'] = 1;
         }
         if ($this->GetPost('adm_reset_config_data')) {
             $this->_eventResetCustomConfig();
             $aSettings['adm_reset_config_data'] = 1;
         }
         if ($aConfig) {
             Config::WriteCustomConfig($aConfig);
         }
         E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.action_ok'), null, true);
         if ($aSettings) {
             E::ModuleSession()->SetCookie('adm_tools_reset', serialize($aSettings));
         } else {
             E::ModuleSession()->DelCookie('adm_tools_reset');
         }
         R::Location('admin/tools-reset/');
     }
     if ($sSettings = E::ModuleSession()->GetCookie('adm_tools_reset')) {
         $aSettings = @unserialize($sSettings);
         if (is_array($aSettings)) {
             E::ModuleViewer()->Assign('aSettings', $aSettings);
         }
     }
 }
Esempio n. 15
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. 16
0
 /**
  * Generates security key for the current session
  *
  * @return string
  */
 protected function _generateSecurityKey()
 {
     // Сохраняем текущий ключ для ajax-запросов
     if (F::AjaxRequest() && ($sKey = E::ModuleSession()->Get($this->sSecurityKeyName))) {
         return $sKey;
     }
     if (Config::Get('module.security.randomkey')) {
         return F::RandomStr($this->sSecurityKeyLen);
     } else {
         //return md5(E::ModuleSession()->GetId().Config::Get('module.security.hash'));
         return md5($this->GetUniqKey() . $this->GetClientHash() . Config::Get('module.security.hash'));
     }
 }
Esempio n. 17
0
 /**
  * Инициализация модуля
  *
  */
 public function Init()
 {
     E::ModuleHook()->Run('lang_init_start');
     $this->sDefaultLang = Config::Get('lang.default');
     $this->aLangPaths = F::File_NormPath(Config::Get('lang.paths'));
     $this->bDeleteUndefinedVars = Config::Get('module.lang.delete_undefined');
     // Проверку на языки делаем, только если сайт мультиязычный
     if (Config::Get('lang.multilang')) {
         // Время хранение языка в куках
         $iSavePeriod = F::ToSeconds(Config::Get('lang.save'));
         $sLangKey = is_string(Config::Get('lang.in_get')) ? Config::Get('lang.in_get') : 'lang';
         // Получаем язык, если он был задан в URL
         $this->sCurrentLang = R::GetLang();
         // Проверка куки, если требуется
         if (!$this->sCurrentLang && $iSavePeriod) {
             $sLang = (string) E::ModuleSession()->GetCookie($sLangKey);
             if ($sLang) {
                 $this->sCurrentLang = $sLang;
             }
         }
         if (!$this->sCurrentLang) {
             $this->sCurrentLang = Config::Get('lang.current');
         }
     } else {
         $this->sCurrentLang = Config::Get('lang.current');
         $iSavePeriod = 0;
         $sLangKey = null;
     }
     // Проверяем на случай старого обозначения языков
     $this->sDefaultLang = $this->_checkLang($this->sDefaultLang);
     $this->sCurrentLang = $this->_checkLang($this->sCurrentLang);
     if ($this->sCurrentLang && Config::Get('lang.multilang') && $iSavePeriod) {
         // Пишем в куки, если требуется
         E::ModuleSession()->SetCookie($sLangKey, $this->sCurrentLang, $iSavePeriod);
     }
     $this->InitLang();
 }
Esempio n. 18
0
 /**
  * Добавляет связь между ресурсом и целевым объектом
  *
  * @param ModuleMresource_EntityMresource $oResource
  * @param string $sTargetType
  * @param string $sTargetId
  * @param bool   $bMulti
  *
  * @return bool
  */
 public function AddRelationResourceTarget($oResource, $sTargetType, $sTargetId, $bMulti = FALSE)
 {
     if ($oResource) {
         // Если одиночная загрузка, то предыдущий файл затрем
         // Иначе просто добавляем еще один.
         if (!$bMulti) {
             E::ModuleMresource()->UnlinkFile($sTargetType, $sTargetId, E::UserId());
         }
         $oResource->setUrl(E::ModuleMresource()->NormalizeUrl($this->GetTargetUrl($sTargetType, $sTargetId)));
         $oResource->setType($sTargetType);
         $oResource->setUserId(E::UserId());
         if ($sTargetId == '0') {
             $oResource->setTargetTmp(E::ModuleSession()->GetCookie(self::COOKIE_TARGET_TMP));
         }
         $oResource = array($oResource);
         E::ModuleMresource()->AddTargetRel($oResource, $sTargetType, $sTargetId);
         return $oResource;
     }
     return FALSE;
 }
Esempio n. 19
0
 /**
  * Удаляет код приглашения из сессии
  */
 protected function DropInviteRegister()
 {
     if (Config::Get('general.reg.invite')) {
         E::ModuleSession()->Drop('invite_code');
     }
 }
Esempio n. 20
0
 /**
  * Добавляет блог
  *
  * @param ModuleBlog_EntityBlog $oBlog    Блог
  *
  * @return ModuleBlog_EntityBlog|bool
  */
 public function AddBlog(ModuleBlog_EntityBlog $oBlog)
 {
     if ($sId = $this->oMapper->AddBlog($oBlog)) {
         $oBlog->setId($sId);
         //чистим зависимые кеши
         E::ModuleCache()->CleanByTags(array('blog_new'));
         // 1. Удалить значение target_tmp
         // Нужно затереть временный ключ в ресурсах, что бы в дальнейшем картнка не
         // воспринималась как временная.
         if ($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) {
             // 2. Удалить куку.
             // Если прозошло сохранение вновь созданного топика, то нужно
             // удалить куку временной картинки. Если же сохранялся уже существующий топик,
             // то удаление куки ни на что влиять не будет.
             E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
             // 3. Переместить фото
             $sTargetType = 'blog_avatar';
             $sTargetId = $sId;
             $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, 0, E::UserId());
             if ($aMresourceRel) {
                 $oResource = array_shift($aMresourceRel);
                 $sOldPath = $oResource->GetFile();
                 //$oStoredFile = E::ModuleUploader()->Store($sOldPath, $sNewPath);
                 $oStoredFile = E::ModuleUploader()->StoreImage($sOldPath, $sTargetType, $sTargetId);
                 /** @var ModuleMresource_EntityMresource $oResource */
                 $oResource = E::ModuleMresource()->GetMresourcesByUuid($oStoredFile->getUuid());
                 if ($oResource) {
                     $oResource->setUrl(E::ModuleMresource()->NormalizeUrl(E::ModuleUploader()->GetTargetUrl($sTargetType, $sTargetId)));
                     $oResource->setType($sTargetType);
                     $oResource->setUserId(E::UserId());
                     $oResource = array($oResource);
                     E::ModuleMresource()->UnlinkFile($sTargetType, 0, E::UserId());
                     E::ModuleMresource()->AddTargetRel($oResource, $sTargetType, $sTargetId);
                     // 4. Обновим сведения об аватаре у блога для обеспечения обратной
                     // совместимости. Могут быть плагины которые берут картинку непосредственно
                     // из свойства блога, а не через модуль uploader
                     $oBlog->setAvatar($oBlog->getAvatar());
                     $this->UpdateBlog($oBlog);
                 }
             }
         }
         return $oBlog;
     }
     return false;
 }
Esempio n. 21
0
 /**
  * AJAX загрузка изображения в фотосет
  *
  * @return bool
  */
 protected function EventAjaxPhotoUpload()
 {
     // Устанавливаем формат Ajax ответа. Здесь всегда json, поскольку грузится
     // картинка с помощью flash
     E::ModuleViewer()->SetResponseAjax('json', false);
     // * Проверяем авторизован ли юзер
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
         return false;
     }
     // * Файл был загружен?
     $aUploadedFile = $this->GetUploadedFile('Filedata');
     if (!$aUploadedFile) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         F::SysWarning('System Error');
         return false;
     }
     $iTopicId = intval(F::GetRequestStr('topic_id'));
     $sTargetId = null;
     // Если от сервера не пришёл ID топика, то пытаемся определить временный код для нового топика.
     // Если и его нет, то это ошибка
     if (!$iTopicId) {
         $sTargetId = E::ModuleSession()->GetCookie('ls_photoset_target_tmp');
         if (!$sTargetId) {
             $sTargetId = F::GetRequestStr('ls_photoset_target_tmp');
         }
         if (!$sTargetId) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             F::SysWarning('System Error');
             return false;
         }
         $iCountPhotos = E::ModuleTopic()->GetCountPhotosByTargetTmp($sTargetId);
     } else {
         // * Загрузка фото к уже существующему топику
         $oTopic = E::ModuleTopic()->GetTopicById($iTopicId);
         if (!$oTopic || !E::ModuleACL()->IsAllowEditTopic($oTopic, $this->oUserCurrent)) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             F::SysWarning('System Error');
             return false;
         }
         $iCountPhotos = E::ModuleTopic()->GetCountPhotosByTopicId($iTopicId);
     }
     // * Максимальное количество фото в топике
     if (Config::Get('module.topic.photoset.count_photos_max') && $iCountPhotos >= Config::Get('module.topic.photoset.count_photos_max')) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_photoset_error_too_much_photos', array('MAX' => Config::Get('module.topic.photoset.count_photos_max'))), E::ModuleLang()->Get('error'));
         return false;
     }
     // * Максимальный размер фото
     if (filesize($aUploadedFile['tmp_name']) > Config::Get('module.topic.photoset.photo_max_size') * 1024) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_photoset_error_bad_filesize', array('MAX' => Config::Get('module.topic.photoset.photo_max_size'))), E::ModuleLang()->Get('error'));
         return false;
     }
     // * Загружаем файл
     $sFile = E::ModuleTopic()->UploadTopicPhoto($aUploadedFile);
     if ($sFile) {
         // * Создаем фото
         $oPhoto = E::GetEntity('Topic_TopicPhoto');
         $oPhoto->setPath($sFile);
         if ($iTopicId) {
             $oPhoto->setTopicId($iTopicId);
         } else {
             $oPhoto->setTargetTmp($sTargetId);
         }
         if ($oPhoto = E::ModuleTopic()->AddTopicPhoto($oPhoto)) {
             // * Если топик уже существует (редактирование), то обновляем число фотографий в нём
             if (isset($oTopic)) {
                 $oTopic->setPhotosetCount($oTopic->getPhotosetCount() + 1);
                 E::ModuleTopic()->UpdateTopic($oTopic);
             }
             E::ModuleViewer()->AssignAjax('file', $oPhoto->getWebPath('100crop'));
             E::ModuleViewer()->AssignAjax('id', $oPhoto->getId());
             E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('topic_photoset_photo_added'), E::ModuleLang()->Get('attention'));
             return true;
         } else {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
             F::SysWarning('System Error');
         }
     } else {
         $sMsg = E::ModuleTopic()->UploadPhotoError();
         if (!$sMsg) {
             $sMsg = E::ModuleLang()->Get('system_error');
         }
         E::ModuleMessage()->AddError($sMsg, E::ModuleLang()->Get('error'));
     }
     return false;
 }
Esempio n. 22
0
 /**
  * Запускает весь процесс :)
  *
  */
 public function Exec()
 {
     $this->ParseUrl();
     $this->DefineActionClass();
     // Для возможности ДО инициализации модулей определить какой action/event запрошен
     $this->oEngine = E::getInstance();
     $this->oEngine->Init();
     // Подгружаем предыдущий URL, если он был
     $sData = E::ModuleSession()->GetCookie(static::BACKWARD_COOKIE);
     if ($sData) {
         $aData = F::Unserialize($sData);
         if (is_array($aData)) {
             $this->aBackwardUrl = $aData;
         }
     }
     // И сохраняем текущий, если это не ajax-запрос
     if (!F::AjaxRequest()) {
         E::ModuleSession()->SetCookie(static::BACKWARD_COOKIE, F::Serialize($this->aCurrentUrl, true));
     }
     $this->ExecAction();
     $this->Shutdown(false);
 }