Exemplo n.º 1
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAdvType_all::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     if ($CHECK_RIGHTS == "Y") {
         $isAdmin = CAdvContract::IsAdmin();
         $isDemo = CAdvContract::IsDemo();
         $isManager = CAdvContract::IsManager();
         $isAdvertiser = CAdvContract::IsAdvertiser();
     } else {
         $isAdmin = true;
         $isDemo = true;
         $isManager = true;
         $isAdvertiser = true;
     }
     if ($isAdmin || $isDemo || $isManager || $isAdvertiser) {
         if (CAdvType::CheckFilter($arFilter)) {
             if (is_array($arFilter)) {
                 $filter_keys = array_keys($arFilter);
                 for ($i = 0, $n = count($filter_keys); $i < $n; $i++) {
                     $key = $filter_keys[$i];
                     $val = $arFilter[$filter_keys[$i]];
                     if (is_array($val)) {
                         if (count($val) <= 0) {
                             continue;
                         }
                     } else {
                         if (strlen($val) <= 0 || $val === "NOT_REF") {
                             continue;
                         }
                     }
                     $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false;
                     $key = strtoupper($key);
                     switch ($key) {
                         case "SID":
                             $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                             $arSqlSearch[] = GetFilterQuery("T.SID", $val, $match);
                             break;
                         case "DATE_MODIFY_1":
                             $arSqlSearch[] = "T.DATE_MODIFY>=" . $DB->CharToDateFunction($val, "SHORT");
                             break;
                         case "DATE_MODIFY_2":
                             $arSqlSearch[] = "T.DATE_MODIFY<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL");
                             break;
                         case "ACTIVE":
                             $arSqlSearch[] = $val == "Y" ? "T.ACTIVE='Y'" : "T.ACTIVE='N'";
                             break;
                         case "NAME":
                         case "DESCRIPTION":
                             $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                             $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                             break;
                     }
                 }
             }
         }
         if ($by == "s_sid") {
             $strSqlOrder = " ORDER BY T.SID ";
         } elseif ($by == "s_date_modify") {
             $strSqlOrder = " ORDER BY T.DATE_MODIFY ";
         } elseif ($by == "s_modified_by") {
             $strSqlOrder = " ORDER BY T.MODIFIED_BY ";
         } elseif ($by == "s_date_create") {
             $strSqlOrder = " ORDER BY T.DATE_CREATE ";
         } elseif ($by == "s_created_by") {
             $strSqlOrder = " ORDER BY T.CREATED_BY ";
         } elseif ($by == "s_active") {
             $strSqlOrder = " ORDER BY T.ACTIVE ";
         } elseif ($by == "s_name") {
             $strSqlOrder = " ORDER BY T.NAME ";
         } elseif ($by == "s_banners") {
             $strSqlOrder = " ORDER BY BANNER_COUNT ";
         } elseif ($by == "s_description") {
             $strSqlOrder = " ORDER BY T.DESCRIPTION ";
         } else {
             $strSqlOrder = " ORDER BY T.SORT ";
             $by = "s_sort";
         }
         if ($order != "desc") {
             $strSqlOrder .= " asc ";
             $order = "asc";
         } else {
             $strSqlOrder .= " desc ";
             $order = "desc";
         }
         $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
         $strContracts = "";
         if (!$isAdmin && !$isDemo && !$isManager) {
             $strContracts = "0";
             $arPermissions = CAdvContract::GetUserPermissions();
             foreach ($arPermissions as $contract_id => $arContractPerms) {
                 if (is_array($arContractPerms) && !empty($arContractPerms)) {
                     $strContracts .= "," . $contract_id;
                 }
             }
         }
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tT.SID,\n\t\t\t\t\tT.ACTIVE,\n\t\t\t\t\tT.SORT,\n\t\t\t\t\tT.NAME,\n\t\t\t\t\tT.DESCRIPTION,\n\t\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE") . "\tDATE_CREATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("T.DATE_MODIFY") . "\tDATE_MODIFY,\n\t\t\t\t\tT.CREATED_BY,\n\t\t\t\t\tT.MODIFIED_BY,\n\t\t\t\t\tcount(distinct B.ID)\t\t\t\t\t\t\tBANNER_COUNT\n\t\t\t\tFROM\n\t\t\t\t\tb_adv_type T\n\t\t\t\t\tLEFT JOIN b_adv_banner B ON (B.TYPE_SID=T.SID" . ($strContracts == "" ? "" : " AND B.CONTRACT_ID IN (" . $strContracts . ")") . ")\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch} " . ($strContracts == "" ? "" : "and exists(select 'x' from b_adv_contract_2_type CT where (CT.TYPE_SID=T.SID OR CT.TYPE_SID='ALL') AND CT.CONTRACT_ID IN (" . $strContracts . ")) ") . " and T.SID<>'ALL'\n\t\t\t\tGROUP BY\n\t\t\t\t\tT.SID, T.ACTIVE, T.SORT, T.NAME, T.DESCRIPTION,\tT.DATE_CREATE, T.DATE_MODIFY, T.CREATED_BY, T.MODIFIED_BY\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t";
         $res = $DB->Query($strSql, false, $err_mess . __LINE__);
         $is_filtered = IsFiltered($strSqlSearch);
         return $res;
     }
     return null;
 }
