SaveController.class.php
5.31 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
151
152
153
154
155
156
157
158
<?php
/**
* Created by PhpStorm.
* User: liyifei2012it
* Date: 17/9/26
* Time: 11:21
*/
namespace Apicp\Controller\HomePage;
use Com\PackageValidate;
use Common\Common\HomePage;
class SaveController extends AbstractController
{
/**
* Save
* @author liyifei
* @desc 保存个人主页设置
* @param Int homepage:true:1 是否开启(1=关闭;2=开启)
* @param Array attrs 全体成员信息显示(只传展示的字段;homepage=2时必传)
* @param Int secret 敏感成员信息是否显示(1=不显示;2=显示)
* @param Array secret_rights 敏感成员范围(secret=2时必传)
* @param Array secret_rights.dp_ids 部门ID
* @param Array secret_rights.tag_ids 标签ID
* @param Array secret_rights.uids 人员ID
* @param Array secret_rights.job_ids 职位ID
* @param Array secret_rights.role_ids 角色ID
* @param Array secret_attrs 敏感成员信息显示(只传展示的字段;secret=2时必传)
* @return array
* array(
* 'setting_id' => 1 // 设置ID
* )
*/
public function Index()
{
// 请求数据
$postData = I('post.');
// 验证规则
$rules = [
'homepage' => 'require|integer|in:1,2',
'attrs' => 'array',
'secret' => 'integer|in:1,2',
'secret_rights' => 'array',
'secret_attrs' => 'array',
];
// 验证请求数据
$validate = new PackageValidate();
$validate->postData = $postData;
$validate->validateParams($rules);
// 校验及格式化请求数据
$formatData = $this->_formatPostData($postData);
$homepageServ = &HomePage::instance();
$res = $homepageServ->saveSetting($formatData);
if (!$res) {
E('_ERR_HOMEPAGE_SAVE_SETTING');
}
}
/**
* 校验及格式化请求数据
* @author liyifei
* @param array $postData 请求数据
* @return array
*/
private function _formatPostData($postData)
{
// 默认返回值格式
$formatData = [
'homepage' => isset($postData['homepage']) ? $postData['homepage'] : HomePage::CLOSE,
'attrs' => isset($postData['attrs']) ? $postData['attrs'] : [],
'secret' => isset($postData['secret']) ? $postData['secret'] : HomePage::CLOSE,
'secret_rights' => isset($postData['secret_rights']) ? $postData['secret_rights'] : [],
'secret_attrs' => isset($postData['secret_attrs']) ? $postData['secret_attrs'] : [],
];
// 可用人员字段
$homepageServ = &HomePage::instance();
$attrList = $homepageServ->getAttrs();
$fieldNames = array_keys($attrList);
// 个人主页功能开启
if ($postData['homepage'] == HomePage::OPEN && (!isset($postData['attrs']) || empty($postData['attrs']))) {
// 全体成员信息参数错误
E('_ERR_HOMEPAGE_ATTRS_PARAM');
}
// 全体成员信息包含未启用的员工属性
if (isset($postData['attrs']) && !empty($postData['attrs']) && array_diff($postData['attrs'], $fieldNames)) {
E('_ERR_HOMEPAGE_ATTRS_VALUES');
}
// 敏感信息缺少必传参数
if (isset($postData['secret']) && $postData['secret'] == HomePage::OPEN && !isset($postData['secret_rights'], $postData['secret_attrs'])) {
E('_ERR_HOMEPAGE_SECRET_ATTRS_LOSE');
}
// 校验敏感成员权限数据格式
if (isset($postData['secret_rights']) && !empty($postData['secret_rights'])) {
$rightKeys = ['uids', 'dp_ids', 'tag_ids', 'job_ids', 'role_ids'];
if (array_diff(array_keys($postData['secret_rights']), $rightKeys)) {
E('_ERR_HOMEPAGE_SECRET_RIGHT');
}
// 格式化敏感成员权限数据
$formatData['secret_rights'] = $this->formatPostData($postData['secret_rights']);
}
// 敏感成员信息包含未启用的员工属性
if (isset($postData['secret_attrs']) && !empty($postData['secret_attrs']) && array_diff($postData['secret_attrs'], $fieldNames)) {
E('_ERR_HOMEPAGE_SECRET_ATTRS_VALUES');
}
return $formatData;
}
/**
* 格式化用户输入的权限数据
* @author zhonglei
* @param array $rights 权限数据
* @return array
*/
public function formatPostData($rights)
{
$data = [];
foreach ($rights as $k => $v) {
// 过滤空数组
if (!is_array($v) || empty($v)) {
continue;
}
// 数据分组
switch ($k) {
case 'dp_ids':
$data[HomePage::RIGHT_TYPE_DEPARTMENT] = $v;
break;
case 'tag_ids':
$data[HomePage::RIGHT_TYPE_TAG] = $v;
break;
case 'uids':
$data[HomePage::RIGHT_TYPE_USER] = $v;
break;
case 'job_ids':
$data[HomePage::RIGHT_TYPE_JOB] = $v;
break;
case 'role_ids':
$data[HomePage::RIGHT_TYPE_ROLE] = $v;
break;
}
}
return $data;
}
}