Esempio n. 1
0
 /**
  * Валидация пользователя
  *
  * @param string $sValue     Значение
  * @param array  $aParams    Параметры
  *
  * @return bool
  */
 public function ValidateTarget($sValue, $aParams)
 {
     if (($oUserTarget = E::ModuleUser()->GetUserById($sValue)) && $this->getUserId() != $oUserTarget->getId()) {
         return true;
     }
     return E::ModuleLang()->Get('user_note_target_error');
 }
Esempio n. 2
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. 3
0
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     // Статистика кто, где и т.п.
     $aPeopleStats = E::ModuleUser()->GetStatUsers();
     // Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('aPeopleStats', $aPeopleStats);
 }
 protected function SubmitComment()
 {
     /**
      * Проверям авторизован ли пользователь
      */
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     $xResult = E::Module('PluginMagicrules\\Rule')->CheckRuleAction('create_comment', $this->oUserCurrent);
     if (true === $xResult) {
         $xResult = E::Module('PluginMagicrules\\Rule')->CheckRuleCreateAction('comment', $this->oUserCurrent);
     }
     if (true === $xResult) {
         return parent::SubmitComment();
     } else {
         if (is_string($xResult)) {
             E::ModuleMessage()->AddErrorSingle($xResult, E::ModuleLang()->Get('attention'));
             return;
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('plugin.magicrules.check_rule_action_error'), E::ModuleLang()->Get('attention'));
             return;
         }
     }
 }
Esempio n. 5
0
 /**
  * Инициализация экшена
  */
 public function Init()
 {
     /**
      * Проверяем авторизован ли юзер
      */
     $this->oUserCurrent = E::ModuleUser()->GetUserCurrent();
     $this->SetDefaultEvent('file');
 }
Esempio n. 6
0
 /**
  * Получение сведений о пользователе
  * @param string $aParams Идентификатор пользователя
  * @return bool|array
  */
 public function ApiUserIdInfo($aParams)
 {
     /** @var ModuleUser_EntityUser $oUser */
     if (!($oUser = E::ModuleUser()->GetUserById($aParams['uid']))) {
         return FALSE;
     }
     return $this->_PrepareResult(array('oUser' => $oUser), array('id' => $oUser->getId(), 'login' => $oUser->getLogin(), 'name' => $oUser->getDisplayName(), 'sex' => $oUser->getProfileSex(), 'role' => $oUser->getRole(), 'avatar' => $oUser->getProfileAvatar(), 'photo' => $oUser->getProfilePhoto(), 'about' => $oUser->getProfileAbout(), 'birthday' => $oUser->getProfileBirthday(), 'vote' => $oUser->getVote(), 'skill' => $oUser->getSkill(), 'rating' => $oUser->getRating(), 'is_friend' => $oUser->getUserIsFriend(), 'profile' => $oUser->getUserWebPath(), 'country' => $oUser->getProfileCountry(), 'city' => $oUser->getProfileCity(), 'region' => $oUser->getProfileRegion()));
 }
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     /**
      * пользователь авторизован?
      */
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         // * Получаем и прогружаем необходимые переменные в шаблон
         $aTypesList = E::ModuleStream()->GetTypesList($oUserCurrent->getId());
         E::ModuleViewer()->Assign('aStreamTypesList', $aTypesList ? $aTypesList : array());
     }
 }
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     // * пользователь авторизован?
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         // * Получаем и прогружаем необходимые переменные в шаблон
         $aUserSubscribes = E::ModuleStream()->GetUserSubscribes($oUserCurrent->getId());
         E::ModuleViewer()->Assign('aStreamSubscribedUsers', $aUserSubscribes ? $aUserSubscribes : array());
         // issue#449, список друзей пользователя не передавался в шаблон
         $aStreamFriends = E::ModuleUser()->GetUsersFriend($oUserCurrent->getId());
         E::ModuleViewer()->Assign('aStreamFriends', $aStreamFriends['collection']);
     }
 }
