1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
status.php
См. документацию.
1<?php
2
4
6{
7 //Despite this function is not documented it should be version compatible
8 public static function GetList($by = 's_c_sort', $order = 'asc', $arFilter = [], $is_filtered = null, $arSelect = [])
9 {
10 global $DB;
11
12 $obQueryWhere = new CSQLWhere();
13 static $arWhereFields = [
14 'ID' => [
15 'TABLE_ALIAS' => 'S',
16 'FIELD_NAME' => 'S.ID',
17 'FIELD_TYPE' => 'int', //int, double, file, enum, int, string, date, datetime
18 'JOIN' => false,
19 ],
20 ];
21 $obQueryWhere->SetFields($arWhereFields);
22
23 if (!is_array($arSelect) || !$arSelect)
24 {
25 $arSelect = ['ID', 'C_SORT', 'ACTIVE', 'TITLE', 'DESCRIPTION', 'IS_FINAL', 'TIMESTAMP_X', 'DOCUMENTS', 'NOTIFY'];
26 }
27
28 if ($by === 's_id')
29 {
30 $strSqlOrder = 'ORDER BY S.ID';
31 $arSelect[] = 'ID';
32 }
33 elseif ($by === 's_timestamp')
34 {
35 $strSqlOrder = 'ORDER BY S.TIMESTAMP_X';
36 $arSelect[] = 'TIMESTAMP_X';
37 }
38 elseif ($by === 's_active')
39 {
40 $strSqlOrder = 'ORDER BY S.ACTIVE';
41 $arSelect[] = 'ACTIVE';
42 }
43 elseif ($by === 's_c_sort')
44 {
45 $strSqlOrder = 'ORDER BY S.C_SORT';
46 $arSelect[] = 'C_SORT';
47 }
48 elseif ($by === 's_title')
49 {
50 $strSqlOrder = 'ORDER BY S.TITLE ';
51 $arSelect[] = 'TITLE';
52 }
53 elseif ($by === 's_description')
54 {
55 $strSqlOrder = 'ORDER BY S.DESCRIPTION';
56 $arSelect[] = 'DESCRIPTION';
57 }
58 elseif ($by === 's_documents')
59 {
60 $strSqlOrder = 'ORDER BY DOCUMENTS';
61 $arSelect[] = 'DOCUMENTS';
62 }
63 else
64 {
65 $strSqlOrder = 'ORDER BY S.C_SORT';
66 $arSelect[] = 'C_SORT';
67 }
68
69 if ($order != 'desc')
70 {
71 $order = 'asc';
72 }
73
74 $strSqlOrder .= ' ' . $order . ' ';
75
76 $arSelectFields = [
77 'ID' => 'S.ID',
78 'C_SORT' => 'S.C_SORT',
79 'ACTIVE' => 'S.ACTIVE',
80 'NOTIFY' => 'S.NOTIFY',
81 'TITLE' => 'S.TITLE',
82 'DESCRIPTION' => 'S.DESCRIPTION',
83 'IS_FINAL' => 'S.IS_FINAL',
84 'TIMESTAMP_X' => 'S.TIMESTAMP_X TIMESTAMP_X_TEMP, ' . $DB->DateToCharFunction('S.TIMESTAMP_X'),
85 'DOCUMENTS' => 'count(DISTINCT D.ID)',
86 'REFERENCE_ID' => 'S.ID',
87 'REFERENCE' => $DB->Concat("'['", 'S.ID' , "'] '", 'S.TITLE'),
88 ];
89 $arSqlSelect = [];
90 foreach ($arSelect as $field)
91 {
92 if (array_key_exists($field, $arSelectFields))
93 {
94 $arSqlSelect[$field] = $arSelectFields[$field] . ' as ' . $field;
95 }
96 }
97
98 $bGroup = false;
99 $arGroupFields = [
100 'ID' => 'S.ID',
101 'C_SORT' => 'S.C_SORT',
102 'ACTIVE' => 'S.ACTIVE',
103 'NOTIFY' => 'S.NOTIFY',
104 'TITLE' => 'S.TITLE',
105 'DESCRIPTION' => 'S.DESCRIPTION',
106 'IS_FINAL' => 'S.IS_FINAL',
107 'TIMESTAMP_X' => 'S.TIMESTAMP_X',
108 'REFERENCE_ID' => 'S.ID',
109 'REFERENCE' => $DB->Concat("'['", 'S.ID' , "'] '", 'S.TITLE'),
110 ];
111 $arSqlGroup = [];
112 foreach ($arSelect as $field)
113 {
114 if (array_key_exists($field, $arGroupFields))
115 {
116 $arSqlGroup[$field] = $arGroupFields[$field];
117 }
118 elseif (array_key_exists($field, $arSelectFields))
119 {
120 $arSqlGroup['ID'] = 'S.ID';
121 $bGroup = true;
122 }
123 }
124
125 $arSqlSearch = $arSqlSearch_h = $arSqlSearch_g = [];
126
127 if (is_array($arFilter))
128 {
129 foreach ($arFilter as $key => $val)
130 {
131 if (is_array($val))
132 {
133 if (!$val)
134 {
135 continue;
136 }
137 }
138 else
139 {
140 if ((string)$val === '' || (string)$val === 'NOT_REF')
141 {
142 continue;
143 }
144 }
145
146 $match_value_set = array_key_exists($key . '_EXACT_MATCH', $arFilter);
147 $key = strtoupper($key);
148 $predicate = '';
149 switch ($key)
150 {
151 case 'ID':
152 $arSqlSearch[] = $obQueryWhere->GetQuery([$key => $val]);
153
154 break;
155 case 'ACTIVE':
156 $predicate = ($val == 'Y') ? "S.ACTIVE='Y'" : "S.ACTIVE='N'";
157
158 break;
159 case '!=ACTIVE':
160 if ($val === 'Y' || $val === 'N')
161 {
162 $arSqlSearch[] = "S.ACTIVE <> '" . $val . "'";
163 }
164
165 break;
166 case 'TITLE':
167 $match = ($match_value_set && $arFilter[$key . '_EXACT_MATCH'] == 'Y') ? 'N' : 'Y';
168 $predicate = GetFilterQuery('S.TITLE', $val, $match);
169
170 break;
171 case 'DESCRIPTION':
172 $match = ($match_value_set && $arFilter[$key . '_EXACT_MATCH'] == 'Y') ? 'N' : 'Y';
173 $predicate = GetFilterQuery('S.DESCRIPTION', $val, $match);
174
175 break;
176 case 'DOCUMENTS_1':
177 $arSqlSearch_h[] = 'count(D.ID) >= ' . intval($val);
178 $bGroup = true;
179
180 break;
181 case 'DOCUMENTS_2':
182 $arSqlSearch_h[] = 'count(D.ID) <= ' . intval($val);
183 $bGroup = true;
184
185 break;
186 case 'GROUP_ID':
187 if (!is_array($val))
188 {
189 $val = [$val];
190 }
191 $groups = [];
192 foreach ($val as $i => $v)
193 {
194 $v = intval($v);
195 if ($v > 0)
196 {
197 $groups[$v] = $v;
198 }
199 }
200 if (count($groups) > 0)
201 {
202 $arSqlSearch_g[] = 'G.GROUP_ID in (' . implode(', ', $groups) . ')';
203 $bGroup = true;
204 }
205
206 break;
207 case 'PERMISSION_TYPE_1':
208 $val = intval($val);
209 if ($val > 0)
210 {
211 $arSqlSearch_g[] = 'G.PERMISSION_TYPE >= ' . $val;
212 $bGroup = true;
213 }
214
215 break;
216 case 'PERMISSION_TYPE_2':
217 $val = intval($val);
218 if ($val > 0)
219 {
220 $arSqlSearch_g[] = 'G.PERMISSION_TYPE <= ' . $val;
221 $bGroup = true;
222 }
223
224 break;
225 }
226 if ($predicate <> '' && $predicate != '0')
227 {
228 $arSqlSearch[] = $predicate;
229 }
230 }
231 }
232
233 if (count($arSqlSearch) > 0)
234 {
235 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
236 }
237 else
238 {
239 $strSqlSearch = '';
240 }
241
242 if (count($arSqlSearch_h) > 0)
243 {
244 $strSqlSearch_h = '(' . implode(') and (', $arSqlSearch_h) . ') ';
245 }
246 else
247 {
248 $strSqlSearch_h = '';
249 }
250
251 if (count($arSqlSearch_g) > 0)
252 {
253 if ($strSqlSearch <> '')
254 {
255 $strSqlSearch .= ' AND ';
256 }
257 $strSqlSearch .= '(' . implode(') and (', $arSqlSearch_g) . ') ';
258 }
259
260 $strSql = '
261 SELECT
262 ' . implode(', ', $arSqlSelect) . '
263 FROM
264 b_workflow_status S
265 ' . ($strSqlSearch_h <> '' || array_key_exists('DOCUMENTS', $arSqlSelect) ? 'LEFT JOIN b_workflow_document D ON (D.STATUS_ID = S.ID)' : '') . '
266 ' . (count($arSqlSearch_g) > 0 ? 'LEFT JOIN b_workflow_status2group G ON (G.STATUS_ID = S.ID)' : '') . '
267 ' . ($strSqlSearch <> '' ? 'WHERE ' . $strSqlSearch : '') . '
268 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arSqlGroup) : '') . '
269 ' . ($strSqlSearch_h <> '' ? 'HAVING ' . $strSqlSearch_h : '') . '
270 ' . $strSqlOrder . '
271 ';
272
273 $res = $DB->Query($strSql);
274
275 return $res;
276 }
277
278 public static function GetByID($ID)
279 {
280 return self::GetList('', '', ['ID' => $ID, 'ID_EXACT_MATCH' => 'Y']);
281 }
282
283 public static function GetDropDownList($SHOW_ALL='N', $strOrder = 'desc', $arFilter = [])
284 {
285 global $USER;
286
287 if (strtolower($strOrder) != 'asc')
288 {
289 $strOrder = 'desc';
290 }
291 else
292 {
293 $strOrder = 'asc';
294 }
295
296 $arFilter['!=ACTIVE'] = 'N';
297 if (!(CWorkflow::IsAdmin() || $SHOW_ALL == 'Y'))
298 {
299 $arGroups = $USER->GetUserGroupArray();
300 if (!is_array($arGroups))
301 {
302 $arGroups = [2];
303 }
304 $arFilter['GROUP_ID'] = $arGroups;
305 $arFilter['PERMISSION_TYPE_1'] = 1;
306 }
307
308 return self::GetList('s_c_sort', $strOrder, $arFilter, null, ['REFERENCE_ID', 'REFERENCE', 'IS_FINAL', 'C_SORT']);
309 }
310
311 public static function GetNextSort()
312 {
313 global $DB;
314
315 $strSql = 'SELECT max(C_SORT) MAX_SORT FROM b_workflow_status';
316 $z = $DB->Query($strSql);
317 $zr = $z->Fetch();
318
319 return intval($zr['MAX_SORT']) + 100;
320 }
321
322 //check fields before writing
323 public function CheckFields($ID, $arFields)
324 {
325 $aMsg = [];
326
327 $ID = intval($ID);
328
329 if (
330 (
331 !$ID
332 && (
333 !array_key_exists('TITLE', $arFields)
334 || trim($arFields['TITLE']) == ''
335 )
336 )
337 || (
338 $ID
339 && array_key_exists('TITLE', $arFields)
340 && trim($arFields['TITLE']) == ''
341 )
342 )
343 {
344 $aMsg[] = ['id' => 'TITLE', 'text' => GetMessage('FLOW_FORGOT_TITLE')];
345 }
346
347 if (!empty($aMsg))
348 {
349 $e = new CAdminException($aMsg);
350 $GLOBALS['APPLICATION']->ThrowException($e);
351
352 return false;
353 }
354
355 return true;
356 }
357
358 //add
359 public function Add($arFields)
360 {
361 global $DB;
362
363 if (!$this->CheckFields(0, $arFields))
364 {
365 return false;
366 }
367
368 $ID = $DB->Add('b_workflow_status', $arFields);
369
370 if (($ID == 1) && ($arFields['ACTIVE'] != 'Y'))
371 {
372 $this->Update($ID, ['ACTIVE' => 'Y']);
373 }
374
375 return $ID;
376 }
377
378 //update
379 public function Update($ID, $arFields)
380 {
381 global $DB;
382 $ID = intval($ID);
383
384 if (($ID == 1) && array_key_exists('ACTIVE', $arFields))
385 {
386 $arFields['ACTIVE'] = 'Y';
387 }
388
389 if (!$this->CheckFields($ID, $arFields))
390 {
391 return false;
392 }
393
394 $strUpdate = $DB->PrepareUpdate('b_workflow_status', $arFields);
395 if ($strUpdate != '')
396 {
397 $strSql = 'UPDATE b_workflow_status SET ' . $strUpdate . ' WHERE ID = ' . $ID;
398 $DB->Query($strSql);
399 }
400
401 return true;
402 }
403
404 public function SetPermissions($STATUS_ID, $arGroups, $PERMISSION_TYPE = 1)
405 {
406 global $DB;
407
408 $STATUS_ID = intval($STATUS_ID);
409 $PERMISSION_TYPE = intval($PERMISSION_TYPE);
410
411 $DB->Query('DELETE FROM b_workflow_status2group WHERE STATUS_ID = ' . $STATUS_ID . ' AND PERMISSION_TYPE = ' . $PERMISSION_TYPE);
412 if (is_array($arGroups) && ($PERMISSION_TYPE == 1 || $PERMISSION_TYPE == 2))
413 {
414 foreach ($arGroups as $GROUP_ID)
415 {
416 $GROUP_ID = intval($GROUP_ID);
417 $arFields = [
418 'STATUS_ID' => $STATUS_ID,
419 'GROUP_ID' => $GROUP_ID,
420 'PERMISSION_TYPE' => $PERMISSION_TYPE,
421 ];
422 $DB->Insert('b_workflow_status2group', $arFields);
423 }
424 }
425 }
426}
Определения sqlwhere.php:1359
static IsAdmin()
Определения workflow.php:455
Определения status.php:6
static GetDropDownList($SHOW_ALL='N', $strOrder='desc', $arFilter=[])
Определения status.php:283
CheckFields($ID, $arFields)
Определения status.php:323
static GetByID($ID)
Определения status.php:278
static GetList($by='s_c_sort', $order='asc', $arFilter=[], $is_filtered=null, $arSelect=[])
Определения status.php:8
SetPermissions($STATUS_ID, $arGroups, $PERMISSION_TYPE=1)
Определения status.php:404
static GetNextSort()
Определения status.php:311
Add($arFields)
Определения status.php:359
Update($ID, $arFields)
Определения status.php:379
$arFields
Определения dblapprove.php:5
$arGroups
Определения options.php:1766
$res
Определения filter_act.php:7
GetFilterSqlSearch($arSqlSearch=array(), $FilterLogic="FILTER_logic")
Определения filter_tools.php:397
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
$zr
Определения options.php:5
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$groups
Определения options.php:30
$z
Определения options.php:31
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$val
Определения options.php:1793
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106