Exemplo n.º 2
0
<?php

##############################################
# Bitrix: SiteManager                        #
# Copyright (c) 2002-2006 Bitrix             #
# http://www.bitrixsoft.com                  #
# mailto:admin@bitrixsoft.com                #
##############################################
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php";
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/advertising/prolog.php";
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/advertising/include.php";
$isDemo = CAdvContract::IsDemo();
$isManager = CAdvContract::IsManager();
$isAdvertiser = CAdvContract::IsAdvertiser();
$isAdmin = CAdvContract::IsAdmin();
if (!$isAdmin && !$isDemo && !$isManager && !$isAdvertiser) {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
//$DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
IncludeModuleLangFile(__FILE__);
$sTableID = "tbl_adv_banner_list";
// инициализация сортировки
$oSort = new CAdminSorting($sTableID, "s_id", "desc");
// инициализация списка
$lAdmin = new CAdminList($sTableID, $oSort);
/***************************************************************************
						Обработка GET | POST
****************************************************************************/
// массив доступов по всем контрактам для текущего пользователя
$arrPERM = CAdvContract::GetUserPermissions();
$FilterArr = array("find", "find_type_f", "find_id", "find_id_exact_match", "find_lamp", "find_site", "find_visitor_count_1", "find_visitor_count_2", "find_show_count_1", "find_show_count_2", "find_click_count_1", "find_click_count_2", "find_ctr_1", "find_ctr_2", "find_contract_id", "find_contract", "find_contract_exact_match", "find_group", "find_group_exact_match", "find_status_sid", "find_type_sid", "find_type", "find_type_exact_match", "find_name", "find_name_exact_match", "find_code", "find_code_exact_match", "find_comments", "find_comments_exact_match");
Exemplo n.º 3
0
 /**
  * <p>Функция предназначена для получения списка баннеров.</p>
  *
  *
  *
  *
  * @param varchar &$by  Идентификатор позволяющий задать имя поля для сортировки.
  * Допустимы следующие значения: <ul> <li>s_id - по ID </li> <li>s_lamp - по
  * индикатору </li> <li>s_name - по имени баннера </li> <li>s_type_sid - по типу
  * баннера </li> <li>s_contract_id - по ID контракта </li> <li>s_group_sid - по имени группы
  * </li> <li>s_show_count - по количеству показов </li> <li>s_max_show_count - по
  * максимальному количеству показов </li> <li>s_date_last_show - по дате
  * последнего показа </li> <li>s_click_count - по количеству кликов на баннер
  * </li> <li>s_max_click_count - по максимальному количеству кликов </li>
  * <li>s_date_last_click - по дате последнего клика </li> <li>s_active - по флагу
  * активности </li> <li>s_weight - по весу баннера </li> <li>s_status_sid - по статусу
  * баннера </li> <li>s_date_show_from - по дате начала показов </li> <li>s_date_show_to - по
  * дате окончания показов </li> <li>s_ctr - по CTR баннера</li> </ul>
  *
  *
  *
  * @param varchar &$order  Порядок сортировки. Допустимы следующие значения: <ul> <li>desc - по
  * убыванию (значение по умолчанию) </li> <li>asc - по возрастанию</li> </ul>
  *
  *
  *
  * @param array $arFilter = array() Массив для фильтрации значений. Необязательный параметр. В
  * массиве допустимы следующие индексы: <ul> <li>ID - ID баннера
  * (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>)
  * </li> <li>ID_EXACT_MATCH - "Y" - при фильтрации по ID баннера будет искаться
  * точное совпадение (по умолчанию); "N" - в противном случае будет
  * искаться вхождение </li> <li>ACTIVE - активность, значения Y/N</li> <li>LAMP -
  * значение индикатора: "red", "green" </li> <li>LANG - двухсимвольный
  * идентификатор языковой части сайта в которой будет показываться
  * баннер </li> <li>SHOW_COUNT_1 - левая часть интервала для числа показов </li>
  * <li>SHOW_COUNT_2 - правая часть интервала для числа показов </li> <li>CLICK_COUNT_1 -
  * левая часть интервала для числа кликов </li> <li>CLICK_COUNT_2 - правая
  * часть интервала для числа кликов </li> <li>CTR_1 - левая часть интервала
  * для CTR баннера </li> <li>CTR_2 - правая часть интервала для CTR баннера </li>
  * <li>GROUP - имя группы баннера (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li> <li>GROUP_EXACT_MATCH
  * - "Y" - при фильтрации по имени группы будет искаться точное
  * совпадение; "N" - в противном случае будет искаться вхождение (по
  * умолчанию) </li> <li>STATUS_SID - символьный код статуса (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>); символьный
  * код статуса может принимать следующие значения: <ul> <li>PUBLISHED -
  * баннер подтвержден и опубликован</li> <li>READY - баннер на
  * рассмотрении</li> <li>REJECTED - баннер отклонен</li> </ul> </li> <li>CONTRACT_ID - ID
  * контракта (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная
  * логика</a>) </li> <li>CONTRACT_ID_EXACT_MATCH - "Y" - при фильтрации по ID контракта
  * будет искаться точное совпадение (по умолчанию); "N" - в противном
  * случае будет искаться вхождение </li> <li>CONTRACT - ID, имя, описание
  * контракта (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная
  * логика</a>) </li> <li>CONTRACT_EXACT_MATCH - "Y" - при фильтрации по ID, имени,
  * описанию контракта будет искаться точное совпадение; "N" - в
  * противном случае будет искаться вхождение (по умолчанию) </li>
  * <li>TYPE_SID - символьный код типа баннера (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li>
  * <li>TYPE_SID_EXACT_MATCH - "Y" - при фильтрации по символьному коду типа
  * баннера будет искаться точное совпадение (по умолчанию); "N" - в
  * противном случае будет искаться вхождение </li> <li>NAME - имя баннера
  * (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>)
  * </li> <li>NAME_EXACT_MATCH - "Y" - при фильтрации по имени баннера будет
  * искаться точное совпадение; "N" - в противном случае будет искаться
  * вхождение (по умолчанию) </li> <li>CODE - код баннера (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li> <li>CODE_EXACT_MATCH
  * - "Y" - при фильтрации по коду баннера будет искаться точное
  * совпадение; "N" - в противном случае будет искаться вхождение (по
  * умолчанию) </li> <li>COMMENTS - комментарий к баннеру (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li>
  * <li>COMMENTS_EXACT_MATCH - "Y" - при фильтрации по комментарию к баннеру будет
  * искаться точное совпадение; "N" - в противном случае будет искаться
  * вхождение (по умолчанию) </li> <li>SITE - для фильтрации по сайтам.</li> </ul>
  *
  *
  *
  * @param boolean &$is_filtered  Переменная возвращающая true в том случае если список баннеров
  * отфильтрован по какому либо критерию; либо false в противном случае.
  *
  *
  *
  * @param char(1) $CHECK_RIGHTS = "Y" Параметр проверяет уровень доступа к модулю Реклама
  * (администратор рекламы, рекламодатель и т.д.). Если параметр
  * определён как "N", то считается, что текущий пользователь обладает
  * административными правами доступа к модулю Реклама. Если
  * параметр пропущен либо равен "Y", то функция проверяет уровень
  * доступа к модулю. Необязательный параметр.
  *
  *
  *
  * @return record 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $FilterArr = Array(
  * 	"find_id",
  * 	"find_id_exact_match",
  * 	"find_lamp",
  * 	"find_lang",
  * 	"find_show_count_1",
  * 	"find_show_count_2",
  * 	"find_click_count_1",
  * 	"find_click_count_2",
  * 	"find_ctr_1",
  * 	"find_ctr_2",
  * 	"find_contract_id",
  * 	"find_contract",
  * 	"find_contract_exact_match",
  * 	"find_group",
  * 	"find_group_exact_match",
  * 	"find_status_sid",
  * 	"find_type_sid",
  * 	"find_type",
  * 	"find_type_exact_match",
  * 	"find_name",
  * 	"find_name_exact_match",
  * 	"find_code",
  * 	"find_code_exact_match",
  * 	"find_comments",
  * 	"find_comments_exact_match"
  * 	);
  * if (strlen($set_filter)&gt;0) InitFilterEx($FilterArr,"ADV_BANNER_LIST","set"); 
  * else InitFilterEx($FilterArr,"ADV_BANNER_LIST","get");
  * if (strlen($del_filter)&gt;0) DelFilterEx($FilterArr,"ADV_BANNER_LIST");
  * InitBVar($find_id_exact_match);
  * InitBVar($find_status_exact_match);
  * InitBVar($find_group_exact_match);
  * InitBVar($find_contract_exact_match);
  * InitBVar($find_type_exact_match);
  * InitBVar($find_name_exact_match);
  * InitBVar($find_code_exact_match);
  * InitBVar($find_comments_exact_match);
  * $arFilter = Array(
  * 	"ID"					=&gt; $find_id,
  * 	"ID_EXACT_MATCH"		=&gt; $find_id_exact_match,
  * 	"LAMP"				  =&gt; $find_lamp,
  * 	"LANG"				  =&gt; $find_lang,
  * 	"SHOW_COUNT_1"		  =&gt; $find_show_count_1,
  * 	"SHOW_COUNT_2"		  =&gt; $find_show_count_2,
  * 	"CLICK_COUNT_1"		 =&gt; $find_click_count_1,
  * 	"CLICK_COUNT_2"		 =&gt; $find_click_count_2,
  * 	"CTR_1"				 =&gt; $find_ctr_1,
  * 	"CTR_2"				 =&gt; $find_ctr_2,
  * 	"GROUP"				 =&gt; $find_group,
  * 	"GROUP_EXACT_MATCH"	 =&gt; $find_group_exact_match,
  * 	"STATUS_SID"			=&gt; $find_status_sid,
  * 	"CONTRACT_ID"		   =&gt; $find_contract_id,
  * 	"CONTRACT"			  =&gt; $find_contract,
  * 	"CONTRACT_EXACT_MATCH"  =&gt; $find_contract_exact_match,
  * 	"TYPE_SID"			  =&gt; $find_type_sid,
  * 	"TYPE"				  =&gt; $find_type,
  * 	"TYPE_EXACT_MATCH"	  =&gt; $find_type_exact_match,
  * 	"NAME"				  =&gt; $find_name,
  * 	"NAME_EXACT_MATCH"	  =&gt; $find_name_exact_match,
  * 	"CODE"				  =&gt; $find_code,
  * 	"CODE_EXACT_MATCH"	  =&gt; $find_code_exact_match,
  * 	"COMMENTS"			  =&gt; $find_comments,
  * 	"COMMENTS_EXACT_MATCH"  =&gt; $find_comments_exact_match
  * 	);
  * $rsBanners = <b>CAdvBanner::GetList</b>($by, $order, $arFilter, $is_filtered, "N");
  * $rsBanners-&gt;NavStart(20);
  * $rsBanners-&gt;NavPrint("Баннеры");
  * while($arBanner = $rsBanners-&gt;NavNext(true, "f_"))
  * {
  * 	echo "&lt;pre&gt;"; print_r($arBanner); echo "&lt;/pre&gt;";
  * }
  * ?&gt;
  * </bo
  * &lt;?
  * Array
  * (
  * 	[LAMP] =&gt; green
  * 	[ID] =&gt; 88
  * 	[CONTRACT_ID] =&gt; 1
  * 	[TYPE_SID] =&gt; TOP
  * 	[GROUP_SID] =&gt; 
  * 	[STATUS_SID] =&gt; PUBLISHED
  * 	[STATUS_COMMENTS] =&gt;
  * 	[NAME] =&gt;
  * 	[ACTIVE] =&gt; Y
  * 	[LID] =&gt; 
  * 	[WEIGHT] =&gt; 100
  * 	[MAX_SHOW_COUNT] =&gt; 300
  * 	[MAX_CLICK_COUNT] =&gt; 100
  * 	[SHOW_COUNT] =&gt; 102
  * 	[CLICK_COUNT] =&gt; 4
  * 	[IMAGE_ID] =&gt; 1032
  * 	[IMAGE_ALT] =&gt;
  * 	[URL] =&gt; http://www.1c-bitrix.ru?banner_param=<code>#EVENT_GID#</code>
  * 	[URL_TARGET] =&gt; _parent
  * 	[CODE] =&gt; &lt;TABLE class=smalltext cellSpacing=0 cellPadding=0 width=145&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD&gt;
  * &lt;DIV align=center&gt;
  * &lt;A class=righthead href="/ru/partners/partnership.php"&gt;Партнёрская программа&lt;/A&gt;
  * &lt;/DIV&gt;
  * &lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD height=8&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD width=5&gt;&lt;/TD&gt;
  * &lt;TD vAlign=bottom&gt;
  * &lt;DIV align=center&gt;
  * &lt;A href="/ru/partners/partnership.php"&gt;
  * &lt;IMG height=95 src="/images/advert/free.gif" width=100 border=0&gt;&lt;/A&gt;
  * &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD height=5&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD&gt;Разработчики сайтов и интеграторы получают:&lt;BR&gt;
  * &lt;B&gt;&lt;FONT class=smalltext&gt;
  * &lt;IMG height=8 src="/images/list_bullet.gif" width=8&gt;
  * &lt;/FONT&gt;&lt;/B&gt; 
  * &lt;FONT color=#ff5a31&gt;скидки до 50%&lt;/FONT&gt; &lt;BR&gt;
  * &lt;B&gt;&lt;FONT class=smalltext&gt;
  * &lt;IMG height=8 src="/images/list_bullet.gif" width=8&gt;
  * &lt;/FONT&gt;&lt;/B&gt; 
  * &lt;FONT color=#ff5a31&gt;бесплатную копиию&lt;/FONT&gt;
  * &lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD height=5&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD&gt;
  * &lt;DIV align=right&gt;
  * &lt;A class=bottomlinks href="/ru/partners/partnership.php"&gt;Подробнее&lt;/A&gt;
  * &lt;IMG height=7 src="/images/main_button_more_3.gif" width=7&gt;
  * &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
  * 	[CODE_TYPE] =&gt; html
  * 	[STAT_EVENT_1] =&gt; 
  * 	[STAT_EVENT_2] =&gt; 
  * 	[STAT_EVENT_3] =&gt; 
  * 	[FOR_NEW_GUEST] =&gt; 
  * 	[COMMENTS] =&gt; 
  * 	[CREATED_BY] =&gt; 2
  * 	[MODIFIED_BY] =&gt; 2
  * 	[CTR] =&gt; 3.92
  * 	[DATE_LAST_SHOW] =&gt; 24.06.2004 17:39:50
  * 	[DATE_LAST_CLICK] =&gt; 24.06.2004 14:47:53
  * 	[DATE_SHOW_FROM] =&gt; 10.06.2004
  * 	[DATE_SHOW_TO] =&gt; 07.07.2007
  * 	[DATE_CREATE] =&gt; 10.06.2004 11:25:59
  * 	[DATE_MODIFY] =&gt; 24.06.2004 14:33:56
  * 	[CONTRACT_NAME] =&gt; Default
  * 	[TYPE_NAME] =&gt; Top banner
  * )
  * ?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/advertising/classes/cadvbanner/getlist.php
  * @author Bitrix
  */
 public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAdvBanner::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB, $USER, $APPLICATION;
     if ($CHECK_RIGHTS == "Y") {
         $USER_ID = intval($USER->GetID());
         $isAdmin = CAdvContract::IsAdmin();
         $isDemo = CAdvContract::IsDemo();
         $isManager = CAdvContract::IsManager();
         $isAdvertiser = CAdvContract::IsAdvertiser();
     } else {
         if (is_object($USER)) {
             $USER_ID = intval($USER->GetID());
         } else {
             $USER_ID = 0;
         }
         $isAdmin = true;
         $isDemo = true;
         $isManager = true;
         $isAdvertiser = true;
     }
     $arSqlSearch = array();
     $strSqlSearch = "";
     $DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
     if ($DONT_USE_CONTRACT == "Y") {
         $lamp = "\n\t\t\t\tif ((\n\t\t\t\t\t(B.DATE_SHOW_FROM<=now() or B.DATE_SHOW_FROM is null or length(B.DATE_SHOW_FROM)<=0) and\n\t\t\t\t\t(B.DATE_SHOW_TO>=now() or B.DATE_SHOW_TO is null or length(B.DATE_SHOW_TO)<=0) and\n\t\t\t\t\t(ifnull(B.MAX_SHOW_COUNT,0)>ifnull(B.SHOW_COUNT,0) or ifnull(B.MAX_SHOW_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_CLICK_COUNT,0)>ifnull(B.CLICK_COUNT,0) or ifnull(B.MAX_CLICK_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_VISITOR_COUNT,0)>ifnull(B.VISITOR_COUNT,0) or ifnull(B.MAX_VISITOR_COUNT,0)=0) and\n\t\t\t\t\t(B.ACTIVE='Y') and\n\t\t\t\t\t(B.STATUS_SID='PUBLISHED') and\n\t\t\t\t\t(T.ACTIVE='Y')\n\t\t\t\t\t),\n\t\t\t\t\t'green',\n\t\t\t\t\t'red')\n\t\t\t\t";
     } else {
         $lamp = "\n\t\t\t\tif ((\n\t\t\t\t\t(B.DATE_SHOW_FROM<=now() or B.DATE_SHOW_FROM is null or length(B.DATE_SHOW_FROM)<=0) and\n\t\t\t\t\t(B.DATE_SHOW_TO>=now() or B.DATE_SHOW_TO is null or length(B.DATE_SHOW_TO)<=0) and\n\t\t\t\t\t(ifnull(B.MAX_SHOW_COUNT,0)>ifnull(B.SHOW_COUNT,0) or ifnull(B.MAX_SHOW_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_CLICK_COUNT,0)>ifnull(B.CLICK_COUNT,0) or ifnull(B.MAX_CLICK_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_VISITOR_COUNT,0)>ifnull(B.VISITOR_COUNT,0) or ifnull(B.MAX_VISITOR_COUNT,0)=0) and\n\t\t\t\t\t(B.ACTIVE='Y') and\n\t\t\t\t\t(B.STATUS_SID='PUBLISHED') and\n\t\t\t\t\t(T.ACTIVE='Y') and\n\t\t\t\t\t(C.DATE_SHOW_FROM<=now() or C.DATE_SHOW_FROM is null or length(C.DATE_SHOW_FROM)<=0) and\n\t\t\t\t\t(C.DATE_SHOW_TO>=now() or C.DATE_SHOW_TO is null or length(C.DATE_SHOW_TO)<=0) and\n\t\t\t\t\t(ifnull(C.MAX_SHOW_COUNT,0)>ifnull(C.SHOW_COUNT,0) or ifnull(C.MAX_SHOW_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(C.MAX_CLICK_COUNT,0)>ifnull(C.CLICK_COUNT,0) or ifnull(C.MAX_CLICK_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(C.MAX_VISITOR_COUNT,0)>ifnull(C.VISITOR_COUNT,0) or ifnull(C.MAX_VISITOR_COUNT,0)=0) and\n\t\t\t\t\t(C.ACTIVE='Y')\n\t\t\t\t\t),\n\t\t\t\t\t'green',\n\t\t\t\t\t'red')\n\t\t\t\t";
     }
     if (is_array($arFilter)) {
         $filter_keys = array_keys($arFilter);
         for ($i = 0, $n = count($filter_keys); $i < $n; $i++) {
             $key = $filter_keys[$i];
             $val = $arFilter[$filter_keys[$i]];
             if (is_array($val) && count($val) <= 0) {
                 continue;
             }
             if ($val == '' || $val == "NOT_REF") {
                 continue;
             }
             $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("B.ID", $val, $match);
                     break;
                 case "LAMP":
                     $arSqlSearch[] = " " . $lamp . " = '" . $DB->ForSQL($val) . "'";
                     break;
                 case "SITE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("BS.SITE_ID", $val, $match);
                     $left_join = "LEFT JOIN b_adv_banner_2_site BS ON (B.ID = BS.BANNER_ID)";
                     break;
                 case "DATE_MODIFY_1":
                     $arSqlSearch[] = "B.DATE_MODIFY>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_MODIFY_2":
                     $arSqlSearch[] = "B.DATE_MODIFY<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "DATE_CREATE_1":
                     $arSqlSearch[] = "B.DATE_CREATE>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_CREATE_2":
                     $arSqlSearch[] = "B.DATE_CREATE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "DATE_SHOW_FROM_1":
                     $arSqlSearch[] = "B.DATE_SHOW_FROM>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_SHOW_FROM_2":
                     $arSqlSearch[] = "B.DATE_SHOW_FROM<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "DATE_SHOW_TO_1":
                     $arSqlSearch[] = "B.DATE_SHOW_TO>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_SHOW_TO_2":
                     $arSqlSearch[] = "B.DATE_SHOW_TO<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "ACTIVE":
                 case "FIX_SHOW":
                     $arSqlSearch[] = $val == "Y" ? "B." . $key . "='Y'" : "B." . $key . "='N'";
                     break;
                 case "WEIGHT_1":
                     $arSqlSearch[] = "ifnull(B.WEIGHT,0)>='" . intval($val) . "'";
                     break;
                 case "WEIGHT_2":
                     $arSqlSearch[] = "ifnull(B.WEIGHT,0)<='" . intval($val) . "'";
                     break;
                 case "MAX_VISITOR_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.MAX_VISITOR_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "MAX_VISITOR_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.MAX_VISITOR_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "VISITOR_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.VISITOR_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "VISITOR_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.VISITOR_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "MAX_SHOW_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.MAX_SHOW_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "MAX_SHOW_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.MAX_SHOW_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "SHOW_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.SHOW_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "SHOW_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.SHOW_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "MAX_CLICK_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.MAX_CLICK_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "MAX_CLICK_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.MAX_CLICK_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "CLICK_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.CLICK_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "CLICK_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.CLICK_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "CTR_1":
                     $arSqlSearch[] = "if(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))>='" . DoubleVal(str_replace(',', '.', $val)) . "'";
                     break;
                 case "CTR_2":
                     $arSqlSearch[] = "if(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))<='" . DoubleVal(str_replace(',', '.', $val)) . "'";
                     break;
                 case "GROUP":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B.GROUP_SID", $val, $match);
                     break;
                 case "STATUS":
                 case "STATUS_SID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $arSqlSearch[] = GetFilterQuery("B.STATUS_SID", $val, "N");
                     break;
                 case "CONTRACT_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("B.CONTRACT_ID", $val, $match);
                     break;
                 case "CONTRACT":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B.CONTRACT_ID, C.NAME, C.DESCRIPTION", $val, $match);
                     break;
                 case "TYPE_SID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("B.TYPE_SID", $val, $match);
                     break;
                 case "TYPE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B.TYPE_SID, T.NAME, T.DESCRIPTION", $val, $match);
                     break;
                 case "SHOW_USER_GROUP":
                     if ($val == "Y") {
                         $arSqlSearch[] = "B.SHOW_USER_GROUP='Y'";
                     } else {
                         $arSqlSearch[] = "B.SHOW_USER_GROUP <> 'Y'";
                     }
                     break;
                 case "NAME":
                 case "CODE":
                 case "COMMENTS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B." . $key, $val, $match);
                     break;
                     // совместимость со старой версией
                 // совместимость со старой версией
                 case "LANG":
                 case "FIRST_SITE_ID":
                     $arSqlSearch[] = GetFilterQuery("B.FIRST_SITE_ID", $val, "N");
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = " ORDER BY B.ID ";
     } elseif ($by == "s_lamp") {
         $strSqlOrder = " ORDER BY LAMP ";
     } elseif ($by == "s_name") {
         $strSqlOrder = " ORDER BY B.NAME ";
     } elseif ($by == "s_type_sid") {
         $strSqlOrder = " ORDER BY B.TYPE_SID ";
     } elseif ($by == "s_contract_id") {
         $strSqlOrder = " ORDER BY B.CONTRACT_ID ";
     } elseif ($by == "s_group_sid") {
         $strSqlOrder = " ORDER BY B.GROUP_SID ";
     } elseif ($by == "s_visitor_count") {
         $strSqlOrder = " ORDER BY B.VISITOR_COUNT ";
     } elseif ($by == "s_max_visitor_count") {
         $strSqlOrder = " ORDER BY ifnull(B.MAX_VISITOR_COUNT,0) ";
     } elseif ($by == "s_show_count") {
         $strSqlOrder = " ORDER BY B.SHOW_COUNT ";
     } elseif ($by == "s_max_show_count") {
         $strSqlOrder = " ORDER BY ifnull(B.MAX_SHOW_COUNT,0) ";
     } elseif ($by == "s_date_last_show") {
         $strSqlOrder = " ORDER BY B.DATE_LAST_SHOW ";
     } elseif ($by == "s_click_count") {
         $strSqlOrder = " ORDER BY B.CLICK_COUNT ";
     } elseif ($by == "s_max_click_count") {
         $strSqlOrder = " ORDER BY ifnull(B.MAX_CLICK_COUNT,0) ";
     } elseif ($by == "s_date_last_click") {
         $strSqlOrder = " ORDER BY B.DATE_LAST_CLICK ";
     } elseif ($by == "s_active") {
         $strSqlOrder = " ORDER BY B.ACTIVE ";
     } elseif ($by == "s_weight") {
         $strSqlOrder = " ORDER BY B.WEIGHT ";
     } elseif ($by == "s_status_sid") {
         $strSqlOrder = " ORDER BY B.STATUS_SID ";
     } elseif ($by == "s_date_show_from") {
         $strSqlOrder = " ORDER BY B.DATE_SHOW_FROM ";
     } elseif ($by == "s_date_show_to") {
         $strSqlOrder = " ORDER BY B.DATE_SHOW_TO ";
     } elseif ($by == "s_dropdown") {
         $strSqlOrder = " ORDER BY B.CONTRACT_ID desc, B.ID ";
     } elseif ($by == "s_ctr") {
         $strSqlOrder = " ORDER BY CTR ";
     } elseif ($by == "s_date_create") {
         $strSqlOrder = " ORDER BY B.DATE_CREATE ";
     } elseif ($by == "s_date_modify") {
         $strSqlOrder = " ORDER BY B.DATE_MODIFY ";
     } else {
         $strSqlOrder = " ORDER BY B.ID ";
         $by = "s_id";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     if ($isAdmin || $isDemo || $isManager) {
         $strSql = "\n\t\t\t\tSELECT DISTINCT\n\t\t\t\t\t{$lamp}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLAMP,\n\t\t\t\t\tB.*,\n\t\t\t\t\tB.FIRST_SITE_ID,\n\t\t\t\t\tB.FIRST_SITE_ID\t\t\t\t\t\t\t\t\t\t\t\t\t\tLID,\n\t\t\t\t\tif(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))\t\tCTR,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_SHOW") . "\t\t\t\t\t\tDATE_LAST_SHOW,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_CLICK") . "\t\t\t\t\tDATE_LAST_CLICK,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FROM") . "\t\t\tDATE_SHOW_FROM,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_TO") . "\t\t\t\tDATE_SHOW_TO,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FIRST") . "\t\t\tDATE_SHOW_FIRST,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_CREATE") . "\t\t\t\t\t\tDATE_CREATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_MODIFY") . "\t\t\t\t\t\tDATE_MODIFY,\n\t\t\t\t\tC.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCONTRACT_NAME,\n\t\t\t\t\tT.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTYPE_NAME\n\t\t\t\tFROM\n\t\t\t\t\tb_adv_banner B\n\t\t\t\tINNER JOIN b_adv_type T ON (T.SID = B.TYPE_SID)\n\t\t\t\tINNER JOIN b_adv_contract C ON (C.ID = B.CONTRACT_ID)\n\t\t\t\t{$left_join}\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t";
     } else {
         $strSql = "\n\t\t\t\tSELECT DISTINCT\n\t\t\t\t\t{$lamp}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLAMP,\n\t\t\t\t\tB.*,\n\t\t\t\t\tB.FIRST_SITE_ID,\n\t\t\t\t\tB.FIRST_SITE_ID\t\t\t\t\t\t\t\t\t\t\t\t\t\tLID,\n\t\t\t\t\tif(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))\t\tCTR,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_SHOW") . "\t\t\t\t\t\tDATE_LAST_SHOW,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_CLICK") . "\t\t\t\t\tDATE_LAST_CLICK,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FROM") . "\t\t\tDATE_SHOW_FROM,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_TO") . "\t\t\t\tDATE_SHOW_TO,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FIRST") . "\t\t\tDATE_SHOW_FIRST,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_CREATE") . "\t\t\t\t\t\tDATE_CREATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_MODIFY") . "\t\t\t\t\t\tDATE_MODIFY,\n\t\t\t\t\tC.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCONTRACT_NAME,\n\t\t\t\t\tT.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTYPE_NAME\n\t\t\t\tFROM\n\t\t\t\t\tb_adv_banner B\n\t\t\t\tINNER JOIN b_adv_type T ON (T.SID = B.TYPE_SID)\n\t\t\t\tINNER JOIN b_adv_contract C ON (C.ID = B.CONTRACT_ID)\n\t\t\t\tINNER JOIN b_adv_contract_2_user CU ON (CU.CONTRACT_ID=C.ID and CU.USER_ID={$USER_ID})\n\t\t\t\t{$left_join}\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t";
     }
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }