AddController.class.php 3.64 KB
<?php
/**
 * 新增管理员
 * 鲜彤 2016-07-29 15:42:10
 */
namespace Apicp\Controller\AdminManager;

use Com\PackageValidate;
use VcySDK\Adminer;

class AddController extends AbstractController
{
    /**
     * 用户可能的状态值
     *
     * @type array 管理员状态, 1: 启用; 2: 禁用
     */
    private $userStatuses = array(Adminer::MANAGER_ABLE_LOGIN, Adminer::MANAGER_DISABLE_LOGIN);

    /*
     * 提交的数据
     */
    private $postData = [];

    public function Index()
    {
        $this->getParams();

        // 提交UC
        $res = $this->_sdkAdminer->register($this->postData);
        if (empty($res['eaId'])) {
            E("_ERR_ADD_ADMIN");
            return false;
        }

        // 发送邀请 邮件和短信
        $this->inviteMsgSend($res['eaId']);

        // 菜单权限清空缓存文件
        $options['temp'] = get_sitedir();
        S('authAction_' . $res['eaId'], null, $options);

        $this->_result = $res;

        return true;
    }

    /**
     * 获取和验证数据
     */
    protected function getParams()
    {
        // 初始化验证器
        $validate = new PackageValidate([
            'eaMobile' => ['require', 'regex' => PackageValidate::PHONE_REGEX],
            'eaRealname' => 'require|length:2,20',
            'eaEmail' => 'require|email',
            'earId' => 'require',
            'eaUserstatus' => 'in:' . implode(',', $this->userStatuses),
            'eaLevel' => 'require|in:' . implode(',', [Adminer::ADMIN_LEVEL_SUPER, Adminer::ADMIN_LEVEL_BRANCH]),
        ], [
            'eaMobile' => '_ERR_PHONE_FORMAT',
            'eaRealname' => '_ERR_REAL_NAME_FORMAT',
            'eaUserstatus' => '_ERR_USER_STATUS_INVALID',
            'eaEmail.require' => L('_ERR_PLS_SUBMIT_ID', ['name' => '邮箱']),
            'eaEmail.email' => L('_ERR_DATA_FORMAT', ['name' => '邮箱']),
            'earId' => L('_ERR_PLS_SUBMIT_ID', ['name' => 'ID']),
            'eaLevel.require' => L('_ERR_PLS_SUBMIT_ID', ['name' => '管理级别']),
            'eaLevel.in' => '_ERR_ADMIN_MANAGER_EALEVEL_INVALID',
        ]);

        // 获取提交数据
        $validate->getParams([
            'eaMobile',
            'eaRealname',
            'eaUserstatus',
            'eaEmail',
            'earId',
            'memUid',
            'adminerBusinessAuthor',
            'eaLevel',
        ]);

        // 当memUid不为空时: authorType必填, 当authorType为2时: dpIds必填
        $validateData = $validate->postData;
        if (!empty($validateData['memUid'])) {
            $validateData['authorType'] = $validateData['adminerBusinessAuthor']['authorType'];
            $validateData['dpIds'] = $validateData['adminerBusinessAuthor']['dpIds'];

            $validate->rule['authorType'] = 'requireWithNone:memUid|in:1,2';
            $validate->rule['dpIds'] = 'requeireIf:authorType,2';

            $validate->message['authorType'] = L('_ERR_FIELD_REQUIRE_WITH_FIELF', ['name' => '通讯录人员', 'condition' => '不为空', 'requireName' => '业务权限类型']);
            $validate->message['dpIds'] = L('_ERR_FIELD_REQUIRE_WITH_FIELF', ['name' => '业务权限类型', 'condition' => '为指定部门', 'requireName' => '指定部门ID']);
        }

        // 验证 并获取提交数据
        if (!$validate->check($validateData)) {
            E($validate->getError());
        }

        // 校验当前管理员是否有权限设置管理级别、角色组
        $checkRes = $this->checkAdminRole($validateData['eaLevel'], $validateData['earId']);
        if (!$checkRes) {
            E('_ERR_ADMIN_EALEVEL_ADMINROLE');
        }

        $this->postData = $validate->postData;
    }
}