<?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; } }