@@ -24,16 +24,25 @@ class Domain_Member_Action_GetListByQuery {
24
24
"left " => Member::ROLE_LEFT ,
25
25
];
26
26
27
+ protected const _ALLOWED_FILTER_QUERY_FIELDS = [
28
+ "badge " ,
29
+ ];
30
+
31
+ protected const _FILTER_BADGE_FOR_GUEST = [
32
+ "гость " ,
33
+ "guest " ,
34
+ ];
35
+
27
36
/**
28
37
* Получаем список пользователей по запросу
29
38
*/
30
- public static function do (string $ query , int $ limit , int $ offset , array $ filter_npc_type , array $ filter_role , array $ sort_fields , bool $ is_legacy = false ):array {
39
+ public static function do (string $ query , int $ limit , int $ offset , array $ filter_npc_type , array $ filter_role , array $ filter_query_field , array $ sort_fields , bool $ is_legacy = false ):array {
31
40
32
41
// для старых версий получаем пользователей старым способом
33
42
if ($ is_legacy ) {
34
43
return Gateway_Db_CompanyData_MemberList::getListByQueryLegacy ($ query , $ limit , $ offset , $ filter_npc_type , $ filter_role );
35
44
} else {
36
- return Gateway_Db_CompanyData_MemberList::getListByQuery ($ query , $ limit , $ offset , $ filter_npc_type , $ filter_role , $ sort_fields );
45
+ return Gateway_Db_CompanyData_MemberList::getListByQuery ($ query , $ limit , $ offset , $ filter_npc_type , $ filter_role , $ filter_query_field , $ sort_fields );
37
46
}
38
47
}
39
48
@@ -46,13 +55,15 @@ public static function do(string $query, int $limit, int $offset, array $filter_
46
55
* @param string $sort_field
47
56
* @param array $filter_npc_type
48
57
* @param array $filter_role
58
+ * @param array $filter_query_field
59
+ * @param string $query
49
60
*
50
61
* @return array
51
62
* @throws ParamException
52
- * @throws \BaseFrame\Exception\Domain\ParseFatalException
53
63
* @throws \BaseFrame\Exception\Request\ParamException
64
+ * @long - множество проверок
54
65
*/
55
- public static function prepareParams (int $ member_role , int $ limit , int $ offset , string $ sort_field , array $ filter_npc_type , array $ filter_role ):array {
66
+ public static function prepareParams (int $ member_role , int $ limit , int $ offset , string $ sort_field , array $ filter_npc_type , array $ filter_role, array $ filter_query_field , string $ query ):array {
56
67
57
68
if ($ limit < 1 || $ offset < 0 ) {
58
69
throw new ParamException ("invalid limit or offset " );
@@ -75,21 +86,37 @@ public static function prepareParams(int $member_role, int $limit, int $offset,
75
86
$ filter_role = self ::_prepareFilterRole ($ filter_role );
76
87
}
77
88
89
+ if (count ($ filter_query_field ) > 0 ) {
90
+
91
+ self ::_prepareFilterQueryField ($ filter_query_field );
92
+
93
+ // если клиент ожидает получить гостей по бейджу
94
+ if (in_array (mb_strtolower ($ query ), self ::_FILTER_BADGE_FOR_GUEST )) {
95
+
96
+ // актуализируем параметры для поиска - роль "гость" и поисковый запрос "Guest"
97
+ $ filter_role = [Member::ROLE_GUEST ];
98
+ $ query = "guest " ;
99
+ }
100
+ }
101
+
78
102
$ sort_field = self ::_prepareSortFields ($ member_role , $ sort_field );
79
103
80
- return [$ sort_field , $ filter_npc_type , $ filter_role ];
104
+ return [$ sort_field , $ filter_npc_type , $ filter_role, $ query ];
81
105
}
82
106
83
107
/**
84
108
* получаем список npc_type для фильтра
85
- *
86
- * @throws \BaseFrame\Exception\Domain\ParseFatalException
87
109
*/
88
110
protected static function _prepareFilterNpcTypeList (array $ filter_client_npc_type ):array {
89
111
90
112
$ filter_npc_type = [];
91
113
foreach ($ filter_client_npc_type as $ user_type ) {
92
- $ filter_npc_type [] = Type_User_Main::getNpcTypeByUserType ($ user_type );
114
+
115
+ try {
116
+ $ filter_npc_type [] = Type_User_Main::getNpcTypeByUserType ($ user_type );
117
+ } catch (\BaseFrame \Exception \Domain \ParseFatalException ) {
118
+ throw new ParamException ("invalid client npc_type " );
119
+ }
93
120
}
94
121
95
122
return $ filter_npc_type ;
@@ -115,6 +142,21 @@ protected static function _prepareFilterRole(array $filter_client_role):array {
115
142
return $ filter_role ;
116
143
}
117
144
145
+ /**
146
+ * получаем список полей для фильтра по поисковому запросу
147
+ *
148
+ * @throws ParamException
149
+ */
150
+ protected static function _prepareFilterQueryField (array $ filter_client_query_field ):void {
151
+
152
+ foreach ($ filter_client_query_field as $ query_field ) {
153
+
154
+ if (!in_array ($ query_field , self ::_ALLOWED_FILTER_QUERY_FIELDS )) {
155
+ throw new ParamException ("unknown filter_query_field: {$ query_field }" );
156
+ }
157
+ }
158
+ }
159
+
118
160
/**
119
161
* получаем строку для сортировки
120
162
*
0 commit comments