1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
course.php
См. документацию.
1<?php
2
3class CCourse
4{
5 // 2012-04-17 Checked/modified for compatibility with new data model
6 final public static function GetList($arOrder = array(), $arFields = array(), $arNavParams = array())
7 {
8 // Lists only lesson-courses
9 $arFields = array_merge (array('>LINKED_LESSON_ID' => 0), $arFields);
10
11 foreach ($arOrder as $key => $value)
12 {
13 if (mb_strtoupper($key) === 'ID')
14 {
15 $arOrder['COURSE_ID'] = $arOrder[$key];
16 unset ($arOrder[$key]);
17 }
18 }
19
20 // We must replace '...ID' => '...COURSE_ID', where '...' is some operation (such as '!', '<=', etc.)
21 foreach ($arFields as $key => $value)
22 {
23 // If key ends with 'ID'
24 if ((mb_strlen($key) >= 2) && (mb_strtoupper(mb_substr($key, -2)) === 'ID'))
25 {
26 // And prefix before 'ID' doesn't contains letters
27 if ( ! preg_match ("/[a-zA-Z_]+/", mb_substr($key, 0, -2)) )
28 {
29 $prefix = '';
30 if (mb_strlen($key) > 2)
31 $prefix = mb_substr($key, 0, -2);
32
33 $arFields[$prefix . 'COURSE_ID'] = $arFields[$key];
34 unset ($arFields[$key]);
35 }
36 }
37 }
38
39 $arFields['#REPLACE_COURSE_ID_TO_ID'] = true;
40
41 $res = CLearnLesson::GetList($arOrder, $arFields, array(), $arNavParams);
42 return ($res);
43 }
44
45
55 final public static function CourseGetLinkedLesson ($courseId)
56 {
58
59 if ( ! isset($arMap['C' . $courseId]) )
60 {
61 return false;
62 }
63
64 // return id of corresponded lesson
65 return ($arMap['C' . $courseId]);
66 }
67
68
69 // 2012-04-17 Checked/modified for compatibility with new data model
70 function CheckFields($arFields, $ID = false)
71 {
72 global $DB;
73 $arMsg = array();
74
75 if ( (is_set($arFields, "NAME") || $ID === false) && trim($arFields["NAME"]) == '')
76 {
77 $arMsg[] = array("id"=>"NAME", "text"=> GetMessage("LEARNING_BAD_NAME"));
78 }
79
80 if (is_set($arFields, "ACTIVE_FROM") && $arFields["ACTIVE_FROM"] <> '' && (!$DB->IsDate($arFields["ACTIVE_FROM"], false, LANG, "FULL")))
81 {
82 $arMsg[] = array("id"=>"ACTIVE_FROM", "text"=> GetMessage("LEARNING_BAD_ACTIVE_FROM"));
83 }
84
85 if (is_set($arFields, "ACTIVE_TO") && $arFields["ACTIVE_TO"] <> '' && (!$DB->IsDate($arFields["ACTIVE_TO"], false, LANG, "FULL")))
86 {
87 $arMsg[] = array("id"=>"ACTIVE_TO", "text"=> GetMessage("LEARNING_BAD_ACTIVE_TO"));
88 }
89
90 if (is_set($arFields, "PREVIEW_PICTURE") && is_array($arFields["PREVIEW_PICTURE"]))
91 {
92 $error = CFile::CheckImageFile($arFields["PREVIEW_PICTURE"]);
93 if ($error <> '')
94 {
95 $arMsg[] = array("id"=>"PREVIEW_PICTURE", "text"=> $error);
96 }
97 }
98
99 //Sites
100 if (
101 ($ID === false && !is_set($arFields, "SITE_ID"))
102 ||
103 (is_set($arFields, "SITE_ID"))
104 &&
105 (!is_array($arFields["SITE_ID"]) || empty($arFields["SITE_ID"]))
106 )
107 {
108 $arMsg[] = array("id"=>"SITE_ID[]", "text"=> GetMessage("LEARNING_BAD_SITE_ID"));
109 }
110 elseif (is_set($arFields, "SITE_ID"))
111 {
112 $tmp = "";
113 foreach($arFields["SITE_ID"] as $lang)
114 {
115 $res = CSite::GetByID($lang);
116 if(!$res->Fetch())
117 {
118 $tmp .= "'".$lang."' - ".GetMessage("LEARNING_BAD_SITE_ID_EX")."<br>";
119 }
120 }
121 if ($tmp!="") $arMsg[] = array("id"=>"SITE_ID[]", "text"=> $tmp);
122 }
123
124 if(!empty($arMsg))
125 {
126 $e = new CAdminException($arMsg);
127 $GLOBALS["APPLICATION"]->ThrowException($e);
128 return false;
129 }
130
131 return true;
132 }
133
134
135 // 2012-04-17 Checked/modified for compatibility with new data model
136 function Add($arFields)
137 {
138 global $DB;
139
140 if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y")
141 $arFields["ACTIVE"] = "N";
142
143 if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html")
144 $arFields["DETAIL_TEXT_TYPE"] = "text";
145
146 if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html")
147 $arFields["PREVIEW_TEXT_TYPE"]="text";
148
149 if (is_set($arFields, "PREVIEW_PICTURE") && $arFields["PREVIEW_PICTURE"]["name"] == '' && $arFields["PREVIEW_PICTURE"]["del"] == '')
150 unset($arFields["PREVIEW_PICTURE"]);
151
152 if (is_set($arFields, "RATING") && !in_array($arFields["RATING"], Array("Y", "N")))
153 $arFields["RATING"] = "N";
154
155 if (is_set($arFields, "RATING_TYPE") && !in_array($arFields["RATING_TYPE"], Array("like", "standart_text", "like_graphic", "standart")))
156 $arFields["RATING_TYPE"] = NULL;
157
158 if($this->CheckFields($arFields))
159 {
160 unset($arFields["ID"]);
161
162 $arFieldsLesson = $arFields;
163 $arFieldsToUnset = array ('GROUP_ID', 'SITE_ID');
164
165 // Some fields mustn't be in unilesson
166 foreach ($arFieldsToUnset as $key => $value)
167 if (array_key_exists($value, $arFieldsLesson))
168 unset ($arFieldsLesson[$value]);
169
170 $lessonId = CLearnLesson::Add ($arFieldsLesson, $isCourse = true);
172 if ($ID === false)
173 return (false);
174
175 //Sites
176 $str_LID = "''";
177 foreach($arFields["SITE_ID"] as $lang)
178 $str_LID .= ", '".$DB->ForSql($lang)."'";
179 $strSql = "DELETE FROM b_learn_course_site WHERE COURSE_ID=".$ID;
180 $DB->Query($strSql);
181
182 $strSql =
183 "INSERT INTO b_learn_course_site(COURSE_ID, SITE_ID) ".
184 "SELECT ".$ID.", LID ".
185 "FROM b_lang ".
186 "WHERE LID IN (".$str_LID.") ";
187
188 $DB->Query($strSql);
189
191
193
194 return $ID;
195 }
196 return false;
197 }
198
199
200 // 2012-04-17 Checked/modified for compatibility with new data model
202 {
203 global $DB;
204
205 $ID = intval($ID);
206 if ($ID < 1) return false;
207
208 if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y")
209 $arFields["ACTIVE"] = "N";
210
211 if (is_set($arFields, "DESCRIPTION_TYPE") && $arFields["DESCRIPTION_TYPE"] != "html")
212 $arFields["DESCRIPTION_TYPE"] = "text";
213
214 if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html")
215 $arFields["DETAIL_TEXT_TYPE"] = "text";
216
217 if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html")
218 $arFields["PREVIEW_TEXT_TYPE"]="text";
219
220 if (is_set($arFields, "RATING") && !in_array($arFields["RATING"], Array("Y", "N")))
221 $arFields["RATING"] = NULL;
222
223 if (is_set($arFields, "RATING_TYPE") && !in_array($arFields["RATING_TYPE"], Array("like", "standart_text", "like_graphic", "standart")))
224 $arFields["RATING_TYPE"] = NULL;
225
226 $lessonId = self::CourseGetLinkedLesson ($ID);
227 if ($this->CheckFields($arFields, $ID) && $lessonId !== false)
228 {
229 if (array_key_exists('ID', $arFields))
230 unset($arFields["ID"]);
231
232 $arFieldsLesson = $arFields;
233 $arFieldsToUnset = array ('GROUP_ID', 'SITE_ID');
234
235 foreach ($arFieldsToUnset as $key => $value)
236 if (array_key_exists($value, $arFieldsLesson))
237 unset ($arFieldsLesson[$value]);
238
239 //Sites
240 if(is_set($arFields, "SITE_ID"))
241 {
242 $str_LID = "''";
243 foreach($arFields["SITE_ID"] as $lang)
244 $str_LID .= ", '".$DB->ForSql($lang)."'";
245
246 $strSql = "DELETE FROM b_learn_course_site WHERE COURSE_ID=".$ID;
247 $DB->Query($strSql);
248
249 $strSql =
250 "INSERT INTO b_learn_course_site(COURSE_ID, SITE_ID) ".
251 "SELECT ".$ID.", LID ".
252 "FROM b_lang ".
253 "WHERE LID IN (".$str_LID.") ";
254
255 $DB->Query($strSql);
256
257 }
258
259 CLearnLesson::Update($lessonId, $arFieldsLesson);
260
261 global $CACHE_MANAGER;
262 $CACHE_MANAGER->ClearByTag('LEARN_COURSE_'.$ID);
263
264 return true;
265 }
266
267 return false;
268 }
269
270
271 // 2012-04-17 Checked/modified for compatibility with new data model
275 function Delete($ID)
276 {
277 global $DB;
278
279 $ID = intval($ID);
280 if ($ID < 1)
281 return false;
282
284 if ($lessonId === false)
285 {
286 return false;
287 }
288
289 CLearnLesson::Delete($lessonId);
290
291 return true;
292 }
293
294
295 public static function IsCertificatesExists($courseId)
296 {
297 // Check certificates (if exists => forbid removing course)
298 $certificate = CCertification::GetList(Array(), Array("COURSE_ID" => $courseId, 'CHECK_PERMISSIONS' => 'N'));
299 if ( ($certificate === false) || ($certificate->GetNext()) )
300 return true;
301 else
302 return false;
303 }
304
305
306 // 2012-04-17 Checked/modified for compatibility with new data model
307 public static function GetByID($ID)
308 {
309 return CCourse::GetList(Array(),Array("ID" => $ID));
310 }
311
312
313 // 2012-04-17 Checked/modified for compatibility with new data model
314 function GetGroupPermissions($COURSE_ID)
315 {
316 $linkedLessonId = CCourse::CourseGetLinkedLesson($COURSE_ID);
317 $arGroupPermissions = CLearnAccess::GetSymbolsAccessibleToLesson ($linkedLessonId, CLearnAccess::OP_LESSON_READ);
318 return ($arGroupPermissions);
319 }
320
321
322 // 2012-04-17 Checked/modified for compatibility with new data model
323 public static function GetSite($COURSE_ID)
324 {
325 global $DB;
326 $strSql = "SELECT L.*, CS.* FROM b_learn_course_site CS, b_lang L WHERE L.LID=CS.SITE_ID AND CS.COURSE_ID=".intval($COURSE_ID);
327
328 return $DB->Query($strSql);
329 }
330
331
332 public static function GetSiteId($COURSE_ID)
333 {
334 global $DB;
335 $strSql = "SELECT SITE_ID FROM b_learn_course_site WHERE COURSE_ID=" . ((int) $COURSE_ID);
336
337 $rc = $DB->Query($strSql, true);
338 if ($rc === false)
339 throw new LearnException ('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP);
340
341 $row = $rc->Fetch();
342 if ( ! isset($row['SITE_ID']) )
343 throw new LearnException ('EA_NOT_EXISTS', LearnException::EXC_ERR_ALL_NOT_EXISTS);
344
345 return ($row['SITE_ID']);
346 }
347
348
349 public static function GetSitePathes($siteId, $in_type = 'U')
350 {
351 global $DB;
352
353 $in_type = mb_strtoupper($in_type);
354 switch ($in_type)
355 {
356 case 'L':
357 case 'C':
358 case 'H':
359 case 'U':
360 $type = $DB->ForSql($in_type);
361 break;
362
363 default:
364 throw new LearnException ('EA_PARAMS', LearnException::EXC_ERR_ALL_PARAMS);
365 break;
366 }
367
368 $strSql =
369 "SELECT TSP.PATH
370 FROM b_learn_site_path TSP
371 WHERE TSP.SITE_ID='" . $DB->ForSql($siteId) . "' AND TSP.TYPE = '" . $type . "'";
372
373 $rc = $DB->Query($strSql, true);
374 if ($rc === false)
375 throw new LearnException ('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP);
376
377 $arPathes = array();
378 while ($row = $rc->Fetch())
379 $arPathes[] = $row['PATH'];
380
381 return ($arPathes);
382 }
383
384
385 // 2012-04-17 Checked/modified for compatibility with new data model
387 {
388 // refactored: body of function moved to CLearnHelper class
390 }
391
392
393 // 2012-04-17 Checked/modified for compatibility with new data model
394 function FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty = true)
395 {
396 // refactored: body of function moved to CLearnHelper class
397 return (CLearnHelper::FilterCreate($fname, $vals, $type, $bFullJoin, $cOperationType, $bSkipEmpty));
398 }
399
400
401 // 2012-04-18 Checked/modified for compatibility with new data model
402 public static function GetCourseContent(
403 $COURSE_ID,
404 $arAddSelectFileds = array("DETAIL_TEXT", "DETAIL_TEXT_TYPE", "DETAIL_PICTURE"),
405 $arSelectFields = array()
406 )
407 {
408 global $DB;
409
410 $COURSE_ID = intval($COURSE_ID);
411
412 $CACHE_ID = ((string) $COURSE_ID) . sha1(serialize($arSelectFields));
413
414 if ( ! (
415 array_key_exists($CACHE_ID, $GLOBALS["LEARNING_CACHE_COURSE"])
416 && is_array($GLOBALS["LEARNING_CACHE_COURSE"][$CACHE_ID])
417 )
418 )
419 {
420 $oTree = CLearnLesson::GetTree(
422 array(
423 'EDGE_SORT' => 'asc'
424 ),
425 array(
426 'ACTIVE' => 'Y',
427 'CHECK_PERMISSIONS' => 'N'
428 ),
429 true, // $publishProhibitionMode,
430 $arSelectFields
431 );
432
433 $arTree = $oTree->GetTreeAsListOldMode();
434
435 $GLOBALS["LEARNING_CACHE_COURSE"][$CACHE_ID] = $arTree;
436 }
437
438 $r = new CDBResult();
439 $r->InitFromArray($GLOBALS["LEARNING_CACHE_COURSE"][$CACHE_ID]);
440 return $r;
441 }
442
443
444 // Handlers:
445
446 // 2012-04-17 Checked/modified for compatibility with new data model
447 public static function OnGroupDelete($GROUP_ID)
448 {
449 global $DB;
450
451 $rc = $DB->Query("DELETE FROM b_learn_rights WHERE SUBJECT_ID='G" . (int) $GROUP_ID . "'", true)
452 && $DB->Query("DELETE FROM b_learn_rights_all WHERE SUBJECT_ID='G" . (int) $GROUP_ID . "'", true);
453
455
456 return ($rc);
457 }
458
459
460 // 2012-04-17 Checked/modified for compatibility with new data model
461 public static function OnBeforeLangDelete($lang)
462 {
463 global $APPLICATION;
464 $r = CCourse::GetList(array(), array("SITE_ID"=>$lang));
465
466 $bAllowDelete = true;
467
468 // Is any data exists for this site?
469 if ($r->Fetch())
470 $bAllowDelete = false;
471
472 if ( ! $bAllowDelete )
473 $APPLICATION->ThrowException(GetMessage('LEARNING_PREVENT_LANG_REMOVE'));
474
475 return ($bAllowDelete);
476 }
477
478
479 // 2012-04-17 Checked/modified for compatibility with new data model
480 public static function OnUserDelete($user_id)
481 {
482 return CStudent::Delete($user_id);
483 }
484
485
486 // 2012-04-17 Checked/modified for compatibility with new data model
487 public static function TimeToStr($seconds)
488 {
489 $str = "";
490
491 $seconds = intval($seconds);
492 if ($seconds <= 0)
493 return $str;
494
495 $days = intval($seconds/86400);
496 if ($days>0)
497 {
498 $str .= $days."&nbsp;".GetMessage("LEARNING_DAYS")." ";
499 $seconds = $seconds - $days*86400;
500 }
501
502 $hours = intval($seconds/3600);
503 if ($hours>0)
504 {
505 $str .= $hours."&nbsp;".GetMessage("LEARNING_HOURS")." ";
506 $seconds = $seconds - $hours*3600;
507 }
508
509 $minutes = intval($seconds/60);
510 if ($minutes>0)
511 {
512 $str .= $minutes."&nbsp;".GetMessage("LEARNING_MINUTES")." ";
513 $seconds = $seconds - $minutes*60;
514 }
515
516 $str .= ($seconds%60)."&nbsp;".GetMessage("LEARNING_SECONDS");
517
518 return $str;
519 }
520
521
522 // provided compatibility to new data model at 04.05.2012
523 public static function OnSearchReindex($nextStep = [], $callbackObject = null, $callbackMethod = "")
524 {
525 return Bitrix\Learning\Integration\Search::handleReindex($nextStep, $callbackObject, $callbackMethod);
526 }
527
528
529 public static function _Upper($str)
530 {
531 return $str;
532 }
533
534
535 // Functions below are for temporary backward compatibility, don't relay on it!
536
542 public static function SetPermission ($param1, $param2)
543 {
544 return;
545 }
546
547
554 public static function GetPermission ($courseId)
555 {
556 global $USER;
557 static $accessMatrix = false;
558
559 $courseId = (int) $courseId;
560
561 if ( ! ($courseId > 0) )
562 return ('D'); // access denied
563
564 $linkedLessonId = CCourse::CourseGetLinkedLesson($courseId);
565
566 if ( ! ($linkedLessonId > 0) )
567 return ('D'); // some troubles, access denied
568
570
571 if ($accessMatrix === false)
572 {
573 $accessMatrix = array(
574 // full access
584
585 // write access
590
591 // read-only access
593 );
594 }
595
596 foreach ($accessMatrix as $oldAccessSymbol => $operations)
597 {
598 if ($oAccess->IsBaseAccess($operations)
599 || $oAccess->IsLessonAccessible($linkedLessonId, $operations)
600 )
601 {
602 return ($oldAccessSymbol);
603 }
604 }
605
606 // by default, access denied
607 return ('D');
608 }
609}
$type
Определения options.php:106
$arPathes
Определения options.php:293
global $APPLICATION
Определения include.php:80
static handleReindex($nextStep=[], $callbackObject=null, $callbackMethod="")
Определения search.php:60
static indexLesson($lessonId)
Определения search.php:19
static GetList($arOrder=array(), $arFilter=array(), $arNavParams=array())
Определения certification.php:14
Определения course.php:4
Delete($ID)
Определения course.php:275
static SetPermission($param1, $param2)
Определения course.php:542
CheckFields($arFields, $ID=false)
Определения course.php:70
static GetPermission($courseId)
Определения course.php:554
static CourseGetLinkedLesson($courseId)
Определения course.php:55
GetGroupPermissions($COURSE_ID)
Определения course.php:314
static GetByID($ID)
Определения course.php:307
MkOperationFilter($key)
Определения course.php:386
FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
Определения course.php:394
static OnUserDelete($user_id)
Определения course.php:480
static _Upper($str)
Определения course.php:529
static OnSearchReindex($nextStep=[], $callbackObject=null, $callbackMethod="")
Определения course.php:523
static GetCourseContent( $COURSE_ID, $arAddSelectFileds=array("DETAIL_TEXT", "DETAIL_TEXT_TYPE", "DETAIL_PICTURE"), $arSelectFields=array())
Определения course.php:402
static GetSiteId($COURSE_ID)
Определения course.php:332
static OnBeforeLangDelete($lang)
Определения course.php:461
static GetSite($COURSE_ID)
Определения course.php:323
static IsCertificatesExists($courseId)
Определения course.php:295
static GetList($arOrder=array(), $arFields=array(), $arNavParams=array())
Определения course.php:6
Add($arFields)
Определения course.php:136
static TimeToStr($seconds)
Определения course.php:487
Update($ID, $arFields)
Определения course.php:201
static OnGroupDelete($GROUP_ID)
Определения course.php:447
static GetSitePathes($siteId, $in_type='U')
Определения course.php:349
static GetInstance($in_userId)
Определения clearnaccess.php:171
const OP_LESSON_CREATE
Определения clearnaccess.php:139
const OP_LESSON_READ
Определения clearnaccess.php:138
const OP_LESSON_UNLINK_FROM_PARENTS
Определения clearnaccess.php:143
const OP_LESSON_MANAGE_RIGHTS
Определения clearnaccess.php:146
const OP_LESSON_WRITE
Определения clearnaccess.php:140
const OP_LESSON_LINK_DESCENDANTS
Определения clearnaccess.php:144
const OP_LESSON_UNLINK_DESCENDANTS
Определения clearnaccess.php:145
const OP_LESSON_REMOVE
Определения clearnaccess.php:141
static GetSymbolsAccessibleToLesson($in_lessonId, $in_bitmaskOperations, $isUseCache=false)
Определения clearnaccess.php:259
const OP_LESSON_LINK_TO_PARENTS
Определения clearnaccess.php:142
static FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
Определения clearnhelper.php:214
static MkOperationFilter($key)
Определения clearnhelper.php:143
static GetLinkedCourse($lessonId)
Определения clearnlesson.php:1198
static Delete($lesson_id)
Определения clearnlesson.php:974
static GetCourseToLessonMap($bRefreshCache=false)
Определения clearnlesson.php:1215
static Add($arFields, $isCourse=false, $parentLessonId=true, $arProperties=array('SORT'=> 500), $isCheckPermissions=true, $checkPermissionsForUserId=-1)
Определения clearnlesson.php:440
static Update($id, $arFields)
Определения clearnlesson.php:691
static GetTree( $lessonId, $arOrder=array('EDGE_SORT'=> 'asc'), $arFilter=array(), $publishProhibitionMode=true, $arSelectFields=array())
Определения clearnlesson.php:1867
static GetList($arOrder=array(), $arFilter=array(), $arSelectFields=array(), $arNavParams=array())
Определения clearnlesson.php:1849
static Delete($ID)
Определения student.php:133
Определения learnexception.php:4
const EXC_ERR_ALL_PARAMS
Определения learnexception.php:7
const EXC_ERR_ALL_NOT_EXISTS
Определения learnexception.php:9
const EXC_ERR_ALL_GIVEUP
Определения learnexception.php:6
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$str
Определения commerceml2.php:63
if(!is_array($prop["VALUES"])) $tmp
Определения component_props.php:203
$hours
Определения cron_html_pages.php:15
$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
if($ajaxMode) $ID
Определения get_user.php:27
$oAccess
Определения options.php:19
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
if(!defined('SITE_ID')) $lang
Определения include.php:91
$siteId
Определения ajax.php:8
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$error
Определения subscription_card_product.php:20
$GLOBALS['_____370096793']
Определения update_client.php:1