При разработке приложений и плагинов для IPS4 вы рано или поздно столкнётесь с взаимодействием с учётными записями пользователей. В данной статье приведены примеры взаимодействия в Invision Community 4.
Основной класс пользователей в IPS4 - \IPS\Member.
/* Получить авторизованного пользователя */ $member = \IPS\Member::loggedIn(); /* Загрузить определённого пользователя по его ID */ $member = \IPS\Member::load( 1 ); /* Загрузить определённого пользователя по его e-mail адресу */ $member = \IPS\Member::load( 'john@doe.com', 'email' ); /* Получить гостя или создать нового пользователя */ $member = new \IPS\Member;
Если у вас есть экземпляр класса \IPS\Member для работы, вы можете настроить или изменить значения для учётной записи пользователя просто установив свойства на объекте, которые соответствуют столбцам в таблице базы данных core_members. Например, чтобы изменить выбранный пользователем язык, вы можете сделать следующее:
/* Загружаем пользователя */ $member = \IPS\Member::load( 1 ); $member->language = 2; $member->save();
Вы должны вызвать метод save() после внесения соответствующих изменений, чтобы они были сохранены в базе данных, иначе изменения будут применены только до обновления страницы. Если вы работаете с объектом гостя и вызываете метод save(), запись о новом пользователе будет сохранена в базе данных (то есть будет создан новый пользователь).
Для облегчения работы, в классе присутствуют некоторые методы, так называемые получатели и установщики. Например, при установке имени пользователя, автоматически обновится seo имя пользователя (seo name) и появится запись в журнале смены имён пользователей.
Некоторые особые свойства доступны через получателей:
- $member->group: специальный получатель (это свойство, не метод), который вернёт данные группы пользователя. Этот метод автоматически объединит разрешения основной группы с одной или всеми вторичными группами, выдав таким образом наилучшие разрешения из всех групп.
- $member->groupName: Вернёт название группы пользователя, форматированное на основе соответствующей настройки в админцентре.
- $member->groups: Вернёт идентификаторы (ID) всех групп, в которых состоит пользователь.
- $member->real_name: Вернёт имя пользователя или пустую строчку для гостя.
- $member->birthday: Вернёт локализованный день рождения пользователя, принимая во внимание тот факт, что предоставление года рождения необязательно.
- $member->photo: Свойство возвращает фотографию пользователя в качестве объекта \IPS\Url (который может быть приведён в строку для получения URL адреса фотографии). Фото безопасно для просмотра в админцентре.
- $member->rank: Свойство возвращает массив заголовка пользователя и изображение ранга на основе соответствующих настроек в админцентре.
Есть ещё немаловажные методы в классе:
- $member->delete( $setAuthorToGuest=TRUE ): Вызовите этот метод для удаления пользователя. Принимается один параметр, позволяющий установить авторство контента удаляемого пользователя в качестве гостя, если параметр TRUE. Если FALSE - контент будет удалён. Обратите внимание, если вы используете внешние методы авторизации, поддерживающие удаление пользователей, пользователь также будет удалён и во внешней базе данных.
- $member->flagAsSpammer(): Метод отметит пользователя спамером, удалив или скрыв его контент (на основе конфигурации администратора) и сообщит о спамере в IPS анти-спам (если указано в настройках).
- $member->unflagAsSpammer(): Метод снимет отметку спамера с пользователя и сообщит об изменениях в IPS анти-спам (если настроено).
- $member->age( $date=NULL ): Вернёт возраст пользователя. Если объект \IPS\DateTime поставляется в качестве единственного параметра метода, то возраст рассчитывается на основе заданной даты.
- $member->location(): Возвращает текущее местонахождение пользователя на сайте, если он онлайн.
- $member->isAdmin(): Возвращает администратор пользователь, или нет.
- $member->isOnline(): Возвращает онлайн ли пользователь, или нет.
- $member->isBanned(): Возвращает забанен ли пользователь, или нет. Включая временный бан..
- $member->inGroup( $group, $permissionArray=FALSE ): Проверяет, принадлежит ли пользователь группе или нескольким группам. $group может быть ID группы (целое число), или массив ID групп. Если пользователь принадлежит ЛЮБОЙ группе массива, метод вернёт значение TRUE. Если $permissionArray передаётся как TRUE, пользователь проверяется по массиву разрешений вместо ID групп.
- $member->language(): Возвращает экземпляр \IPS\Lang для пользователя на основе его предпочтения, либо на основе автоматически выбранного языка по умолчанию, если пользователь не выбрал язык. Это используется для получения языковых строк, например: \IPS\Member::loggedIn()->language()->addToStack( 'языковая_строка' );
- $member->url(): Возвращает URL адрес на профиль пользователя как экземпляр \IPS\Http\Url.
- $member->acpUrl(): Возвращает URL адрес на страницу редактирования пользователя в админцентре как экземпляр \IPS\Http\Url.
- $member->link( $warningRef=NULL, $groupFormatting=FALSE ): Возвращает HTML ссылку на профиль пользователя. Если $warningRef передаётся в виде строки, будет представлен ключ предупреждения пользователя (если пользователь предупреждён). $groupFormatting обозначает форматировать или нет отображаемое имя пользователя на основе настройки форматирования в админцентре.
- $member->profileFields(): Возвращает дополнительные поля профиля пользователя в виде массива.
- $member->contentProfileFields(): Похоже на profileFields() , но возвращает контент полей профиля.
- $member->ipAddresses(): Возвращает IP адреса, используемые пользователем.
- $member->markAllAsRead(): Отмечает сайт прочитанным для пользователя.
- $member->markersItems( $app, $key ): Извлекает маркеры элементов для пользователя для данного приложения и ключа.
- $member->markersResetTimes( $app ): Извлекает количество сбросов маркеров элементов для данного приложения.
- $member->warnings( $limit, $acknowledged=NULL, $type=NULL ): Извлекает предупреждения пользователя. Лимит может быть передан как целое число, чтобы ограничить количество извлекаемых элементов. Если $acknowledged указано NULL, будут извлечены все предупреждения, или TRUE и FALSE будут извлечены только признанные или непризнанные предупреждения соответственно. Если $type передаётся в виде строки, будут извлечены предупреждения только этого типа.
- $member->reputation(): Метод возвращает репутацию пользователя в качестве языковой строки.
- $member->reputationImage(): Метод возвращает изображение репутации пользователя.
- $member->encryptedPassword( $password ): Шифрование простого текстового пароля с использованием соли пользователя (вы можете обновить соль перед вызовом этого для нового пароля).
- $member->generateSalt(): Генерирует новую соль для пользователя.
- $member->notificationsConfiguration(): Возвращает конфигурацию уведомлений пользователя.
- $member->following( $app, $area, $id ): Определяет, если пользователь подписан на определённое приложение, область , ID (все значения должны быть указаны)
- $member->acpRestrictions(): Возвращает ограничения пользователя в админцентре, к каким областям админцентра пользователь имеет доступ.
- $member->modPermissions(): Возвращает модераторские разрешения пользователя, если имеются.
- $member->reportCount(): Получить количество элементов контента с жалобами, которое пользователь может просмотреть в центре жалоб.
- $member->isIgnoring( \IPS\Member $member, $type ): Определяет игнорируют ли пользователя другие участники. $type должен быть указан и должен быть 'signatures', 'topics' или 'messages'.
- $member->createMenu(): Возвращает созданное пользователем меню. Это кэшируются (и при необходимости автоматически очищается).
- $member->moderateNewContent(): Определяет, должен ли новый контент пользователя пройти модерацию.
- $member->coverPhoto(): Возвращает обложку пользователя, если она имеется.
- $member->hasAcpRestriction( $app, $module=NULL, $key=NULL ): Определяет, если пользователь имеет ограничения в админцентре, установленные для данного $app, $module или $key (обязательно только $app). Если у пользователя есть набор ограничений, имеется ввиду, что он имеет доступ к ним.
- $member->modPermission( $key=NULL ): Определяет, если пользователь имеет доступные модераторские разрешения.
- $member->canWarn( \IPS\Member $member ): Может ли текущий пользователь предупредить другого пользователя.
- $member->checkLoginKey(): Проверяет ключ авторизации пользователя на срок его хранения.
- $member->recountNotifications(): Пересчитывает непрочитанные уведомления пользователя.
- $member->recountContent(): Пересчитывает количество контента пользователя.
- $member->recountReputation(): Пересчитывает репутацию пользователя.
- $member->canAccessModule( $module ): $module должен быть экземпляром \IPS\Application\Module и метод возвращает имеет ли пользователь доступ к модулю или нет.
- $member->validate(): Отмечает пользователя подтверждённым.
- $member->merge( \IPS\Member $otherMember ): Объединяет текущий аккаунт пользователя с другим (обратите внимание, что слияние происходит в фоновом режиме и не может произойти сразу; кроме того, аккаунт пользователя, который будет удалён, не сможет удалить, пока не объединится весь контент).
- $member->checkPostsPerDay(): Проверяет ограничение сообщений в день.
- $member->checkGroupPromotion(): Проверяет, должен ли пользователь продвинуться в другую группу и продвигает, если это так. Обратите внимание, что необходимо опять вызвать save() вручную для сохранения изменений.
- $member->clearCreateMenu(): Очистка кеша создания меню для пользователя.