InviteLinkService.class.php
4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?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;
}
}