1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
answer.php
См. документацию.
1<?php
2
3#############################################
4# Bitrix Site Manager Forum #
5# Copyright (c) 2002-2009 Bitrix #
6# https://www.bitrixsoft.com #
7# mailto:admin@bitrixsoft.com #
8#############################################
9
10use Bitrix\Vote;
11
12IncludeModuleLangFile(__FILE__);
13
15{
16 public static function CheckFields($ACTION, &$arFields, $ID = 0)
17 {
18 global $APPLICATION;
19 global $USER;
20 $aMsg = [];
21 $ID = intval($ID);
22 $ACTION = ($ID > 0 && $ACTION == 'UPDATE' ? 'UPDATE' : 'ADD');
23
24 unset($arFields['ID']);
25
26 if (isset($arFields['QUESTION_ID']) || $ACTION == 'ADD'):
27 $arFields['QUESTION_ID'] = intval($arFields['QUESTION_ID'] ?? 0);
28 if ($arFields['QUESTION_ID'] <= 0):
29 $aMsg[] = [
30 'id' => 'QUESTION_ID',
31 'text' => GetMessage('VOTE_FORGOT_QUESTION_ID')
32 ];
33 endif;
34 endif;
35
36 if (isset($arFields['MESSAGE']) || $ACTION == 'ADD')
37 {
38 $arFields['MESSAGE'] = ($arFields['MESSAGE'] ?? '');
39 if (!$USER || $USER->CanDoOperation('edit_php') !== true)
40 {
42 }
43 if ($arFields['MESSAGE'] === '')
44 {
45 $aMsg[] = ['id' => 'MESSAGE', 'text' => GetMessage('VOTE_FORGOT_MESSAGE')];
46 }
47 }
48
49 if (isset($arFields['REACTION']))
50 {
51 $reaction = mb_substr((string)$arFields['REACTION'], 0, \Bitrix\Vote\AnswerTable::REACTION_MAX_LENGTH);
52 $arFields['REACTION'] = Vote\Inner\Sanitizer::cleanText($reaction);
53 }
54
55 if (array_key_exists('IMAGE_ID', $arFields))
56 {
57 if (!is_array($arFields['IMAGE_ID']))
58 {
59 $arFields['IMAGE_ID'] = intval($arFields['IMAGE_ID']);
60 }
61 else if ($arFields['IMAGE_ID']['name'] == '' && $arFields['IMAGE_ID']['del'] == '')
62 {
63 unset($arFields['IMAGE_ID']);
64 }
65 else if ($str = CFile::CheckImageFile($arFields['IMAGE_ID']))
66 {
67 $aMsg[] = array(
68 'id' => 'IMAGE_ID',
69 'text' => 'Answer: '.$str);
70 }
71 else
72 {
73 $arFields['IMAGE_ID']['MODULE_ID'] = 'vote';
74 }
75 }
76
77 unset($arFields['TIMESTAMP_X']);
78 if (isset($arFields['ACTIVE']) || $ACTION == 'ADD') $arFields['ACTIVE'] = (($arFields['ACTIVE'] ?? 'Y') == 'N' ? 'N' : 'Y');
79 if (isset($arFields['C_SORT']) || $ACTION == 'ADD') $arFields['C_SORT'] = intval($arFields['C_SORT'] ?? 100);
80 if (isset($arFields['COUNTER']) || $ACTION == 'ADD') $arFields['COUNTER'] = intval($arFields['COUNTER'] ?? 0);
81 if (isset($arFields['FIELD_TYPE']) || $ACTION == 'ADD') $arFields['FIELD_TYPE'] = intval($arFields['FIELD_TYPE'] ?? 0);
82 if (isset($arFields['FIELD_WIDTH']) || $ACTION == 'ADD') $arFields['FIELD_WIDTH'] = intval($arFields['FIELD_WIDTH'] ?? 0);
83 if (isset($arFields['FIELD_HEIGHT']) || $ACTION == 'ADD') $arFields['FIELD_HEIGHT'] = intval($arFields['FIELD_HEIGHT'] ?? 0);
84
85 if (isset($arFields['FIELD_PARAM']))
86 {
87 $arFields['FIELD_PARAM'] = ((!$USER || $USER->CanDoOperation('edit_php') !== true)
88 ? '' : trim($arFields['FIELD_PARAM']))
89 ;
90 }
91
92 if (isset($arFields['COLOR']) || $ACTION == 'ADD') $arFields['COLOR'] = mb_substr(trim($arFields['COLOR'] ?? ''), 0, 7);
93
94 if (!empty($aMsg))
95 {
96 $e = new CAdminException(array_reverse($aMsg));
97 $APPLICATION->ThrowException($e);
98 return false;
99 }
100 return true;
101 }
102
103 public static function Add($arFields)
104 {
105 global $DB;
106
108 return false;
109/***************** Event onBeforeVoteAnswerAdd *********************/
110 foreach (GetModuleEvents("vote", "onBeforeVoteAnswerAdd", true) as $arEvent)
111 if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
112 return false;
113/***************** /Event ******************************************/
114 if (empty($arFields))
115 return false;
116
117 if (
118 array_key_exists("IMAGE_ID", $arFields) &&
119 is_array($arFields["IMAGE_ID"])
120 )
121 {
122 $arFields["IMAGE_ID"]["MODULE_ID"] = "vote";
123 CFile::SaveForDB($arFields, "IMAGE_ID", "vote");
124 }
125
126 if ($DB->type == "ORACLE")
127 $arFields["ID"] = $DB->NextID("SQ_B_VOTE_ANSWER");
128
129 if (isset($arFields['REACTION']))
130 {
131 $arFields['REACTION'] = \Bitrix\Main\Text\Emoji::encode($arFields['REACTION']);
132 }
133
134 if (isset($arFields['MESSAGE']))
135 {
136 $arFields['MESSAGE'] = \Bitrix\Main\Text\Emoji::encode($arFields['MESSAGE']);
137 }
138
139 $arInsert = $DB->PrepareInsert("b_vote_answer", $arFields);
140
141 $DB->QueryBind("INSERT INTO b_vote_answer (".$arInsert[0].", TIMESTAMP_X) VALUES(".$arInsert[1].", ".$DB->GetNowFunction().")", array("MESSAGE" => $arFields["MESSAGE"]), false);
142 $ID = intval($DB->type == "ORACLE" ? $arFields["ID"] : $DB->LastID());
143
144/***************** Event onAfterVoteAnswerAdd **********************/
145 foreach (GetModuleEvents("vote", "onAfterVoteAnswerAdd", true) as $arEvent)
147/***************** /Event ******************************************/
148 return $ID;
149 }
150
151 public static function Update($ID, $arFields)
152 {
153 global $DB;
154 $arBinds = array();
155 $ID = intval($ID);
156
157 if ($ID <= 0 || !CVoteAnswer::CheckFields("UPDATE", $arFields, $ID))
158 return false;
159/***************** Event onBeforeVoteQuestionUpdate ****************/
160 foreach (GetModuleEvents("vote", "onBeforeVoteAnswerUpdate", true) as $arEvent)
161 if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false)
162 return false;
163/***************** /Event ******************************************/
164 if (empty($arFields))
165 return false;
166
167 if (
168 array_key_exists("IMAGE_ID", $arFields) &&
169 is_array($arFields["IMAGE_ID"])
170 )
171 {
172 $arFields["IMAGE_ID"]["MODULE_ID"] = "vote";
173 CFile::SaveForDB($arFields, "IMAGE_ID", "vote");
174 }
175 if (isset($arFields['MESSAGE']))
176 {
177 $arFields['MESSAGE'] = \Bitrix\Main\Text\Emoji::encode($arFields['MESSAGE']);
178 }
179
180 $arFields["~TIMESTAMP_X"] = $DB->GetNowFunction();
181 $strUpdate = $DB->PrepareUpdate("b_vote_answer", $arFields);
182 if (is_set($arFields, "MESSAGE"))
183 $arBinds["MESSAGE"] = $arFields["MESSAGE"];
184
185 if (!empty($strUpdate)):
186 $strSql = "UPDATE b_vote_answer SET ".$strUpdate." WHERE ID=".$ID;
187 $DB->QueryBind($strSql, $arBinds);
188// $DB->Query($strSql);
189 endif;
190/***************** Event onAfterVoteAnswerUpdate *******************/
191 foreach (GetModuleEvents("vote", "onAfterVoteAnswerUpdate", true) as $arEvent)
193/***************** /Event ******************************************/
194 return $ID;
195 }
196
197 public static function Delete($ID, $QUESTION_ID = false, $VOTE_ID = false)
198 {
199 global $DB;
200/***************** Event onBeforeVoteAnswerDelete ******************/
201 foreach (GetModuleEvents("vote", "onBeforeVoteAnswerDelete", true) as $arEvent)
202 {
203 if (ExecuteModuleEventEx($arEvent, array(&$ID, &$QUESTION_ID, &$VOTE_ID)) === false)
204 return false;
205 }
206/***************** /Event ******************************************/
207
208 $ID = (intval($ID) > 0 ? intval($ID) : false);
209 $QUESTION_ID = (intval($QUESTION_ID) > 0 ? intval($QUESTION_ID) : false);
210 $VOTE_ID = (intval($VOTE_ID) > 0 ? intval($VOTE_ID) : false);
211 if ($ID != false):
212 $strSqlEventAnswer = "DELETE FROM b_vote_event_answer WHERE ANSWER_ID=".$ID;
213 $strSqlAnswer = "DELETE FROM b_vote_answer WHERE ID=".$ID;
214 elseif ($QUESTION_ID != false):
215 $strSqlEventAnswer = "DELETE FROM b_vote_event_answer WHERE ANSWER_ID IN (
216 SELECT VA.ID FROM b_vote_answer VA WHERE VA.QUESTION_ID = ".$QUESTION_ID.")";
217 $strSqlAnswer = "DELETE FROM b_vote_answer WHERE QUESTION_ID = ".$QUESTION_ID;
218 elseif ($VOTE_ID != false):
219 $strSqlEventAnswer = "DELETE FROM b_vote_event_answer WHERE ANSWER_ID IN (
220 SELECT VA.ID
221 FROM b_vote_answer VA, b_vote_question VQ
222 WHERE VA.QUESTION_ID = VQ.ID AND VQ.VOTE_ID = ".$VOTE_ID.")";
223 $strSqlAnswer = "DELETE FROM b_vote_answer WHERE QUESTION_ID IN (
224 SELECT VQ.ID FROM b_vote_question VQ WHERE VQ.VOTE_ID = ".$VOTE_ID.")";
225 else:
226 return false;
227 endif;
228
229 $DB->Query($strSqlEventAnswer);
230 $DB->Query($strSqlAnswer);
231/***************** Event onAfterVoteAnswerDelete *******************/
232 foreach (GetModuleEvents("vote", "onAfterVoteAnswerDelete", true) as $arEvent)
233 ExecuteModuleEventEx($arEvent, array($ID, $QUESTION_ID, $VOTE_ID));
234/***************** /Event ******************************************/
235 return true;
236 }
237
238 public static function GetList($QUESTION_ID, $by="s_c_sort", $order="asc", $arFilter=array(), $arAddParams = array())
239 {
240 global $DB;
241 $QUESTION_ID = intval($QUESTION_ID);
242 $arSqlSearch = Array();
243 $arFilter = (is_array($arFilter) ? $arFilter : array());
244 foreach ($arFilter as $key => $val)
245 {
246 if(empty($val) || $val === "NOT_REF")
247 continue;
248 $key = strtoupper($key);
249 switch($key)
250 {
251 case "ID":
252 case "FIELD_TYPE":
253 $match = ($arFilter[$key."_EXACT_MATCH"]=="N" ? "Y" : "N");
254 $arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
255 break;
256 case "MESSAGE":
257 case "FIELD_PARAM":
258 $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" ? "N" : "Y");
259 $arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
260 break;
261 case "ACTIVE":
262 $arSqlSearch[] = ($val=="Y") ? "A.ACTIVE='Y'" : "A.ACTIVE='N'";
263 break;
264 }
265 }
266
267 $order = ($order!="desc" ? "asc" : "desc");
268 $by = (($by == "s_id" || $by == "s_counter") ? $by : "s_c_sort");
269 if ($by == "s_id") $strSqlOrder = " ORDER BY A.ID";
270 elseif ($by == "s_counter") $strSqlOrder = " ORDER BY A.COUNTER";
271 else $strSqlOrder = " ORDER BY A.C_SORT";
272 $strSqlOrder .= " ".$order;
273 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
274 $strSqlFrom = "FROM b_vote_answer A WHERE ".$strSqlSearch." and A.QUESTION_ID=".$QUESTION_ID."";
275 $strSql = "SELECT A.* ".$strSqlFrom.$strSqlOrder;
276
277 $arAddParams["nTopCount"] = ($arAddParams["nTopCount"] ?? 0);
278 if ($arAddParams["nTopCount"] > 0)
279 {
280 $arAddParams["nTopCount"] = intval($arAddParams["nTopCount"]);
281 if ($DB->type=="MSSQL")
282 $strSql = "SELECT TOP ".$arAddParams["nTopCount"]." A.* ".$strSqlFrom.$strSqlOrder;
283 else if ($DB->type=="ORACLE")
284 $strSql = "SELECT * FROM(".$strSql.") WHERE ROWNUM<=".$arAddParams["nTopCount"];
285 else
286 $strSql = "SELECT A.* ".$strSqlFrom.$strSqlOrder." LIMIT 0,".$arAddParams["nTopCount"];
287 }
288 else if (is_set($arAddParams, "bDescPageNumbering"))
289 {
290 $db_res = $DB->Query("SELECT COUNT(A.ID) as CNT ".$strSqlFrom);
291 $iCnt = (($db_res && ($ar_res = $db_res->Fetch())) ? intval($ar_res["CNT"]) : 0 );
292 $db_res = new CDBResult();
293 $db_res->NavQuery($strSql, $iCnt, $arAddParams);
294 return $db_res;
295 }
296 return $DB->Query($strSql);
297 }
298
299 public static function GetListEx($arOrder = array("ID" => "ASC"), $arFilter=array())
300 {
301 global $DB;
302
303 $arSqlSearch = Array();
304 $strSqlSearch = "";
305 $arSqlOrder = Array();
306 $strSqlOrder = "";
307
308 $arFilter = (is_array($arFilter) ? $arFilter : array());
309
310 foreach ($arFilter as $key => $val)
311 {
312 if ($val === "NOT_REF")
313 continue;
314 $key_res = VoteGetFilterOperation($key);
315 $strNegative = $key_res["NEGATIVE"];
316 $strOperation = $key_res["OPERATION"];
317 $key = mb_strtoupper($key_res["FIELD"]);
318
319 switch($key)
320 {
321 case "ID":
322 case "QUESTION_ID":
323 $str = ($strNegative=="Y"?"NOT":"")."(VA.".$key." IS NULL OR VA.".$key."<=0)";
324 if (!empty($val))
325 {
326 $str = ($strNegative=="Y"?" VA.".$key." IS NULL OR NOT ":"")."(VA.".$key." ".$strOperation." ".intval($val).")";
327 if ($strOperation == "IN")
328 {
329 $val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
330 if (!empty($val))
331 {
332 $str = ($strNegative=="Y"?" NOT ":"")."(VA.".$key." IN (".implode(",", $val)."))";
333 }
334 }
335 }
336 $arSqlSearch[] = $str;
337 break;
338 case "VOTE_ID":
339 $str = ($strNegative=="Y"?"NOT":"")."(VQ.".$key." IS NULL OR VQ.".$key."<=0)";
340 if (!empty($val))
341 {
342 $str = ($strNegative=="Y"?" VQ.".$key." IS NULL OR NOT ":"")."(VQ.".$key." ".$strOperation." ".intval($val).")";
343 if ($strOperation == "IN")
344 {
345 $val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
346 if (!empty($val))
347 {
348 $str = ($strNegative=="Y"?" NOT ":"")."(VQ.".$key." IN (".implode(",", $val)."))";
349 }
350 }
351 }
352 $arSqlSearch[] = $str;
353 break;
354 case "CHANNEL_ID":
355 $str = ($strNegative=="Y"?"NOT":"")."(V.".$key." IS NULL OR V.".$key."<=0)";
356 if (!empty($val))
357 {
358 $str = ($strNegative=="Y"?" V.".$key." IS NULL OR NOT ":"")."(V.".$key." ".$strOperation." ".intval($val).")";
359 if ($strOperation == "IN")
360 {
361 $val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
362 if (!empty($val))
363 {
364 $str = ($strNegative=="Y"?" NOT ":"")."(V.".$key." IN (".implode(",", $val)."))";
365 }
366 }
367 }
368 $arSqlSearch[] = $str;
369 break;
370 case "ACTIVE":
371 if (empty($val))
372 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(VA.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(VA.".$key.")<=0)";
373 else
374 $arSqlSearch[] = ($strNegative=="Y"?" VA.".$key." IS NULL OR NOT ":"")."(VA.".$key." ".$strOperation." '".$DB->ForSql($val)."')";
375 break;
376 }
377 }
378 if (count($arSqlSearch) > 0)
379 $strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
380
381 foreach ($arOrder as $by => $order)
382 {
383 $by = mb_strtoupper($by);
384 $order = mb_strtoupper($order);
385 $by = (in_array($by, array("ACTIVE", "QUESTION_ID", "C_SORT", "COUNTER")) ? $by : "ID");
386 if ($order!="ASC") $order = "DESC";
387 if ($by == "ACTIVE") $arSqlOrder[] = " VA.ACTIVE ".$order." ";
388 elseif ($by == "QUESTION_ID") $arSqlOrder[] = " VA.QUESTION_ID ".$order." ";
389 elseif ($by == "C_SORT") $arSqlOrder[] = " VA.C_SORT ".$order." ";
390 elseif ($by == "COUNTER") $arSqlOrder[] = " VA.COUNTER ".$order." ";
391 else $arSqlOrder[] = " VA.ID ".$order." ";
392 }
393 DelDuplicateSort($arSqlOrder);
394 if (count($arSqlOrder) > 0)
395 $strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
396
397 $strSql = "
398 SELECT V.CHANNEL_ID, VQ.VOTE_ID, VA.*
399 FROM b_vote_answer VA
400 INNER JOIN b_vote_question VQ ON (VA.QUESTION_ID = VQ.ID)
401 INNER JOIN b_vote V ON (VQ.VOTE_ID = V.ID)
402 WHERE 1=1 ".$strSqlSearch." ".$strSqlOrder;
403
404 return $DB->Query($strSql);
405 }
406
407 public static function GetGroupAnswers($ANSWER_ID)
408 {
409 global $DB;
410 $ANSWER_ID = intval($ANSWER_ID);
411 $strSql =
412 "SELECT A.MESSAGE, count(A.ID) as COUNTER ".
413 "FROM
414 b_vote_event_answer A,
415 b_vote_event_question Q,
416 b_vote_event E
417 WHERE
418 A.ANSWER_ID = '$ANSWER_ID'
419 and Q.ID = A.EVENT_QUESTION_ID
420 and E.ID = Q.EVENT_ID
421 and E.VALID = 'Y'
422 GROUP BY A.MESSAGE
423 ORDER BY COUNTER desc";
424 $res = $DB->Query($strSql);
425 return $res;
426 }
427}
$db_res
Определения options_user_settings.php:8
$ar_res
Определения options_user_settings_set.php:16
global $APPLICATION
Определения include.php:80
static encode($text)
Определения emoji.php:17
const REACTION_MAX_LENGTH
Определения answer.php:54
static cleanText(?string $text)
Определения sanitizer.php:20
Определения answer.php:15
static GetList($QUESTION_ID, $by="s_c_sort", $order="asc", $arFilter=array(), $arAddParams=array())
Определения answer.php:238
static GetListEx($arOrder=array("ID"=> "ASC"), $arFilter=array())
Определения answer.php:299
static Add($arFields)
Определения answer.php:103
static CheckFields($ACTION, &$arFields, $ID=0)
Определения answer.php:16
static GetGroupAnswers($ANSWER_ID)
Определения answer.php:407
static Delete($ID, $QUESTION_ID=false, $VOTE_ID=false)
Определения answer.php:197
static Update($ID, $arFields)
Определения answer.php:151
Определения dbresult.php:88
$str
Определения commerceml2.php:63
$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
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$ACTION
Определения csv_new_setup.php:27
endif
Определения csv_new_setup.php:990
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
DelDuplicateSort(&$arSort)
Определения tools.php:2055
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
Определения answer.php:8
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$val
Определения options.php:1793
$arFilter
Определения user_search.php:106
VoteGetFilterOperation($key)
Определения channel.php:504