/** * Валидация пользователя * * @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'); }
/** * 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; }
/** * Запуск обработки */ 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; } } }
/** * Инициализация экшена */ public function Init() { /** * Проверяем авторизован ли юзер */ $this->oUserCurrent = E::ModuleUser()->GetUserCurrent(); $this->SetDefaultEvent('file'); }
/** * Получение сведений о пользователе * @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']); } }
/** * @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']); } } }
/** * Запуск обработки */ 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']); } }
/** * Запуск обработки */ 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']); } }
/** * Метод осуществляет обработку сниппета вставки имени * пользователя. * * @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']; }
/** * Обработка хука инициализации экшенов */ 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; }
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); } }
/** * Список пользователей (с кешированием) * * @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; }
/** * Запуск обработки */ 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); } }
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; }
/** * Обработка дополнительных полей топика * * @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; }
/** * Отображение списка блогов */ 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'); }
/** * Формирование процесса смены емайла в профиле пользователя * * @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; }
/** * 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; }
/** * Выполняется при завершении работы экшена * */ 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'); }
/** * Получает список пользователей * * @param array $aIds Список ID пользователей * * @return array */ protected function loadRelatedUser($aIds) { return E::ModuleUser()->GetUsersAdditionalData($aIds); }
/** * @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; }
/** * Протоколирование запросов * * @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); }
/** * Плагин для смарти. * Позволяет получать дату с возможностью склонения * формы слова и поддержкой мультиязычноти. * * Список ключей параметров: * 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); }
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; }