Иконка ресурса

Пишем плагин для XF, который записывает в другую таблицу одобренные регистрации 2.1.0

Нет прав для скачивания
Совместимость с XenForo
  1. 2.1
Открываем терминал и выполняем следующую команду php cmd.php xf-addon:create. Поэтапно выполняем следующие команды
Enter an ID for this add-on: MMO/ApproveRegistration
Enter a title: [MMO] Approve Registration
Enter a version ID. This integer will be used for internal version comparisons. Each release of your add-on should increase this number: 2010070
Version string set to: 2.1.0
Does this add-on supersede a XenForo 1 add-on? (y/n) n
Does your add-on need a Setup file? (y/n) y
Does your Setup need to support running multiple steps? (y/n) y
Далее идем в директорию с плагином src\addons\MMO\ApproveRegistration\Setup.php и вставляем следующий код.
PHP:
<?php

namespace MMO\ApproveRegistration;

use XF\AddOn\AbstractSetup;
use XF\AddOn\StepRunnerInstallTrait;
use XF\AddOn\StepRunnerUninstallTrait;
use XF\AddOn\StepRunnerUpgradeTrait;
use XF\Db\Schema\Create;

class Setup extends AbstractSetup
{
   use StepRunnerInstallTrait;
   use StepRunnerUpgradeTrait;
   use StepRunnerUninstallTrait;

    public function installStep1()
    {
        $this->schemaManager()->createTable('xf_mar_approve_registration', function(Create $table) {
            $table->checkExists(true);
            $table->addColumn('id', 'int')->autoIncrement();
            $table->addColumn('user_id', 'int')->unsigned();
            $table->addColumn('username', 'varchar', 50);
            $table->addColumn('email', 'varchar', 120);
            $table->addColumn('is_active', 'tinyint', 3)->setDefault(0);
            $table->addPrimaryKey('id');
            $table->addKey('email');
        });
    }

    public function uninstallStep1()
    {
        $this->schemaManager()->dropTable('xf_mar_approve_registration');
    }
}
Здесь мы создаем установку плагина и проверяем наличие
данной таблицы. Устанавливаем ключи и индексы.
Здесь мы создаем установку плагина и проверяем наличие данной таблицы. Устанавливаем ключи и индексы.
Далее создаем директорию XF, затем Entity и создаем класс User.php. Выглядеть будет это так:
src\addons\MMO\ApproveRegistration\XF\Entity\User.php со следующим содержимым:
PHP:
<?php

namespace MMO\ApproveRegistration\XF\Entity;

class User extends XFCP_User
{
    protected function _postSave()
    {
        if ($this->isStateChanged('user_state', 'moderated') && $this->user_state == 'valid')
        {
            /** @var \MMO\ApproveRegistration\XF\Entity\ApproveRegistration $approveUser */
            $approveUser = $this->_em->create('MMO\ApproveRegistration:ApproveRegistration');
            $approveUser->user_id = $this->user_id;
            $approveUser->username = $this->username;
            $approveUser->email = $this->email;
            $approveUser->is_active = true;
            $approveUser->save();
        }

        return parent::_postSave();
    }
}
Здесь мы проверяем на изменное состояние пользователя с moderated, т.к у пользователя могут быть и другие состояния и если бы мы не проверяли и у пользователя устанавливалось состояние valid. Мы просто получали бы запись в бд, а есть различные состояния где ему нужно подтвердить почту и т.д. Таким образом мы проверяем флаг, что именно изменился из состояния модерирования и то что он активирован.
Далее нам необходимо включить режим разработки (Режим разработки)
Далее переходим в панель управления, открываем вкладку Разработка и выбираем Расширение классов или просто переходим по адресу /admin.php?class-extensions/. Добавляем расширение класса.
Название базового класса: XF\Entity\User
Название класса расширения: MMO\ApproveRegistration\XF\Entity\User
Порядок выполнения: 10
Включить расширение
Плагин: [MMO] Approve Registration
Создаем директорию в корне нашего плагина Entity, т.е путь у нас будет таким MMO\ApproveRegistration\Entity и в ней создаем класс ApproveRegistration со следующим содержимым:
PHP:
<?php

namespace MMO\ApproveRegistration\Entity;

use XF\Mvc\Entity\Entity;
use XF\Mvc\Entity\Structure;

class ApproveRegistration extends Entity
{
    public static function getStructure(Structure $structure)
    {
        $structure->table = 'xf_mar_approve_registration';
        $structure->shortName = 'MMO\ApproveRegistration:ApproveRegistration';
        $structure->primaryKey = 'id';
        $structure->columns = [
            'id' => ['type' => self::UINT, 'autoIncrement' => true],
            'user_id' => ['type' => self::UINT, 'default' => 0],
            'username' => ['type' => self::STR, 'maxLength' => 50],
            'email' => ['type' => self::STR, 'maxLength' => 120],
            'is_active' => ['type' => self::BOOL, 'default' => true]
        ];
        $structure->relations = [
            'User' => [
                'entity' => 'XF:User',
                'type' => self::TO_ONE,
                'conditions' => 'user_id',
                'primary' => true
            ]
        ];
        return $structure;
    }
Здесь мы описываем структуру нашей таблицы в которую необходимо писать данные, мы можем конечно получить и так через джойн сведения о пользователи, но здесь сделано для примера как записывать данные текущего пользователя из 1 сущности в другую.
Далее мы набираем следующую команду в нашем терминале php cmd.php xf-dev:entity-class-properties MMO/ApproveRegistration
И потом выполняем следующую команду в терминале php cmd.php xf-addon:install-step MMO/ApproveRegistration 1.
Соответственно релиз плагина прилагается для ленивых и тех, кто не хочет разбираться вообще с этим и ему не интересно.
Автор
Captain
Скачивания
10
Просмотры
1,856
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Captain

Поделиться ресурсом

Назад
Сверху Снизу