1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
ratings_components.php
См. документацию.
1<?php
2
3IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/general/ratings_components.php");
4
7
9{
10 // return configs of component-rating
11 public static function OnGetRatingConfigs()
12 {
13 $arConfigs = array(
14 'MODULE_ID' => 'MAIN',
15 'MODULE_NAME' => GetMessage('MAIN_RATING_NAME'),
16 );
17 $arConfigs["COMPONENT"]["USER"]["VOTE"][] = array(
18 "ID" => 'USER',
19 "REFRESH_TIME" => '3600',
20 "CLASS" => 'CRatingsComponentsMain',
21 "CALC_METHOD" => 'CalcVoteUser',
22 "NAME" => GetMessage('MAIN_RATING_USER_VOTE_USER_NAME'),
23 "DESC" => GetMessage('MAIN_RATING_USER_VOTE_USER_DESC'),
24 "FIELDS" => array(
25 array(
26 "ID" => 'COEFFICIENT',
27 "DEFAULT" => '1',
28 ),
29 array(
30 "ID" => 'LIMIT',
31 "NAME" => GetMessage('MAIN_RATING_USER_VOTE_USER_LIMIT_NAME'),
32 "DEFAULT" => '30',
33 ),
34 )
35 );
36 $arConfigs["COMPONENT"]["USER"]["RATING"][] = array(
37 "ID" => 'BONUS',
38 "REFRESH_TIME" => '3600',
39 "CLASS" => 'CRatingsComponentsMain',
40 "CALC_METHOD" => 'CalcUserBonus',
41 "NAME" => GetMessage('FORUM_RATING_USER_RATING_BONUS_NAME'),
42 "DESC" => GetMessage('FORUM_RATING_USER_RATING_BONUS_DESC'),
43 "FORMULA" => "StartValue * K",
44 "FORMULA_DESC" => GetMessage('FORUM_RATING_USER_RATING_BONUS_FORMULA_DESC'),
45 "FIELDS" => array(
46 array(
47 "ID" => 'COEFFICIENT',
48 "DEFAULT" => '1',
49 ),
50 )
51 );
52 return $arConfigs;
53 }
54
55 // return support object
56 public static function OnGetRatingObject()
57 {
59 foreach ($arRatingConfigs["COMPONENT"] as $SupportType => $value)
60 $arSupportType[] = $SupportType;
61
62 return $arSupportType;
63 }
64
65 // check the value of the component-rating which relate to the module
66 public static function OnAfterAddRating($ID, $arFields)
67 {
68 $arFields['CONFIGS']['MAIN'] = CRatingsComponentsMain::__CheckFields($arFields['ENTITY_ID'], $arFields['CONFIGS']['MAIN']);
69
70 return $arFields;
71 }
72
73 // check the value of the component-rating which relate to the module
74 public static function OnAfterUpdateRating($ID, $arFields)
75 {
76 $arFields['CONFIGS']['MAIN'] = CRatingsComponentsMain::__CheckFields($arFields['ENTITY_ID'], $arFields['CONFIGS']['MAIN']);
77
78 return $arFields;
79 }
80
81 // Utilities
82
83 // check input values, if value does not validate, set the default value
84 public static function __CheckFields($entityId, $arConfigs)
85 {
87
88 if ($entityId == "USER") {
89 if (isset($arConfigs['VOTE']['USER']))
90 {
91 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['VOTE']['USER']['COEFFICIENT']))
92 $arConfigs['VOTE']['USER']['COEFFICIENT'] = $arDefaultConfig['VOTE']['USER']['COEFFICIENT']['DEFAULT'];
93 if (!preg_match('/^\d{1,5}$/', $arConfigs['VOTE']['USER']['LIMIT']))
94 $arConfigs['VOTE']['USER']['LIMIT'] = $arDefaultConfig['VOTE']['USER']['LIMIT']['DEFAULT'];
95 }
96 if (isset($arConfigs['RATING']['BONUS']))
97 {
98 if (!preg_match('/^\d{1,7}\.?\d{0,4}$/', $arConfigs['RATING']['BONUS']['COEFFICIENT']))
99 $arConfigs['RATING']['BONUS']['COEFFICIENT'] = $arDefaultConfig['RATING']['BONUS']['COEFFICIENT']['DEFAULT'];
100 }
101 }
102
103 return $arConfigs;
104 }
105
106 // collect the default and regular expressions for the fields component-rating
107 public static function __AssembleConfigDefault($objectType = null)
108 {
109 $arConfigs = array();
111 if (is_null($objectType))
112 {
113 foreach ($arRatingConfigs["COMPONENT"] as $OBJ_TYPE => $TYPE_VALUE)
114 foreach ($TYPE_VALUE as $RAT_TYPE => $RAT_VALUE)
115 foreach ($RAT_VALUE as $VALUE_CONFIG)
116 foreach ($VALUE_CONFIG['FIELDS'] as $VALUE_FIELDS)
117 $arConfigs[$OBJ_TYPE][$RAT_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT'] = $VALUE_FIELDS['DEFAULT'];
118 }
119 else
120 {
121 foreach ($arRatingConfigs["COMPONENT"][$objectType] as $RAT_TYPE => $RAT_VALUE)
122 foreach ($RAT_VALUE as $VALUE_CONFIG)
123 foreach ($VALUE_CONFIG['FIELDS'] as $VALUE_FIELDS)
124 $arConfigs[$RAT_TYPE][$VALUE_CONFIG['ID']][$VALUE_FIELDS['ID']]['DEFAULT'] = $VALUE_FIELDS['DEFAULT'];
125 }
126 return $arConfigs;
127 }
128
129 public static function OnGetRatingContentOwner($arParams)
130 {
131 if ($arParams['ENTITY_TYPE_ID'] == 'USER')
132 {
133 return intval($arParams['ENTITY_ID']);
134 }
135 return false;
136 }
137
138 // auto enabler rating vote
139 public static function GetShowRating(&$arParams)
140 {
141 if (isset($arParams['SHOW_RATING']) && trim($arParams['SHOW_RATING']) != '')
142 $arParams['SHOW_RATING'] = $arParams['SHOW_RATING'] == 'Y'? 'Y': 'N';
143 else
144 $arParams['SHOW_RATING'] = COption::GetOptionString('main', 'rating_vote_show', 'N');
145
146 return $arParams['SHOW_RATING'];
147 }
148
149 public static function getRatingLikeMessage($emotion, $safe = true)
150 {
151 Loc::loadLanguageFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/install/js/main/rating/config.php');
152
153 $emotion = mb_strtoupper($emotion);
154
155 if (empty($emotion) || $emotion == 'LIKE')
156 {
157 $text = Option::get("main", "rating_text_like_y", Loc::getMessage('RATING_LIKE_EMOTION_LIKE'));
158 return $safe? htmlspecialcharsEx($text): $text;
159 }
160
161 return Loc::getMessage('RATING_LIKE_EMOTION_'.$emotion);
162 }
163
164 // Calc function
165 public static function CalcVoteUser($arConfigs)
166 {
168 $helper = $connection->getSqlHelper();
169
171
172 $strSql = "DELETE FROM b_rating_component_results WHERE RATING_ID = '".intval($arConfigs['RATING_ID'])."' AND COMPLEX_NAME = '".$helper->forSql($arConfigs['COMPLEX_NAME'])."'";
173 $res = $connection->query($strSql);
174
175 $strSql = "INSERT INTO b_rating_component_results (RATING_ID, MODULE_ID, RATING_TYPE, NAME, COMPLEX_NAME, ENTITY_ID, ENTITY_TYPE_ID, CURRENT_VALUE)
176 SELECT
177 ".intval($arConfigs['RATING_ID'])." as RATING_ID,
178 '".$helper->forSql($arConfigs['MODULE_ID'])."' as MODULE_ID,
179 '".$helper->forSql($arConfigs['RATING_TYPE'])."' as RATING_TYPE,
180 '".$helper->forSql($arConfigs['NAME'])."' as RATING_NAME,
181 '".$helper->forSql($arConfigs['COMPLEX_NAME'])."' as COMPLEX_NAME,
182 RV.ENTITY_ID,
183 '".$helper->forSql($arConfigs['ENTITY_ID'])."' as ENTITY_TYPE_ID,
184 SUM(RVE.VALUE) * ".floatval($arConfigs['CONFIG']['COEFFICIENT'])." as CURRENT_VALUE
185 FROM
186 b_rating_voting RV,
187 b_rating_vote RVE
188 WHERE
189 RV.ENTITY_TYPE_ID = 'USER' AND RV.ENTITY_ID > 0
190 AND RVE.RATING_VOTING_ID = RV.ID".(intval($arConfigs['CONFIG']['LIMIT']) > 0 ? " AND RVE.CREATED > " . $helper->addDaysToDateTime(-intval($arConfigs['CONFIG']['LIMIT']))."" : "")."
191 GROUP BY RV.ENTITY_ID";
192
193 $res = $connection->query($strSql);
194
195 return true;
196 }
197
198 public static function CalcUserBonus($arConfigs)
199 {
201 $helper = $connection->getSqlHelper();
202
203 $communityLastVisit = COption::GetOptionString("main", "rating_community_last_visit", '90');
204
206
207 $strSql = "DELETE FROM b_rating_component_results WHERE RATING_ID = '".intval($arConfigs['RATING_ID'])."' AND COMPLEX_NAME = '".$helper->forSql($arConfigs['COMPLEX_NAME'])."'";
208 $connection->query($strSql);
209
210 $strSql = "INSERT INTO b_rating_component_results (RATING_ID, MODULE_ID, RATING_TYPE, NAME, COMPLEX_NAME, ENTITY_ID, ENTITY_TYPE_ID, CURRENT_VALUE)
211 SELECT
212 ".intval($arConfigs['RATING_ID'])." as RATING_ID,
213 '".$helper->forSql($arConfigs['MODULE_ID'])."' as MODULE_ID,
214 '".$helper->forSql($arConfigs['RATING_TYPE'])."' as RATING_TYPE,
215 '".$helper->forSql($arConfigs['NAME'])."' as RATING_NAME,
216 '".$helper->forSql($arConfigs['COMPLEX_NAME'])."' as COMPLEX_NAME,
217 RB.ENTITY_ID,
218 '".$helper->forSql($arConfigs['ENTITY_ID'])."' as ENTITY_TYPE_ID,
219 RB.BONUS*".floatval($arConfigs['CONFIG']['COEFFICIENT'])." as CURRENT_VALUE
220 FROM
221 b_rating_user RB
222 LEFT JOIN b_user U ON U.ID = RB.ENTITY_ID AND U.ACTIVE = 'Y' AND U.LAST_LOGIN > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
223 WHERE
224 RB.RATING_ID = ".intval($arConfigs['RATING_ID'])."
225 AND U.ID IS NOT NULL
226 ";
227 $connection->Query($strSql);
228
229 return true;
230 }
231}
$arParams
Определения access_dialog.php:21
$connection
Определения actionsdefinitions.php:38
const BX_ROOT
Определения bx_root.php:3
static getConnection($name="")
Определения application.php:638
static OnAfterAddRating($ID, $arFields)
Определения ratings_components.php:66
static __CheckFields($entityId, $arConfigs)
Определения ratings_components.php:84
static OnGetRatingContentOwner($arParams)
Определения ratings_components.php:129
static CalcVoteUser($arConfigs)
Определения ratings_components.php:165
static __AssembleConfigDefault($objectType=null)
Определения ratings_components.php:107
static GetShowRating(&$arParams)
Определения ratings_components.php:139
static getRatingLikeMessage($emotion, $safe=true)
Определения ratings_components.php:149
static CalcUserBonus($arConfigs)
Определения ratings_components.php:198
static OnAfterUpdateRating($ID, $arFields)
Определения ratings_components.php:74
static OnGetRatingConfigs()
Определения ratings_components.php:11
static OnGetRatingObject()
Определения ratings_components.php:56
static AddComponentResults($arComponentConfigs)
Определения ratings.php:2772
$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
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
htmlspecialcharsEx($str)
Определения tools.php:2685
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$entityId
Определения payment.php:4
$text
Определения template_pdf.php:79