/** * Поиск блогов по названию */ protected function EventAjaxSearch() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); // * Получаем из реквеста первые буквы блога if ($sTitle = F::GetRequestStr('blog_title')) { $sTitle = str_replace('%', '', $sTitle); } if (!$sTitle) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); return; } // * Ищем блоги if (F::GetRequestStr('blog_type') == 'personal') { $aFilter = array('include_type' => 'personal'); } else { $aFilter = array('include_type' => E::ModuleBlog()->GetAllowBlogTypes(E::User(), 'list', true)); $aFilter['exclude_type'] = 'personal'; } $aFilter['title'] = "%{$sTitle}%"; $aFilter['order'] = array('blog_title' => 'asc'); $aResult = E::ModuleBlog()->GetBlogsByFilter($aFilter, 1, 100); // * Формируем и возвращаем ответ $aVars = array('aBlogs' => $aResult['collection'], 'oUserCurrent' => E::User(), 'sBlogsEmptyList' => E::ModuleLang()->Get('blogs_search_empty')); E::ModuleViewer()->AssignAjax('sText', E::ModuleViewer()->Fetch('commons/common.blog_list.tpl', $aVars)); }
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; } } }
/** * Поиск пользователей по логину * */ protected function EventAjaxSearch() { // Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); // Получаем из реквеста первые быквы для поиска пользователей по логину $sTitle = F::GetRequest('user_login'); if (is_string($sTitle) && mb_strlen($sTitle, 'utf-8')) { $sTitle = str_replace(array('_', '%'), array('\\_', '\\%'), $sTitle); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); return; } // Как именно искать: совпадение в любой части логина, или только начало или конец логина if (F::GetRequest('isPrefix')) { $sTitle .= '%'; } elseif (F::GetRequest('isPostfix')) { $sTitle = '%' . $sTitle; } else { $sTitle = '%' . $sTitle . '%'; } $aFilter = array('activate' => 1, 'login' => $sTitle); // Ищем пользователей $aResult = E::ModuleUser()->GetUsersByFilter($aFilter, array('user_rating' => 'desc'), 1, 50); // Формируем ответ $aVars = array('aUsersList' => $aResult['collection'], 'oUserCurrent' => E::ModuleUser()->GetUserCurrent(), 'sUserListEmpty' => E::ModuleLang()->Get('user_search_empty')); E::ModuleViewer()->AssignAjax('sText', E::ModuleViewer()->Fetch('commons/common.user_list.tpl', $aVars)); }
public function EventDownloadFile() { $this->SetTemplate(false); $sTopicId = $this->GetParam(0); $sFieldId = $this->GetParam(1); E::ModuleSecurity()->ValidateSendForm(); if (!($oTopic = E::ModuleTopic()->GetTopicById($sTopicId))) { return parent::EventNotFound(); } if (!($this->oType = E::ModuleTopic()->GetContentType($oTopic->getType()))) { return parent::EventNotFound(); } if (!($oField = E::ModuleTopic()->GetContentFieldById($sFieldId))) { return parent::EventNotFound(); } if ($oField->getContentId() != $this->oType->getContentId()) { return parent::EventNotFound(); } //получаем объект файла $oFile = $oTopic->getFieldFile($oField->getFieldId()); //получаем объект поля топика, содержащий данные о файле $oValue = $oTopic->getField($oField->getFieldId()); if ($oFile && $oValue) { if (preg_match("/^(http:\\/\\/)/i", $oFile->getFileUrl())) { $sFullPath = $oFile->getFileUrl(); R::Location($sFullPath); } else { $sFullPath = Config::Get('path.root.dir') . $oFile->getFileUrl(); } $sFilename = $oFile->getFileName(); /* * Обновляем данные */ $aFileObj = array(); $aFileObj['file_name'] = $oFile->getFileName(); $aFileObj['file_url'] = $oFile->getFileUrl(); $aFileObj['file_size'] = $oFile->getFileSize(); $aFileObj['file_extension'] = $oFile->getFileExtension(); $aFileObj['file_downloads'] = $oFile->getFileDownloads() + 1; $sText = serialize($aFileObj); $oValue->setValue($sText); $oValue->setValueSource($sText); //сохраняем E::ModuleTopic()->UpdateContentFieldValue($oValue); /* * Отдаем файл */ header('Content-type: ' . $oFile->getFileExtension()); header('Content-Disposition: attachment; filename="' . $sFilename . '"'); F::File_PrintChunked($sFullPath); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('content_download_file_error')); return R::Action('error'); } }
protected function EventAdd() { $xResult = E::Module('PluginMagicrules\\Rule')->CheckRuleAction('create_topic', $this->oUserCurrent); if ($xResult === true) { return parent::EventAdd(); } else { if (is_string($xResult)) { E::ModuleMessage()->AddErrorSingle($xResult, E::ModuleLang()->Get('attention')); return Router::Action('error'); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('plugin.magicrules.check_rule_action_error'), E::ModuleLang()->Get('attention')); return Router::Action('error'); } } }
/** * Добавление записи на стену */ public function EventWallAdd() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); // * Пользователь авторизован? if (!E::IsUser()) { return parent::EventNotFound(); } $xResult = E::Module('PluginMagicrules\\Rule')->CheckRuleAction('create_wall', E::User()); if ($xResult === true) { return parent::EventWallAdd(); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('plugin.magicrules.check_rule_action_error'), E::ModuleLang()->Get('attention')); return Router::Action('error'); } }
/** * Обработка хука инициализации экшенов */ 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; }
/** * Компилирует файл less и возвращает текст css-файла * * @param $aFile * @param $sCacheDir * @param $sMapPath * @param $aParams * @param $bCompress * @return string */ public function CompileFile($aFile, $sCacheDir, $sMapPath, $aParams, $bCompress) { if (!($sMapPath && $sCacheDir && $aFile)) { return ''; } try { $options = array('sourceMap' => TRUE, 'sourceMapWriteTo' => $sMapPath, 'sourceMapURL' => E::ModuleViewerAsset()->AssetFileUrl($sMapPath), 'cache_dir' => $sCacheDir); if ($bCompress) { $options = array_merge($options, array('compress' => TRUE)); } $sCssFileName = Less_Cache::Get($aFile, $options, $aParams); return file_get_contents($sCacheDir . $sCssFileName); } catch (Exception $e) { E::ModuleMessage()->AddErrorSingle($e->getMessage()); } return ''; }
/** * @return string|void */ protected function EventVoteUser() { // * Пользователь авторизован? if (!E::IsUser()) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error')); return; } $xResult = E::Module('PluginMagicrules\\Rule')->CheckRuleAction('vote_user', E::User(), array('vote_value' => (int) $this->getPost('value'))); if (true === $xResult) { return parent::EventVoteUser(); } else { if (is_string($xResult)) { E::ModuleMessage()->AddErrorSingle($xResult, E::ModuleLang()->Get('attention')); return Router::Action('error'); } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('plugin.magicrules.check_rule_action_error'), E::ModuleLang()->Get('attention')); return Router::Action('error'); } } }
protected function checkBlogFields($oBlog = null) { $bOk = parent::checkBlogFields($oBlog); if (!F::isPost('submit_blog_add')) { // Проверяем есть ли подзаголовок блога $iMin = C::Get('plugin.blogsubtitle.min_subtitle_len'); $iMax = C::Get('plugin.blogsubtitle.max_subtitle_len'); $sSubtitle = F::GetRequestStr('blog_subtitle'); if (!$sSubtitle && $iMin) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('plugin.blogsubtitle.blog_create_subtitle_error', array('min' => $iMin, 'max' => $iMax)), E::ModuleLang()->Get('error')); $bOk = false; } elseif ($iMax) { if (!F::CheckVal($sSubtitle, 'text', $iMin, $iMax)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('plugin.blogsubtitle.blog_create_subtitle_error', array('min' => $iMin, 'max' => $iMax)), E::ModuleLang()->Get('error')); $bOk = false; } } } return $bOk; }
/** * Вывод ошибки * */ protected function EventError() { /** * Если евент равен одной из ошибок из $aHttpErrors, то шлем браузеру специфичный header * Например, для 404 в хидере будет послан браузеру заголовок HTTP/1.1 404 Not Found */ if (array_key_exists($this->sCurrentEvent, $this->aHttpErrors)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error_' . $this->sCurrentEvent), $this->sCurrentEvent); $aHttpError = $this->aHttpErrors[$this->sCurrentEvent]; if (isset($aHttpError['header'])) { $sProtocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1'; header("{$sProtocol} {$aHttpError['header']}"); } } /** * Устанавливаем title страницы */ E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('error')); $this->SetTemplateAction('index'); }
/** * @return bool */ protected function CheckSeopackFields() { E::ModuleSecurity()->ValidateSendForm(); $bOk = true; if (F::isPost('title') && !F::CheckVal(F::GetRequest('title', null, 'post'), 'text', 0, 1000)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('plugin.seopack.title_error'), E::ModuleLang()->Get('error')); $bOk = false; } if (F::isPost('description') && !F::CheckVal(F::GetRequest('description', null, 'post'), 'text', 0, 1000)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('plugin.seopack.description_error'), E::ModuleLang()->Get('error')); $bOk = false; } if (F::isPost('keywords') && !F::CheckVal(F::GetRequest('keywords', null, 'post'), 'text', 0, 1000)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('plugin.seopack.keywords_error'), E::ModuleLang()->Get('error')); $bOk = false; } if (!F::CheckVal(F::GetRequest('url', null, 'post'), 'text', 0, 255)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('plugin.seopack.url_error'), E::ModuleLang()->Get('error')); $bOk = false; } return $bOk; }
/** * Разбор запроса * * @param null $sType * * @return mixed */ protected function _prepareRequest($sType = null) { $sRequest = trim(F::GetRequest('q')); // * Иногда ломается кодировка, напр., если ввели поиск в адресной строке браузера // * Пытаемся восстановить по основной кодировке браузера if (!mb_check_encoding($sRequest)) { list($sCharset) = explode(',', $_SERVER['HTTP_ACCEPT_CHARSET']); $sQueryString = mb_convert_encoding($_SERVER['QUERY_STRING'], 'UTF-8', $sCharset); $sRequest = mb_convert_encoding($sRequest, 'UTF-8', $sCharset); } if ($sRequest) { // Две звездочки подряд меняем на одну $sRequest = preg_replace('/(\\*{2,})/', '*', $sRequest); // Две пробела подряд меняем на один $sRequest = preg_replace('/(\\s{2,})/', ' ', $sRequest); // Последовательность звездочек и пробелов, начинающаяся со звездочки $sRequest = preg_replace('/\\*[\\*\\s]{2,}/', '* ', $sRequest); // Последовательность звездочек и пробелов, начинающаяся с пробела $sRequest = preg_replace('/\\s[\\*\\s]{2,}/', ' *', $sRequest); } $aReq['q'] = $sRequest; $aReq['regexp'] = preg_quote(trim(mb_strtolower($aReq['q']))); // * Проверка длины запроса if (!F::CheckVal($aReq['regexp'], 'text', Config::Get('module.search.min_length_req'), Config::Get('module.search.max_length_req'))) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('search_err_length', array('min' => Config::Get('module.search.min_length_req'), 'max' => Config::Get('module.search.max_length_req')))); $aReq['regexp'] = ''; } // Save quoted substrings $aQuoted = array(); if (preg_match_all('/"([^"]+)"/U', $aReq['regexp'], $aMatches)) { foreach ($aMatches[1] as $sStr) { $sSubstKey = 'begin-' . md5($sStr) . '-end'; $aQuoted[0][] = $sSubstKey; $aQuoted[1][] = $sStr; } $aReq['regexp'] = str_replace($aQuoted[1], $aQuoted[0], $aReq['regexp']); } /* * Проверка длины каждого слова в запросе * Хотя бы одно слово должно быть больше минимальной длины * Слова меньше минимальной длины исключаем из поиска */ if ($aReq['regexp']) { $aWords = explode(' ', $aReq['regexp']); $nErr = 0; $sStr = ''; foreach ($aWords as $sWord) { if (!F::CheckVal($sWord, 'text', Config::Get('module.search.min_length_req'), Config::Get('module.search.max_length_req'))) { $nErr += 1; } else { if ($sStr) { $sStr .= ' '; } $sStr .= $sWord; } } if ($nErr == sizeof($aWords)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('search_err_length_word', array('min' => Config::Get('module.search.min_length_req'), 'max' => Config::Get('module.search.max_length_req')))); $aReq['regexp'] = ''; } else { $aReq['regexp'] = $sStr; } } // * Если все нормально, формируем выражение для поиска if ($aReq['regexp']) { if ($this->bSearchStrict) { $aReq['regexp'] = str_replace('\\*', '*', $aReq['regexp']); /* * Проверка на "лишние" символы, оставляем только "слова" * На месте "небукв" оставляем пробелы */ $aReq['regexp'] = preg_replace('/' . $this->sPatternXA . '/iusxSU', ' ', $aReq['regexp']); $aReq['regexp'] = trim(preg_replace('/(\\s{2,})/', ' ', $aReq['regexp'])); // * Если после "чистки" что-то осталось, то продолжаем дальше if ($aReq['regexp']) { $aReq['regexp'] = str_replace('* *', '|', $aReq['regexp']); $aReq['regexp'] = str_replace('* ', '|[[:<:]]', $aReq['regexp']); $aReq['regexp'] = str_replace(' *', '[[:>:]]|', $aReq['regexp']); $aReq['regexp'] = str_replace(' ', '[[:>:]]|[[:<:]]', $aReq['regexp']); if (mb_substr($aReq['regexp'], 0, 1) == '*') { $aReq['regexp'] = mb_substr($aReq['regexp'], 1); } else { $aReq['regexp'] = '[[:<:]]' . $aReq['regexp']; } if (mb_substr($aReq['regexp'], -1) == '*') { $aReq['regexp'] = mb_substr($aReq['regexp'], 0, mb_strlen($aReq['regexp']) - 1); } else { $aReq['regexp'] = $aReq['regexp'] . '[[:>:]]'; } } } else { $aReq['regexp'] = preg_replace('/' . $this->sPatternXA . '/uU', '', $aReq['regexp']); $aReq['regexp'] = trim(preg_replace('/(\\s{2,})/', ' ', $aReq['regexp'])); $aReq['regexp'] = str_replace(' ', '|', $aReq['regexp']); } } // Restore quoted substrings if ($aReq['regexp'] && !empty($aQuoted[0])) { $aReq['regexp'] = str_replace($aQuoted[0], $aQuoted[1], $aReq['regexp']); } $aReq['params']['bSkipTags'] = false; if ($sType) { $aReq['sType'] = $sType; } else { $aReq['sType'] = 'topics'; } // * Определяем текущую страницу вывода результата $aReq['iPage'] = intval(preg_replace('#^page(\\d+)$#', '\\1', $this->getParam(0))); if (!$aReq['iPage']) { $aReq['iPage'] = 1; } return $aReq; }
/** * Меняет сортировку элементов фотосета */ public function EventSort() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); // Проверяем, целевой объект и права на его редактирование if (!($oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTargetType = F::GetRequest('target', FALSE), $sTargetId = F::GetRequest('target_id', FALSE)))) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error')); return; } if (!($aOrder = F::GetRequest('order', FALSE))) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error')); return; } if (!is_array($aOrder)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error')); return; } E::ModuleMresource()->UpdateSort(array_flip($aOrder), $sTargetType, $sTargetId); E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('uploader_sort_changed')); }
public function EventAjaxUserList() { E::ModuleViewer()->SetResponseAjax('json'); if ($this->IsPost()) { $sList = trim($this->GetPost('invite_listmail')); if ($aList = F::Array_Str2Array($sList, "\n", true)) { $iSentCount = 0; foreach ($aList as $iKey => $sMail) { if (F::CheckVal($sMail, 'mail')) { $oInvite = E::ModuleUser()->GenerateInvite($this->oUserCurrent); if (E::ModuleNotify()->SendInvite($this->oUserCurrent, $sMail, $oInvite)) { unset($aList[$iKey]); $iSentCount++; } } } E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.invaite_mail_done', array('num' => $iSentCount)), null, true); if ($aList) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.invaite_mail_err', array('num' => count($aList))), null, true); } } } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); } }
/** * Возвращает количество новых сообщений */ public function AjaxNewMessages() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); if (!$this->oUserCurrent) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error')); return; } $iCountTalkNew = E::ModuleTalk()->GetCountTalkNew($this->oUserCurrent->getId()); E::ModuleViewer()->AssignAjax('iCountTalkNew', $iCountTalkNew); }
/** * Распаковывает архив с плагином и перемещает его в нужную папку * * @param $sPackFile * * @return bool */ public function UnpackPlugin($sPackFile) { $zip = new ZipArchive(); if ($zip->open($sPackFile) === true) { $sUnpackDir = F::File_NormPath(dirname($sPackFile) . '/_unpack/'); if (!$zip->extractTo($sUnpackDir)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.err_extract_zip_file'), E::ModuleLang()->Get('error')); return false; } else { // Ищем в папках XML-манифест $aDirs = glob($sUnpackDir . '*', GLOB_ONLYDIR); $sXmlFile = ''; if ($aDirs) { foreach ($aDirs as $sDir) { if ($sXmlFile = $this->_seekManifest($sDir . '/')) { break; } } } if (!$sXmlFile) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.file_not_found', array('file' => self::PLUGIN_XML_FILE)), E::ModuleLang()->Get('error')); return false; } $sPluginSrc = dirname($sXmlFile); // try to define plugin's dirname $oXml = @simplexml_load_file($sXmlFile); if (!$oXml) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.err_read_xml', array('file' => $sXmlFile)), E::ModuleLang()->Get('error')); return false; } $sPluginDir = (string) $oXml->dirname; if (!$sPluginDir) { $sPluginDir = (string) $oXml->id; } if (!$sPluginDir) { $sPluginDir = basename($sPluginSrc); } $sPluginPath = $this->GetPluginsDir() . '/' . $sPluginDir . '/'; if (F::File_CopyDir($sPluginSrc, $sPluginPath)) { E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.plugin_added_ok')); } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.plugin_added_err'), E::ModuleLang()->Get('error')); } } $zip->close(); } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.err_open_zip_file'), E::ModuleLang()->Get('error')); } return true; }
/** * Поиск комментариев * */ function EventComments() { // * Ищем $aReq = $this->PrepareRequest(); $aRes = $this->PrepareResults($aReq, Config::Get('module.comment.per_page')); if (false === $aRes) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error')); return Router::Action('error'); } // * Если поиск дал результаты if ($this->bIsResults) { // * Получаем топик-объекты по списку идентификаторов $aComments = E::ModuleComment()->GetCommentsAdditionalData(array_keys($this->aSphinxRes['matches'])); // * Конфигурируем парсер $oTextParser = ModuleText::newTextParser('search'); $aErrors = array(); // * Делаем сниппеты /** @var ModuleComment_EntityComment $oComment */ foreach ($aComments as $oComment) { $oComment->setText($oTextParser->parse(E::ModuleSphinx()->GetSnippet(htmlspecialchars($oComment->getText()), 'comments', $aReq['q'], '<span class="searched-item">', '</span>'), $aErrors)); } /** * Отправляем данные в шаблон */ E::ModuleViewer()->Assign('aRes', $aRes); E::ModuleViewer()->Assign('aComments', $aComments); } }
/** * Обработка кода приглашения при включеном режиме инвайтов * */ protected function EventInvite() { if (!Config::Get('general.reg.invite')) { return parent::EventNotFound(); } // Обработка отправки формы с кодом приглашения if (F::isPost('submit_invite')) { // проверяем код приглашения на валидность if ($this->CheckInviteRegister()) { $sInviteCode = $this->GetInviteRegister(); } else { $sInviteCode = trim(F::GetRequestStr('invite_code')); } $oInvite = E::ModuleUser()->GetInviteByCode($sInviteCode); if ($oInvite) { if (!$this->CheckInviteRegister()) { E::ModuleSession()->Set('invite_code', $oInvite->getCode()); } return R::Action('registration'); } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('registration_invite_code_error'), E::ModuleLang()->Get('error')); } } }
/** * Отписка от блога или пользователя * */ protected function EventUnsubscribe() { // * Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); if (!F::GetRequest('id')) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } $sType = F::GetRequestStr('type'); $iType = null; // * Определяем от чего отписываемся switch ($sType) { case 'blogs': case 'blog': $iType = ModuleUserfeed::SUBSCRIBE_TYPE_BLOG; break; case 'users': case 'user': $iType = ModuleUserfeed::SUBSCRIBE_TYPE_USER; break; default: E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } // * Отписываем пользователя E::ModuleUserfeed()->UnsubscribeUser($this->oUserCurrent->getId(), $iType, F::GetRequestStr('id')); E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('userfeed_subscribes_updated'), E::ModuleLang()->Get('attention')); }
/** * Ответ на ajax запрос * * @param string $sType - Варианты: json, jsonIframe, jsonp */ public function DisplayAjax($sType = 'json') { $sOutput = ''; // * Загружаем статус ответа и сообщение $bStateError = false; $sMsgTitle = ''; $sMsg = ''; $aMsgError = E::ModuleMessage()->GetError(); $aMsgNotice = E::ModuleMessage()->GetNotice(); if (count($aMsgError) > 0) { $bStateError = true; $sMsgTitle = $aMsgError[0]['title']; $sMsg = $aMsgError[0]['msg']; } elseif (count($aMsgNotice) > 0) { $sMsgTitle = $aMsgNotice[0]['title']; $sMsg = $aMsgNotice[0]['msg']; } $this->AssignAjax('sMsgTitle', $sMsgTitle); $this->AssignAjax('sMsg', $sMsg); $this->AssignAjax('bStateError', $bStateError); if ($sType == 'json') { $this->SetResponseHeader('Content-type', 'application/json; charset=utf-8'); $sOutput = F::jsonEncode($this->aVarsAjax); } elseif ($sType == 'jsonIframe') { // Оборачивает json в тег <textarea>, это не дает браузеру выполнить HTML, который вернул iframe $this->SetResponseHeader('Content-type', 'application/json; charset=utf-8'); // * Избавляемся от бага, когда в возвращаемом тексте есть " $sOutput = '<textarea>' . htmlspecialchars(F::jsonEncode($this->aVarsAjax)) . '</textarea>'; } elseif ($sType == 'jsonp') { $this->SetResponseHeader('Content-type', 'application/json; charset=utf-8'); $sOutput = F::GetRequest('jsonpCallback', 'callback') . '(' . F::jsonEncode($this->aVarsAjax) . ');'; } $this->Flush($sOutput); exit; }
/** * Проверка полей блога * * @param ModuleBlog_EntityBlog|null $oBlog * * @return bool */ protected function checkBlogFields($oBlog = null) { $bOk = true; // * Проверяем есть ли название блога if (!F::CheckVal(F::GetRequestStr('blog_title'), 'text', 2, 200)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('blog_create_title_error'), E::ModuleLang()->Get('error')); $bOk = false; } else { // * Проверяем есть ли уже блог с таким названием if ($oBlogExists = E::ModuleBlog()->GetBlogByTitle(F::GetRequestStr('blog_title'))) { if (!$oBlog || $oBlog->getId() != $oBlogExists->getId()) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('blog_create_title_error_unique'), E::ModuleLang()->Get('error')); $bOk = false; } } } return $bOk; }
/** * Изменение состояния подписки */ protected function EventAjaxTrackToggle() { /** * Устанавливаем формат Ajax ответа */ E::ModuleViewer()->SetResponseAjax('json'); if (!$this->oUserCurrent) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error')); return; } /** * Получаем тип объекта подписки */ $sTargetType = F::GetRequestStr('target_type'); if (!E::ModuleSubscribe()->IsAllowTargetType($sTargetType)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } $sTargetId = F::GetRequestStr('target_id') ? F::GetRequestStr('target_id') : null; $iValue = F::GetRequest('value') ? 1 : 0; $oTrack = null; /** * Проверка объекта подписки */ if (!E::ModuleSubscribe()->CheckTarget($sTargetType, $sTargetId, $iValue)) { E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } /** * Если подписка еще не существовала, то создаем её */ if ($oTrack = E::ModuleSubscribe()->AddTrackSimple($sTargetType, $sTargetId, $this->oUserCurrent->getId())) { $oTrack->setStatus($iValue); E::ModuleSubscribe()->UpdateTrack($oTrack); E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('subscribe_change_ok'), E::ModuleLang()->Get('attention')); return; } E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; }
/** * Редактирование поля контента * * @param ModuleTopic_EntityContentType $oContentType * @param ModuleTopic_EntityField $oField * @return bool */ protected function SubmitEditField($oContentType, $oField) { // * Проверяем отправлена ли форма с данными if (!F::isPost('submit_field')) { return false; } // * Проверка корректности полей формы if (!$this->CheckFieldsField($oContentType)) { return false; } if (!E::ModuleTopic()->GetFieldValuesCount($oField->getFieldId())) { // Нет ещё ни одного значения этого поля, тогда можно сменить ещё и тип $oField->setFieldType(F::GetRequest('field_type')); } $oField->setFieldName(F::GetRequest('field_name')); $oField->setFieldDescription(F::GetRequest('field_description')); $oField->setFieldRequired(F::GetRequest('field_required')); if ($oField->getFieldType() == 'select') { $oField->setOptionValue('select', F::GetRequest('field_values')); } $sOldFieldUniqueName = $oField->getFieldUniqueName(); if (F::GetRequest('field_unique_name_translit')) { $oField->setFieldUniqueName(F::TranslitUrl(F::GetRequest('field_name'))); } else { $oField->setFieldUniqueName(F::TranslitUrl(F::GetRequest('field_unique_name'))); } try { if (E::ModuleTopic()->UpdateContentField($oField)) { E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('action.admin.contenttypes_success_fieldedit'), null, true); R::Location('admin/settings-contenttypes/edit/' . $oContentType->getContentId() . '/'); } } catch (Exception $e) { // Если ошибка дублирования уникального ключа, то выводим соответствующее сообщение if (1062 == $e->getCode()) { $sNewFieldUniqueName = $oField->getFieldUniqueName(); $oField->setFieldUniqueName($sOldFieldUniqueName); E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('plugin.contentfieldsx.error_field_unique_name_duplicate', array('unique_name' => htmlspecialchars($sNewFieldUniqueName))), null, false); } } return false; }
/** * Удаление/восстановление комментария * */ protected function EventCommentDelete() { // * Комментарий существует? $idComment = F::GetRequestStr('idComment', null, 'post'); if (!($oComment = E::ModuleComment()->GetCommentById($idComment))) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } // * Есть права на удаление комментария? if (!$oComment->isDeletable()) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error')); return; } // * Устанавливаем пометку о том, что комментарий удален $oComment->setDelete(($oComment->getDelete() + 1) % 2); E::ModuleHook()->Run('comment_delete_before', array('oComment' => $oComment)); if (!E::ModuleComment()->UpdateCommentStatus($oComment)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } E::ModuleHook()->Run('comment_delete_after', array('oComment' => $oComment)); // * Формируем текст ответа if ($bState = (bool) $oComment->getDelete()) { $sMsg = E::ModuleLang()->Get('comment_delete_ok'); $sTextToggle = E::ModuleLang()->Get('comment_repair'); } else { $sMsg = E::ModuleLang()->Get('comment_repair_ok'); $sTextToggle = E::ModuleLang()->Get('comment_delete'); } // * Обновление события в ленте активности E::ModuleStream()->Write($oComment->getUserId(), 'add_comment', $oComment->getId(), !$oComment->getDelete()); // * Показываем сообщение и передаем переменные в ajax ответ E::ModuleMessage()->AddNoticeSingle($sMsg, E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', $bState); E::ModuleViewer()->AssignAjax('sTextToggle', $sTextToggle); }
/** * Метод выода ошибки */ public function EventError() { // Запретим прямой доступ if (!($aError = E::ModuleApi()->GetLastError())) { $aError = E::ModuleApi()->ERROR_CODE_0002; } // Установим код ошики - Bad Request F::HttpResponseCode(400); // Отправим ошибку пользователю if ($this->bIsAjax) { E::ModuleMessage()->AddErrorSingle('error'); E::ModuleViewer()->AssignAjax('result', json_encode(array('error' => $aError))); } else { E::ModuleViewer()->Assign('result', json_encode(array('error' => $aError))); } E::ModuleApi()->SetLastError(NULL); return FALSE; }
protected function _eventRecoveryRequest($sMail) { if ($oUser = E::ModuleUser()->GetUserByMail($sMail)) { // Формируем и отправляем ссылку на смену пароля /** @var ModuleUser_EntityReminder $oReminder */ $oReminder = E::GetEntity('User_Reminder'); $oReminder->setCode(F::RandomStr(32)); $oReminder->setDateAdd(F::Now()); $oReminder->setDateExpire(date('Y-m-d H:i:s', time() + Config::Val('module.user.pass_recovery_delay', 60 * 60 * 24 * 7))); $oReminder->setDateUsed(null); $oReminder->setIsUsed(0); $oReminder->setUserId($oUser->getId()); if (E::ModuleUser()->AddReminder($oReminder)) { E::ModuleNotify()->SendReminderCode($oUser, $oReminder); E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('password_reminder_send_link')); return true; } } return false; }
/** * Проверка полей формы * * @param $oTopic * * @return bool */ protected function checkTopicFields($oTopic) { E::ModuleSecurity()->ValidateSendForm(); $bOk = true; /** * Валидируем топик */ if (!$oTopic->_Validate()) { E::ModuleMessage()->AddError($oTopic->_getValidateError(), E::ModuleLang()->Get('error')); $bOk = false; } /** * Выполнение хуков */ E::ModuleHook()->Run('check_topic_fields', array('bOk' => &$bOk)); return $bOk; }
/** * Обработка дополнительных полей топика * * @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 AjaxBlogJoin() { // Устанавливаем формат Ajax ответа E::ModuleViewer()->SetResponseAjax('json'); // Пользователь авторизован? if (!$this->oUserCurrent) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error')); return; } // Блог существует? $nBlogId = intval(F::GetRequestStr('idBlog', null, 'post')); if (!$nBlogId || !($oBlog = E::ModuleBlog()->GetBlogById($nBlogId))) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } $this->oCurrentBlog = $oBlog; // Type of the blog $oBlogType = $oBlog->getBlogType(); // Current status of user in the blog /** @var ModuleBlog_EntityBlogUser $oBlogUser */ $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $this->oUserCurrent->getId()); if (!$oBlogUser || $oBlogUser->getUserRole() < ModuleBlog::BLOG_USER_ROLE_GUEST && (!$oBlogType || $oBlogType->IsPrivate())) { // * Проверяем тип блога на возможность свободного вступления или вступления по запросу if ($oBlogType && !$oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_FREE) && !$oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_REQUEST)) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_join_error_invite'), E::ModuleLang()->Get('error')); return; } if ($oBlog->getOwnerId() != $this->oUserCurrent->getId()) { // Subscribe user to the blog if ($oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_FREE)) { $bResult = false; if ($oBlogUser) { $oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER); $bResult = E::ModuleBlog()->UpdateRelationBlogUser($oBlogUser); } elseif ($oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_FREE)) { // User can free subscribe to blog /** @var ModuleBlog_EntityBlogUser $oBlogUserNew */ $oBlogUserNew = E::GetEntity('Blog_BlogUser'); $oBlogUserNew->setBlogId($oBlog->getId()); $oBlogUserNew->setUserId($this->oUserCurrent->getId()); $oBlogUserNew->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER); $bResult = E::ModuleBlog()->AddRelationBlogUser($oBlogUserNew); } if ($bResult) { E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_ok'), E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', true); // Увеличиваем число читателей блога $oBlog->setCountUser($oBlog->getCountUser() + 1); E::ModuleBlog()->UpdateBlog($oBlog); E::ModuleViewer()->AssignAjax('iCountUser', $oBlog->getCountUser()); // Добавляем событие в ленту E::ModuleStream()->Write($this->oUserCurrent->getId(), 'join_blog', $oBlog->getId()); // Добавляем подписку на этот блог в ленту пользователя E::ModuleUserfeed()->SubscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_BLOG, $oBlog->getId()); } else { $sMsg = $oBlogType->IsPrivate() ? E::ModuleLang()->Get('blog_join_error_invite') : E::ModuleLang()->Get('system_error'); E::ModuleMessage()->AddErrorSingle($sMsg, E::ModuleLang()->Get('error')); return; } } // Подписываем по запросу if ($oBlogType->GetMembership(ModuleBlog::BLOG_USER_JOIN_REQUEST)) { // Подписка уже была запрошена, но результатов пока нет if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_WISHES) { E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_request_already'), E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', true); return; } if ($oBlogUser) { if (!in_array($oBlogUser->getUserRole(), array(ModuleBlog::BLOG_USER_ROLE_REJECT, ModuleBlog::BLOG_USER_ROLE_WISHES))) { $sMessage = E::ModuleLang()->Get('blog_user_status_is') . ' "' . E::ModuleBlog()->GetBlogUserRoleName($oBlogUser->getUserRole()) . '"'; E::ModuleMessage()->AddNoticeSingle($sMessage, E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', true); return; } else { $oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_WISHES); $bResult = E::ModuleBlog()->UpdateRelationBlogUser($oBlogUser); } } else { // Подписки ещё не было - оформим ее /** @var ModuleBlog_EntityBlogUser $oBlogUserNew */ $oBlogUserNew = E::GetEntity('Blog_BlogUser'); $oBlogUserNew->setBlogId($oBlog->getId()); $oBlogUserNew->setUserId($this->oUserCurrent->getId()); $oBlogUserNew->setUserRole(ModuleBlog::BLOG_USER_ROLE_WISHES); $bResult = E::ModuleBlog()->AddRelationBlogUser($oBlogUserNew); } if ($bResult) { // Отправим сообщение модераторам и администраторам блога о том, что // этот пользоватлеь захотел присоединиться к нашему блогу $aBlogUsersResult = E::ModuleBlog()->GetBlogUsersByBlogId($oBlog->getId(), array(ModuleBlog::BLOG_USER_ROLE_MODERATOR, ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR), null); if ($aBlogUsersResult) { /** @var ModuleUser_EntityUser[] $aBlogModerators */ $aBlogModerators = array(); /** @var ModuleBlog_EntityBlogUser $oCurrentBlogUser */ foreach ($aBlogUsersResult['collection'] as $oCurrentBlogUser) { $aBlogModerators[] = $oCurrentBlogUser->getUser(); } // Добавим владельца блога к списку $aBlogModerators = array_merge($aBlogModerators, array($oBlog->getOwner())); $this->SendBlogRequest($oBlog, $aBlogModerators, $this->oUserCurrent); } E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_request_send'), E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', true); return; } } } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_join_error_self'), E::ModuleLang()->Get('attention')); return; } } if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_MEMBER) { // Unsubscribe user from the blog if (E::ModuleBlog()->DeleteRelationBlogUser($oBlogUser)) { E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_leave_ok'), E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', false); // Уменьшаем число читателей блога $oBlog->setCountUser($oBlog->getCountUser() - 1); E::ModuleBlog()->UpdateBlog($oBlog); E::ModuleViewer()->AssignAjax('iCountUser', $oBlog->getCountUser()); // Удаляем подписку на этот блог в ленте пользователя E::ModuleUserfeed()->UnsubscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_BLOG, $oBlog->getId()); return; } else { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); return; } } if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_NOTMEMBER) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_user_request_no_accept'), E::ModuleLang()->Get('error')); return; } if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_BAN) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_leave_error_banned'), E::ModuleLang()->Get('error')); return; } if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_BAN_FOR_COMMENT) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_leave_error_banned'), E::ModuleLang()->Get('error')); return; } if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_WISHES) { E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_join_request_leave'), E::ModuleLang()->Get('attention')); E::ModuleViewer()->AssignAjax('bState', true); return; } }