1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
rating_rules.php
См. документацию.
1<?php
2
4
6{
7 // return configs
8 public static function OnGetRatingRuleConfigs()
9 {
10 $arConfigs["USER"]["CONDITION_CONFIG"][] = [
11 "ID" => 'RATING',
12 "NAME" => GetMessage('PP_USER_CONDITION_RATING_NAME'),
13 "DESC" => GetMessage('PP_USER_CONDITION_RATING_DESC'),
14 "REFRESH_TIME" => '3600',
15 "CLASS" => 'CRatingRulesMain',
16 "METHOD" => 'ratingCheck',
17 "FIELDS" => [
18 [
19 "TYPE" => 'SELECT_CLASS',
20 "ID" => 'RATING_ID',
21 "NAME" => GetMessage('PP_USER_CONDITION_RATING_RATING_ID'),
22 "DEFAULT" => '1',
23 "CLASS" => 'CRatings',
24 "METHOD" => 'GetList',
25 "PARAMS" => [["ID" => "ASC"], ["ACTIVE" => "Y", "ENTITY_ID" => "USER"]],
26 "FIELD_ID" => 'ID',
27 "FIELD_VALUE" => 'NAME',
28 ],
29 [
30 "TYPE" => 'SELECT_ARRAY_WITH_INPUT',
31 "ID" => 'RATING_CONDITION',
32 "ID_INPUT" => 'RATING_VALUE',
33 "NAME" => GetMessage('PP_USER_CONDITION_RATING_RATING_CONDITION'),
34 "DEFAULT" => '1',
35 "DEFAULT_INPUT" => '500',
36 "PARAMS" => ['1' => GetMessage('PP_USER_CONDITION_RATING_RATING_CONDITION_1'),
37 '2' => GetMessage('PP_USER_CONDITION_RATING_RATING_CONDITION_2')],
38 ],
39 ],
40 ];
41
42 $arConfigs["USER"]["CONDITION_CONFIG"][] = [
43 "ID" => 'RATING_INTERVAL',
44 "NAME" => GetMessage('PP_USER_CONDITION_RATING_INTERVAL_NAME'),
45 "DESC" => GetMessage('PP_USER_CONDITION_RATING_INTERVAL_DESC'),
46 "REFRESH_TIME" => '3600',
47 "CLASS" => 'CRatingRulesMain',
48 "METHOD" => 'ratingCheckInterval',
49 "FIELDS" => [
50 [
51 "TYPE" => 'SELECT_CLASS',
52 "ID" => 'RATING_ID',
53 "NAME" => GetMessage('PP_USER_CONDITION_RATING_RATING_ID'),
54 "DEFAULT" => '1',
55 "CLASS" => 'CRatings',
56 "METHOD" => 'GetList',
57 "PARAMS" => [["ID" => "ASC"], ["ACTIVE" => "Y", "ENTITY_ID" => "USER"]],
58 "FIELD_ID" => 'ID',
59 "FIELD_VALUE" => 'NAME',
60 ],
61 [
62 "TYPE" => 'INPUT_INTERVAL',
63 "ID" => 'RATING_VALUE_FROM',
64 "ID_2" => 'RATING_VALUE_TO',
65 "NAME" => GetMessage('PP_USER_CONDITION_RATING_INTERVAL'),
66 "DEFAULT" => '0',
67 "DEFAULT_2" => '500',
68 ],
69 ],
70 ];
71
72 $arConfigs["USER"]["CONDITION_CONFIG"][] = [
73 "ID" => 'AUTHORITY',
74 "NAME" => GetMessage('PP_USER_CONDITION_AUTHORITY_NAME'),
75 "DESC" => (COption::GetOptionString("main", "rating_weight_type", "auto") == "auto" ? GetMessage('PP_USER_CONDITION_AUTHORITY_AUTO_DESC') : GetMessage('PP_USER_CONDITION_AUTHORITY_DESC')),
76 "REFRESH_TIME" => '3600',
77 "CLASS" => 'CRatingRulesMain',
78 "METHOD" => 'ratingCheck',
79 "FIELDS" => [
80 [
81 "TYPE" => 'SELECT_ARRAY_WITH_INPUT',
82 "ID" => 'RATING_CONDITION',
83 "ID_INPUT" => 'RATING_VALUE',
84 "NAME" => (COption::GetOptionString("main", "rating_weight_type", "auto") == "auto" ? GetMessage('PP_USER_CONDITION_AUTHORITY_RATING_CONDITION_AUTO') : GetMessage('PP_USER_CONDITION_AUTHORITY_RATING_CONDITION')),
85 "DEFAULT" => '1',
86 "DEFAULT_INPUT" => '1',
87 "PARAMS" => ['1' => GetMessage('PP_USER_CONDITION_RATING_RATING_CONDITION_1'),
88 '2' => GetMessage('PP_USER_CONDITION_RATING_RATING_CONDITION_2')],
89 ],
90 ],
91 ];
92
93 $arConfigs["USER"]["CONDITION_CONFIG"][] = [
94 "ID" => 'AUTHORITY_INTERVAL',
95 "NAME" => GetMessage('PP_USER_CONDITION_AUTHORITY_INTERVAL_NAME'),
96 "DESC" => (COption::GetOptionString("main", "rating_weight_type", "auto") == "auto" ? GetMessage('PP_USER_CONDITION_AUTHORITY_INTERVAL_AUTO_DESC') : GetMessage('PP_USER_CONDITION_AUTHORITY_INTERVAL_DESC')),
97 "REFRESH_TIME" => '3600',
98 "CLASS" => 'CRatingRulesMain',
99 "METHOD" => 'ratingCheckInterval',
100 "FIELDS" => [
101 [
102 "TYPE" => 'INPUT_INTERVAL',
103 "ID" => 'RATING_VALUE_FROM',
104 "ID_2" => 'RATING_VALUE_TO',
105 "NAME" => (COption::GetOptionString("main", "rating_weight_type", "auto") == "auto" ? GetMessage('PP_USER_CONDITION_AUTHORITY_INTERVAL_AUTO') : GetMessage('PP_USER_CONDITION_AUTHORITY_INTERVAL')),
106 "DEFAULT" => '0',
107 "DEFAULT_2" => '10',
108 ],
109 ],
110 ];
111
112 $arConfigs["USER"]["CONDITION_CONFIG"][] = [
113 "ID" => 'VOTE',
114 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_NAME'),
115 "DESC" => '',
116 "REFRESH_TIME" => '86400',
117 "CLASS" => 'CRatingRulesMain',
118 "METHOD" => 'voteCheck',
119 "FIELDS" => [
120 [
121 "TYPE" => 'TEXT',
122 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_TEXT'),
123 ],
124 [
125 "TYPE" => 'INPUT',
126 "ID" => 'VOTE_LIMIT',
127 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_LIMIT'),
128 "NAME_DESC" => GetMessage('PP_USER_CONDITION_VOTE_LIMIT_DESC'),
129 "DEFAULT" => '90',
130 "SIZE" => '2',
131 ],
132 [
133 "TYPE" => 'INPUT',
134 "ID" => 'VOTE_RESULT',
135 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_RESULT'),
136 "DEFAULT" => '10',
137 "SIZE" => '2',
138 ],
139 [
140 "TYPE" => 'SEPARATOR',
141 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_SEPARATOR'),
142 ],
143 [
144 "TYPE" => 'INPUT',
145 "ID" => 'VOTE_FORUM_TOPIC',
146 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_FT'),
147 "DEFAULT" => '0.5',
148 "SIZE" => '2',
149 ],
150 [
151 "TYPE" => 'INPUT',
152 "ID" => 'VOTE_FORUM_POST',
153 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_FP'),
154 "DEFAULT" => '0.1',
155 "SIZE" => '2',
156 ],
157 [
158 "TYPE" => 'INPUT',
159 "ID" => 'VOTE_BLOG_POST',
160 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_BP'),
161 "DEFAULT" => '0.5',
162 "SIZE" => '2',
163 ],
164 [
165 "TYPE" => 'INPUT',
166 "ID" => 'VOTE_BLOG_COMMENT',
167 "NAME" => GetMessage('PP_USER_CONDITION_VOTE_BC'),
168 "DEFAULT" => '0.1',
169 "SIZE" => '2',
170 ],
171 ],
172 'HIDE_ACTION' => true,
173 ];
174
175 $arConfigs["USER"]["ACTION_CONFIG"][] = [
176 "ID" => 'ADD_TO_GROUP',
177 "NAME" => GetMessage('PP_USER_ACTION_ADD_TO_GROUP'),
178 "DESC" => GetMessage('PP_USER_ACTION_ADD_TO_GROUP_DESC'),
179 "CLASS" => 'CRatingRulesMain',
180 "METHOD" => 'addToGroup',
181 "FIELDS" => [
182 [
183 "ID" => 'GROUP_ID',
184 "NAME" => GetMessage('PP_USER_ACTION_CHANGE_GROUP_GROUP_ID'),
185 "DEFAULT" => '4',
186 "TYPE" => 'SELECT_CLASS',
187 "CLASS" => 'CGroup',
188 "METHOD" => 'GetList',
189 "PARAMS" => ['ID', 'DESC', []],
190 "FIELD_ID" => 'ID',
191 "FIELD_VALUE" => 'NAME',
192 ],
193
194 ],
195 ];
196
197 $arConfigs["USER"]["ACTION_CONFIG"][] = [
198 "ID" => 'REMOVE_FROM_GROUP',
199 "NAME" => GetMessage('PP_USER_ACTION_REMOVE_FROM_GROUP'),
200 "DESC" => GetMessage('PP_USER_ACTION_REMOVE_FROM_GROUP_DESC'),
201 "CLASS" => 'CRatingRulesMain',
202 "METHOD" => 'removeFromGroup',
203 "FIELDS" => [
204 [
205 "ID" => 'GROUP_ID',
206 "NAME" => GetMessage('PP_USER_ACTION_CHANGE_GROUP_GROUP_ID'),
207 "DEFAULT" => '4',
208 "TYPE" => 'SELECT_CLASS',
209 "CLASS" => 'CGroup',
210 "METHOD" => 'GetList',
211 "PARAMS" => ['ID', 'ASC', []],
212 "FIELD_ID" => 'ID',
213 "FIELD_VALUE" => 'NAME',
214 ],
215 ],
216 ];
217
218 $arConfigs["USER"]["ACTION_CONFIG"][] = [
219 "ID" => 'CHANGE_UF',
220 "NAME" => GetMessage('PP_USER_ACTION_CHANGE_UF'),
221 "DESC" => GetMessage('PP_USER_ACTION_CHANGE_UF_DESC'),
222 "CLASS" => 'CRatingRulesMain',
223 "METHOD" => 'changeUF',
224 "FIELDS" => [
225 [
226 "ID" => 'UF_ID',
227 "NAME" => GetMessage('PP_USER_ACTION_CHANGE_UF_ID'),
228 "DEFAULT" => '',
229 "TYPE" => 'SELECT_CLASS_ARRAY',
230 "CLASS" => 'CRatingRulesMain',
231 "METHOD" => 'GetUfList',
232 "PARAMS" => [],
233 "FIELD_ID" => 'ID',
234 "FIELD_VALUE" => 'NAME',
235 ],
236 [
237 "ID" => 'UF_VALUE',
238 "NAME" => GetMessage('PP_USER_ACTION_CHANGE_UF_VALUE'),
239 "DEFAULT" => '',
240 ],
241 ],
242 ];
243 return $arConfigs;
244 }
245
246 public static function ratingCheck($arConfigs)
247 {
248 global $DB;
249
250 $ruleId = intval($arConfigs['ID']);
251 if (isset($arConfigs['CONDITION_CONFIG']['RATING']))
252 {
253 $ratingValue = intval($arConfigs['CONDITION_CONFIG']['RATING']['RATING_VALUE']);
254 $ratingCondition = ($arConfigs['CONDITION_CONFIG']['RATING']['RATING_CONDITION'] == 1 ? '>=' : '<');
255 $ratingId = intval($arConfigs['CONDITION_CONFIG']['RATING']['RATING_ID']);
256 }
257 else
258 {
259 $ratingVoteWeight = COption::GetOptionString("main", "rating_vote_weight", 1);
260 $ratingValue = intval($arConfigs['CONDITION_CONFIG']['AUTHORITY']['RATING_VALUE']) * $ratingVoteWeight;
261 $ratingCondition = ($arConfigs['CONDITION_CONFIG']['AUTHORITY']['RATING_CONDITION'] == 1 ? '>=' : '<');
262 $ratingId = CRatings::GetAuthorityRating();
263 }
264
265 $strSql = "INSERT INTO b_rating_rule_vetting (RULE_ID, ENTITY_TYPE_ID, ENTITY_ID)
266 SELECT
267 '$ruleId' as RULE_ID,
268 rr.ENTITY_TYPE_ID as ENTITY_TYPE_ID,
269 rr.ENTITY_ID as ENTITY_ID
270 FROM b_rating_results rr
271 WHERE rr.RATING_ID = $ratingId
272 AND rr.CURRENT_VALUE $ratingCondition $ratingValue";
273
274 $res = $DB->Query($strSql);
275
276 return true;
277 }
278
279 public static function ratingCheckInterval($arConfigs)
280 {
281 global $DB;
282
283 $ruleId = intval($arConfigs['ID']);
284 if (isset($arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']))
285 {
286 $ratingValueFrom = intval($arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_FROM']);
287 $ratingValueTo = intval($arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_TO']);
288 $ratingId = intval($arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_ID']);
289 }
290 else
291 {
292 $ratingVoteWeight = COption::GetOptionString("main", "rating_vote_weight", 1);
293 $ratingValueFrom = intval($arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_FROM']) * $ratingVoteWeight;
294 $ratingValueTo = intval($arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_TO']) * $ratingVoteWeight;
295 $ratingId = CRatings::GetAuthorityRating();
296 }
297
298 $strSql = "INSERT INTO b_rating_rule_vetting (RULE_ID, ENTITY_TYPE_ID, ENTITY_ID)
299 SELECT
300 '$ruleId' as RULE_ID,
301 rr.ENTITY_TYPE_ID as ENTITY_TYPE_ID,
302 rr.ENTITY_ID as ENTITY_ID
303 FROM b_rating_results rr
304 WHERE rr.RATING_ID = $ratingId
305 AND rr.CURRENT_VALUE BETWEEN $ratingValueFrom AND $ratingValueTo";
306 $DB->Query($strSql);
307
308 return true;
309 }
310
311 public static function addToGroup($arConfigs)
312 {
313 global $DB;
314
315 $ruleId = intval($arConfigs['ID']);
316 $groupId = intval($arConfigs['ACTION_CONFIG']['ADD_TO_GROUP']['GROUP_ID']);
317 $entityTypeId = $DB->ForSql($arConfigs['ENTITY_TYPE_ID']);
318
319 // add a group to all users who do not, but you need to add it
320 $strSql = "
321 SELECT prv.ENTITY_ID
322 FROM b_rating_rule_vetting prv
323 WHERE
324 prv.RULE_ID = $ruleId
325 AND prv.ENTITY_TYPE_ID = '$entityTypeId'
326 AND prv.ENTITY_ID NOT IN (
327 SELECT ug.USER_ID FROM b_user_group ug WHERE ug.GROUP_ID = $groupId
328 )
329 AND prv.APPLIED = 'N'
330 GROUP BY prv.ENTITY_ID
331 ";
332
333 $res = $DB->Query($strSql);
334 while ($user = $res->Fetch())
335 {
336 CUser::AppendUserGroup($user['ENTITY_ID'], [$groupId]);
337 }
338
339 CRatingRule::ApplyVetting($arConfigs);
340
341 return true;
342 }
343
344 public static function removeFromGroup($arConfigs)
345 {
346 global $DB;
347
348 $ruleId = intval($arConfigs['ID']);
349 $groupId = intval($arConfigs['ACTION_CONFIG']['REMOVE_FROM_GROUP']['GROUP_ID']);
350 $entityTypeId = $DB->ForSql($arConfigs['ENTITY_TYPE_ID']);
351
352 // remove the group from all users who it is, but you need to remove it
353 $strSql = "
354 SELECT prv.ENTITY_ID
355 FROM b_rating_rule_vetting prv
356 WHERE
357 prv.RULE_ID = $ruleId
358 and prv.ENTITY_TYPE_ID = '$entityTypeId'
359 and prv.ENTITY_ID IN (
360 SELECT ug.USER_ID FROM b_user_group ug WHERE ug.GROUP_ID = $groupId
361 )
362 and prv.APPLIED = 'N'
363 GROUP BY prv.ENTITY_ID
364 ";
365
366 $res = $DB->Query($strSql);
367 while ($user = $res->Fetch())
368 {
369 CUser::RemoveUserGroup($user['ENTITY_ID'], [$groupId]);
370 }
371
372 CRatingRule::ApplyVetting($arConfigs);
373
374 return true;
375 }
376
377 public static function GetUfList()
378 {
379 $arFields = [];
380 $rsData = CUserTypeEntity::GetList([], ['ENTITY_ID' => 'USER', 'LANG' => LANG]);
381 while ($arRes = $rsData->Fetch())
382 {
383 if ($arRes['MULTIPLE'] == 'N' && in_array($arRes['USER_TYPE_ID'], ['integer', 'string_formatted', 'string', 'double']))
384 {
385 $arFields[$arRes['FIELD_NAME']] = empty($arRes['LIST_FILTER_LABEL']) ? $arRes['FIELD_NAME'] : $arRes['LIST_FILTER_LABEL'] . ' (' . $arRes['FIELD_NAME'] . ')';
386 }
387 }
388 return $arFields;
389 }
390
391 public static function changeUF($arConfigs)
392 {
393 global $DB;
394
395 $ruleId = intval($arConfigs['ID']);
396 $entityTypeId = $DB->ForSql($arConfigs['ENTITY_TYPE_ID']);
397 $userFieldId = $DB->ForSql($arConfigs['ACTION_CONFIG']['CHANGE_UF']['UF_ID']);
398 $userFieldValue = $DB->ForSql($arConfigs['ACTION_CONFIG']['CHANGE_UF']['UF_VALUE']);
399 if (!empty($userFieldId))
400 {
401 $strSql = "UPDATE b_uts_user uts SET uts.$userFieldId = '$userFieldValue'
402 WHERE uts.VALUE_ID IN (
403 SELECT prv.ENTITY_ID
404 FROM b_rating_rule_vetting prv
405 WHERE
406 prv.RULE_ID = $ruleId
407 AND prv.ENTITY_TYPE_ID = '$entityTypeId'
408 AND prv.APPLIED = 'N'
409 )";
410 $DB->Query($strSql);
411
412 $strSql = "INSERT INTO b_uts_user (VALUE_ID, $userFieldId)
413 SELECT prv.ENTITY_ID, '$userFieldValue' as UF_VALUE
414 FROM b_rating_rule_vetting prv
415 WHERE
416 prv.RULE_ID = $ruleId
417 and prv.ENTITY_TYPE_ID = '$entityTypeId'
418 and prv.ENTITY_ID NOT IN (
419 SELECT uf.VALUE_ID FROM b_uts_user uf
420 )
421 and prv.APPLIED = 'N'
422 GROUP BY ENTITY_ID
423 ";
424 $DB->Query($strSql);
425 }
426
427 CRatingRule::ApplyVetting($arConfigs);
428
429 return true;
430 }
431
432 // return support object
433 public static function OnGetRatingRuleObjects()
434 {
435 $arRatingRulesConfigs = CRatingRulesMain::OnGetRatingRuleConfigs();
436 foreach ($arRatingRulesConfigs as $SupportType => $value)
437 {
438 $arSupportType[] = $SupportType;
439 }
440
441 return $arSupportType;
442 }
443
444 // check the value which relate to the module
445 public static function OnAfterAddRatingRule($ID, $arFields)
446 {
448
449 return $arFields;
450 }
451
452 // check the value which relate to the module
453 public static function OnAfterUpdateRatingRule($ID, $arFields)
454 {
456
457 return $arFields;
458 }
459
460 // check input values, if value does not validate, set the default value
461 public static function __CheckFields($entityId, $arConfigs)
462 {
464
465 if ($entityId == "USER")
466 {
467 if (isset($arConfigs['CONDITION_CONFIG']['RATING']))
468 {
469 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['RATING']['RATING_ID']))
470 {
471 $arConfigs['CONDITION_CONFIG']['RATING']['RATING_ID'] = $arDefaultConfig['CONDITION_CONFIG']['RATING']['RATING_ID']['DEFAULT'];
472 }
473 if (!in_array($arConfigs['CONDITION_CONFIG']['RATING']['RATING_CONDITION'], [1, 2]))
474 {
475 $arConfigs['CONDITION_CONFIG']['RATING']['RATING_CONDITION'] = $arDefaultConfig['CONDITION_CONFIG']['RATING']['RATING_CONDITION']['DEFAULT'];
476 }
477 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['RATING']['RATING_VALUE']))
478 {
479 $arConfigs['CONDITION_CONFIG']['RATING']['RATING_VALUE'] = $arDefaultConfig['CONDITION_CONFIG']['RATING']['RATING_CONDITION']['DEFAULT_INPUT'];
480 }
481 }
482 if (isset($arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']))
483 {
484 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_ID']))
485 {
486 $arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_ID'] = $arDefaultConfig['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_ID']['DEFAULT'];
487 }
488 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_FROM']))
489 {
490 $arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_FROM'] = $arDefaultConfig['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_FROM']['DEFAULT'];
491 }
492 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_TO']))
493 {
494 $arConfigs['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_TO'] = $arDefaultConfig['CONDITION_CONFIG']['RATING_INTERVAL']['RATING_VALUE_FROM']['DEFAULT_2'];
495 }
496 }
497 if (isset($arConfigs['CONDITION_CONFIG']['AUTHORITY']))
498 {
499 if (!in_array($arConfigs['CONDITION_CONFIG']['AUTHORITY']['RATING_CONDITION'], [1, 2]))
500 {
501 $arConfigs['CONDITION_CONFIG']['AUTHORITY']['RATING_CONDITION'] = $arDefaultConfig['CONDITION_CONFIG']['AUTHORITY']['RATING_CONDITION']['DEFAULT'];
502 }
503 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['AUTHORITY']['RATING_VALUE']))
504 {
505 $arConfigs['CONDITION_CONFIG']['AUTHORITY']['RATING_VALUE'] = $arDefaultConfig['CONDITION_CONFIG']['AUTHORITY']['RATING_CONDITION']['DEFAULT_INPUT'];
506 }
507 }
508 if (isset($arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']))
509 {
510 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_FROM']))
511 {
512 $arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_FROM'] = $arDefaultConfig['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_FROM']['DEFAULT'];
513 }
514 if (!preg_match('/^\d{1,11}$/', $arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_TO']))
515 {
516 $arConfigs['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_TO'] = $arDefaultConfig['CONDITION_CONFIG']['AUTHORITY_INTERVAL']['RATING_VALUE_FROM']['DEFAULT_2'];
517 }
518 }
519 if (isset($arConfigs['CONDITION_CONFIG']['VOTE']))
520 {
521 if (!preg_match('/^\d{1,3}$/', $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT']))
522 {
523 $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'] = $arDefaultConfig['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT']['DEFAULT'];
524 }
525 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_RESULT']) || $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_RESULT'] < 0)
526 {
527 $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_RESULT'] = $arDefaultConfig['CONDITION_CONFIG']['VOTE']['VOTE_RESULT']['DEFAULT'];
528 }
529 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_TOPIC']))
530 {
531 $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_TOPIC'] = $arDefaultConfig['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_TOPIC']['DEFAULT'];
532 }
533 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_POST']))
534 {
535 $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_POST'] = $arDefaultConfig['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_POST']['DEFAULT'];
536 }
537 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_POST']))
538 {
539 $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_POST'] = $arDefaultConfig['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_POST']['DEFAULT'];
540 }
541 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_COMMENT']))
542 {
543 $arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_COMMENT'] = $arDefaultConfig['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_COMMENT']['DEFAULT'];
544 }
545 }
546 if (isset($arConfigs['ACTION_CONFIG']['CHANGE_GROUP']))
547 {
548 if (!preg_match('/^\d{1,11}$/', $arConfigs['ACTION_CONFIG']['CHANGE_GROUP']['GROUP_ID']))
549 {
550 $arConfigs['ACTION_CONFIG']['CHANGE_GROUP']['GROUP_ID'] = $arDefaultConfig['ACTION_CONFIG']['CHANGE_GROUP']['GROUP_ID']['DEFAULT'];
551 }
552 }
553
554 if (isset($arConfigs['ACTION_CONFIG']['CHANGE_UF']))
555 {
556 if (!preg_match('/^[0-9A-Z_]+$/', $arConfigs['ACTION_CONFIG']['CHANGE_UF']['UF_ID']))
557 {
558 $arConfigs['ACTION_CONFIG']['CHANGE_UF']['UF_ID'] = $arDefaultConfig['ACTION_CONFIG']['CHANGE_UF']['UF_ID']['DEFAULT'];
559 }
560 }
561 }
562
563 return $arConfigs;
564 }
565
566 // assemble config default value
567 public static function __AssembleConfigDefault($objectType = null)
568 {
569 $arConfigs = [];
570 $arRatingRuleConfigs = CRatingRulesMain::OnGetRatingRuleConfigs();
571 if (is_null($objectType))
572 {
573 foreach ($arRatingRuleConfigs as $OBJ_TYPE => $TYPE_VALUE)
574 {
575 foreach ($TYPE_VALUE as $RULE_TYPE => $RULE_VALUE)
576 {
577 foreach ($RULE_VALUE as $VALUE_CONFIG)
578 {
579 foreach ($VALUE_CONFIG['FIELDS'] as $VALUE_FIELDS)
580 {
581 $arConfigs[$OBJ_TYPE][$RULE_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT'] = $VALUE_FIELDS['DEFAULT'];
582 if (isset($arConfigs[$OBJ_TYPE][$RULE_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT_INPUT']))
583 {
584 $arConfigs[$OBJ_TYPE][$RULE_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT_INPUT'] = $VALUE_FIELDS['DEFAULT_INPUT'];
585 }
586 }
587 }
588 }
589 }
590 }
591 else
592 {
593 foreach ($arRatingRuleConfigs[$objectType] as $RULE_TYPE => $RULE_VALUE)
594 {
595 foreach ($RULE_VALUE as $VALUE_CONFIG)
596 {
597 foreach ($VALUE_CONFIG['FIELDS'] as $VALUE_FIELDS)
598 {
599 $arConfigs[$RULE_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT'] = $VALUE_FIELDS['DEFAULT'];
600 if (isset($arConfigs[$RULE_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT_INPUT']))
601 {
602 $arConfigs[$RULE_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT_INPUT'] = $VALUE_FIELDS['DEFAULT_INPUT'];
603 }
604 }
605 }
606 }
607 }
608
609 return $arConfigs;
610 }
611
612 public static function voteCheck($arConfigs)
613 {
614 global $DB;
615
617 $helper = $connection->getSqlHelper();
618
619 $ratingId = CRatings::GetAuthorityRating();
620 if ($ratingId == 0)
621 {
622 return true;
623 }
624
625 // 1. UPDATE OLD VOTE (< 90 day)
626 $strSql = "
627 UPDATE
628 b_rating_vote
629 SET
630 ACTIVE = 'N',
631 USER_ID = 0
632 WHERE
633 ENTITY_TYPE_ID = 'USER' and CREATED < " . $helper->addDaysToDateTime(-intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])) . "
634 ";
635 $DB->Query($strSql);
636
637 // 2. INSERT NEW VOTE FOR AUTHORITY
638 $sRatingUser = "";
639 $sRatingWeightType = COption::GetOptionString("main", "rating_weight_type", "auto");
640 if ($sRatingWeightType == 'auto')
641 {
642 $sRatingAuthrorityWeight = COption::GetOptionString("main", "rating_authority_weight_formula", 'Y');
643 if ($sRatingAuthrorityWeight == 'Y')
644 {
645 $communitySize = COption::GetOptionString("main", "rating_community_size", 1);
646 $communityAuthority = COption::GetOptionString("main", "rating_community_authority", 1);
647 $voteWeight = COption::GetOptionString("main", "rating_vote_weight", 1);
648 $sValue = "($communitySize*(RR.VOTE_WEIGHT/" . round($voteWeight, 4) . ")/" . round($communityAuthority) . ") as VALUE";
649
650 $ratingId = CRatings::GetAuthorityRating();
651 $sRatingUser = "LEFT JOIN b_rating_user RR ON RR.RATING_ID = " . intval($ratingId) . " AND RR.ENTITY_ID = RV.USER_ID";
652 }
653 else
654 {
655 $sValue = "1 as VALUE";
656 }
657 }
658 else
659 {
660 $ratingId = CRatings::GetAuthorityRating();
661 $sRatingUser = "LEFT JOIN b_rating_user RR ON RR.RATING_ID = " . intval($ratingId) . " AND RR.ENTITY_ID = RV.USER_ID";
662 $sValue = "RR.VOTE_WEIGHT as VALUE";
663 }
664
665 $strSql = "
666 INSERT INTO b_rating_vote (RATING_VOTING_ID, VALUE, ACTIVE, CREATED, USER_ID, USER_IP, ENTITY_TYPE_ID, ENTITY_ID, OWNER_ID)
667 SELECT
668 0 as RATING_VOTING_ID,
669 $sValue,
670 'N' as ACTIVE,
671 " . $DB->GetNowFunction() . " as CREATED,
672 RV.USER_ID,
673 'auto' as USER_IP,
674 'USER' as ENTITY_TYPE_ID,
675 RV.OWNER_ID as ENTITY_ID,
676 RV.OWNER_ID
677 FROM
678 b_rating_vote RV
679 $sRatingUser
680 LEFT JOIN b_rating_vote RV2 ON RV2.USER_ID = RV.USER_ID AND RV2.ENTITY_TYPE_ID = 'USER' AND RV2.ENTITY_ID = RV.OWNER_ID
681 WHERE
682 RV.CREATED > " . $helper->addDaysToDateTime(-intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])) . "
683 and RV.VALUE > 0 and RV2.VALUE IS NULL and RV.OWNER_ID > 0
684 GROUP BY RV.USER_ID, RV.OWNER_ID
685 HAVING
686 SUM(case
687 when RV.ENTITY_TYPE_ID = 'FORUM_TOPIC' then " . floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_TOPIC']) . "
688 when RV.ENTITY_TYPE_ID = 'FORUM_POST' then " . floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_POST']) . "
689 when RV.ENTITY_TYPE_ID = 'BLOG_POST' then " . floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_POST']) . "
690 when RV.ENTITY_TYPE_ID = 'BLOG_COMMENT' then " . floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_COMMENT']) . "
691 else 0 end) >= " . floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_RESULT']) . "
692 ";
693 $DB->Query($strSql);
694
695 // 3.INSERT NEW VOTING GROUP (FROM STEP 2)
696 $strSql = "
697 INSERT INTO b_rating_voting (ENTITY_TYPE_ID, ENTITY_ID, ACTIVE, CREATED, LAST_CALCULATED, TOTAL_VALUE, TOTAL_VOTES, TOTAL_POSITIVE_VOTES, TOTAL_NEGATIVE_VOTES, OWNER_ID)
698 SELECT
699 RV.ENTITY_TYPE_ID,
700 RV.ENTITY_ID,
701 'Y' as ACTIVE,
702 " . $DB->GetNowFunction() . " as CREATED,
703 " . $DB->GetNowFunction() . " as LAST_CALCULATED,
704 SUM(VALUE) as TOTAL_VALUE,
705 SUM(1) as TOTAL_VOTES,
706 SUM(case when RV.VALUE > '0' then 1 else 0 end) as TOTAL_POSITIVE_VOTES,
707 SUM(case when RV.VALUE > '0' then 0 else 1 end) as TOTAL_NEGATIVE_VOTES,
708 RV.ENTITY_ID as OWNER_ID
709 FROM
710 b_rating_vote RV
711 LEFT JOIN b_rating_voting RVG ON RVG.ENTITY_TYPE_ID = RV.ENTITY_TYPE_ID AND RVG.ENTITY_ID = RV.ENTITY_ID
712 WHERE
713 RATING_VOTING_ID = 0
714 and RV.CREATED > " . $helper->addDaysToDateTime(-intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])) . "
715 and RVG.ID IS NULL and RV.OWNER_ID > 0
716 GROUP BY RV.ENTITY_TYPE_ID, RV.ENTITY_ID
717 ";
718 $DB->Query($strSql);
719
720 // 4 UPDATE FIELD RATING_VOTE_ID (FROM STEP 3)
721 $strSql = "
722 UPDATE
723 b_rating_vote RV,
724 b_rating_voting RVG
725 SET
726 RV.RATING_VOTING_ID = RVG.ID,
727 RV.ACTIVE = 'Y'
728 WHERE
729 RV.ENTITY_TYPE_ID = RVG.ENTITY_TYPE_ID
730 and RV.ENTITY_ID = RVG.ENTITY_ID
731 and RV.RATING_VOTING_ID = 0";
732 $DB->Query($strSql);
733
734 // 5 INSERT TEMP TABLE VOTE RESULTS
735 $DB->Query("TRUNCATE b_rating_voting_prepare");
736 $strSql = "
737 INSERT INTO b_rating_voting_prepare (RATING_VOTING_ID, TOTAL_VALUE, TOTAL_VOTES, TOTAL_POSITIVE_VOTES, TOTAL_NEGATIVE_VOTES)
738 SELECT
739 RV.RATING_VOTING_ID,
740 SUM(RV.VALUE) as TOTAL_VALUE,
741 SUM(1) as TOTAL_VOTES,
742 SUM(case when RV.VALUE > '0' then 1 else 0 end) as TOTAL_POSITIVE_VOTES,
743 SUM(case when RV.VALUE > '0' then 0 else 1 end) as TOTAL_NEGATIVE_VOTES
744 FROM
745 b_rating_vote RV
746 WHERE
747 RV.RATING_VOTING_ID IN (SELECT DISTINCT RV0.RATING_VOTING_ID FROM b_rating_vote RV0 WHERE RV0.ACTIVE='N')
748 and RV.USER_ID > 0
749 GROUP BY RV.RATING_VOTING_ID";
750 $DB->Query($strSql);
751
752 // 6 UPDATE VOTE_RESULTS FROM TEMP TABLE
753 $strSql = "
754 UPDATE
755 b_rating_voting RVG,
756 b_rating_voting_prepare RVG0
757 SET
758 RVG.TOTAL_VALUE = RVG0.TOTAL_VALUE,
759 RVG.TOTAL_VOTES = RVG0.TOTAL_VOTES,
760 RVG.TOTAL_POSITIVE_VOTES = RVG0.TOTAL_POSITIVE_VOTES,
761 RVG.TOTAL_NEGATIVE_VOTES = RVG0.TOTAL_NEGATIVE_VOTES
762 WHERE
763 RVG.ID = RVG0.RATING_VOTING_ID";
764 $DB->Query($strSql);
765
766 // 7 DELETE OLD POST
767 $strSql = "DELETE FROM b_rating_vote WHERE ENTITY_TYPE_ID = 'USER' and CREATED < " . $helper->addDaysToDateTime(-intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])) . "";
768 $DB->Query($strSql);
769
770 return true;
771 }
772}
$connection
Определения actionsdefinitions.php:38
static getConnection($name="")
Определения application.php:638
static ApplyVetting($arConfigs)
Определения rating_rule.php:362
Определения rating_rules.php:6
static OnGetRatingRuleConfigs()
Определения rating_rules.php:8
static addToGroup($arConfigs)
Определения rating_rules.php:311
static __CheckFields($entityId, $arConfigs)
Определения rating_rules.php:461
static OnAfterAddRatingRule($ID, $arFields)
Определения rating_rules.php:445
static ratingCheckInterval($arConfigs)
Определения rating_rules.php:279
static __AssembleConfigDefault($objectType=null)
Определения rating_rules.php:567
static GetUfList()
Определения rating_rules.php:377
static voteCheck($arConfigs)
Определения rating_rules.php:612
static removeFromGroup($arConfigs)
Определения rating_rules.php:344
static OnGetRatingRuleObjects()
Определения rating_rules.php:433
static OnAfterUpdateRatingRule($ID, $arFields)
Определения rating_rules.php:453
static changeUF($arConfigs)
Определения rating_rules.php:391
static ratingCheck($arConfigs)
Определения rating_rules.php:246
static GetAuthorityRating()
Определения ratings.php:1475
$arFields
Определения dblapprove.php:5
$res
Определения filter_act.php:7
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$entityId
Определения payment.php:4
$arRes
Определения options.php:104
if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log") &&is_file($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log") &&is_readable($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log")) $rsData
Определения update_log.php:102