Esempio n. 9
0
 /**
  * @param int $iPageNum
  * @param int $iPageSize
  *
  * @return array
  */
 public function getList($iPageNum, $iPageSize)
 {
     $aFilter = array('session.session_exit' => false);
     $aOrder = array('session.session_date_last' => 'desc');
     $aUsers = E::ModuleUser()->GetUsersByFilter($aFilter, $aOrder, $iPageNum, $iPageSize);
     $aResult = array('total' => $aUsers['count'], 'list' => array());
     /** @var PluginAltoApi_ModuleApiUsers_EntityUser $oUser */
     foreach ($aUsers['collection'] as $oUser) {
         $aResult['list'][] = $oUser->getApiData();
     }
     return $aResult;
 }
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     /**
      * пользователь авторизован?
      */
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         // * Получаем и прогружаем необходимые переменные в шаблон
         $aFriends = E::ModuleUser()->GetUsersFriend($oUserCurrent->getId());
         if ($aFriends) {
             E::ModuleViewer()->Assign('aStreamFriends', $aFriends['collection']);
         }
     }
 }
Esempio n. 11
0
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     // * пользователь авторизован?
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         // * Получаем и прогружаем необходимые переменные в шаблон
         $aTypesList = E::ModuleStream()->GetTypesList($oUserCurrent->getId());
         $aUserSubscribes = E::ModuleStream()->GetUserSubscribes($oUserCurrent->getId());
         $aFriends = E::ModuleUser()->GetUsersFriend($oUserCurrent->getId());
         E::ModuleViewer()->Assign('aStreamTypesList', $aTypesList);
         E::ModuleViewer()->Assign('aStreamSubscribedUsers', $aUserSubscribes);
         E::ModuleViewer()->Assign('aStreamFriends', $aFriends['collection']);
     }
 }
Esempio n. 12
0
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     /**
      * Пользователь авторизован?
      */
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         /**
          * Получаем необходимые переменные и передаем в шаблон
          */
         $aUserSubscribes = E::ModuleUserfeed()->GetUserSubscribes($oUserCurrent->getId());
         $aFriends = E::ModuleUser()->GetUsersFriend($oUserCurrent->getId());
         E::ModuleViewer()->Assign('aUserfeedSubscribedUsers', $aUserSubscribes['users']);
         E::ModuleViewer()->Assign('aUserfeedFriends', $aFriends['collection']);
     }
 }
Esempio n. 13
0
 /**
  * Метод осуществляет обработку сниппета вставки имени
  * пользователя.
  *
  * @param array $aData
  *
  * @return bool|string
  */
 public function SnippetUser($aData)
 {
     // Получим параметры, собственно, он тут единственный - это
     // имя пользователя которое и добавляем
     if (!($sUserLogin = isset($aData['params']['login']) ? $aData['params']['login'] : FALSE)) {
         return FALSE;
     }
     $aVars = array('sUserLogin' => $sUserLogin);
     // Если пользователь найден, то вернём ссылку на него
     if (is_string($sUserLogin) && ($oUser = E::ModuleUser()->GetUserByLogin($sUserLogin))) {
         $aVars['oUser'] = $oUser;
     }
     // Получим html-код сниппета
     $aData['result'] = trim(E::ModuleViewer()->Fetch('tpls/snippets/snippet.user.tpl', $aVars));
     return $aData['result'];
 }
Esempio n. 14
0
 /**
  * Обработка хука инициализации экшенов
  */
 public function InitAction()
 {
     // * Проверяем наличие директории install
     if (is_dir(rtrim(Config::Get('path.root.dir'), '/') . '/install') && (!isset($_SERVER['HTTP_APP_ENV']) || $_SERVER['HTTP_APP_ENV'] != 'test')) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('install_directory_exists'));
         R::Action('error');
     }
     // * Проверка на закрытый режим
     $oUserCurrent = E::ModuleUser()->GetUserCurrent();
     if (!$oUserCurrent && Config::Get('general.close.mode')) {
         $aEnabledActions = F::Str2Array(Config::Get('general.close.actions'));
         if (!in_array(R::GetAction(), $aEnabledActions)) {
             return R::Action('login');
         }
     }
     return null;
 }
Esempio n. 15
0
 public function Exec()
 {
     // For authorized users only
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         $aUserSubscribes = E::ModuleUserfeed()->GetUserSubscribes($oUserCurrent->getId());
         // Get ID list of blogs to which you subscribe
         $aBlogsId = E::ModuleBlog()->GetBlogUsersByUserId($oUserCurrent->getId(), array(ModuleBlog::BLOG_USER_ROLE_USER, ModuleBlog::BLOG_USER_ROLE_MODERATOR, ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR), true);
         // Get ID list of blogs where the user is the owner
         $aBlogsOwnerId = E::ModuleBlog()->GetBlogsByOwnerId($oUserCurrent->getId(), true);
         $aBlogsId = array_merge($aBlogsId, $aBlogsOwnerId);
         $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aBlogsId, array('owner' => array()), array('blog_title' => 'asc'));
         /**
          * Выводим в шаблон
          */
         E::ModuleViewer()->Assign('aUserfeedSubscribedBlogs', $aUserSubscribes['blogs']);
         E::ModuleViewer()->Assign('aUserfeedBlogs', $aBlogs);
     }
 }
Esempio n. 16
0
 /**
  * Список пользователей (с кешированием)
  *
  * @param integer $iPage
  *
  * @return array
  */
 public function getUsersForSitemap($iPage)
 {
     $iPerPage = C::Get('plugin.sitemap.users_per_page');
     $sCacheKey = "sitemap_users_{$iPage}_{$iPerPage}";
     if (false === ($aData = E::ModuleCache()->Get($sCacheKey))) {
         $aFilter = array('activate' => 1);
         $aUsers = E::ModuleUser()->GetUsersByFilter($aFilter, array(), $iPage, $iPerPage);
         $aData = array();
         /** @var ModuleUser_EntityUser $oUser */
         foreach ($aUsers['collection'] as $oUser) {
             // профиль пользователя
             $aData[] = E::ModuleSitemap()->GetDataForSitemapRow($oUser->getProfileUrl(), $oUser->getDateLastMod(), C::Get('plugin.sitemap.type.users.profile.changefreq'), C::Get('plugin.sitemap.type.users.profile.priority'));
             // публикации пользователя
             $aData[] = E::ModuleSitemap()->GetDataForSitemapRow($oUser->getUserTopicsLink(), null, C::Get('plugin.sitemap.type.users.my.changefreq'), C::Get('plugin.sitemap.type.users.my.priority'));
             // комментарии пользователя
             $aData[] = E::ModuleSitemap()->GetDataForSitemapRow($oUser->getUserCommentsLink(), $oUser->getDateCommentLast(), C::Get('plugin.sitemap.type.users.comments.changefreq'), C::Get('plugin.sitemap.type.users.comments.priority'));
             E::ModuleCache()->Set($aData, $sCacheKey, array('user_new', 'user_update'), C::Get('plugin.sitemap.type.users.cache_lifetime'));
         }
     }
     return $aData;
 }
Esempio n. 17
0
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     $iLimit = C::Val('widgets.tags.params.limit', 70);
     // * Получаем список тегов
     $aTags = E::ModuleTopic()->GetOpenTopicTags($iLimit);
     // * Расчитываем логарифмическое облако тегов
     if ($aTags) {
         E::ModuleTools()->MakeCloud($aTags);
         // * Устанавливаем шаблон вывода
         E::ModuleViewer()->Assign('aTags', $aTags);
     }
     // * Теги пользователя
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         $aTags = E::ModuleTopic()->GetOpenTopicTags($iLimit, $oUserCurrent->getId());
         // * Расчитываем логарифмическое облако тегов
         if ($aTags) {
             E::ModuleTools()->MakeCloud($aTags);
             // * Устанавливаем шаблон вывода
             E::ModuleViewer()->Assign('aTagsUser', $aTags);
         }
     }
 }
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     // * Пользователь авторизован?
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         if (!($oUser = $this->getParam('user'))) {
             $oUser = $oUserCurrent;
         }
         // * Получаем список тегов
         $aTags = E::ModuleFavourite()->GetGroupTags($oUser->getId(), 'topic', false, 70);
         // * Расчитываем логарифмическое облако тегов
         E::ModuleTools()->MakeCloud($aTags);
         // * Устанавливаем шаблон вывода
         E::ModuleViewer()->Assign('aFavouriteTopicTags', $aTags);
         // * Получаем список тегов пользователя
         $aTags = E::ModuleFavourite()->GetGroupTags($oUser->getId(), 'topic', true, 70);
         // * Расчитываем логарифмическое облако тегов
         E::ModuleTools()->MakeCloud($aTags);
         // * Устанавливаем шаблон вывода
         E::ModuleViewer()->Assign('aFavouriteTopicUserTags', $aTags);
         E::ModuleViewer()->Assign('oFavouriteUser', $oUser);
     }
 }
 /**
  * Запуск обработки
  */
 public function Exec()
 {
     /**
      * Пользователь авторизован?
      */
     if ($oUserCurrent = E::ModuleUser()->GetUserCurrent()) {
         $aUserSubscribes = E::ModuleUserfeed()->GetUserSubscribes($oUserCurrent->getId());
         /**
          * Получаем список ID блогов, в которых состоит пользователь
          */
         $aBlogsId = E::ModuleBlog()->GetBlogUsersByUserId($oUserCurrent->getId(), array(ModuleBlog::BLOG_USER_ROLE_USER, ModuleBlog::BLOG_USER_ROLE_MODERATOR, ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR), true);
         /**
          * Получаем список ID блогов, которые создал пользователь
          */
         $aBlogsOwnerId = E::ModuleBlog()->GetBlogsByOwnerId($oUserCurrent->getId(), true);
         $aBlogsId = array_merge($aBlogsId, $aBlogsOwnerId);
         $aBlogs = E::ModuleBlog()->GetBlogsAdditionalData($aBlogsId, array('owner' => array()), array('blog_title' => 'asc'));
         /**
          * Выводим в шаблон
          */
         E::ModuleViewer()->Assign('aUserfeedSubscribedBlogs', $aUserSubscribes['blogs']);
         E::ModuleViewer()->Assign('aUserfeedBlogs', $aBlogs);
     }
 }
