1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
tags.php
См. документацию.
1<?php
2
4{
5 public static function GetList($arSelect = [], $arFilter = [], $arOrder = [], $limit = 100)
6 {
7 $DB = CDatabase::GetModuleConnection('search');
8 static $arFilterEvents = false;
9
10 $arQuerySelect = [];
11 if (!is_array($arSelect))
12 {
13 $arSelect = [];
14 }
15 if (count($arSelect) < 1)
16 {
17 $arSelect = [
18 'NAME',
19 'CNT',
20 ];
21 }
22 $bJoinSearchContent = false;
23 foreach ($arSelect as $key => $value)
24 {
25 $value = mb_strtoupper($value);
26 switch ($value)
27 {
28 case 'NAME':
29 $arQuerySelect['NAME'] = 'stags.NAME';
30 break;
31 case 'CNT':
32 $arQuerySelect['CNT'] = 'COUNT(DISTINCT stags.SEARCH_CONTENT_ID) as CNT';
33 break;
34 case 'DATE_CHANGE':
35 $arQuerySelect['DC_TMP'] = 'MAX(sc.DATE_CHANGE) as DC_TMP';
36 $arQuerySelect['FULL_DATE_CHANGE'] = $DB->DateToCharFunction('MAX(sc.DATE_CHANGE)', 'FULL') . ' as FULL_DATE_CHANGE';
37 $arQuerySelect['DATE_CHANGE'] = $DB->DateToCharFunction('MAX(sc.DATE_CHANGE)', 'SHORT') . ' as DATE_CHANGE';
38 $bJoinSearchContent = true;
39 break;
40 }
41 }
42
43 $arQueryWhere = [];
44 if (!is_array($arFilter))
45 {
46 $arFilter = [
47 'TAG' => $arFilter,
48 'SITE_ID' => [SITE_ID],
49 ];
50 }
51 if (empty($arFilter['SITE_ID']) && array_key_exists('TAG', $arFilter))
52 {
53 $arFilter['SITE_ID'] = [SITE_ID];
54 }
55 if (array_key_exists('SITE_ID', $arFilter) && !is_array($arFilter['SITE_ID']))
56 {
57 $arFilter['SITE_ID'] = [$arFilter['SITE_ID']];
58 }
59
60 $strTag = '';
61 foreach ($arFilter as $key => $value)
62 {
63 $key = mb_strtoupper($key);
64 switch ($key)
65 {
66 case 'SITE_ID':
67 $arSites = [];
68 foreach ($value as $site_id)
69 {
70 $arSites[$DB->ForSql($site_id, 2)] = true;
71 }
72 $arSites = array_keys($arSites);
73 if (count($arSites) == 1)
74 {
75 $arQueryWhere[] = "stags.SITE_ID = '" . $arSites[0] . "'";
76 }
77 elseif (count($arSites) > 1)
78 {
79 $arQueryWhere[] = "stags.SITE_ID in ('" . implode("', '", $arSites) . "')";
80 }
81 break;
82 case 'TAG':
83 $arTags = tags_prepare($value, $arFilter['SITE_ID'][0]);
84 if (count($arTags) > 0)
85 {
86 $strTag = array_pop($arTags);
87 $arQueryWhere[] = "UPPER(stags.NAME) LIKE '" . $DB->ForSql(mb_strtoupper($strTag)) . "%'";
88 }
89 break;
90 case 'MODULE_ID':
91 case 'PARAM1':
92 case 'PARAM2':
93 $arQueryWhere[] = 'sc.' . $key . " ='" . $DB->ForSql($value) . "'";
94 $bJoinSearchContent = true;
95 break;
96 case 'PARAMS':
97 if (is_array($value))
98 {
99 foreach ($value as $p_key => $p_val)
100 {
101 if (is_array($p_val))
102 {
103 foreach ($p_val as $i => $val2)
104 {
105 $p_val[$i] = $DB->ForSQL($val2);
106 }
107 $p_where = " in ('" . implode("', '", $p_val) . "')";
108 }
109 else
110 {
111 $p_where = " = '" . $DB->ForSQL($p_val) . "'";
112 }
113 $arQueryWhere[] = "EXISTS (SELECT * FROM b_search_content_param WHERE SEARCH_CONTENT_ID = stags.SEARCH_CONTENT_ID AND PARAM_NAME = '" . $DB->ForSQL($p_key) . "' AND PARAM_VALUE " . $p_where . ')';
114 }
115 }
116 break;
117 default:
118 if (!is_array($arFilterEvents))
119 {
120 $arFilterEvents = GetModuleEvents('search', 'OnSearchPrepareFilter', true);
121 }
122 //Try to get someone to make the filter sql
123 foreach ($arFilterEvents as $arEvent)
124 {
125 $sql = ExecuteModuleEventEx($arEvent, ['sc.', $key, $value]);
126 if ($sql <> '')
127 {
128 $arQueryWhere[] = '(' . $sql . ')';
129 $bJoinSearchContent = true;
130 break;
131 }
132 }
133 }
134 }
135
136 $arQueryOrder = [];
137 if (!is_array($arOrder))
138 {
139 $arOrder = [];
140 }
141 if (count($arOrder) < 1)
142 {
143 $arOrder = [
144 'NAME' => 'ASC',
145 ];
146 }
147 foreach ($arOrder as $key => $value)
148 {
149 $key = mb_strtoupper($key);
150 $value = mb_strtoupper($value) == 'DESC' ? 'DESC' : 'ASC';
151 switch ($key)
152 {
153 case 'NAME':
154 case 'CNT':
155 $arQueryOrder[$key] = $key . ' ' . $value;
156 break;
157 case 'DATE_CHANGE':
158 $arQueryOrder[$key] = 'DC_TMP ' . $value;
159 $arQuerySelect['DC_TMP'] = 'MAX(sc.DATE_CHANGE) as DC_TMP';
160 $arQuerySelect['FULL_DATE_CHANGE'] = $DB->DateToCharFunction('MAX(sc.DATE_CHANGE)', 'FULL') . ' as FULL_DATE_CHANGE';
161 $arQuerySelect['DATE_CHANGE'] = $DB->DateToCharFunction('MAX(sc.DATE_CHANGE)', 'SHORT') . ' as DATE_CHANGE';
162 $bJoinSearchContent = true;
163 break;
164 }
165 }
166 if (count($arQueryOrder) < 1)
167 {
168 $arQueryOrder = [
169 'NAME' => 'NAME ASC',
170 ];
171 }
172
173 $strSql = '
174 SELECT
175 ' . implode("\n,", $arQuerySelect) . '
176 FROM b_search_tags stags
177 ' . ($bJoinSearchContent ? 'INNER JOIN b_search_content sc ON sc.ID = stags.SEARCH_CONTENT_ID' : '') . '
178 WHERE
179 ' . CSearch::CheckPermissions('stags.SEARCH_CONTENT_ID') . '
180 ' . (count($arQueryWhere) > 0 ? 'AND ' . implode("\nAND ", $arQueryWhere) : '') . '
181 GROUP BY stags.NAME
182 ORDER BY ' . implode(', ', $arQueryOrder) . '
183 ';
184
185 if ($limit !== false)
186 {
187 $limit = intval($limit);
188 if ($limit <= 0 || ($limit > COption::GetOptionInt('search', 'max_result_size')))
189 {
190 $limit = COption::GetOptionInt('search', 'max_result_size');
191 }
192 if ($limit < 1)
193 {
194 $limit = 100;
195 }
196
197 $strSql = $DB->TopSql($strSql, $limit);
198 }
199
200 if ((CACHED_b_search_tags !== false) && ($limit !== false) && (mb_strlen($strTag) <= CACHED_b_search_tags_len))
201 {
202 global $CACHE_MANAGER;
203 $path = 'b_search_tags';
204 while ($strTag <> '')
205 {
206 $path .= '/_' . ord(mb_substr($strTag, 0, 1));
207 $strTag = mb_substr($strTag, 1);
208 }
209 $cache_id = 'search_tags:' . md5($strSql);
210 if ($CACHE_MANAGER->Read(CACHED_b_search_tags, $cache_id, $path))
211 {
212 $arTags = $CACHE_MANAGER->Get($cache_id);
213 }
214 else
215 {
216 $arTags = [];
217 $res = $DB->Query($strSql);
218 while ($ar = $res->Fetch())
219 {
220 $arTags[] = $ar;
221 }
222 $CACHE_MANAGER->Set($cache_id, $arTags);
223 }
224 $res = new CDBResult;
225 $res->InitFromArray($arTags);
226 return $res;
227 }
228 else
229 {
230 return $DB->Query($strSql);
231 }
232 }
233
234 public static function CleanCache($arTags = '', $content_id = false)
235 {
236 if (CACHED_b_search_tags !== false)
237 {
238 if ($content_id !== false)
239 {
240 $DB = CDatabase::GetModuleConnection('search');
241 $rs = $DB->Query('SELECT NAME FROM b_search_tags WHERE SEARCH_CONTENT_ID = ' . intval($content_id));
242 $arTags = [];
243 while ($ar = $rs->Fetch())
244 {
245 if ($ar['NAME'])
246 {
247 $arTags[] = $ar['NAME'];
248 }
249 }
251 }
252 else
253 {
254 if (!is_array($arTags))
255 {
256 $arTags = [$arTags];
257 }
258 $arPath = [];
259 foreach ($arTags as $tag)
260 {
261 if ($tag <> '')
262 {
263 $path = 'b_search_tags/_' . ord(mb_substr($tag, 0, 1));
264 }
265 else
266 {
267 $path = 'b_search_tags';
268 }
269 $arPath[$path] = true;
270 }
271 global $CACHE_MANAGER;
272 foreach ($arPath as $path => $value)
273 {
274 $CACHE_MANAGER->CleanDir($path);
275 }
276 }
277 }
278 }
279}
$path
Определения access_edit.php:21
$arSites
Определения options.php:15
static CheckPermissions($FIELD='sc.ID')
Определения search.php:2660
Определения tags.php:4
static GetList($arSelect=[], $arFilter=[], $arOrder=[], $limit=100)
Определения tags.php:5
static CleanCache($arTags='', $content_id=false)
Определения tags.php:234
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$arPath
Определения file_edit.php:72
$res
Определения filter_act.php:7
global $DB
Определения cron_frame.php:29
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</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
tags_prepare($sText, $site_id=false)
Определения tags.php:4
$site_id
Определения sonet_set_content_view.php:9
const SITE_ID
Определения sonet_set_content_view.php:12
$rs
Определения action.php:82
$arFilter
Определения user_search.php:106