1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
event.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
10require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/vote/classes/general/event.php");
11
13{
14 public static function GetUserAnswerStat($arSort = array(), $arFilter = array(), $arParams = array())
15 {
16 global $DB, $USER;
17
18 $arFilter = (is_array($arFilter) ? $arFilter : array());
19 if (!is_array($arSort) && $arSort > 0)
20 {
21 $arFilter["VOTE_ID"] = $arSort;
22 $arFilter["VALID"] = "Y";
23 $arSort = array();
24 }
25 $arFilter["bGetMemoStat"] = ($arFilter["bGetMemoStat"] == "N" ? "N" : "Y");
26
27 $arSqlSelect = $arSqlSearch = $arSqlGroup = array();
28 $strSqlSelect = $strSqlSearch = $strSqlGroup = "";
29
30 foreach ($arFilter as $key => $val)
31 {
32 $key_res = VoteGetFilterOperation($key);
33 $strNegative = $key_res["NEGATIVE"];
34 $strOperation = $key_res["OPERATION"];
35 $key = mb_strtoupper($key_res["FIELD"]);
36 switch($key)
37 {
38 case "ID":
39 case "VOTE_ID":
40 case "QUESTION_ID":
41 case "ANSWER_ID":
42 case "USER_ID":
43 case "AUTH_USER_ID":
44 switch ($key)
45 {
46 case "ID":
47 case "VOTE_ID":
48 $key = ("VE.".$key);
49 break;
50 case "QUESTION_ID":
51 $key = ("VEQ.".$key);
52 break;
53 case "ANSWER_ID":
54 $key = ("VEA.".$key);
55 break;
56 case "USER_ID":
57 case "AUTH_USER_ID":
58 $key = "VU.AUTH_USER_ID";
59 break;
60 }
61
62 $str = ($strNegative=="Y"?"NOT":"")."(".$key." IS NULL OR ".$key."<=0)";
63 if (!empty($val))
64 {
65 $str = ($strNegative=="Y"?" ".$key." IS NULL OR NOT ":"")."(".$key." ".$strOperation." ".intval($val).")";
66 if ($strOperation == "IN")
67 {
68 $val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
69 if (!empty($val))
70 {
71 $str = ($strNegative=="Y"?" NOT ":"")."(".$key." IN (".implode(",", $val)."))";
72 }
73 }
74 }
75 $arSqlSearch[] = $str;
76 break;
77 case "VALID":
78 case "VISIBLE":
79 if (empty($val))
80 $arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(VE.".$key." IS NULL OR LENGTH(VE.".$key.")<=0)";
81 else
82 $arSqlSearch[] = ($strNegative=="Y"?" VE.".$key." IS NULL OR NOT ":"")."(VE.".$key." ".$strOperation." '".$DB->ForSql($val)."' )";
83 break;
84 case "BGETMEMOSTAT":
85 if ($val == "Y")
86 {
87 $arSqlGroup[] = $arSqlSelect[] = "VEA.MESSAGE";
88 $arSqlSearch[] = "VEA.MESSAGE != ' '";
89 }
90 break;
91 case "BGETVOTERS":
92 $arSqlSearch[] = "VU.AUTH_USER_ID > 0";
93 $arFilter["bGetVoters"] = intval($val === "Y" ? $USER->GetID() : $val);
94 break;
95 case "BGETEVENTRESULTS":
96 $arFilter["bGetEventResults"] = intval($arFilter["bGetEventResults"]);
97 if ($arFilter["bGetEventResults"] > 0)
98 $arSqlSelect[] = "MAX(CASE WHEN VE.ID=".$arFilter["bGetEventResults"]." THEN VEA.ANSWER_ID ELSE NULL END) AS RESTORED_ANSWER_ID";
99 break;
100 }
101 }
102 if (!empty($arSqlSearch))
103 $strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
104 if (!empty($arSqlSelect))
105 $strSqlSelect = ", ".implode(", ", $arSqlSelect);
106 if (!empty($arSqlGroup))
107 $strSqlGroup = ", ".implode(", ", $arSqlGroup);
108
109 $strSql =
110 "SELECT VEQ.QUESTION_ID, VEA.ANSWER_ID, COUNT(VEA.ID) as COUNTER, ".
111 "MIN(EXTRACT(SECOND FROM NOW() - VE.DATE_VOTE)) AS LAST_VOTE".$strSqlSelect.
112 " FROM b_vote_event VE ".
113 " INNER JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID = VE.ID) ".
114 " INNER JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID = VEQ.ID) ".
115 " LEFT JOIN b_vote_user VU ON (VU.ID = VE.VOTE_USER_ID)".
116 " WHERE 1=1 ".$strSqlSearch.
117 " GROUP BY VEQ.QUESTION_ID, VEA.ANSWER_ID".$strSqlGroup.
118 " ORDER BY COUNTER DESC";
119 if (isset($arFilter["bGetVoters"]))
120 {
121 $strSql = "SELECT COUNT(VEG.COUNTER) AS CNT FROM (".
122 "SELECT 'x' AS COUNTER ".
123 " FROM b_vote_event VE ".
124 " INNER JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID = VE.ID) ".
125 " INNER JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID = VEQ.ID) ".
126 " LEFT JOIN b_vote_user VU ON (VU.ID = VE.VOTE_USER_ID)".
127 " WHERE 1=1 ".$strSqlSearch.
128 " GROUP BY VEQ.QUESTION_ID, VEA.ANSWER_ID, VU.AUTH_USER_ID".$strSqlGroup.") VEG";
129 $db_res = $DB->Query($strSql);
130 if ($db_res && ($res = $db_res->Fetch()))
131 {
132 $strSql = "SELECT VEQ.QUESTION_ID, VEA.ANSWER_ID, VU.AUTH_USER_ID, COUNT(DISTINCT VEA.ID) as COUNTER, \n\t".
133 "MIN(EXTRACT(SECOND FROM NOW() - VE.DATE_VOTE)) AS LAST_VOTE, \n\t".
134 ($arFilter["bGetVoters"] > 0 ?
135 "SUM(case when RV0.ID is not null then 1 else 0 end) " . $DB->quote('RANK') : "0 as " . $DB->quote('RANK')).$strSqlSelect."\n".
136 "FROM b_vote_event VE \n\t".
137 "INNER JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID = VE.ID) \n\t".
138 "INNER JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID = VEQ.ID) \n\t".
139 "LEFT JOIN b_vote_user VU ON (VU.ID = VE.VOTE_USER_ID)\n\t".
140 "LEFT JOIN b_rating_user RV ON (RV.ENTITY_ID = VU.AUTH_USER_ID AND RV.RATING_ID = ".intval(CRatings::GetAuthorityRating()).")\n".
141 ($arFilter["bGetVoters"] > 0 ?
142 "\tLEFT JOIN b_rating_vote RV0 ON (RV0.USER_ID = ".$arFilter["bGetVoters"]." AND RV0.OWNER_ID = VU.AUTH_USER_ID) \n" : "").
143 " WHERE 1=1 ".$strSqlSearch."\n".
144 " GROUP BY VEQ.QUESTION_ID, VEA.ANSWER_ID, VU.AUTH_USER_ID, RV.VOTE_WEIGHT".$strSqlGroup."\n".
145 " ORDER BY ".(IsModuleInstalled("intranet") ? "RV.VOTE_WEIGHT DESC, " . $DB->quote('RANK') . " DESC" : $DB->quote('RANK') . " DESC, RV.VOTE_WEIGHT DESC").", VU.AUTH_USER_ID ASC";
146 $db_res = new CDBResult();
147 $db_res->NavQuery($strSql, $res["CNT"], $arParams);
148 }
149 }
150 else
151 {
152 $db_res = $DB->Query($strSql);
153 }
154 return $db_res;
155 }
156}
$arParams
Определения access_dialog.php:21
$db_res
Определения options_user_settings.php:8
Определения event.php:11
static GetAuthorityRating()
Определения ratings.php:1475
Определения event.php:13
static GetUserAnswerStat($arSort=array(), $arFilter=array(), $arParams=array())
Определения event.php:14
$str
Определения commerceml2.php:63
</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
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
if(empty($signedUserToken)) $key
Определения quickway.php:257
$val
Определения options.php:1793
$arFilter
Определения user_search.php:106
VoteGetFilterOperation($key)
Определения channel.php:504