/** * Запуск обработки */ 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); } }
/** * Удаляет топики из избранного по списку * * @param array $aTopicsId Список ID топиков * * @return bool */ public function DeleteFavouriteTopicByArrayId($aTopicsId) { return E::ModuleFavourite()->DeleteFavouriteByTargetId($aTopicsId, 'topic'); }
/** * Формирует из REQUEST массива фильтр для отбора писем * * @return array */ protected function BuildFilter() { // * Текущий пользователь $aFilter = array('user_id' => $this->oUserCurrent->getId()); // * Дата старта поиска if ($start = F::GetRequestStr('start')) { if (F::CheckVal($start, 'text', 6, 10) && substr_count($start, '.') == 2) { list($d, $m, $y) = explode('.', $start); if (@checkdate($m, $d, $y)) { $aFilter['date_min'] = "{$y}-{$m}-{$d}"; } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error')); unset($_REQUEST['start']); } } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error')); unset($_REQUEST['start']); } } // * Дата окончания поиска if ($end = F::GetRequestStr('end')) { if (F::CheckVal($end, 'text', 6, 10) && substr_count($end, '.') == 2) { list($d, $m, $y) = explode('.', $end); if (@checkdate($m, $d, $y)) { $aFilter['date_max'] = "{$y}-{$m}-{$d} 23:59:59"; } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error')); unset($_REQUEST['end']); } } else { E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error')); unset($_REQUEST['end']); } } // * Ключевые слова в теме сообщения if (($sKeyRequest = F::GetRequest('keyword')) && is_string($sKeyRequest)) { $sKeyRequest = urldecode($sKeyRequest); preg_match_all('~(\\S+)~u', $sKeyRequest, $aWords); if (is_array($aWords[1]) && isset($aWords[1]) && count($aWords[1])) { $aFilter['keyword'] = '%' . implode('%', $aWords[1]) . '%'; } else { unset($_REQUEST['keyword']); } } // * Ключевые слова в тексте сообщения if (($sKeyRequest = F::GetRequest('keyword_text')) && is_string($sKeyRequest)) { $sKeyRequest = urldecode($sKeyRequest); preg_match_all('~(\\S+)~u', $sKeyRequest, $aWords); if (is_array($aWords[1]) && isset($aWords[1]) && count($aWords[1])) { $aFilter['text_like'] = '%' . implode('%', $aWords[1]) . '%'; } else { unset($_REQUEST['keyword_text']); } } // * Отправитель if (($sSender = F::GetRequest('sender')) && is_string($sSender)) { $aFilter['user_login'] = F::Array_Str2Array(urldecode($sSender), ',', true); } // * Адресат if (($sAddressee = F::GetRequest('addressee')) && is_string($sAddressee)) { $aFilter['user_login'] = F::Array_Str2Array(urldecode($sAddressee), ',', true); } // * Искать только в избранных письмах if (F::GetRequest('favourite')) { $aTalkIdResult = E::ModuleFavourite()->GetFavouritesByUserId($this->oUserCurrent->getId(), 'talk', 1, 500); // ограничиваем $aFilter['id'] = $aTalkIdResult['collection']; $_REQUEST['favourite'] = 1; } else { unset($_REQUEST['favourite']); } return $aFilter; }
/** * Удаляет письмо из избранного * * @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного * * @return bool */ public function DeleteFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite) { return $oFavourite->getTargetType() == 'talk' ? E::ModuleFavourite()->DeleteFavourite($oFavourite) : false; }
/** * Сохраняет теги для избранного * */ protected function EventFavouriteSaveTags() { // * Пользователь авторизован? if (!$this->oUserCurrent) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error')); return; } // * Объект уже должен быть в избранном if ($oFavourite = E::ModuleFavourite()->GetFavourite(F::GetRequestStr('target_id'), F::GetRequestStr('target_type'), $this->oUserCurrent->getId())) { // * Обрабатываем теги $aTags = explode(',', trim(F::GetRequestStr('tags'), "\r\n\t\v .")); $aTagsNew = array(); $aTagsNewLow = array(); $aTagsReturn = array(); foreach ($aTags as $sTag) { $sTag = trim($sTag); if (F::CheckVal($sTag, 'text', 2, 50) && !in_array(mb_strtolower($sTag, 'UTF-8'), $aTagsNewLow)) { $sTagEsc = htmlspecialchars($sTag); $aTagsNew[] = $sTagEsc; $aTagsReturn[] = array('tag' => $sTagEsc, 'url' => $this->oUserCurrent->getUserWebPath() . 'favourites/' . $oFavourite->getTargetType() . 's/tag/' . $sTagEsc . '/'); $aTagsNewLow[] = mb_strtolower($sTag, 'UTF-8'); } } if (!count($aTagsNew)) { $oFavourite->setTags(''); } else { $oFavourite->setTags(join(',', $aTagsNew)); } E::ModuleViewer()->AssignAjax('aTags', $aTagsReturn); E::ModuleFavourite()->UpdateFavourite($oFavourite); return; } E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error')); }
/** * Удаляет комментарии из избранного по списку * * @param array $aCommentsId Список ID комментариев * * @return bool */ public function DeleteFavouriteCommentsByArrayId($aCommentsId) { return E::ModuleFavourite()->DeleteFavouriteByTargetId($aCommentsId, 'comment'); }
/** * Список топиков из избранного по тегу */ protected function EventFavouriteTopicsTag() { if (!$this->CheckUserProfile()) { return parent::EventNotFound(); } // * Пользователь авторизован и просматривает свой профиль? if (!$this->oUserCurrent || $this->oUserProfile->getId() != $this->oUserCurrent->getId()) { return parent::EventNotFound(); } $this->sMenuSubItemSelect = 'topics'; $sTag = F::UrlDecode($this->GetParamEventMatch(3, 0), true); // * Передан ли номер страницы $iPage = $this->GetParamEventMatch(4, 2) ? $this->GetParamEventMatch(4, 2) : 1; // * Получаем список избранных топиков $aResult = E::ModuleFavourite()->GetTags(array('target_type' => 'topic', 'user_id' => $this->oUserProfile->getId(), 'text' => $sTag), array('target_id' => 'desc'), $iPage, Config::Get('module.topic.per_page')); $aTopicId = array(); foreach ($aResult['collection'] as $oTag) { $aTopicId[] = $oTag->getTargetId(); } $aTopics = E::ModuleTopic()->GetTopicsAdditionalData($aTopicId); // * Формируем постраничность $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), $this->oUserProfile->getUserUrl() . 'favourites/topics/tag/' . htmlspecialchars($sTag)); // * Загружаем переменные в шаблон E::ModuleViewer()->Assign('aPaging', $aPaging); E::ModuleViewer()->Assign('aTopics', $aTopics); E::ModuleViewer()->Assign('sFavouriteTag', htmlspecialchars($sTag)); E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('user_menu_profile') . ' ' . $this->oUserProfile->getLogin()); E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('user_menu_profile_favourites')); // * Устанавливаем шаблон вывода $this->SetTemplateAction('favourite_topics'); }