Esempio n. 20
0
 protected function _eventRecoverySend($sRecoveryCode)
 {
     /** @var ModuleUser_EntityReminder $oReminder */
     if ($oReminder = E::ModuleUser()->GetReminderByCode($sRecoveryCode)) {
         /** @var ModuleUser_EntityUser $oUser */
         if ($oReminder->IsValid() && ($oUser = E::ModuleUser()->GetUserById($oReminder->getUserId()))) {
             $sNewPassword = F::RandomStr(7);
             $oUser->setPassword($sNewPassword, true);
             if (E::ModuleUser()->Update($oUser)) {
                 // Do logout of current user
                 E::ModuleUser()->Logout();
                 // Close all sessions of this user
                 E::ModuleUser()->CloseAllSessions($oUser);
                 $oReminder->setDateUsed(F::Now());
                 $oReminder->setIsUsed(1);
                 E::ModuleUser()->UpdateReminder($oReminder);
                 E::ModuleNotify()->SendReminderPassword($oUser, $sNewPassword);
                 $this->SetTemplateAction('reminder_confirm');
                 if (($sUrl = F::GetPost('return_url')) || ($sUrl = F::GetPost('return-path'))) {
                     E::ModuleViewer()->Assign('return-path', $sUrl);
                 }
                 return true;
             }
         }
     }
     return false;
 }
Esempio n. 21
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. 22
0
 /**
  * Отображение списка блогов
  */
 protected function EventShowBlogs()
 {
     // * По какому полю сортировать
     $sOrder = F::GetRequestStr('order', 'blog_rating');
     // * В каком направлении сортировать
     $sOrderWay = F::GetRequestStr('order_way', 'desc');
     // * Фильтр поиска блогов
     $aFilter = array('include_type' => E::ModuleBlog()->GetAllowBlogTypes(E::ModuleUser()->GetUserCurrent(), 'list', true));
     // * Передан ли номер страницы
     $iPage = preg_match('/^\\d+$/i', $this->GetEventMatch(2)) ? $this->GetEventMatch(2) : 1;
     // * Получаем список блогов
     $aResult = E::ModuleBlog()->GetBlogsByFilter($aFilter, $sOrder == 'blog_title' ? array('blog_title' => $sOrderWay) : array($sOrder => $sOrderWay, 'blog_title' => 'asc'), $iPage, Config::Get('module.blog.per_page'));
     $aBlogs = $aResult['collection'];
     // * Формируем постраничность
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.blog.per_page'), Config::Get('pagination.pages.count'), R::GetPath('blogs'), array('order' => $sOrder, 'order_way' => $sOrderWay));
     //  * Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('aPaging', $aPaging);
     E::ModuleViewer()->Assign('aBlogs', $aBlogs);
     E::ModuleViewer()->Assign('sBlogOrder', htmlspecialchars($sOrder));
     E::ModuleViewer()->Assign('sBlogOrderWay', htmlspecialchars($sOrderWay));
     E::ModuleViewer()->Assign('sBlogOrderWayNext', $sOrderWay == 'desc' ? 'asc' : 'desc');
     E::ModuleViewer()->Assign('sShow', 'collective');
     E::ModuleViewer()->Assign('sBlogsRootPage', R::GetPath('blogs'));
     // * Устанавливаем title страницы
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('blog_menu_all_list'));
     // * Устанавливаем шаблон вывода
     $this->SetTemplateAction('index');
 }
