InviteLinkService.class.php 4.61 KB
<?php
/**
 * Created by IntelliJ IDEA.
 * User: zhuxun37
 * Date: 2017/5/23
 * Time: 下午6:09
 */

namespace Common\Service;

use Common\Common\Department;
use Common\Model\AttrModel;
use Common\Model\InviteLinkModel;
use Common\Model\InviteSettingModel;

class InviteLinkService extends AbstractService
{

    public function __construct()
    {

        parent::__construct();
        $this->_d = new InviteLinkModel();
    }

    /**
     * 读取邀请连接信息
     * @param $result
     * @param $request
     * @param $user
     * @return bool
     */
    public function readLink(&$result, $request, $user)
    {

        $result = $this->_d->get_by_conds(array('invite_uid' => $user['memUid']));
        if (!empty($result)) {
            $result['default_data'] = unserialize($result['default_data']);
        } else {
            $result['default_data'] = array();
        }

        return true;
    }

    /**
     * 新邀请连接
     * @param $request
     * @param $user
     * @return bool
     */
    public function newLink($request, $user)
    {
        $dafaultData = $request['default_data'];
        // 获取部门ID 并验证是否合法
        $dpId = $dafaultData['department']['dpId'];
        $this->verifyDepartmentIdWithSetting($dpId, $user);

        // 读取字段配置
        $attrService = new AttrService();
        $fields = $attrService->getAttrList(true, array(), false, false);
        $fields = array_combine_by_key($fields, 'field_name');
        // 邀请设置
        $settingService = new InviteSettingService();
        $setting = $settingService->get_by_conds([]);
        // 是否邀请方式变更
        // 是否邀请人填写字段变更
        if ($setting['type'] != $request['type'] ||
                unserialize($setting['inviter_write']) != $request['inviter_write']) {
            E('_ERR_INVITE_SETTING_IS_CHANGED');
        }
        // 验证提交字段数据
        $this->verifyAttrPostParamsForNewLink($fields, $setting, $dafaultData);

        // Link数据
        $data['default_data'] = serialize($dafaultData);
        $data['type'] = $setting['type'];
        $data['invite_uid'] = $user['memUid'];
        if (empty($request['link_id'])) {
            $data['link_id'] = $this->_d->insert($data);
        } else {
            $this->_d->update($request['link_id'], $data);
        }

        return $data;
    }

    /**
     * 获取部门ID
     * @param $dpId string 部门ID
     * @param $user array 人员信息
     * @return bool
     */
    protected function verifyDepartmentIdWithSetting(&$dpId, $user)
    {
        // 获取邀请设置
        $inviteSettingServ = new InviteSettingModel();
        $inviteSetting = $inviteSettingServ->get_by_conds([]);

        // 如果是直接邀请
        if ($inviteSetting['type'] == InviteSettingService::INVITE_TYPE_NO_CHECK) {
            // 进入指定所在部门
            if (!empty($inviteSetting['departments'])) {
                $dpIds = unserialize($inviteSetting['departments']);
                $dpId = $dpIds[0];
            } else {
                // 进入邀请人所在部门
                // 获取邀请人所在部门, 判断提交部门是否合法
                $invitorDpIds = array_column($user['dpName'], 'dpId');
                if (!in_array($dpId, $invitorDpIds)) {
                    E('_ERR_NOT_THE_DEP_TO_WHICH_INVITOR_BELONGS');
                }
            }
        }

        // 判断部门是否存在
        if (empty(Department::instance()->getById($dpId))) {
            E('_ERR_DEPT_UNDEFINED');
        }

        return true;
    }

    /**
     * 验证提交属性合法性 For newLink function
     */
    private function verifyAttrPostParamsForNewLink($fields, $setting, &$dafaultData)
    {

        // 邀请者填写
        $inviterWrite = [];
        if (!empty($setting['inviter_write'])) {
            $inviterWrite = unserialize($setting['inviter_write']);
        }
        if (in_array('job', $inviterWrite) && empty($dafaultData['job']) && AttrModel::ATTR_IS_OPEN_TRUE == $fields['memJob']['is_open']) {
            E(L('_ERR_FIELD_CAN_NOT_EMPTY', ['name' => '岗位']));
        }
        if (in_array('role', $inviterWrite) && empty($dafaultData['role']) && AttrModel::ATTR_IS_OPEN_TRUE == $fields['memRole']['is_open']) {
            E(L('_ERR_FIELD_CAN_NOT_EMPTY', ['name' => '角色']));
        }
        if (!in_array('job', $inviterWrite) || 0 == $fields['memJob']['is_open']) {
            unset($dafaultData['job']);
        }
        if (!in_array('role', $inviterWrite) || 0 == $fields['memRole']['is_open']) {
            unset($dafaultData['role']);
        }

        return true;
    }
}