1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
certification.php
См. документацию.
1<?php
2
3// 2012-04-10 Checked/modified for compatibility with new data model
5{
6 public static function LessonIdByCertId ($certId)
7 {
8 $rc = CCertification::GetByID($certId);
9 if ($rc === false)
11
12 $row = $rc->Fetch();
13
14 if ( ! isset($row['COURSE_ID']) )
16
17 $lessonId = CCourse::CourseGetLinkedLesson($row['COURSE_ID']);
18
19 if ($lessonId === false)
21
22 return ($lessonId);
23 }
24
25 // 2012-04-10 Checked/modified for compatibility with new data model
26 public static function CheckFields(&$arFields, $ID = false)
27 {
28 global $DB, $APPLICATION;
29
30 if ($ID===false && !is_set($arFields, "STUDENT_ID"))
31 {
32 $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_USER_ID"), "EMPTY_STUDENT_ID");
33 return false;
34 }
35 elseif (is_set($arFields, "STUDENT_ID"))
36 {
37 $dbResult = CUser::GetByID($arFields["STUDENT_ID"]);
38 if (!$dbResult->Fetch())
39 {
40 $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_USER_ID_EX"), "ERROR_NO_STUDENT_ID");
41 return false;
42 }
43 }
44
45 if ($ID===false && !is_set($arFields, "COURSE_ID"))
46 {
47 $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_COURSE_ID"), "ERROR_EMPTY_COURSE_ID");
48 return false;
49 }
50 elseif (is_set($arFields, "COURSE_ID"))
51 {
52 if ($bCheckRights)
53 $r = CCourse::GetByID($arFields["COURSE_ID"]);
54 else
55 $r = CCourse::GetList(Array(),Array("ID" => $arFields["COURSE_ID"], 'CHECK_PERMISSIONS' => 'N'));
56
57 if(!$r->Fetch())
58 {
59 $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_COURSE_ID_EX"), "ERROR_NO_COURSE_ID");
60 return false;
61 }
62 }
63
64 if (is_set($arFields, "STUDENT_ID") && is_set($arFields, "COURSE_ID"))
65 {
66 $res = CCertification::GetList(Array(), Array("STUDENT_ID" => $arFields["STUDENT_ID"], "COURSE_ID" => $arFields["COURSE_ID"]));
67 if ($res->Fetch())
68 {
69 $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_CERTIFICATE_DUPLICATE"), "ERROR_CERTIFICATE_DUPLICATE");
70 return false;
71 }
72 }
73
74 if (is_set($arFields, "DATE_CREATE") && (!$DB->IsDate($arFields["DATE_CREATE"], false, LANG, "FULL")))
75 {
76 $APPLICATION->ThrowException(GetMessage("LEARNING_BAD_DATE_CREATE"), "EMPTY_DATE_CREATE");
77 return false;
78 }
79
80 if (is_set($arFields, "PUBLIC_PROFILE") && $arFields["PUBLIC"] != "N")
81 $arFields["PUBLIC_PROFILE"] = "Y";
82
83 if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "N")
84 $arFields["ACTIVE"] = "Y";
85
86 if (is_set($arFields, "FROM_ONLINE") && $arFields["FROM_ONLINE"] != "N")
87 $arFields["FROM_ONLINE"] = "Y";
88
89 return true;
90 }
91
92 // 2012-04-10 Checked/modified for compatibility with new data model
93 public static function Add($arFields, $arParams = array())
94 {
95 global $DB;
96
97 $bCheckRights = true;
98 if (isset($arParams['CHECK_PERMISSIONS']) && ($arParams['CHECK_PERMISSIONS'] === 'N'))
99 $bCheckRights = false;
100
101 if(CCertification::CheckFields($arFields, false, $bCheckRights))
102 {
103 unset($arFields["ID"]);
104
105 CLearnHelper::FireEvent('OnBeforeCertificateAdd', $arFields);
106
107 $ID = $DB->Add("b_learn_certification", $arFields, Array(), "learning");
108
109 $arFields['ID'] = $ID;
110 CLearnHelper::FireEvent('OnAfterCertificateAdd', $arFields);
111
112 return $ID;
113 }
114
115 return false;
116 }
117
118 // 2012-04-10 Checked/modified for compatibility with new data model
119 public static function Update($ID, $arFields, $arParams = array())
120 {
121 global $DB;
122
123 $ID = intval($ID);
124 if ($ID < 1) return false;
125
126 $bCheckRights = true;
127 if (isset($arParams['CHECK_PERMISSIONS']) && ($arParams['CHECK_PERMISSIONS'] === 'N'))
128 $bCheckRights = false;
129
130 if (CCertification::CheckFields($arFields, $ID, $bCheckRights))
131 {
132 unset($arFields["ID"]);
133 unset($arFields["STUDENT_ID"]);
134 unset($arFields["COURSE_ID"]);
135
136 $arBinds=Array(
137 //""=>$arFields[""]
138 );
139
140 CLearnHelper::FireEvent('OnBeforeCertificateUpdate', $arFields);
141
142 $strUpdate = $DB->PrepareUpdate("b_learn_certification", $arFields, "learning");
143 $strSql = "UPDATE b_learn_certification SET ".$strUpdate." WHERE ID=".$ID;
144 $DB->QueryBind($strSql, $arBinds);
145
146 CLearnHelper::FireEvent('OnAfterCertificateUpdate', $arFields);
147
148 return true;
149 }
150
151 return false;
152 }
153
154 // 2012-04-10 Checked/modified for compatibility with new data model
155 public static function Delete($ID)
156 {
157 global $DB;
158
159 $ID = intval($ID);
160 if ($ID < 1) return false;
161
162 CLearnHelper::FireEvent('OnBeforeCertificateDelete', $ID);
163
164 $strSql = "SELECT G.ID FROM b_learn_certification C
165 INNER JOIN b_learn_test T ON C.COURSE_ID = T.COURSE_ID
166 INNER JOIN b_learn_gradebook G ON (G.TEST_ID = T.ID AND G.STUDENT_ID = C.STUDENT_ID)
167 WHERE C.ID = ".$ID;
168
169 $res = $DB->Query($strSql);
170
171 //Gradebook
172 while($arRecord = $res->Fetch())
173 {
174 if(!CGradeBook::Delete($arRecord["ID"]))
175 return false;
176 }
177
178 $strSql = "DELETE FROM b_learn_certification WHERE ID = ".$ID;
179
180 if (!$DB->Query($strSql))
181 return false;
182
183 CLearnHelper::FireEvent('OnAfterCertificateDelete', $ID);
184
185 return true;
186 }
187
188 // 2012-04-10 Checked/modified for compatibility with new data model
189 public static function GetFilter($arFilter)
190 {
191
192 if (!is_array($arFilter))
193 $arFilter = Array();
194
195 $arSqlSearch = Array();
196
197 foreach ($arFilter as $key => $val)
198 {
200 $key = $res["FIELD"];
201 $cOperationType = $res["OPERATION"];
202
203 $key = mb_strtoupper($key);
204
205 switch ($key)
206 {
207 case "ID":
208 case "STUDENT_ID":
209 case "COURSE_ID":
210 case "SORT":
211 case "SUMMARY":
212 case "MAX_SUMMARY":
213 $arSqlSearch[] = CLearnHelper::FilterCreate("CER.".$key, $val, "number", $bFullJoin, $cOperationType);
214 break;
215
216 case "ACTIVE":
217 case "PUBLIC_PROFILE":
218 case "FROM_ONLINE":
219 $arSqlSearch[] = CLearnHelper::FilterCreate("CER.".$key, $val, "string_equal", $bFullJoin, $cOperationType);
220 break;
221
222 case "TIMESTAMP_X":
223 case "DATE_CREATE":
224 $arSqlSearch[] = CLearnHelper::FilterCreate("CER.".$key, $val, "date", $bFullJoin, $cOperationType);
225 break;
226
227 case "USER":
228 $arSqlSearch[] = GetFilterQuery("U.ID, U.LOGIN, U.NAME, U.LAST_NAME",$val);
229 break;
230
231 }
232
233 }
234
235 return $arSqlSearch;
236
237 }
238
239 // 2012-04-10 Checked/modified for compatibility with new data model
240 public static function GetByID($ID)
241 {
242 return CCertification::GetList(Array(),Array("ID" => $ID));
243 }
244
245 // 2012-04-10 Checked/modified for compatibility with new data model
246 public static function IsCourseCompleted($STUDENT_ID, $COURSE_ID)
247 {
248 global $DB;
249
250 $STUDENT_ID = intval($STUDENT_ID);
251 $COURSE_ID = intval($COURSE_ID);
252
253 if ($STUDENT_ID < 1 || $COURSE_ID < 1)
254 return false;
255
256 $strSql = "
257 SELECT COUNT(*) CNT_ALL, SUM(CASE WHEN G.COMPLETED = 'Y' THEN 1 ELSE 0 END ) CNT_COMPLETED
258 FROM b_learn_test T
259 INNER JOIN b_learn_course C ON T.COURSE_ID = C.ID
260 INNER JOIN b_learn_lesson TUL ON C.LINKED_LESSON_ID = TUL.ID
261 LEFT JOIN b_learn_gradebook G ON T.ID = G.TEST_ID AND G.STUDENT_ID = '".$STUDENT_ID."'
262 WHERE T.COURSE_ID = '".$COURSE_ID."' AND TUL.ACTIVE = 'Y' AND T.ACTIVE = 'Y'
263 ";
264
265 $res = $DB->Query($strSql);
266
267 $cntAll = $cntCompleted = null;
268
269 $isCourseCompleted = false; // can be overrided below
270 if ( ($ar = $res->Fetch()) && intval($ar["CNT_ALL"]) > 0)
271 {
272 $cntAll = $ar['CNT_ALL'];
273 $cntCompleted = $ar['CNT_COMPLETED'];
274
275 if ($cntCompleted == $cntAll)
276 $isCourseCompleted = true;
277 }
278
279 $arEventData = array(
280 'STUDENT_ID' => $STUDENT_ID,
281 'COURSE_ID' => $COURSE_ID,
282 'CNT_ALL' => $cntAll,
283 'CNT_COMPLETED' => $cntCompleted
284 );
285
286 foreach(GetModuleEvents('learning', 'OnCheckCourseCompleted', true) as $arEvent)
287 {
288 $rc = ExecuteModuleEventEx($arEvent, array($arEventData));
289
290 if ($rc === false)
291 {
292 $isCourseCompleted = false;
293 break;
294 }
295 elseif ($rc === true)
296 {
297 $isCourseCompleted = true;
298 break;
299 }
300 }
301
302 return $isCourseCompleted;
303 }
304
305 // 2012-04-10 Checked/modified for compatibility with new data model
306 public static function Certificate($STUDENT_ID, $COURSE_ID, $checkPerms = true)
307 {
308 global $DB;
309
310 $STUDENT_ID = intval($STUDENT_ID);
311 $COURSE_ID = intval($COURSE_ID);
312
313 if ($STUDENT_ID < 1 || $COURSE_ID < 1)
314 return false;
315
316 if (CCertification::IsCourseCompleted($STUDENT_ID, $COURSE_ID))
317 {
318
319 $strSql = "SELECT SUM(G.RESULT) CNT, SUM(G.MAX_RESULT) MAX_CNT FROM b_learn_gradebook G
320 INNER JOIN b_learn_test T ON T.ID = G.TEST_ID
321 WHERE G.COMPLETED = 'Y' AND G.STUDENT_ID = '".$STUDENT_ID."' AND T.COURSE_ID = '".$COURSE_ID."'";
322 $res = $DB->Query($strSql);
323
324 $SUMMARY = $MAX_SUMMARY = 0;
325
326 if ($ar = $res->Fetch())
327 {
328 $SUMMARY = $ar["CNT"];
329 $MAX_SUMMARY = $ar["MAX_CNT"];
330 }
331
333 'STUDENT_ID' => $STUDENT_ID,
334 'COURSE_ID' => $COURSE_ID,
335 'SUMMARY' => &$SUMMARY,
336 'MAX_SUMMARY' => &$MAX_SUMMARY
337 );
338
339 foreach(GetModuleEvents('learning', 'OnBeforeCertificate', true) as $arEvent)
340 {
341 if (ExecuteModuleEventEx($arEvent, array(&$arFields))===false)
342 return (false);
343 }
344
345 $arParams = array();
346
347 if ( ! $checkPerms )
348 $arParams['CHECK_PERMISSIONS'] = 'N';
349
350 $strSql = "SELECT ID FROM b_learn_certification WHERE STUDENT_ID = '".$STUDENT_ID."' AND COURSE_ID = '".$COURSE_ID."'";
351 $res = $DB->Query($strSql);
352 if ($ar = $res->Fetch())
353 {
354 return CCertification::Update($ar["ID"], Array("SUMMARY" => $SUMMARY, "MAX_SUMMARY" => $MAX_SUMMARY, "ACTIVE" => "Y"), $arParams);
355 }
356 else
357 {
358 $arFields = Array(
359 "STUDENT_ID" => $STUDENT_ID,
360 "COURSE_ID" => $COURSE_ID,
361 "SUMMARY" => $SUMMARY,
362 "MAX_SUMMARY" => $MAX_SUMMARY,
363 "~DATE_CREATE" => CDatabase::CurrentTimeFunction(),
364 );
365
367 return ($ID > 0);
368 }
369 }
370 return false;
371 }
372}
$arParams
Определения access_dialog.php:21
global $APPLICATION
Определения include.php:80
static Delete($ID)
Определения certification.php:155
static CheckFields(&$arFields, $ID=false)
Определения certification.php:26
static Add($arFields, $arParams=array())
Определения certification.php:93
static GetByID($ID)
Определения certification.php:240
static Certificate($STUDENT_ID, $COURSE_ID, $checkPerms=true)
Определения certification.php:306
static LessonIdByCertId($certId)
Определения certification.php:6
static IsCourseCompleted($STUDENT_ID, $COURSE_ID)
Определения certification.php:246
static Update($ID, $arFields, $arParams=array())
Определения certification.php:119
static GetFilter($arFilter)
Определения certification.php:189
static Delete($ID)
Определения gradebook.php:111
static GetList($arOrder=array(), $arFilter=array(), $arNavParams=array())
Определения certification.php:14
static CourseGetLinkedLesson($courseId)
Определения course.php:55
static GetByID($ID)
Определения course.php:307
static GetList($arOrder=array(), $arFields=array(), $arNavParams=array())
Определения course.php:6
static FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
Определения clearnhelper.php:214
static MkOperationFilter($key)
Определения clearnhelper.php:143
static FireEvent($eventName, $eventParams)
Определения clearnhelper.php:65
Определения learnexception.php:4
const EXC_ERR_ALL_GIVEUP
Определения learnexception.php:6
$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
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
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
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$val
Определения options.php:1793
$dbResult
Определения updtr957.php:3
$arFilter
Определения user_search.php:106