Esempio n. 23
0
 /**
  * Формирование процесса смены емайла в профиле пользователя
  *
  * @param ModuleUser_EntityUser $oUser       Объект пользователя
  * @param string                $sMailNew    Новый емайл
  *
  * @return bool|ModuleUser_EntityChangemail
  */
 public function MakeUserChangemail($oUser, $sMailNew)
 {
     /** @var ModuleUser_EntityChangemail $oChangemail */
     $oChangemail = E::GetEntity('ModuleUser_EntityChangemail');
     $oChangemail->setUserId($oUser->getId());
     $oChangemail->setDateAdd(date('Y-m-d H:i:s'));
     $oChangemail->setDateExpired(date('Y-m-d H:i:s', time() + 3 * 24 * 60 * 60));
     // 3 дня для смены емайла
     $oChangemail->setMailFrom($oUser->getMail() ? $oUser->getMail() : '');
     $oChangemail->setMailTo($sMailNew);
     $oChangemail->setCodeFrom(F::RandomStr(32));
     $oChangemail->setCodeTo(F::RandomStr(32));
     if ($this->AddUserChangemail($oChangemail)) {
         // * Если у пользователя раньше не было емайла, то сразу шлем подтверждение на новый емайл
         if (!$oChangemail->getMailFrom()) {
             $oChangemail->setConfirmFrom(1);
             E::ModuleUser()->UpdateUserChangemail($oChangemail);
             // * Отправляем уведомление на новый емайл
             E::ModuleNotify()->Send($oChangemail->getMailTo(), 'user_changemail_to.tpl', E::ModuleLang()->Get('notify_subject_user_changemail'), array('oUser' => $oUser, 'oChangemail' => $oChangemail), null, true);
         } else {
             // * Отправляем уведомление на старый емайл
             E::ModuleNotify()->Send($oUser, 'user_changemail_from.tpl', E::ModuleLang()->Get('notify_subject_user_changemail'), array('oUser' => $oUser, 'oChangemail' => $oChangemail), null, true);
         }
         return $oChangemail;
     }
     return false;
 }
Esempio n. 24
0
 /**
  * Return total number of pages of the sitemap type
  *
  * @param string $sType
  *
  * @return int
  */
 protected function _getSitemapCount($sType)
 {
     $iPerPage = C::Get('plugin.sitemap.items_per_page');
     switch ($sType) {
         case 'general':
             $iCount = 1;
             break;
         case 'topics':
             $iCount = (int) ceil(E::ModuleTopic()->GetTopicsCountForSitemap() / $iPerPage);
             break;
         case 'blogs':
             $iCount = (int) ceil(E::ModuleBlog()->GetBlogsCountForSitemap() / $iPerPage);
             break;
         case 'users':
             $iCount = (int) ceil(E::ModuleUser()->GetUsersCountForSitemap() / C::Get('plugin.sitemap.users_per_page'));
             break;
         default:
             $iCount = 1;
     }
     return $iCount;
 }
Esempio n. 25
0
 /**
  * Выполняется при завершении работы экшена
  *
  */
 public function EventShutdown()
 {
     $iCountTopicFavourite = E::ModuleTopic()->GetCountTopicsFavouriteByUserId($this->oUserCurrent->getId());
     $iCountTopicUser = E::ModuleTopic()->GetCountTopicsPersonalByUser($this->oUserCurrent->getId(), 1);
     $iCountCommentUser = E::ModuleComment()->GetCountCommentsByUserId($this->oUserCurrent->getId(), 'topic');
     $iCountCommentFavourite = E::ModuleComment()->GetCountCommentsFavouriteByUserId($this->oUserCurrent->getId());
     $iCountNoteUser = E::ModuleUser()->GetCountUserNotesByUserId($this->oUserCurrent->getId());
     E::ModuleViewer()->Assign('oUserProfile', $this->oUserCurrent);
     E::ModuleViewer()->Assign('iCountWallUser', E::ModuleWall()->GetCountWall(array('wall_user_id' => $this->oUserCurrent->getId(), 'pid' => null)));
     // * Общее число публикация и избранного
     E::ModuleViewer()->Assign('iCountTopicUser', $iCountTopicUser);
     E::ModuleViewer()->Assign('iCountCommentUser', $iCountCommentUser);
     E::ModuleViewer()->Assign('iCountTopicFavourite', $iCountTopicFavourite);
     E::ModuleViewer()->Assign('iCountCommentFavourite', $iCountCommentFavourite);
     E::ModuleViewer()->Assign('iCountNoteUser', $iCountNoteUser);
     E::ModuleViewer()->Assign('iCountCreated', $iCountNoteUser + $iCountTopicUser + $iCountCommentUser);
     E::ModuleViewer()->Assign('iCountFavourite', $iCountCommentFavourite + $iCountTopicFavourite);
     E::ModuleViewer()->Assign('iCountFriendsUser', E::ModuleUser()->GetCountUsersFriend($this->oUserCurrent->getId()));
     // * Загружаем в шаблон необходимые переменные
     E::ModuleViewer()->Assign('sMenuItemSelect', $this->sMenuItemSelect);
     E::ModuleViewer()->Assign('sMenuSubItemSelect', $this->sMenuSubItemSelect);
     E::ModuleHook()->Run('action_shutdown_settings');
 }
