Сервис предоставляет пользователям возможность публиковать сообщения в своём блоге. Главная особенность сервиса — это формат постов. При публикации пользователь выбирает один из пяти доступных форматов записи. Такой формат публикации является чем-то средним между микроблогингом и полноценными, большими блог-постами.
В зависимости от выбранного формата, запись пользователя оформляется особенным образом.
Основные сценарии использования сайта:
- Публикация и репост записей в своём блоге;
- Комментирование чужих записей;
- Подписка на пользователей;
- Просмотр своей ленты;
- Поиск записей по тегам, тексту либо просмотр популярных постов;
- Переписка с другими пользователями.
Для разработки сайта предлагается уже готовая вёрстка, от программиста требуется лишь написать бэкенд сайта, т. е. сделать сайт динамическим, реализовать возможности по добавлению, просмотру постов.
Процесс — это автономная операция, выполняющая полезное действие. К примеру: добавление нового комментария или регистрация аккаунта.
Выполняется после заполнения формы на странице «Регистрация аккаунта».
Последовательность действий:
- Проверить, что отправлена форма.
- Убедиться, что заполнены все обязательные поля.
- Проверить, что указанный email уже не используется другим пользователем.
- Проверить совпадение пароля и его повтора.
- Если есть ошибки заполнения формы, то сохранить их в отдельном массиве.
- Если ошибок нет, то сохранить данные формы в таблице пользователей.
- Выбранный файл аватара сохранить в отдельной, публичной папке и добавить ссылку на аватар в таблицу пользователей.
- Если были допущены ошибки (не заполнены все поля, email занят и т. д.), то не сохранять данные, а показать ошибки в форме под соответствующими полями. Также ошибки валидации показываются списком в специальном блоке справа от формы.
Если данные были сохранены успешно, то переадресовать пользователя на страницу входа.
Примечания
- Необходимо проверять, что значение из поля «email» действительно является валидным email-адресом.
- Хранить хэш пароля.
- Также нужно проверять формат загруженного файла в поле «Аватар», это обязательно должно быть изображение.
Выполняется после заполнения формы на странице «Публикация поста». Все поля формы обязательны к заполнению.
Последовательность действий:
- Проверить, что отправлена форма.
- Убедиться, что заполнены все поля.
- Выполнить все проверки.
- Если ошибок нет, то сохранить новый пост в таблице постов.
- Отправить уведомления подписчикам пользователя о новом посте (процесс «Отправка уведомлений»).
- При успешном сохранении формы переадресовывать пользователя на страницу просмотра поста.
В зависимости от выбранного типа поста для формы будут применяться различные правила валидации. Также некоторые типы требуют дополнительных действий, помимо сохранения данных в БД. Ниже даны все необходимые пояснения.
Список проверок
- Валидация поля «Теги»
В этом поле пользователь вводит теги, к которым относится публикация. Теги разделяются пробелом. Выполняя валидацию, нужно убедиться, что в поле одно или больше слов, а сами слова разделены пробелом. Каждый тег состоит только из одного слова. Привязка тегов к публикации
Информацию из поля «Теги» надо разделить на отдельные теги-слова. Эти теги сохраняются в отдельной таблице и ссылаются на запись из таблицы постов (подробности смотри в разделе «Сущности»).
- Валидация записи типа «Картинка»
При заполнении формы пользователю обязательно надо выбрать файл изображения со своего компьютера, либо указать прямую ссылку на изображение, размещенное в интернете. Следовательно, надо написать правило валидации, которое проверяет, что минимум одно из полей заполнено. Если заполнены оба поля, то игнорировать содержимое поля «Ссылка из интернета».
- Валидация поля «Выбор файла»
Обязательно проверять MIME-тип загруженного файла. Формат загруженного файла должен быть изображением одного из следующих типов: png, jpeg, gif. Выбранный файл сохранить в отдельной, публичной папке и добавить ссылку на изображение в таблицу постов вместе с остальной информацией.
- Валидация поля «Ссылка из интернета»
Сперва следует проверить правильность формата. Значение поля должно быть корректным URL-адресом. Используйте встроенную функцию filter_var и фильтр FILTER_VALIDATE_URL. Затем по указанной ссылке необходимо скачать файл изображения, сохранить его в публичной папке и добавить ссылку на изображение в таблицу постов вместе с остальной информацией. Получить содержимое удалённого файла можно, например, встроенной функцией file_get_contents. Если функция вернула false или пустую строку, значит файл загрузить не получилось. Такая ситуация должна являться ошибкой валидации поля.
- Валидация записи типа «Видео»:
При заполнении формы пользователь обязательно указывает ссылку на видео, размещённое на сайте YouTube. Сперва следует проверить правильность формата. Значение поля должно быть корректным URL-адресом. Используйте встроенную функцию filter_var и фильтр FILTER_VALIDATE_URL. Затем происходит проверка существования видео по указанной ссылке на платформе YouTube.
Выполняется после заполнения формы на странице «Главная для анонимных пользователей».
Последовательность действий:
- Проверить, что отправлена форма.
- Убедиться, что заполнены все поля.
- Найти в БД пользователя с переданным email.
- Проверить, что переданный в форме пароль совпадает с сохраненным.
- Если пользователь найден и пароли совпадают, то открыть новую сессию, в которую записать идентификатор пользователя.
- После успешного входа пользователь попадает на главную страницу.
Примечания
Для проверки пароля использовать встроенную функцию password_verify.
Функция репоста позволяет скопировать и опубликовать пост другого пользователя. Процесс вызывается после клика на иконку «Репост», которая находится под содержимым поста на странице пользователя.
Необходимо из параметра запроса получить ID оригинальной записи. Выполнить проверку по таблице постов, что существует запись с таким ID. Если запись существует, то скопировать все значения из этой записи в новую, внеся следующие изменения:
- Поменять ID автора на текущего пользователя;
- Поменять дату/время публикации на текущую;
- Установить признак «Репост» в «истина»;
- Заполнить поле «Автор оригинальной записи» в ID пользователя оригинала.
- Выполнить переадресацию на страницу профиля текущего пользователя.
Выполняется со страницы профиля пользователя.
Последовательность действий:
- Из параметра запроса нужно извлечь ID пользователя, на которого выполняется подписка.
- По полученному ID убедиться, что в таблице пользователей существует такая запись.
- Добавить в таблицу подписок пользователей соответствующую связь (смотрите раздел «Сущности»).
- Отправить этому пользователю уведомление о новом подписчике (смотрите описание процесса «Отправка уведомлений»).
- Выполнить переадресацию обратно на профиль пользователя.
Выполняется со страницы профиля пользователя.
Последовательность действий:
- Из параметра запроса надо извлечь ID пользователя, по которому выполняется отписка.
- По полученному ID убедиться, что в таблице подписок пользователей есть соответствующая связь (смотри раздел «Сущности»).
- Удалить запись с этой связью.
- Выполнить переадресацию обратно на профиль пользователя.
Выполняется с любой страницы, где есть блоки для показа публикаций.
Последовательность действий:
- Из параметра запроса нужно извлечь ID поста;
- По этому ID убедиться, что в таблице с постами есть такой пост;
- Если такой пост существует, то добавить новую связь «Пользователь-лайки» через соответствующую таблицу (смотри раздел «Сущности»);
- Выполнить переадресацию обратно на предыдущую страницу (использовать заголовок запроса Referer для получения адреса этой страницы).
Пользователи сайта получают email-уведомления при наступлении двух событий: новый подписчик и публикация нового поста от одного из авторов, на которых подписан пользователь.
- Уведомление о новом подписчике
После выполнения процесса «Подписка на пользователя» юзер, на которого подписались, получает об этом уведомление. Уведомление — это сообщение электронной почты, составленное по следующим требованиям:
Тема письма: «У вас новый подписчик»;
Содержимое письма: «Здравствуйте, %логин адресата%. На вас подписался новый пользователь %логин пользователя, оформившего подписку%. Вот ссылка на его профиль: %ссылка на профиль этого пользователя%».
- Уведомление о публикации нового поста.
После выполнения процесса «Публикация поста» все пользователи, подписанные на автора публикации получают об этом уведомление.
Уведомление — это сообщение электронной почты, составленное по следующим требованиям:
Тема письма: «Новая публикация от пользователя %логин автора поста%»;
Содержимое письма: «Здравствуйте, %имя адресата%. Пользователь %логин автора поста% только что опубликовал новую запись „%заголовок поста%“. Посмотрите её на странице пользователя: %ссылка на профиль автора%».
Необходимо вначале сформировать список адресатов-получателей этого уведомления. Для этого нужно найти пользователей, подписанных на автора новой публикации. Затем для каждого найденного пользователя следует отдельно сформировать и отправить уведомление.
Выполняется после отправки формы поиска с любой страницы.
Последовательность действий:
- Проверить, что в URL сценария есть параметр запроса, зарезервивованный под содержимое поискового запроса;
- Получить текст из этого параметра и убрать пробелы функцией trim;
- Проверить, что получившаяся строка не пустая;
- Выполнить полнотекстовый поиск (операторы «MATCH... AGAINST») в таблице постов по полям «заголовок» и «содержимое»;
- Показать результаты поиска на соответствующей странице.
- Поиск по тегам
- Отдельно надо рассмотреть процесс поиска по тегам. Он выполняется при клике по ссылке-тегу, расположенным в карточке любого поста.
Чтобы отличить поиск по тегу от поиска по прозвольному тексту, надо получить первый символ поискового запроса (используйте встроенную функцию substr). Если первый символ является решёткой — «#», то это означает поиск по тегу.
Той же функцией substr извлечь имя тега без решётки. Затем задействуйте поиск по связи «Посты-теги», чтобы получить из таблицы постов записи, имеющие связь с этим тегом и покажите их на странице.
Выполняется после отправки формы со страницы «Сообщения».
Последовательность действий:
- Проверить, что отправлена форма;
- Убедиться, что заполнены все её поля;
- Выполнить все проверки;
- Если есть ошибки заполнения формы, то сохранить их в отдельном массиве;
- Если ошибок нет, то сохранить новое сообщение в таблице сообщений.
- При успешном сохранении формы переадресовывать пользователя на страницу «Сообщения».
Список проверок
- Проверка адресата
ID пользователя, которому адресуется сообщение, находится в специальном скрытом поле формы. Следует проверить, что пользователь с этим ID существует в таблице пользователей, а также не равен отправителю сообщения.
- Проверка текста сообщения
Поле должно быть заполнено. Очистить содержимое от начальных и конечных пробелов встроенной функцией trim. Итоговое содержимое не должно быть пустой строкой.
Выполняется после заполнения формы комментария на странице просмотра поста.
Последовательность действий:
- Проверить, что отправлена форма;
- Убедиться, что заполнены все её поля;
- Выполнить все проверки;
- Если нет ошибок валидации, то сохранить новое сообщение в таблице комментариев;
- Показать ошибку валидации формы, если таковая была.
- При успешном сохранении формы переадресовывать пользователя на страницу профиля пользователя — автора публикации, к которой добавлялся комментарий.
Список проверок
- Проверка существования поста
ID поста, к которому добавляется комментарий, находится в специальном скрытом поле формы. Следует проверить, что пост с этим ID существует в таблице постов.
- Проверка текста сообщения
Поле должно быть заполнено. Очистить содержимое от начальных и конечных пробелов встроенной функцией trim. Длина итогового комментария не должна быть меньше четырех символов.
Сайт состоит из следующих экранов:
- Главная страница для анонимных пользователей;
- Регистрация аккаунта;
- Вход на сайт;
- Популярные записи;
- Моя лента;
- Профиль пользователя;
- Публикация поста;
- Просмотр поста;
- Сообщения;
- Результаты поиска;
Анонимных пользователей встречает посадочная страница. Главная задача этой страницы — дать представление о сайте, его назначении и возможностях.
Здесь содержится общее описание сайта, а также ссылки на регистрацию нового аккаунта и форма входа. Лейаут этой страницы отличается от лейаута для зарегистрированных пользователей.
Эта страница показывается только для анонимных пользователей. Если у пользователя есть аккаунт и он вошел под ним на сайт, то вместо этой страницы его всегда следует перенаправлять на страницы «Моя лента».
Чтобы пользователь имел возможность добавить на сайте новую публикацию, ему необходимо пройти процедуру регистрации на этой странице.
Форма состоит из пяти полей (из них четыре обязательных) и двух кнопкок «Выбрать фото», и «Отправить». Форма отправляется методом «POST» и поддерживает загрузку файлов.
Лейбл Тип поля Обязательность
Электронная почта Простое текстовое поле Да
Логин Простое текстовое поле Да
Пароль Поле типа «пароль» Да
Повтор пароля Поле типа «пароль» Да
Поле для загрузки фото Поле типа «file» Нет
Под формой находится кнопка «Выбрать фото» и «Отправить».
Пользователю надлежит заполнить все обязательные поля, указав свой действительный email, пароль для входа на сайт, логин, под которым будут публиковаться его посты и, при желании, добавить фото для аватара.
После заполнения формы, пользователь нажимает кнопку «Отправить» для отправки данных формы на сервер.
Сама процедура регистрации описана в отдельном разделе — «Регистрация нового аккаунта».
Если по итогам выполнения процесса регистрации возникли ошибки заполнения формы, то эти ошибки должны быть показаны красным текстом под необходимыми полями. Также ошибки валидации показываются списком в специальном блоке справа от формы.
Вход на сайт происходит через форму на главной странице для анонимных пользователей.
Форма состоит из двух полей:
- Email. Тип: текстовое поле;
- Пароль. Тип: поле типа password.
Под формой кнопка «Войти».
Процедура входа на сайт описана в отдельном разделе — «Вход на сайт».
Если по итогам выполнения процесса входа возникли ошибки заполнения формы, то эти ошибки должны быть показаны красным текстом под необходимыми полями.
Если пользователь ввел неверные данные аккаунта (несуществующий пользователь или неверный пароль), то в сообщении должен быть текст: «Вы ввели неверный email/пароль».
Большой заголовок с текстом «Популярное».
Под заголовком две группы ссылок для сортировки постов по определенным критериям, а также для их фильтрации по типу контента.
Первая группа: Сортировка по критериям: «Популярность», «Лайки», «Дата»;
Вторая группа: Фильтрация по типам контента: «Всё», «Тексты», «Картинки», «Ссылки», «Цитаты», «Видео».
Ниже идёт сетка с карточками постов, отвечающих выбранной сортировке и фильтрации.
Если для страницы не были выбраны критерии сортировки и/или фильтрации, то по умолчанию показывается шесть самых просматриваемых. При выборе любого из фильтров типа контента, выбранная сортировка постов сбрасывается к дефолтной.
Выбор же сортировки сохраняет выбранный тип постов (если он был указан) и сортирует публикации только этого типа.
Работа пагинации
Если количество публикаций больше девяти, то пользователю надо показывать ссылки на следующие страницы, для просмотра всего списка. Ссылки вида «Предыдущая» и «Следующая» должны вести на очередные или предыдущие шесть записей.
Содержимое карточки
В шапке карточки находится заголовок поста. Заголовок записи является ссылкой и ведёт на страницу просмотра поста. Ниже идёт сам контент записи. Внешний вид содержимого здесь отличается в зависимости от типа контента.
В футере карточки располагается логин пользователя, дата и время публикации, кнопка лайка с числом лайков и кнопка-ссылка для добавления комментария с числом комментариев. Логин должен быть ссылкой на профиль пользователя.
Эта страница является главной для зарегистрированного пользователя. Здесь в хронологическом порядке располагается лента с карточками постов от пользователей, на которые оформлена подписка.
Содержимое отдельной карточки
Содержимое карточек на этой странице очень схоже со страницой «Популярные записи», но имеет следующие дополнения:
- В футере есть список ссылок-тегов, которые ведут на страницу поиска;
- Есть ссылка репоста (смотри соответствующий процесс).
- Справа от постов располагаются ссылки-иконки, которые фильтруют содержимое страницы по выбранному типу контента.
Если в ленте нет постов, то на их месте необходимо показать заглушку, html-код которой находится в файле no-content.html.
Страница начинается с плашки, в которой содержится основная информация об этом пользователе. В левой части находится аватар пользователя, его логин и прошедшее время от даты регистрации на сайте.
Правее надо показать дату регистрации этого пользователя, сколько у него подписчиков и сколько постов он опубликовал.
В правом углу плашки находятся две кнопки: «Отправить сообщение» и «Подписаться».
Кнопка «Подписаться» будет показана, если у текущего пользователя нет подписки на этот профиль. В противном случае кнопка называется «Отписаться».
Клик по кнопке ведёт к вызову процесса «Подписка/отписка на пользователя».
Кнопка «Отправить сообщение» показывается только если на этого пользователя оформлена подписка. Клик по кнопке ведёт к переходу на страницу сообщений.
Ниже находятся вкладки-ссылки: «Посты», «Лайки» и «Подписки». По умолчанию должна быть активна вкладка «Посты».
Ссылка в каждой из вкладок ведёт на текущую страницу, но добавляет свой параметр запроса, который позволяет определить какая вкладка была выбрана и что за содержимое надо в ней показывать.
Посты и Лайки
Эти вкладки показывают вертикальный список из карточек постов.
Если выбрана вкладка «Посты», то необходимо показать в хронологическом порядке все посты от этого пользователя.
Если выбрана вкладка «Лайки», то необходимо показать все посты пользователя, у которых есть лайки. Сортировка происходит начиная с самых свежих лайков.
Подписки
Простой вертикальный список из подписок пользователя. Каждый элемент списка — это аватар пользователя, его логин, описание, число постов и кнопка «Подписаться/отписаться».
Аватар и логин пользователя оформлены ссылками и ведут на страницу профиля этого пользователя.
Кнопка подписки/отписки меняет своё название и смысл в зависимости от существования подписки на этого пользователя. Логика работы этой кнопки подробнее описана выше в начале этого раздела.
Страница для публикации нового поста. Пост может быть одного из пяти типов. Сами типы контента перечислены во вкладках. Каждая вкладка — это ссылка на текущую страницу с дополнительным параметром запроса, уникальным для каждой вкладки. По умолчанию активна вкладка «Текст» и показана форма для публикации текстового поста.
В завивимости от параметра запроса должна быть активна одна из вкладок и в форме будет соответствующий выбранному типу набор полей.
Лейбл Тип поля Активная вкладка Обязательность
Заголовок Простое текстовое поле Любая вкладка Да
Ссылка из интернета Простое текстовое поле Фото Нет
Ссылка YouTube Простое текстовое поле Видео Да
Текст поста Поле типа «textarea» Текст Да
Текст цитаты Поле типа «textarea» Цитата Да
Автор Простое текстовое поле Цитата Да
Ссылка Простое текстовое поле Ссылка Да
Теги Простое текстовое поле Любая вкладка Нет
После заполнения формы, пользователь нажимает кнопку «Опубликовать» для отправки данных формы на сервер.
Сама процедура описана в отдельном разделе — «Публикация поста». Если по итогам выполнения процесса отправки возникли ошибки заполнения формы, то эти ошибки должны быть показаны красным текстом под необходимыми полями, а справа от формы появится сообщение: «Пожалуйста, исправьте ошибки в форме» вместе со списком ошибок.
При успешном сохранении информации в БД пользователя переадресует на страницу просмотра поста.
Страница для просмотра отдельного поста. Делится вертикально на две колонки: содержимое поста с комментариями и блок с информацией о пользователя.
Состав и поведение правого блока полностью аналогично плашке с информацией о пользователе на странице «Профиль пользователя».
Основной контент страницы составляет сама публикация и комментарии под ней.
Блок с постом начинается с его заголовка и ниже идёт содержимое, оформление которого зависит от типа контента этого поста. Под содержимым поста в левом углу стоит дата публикаци, а в правом — число просмотров.
В футере поста слева направа находятся:
- Кнопка-ссылка комментариев с числом комментариев справа. Клик по ссылке вызывает скроллинг к самому последнему комментарию;
- Кнопка-ссылка на добавление лайка и число лайков справа от неё.
- Под публикацией находится блок «Комментарии к записи».
- Блок начинается с формы добавления нового комментария. Валидация формы и логика её обработки описана в процессе Добавление комментария». Под формой идёт список комментариев к записи, начиная от самого свежего. Каждый комментарий — это блок с аватаром пользователя, его логином, текстом комментария и датой/времени его публикации.
При каждом открытии этой страницы должен увеличиваться счётчик просмотров поста.
Страница со списком активных диалогов с другими пользователями сайта.
В левой колонке располагается список из пользователей, с которыми велась переписка ранее. Каждый элемент списка — это аватар пользователя, его имя и дата последнего сообщения в диалоге. Клик по элементу вызывает переход на эту страницу с дополнительным параметром запроса, в котором содержится ID выбранного пользователя.
Если существует параметр запроса, то необходимо выделить выбранного пользователя в левом блоке, а в правом блоке показать историю переписки с ним. История переписки — это отдельные сообщения, которые отсылали друг другу залогиненный и выбранный пользователь. Каждое сообщение состоит из текста и даты/времени его публикации.
Сообщения располагаются в хронологическом порядке, начиная с самого старого.
Под областью с перепиской находится форма для отправки нового сообщения выбранному пользователю. Валидация формы и логика её обработки описана в процессе «Отправка личного сообщения».
Отправка сообщения новому пользователю
Отдельно стоит описать логику работы страницы, если переход на неё произвели по ссылке «Отправить сообщение» с профиля пользователя. В этом случае в параметре запроса будет ID пользователя, которому предполагается отправить сообщение.
Если с этим пользователем уже есть существующая переписка, то необходимо следовать по алгоритму выше. В противном случае порядок действий такой:
- Добавить новый элемент с аватаром и логином пользователя в список слева, сделать его активным.
- История переписки в правом блоке соответственно будет пустой.
- Успешная отправка формы с сообщением вызывает переход на эту же страницу.
Страница для показа результатов поиска постов (см. соотв. процесс).
В заголовке страницы находится текст: «Вы искали: %поисковый_запрос%».
Заданный поисковый запрос также записан в текстовом поле поиска (шапка сайта).
Под заголовком идут результаты поиска: найденные по запросу посты.
Внешний вид постов аналогичен страницам «Профиль пользователя» и «Моя лента». Отображаются все найденные посты, пагинация результатов здесь не нужна.
Сортировка постов зависит от типа поиска. Если это был поиск по произвольному тексту, то посты сортируются в порядке релевантности. Для поиска по хештегу сортировка идёт в хронологическом порядке, начиная с самых новых.
Если ничего не найдено, то необходимо вместо постов показать соответствующее сообщение. Содержание и оформление этого сообщение находится в файле no-results.html
Список всех сущностей
- Пользователь;
- Пост;
- Комментарий;
- Лайк;
- Подписка;
- Сообщение;
- Хештег;
- Тип контента.
Представляет зарегистрированного пользователя.
Поля:
- дата регистрации: дата и время, когда этот пользователь завёл аккаунт;
- email;
- логин;
- пароль: хэшированный пароль пользователя;
- аватар: ссылка на загруженный аватар пользователя;
Состоит из заголовка и содержимого. Набор полей, которые будут заполнены, зависит от выбранного типа.
Поля:
- дата создания: дата и время, когда этот пост был создан пользователем;
- заголовок: задаётся пользователем;
- текстовое содержимое: задаётся пользователем;
- автор цитаты: задаётся пользователем;
- изображение: ссылка на сохранённый файл изображения;
- видео: ссылка на видео с youtube;
- ссылка: ссылка на сайт, задаётся пользователем;
- число просмотров.
Связи:
- автор: пользователь, создавший пост;
- тип контента: тип контента, к которому относится пост;
- хештеги: связь вида «многие-ко-многим» с сущностью «хештег».
Текстовый комментарий, оставленный к одному из постов.
Поля:
- дата создания: дата и время создания комментария;
- содержимое: задается пользователем.
Связи:
- автор: пользователь, создавший пост;
- пост: пост, к которому добавлен комментарий.
Эта сущность состоит только из связей и не имеет собственных полей.
Связи:
- пользователь: кто оставил этот лайк;
- пост: какой пост лайкнули.
Эта сущность состоит только из связей и не имеет собственных полей. Сущность создается, когда пользователь подписывается на другого пользователя.
Связи:
- автор: пользователь, который подписался;
- подписка: пользователь, на которого подписались.
Одно сообщение из внутренней переписки пользователей на сайте
Поля:
- дата создания: дата и время, когда это сообщение написали;
- содержимое: задаётся пользователем.
Связи:
- отправитель: пользователь, отправивший сообщение;
- получатель: пользователь, которому отправили сообщение.
Один из используемых хештегов на сайте. Сущность состоит только из названия хештега.
Один из пяти предопределенных типов контента.
Поля:
- название (Текст, Цитата, Картинка, Видео, Ссылка);
- имя класса для иконки (photo, video, text, quote, link);
Сайт могут использовать только зарегистрированные пользователи.
Анонимный пользователь всегда видит только приветственную страницу, где предлагается завести аккаунт или войти на сайт.