1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
rating_rule.php
См. документацию.
1<?php
2
3IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/general/rating_rule.php");
4
6{
7 // get specified rating rule
8 public static function GetByID($ID)
9 {
10 global $DB;
11
12 $ID = intval($ID);
13
14 if($ID<=0)
15 return false;
16
17 return ($DB->Query("
18 SELECT
19 PR.*,
20 ".$DB->DateToCharFunction("PR.CREATED")." CREATED,
21 ".$DB->DateToCharFunction("PR.LAST_MODIFIED")." LAST_MODIFIED
22 FROM
23 b_rating_rule PR
24 WHERE
25 ID=".$ID
26 ));
27 }
28
29 // get rating rule list
30 public static function GetList($aSort=array(), $arFilter=Array())
31 {
32 global $DB;
33
34 $arSqlSearch = Array();
35
36 if (is_array($arFilter))
37 {
38 foreach ($arFilter as $key => $val)
39 {
40 if ((string)$val == '' || $val == "NOT_REF")
41 {
42 continue;
43 }
44 switch (strtoupper($key))
45 {
46 case "ID":
47 $arSqlSearch[] = GetFilterQuery("PR.ID", $val, "N");
48 break;
49 case "ACTIVE":
50 if(in_array($val, Array('Y', 'N')))
51 {
52 $arSqlSearch[] = "PR.ACTIVE = '".$val."'";
53 }
54 break;
55 case "NAME":
56 $arSqlSearch[] = GetFilterQuery("PR.NAME", $val);
57 break;
58 case "ENTITY_ID":
59 $arSqlSearch[] = GetFilterQuery("PR.ENTITY_ID", $val);
60 break;
61 }
62 }
63 }
64
65 $sOrder = "";
66 foreach($aSort as $key=>$val)
67 {
68 $ord = (mb_strtoupper($val) <> "ASC"? "DESC":"ASC");
69 switch(mb_strtoupper($key))
70 {
71 case "ID":
72 $sOrder .= ", PR.ID ".$ord;
73 break;
74 case "NAME":
75 $sOrder .= ", PR.NAME ".$ord;
76 break;
77 case "CREATED":
78 $sOrder .= ", PR.CREATED ".$ord;
79 break;
80 case "LAST_MODIFIED":
81 $sOrder .= ", PR.LAST_MODIFIED ".$ord;
82 break;
83 case "LAST_APPLIED":
84 $sOrder .= ", PR.LAST_APPLIED ".$ord;
85 break;
86 case "ACTIVE":
87 $sOrder .= ", PR.ACTIVE ".$ord;
88 break;
89 case "CALCULATION_METHOD":
90 $sOrder .= ", PR.CALCULATION_METHOD ".$ord;
91 break;
92 case "ENTITY_TYPE_ID":
93 $sOrder .= ", PR.ENTITY_TYPE_ID ".$ord;
94 break;
95 }
96 }
97
98 if ($sOrder == '')
99 $sOrder = "PR.ID DESC";
100
101 $strSqlOrder = " ORDER BY ".trim($sOrder, ", ");
102
103 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
104 $strSql = "
105 SELECT
106 PR.ID, PR.NAME, PR.ACTIVE, PR.ENTITY_TYPE_ID,
107 ".$DB->DateToCharFunction("PR.CREATED")." CREATED,
108 ".$DB->DateToCharFunction("PR.LAST_APPLIED")." LAST_APPLIED,
109 ".$DB->DateToCharFunction("PR.LAST_MODIFIED")." LAST_MODIFIED
110 FROM
111 b_rating_rule PR
112 WHERE
113 ".$strSqlSearch."
114 ".$strSqlOrder;
115 $res = $DB->Query($strSql);
116
117 return $res;
118 }
119
120 //Addition rating rule
121 public static function Add($arFields)
122 {
123 global $DB;
124
125 // check only general field
127 return false;
128
129 if (!(isset($arFields['ENTITY_TYPE_ID']) && $arFields['ENTITY_TYPE_ID'] <> ''))
130 return false;
131
132 $arRatingRuleConfigs = CRatingRule::GetRatingRuleConfigs($arFields["ENTITY_TYPE_ID"]);
133
134 $bHideAction = isset($arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['HIDE_ACTION'])
135 && $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['HIDE_ACTION'] == true? true: false;
136
137 $conditionModuleId = $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['MODULE'];
138 $arFields_i = Array(
139 "ACTIVE" => $arFields["ACTIVE"] == 'Y' ? 'Y' : 'N',
140 "NAME" => $arFields["NAME"],
141 "ENTITY_TYPE_ID" => $arFields["ENTITY_TYPE_ID"],
142 "CONDITION_NAME" => $arFields["CONDITION_NAME"],
143 "CONDITION_MODULE" => $conditionModuleId <> ''? $conditionModuleId: 'main',
144 "CONDITION_CLASS" => $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['CLASS'],
145 "CONDITION_METHOD" => $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['METHOD'],
146 "ACTION_NAME" => $bHideAction? 'empty': $arFields["ACTION_NAME"],
147 "ACTIVATE_CLASS" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['CLASS'],
148 "ACTIVATE_METHOD" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['METHOD'],
149 "DEACTIVATE_CLASS" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['CLASS'],
150 "DEACTIVATE_METHOD" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['METHOD'],
151 "~CREATED" => $DB->GetNowFunction(),
152 "~LAST_MODIFIED" => $DB->GetNowFunction(),
153 );
154 $ID = $DB->Add("b_rating_rule", $arFields_i);
155
156 // queries modules and give them to inspect the field settings
157 $db_events = GetModuleEvents("main", "OnAfterAddRatingRule");
158 while($arEvent = $db_events->Fetch())
160
161 $arFields_u = Array(
162 "CONDITION_CONFIG" => "'".$DB->ForSQL(serialize($arFields["CONDITION_CONFIG"]))."'",
163 "ACTION_CONFIG" => $bHideAction? "'a:0:{}'": "'".$DB->ForSQL(serialize($arFields["ACTION_CONFIG"]))."'",
164 );
165 $DB->Update("b_rating_rule", $arFields_u, "WHERE ID = ".$ID);
166
167 CAgent::AddAgent("CRatingRule::Apply($ID);", "main", "N", $arRatingRuleConfigs['CONDITION'][$arFields["CONDITION_NAME"]]['REFRESH_TIME'], "", "Y", "");
168
169 return $ID;
170 }
171
172 //Update rating
173 public static function Update($ID, $arFields)
174 {
175 global $DB;
176
177 $ID = intval($ID);
178
179 // check only general field
181 return false;
182
183 if (isset($arFields["ENTITY_TYPE_ID"]) && $arFields['ENTITY_TYPE_ID'] <> '')
184 {
185 $arRatingRuleConfigs = CRatingRule::GetRatingRuleConfigs($arFields["ENTITY_TYPE_ID"]);
186
187 $bHideAction = isset($arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['HIDE_ACTION'])
188 && $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['HIDE_ACTION'] == true? true: false;
189
190 $conditionModuleId = $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['MODULE'];
191 $arFields_u = Array(
192 "ACTIVE" => $arFields["ACTIVE"] == 'Y' ? 'Y' : 'N',
193 "NAME" => $arFields["NAME"],
194 "ENTITY_TYPE_ID" => $arFields["ENTITY_TYPE_ID"],
195 "CONDITION_NAME" => $arFields["CONDITION_NAME"],
196 "CONDITION_MODULE" => $conditionModuleId <> ''? $conditionModuleId: 'main',
197 "CONDITION_CLASS" => $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['CLASS'],
198 "CONDITION_METHOD" => $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['METHOD'],
199 "ACTION_NAME" => $bHideAction? 'empty': $arFields["ACTION_NAME"],
200 "ACTIVATE_CLASS" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['CLASS'],
201 "ACTIVATE_METHOD" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['METHOD'],
202 "DEACTIVATE_CLASS" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['CLASS'],
203 "DEACTIVATE_METHOD" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['METHOD'],
204 "~LAST_MODIFIED" => $DB->GetNowFunction(),
205 );
206 }
207 else
208 {
209 $arFields_u = Array(
210 "ACTIVE" => $arFields['ACTIVE'] == 'Y' ? 'Y' : 'N',
211 "NAME" => $arFields["NAME"],
212 "~LAST_MODIFIED" => $DB->GetNowFunction(),
213 );
214 unset($arFields["CONDITION_CONFIG"]);
215 unset($arFields["ACTION_CONFIG"]);
216 }
217 $strUpdate = $DB->PrepareUpdate("b_rating_rule", $arFields_u);
218 if($strUpdate!="")
219 {
220 $strSql = "UPDATE b_rating_rule SET ".$strUpdate." WHERE ID=".$ID;
221 if(!$DB->Query($strSql))
222 return false;
223 }
224
225 if (isset($arFields["CONDITION_CONFIG"]))
226 {
227 // queries modules and give them to inspect the field settings
228 $db_events = GetModuleEvents("main", "OnAfterUpdateRatingRule");
229 while($arEvent = $db_events->Fetch())
231
232 $arFields_u = Array(
233 "CONDITION_CONFIG" => "'".$DB->ForSQL(serialize($arFields["CONDITION_CONFIG"]))."'",
234 "ACTION_CONFIG" => $bHideAction? "'a:0:{}'": "'".$DB->ForSQL(serialize($arFields["ACTION_CONFIG"]))."'",
235 );
236 $DB->Update("b_rating_rule", $arFields_u, "WHERE ID = ".$ID);
237 }
238
239 CAgent::RemoveAgent("CRatingRule::Apply($ID);", "main");
240 CAgent::AddAgent("CRatingRule::Apply($ID);", "main", "N", $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['REFRESH_TIME'], "", "Y", "");
241
242 return true;
243 }
244
245 // delete rating rule
246 public static function Delete($ID)
247 {
248 global $DB;
249
250 $ID = intval($ID);
251
252 $db_events = GetModuleEvents("main", "OnBeforeDeleteRatingRule");
253 while($arEvent = $db_events->Fetch())
254 ExecuteModuleEventEx($arEvent, array($ID));
255
256 $DB->Query("DELETE FROM b_rating_rule WHERE ID=$ID");
257 $DB->Query("DELETE FROM b_rating_rule_vetting WHERE RULE_ID=$ID");
258
259 CAgent::RemoveAgent("CRatingRule::Apply($ID);", "main");
260
261 return true;
262 }
263
264 // start rating rule action
265 public static function Apply($ID)
266 {
267 global $DB;
268
269 $ID = intval($ID);
270
271 $ratingRule = CRatingRule::GetByID($ID);
272 $arConfigs = $ratingRule->Fetch();
273 if ($arConfigs['ACTIVE'] == 'Y')
274 {
275 $arConfigs['CONDITION_CONFIG'] = unserialize(htmlspecialcharsback($arConfigs['CONDITION_CONFIG']), ['allowed_classes' => false]);
276 $arConfigs['ACTION_CONFIG'] = unserialize(htmlspecialcharsback($arConfigs['ACTION_CONFIG']), ['allowed_classes' => false]);
277
278 $arConfigs['CONDITION_MODULE'] = isset($arConfigs['CONDITION_MODULE']) && $arConfigs['CONDITION_MODULE'] <> ''? $arConfigs['CONDITION_MODULE']: 'main';
279 if(CModule::IncludeModule(mb_strtolower($arConfigs['CONDITION_MODULE']))) {
280 if (method_exists($arConfigs['CONDITION_CLASS'], $arConfigs['CONDITION_METHOD']))
281 call_user_func(array($arConfigs['CONDITION_CLASS'], $arConfigs['CONDITION_METHOD']), $arConfigs);
282
283 $DB->Query("DELETE FROM b_rating_rule_vetting WHERE RULE_ID = $ID AND APPLIED = 'Y'");
284 }
285 if (method_exists($arConfigs['ACTIVATE_CLASS'], $arConfigs['ACTIVATE_METHOD']))
286 call_user_func(array($arConfigs['ACTIVATE_CLASS'], $arConfigs['ACTIVATE_METHOD']), $arConfigs);
287
288 $DB->Query("UPDATE b_rating_rule SET LAST_APPLIED = ".$DB->GetNowFunction()." WHERE ID = $ID");
289 }
290 return "CRatingRule::Apply($ID);";
291 }
292
293 // get vetting list
294 public static function GetVetting($arFilter, $arSort)
295 {
296 global $DB;
297
298 $arSqlSearch = array();
299 if (is_array($arFilter))
300 {
301 foreach ($arFilter as $key => $val)
302 {
303 if ((string)$val == '' || $val=="NOT_REF")
304 {
305 continue;
306 }
307 switch (strtoupper($key))
308 {
309 case "RULE_ID":
310 $arSqlSearch[] = GetFilterQuery("RULE_ID", $val, "N");
311 break;
312 case "ENTITY_TYPE_ID":
313 $arSqlSearch[] = GetFilterQuery("ENTITY_TYPE_ID", $val, "N");
314 break;
315 case "ENTITY_ID":
316 $arSqlSearch[] = GetFilterQuery("ENTITY_ID", $val, "N");
317 break;
318 case "APPLIED":
319 if(in_array($val, Array('Y', 'N')))
320 {
321 $arSqlSearch[] = "APPLIED = '".$val."'";
322 }
323 break;
324 }
325 }
326 }
327 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
328
329 $sOrder = "";
330 foreach($arSort as $key=>$val)
331 {
332 $ord = (mb_strtoupper($val) <> "ASC"? "DESC":"ASC");
333 switch(mb_strtoupper($key))
334 {
335 case "ID":
336 $sOrder .= ", ID ".$ord;
337 break;
338 case "RULE_ID":
339 $sOrder .= ", RULE_ID ".$ord;
340 break;
341 case "ENTITY_TYPE_ID":
342 $sOrder .= ", ENTITY_TYPE_ID ".$ord;
343 break;
344 case "ENTITY_ID":
345 $sOrder .= ", ENTITY_ID ".$ord;
346 break;
347 case "APPLIED":
348 $sOrder .= ", APPLIED ".$ord;
349 break;
350 }
351 }
352
353 if ($sOrder == '')
354 $sOrder = "ID ASC";
355 $strSqlOrder = " ORDER BY ".trim($sOrder, ", ");
356
357 $strSql = "SELECT * FROM b_rating_rule_vetting WHERE $strSqlSearch $strSqlOrder";
358 return $DB->Query($strSql);
359 }
360
361 // apply vetting list
362 public static function ApplyVetting($arConfigs)
363 {
364 global $DB;
365
366 $ruleId = intval($arConfigs['ID']);
367
368 // put a check that they are counted
369 $DB->Query("UPDATE b_rating_rule_vetting SET APPLIED = 'Y' WHERE RULE_ID = $ruleId");
370
371 return true;
372 }
373
374 // queries modules and get all the available objects
375 public static function GetRatingRuleObjects()
376 {
377 $arObjects = array();
378
379 $db_events = GetModuleEvents("main", "OnGetRatingRuleObjects");
380 while($arEvent = $db_events->Fetch())
381 {
382 $arConfig = ExecuteModuleEventEx($arEvent);
383 foreach ($arConfig as $OBJ_TYPE)
384 if (!in_array($OBJ_TYPE, $arObjects))
385 $arObjects[] = $OBJ_TYPE;
386 }
387 return $arObjects;
388 }
389
390 // queries modules and assemble an array of settings
391 public static function GetRatingRuleConfigs($objectType = null, $withRuleType = true)
392 {
393 $arConfigs = array();
394
395 $db_events = GetModuleEvents("main", "OnGetRatingRuleConfigs");
396 while($arEvent = $db_events->Fetch())
397 {
398 $arConfig = ExecuteModuleEventEx($arEvent);
399 if (is_null($objectType))
400 {
401 foreach ($arConfig as $OBJ_TYPE => $TYPE_VALUE)
402 foreach ($TYPE_VALUE as $RULE_TYPE => $RULE_VALUE)
403 foreach ($RULE_VALUE as $VALUE)
404 if ($withRuleType)
405 $arConfigs[$OBJ_TYPE][$RULE_TYPE][$VALUE['ID']] = $VALUE;
406 else
407 $arConfigs[$OBJ_TYPE][$VALUE['ID']] = $VALUE;
408 }
409 else
410 {
411 foreach ($arConfig[$objectType] as $RULE_TYPE => $RULE_VALUE)
412 {
413 foreach ($RULE_VALUE as $VALUE)
414 if ($withRuleType)
415 $arConfigs[$RULE_TYPE][$VALUE['ID']] = $VALUE;
416 else
417 $arConfigs[$VALUE['ID']] = $VALUE;
418 }
419 }
420 }
421 return $arConfigs;
422 }
423
424 // check only general field
425 public static function __CheckFields($arFields)
426 {
427 $aMsg = array();
428
429 if(is_set($arFields, "NAME") && trim($arFields["NAME"])=="")
430 $aMsg[] = array("id"=>"NAME", "text"=>GetMessage("RR_GENERAL_ERR_NAME"));
431 if(is_set($arFields, "ACTIVE") && !($arFields["ACTIVE"] == 'Y' || $arFields["ACTIVE"] == 'N'))
432 $aMsg[] = array("id"=>"ACTIVE", "text"=>GetMessage("RR_GENERAL_ERR_ACTIVE"));
433 if(is_set($arFields, "ENTITY_TYPE_ID"))
434 {
436 if(!in_array($arFields['ENTITY_TYPE_ID'], $arObjects))
437 $aMsg[] = array("id"=>"ENTITY_TYPE_ID", "text"=>GetMessage("RR_GENERAL_ERR_ENTITY_TYPE_ID"));
438 }
439 if(is_set($arFields, "CONDITION_NAME") && trim($arFields["CONDITION_NAME"])=="")
440 $aMsg[] = array("id"=>"CONDITION_NAME", "text"=>GetMessage("RR_GENERAL_ERR_CONDITION_NAME"));
441 if(is_set($arFields, "ACTION_NAME") && trim($arFields["ACTION_NAME"])=="")
442 $aMsg[] = array("id"=>"ACTION_NAME", "text"=>GetMessage("RR_GENERAL_ERR_ACTION_NAME"));
443
444 if(!empty($aMsg))
445 {
446 $e = new CAdminException($aMsg);
447 $GLOBALS["APPLICATION"]->ThrowException($e);
448 return false;
449 }
450
451 return true;
452 }
453}
const BX_ROOT
Определения bx_root.php:3
Определения rating_rule.php:6
static GetList($aSort=array(), $arFilter=Array())
Определения rating_rule.php:30
static Delete($ID)
Определения rating_rule.php:246
static GetRatingRuleObjects()
Определения rating_rule.php:375
static Add($arFields)
Определения rating_rule.php:121
static GetByID($ID)
Определения rating_rule.php:8
static Apply($ID)
Определения rating_rule.php:265
static GetRatingRuleConfigs($objectType=null, $withRuleType=true)
Определения rating_rule.php:391
static __CheckFields($arFields)
Определения rating_rule.php:425
static ApplyVetting($arConfigs)
Определения rating_rule.php:362
static GetVetting($arFilter, $arSort)
Определения rating_rule.php:294
static Update($ID, $arFields)
Определения rating_rule.php:173
$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
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
if($ajaxMode) $ID
Определения get_user.php:27
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
htmlspecialcharsback($str)
Определения tools.php:2693
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
if(empty($signedUserToken)) $key
Определения quickway.php:257
$val
Определения options.php:1793
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106