Esempio n. 26
0
 /**
  * Получает список пользователей
  *
  * @param array $aIds    Список  ID пользователей
  *
  * @return array
  */
 protected function loadRelatedUser($aIds)
 {
     return E::ModuleUser()->GetUsersAdditionalData($aIds);
 }
Esempio n. 27
0
 /**
  * @return bool
  */
 public function IsBannedByIp()
 {
     // return ($this->GetProp('ban_ip'));
     // issue 258 {@link https://github.com/altocms/altocms/issues/258}
     $bResult = $this->GetProp('ban_ip');
     if (is_null($bResult)) {
         $bResult = (bool) E::ModuleUser()->IpIsBanned(F::GetUserIp());
         $this->setProp('ban_ip', $bResult);
     }
     return $bResult;
 }
Esempio n. 28
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. 29
0
/**
 * Плагин для смарти.
 * Позволяет получать дату с возможностью склонения
 * формы слова и поддержкой мультиязычноти.
 *
 * Список ключей параметров:
 *        date*          [string]
 *        format*        [string]
 *        declination*   [int]
 *        now*           [int]    Количество секунд, в течении которых событие имеет статус "Только что"
 *        day*           [string] Указывает на необходимость замены "Сегодня", "Вчера", "Завтра".
 *                                В указанном формате 'day' будет заменено на соответствующее значение.
 *        minutes_back*  [int]    Количество минут, в течении которых событие имеет статус "... минут назад"
 *        hours_back*    [int]    Количество часов, в течении которых событие имеет статус "... часов назад"
 *        tz*            [float]  Временная зона
 *        notz*          [bool]   Не учитывать зону
 *
 * (* - параметр является необязательным)
 *
 * @param   array  $aParams
 * @param   Smarty $oSmarty
 *
 * @return  string
 */
