1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
group.php
См. документацию.
1<?php
8
9
10/*
11 $arFields:
12
13 ID int(11) unsigned not null auto_increment,
14 ACTIVE char(1) not null default 'Y',
15 TITLE varchar(255) not null default ' ',
16 CODE varchar(50) NULL DEFAULT NULL,
17 SORT int(11) not null default '500',
18 ACTIVE_FROM datetime,
19 ACTIVE_TO datetime,
20 COURSE_LESSON_ID INT NOT NULL,
21 PRIMARY KEY(ID)
22*/
24{
32 public static function add($arFields)
33 {
35
36 if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y")
37 $arFields["ACTIVE"] = "N";
38
39 if ( ! self::CheckFields($arFields) )
40 return false;
41
42 if ( ! $USER_FIELD_MANAGER->CheckFields("LEARNING_LGROUPS", 0, $arFields) )
43 return (false);
44
45 if (array_key_exists('ID', $arFields))
46 unset($arFields['ID']);
47
48 foreach(GetModuleEvents('learning', 'OnBeforeLearningGroupAdd', true) as $arEvent)
49 {
50 if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
51 {
52 IncludeModuleLangFile(__FILE__);
53
54 $errmsg = GetMessage("LEARNING_GROUP_ADD_UNKNOWN_ERROR");
55 $errno = 'LEARNING_GROUP_ADD_UNKNOWN_ERROR';
56
57 if ($ex = $APPLICATION->getException())
58 {
59 $errmsg = $ex->getString();
60 $errno = $ex->getId();
61 }
62
63 $e = new CAdminException(array('text' => $errmsg, 'id' => $errno));
64 $APPLICATION->ThrowException($e);
65
66 return false;
67 }
68 }
69
70 $id = $DB->Add("b_learn_groups", $arFields, array(), "learning");
71 if ($id)
72 $USER_FIELD_MANAGER->Update("LEARNING_LGROUPS", $id, $arFields);
73
74 if ($id > 0 && defined("BX_COMP_MANAGED_CACHE"))
75 {
76 global $CACHE_MANAGER;
77 $CACHE_MANAGER->ClearByTag('LEARNING_GROUP_' . (int) ($id / 100));
78 $CACHE_MANAGER->ClearByTag('LEARNING_GROUP');
79 }
80
81 foreach(GetModuleEvents('learning', 'OnAfterLearningGroupAdd', true) as $arEvent)
82 ExecuteModuleEventEx($arEvent, array($id, &$arFields));
83
84 return ($id);
85 }
86
87
96 public static function update($id, $arFields)
97 {
99
100 $id = (int) $id;
101
102 if ($id < 1)
103 return (false);
104
105 if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y")
106 $arFields["ACTIVE"] = "N";
107
108 if ( ! self::CheckFields($arFields, $id) )
109 return false;
110
111 if ( ! $USER_FIELD_MANAGER->CheckFields("LEARNING_LGROUPS", $id, $arFields) )
112 return (false);
113
114 if (array_key_exists('ID', $arFields))
115 unset($arFields['ID']);
116
117 foreach(GetModuleEvents('learning', 'OnBeforeLearningGroupUpdate', true) as $arEvent)
118 {
119 if (ExecuteModuleEventEx($arEvent, array($id, &$arFields)) === false)
120 {
121 IncludeModuleLangFile(__FILE__);
122
123 $errmsg = GetMessage("LEARNING_GROUP_UPDATE_UNKNOWN_ERROR");
124 $errno = 'LEARNING_GROUP_UPDATE_UNKNOWN_ERROR';
125
126 if ($ex = $APPLICATION->getException())
127 {
128 $errmsg = $ex->getString();
129 $errno = $ex->getId();
130 }
131
132 $e = new CAdminException(array('text' => $errmsg, 'id' => $errno));
133 $APPLICATION->ThrowException($e);
134
135 return false;
136 }
137 }
138
139 $USER_FIELD_MANAGER->Update('LEARNING_LGROUPS', $id, $arFields);
140
141 $strUpdate = $DB->PrepareUpdate("b_learn_groups", $arFields, "learning");
142 $strSql = "UPDATE b_learn_groups SET " . $strUpdate . " WHERE ID=" . $id;
143 $rc = $DB->queryBind($strSql, $arBinds = array(), $bIgnoreErrors = true);
144
145 if (defined("BX_COMP_MANAGED_CACHE"))
146 {
147 global $CACHE_MANAGER;
148 $CACHE_MANAGER->ClearByTag('LEARNING_GROUP_' . (int) ($id / 100));
149 $CACHE_MANAGER->ClearByTag('LEARNING_GROUP');
150 }
151
152 foreach(GetModuleEvents('learning', 'OnAfterLearningGroupUpdate', true) as $arEvent)
153 ExecuteModuleEventEx($arEvent, array($id, &$arFields));
154
155 return ($rc !== false);
156 }
157
158
169 public static function getList($arOrder, $arFilter, $arSelect = array(), $arNavParams = array())
170 {
172
173 $obUserFieldsSql = new CUserTypeSQL();
174 $obUserFieldsSql->SetEntity("LEARNING_LGROUPS", "LG.ID");
175 $obUserFieldsSql->SetSelect($arSelect);
176 $obUserFieldsSql->SetFilter($arFilter);
177 $obUserFieldsSql->SetOrder($arOrder);
178
180 'ID' => 'LG.ID',
181 'TITLE' => 'LG.TITLE',
182 'ACTIVE' => 'LG.ACTIVE',
183 'CODE' => 'LG.CODE',
184 'SORT' => 'LG.SORT',
185 'ACTIVE_FROM' => $DB->DateToCharFunction('LG.ACTIVE_FROM', 'FULL'),
186 'ACTIVE_TO' => $DB->DateToCharFunction('LG.ACTIVE_TO', 'FULL'),
187 'COURSE_LESSON_ID' => 'LG.COURSE_LESSON_ID',
188 'COURSE_TITLE' => 'LL.NAME',
189 'MEMBER_ID' => 'LGM.USER_ID'
190 );
191
192 $arFieldsSort = $arFields;
193 $arFieldsSort["ACTIVE_FROM"] = "LG.ACTIVE_FROM";
194 $arFieldsSort["ACTIVE_TO"] = "LG.ACTIVE_TO";
195
196 if (count($arSelect) <= 0 || in_array("*", $arSelect))
197 $arSelect = array_diff(array_keys($arFields), array('MEMBER_ID'));
198 elseif (!in_array("ID", $arSelect))
199 $arSelect[] = "ID";
200
201 if (!is_array($arOrder))
202 $arOrder = array();
203
204 $arSqlOrder = [];
205 foreach ($arOrder as $by => $order)
206 {
207 $by = (string) $by;
208 $byUppercase = mb_strtoupper($by);
209 $needle = null;
210 $order = mb_strtolower($order);
211
212 if ($order != "asc")
213 $order = "desc";
214
215 if (array_key_exists($byUppercase, $arFieldsSort))
216 {
217 $arSqlOrder[] = ' ' . $arFieldsSort[$byUppercase] . ' ' . $order . ' ';
218 $needle = $byUppercase;
219 }
220 elseif ($s = $obUserFieldsSql->getOrder(mb_strtolower($by)))
221 $arSqlOrder[] = ' ' . $s . ' ' . $order . ' ';
222
223 if (
224 ($needle !== null)
225 && ( ! in_array($needle, $arSelect, true) )
226 )
227 {
228 $arSelect[] = $needle;
229 }
230 }
231
232 if (
233 array_key_exists('MEMBER_ID', $arFilter)
234 && ( ! in_array('MEMBER_ID', $arSelect, true) )
235 )
236 {
237 $arSelect[] = 'MEMBER_ID';
238 }
239
240 $arSqlSelect = array();
241 foreach ($arSelect as $field)
242 {
243 $field = mb_strtoupper($field);
244 if (array_key_exists($field, $arFields))
245 $arSqlSelect[$field] = $arFields[$field] . ' AS ' . $field;
246 }
247
248 if (!sizeof($arSqlSelect))
249 $arSqlSelect = 'LG.ID AS ID';
250
251 $arSqlSearch = self::getFilter($arFilter);
252
253 $r = $obUserFieldsSql->GetFilter();
254 if ($r <> '')
255 $arSqlSearch[] = "(".$r.")";
256
257 $strSql = "
258 SELECT
259 ".implode(",\n", $arSqlSelect)."
260 ".$obUserFieldsSql->GetSelect();
261
262 $strFrom = "
263 FROM
264 b_learn_groups LG
265 ";
266
267 if (in_array('COURSE_TITLE', $arSelect, true))
268 $strFrom .= "LEFT OUTER JOIN b_learn_lesson LL ON LL.ID = LG.COURSE_LESSON_ID \n" ;
269
270 if (in_array('MEMBER_ID', $arSelect, true))
271 $strFrom .= "LEFT JOIN b_learn_groups_member LGM ON LGM.LEARNING_GROUP_ID = LG.ID \n" ;
272
273 $strFrom .= $obUserFieldsSql->GetJoin("LG.ID") . " "
274 . (sizeof($arSqlSearch) ? " WHERE " . implode(" AND ", $arSqlSearch) : "") . " ";
275
276 $strSql .= $strFrom;
277
278 $strSqlOrder = "";
279 DelDuplicateSort($arSqlOrder);
280 for ($i = 0, $arSqlOrderCnt = count($arSqlOrder); $i < $arSqlOrderCnt; $i++)
281 {
282 if ($i == 0)
283 $strSqlOrder = " ORDER BY ";
284 else
285 $strSqlOrder .= ",";
286
287 $strSqlOrder .= $arSqlOrder[$i];
288 }
289
290 $strSql .= $strSqlOrder;
291
292 if (count($arNavParams))
293 {
294 if (isset($arNavParams['nTopCount']))
295 {
296 $strSql = $DB->TopSql($strSql, (int) $arNavParams['nTopCount']);
297 $res = $DB->Query($strSql);
298 $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS"));
299 }
300 else
301 {
302 $res_cnt = $DB->Query("SELECT COUNT(LG.ID) as C " . $strFrom);
303 $res_cnt = $res_cnt->Fetch();
304 $res = new CDBResult();
305 $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS"));
306 $rc = $res->NavQuery($strSql, $res_cnt["C"], $arNavParams, $bIgnoreErrors = false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
307 }
308 }
309 else
310 {
311 $res = $DB->Query($strSql);
312 $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS"));
313 }
314
315 return $res;
316 }
317
318
326 public static function delete($groupId)
327 {
329
330 foreach(GetModuleEvents('learning', 'OnBeforeLearningGroupDelete', true) as $arEvent)
331 {
332 if (ExecuteModuleEventEx($arEvent, array($groupId)) === false)
333 {
334 IncludeModuleLangFile(__FILE__);
335
336 $errmsg = GetMessage("LEARNING_GROUP_DELETE_UNKNOWN_ERROR");
337 $errno = 'LEARNING_GROUP_DELETE_UNKNOWN_ERROR';
338
339 if ($ex = $APPLICATION->getException())
340 {
341 $errmsg = $ex->getString();
342 $errno = $ex->getId();
343 }
344
345 $e = new CAdminException(array('text' => $errmsg, 'id' => $errno));
346 $APPLICATION->ThrowException($e);
347
348 return false;
349 }
350 }
351
352 $rc = $DB->Query(
353 "DELETE FROM b_learn_groups WHERE ID = " . (int) $groupId,
354 $bIgnoreErrors = true
355 );
356
357 if (defined("BX_COMP_MANAGED_CACHE"))
358 {
359 global $CACHE_MANAGER;
360 $CACHE_MANAGER->ClearByTag('LEARNING_GROUP_' . (int) ($groupId / 100));
361 $CACHE_MANAGER->ClearByTag('LEARNING_GROUP');
362 }
363
364 $USER_FIELD_MANAGER->delete('LEARNING_LGROUPS', $groupId);
365
366 CEventLog::add(array(
367 'AUDIT_TYPE_ID' => 'LEARNING_REMOVE_ITEM',
368 'MODULE_ID' => 'learning',
369 'ITEM_ID' => 'LG #' . $groupId,
370 'DESCRIPTION' => 'learning group removed'
371 ));
372
373 foreach(GetModuleEvents('learning', 'OnAfterLearningGroupDelete', true) as $arEvent)
374 ExecuteModuleEventEx($arEvent, array($groupId));
375
376 return ($rc !== false);
377 }
378
379
380 private static function CheckFields($arFields, $id = false)
381 {
382 global $DB;
383
384 $arMsg = array();
385
386 if ( (is_set($arFields, "TITLE") || $id === false) && trim($arFields["TITLE"]) == '')
387 $arMsg[] = array("id"=>"TITLE", "text"=> GetMessage("LEARNING_BAD_NAME"));
388
389 if (is_set($arFields, "ACTIVE_FROM") && $arFields["ACTIVE_FROM"] <> '' && (!$DB->IsDate($arFields["ACTIVE_FROM"], false, LANG, "FULL")))
390 $arMsg[] = array("id"=>"ACTIVE_FROM", "text"=> GetMessage("LEARNING_BAD_ACTIVE_FROM"));
391
392 if (is_set($arFields, "ACTIVE_TO") && $arFields["ACTIVE_TO"] <> '' && (!$DB->IsDate($arFields["ACTIVE_TO"], false, LANG, "FULL")))
393 $arMsg[] = array("id"=>"ACTIVE_TO", "text"=> GetMessage("LEARNING_BAD_ACTIVE_TO"));
394
395 if ($id === false)
396 {
397 if (!array_key_exists('COURSE_LESSON_ID', $arFields) || intval($arFields["COURSE_LESSON_ID"]) < 1)
398 {
399 $arMsg[] = array("id"=>"COURSE_LESSON_ID", "text"=> GetMessage("LEARNING_BAD_COURSE_ID"));
400 }
401 }
402
403 if(!empty($arMsg))
404 {
405 $e = new CAdminException($arMsg);
406 $GLOBALS["APPLICATION"]->ThrowException($e);
407 return false;
408 }
409
410 return true;
411 }
412
413
414 private static function getFilter($arFilter)
415 {
416 global $DB;
417
418 if (!is_array($arFilter))
419 $arFilter = Array();
420
421 $arSqlSearch = Array();
422
423 foreach ($arFilter as $key => $val)
424 {
426 $key = $res["FIELD"];
427 $cOperationType = $res["OPERATION"];
428
429 $key = mb_strtoupper($key);
430
431 switch ($key)
432 {
433 case 'ID':
434 case 'SORT':
435 case 'COURSE_LESSON_ID':
436 $arSqlSearch[] = CLearnHelper::FilterCreate('LG.' . $key, $val, 'number', $bFullJoin, $cOperationType);
437 break;
438
439 case 'ACTIVE':
440 $arSqlSearch[] = CLearnHelper::FilterCreate('LG.' . $key, $val, 'string_equal', $bFullJoin, $cOperationType);
441 break;
442
443 case 'ACTIVE_FROM':
444 case 'ACTIVE_TO':
445 if ($val !== null)
446 $arSqlSearch[] = CLearnHelper::FilterCreate('LG.' . $key, $val, 'date', $bFullJoin, $cOperationType);
447 break;
448 case "ACTIVE_DATE":
449 if($val <> '')
450 {
451 $arSqlSearch[] = ($cOperationType == "N" ? " NOT" : "")
452 . "((LG.ACTIVE_TO >= " . $DB->GetNowFunction()
453 ." OR LG.ACTIVE_TO IS NULL) AND (LG.ACTIVE_FROM <= " . $DB->GetNowFunction()
454 . " OR LG.ACTIVE_FROM IS NULL))";
455 }
456 break;
457 case 'TITLE':
458 case 'CODE':
459 $arSqlSearch[] = CLearnHelper::FilterCreate("LG." . $key, $val, "string", $bFullJoin, $cOperationType);
460 break;
461
462 case 'COURSE_TITLE':
463 $arSqlSearch[] = CLearnHelper::FilterCreate("LL.NAME", $val, "string", $bFullJoin, $cOperationType);
464 break;
465
466 case 'MEMBER_ID':
467 $arSqlSearch[] = CLearnHelper::FilterCreate('LGM.USER_ID', intval($val), 'number', $bFullJoin, $cOperationType);
468 break;
469
470 default:
471 if (mb_substr($key, 0, 3) !== 'UF_')
472 {
473 throw new LearnException(
474 'Unknown field: ' . $key,
476 );
477 }
478 break;
479 }
480 }
481
482 return array_filter($arSqlSearch);
483 }
484}
global $APPLICATION
Определения include.php:80
static FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
Определения clearnhelper.php:214
static MkOperationFilter($key)
Определения clearnhelper.php:143
Определения group.php:24
static update($id, $arFields)
Определения group.php:96
static getList($arOrder, $arFilter, $arSelect=array(), $arNavParams=array())
Определения group.php:169
static add($arFields)
Определения group.php:32
Определения usertypesql.php:4
const EXC_ERR_ALL_PARAMS
Определения learnexception.php:7
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
global $USER_FIELD_MANAGER
Определения attempt.php:6
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
DelDuplicateSort(&$arSort)
Определения tools.php:2055
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
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