function smarty_function_date_format($aParams, &$oSmarty)
{
    $sFormatDefault = 'd F Y, H:i';
    //  формат даты по умолчанию
    $iDeclinationDefault = 1;
    //  индекс склонения по умолчанию
    /**
     * Текущая дата и сдвиг времени для пользователя
     */
    $iTz = false;
    if (!isset($aParams['notz'])) {
        if (isset($aParams['tz'])) {
            $iTz = $aParams['tz'];
        }
        if ($iTz === false) {
            if (($oUserCurrent = E::ModuleUser()->GetUserCurrent()) && $oUserCurrent->getSettingsTimezone()) {
                $iTz = $oUserCurrent->getSettingsTimezone();
            }
        }
    }
    if ($iTz !== false) {
        $iDiff = (date('I') + $iTz - (strtotime(date('Y-m-d H:i:s')) - strtotime(gmdate('Y-m-d H:i:s'))) / 3600) * 3600;
    } else {
        $iDiff = 0;
        // пользователю показываем время от зоны из основного конфига
    }
    $iNow = time() + $iDiff;
    /**
     * Определяем дату
     */
    $sDate = empty($aParams['date']) ? time() : $aParams['date'];
    $iDeclination = !isset($aParams['declination']) ? $iDeclinationDefault : $aParams['declination'];
    $sFormat = empty($aParams['format']) ? $sFormatDefault : $aParams['format'];
    /**
     * Если указан другой язык, подгружаем его
     */
    if (isset($aParams['lang']) && $aParams['lang'] != E::ModuleLang()->GetLang()) {
        E::ModuleLang()->SetLang($aParams['lang']);
    }
    $aMonth = E::ModuleLang()->Get('month_array');
    $iDate = preg_match("/^\\d+\$/", $sDate) ? $sDate : strtotime($sDate);
    $iDate += $iDiff;
    /**
     * Если указана необходимость выполнять проверку на NOW
     */
    if (isset($aParams['now'])) {
        if ($iDate + $aParams['now'] > $iNow) {
            return E::ModuleLang()->Get('date_now');
        }
    }
    /**
     * Если указана необходимость на проверку minutes back
     */
    if (isset($aParams['minutes_back'])) {
        require_once 'modifier.declension.php';
        $iTimeDelta = round(($iNow - $iDate) / 60);
        if ($iTimeDelta < $aParams['minutes_back']) {
            return $iTimeDelta != 0 ? smarty_modifier_declension($iTimeDelta, E::ModuleLang()->Get('date_minutes_back', array('minutes' => $iTimeDelta)), E::ModuleLang()->GetLang()) : E::ModuleLang()->Get('date_minutes_back_less');
        }
    }
    /**
     * Если указана необходимость на проверку minutes back
     */
    if (isset($aParams['hours_back'])) {
        require_once 'modifier.declension.php';
        $iTimeDelta = round(($iNow - $iDate) / (60 * 60));
        if ($iTimeDelta < $aParams['hours_back']) {
            return $iTimeDelta != 0 ? smarty_modifier_declension($iTimeDelta, E::ModuleLang()->Get('date_hours_back', array('hours' => $iTimeDelta)), E::ModuleLang()->GetLang()) : E::ModuleLang()->Get('date_hours_back_less');
        }
    }
    /**
     * Если указана необходимость автоподстановки "Сегодня", "Вчера", "Завтра".
     */
    if (isset($aParams['day']) && $aParams['day']) {
        switch (date('Y-m-d', $iDate)) {
            /**
             * Если дата совпадает с сегодняшней
             */
            case date('Y-m-d'):
                $sDay = E::ModuleLang()->Get('date_today');
                break;
                /**
                 * Если дата совпадает со вчерашней
                 */
            /**
             * Если дата совпадает со вчерашней
             */
            case date('Y-m-d', mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))):
                $sDay = E::ModuleLang()->Get('date_yesterday');
                break;
                /**
                 * Если дата совпадает с завтрашней
                 */
            /**
             * Если дата совпадает с завтрашней
             */
            case date('Y-m-d', mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"))):
                $sDay = E::ModuleLang()->Get('date_tomorrow');
                break;
            default:
                $sDay = null;
        }
        if ($sDay) {
            $sFormat = str_replace("day", preg_replace("#(\\w{1})#", '\\\\${1}', $sDay), $aParams['day']);
            return date($sFormat, $iDate);
        }
    }
    /**
     * Определяем нужное текстовое значение названия месяца
     */
    $iMonth = date("n", $iDate);
    $sMonth = isset($aMonth[$iMonth]) ? $aMonth[$iMonth] : "";
    /**
     * Если не найден индекс склонения, берем склонене по умолчанию.
     * Если индекс по умолчанию также не определен, берем первое значение в массиве.
     */
    if (is_array($sMonth)) {
        $sMonth = isset($sMonth[$iDeclination]) ? $sMonth[$iDeclination] : $sMonth[$iDeclinationDefault];
    }
    $sFormat = preg_replace("~(?<!\\\\)F~U", preg_replace('~(\\w{1})~u', '\\\\${1}', $sMonth), $sFormat);
    return date($sFormat, $iDate);
}
Esempio n. 30
0
 public function CallbackTagAt($sString)
 {
     $sText = '';
     if ($sString) {
         if ($oUser = E::ModuleUser()->GetUserByLogin($sString)) {
             if (E::ModuleViewer()->TemplateExists('tpls/snippets/snippet.user.tpl')) {
                 // Получим html-код сниппета
                 $aVars = array('oUser' => $oUser);
                 $sText = trim(E::ModuleViewer()->Fetch('tpls/snippets/snippet.user.tpl', $aVars));
             } else {
                 $sText = "<a href=\"{$oUser->getProfileUrl()}\">{$oUser->getDisplayName()}</a> ";
             }
         }
     }
     return $sText;
 }