Ejemplo n.º 1
0
function CheckFilter()
{
    global $FilterArr, $lAdmin, $statDB;
    foreach ($FilterArr as $f) {
        global ${$f};
    }
    $arr = array();
    $arr[] = array("date1" => $find_date_enter_1, "date2" => $find_date_enter_2, "mess1" => GetMessage("STAT_WRONG_FIRST_DATE_FROM"), "mess2" => GetMessage("STAT_WRONG_FIRST_DATE_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_FIRST_DATE"));
    $arr[] = array("date1" => $find_date_last_1, "date2" => $find_date_last_2, "mess1" => GetMessage("STAT_WRONG_LAST_DATE_FROM"), "mess2" => GetMessage("STAT_WRONG_LAST_DATE_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_LAST_DATE"));
    $arr[] = array("date1" => $find_date1_period, "date2" => $find_date2_period, "mess1" => GetMessage("STAT_WRONG_PERIOD_DATE_FROM"), "mess2" => GetMessage("STAT_WRONG_PERIOD_DATE_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_PERIOD_DATE"));
    foreach ($arr as $ar) {
        if (strlen($ar["date1"]) > 0 && !CheckDateTime($ar["date1"])) {
            $lAdmin->AddFilterError($ar["mess1"]);
        }
        if (strlen($ar["date2"]) > 0 && !CheckDateTime($ar["date2"])) {
            $lAdmin->AddFilterError($ar["mess2"]);
        }
        if (strlen($ar["date1"]) > 0 && strlen($ar["date2"]) > 0 && $statDB->CompareDates($ar["date1"], $ar["date2"]) == 1) {
            $lAdmin->AddFilterError($ar["mess3"]);
        }
    }
    // sessions
    if (intval($find_counter1) > intval($find_counter2)) {
        $lAdmin->AddFilterError(GetMessage("STAT_COUNTER1_COUNTER2"));
    }
    // statistics keep days
    if (intval($find_keep_days1) > intval($find_keep_days2)) {
        $lAdmin->AddFilterError(GetMessage("STAT_DAYS1_DAYS2"));
    }
    // dynamics keep days
    if (intval($find_dynamic_keep_days1) > intval($find_dynamic_keep_days2)) {
        $lAdmin->AddFilterError(GetMessage("STAT_DYNAMIC_DAYS1_DAYS2"));
    }
    return count($lAdmin->arFilterErrors) == 0;
}
Ejemplo n.º 2
0
function CheckFilter()
{
    global $strError, $arFilterFields, $statDB;
    foreach ($arFilterFields as $f) {
        global ${$f};
    }
    $str = "";
    $arMsg = array();
    $arr = array();
    $arr[] = array("date1" => $find_date1, "date2" => $find_date2, "mess1" => GetMessage("STAT_WRONG_DATE_FROM"), "mess2" => GetMessage("STAT_WRONG_DATE_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_DATE"));
    $arr[] = array("date1" => $find_date_end1, "date2" => $find_date_end2, "mess1" => GetMessage("STAT_WRONG_DATE_END_FROM"), "mess2" => GetMessage("STAT_WRONG_DATE_END_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_DATE_END"));
    foreach ($arr as $ar) {
        if (strlen($ar["date1"]) > 0 && !CheckDateTime($ar["date1"])) {
            $arMsg[] = array("id" => "find_date1", "text" => $ar["mess1"]);
        } elseif (strlen($ar["date2"]) > 0 && !CheckDateTime($ar["date2"])) {
            $arMsg[] = array("id" => "find_date2", "text" => $ar["mess2"]);
        } elseif (strlen($ar["date1"]) > 0 && strlen($ar["date2"]) > 0 && $statDB->CompareDates($ar["date1"], $ar["date2"]) == 1) {
            $arMsg[] = array("id" => "find_date2", "text" => $ar["mess3"]);
        }
    }
    // hits
    if (intval($find_hits1) > 0 and intval($find_hits2) > 0 and $find_hits1 > $find_hits2) {
        $arMsg[] = array("id" => "find_hits2", "text" => GetMessage("STAT_HITS1_HITS2"));
    }
    // events
    if (intval($find_events1) > 0 and intval($find_events2) > 0 and $find_events1 > $find_events2) {
        $arMsg[] = array("id" => "find_events2", "text" => GetMessage("STAT_EVENTS1_EVENTS2"));
    }
    if (!empty($arMsg)) {
        $e = new CAdminException($arMsg);
        $GLOBALS["APPLICATION"]->ThrowException($e);
        return false;
    }
    return true;
}
Ejemplo n.º 3
0
 public function validate($value, $primary, array $row, Entity\Field $field)
 {
     if (CheckDateTime($value, FORMAT_DATE)) {
         return true;
     }
     return $this->getErrorMessage($value, $field);
 }
Ejemplo n.º 4
0
function CheckFilter()
{
    global $strError, $arFilterFields, $statDB;
    foreach ($arFilterFields as $f) {
        global ${$f};
    }
    $str = "";
    $arr = array();
    $arr[] = array("date1" => $find_date1, "date2" => $find_date2, "mess1" => GetMessage("STAT_WRONG_DATE_FROM"), "mess2" => GetMessage("STAT_WRONG_DATE_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_DATE"));
    $arr[] = array("date1" => $find_date1_period, "date2" => $find_date2_period, "mess1" => GetMessage("STAT_WRONG_DATE_PERIOD_FROM"), "mess2" => GetMessage("STAT_WRONG_DATE_PERIOD_TILL"), "mess3" => GetMessage("STAT_FROM_TILL_DATE_PERIOD"));
    foreach ($arr as $ar) {
        if (strlen($ar["date1"]) > 0 && !CheckDateTime($ar["date1"])) {
            $str .= $ar["mess1"] . "<br>";
        } elseif (strlen($ar["date2"]) > 0 && !CheckDateTime($ar["date2"])) {
            $str .= $ar["mess2"] . "<br>";
        } elseif (strlen($ar["date1"]) > 0 && strlen($ar["date2"]) > 0 && $statDB->CompareDates($ar["date1"], $ar["date2"]) == 1) {
            $str .= $ar["mess3"] . "<br>";
        }
    }
    if (intval($find_hits1) > 0 && intval($find_hits2) > 0 && $find_hits1 > $find_hits2) {
        $str .= GetMessage("STAT_FROM_TILL_HITS") . "<br>";
    }
    $strError .= $str;
    if (strlen($str) > 0) {
        return false;
    } else {
        return true;
    }
}
Ejemplo n.º 5
0
 function CheckFields($ID, &$arFields)
 {
     $DB = CDatabase::GetModuleConnection('statistic');
     $aMsg = array();
     $arFields["TEST"] = "N";
     unset($arFields["ID"]);
     unset($arFields["TIMESTAMP_X"]);
     $arFields["~TIMESTAMP_X"] = $DB->GetNowFunction();
     if (strlen($arFields["SITE_ID"]) <= 0 || $arFields["SITE_ID"] == "NOT_REF") {
         $arFields["SITE_ID"] = false;
     }
     if ($arFields["ACTIVE"] != "N") {
         $arFields["ACTIVE"] = "Y";
     }
     if ($arFields["SAVE_STATISTIC"] != "Y") {
         $arFields["SAVE_STATISTIC"] = "N";
     }
     $arIPFields = array("IP_1", "IP_2", "IP_3", "IP_4", "MASK_1", "MASK_2", "MASK_3", "MASK_4");
     foreach ($arIPFields as $FIELD_ID) {
         if (strlen(trim($arFields[$FIELD_ID])) > 0) {
             $arFields[$FIELD_ID] = intval($arFields[$FIELD_ID]);
             if ($arFields[$FIELD_ID] < 0) {
                 $arFields[$FIELD_ID] = 0;
             } elseif ($arFields[$FIELD_ID] > 255) {
                 $arFields[$FIELD_ID] = 255;
             }
         } else {
             $arFields[$FIELD_ID] = false;
         }
     }
     if ($arFields["USER_AGENT_IS_NULL"] != "Y") {
         $arFields["USER_AGENT_IS_NULL"] = "N";
     }
     if (strlen($arFields["DATE_END"]) > 0 && !CheckDateTime($arFields["DATE_END"])) {
         $aMsg[] = array("id" => "DATE_END", "text" => GetMessage("STAT_WRONG_END_DATE"));
     }
     if (strlen($arFields["DATE_START"]) > 0 && !CheckDateTime($arFields["DATE_START"])) {
         $aMsg[] = array("id" => "DATE_START", "text" => GetMessage("STAT_WRONG_START_DATE"));
     }
     $arTestFields = $arFields;
     $arTestFields["TEST"] = "Y";
     $TEST_ID = $DB->Add("b_stop_list", $arTestFields);
     $TEST_ID = intval($TEST_ID);
     $TEST_STOP_ID = $this->Check("Y");
     $TEST_STOP_ID = intval($TEST_STOP_ID);
     if ($TEST_ID == $TEST_STOP_ID && $TEST_STOP_ID > 0 && $TEST_ID > 0) {
         $aMsg[] = array("id" => "WRONG_PARAMS", "text" => GetMessage("STAT_WRONG_STOPLIST_PARAMS"));
     }
     $DB->Query("DELETE FROM b_stop_list WHERE ID='" . $TEST_ID . "'");
     if (!empty($aMsg)) {
         $e = new CAdminException($aMsg);
         $GLOBALS["APPLICATION"]->ThrowException($e);
         return false;
     }
     return true;
 }
Ejemplo n.º 6
0
 public function validate($value, $primary, array $row, Entity\Field $field)
 {
     if ($value instanceof Type\DateTime) {
         // self-validating object
         return true;
     }
     if (\CheckDateTime($value, FORMAT_DATE)) {
         return true;
     }
     return $this->getErrorMessage($value, $field);
 }
Ejemplo n.º 7
0
function CheckFilterDates($date1, $date2, &$date1_wrong, &$date2_wrong, &$date2_less_date1)
{
	global $DB;
	$date1 = trim($date1);
	$date2 = trim($date2);
	$date1_wrong = "N";
	$date2_wrong = "N";
	$date2_less_date1 = "N";
	if (strlen($date1)>0 && !CheckDateTime($date1)) $date1_wrong = "Y";
	if (strlen($date2)>0 && !CheckDateTime($date2)) $date2_wrong = "Y";
	if ($date1_wrong!="Y" && $date2_wrong!="Y" && strlen($date1)>0 && strlen($date2)>0 && $DB->CompareDates($date2,$date1)<0) $date2_less_date1="Y";
}
Ejemplo n.º 8
0
function CheckFDate($date, $mess) // date check
{
	global $strError;
	if (strlen($date)>0)
	{
		$str = "";
		if (!CheckDateTime($date)) $str.= $mess."<br>";
		$strError .= $str;
		if (strlen($str)>0) return false;
	}
	return true;
}
Ejemplo n.º 9
0
function CheckFilter()
{
    $str = "";
    if (strlen($_REQUEST["find_timestamp_x_1"]) > 0) {
        if (!CheckDateTime($_REQUEST["find_timestamp_x_1"], CSite::GetDateFormat("FULL"))) {
            $str .= GetMessage("MAIN_EVENTLOG_WRONG_TIMESTAMP_X_FROM") . "<br>";
        }
    }
    if (strlen($_REQUEST["find_timestamp_x_2"]) > 0) {
        if (!CheckDateTime($_REQUEST["find_timestamp_x_2"], CSite::GetDateFormat("FULL"))) {
            $str .= GetMessage("MAIN_EVENTLOG_WRONG_TIMESTAMP_X_TO") . "<br>";
        }
    }
    if (strlen($str) > 0) {
        global $lAdmin;
        $lAdmin->AddFilterError($str);
        return false;
    }
    return true;
}
Ejemplo n.º 10
0
 /**
  * <p>Возвращает количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search_hit">хитов</a> (проиндексированных страниц), для указанной <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search">поисковой системы</a> в разрезе по дням.</p>
  *
  *
  * @param int $searcher_id  ID поисковой системы. </ht
  *
  * @param string &$by = "s_date" Поле для сортировки. Возможные значения: <ul><li> <b>s_date</b> - дата. </li></ul>
  *
  * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по
  * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul>
  *
  * @param array &$max_min  Ссылка на массив содержащий максимальную и минимальную даты
  * результирующего списка. Структура данного массива: <pre> Array (
  * [DATE_FIRST] =&gt; минимальная дата [MIN_DAY] =&gt; номер дня для минимальной
  * даты (1-31) [MIN_MONTH] =&gt; номер месяца для минимальной даты (1-12) [MIN_YEAR] =&gt;
  * номер года для минимальной даты [DATE_LAST] =&gt; максимальная дата [MAX_DAY]
  * =&gt; номер дня для максимальной даты (1-31) [MAX_MONTH] =&gt; номер месяца для
  * максимальной даты (1-12) [MAX_YEAR] =&gt; номер года для максимальной даты
  * )</pre>
  *
  * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве
  * допустимы следующие ключи: <ul> <li> <b>DATE1</b> - начальное значение
  * интервала для поля "дата"; </li> <li> <b>DATE2</b> - конечное значение
  * интервала для поля "дата". </li> </ul>
  *
  * @return CDBResult 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $searcher_id = 1;
  * 
  * // установим фильтр на декабрь 2005 года
  * $arFilter = array(
  *     "DATE1" =&gt; "01.12.2005",
  *     "DATE2" =&gt; "31.12.2005"
  *     );
  * 
  * // получим набор записей
  * $rs = <b>CSearcher::GetDynamicList</b>(
  *     $searcher_id, 
  *     ($by="s_date"), 
  *     ($order="desc"), 
  *     $arMaxMin, 
  *     $arFilter
  *     );
  * 
  * // выведем массив с максимальной и минимальной датами
  * echo "&lt;pre&gt;"; print_r($arMaxMin); echo "&lt;/pre&gt;";    
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul><li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search_hit">Термин "Хит
  * поисковой системы"</a> </li></ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/csearcher/getdynamiclist.php
  * @author Bitrix
  */
 public static function GetDynamicList($SEARCHER_ID, &$by, &$order, &$arMaxMin, $arFilter = array())
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $SEARCHER_ID = intval($SEARCHER_ID);
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $key = strtoupper($key);
             switch ($key) {
                 case "DATE1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_STAT>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_STAT<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
             }
         }
     }
     foreach ($arSqlSearch as $sqlWhere) {
         $strSqlSearch .= " and (" . $sqlWhere . ") ";
     }
     if ($by == "s_date") {
         $strSqlOrder = "ORDER BY D.DATE_STAT";
     } else {
         $by = "s_date";
         $strSqlOrder = "ORDER BY D.DATE_STAT";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\t" . $DB->DateToCharFunction("D.DATE_STAT", "SHORT") . "\t\tDATE_STAT,\n\t\t\t\tDAYOFMONTH(D.DATE_STAT)\t\t\t\t\t\t\t\t\tDAY,\n\t\t\t\tMONTH(D.DATE_STAT)\t\t\t\t\t\t\t\t\t\tMONTH,\n\t\t\t\tYEAR(D.DATE_STAT)\t\t\t\t\t\t\t\t\t\tYEAR,\n\t\t\t\tD.TOTAL_HITS\n\t\t\tFROM\n\t\t\t\tb_stat_searcher_day D\n\t\t\tWHERE\n\t\t\t\tD.SEARCHER_ID = {$SEARCHER_ID}\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tmax(D.DATE_STAT)\t\t\t\tDATE_LAST,\n\t\t\t\tmin(D.DATE_STAT)\t\t\t\tDATE_FIRST,\n\t\t\t\tDAYOFMONTH(max(D.DATE_STAT))\tMAX_DAY,\n\t\t\t\tMONTH(max(D.DATE_STAT))\t\t\tMAX_MONTH,\n\t\t\t\tYEAR(max(D.DATE_STAT))\t\t\tMAX_YEAR,\n\t\t\t\tDAYOFMONTH(min(D.DATE_STAT))\tMIN_DAY,\n\t\t\t\tMONTH(min(D.DATE_STAT))\t\t\tMIN_MONTH,\n\t\t\t\tYEAR(min(D.DATE_STAT))\t\t\tMIN_YEAR\n\t\t\tFROM\n\t\t\t\tb_stat_searcher_day D\n\t\t\tWHERE\n\t\t\t\tD.SEARCHER_ID = {$SEARCHER_ID}\n\t\t\t{$strSqlSearch}\n\t\t\t";
     $a = $DB->Query($strSql, false, $err_mess . __LINE__);
     $ar = $a->Fetch();
     $arMaxMin["MAX_DAY"] = $ar["MAX_DAY"];
     $arMaxMin["MAX_MONTH"] = $ar["MAX_MONTH"];
     $arMaxMin["MAX_YEAR"] = $ar["MAX_YEAR"];
     $arMaxMin["MIN_DAY"] = $ar["MIN_DAY"];
     $arMaxMin["MIN_MONTH"] = $ar["MIN_MONTH"];
     $arMaxMin["MIN_YEAR"] = $ar["MIN_YEAR"];
     return $res;
 }
Ejemplo n.º 11
0
	/**
	 * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>.</p>
	 *
	 *
	 *
	 *
	 * @param string &$by = "s_last_date" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID
	 * посетителя; </li> <li> <b>s_events</b> - суммарное кол-во <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event">событий</a> сгенерированных
	 * посетителем; </li> <li> <b>s_sessions</b> - суммарное кол-во <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессий</a> посетителя; </li> <li>
	 * <b>s_hits</b> - суммарное кол-во <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a> посетителя; </li> <li>
	 * <b>s_first_site_id</b> - ID сайта на который впервые пришел посетитель; </li> <li>
	 * <b>s_first_date</b> - время первого захода на сайт; </li> <li> <b>s_first_url_from</b> -
	 * страница с которой впервые пришел посетитель; </li> <li> <b>s_first_url_to</b> -
	 * страница куда впервые пришел посетитель; </li> <li> <b>s_first_adv_id</b> - ID <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv">рекламной кампании</a> первого
	 * захода; </li> <li> <b>s_last_site_id</b> - ID сайта последнего захода посетителя;
	 * </li> <li> <b>s_last_date</b> - время последнего захода поестителя; </li> <li>
	 * <b>s_last_user_id</b> - ID пользователя; </li> <li> <b>s_last_url_last</b> - последняя
	 * страница на которую заходил посетитель; </li> <li> <b>s_last_user_agent</b> - <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user_agent">UserAgent</a> посетителя на
	 * последнем заходе; </li> <li> <b>s_last_ip</b> - <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#ip">IP адрес</a> посетителя на
	 * последнем заходе; </li> <li> <b>s_last_adv_id</b> - ID рекламной кампании на
	 * последнем заходе; </li> <li> <b>s_last_country_id</b> - ID страны посетителя на
	 * последнем заходе. </li> </ul>
	 *
	 *
	 *
	 * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по
	 * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul>
	 *
	 *
	 *
	 * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве
	 * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID посетителя; </li> <li>
	 * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b>
	 * будет искаться вхождение; </li> <li> <b>REGISTERED</b> - был ли посетитель
	 * когда либо авторизован на сайте, возможные значения: <ul> <li> <b>Y</b> -
	 * был; </li> <li> <b>N</b> - не был. </li> </ul> </li> <li> <b>FIRST_DATE1</b> - начальное
	 * значение интервала для поля "дата первого захода на сайт"; </li> <li>
	 * <b>FIRST_DATE2</b> - конечное значение интервала для поля "дата первого
	 * захода на сайт"; </li> <li> <b>LAST_DATE1</b> - начальное значение интервала
	 * для поля "дата последнего захода на сайт"; </li> <li> <b>LAST_DATE2</b> -
	 * конечное значение интервала для поля "дата первого захода на
	 * сайт"; </li> <li> <b>PERIOD_DATE1</b> - начальное значение интервала для даты
	 * посещения посетителем сайта; </li> <li> <b>PERIOD_DATE2</b> - конечно значение
	 * интервала для даты посещения посетителем сайта; </li> <li> <b>SITE_ID</b>* - ID
	 * сайта первого либо последнего захода; </li> <li> <b>SITE_ID_EXACT_MATCH</b> - если
	 * значение равно "N", то при фильтрации по <b>SITE_ID</b> будет искаться
	 * вхождение; </li> <li> <b>FIRST_SITE_ID</b>* - ID сайта первого захода; </li> <li>
	 * <b>FIRST_SITE_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по
	 * <b>FIRST_SITE_ID</b> будет искаться вхождение; </li> <li> <b>LAST_SITE_ID</b>* - ID сайта
	 * последнего захода; </li> <li> <b>LAST_SITE_ID_EXACT_MATCH</b> - если значение равно
	 * "N", то при фильтрации по <b>LAST_SITE_ID</b> будет искаться вхождение; </li>
	 * <li> <b>URL</b>* - страница откуда впервые пришел посетитель, страница на
	 * которую впервые пришел посетитель и последняя страница
	 * просмотренная посетителем; </li> <li> <b>URL_EXACT_MATCH</b> - если значение
	 * равно "Y", то при фильтрации по <b>URL</b> будет искаться точное
	 * совпадение; </li> <li> <b>URL_404</b> - была ли <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> на первой странице
	 * или на последней странице посещенной посетителем, возможные
	 * значения: <ul> <li> <b>Y</b> - была; </li> <li> <b>N</b> - не было. </li> </ul> </li> <li>
	 * <b>USER_AGENT</b>* - UserAgent посетителя на последнем заходе; </li> <li>
	 * <b>USER_AGENT_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
	 * <b>USER_AGENT</b> будет искаться точное совпадение; </li> <li> <b>ADV</b> - флаг
	 * "приходил ли посетитель когда либо по рекламной кампании (не
	 * равной NA/NA)", возможные значения: <ul> <li> <b>Y</b> - посетитель приходил
	 * по какой либо рекламной кампании (не равной NA/NA); </li> <li> <b>N</b> - не
	 * приходил никогда ни по одной рекламной кампании (не равной NA/NA).
	 * </li> </ul> </li> <li> <b>ADV_ID</b> - ID рекламной кампании первого либо
	 * последнего захода посетителя (при этом это мог быть как <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_first">прямой заход</a> так и <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_back">возврат</a> по рекламной
	 * кампании); </li> <li> <b>REFERER1</b>* - <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_id">идентификатор</a> referer1
	 * рекламной кампании первого либо последнего захода посетителя;
	 * </li> <li> <b>REFERER1_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
	 * <b>REFERER1</b> будет искаться точное совпадение; </li> <li> <b>REFERER2</b>* -
	 * идентификатор referer2 рекламной кампании первого либо последнего
	 * захода посетителя; </li> <li> <b>REFERER2_EXACT_MATCH</b> - если значение равно "Y",
	 * то при фильтрации по <b>REFERER2</b> будет искаться точное совпадение;
	 * </li> <li> <b>REFERER3</b>* - <a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_referer3">дополнительный
	 * параметр</a> referer3 рекламной кампании первого либо последнего
	 * захода посетителя; </li> <li> <b>REFERER3_EXACT_MATCH</b> - если значение равно "Y",
	 * то при фильтрации по <b>REFERER3</b> будет искаться точное совпадение;
	 * </li> <li> <b>EVENTS1</b> - начальное значение для интервала кол-ва событий
	 * сгенерированных посетителем; </li> <li> <b>EVENTS2</b> - конечное значение
	 * для интервала кол-ва событий сгенерированных посетителем; </li> <li>
	 * <b>SESS1</b> - начальное значение для интервала кол-ва сессий
	 * сгенерированных посетителем; </li> <li> <b>SESS2</b> - конечное значение
	 * для интервала кол-ва сессий сгенерированных посетителем; </li> <li>
	 * <b>HITS1</b> - начальное значение для интервала кол-ва хитов
	 * сгенерированных посетителем; </li> <li> <b>HITS2</b> - конечное значение
	 * для интервала кол-ва хитов сгенерированных посетителем; </li> <li>
	 * <b>FAVORITES</b> - флаг "добавлял ли посетитель сайт в "<a
	 * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#favorites">Избранное</a>"", возможные
	 * значения: <ul> <li> <b>Y</b> - добавлял; </li> <li> <b>N</b> - не добавлял. </li> </ul> </li>
	 * <li> <b>IP</b> - IP адрес посетителя сайта в последнем заходе; </li> <li>
	 * <b>LANG</b> - <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#browser_lang">языки
	 * установленные в настройках браузера</a> посетителя в последнем
	 * заходе; </li> <li> <b>COUNTRY_ID</b>* - ID страны (двухсимвольный идентификатор)
	 * посетителя в последнем заходе; </li> <li> <b>COUNTRY_ID_EXACT_MATCH</b> - если
	 * значение равно "Y", то при фильтрации по <b>COUNTRY_ID</b> будет искаться
	 * точное совпадение; </li> <li> <b>COUNTRY</b>* - название страны; </li> <li>
	 * <b>COUNTRY_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
	 * <b>COUNTRY</b> будет искаться точное совпадение; </li> <li> <b>USER</b>* - ID, логин,
	 * имя, фамилия <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user">пользователя</a>,
	 * под которыми посетитель последний раз был авторизован; </li> <li>
	 * <b>USER_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по <b>USER</b>
	 * будет искаться точное совпадение; </li> <li> <b>USER_ID</b>* - ID пользователя,
	 * под которым посетитель последний раз был авторизован; </li> <li>
	 * <b>USER_ID_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
	 * <b>USER_ID</b> будет искаться точное совпадение. </li> </ul> <br> * -
	 * допускается <a href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная
	 * логика</a>
	 *
	 *
	 *
	 * @param bool &$is_filtered  Флаг отфильтрованности списка посетителей. Если значение равно
	 * "true", то список был отфильтрован.
	 *
	 *
	 *
	 * @return CDBResult 
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?
	 * // выберем только тех посетителей UserAgent которых содержит "Opera"
	 * $arFilter = array(
	 *     "USER_AGENT" =&gt; "Opera"
	 *     );
	 * 
	 * // получим список записей
	 * $rs = <b>CGuest::GetList</b>(
	 *     ($by = "s_id"), 
	 *     ($order = "desc"), 
	 *     $arFilter, 
	 *     $is_filtered
	 *     );
	 * 
	 * // выведем все записи
	 * while ($ar = $rs-&gt;Fetch())
	 * {
	 *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
	 * }
	 * ?&gt;
	 * </pre>
	 *
	 *
	 *
	 * <h4>See Also</h4> 
	 * <ul><li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">Термин "Посетитель"</a>
	 * </li></ul><a name="examples"></a>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cguest/getlist.php
	 * @author Bitrix
	 */
	public static function GetList(&$by, &$order, $arFilter=Array(), &$is_filtered)
	{
		$err_mess = "File: ".__FILE__."<br>Line: ";
		$DB = CDatabase::GetModuleConnection('statistic');
		$arSqlSearch = Array();
		$strSqlSearch = "";

		$bGroup = false;
		$arrGroup = array(
			"G.ID" => true,
			"G.C_EVENTS" => true,
			"G.FIRST_SITE_ID" => true,
			"G.LAST_SITE_ID" => true,
			"G.SESSIONS" => true,
			"G.HITS" => true,
			"G.FAVORITES" => true,
			"G.FIRST_URL_FROM" => true,
			"G.FIRST_URL_TO" => true,
			"G.FIRST_URL_TO_404" => true,
			"G.FIRST_ADV_ID" => true,
			"G.FIRST_REFERER1" => true,
			"G.FIRST_REFERER2" => true,
			"G.FIRST_REFERER3" => true,
			"G.LAST_ADV_ID" => true,
			"G.LAST_ADV_BACK" => true,
			"G.LAST_REFERER1" => true,
			"G.LAST_REFERER2" => true,
			"G.LAST_REFERER3" => true,
			"G.LAST_USER_ID" => true,
			"G.LAST_USER_AUTH" => true,
			"G.LAST_URL_LAST" => true,
			"G.LAST_URL_LAST_404" => true,
			"G.LAST_USER_AGENT" => true,
			"G.LAST_IP" => true,
			"G.LAST_LANGUAGE" => true,
			"G.LAST_COUNTRY_ID" => true,
			"G.LAST_CITY_ID" => true,
			"G.FIRST_DATE" => true,
			"G.LAST_DATE" => true,
			"G.FIRST_SESSION_ID" => true,
			"G.LAST_SESSION_ID" => true,
			"CITY.REGION" => true,
			"CITY.NAME" => true,
		);

		if (is_array($arFilter))
		{
			foreach ($arFilter as $key => $val)
			{
				if(is_array($val))
				{
					if(count($val) <= 0)
						continue;
				}
				else
				{
					if( (strlen($val) <= 0) || ($val === "NOT_REF") )
						continue;
				}
				$match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
				$key = strtoupper($key);
				switch($key)
				{
					case "ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("G.ID",$val,$match);
						break;
					case "REGISTERED":
						if ($val=="Y")
							$arSqlSearch[] = "G.LAST_USER_ID>0 and G.LAST_USER_ID is not null";
						elseif ($val=="N")
							$arSqlSearch[] = "G.LAST_USER_ID<=0 or G.LAST_USER_ID is null";
						break;
					case "FIRST_DATE1":
						if (CheckDateTime($val))
							$arSqlSearch[] = "G.FIRST_DATE >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "FIRST_DATE2":
						if (CheckDateTime($val))
							$arSqlSearch[] = "G.FIRST_DATE < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
						break;
					case "LAST_DATE1":
						if (CheckDateTime($val))
							$arSqlSearch[] = "G.LAST_DATE >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "LAST_DATE2":
						if (CheckDateTime($val))
							$arSqlSearch[] = "G.LAST_DATE < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
						break;
					case "PERIOD_DATE1":
						ResetFilterLogic();
						if (CheckDateTime($val))
						{
							$arSqlSearch[] = "S.DATE_FIRST >= ".$DB->CharToDateFunction($val, "SHORT");
							$from0 = " INNER JOIN b_stat_session S ON (S.GUEST_ID = G.ID) ";
							$select0 = "count(S.ID) as SESS,";
							$bGroup = true;
						}
						break;
					case "PERIOD_DATE2":
						ResetFilterLogic();
						if (CheckDateTime($val))
						{
							$arSqlSearch[] = "S.DATE_LAST < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
							$from0 = " INNER JOIN b_stat_session S ON (S.GUEST_ID = G.ID) ";
							$select0 = "count(S.ID) as SESS,";
							$bGroup = true;
						}
						break;
					case "SITE_ID":
						if (is_array($val)) $val = implode(" | ", $val);
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("G.LAST_SITE_ID, G.FIRST_SITE_ID", $val, $match);
						break;
					case "LAST_SITE_ID":
					case "FIRST_SITE_ID":
						if (is_array($val)) $val = implode(" | ", $val);
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("G.".$key, $val, $match);
						break;
					case "URL":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.FIRST_URL_FROM,G.FIRST_URL_TO,G.LAST_URL_LAST", $val, $match, array("/","\\",".","?","#",":"));
						break;
					case "URL_404":
						if ($val=="Y")
							$arSqlSearch[] = "G.FIRST_URL_TO_404='Y' or	G.LAST_URL_LAST_404='Y'";
						elseif ($val=="N")
							$arSqlSearch[] = "G.FIRST_URL_TO_404='N' and G.LAST_URL_LAST_404='N'";
						break;
					case "USER_AGENT":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.LAST_USER_AGENT", $val, $match);
						break;
					case "ADV":
						if ($val=="Y")
						{
							$arSqlSearch[] = "(
									G.FIRST_ADV_ID>0 and
									G.FIRST_ADV_ID is not null and
									G.FIRST_REFERER1<>'NA' and G.FIRST_REFERER2<>'NA'
								or
									G.LAST_ADV_ID>0 and
									G.LAST_ADV_ID is not null and
									G.LAST_REFERER1<>'NA' and G.LAST_REFERER2<>'NA'
								)";
						}
						elseif ($val=="N")
						{
							$arSqlSearch[] = "((
										G.FIRST_ADV_ID<=0 or
										G.FIRST_ADV_ID is null or
										(G.FIRST_REFERER1='NA' and G.FIRST_REFERER2='NA')
									) and (
										G.LAST_ADV_ID<=0 or
										G.LAST_ADV_ID is null or
										(G.LAST_REFERER1='NA' and G.LAST_REFERER2='NA')
									))";
						}
						break;
					case "ADV_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("G.FIRST_ADV_ID,G.LAST_ADV_ID", $val, $match);
						break;
					case "REFERER1":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.FIRST_REFERER1,G.LAST_REFERER1", $val, $match);
						break;
					case "REFERER2":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.FIRST_REFERER2,G.LAST_REFERER2", $val, $match);
						break;
					case "REFERER3":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.FIRST_REFERER3,G.LAST_REFERER3", $val, $match);
						break;
					case "EVENTS1":
						$arSqlSearch[] = "G.C_EVENTS>='".intval($val)."'";
						break;
					case "EVENTS2":
						$arSqlSearch[] = "G.C_EVENTS<='".intval($val)."'";
						break;
					case "SESS1":
						$arSqlSearch[] = "G.SESSIONS>='".intval($val)."'";
						break;
					case "SESS2":
						$arSqlSearch[] = "G.SESSIONS<='".intval($val)."'";
						break;
					case "HITS1":
						$arSqlSearch[] = "G.HITS>='".intval($val)."'";
						break;
					case "HITS2":
						$arSqlSearch[] = "G.HITS<='".intval($val)."'";
						break;
					case "FAVORITES":
						if ($val=="Y")
							$arSqlSearch[] = "G.FAVORITES='Y'";
						elseif ($val=="N")
							$arSqlSearch[] = "G.FAVORITES<>'Y'";
						break;
					case "IP":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.LAST_IP",$val,$match,array("."));
						break;
					case "LANG":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.LAST_LANGUAGE", $val, $match);
						break;
					case "COUNTRY_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.LAST_COUNTRY_ID", $val, $match);
						break;
					case "COUNTRY":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match);
						$select1 .= " , C.NAME LAST_COUNTRY_NAME ";
						$from2 = " LEFT JOIN b_stat_country C ON (C.ID = G.LAST_COUNTRY_ID) ";
						$arrGroup["C.NAME"] = true;
						$bGroup = true;
						break;
					case "REGION":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match);
						break;
					case "CITY_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("G.LAST_CITY_ID", $val, $match);
						break;
					case "CITY":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match);
						break;
					case "USER":
						if(COption::GetOptionString("statistic", "dbnode_id") <= 0)
						{
							$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
							$arSqlSearch[] = $DB->IsNull("G.LAST_USER_ID","0").">0";
							$arSqlSearch[] = GetFilterQuery("G.LAST_USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match);
							$select1 .= ", ".$DB->Concat($DB->IsNull("A.NAME","''"), "' '", $DB->IsNull("A.LAST_NAME","''"))." USER_NAME, A.LOGIN";
							$from1 = "LEFT JOIN  b_user A ON (A.ID = G.LAST_USER_ID) ";
							$arrGroup["A.NAME"] = true;
							$arrGroup["A.LAST_NAME"] = true;
							$arrGroup["A.LOGIN"] = true;
							$bGroup = true;
						}
						break;
					case "USER_ID":
						if(COption::GetOptionString("statistic", "dbnode_id") <= 0)
						{
							$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
							$arSqlSearch[] = $DB->IsNull("G.LAST_USER_ID","0").">0";
							$arSqlSearch[] = GetFilterQuery("G.LAST_USER_ID", $val, $match);
							$select1 .= ", ".$DB->Concat($DB->IsNull("A.NAME","''"), "' '", $DB->IsNull("A.LAST_NAME","''"))." USER_NAME, A.LOGIN";
							$from1 = "LEFT JOIN  b_user A ON (A.ID = G.LAST_USER_ID) ";
							$arrGroup["A.NAME"] = true;
							$arrGroup["A.LAST_NAME"] = true;
							$arrGroup["A.LOGIN"] = true;
							$bGroup = true;
						}
						break;
				}
			}
		}
		if ($by == "s_id")					$strSqlOrder = "ORDER BY G.ID";
		elseif ($by == "s_first_site_id")	$strSqlOrder = "ORDER BY G.FIRST_SITE_ID";
		elseif ($by == "s_last_site_id")	$strSqlOrder = "ORDER BY G.LAST_SITE_ID";
		elseif ($by == "s_events")			$strSqlOrder = "ORDER BY G.C_EVENTS";
		elseif ($by == "s_sessions")		$strSqlOrder = "ORDER BY G.SESSIONS";
		elseif ($by == "s_hits")			$strSqlOrder = "ORDER BY G.HITS";
		elseif ($by == "s_first_date")		$strSqlOrder = "ORDER BY G.FIRST_DATE";
		elseif ($by == "s_first_url_from")	$strSqlOrder = "ORDER BY G.FIRST_URL_FROM";
		elseif ($by == "s_first_url_to")	$strSqlOrder = "ORDER BY G.FIRST_URL_TO";
		elseif ($by == "s_first_adv_id")	$strSqlOrder = "ORDER BY G.FIRST_ADV_ID";
		elseif ($by == "s_last_date")		$strSqlOrder = "ORDER BY ".CStatistics::DBFirstDate("G.LAST_DATE");
		elseif ($by == "s_last_user_id")	$strSqlOrder = "ORDER BY G.LAST_USER_ID";
		elseif ($by == "s_last_url_last")	$strSqlOrder = "ORDER BY G.LAST_URL_LAST";
		elseif ($by == "s_last_user_agent")	$strSqlOrder = "ORDER BY G.LAST_USER_AGENT";
		elseif ($by == "s_last_ip")			$strSqlOrder = "ORDER BY G.LAST_IP";
		elseif ($by == "s_last_adv_id")		$strSqlOrder = "ORDER BY G.LAST_ADV_ID";
		elseif ($by == "s_last_country_id")	$strSqlOrder = "ORDER BY G.LAST_COUNTRY_ID";
		elseif ($by == "s_last_region_name")	$strSqlOrder = "ORDER BY CITY.REGION";
		elseif ($by == "s_last_city_id")	$strSqlOrder = "ORDER BY G.LAST_CITY_ID";
		else
		{
			$by = "s_last_date";
			$strSqlOrder = "ORDER BY ".CStatistics::DBFirstDate("G.LAST_DATE");
		}
		if ($order!="asc")
		{
			$strSqlOrder .= " desc ";
			$order="desc";
		}

		if($bGroup)
		{
			$strSqlGroup = "GROUP BY ".implode(", ", array_keys($arrGroup));
		}

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		$strSql = "
			SELECT /*TOP*/
				".$select0."
				G.ID, G.FIRST_SITE_ID, G.FIRST_SESSION_ID,
				G.LAST_SESSION_ID, G.LAST_SITE_ID,
				G.C_EVENTS, G.SESSIONS, G.HITS,  G.FAVORITES,
				G.FIRST_URL_FROM, G.FIRST_URL_TO, G.FIRST_URL_TO_404,
				G.FIRST_ADV_ID, G.FIRST_REFERER1, G.FIRST_REFERER2, G.FIRST_REFERER3,
				G.LAST_ADV_ID, G.LAST_ADV_BACK, G.LAST_REFERER1, G.LAST_REFERER2, G.LAST_REFERER3,
				G.LAST_USER_ID, G.LAST_USER_AUTH, G.LAST_URL_LAST, G.LAST_URL_LAST_404,
				G.LAST_USER_AGENT, G.LAST_IP, G.LAST_LANGUAGE, G.LAST_COUNTRY_ID,
				CITY.REGION as LAST_REGION_NAME,
				G.LAST_CITY_ID, CITY.NAME as LAST_CITY_NAME,
				".$DB->DateToCharFunction("G.FIRST_DATE")." FIRST_DATE,
				".$DB->DateToCharFunction("G.LAST_DATE")." LAST_DATE
				".$select1."
			FROM
				b_stat_guest G
			".$from0."
			".$from1."
			".$from2."
				LEFT JOIN b_stat_city CITY ON (CITY.ID = G.LAST_CITY_ID)
			WHERE
			".$strSqlSearch."
			".$strSqlGroup."
			".$strSqlOrder."
		";

		$res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess.__LINE__);
		$is_filtered = (IsFiltered($strSqlSearch));
		return $res;
	}
Ejemplo n.º 12
0
 function Set($arFields, $OLD_SID, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAdvType_all::err_mess() . "<br>Function: Set<br>Line: ";
     global $DB, $USER;
     $SID = false;
     $OLD_SID = trim($OLD_SID);
     if (CAdvType::CheckFields($arFields, $OLD_SID, $CHECK_RIGHTS)) {
         $arFields_i = array();
         $arrKeys = array_keys($arFields);
         if (in_array("SID", $arrKeys)) {
             $arFields_i["SID"] = "'" . $DB->ForSql($arFields["SID"], 255) . "'";
         }
         if (in_array("ACTIVE", $arrKeys) && ($arFields["ACTIVE"] == "Y" || $arFields["ACTIVE"] == "N")) {
             $arFields_i["ACTIVE"] = "'" . $arFields["ACTIVE"] . "'";
         }
         if (in_array("SORT", $arrKeys)) {
             $arFields_i["SORT"] = "'" . intval($arFields["SORT"]) . "'";
         }
         if (in_array("NAME", $arrKeys)) {
             $arFields_i["NAME"] = "'" . $DB->ForSql($arFields["NAME"], 255) . "'";
         }
         if (in_array("DESCRIPTION", $arrKeys)) {
             $arFields_i["DESCRIPTION"] = "'" . $DB->ForSql($arFields["DESCRIPTION"], 2000) . "'";
         }
         if (count($arFields_i) > 0) {
             if (strlen($OLD_SID) > 0) {
                 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"])) {
                     $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
                 } else {
                     $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
                 }
                 if (in_array("MODIFIED_BY", $arrKeys)) {
                     $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
                 } else {
                     $arFields_i["MODIFIED_BY"] = $USER->GetID();
                 }
                 $str = "";
                 while (list($field, $value) = each($arFields_i)) {
                     if (strlen($value) <= 0) {
                         $str .= "{$field} = '', ";
                     } else {
                         $str .= "{$field} = {$value}, ";
                     }
                 }
                 $str = TrimEx($str, ",");
                 $strSql = "UPDATE b_adv_type SET " . $str . " WHERE SID='" . $DB->ForSql($OLD_SID, 255) . "'";
                 $DB->Query($strSql, false, $err_mess . __LINE__);
                 if (in_array("SID", $arrKeys)) {
                     $SID = $arFields["SID"];
                     // если SID изменился то
                     if ($arFields["SID"] != $OLD_SID) {
                         // обновим тип у баннеров
                         $arF = array("TYPE_SID" => "'" . $DB->ForSql($arFields["SID"], 255) . "'");
                         $DB->Update("b_adv_banner", $arF, "WHERE TYPE_SID='" . $DB->ForSql($OLD_SID, 255) . "'", $err_mess . __LINE__);
                         // обновим тип у баннеров
                         $arF = array("TYPE_SID" => "'" . $DB->ForSql($arFields["SID"], 255) . "'");
                         $DB->Update("b_adv_contract_2_type", $arF, "WHERE TYPE_SID='" . $DB->ForSql($OLD_SID, 255) . "'", $err_mess . __LINE__);
                     }
                 } else {
                     $SID = $OLD_SID;
                 }
             } elseif (strlen($arFields_i["SID"]) > 0) {
                 if (in_array("DATE_CREATE", $arrKeys) && CheckDateTime($arFields["DATE_CREATE"])) {
                     $arFields_i["DATE_CREATE"] = $DB->CharToDateFunction($arFields["DATE_CREATE"]);
                 } else {
                     $arFields_i["DATE_CREATE"] = $DB->GetNowFunction();
                 }
                 if (in_array("CREATED_BY", $arrKeys)) {
                     $arFields_i["CREATED_BY"] = intval($arFields["CREATED_BY"]);
                 } else {
                     $arFields_i["CREATED_BY"] = $USER->GetID();
                 }
                 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"])) {
                     $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
                 } else {
                     $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
                 }
                 if (in_array("MODIFIED_BY", $arrKeys)) {
                     $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
                 } else {
                     $arFields_i["MODIFIED_BY"] = $USER->GetID();
                 }
                 $str1 = $str2 = "";
                 while (list($field, $value) = each($arFields_i)) {
                     $str1 .= $field . ", ";
                     if (strlen($value) <= 0) {
                         $str2 .= "'', ";
                     } else {
                         $str2 .= "{$value}, ";
                     }
                 }
                 $str1 = TrimEx($str1, ",");
                 $str2 = TrimEx($str2, ",");
                 $strSql = "INSERT INTO b_adv_type (" . $str1 . ") VALUES (" . $str2 . ")";
                 $DB->Query($strSql, false, $err_mess . __LINE__);
                 $SID = $arFields["SID"];
             }
         }
     } else {
         $SID = $arFields["SID"];
     }
     return $SID;
 }
Ejemplo n.º 13
0
 function Check($WEB_FORM_ID, $arrVALUES = false, $RESULT_ID = false, $CHECK_RIGHTS = "Y", $RETURN_ARRAY = "N")
 {
     $err_mess = CAllForm::err_mess() . "<br>Function: Check<br>Line: ";
     global $DB, $APPLICATION, $USER, $_REQUEST, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES;
     if ($arrVALUES === false) {
         $arrVALUES = $_REQUEST;
     }
     $RESULT_ID = intval($RESULT_ID);
     $errors = $RETURN_ARRAY == "Y" ? array() : "";
     $WEB_FORM_ID = intval($WEB_FORM_ID);
     if ($WEB_FORM_ID > 0) {
         // получаем данные по форме
         $WEB_FORM_ID = CForm::GetDataByID($WEB_FORM_ID, $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, "ALL");
         $WEB_FORM_ID = intval($WEB_FORM_ID);
         if ($WEB_FORM_ID > 0) {
             // провер¤ем права
             $F_RIGHT = $CHECK_RIGHTS == "Y" ? CForm::GetPermission($WEB_FORM_ID) : 30;
             if ($F_RIGHT < 10) {
                 CForm::__check_PushError($errors, GetMessage("FORM_ACCESS_DENIED_FOR_FORM_WRITE"));
             } else {
                 $NOT_ANSWER = "NOT_ANSWER";
                 // проходим по вопросам
                 foreach ($arQuestions as $key => $arQuestion) {
                     $arAnswerValues = array();
                     $FIELD_ID = $arQuestion["ID"];
                     if ($arQuestion["TITLE_TYPE"] == "html") {
                         $FIELD_TITLE = strip_tags($arQuestion["TITLE"]);
                     } else {
                         $FIELD_TITLE = $arQuestion["TITLE"];
                     }
                     if ($arQuestion["ADDITIONAL"] != "Y") {
                         // провер¤ем вопросы формы
                         $FIELD_SID = $arQuestion["SID"];
                         $FIELD_REQUIRED = $arQuestion["REQUIRED"];
                         // массив полей: N - поле не отвечено; Y - поле отвечено;
                         if ($FIELD_REQUIRED == "Y") {
                             $REQUIRED_FIELDS[$FIELD_SID] = "N";
                         }
                         $startType = "";
                         $bCheckValidators = true;
                         // проходим по ответам
                         if (is_array($arAnswers[$FIELD_SID])) {
                             foreach ($arAnswers[$FIELD_SID] as $key => $arAnswer) {
                                 $ANSWER_ID = 0;
                                 $FIELD_TYPE = $arAnswer["FIELD_TYPE"];
                                 $FIELD_PARAM = $arAnswer["FIELD_PARAM"];
                                 if ($startType == "") {
                                     $startType = $FIELD_TYPE;
                                 } else {
                                     $bCheckValidators &= $startType == $FIELD_TYPE;
                                 }
                                 switch ($FIELD_TYPE) {
                                     case "radio":
                                     case "dropdown":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $FIELD_SID;
                                         $arAnswerValues[] = $arrVALUES[$fname];
                                         $ANSWER_ID = intval($arrVALUES[$fname]);
                                         if ($ANSWER_ID > 0 && $ANSWER_ID == $arAnswer["ID"]) {
                                             if ($FIELD_REQUIRED == "Y" && !preg_match("/" . $NOT_ANSWER . "/i", $FIELD_PARAM)) {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                             }
                                         }
                                         break;
                                     case "checkbox":
                                     case "multiselect":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $FIELD_SID;
                                         if (is_array($arrVALUES[$fname]) && count($arrVALUES[$fname]) > 0) {
                                             $arAnswerValues = $arrVALUES[$fname];
                                             reset($arrVALUES[$fname]);
                                             foreach ($arrVALUES[$fname] as $ANSWER_ID) {
                                                 $ANSWER_ID = intval($ANSWER_ID);
                                                 if ($ANSWER_ID > 0 && $ANSWER_ID == $arAnswer["ID"]) {
                                                     if ($FIELD_REQUIRED == "Y" && !preg_match("/" . $NOT_ANSWER . "/i", $FIELD_PARAM)) {
                                                         $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                         break;
                                                     }
                                                 }
                                             }
                                         }
                                         break;
                                     case "text":
                                     case "textarea":
                                     case "password":
                                     case "hidden":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"];
                                         $ANSWER_ID = intval($arAnswer["ID"]);
                                         $USER_TEXT = $arrVALUES[$fname];
                                         $arAnswerValues[] = $arrVALUES[$fname];
                                         if (strlen(trim($USER_TEXT)) > 0) {
                                             if ($FIELD_REQUIRED == "Y") {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                 break;
                                             }
                                         }
                                         break;
                                     case "url":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"];
                                         $arAnswerValues[] = $arrVALUES[$fname];
                                         $ANSWER_ID = intval($arAnswer["ID"]);
                                         $USER_TEXT = $arrVALUES[$fname];
                                         if (strlen($USER_TEXT) > 0) {
                                             if (!preg_match("/^(http|https|ftp):\\/\\//i", $USER_TEXT)) {
                                                 CForm::__check_PushError($errors, GetMessage('FORM_ERROR_BAD_URL'), $FIELD_SID);
                                             }
                                             if ($FIELD_REQUIRED == "Y") {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                 break;
                                             }
                                         }
                                         break;
                                     case "email":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"];
                                         $arAnswerValues[] = $arrVALUES[$fname];
                                         $ANSWER_ID = intval($arAnswer["ID"]);
                                         $USER_TEXT = $arrVALUES[$fname];
                                         if (strlen($USER_TEXT) > 0) {
                                             if (!check_email($USER_TEXT)) {
                                                 CForm::__check_PushError($errors, GetMessage('FORM_ERROR_BAD_EMAIL'), $FIELD_SID);
                                             }
                                             if ($FIELD_REQUIRED == "Y") {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                 break;
                                             }
                                         }
                                         break;
                                     case "date":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"];
                                         $arAnswerValues[] = $arrVALUES[$fname];
                                         $USER_DATE = $arrVALUES[$fname];
                                         if (strlen($USER_DATE) > 0) {
                                             if (!CheckDateTime($USER_DATE)) {
                                                 CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, GetMessage("FORM_INCORRECT_DATE_FORMAT")), $FIELD_SID);
                                             }
                                             if ($FIELD_REQUIRED == "Y") {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                 break;
                                             }
                                         }
                                         break;
                                     case "image":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"];
                                         $fname_del = $arrVALUES["form_" . $FIELD_TYPE . "_" . $arAnswer["ID"] . "_del"];
                                         $ANSWER_ID = intval($arAnswer["ID"]);
                                         $arIMAGE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname];
                                         if (is_array($arIMAGE) && strlen($arIMAGE["tmp_name"]) > 0) {
                                             $arIMAGE["MODULE_ID"] = "form";
                                             if (strlen(CFile::CheckImageFile($arIMAGE)) > 0) {
                                                 CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, GetMessage("FORM_INCORRECT_FILE_TYPE")), $FIELD_SID);
                                             } else {
                                                 $arAnswerValues[] = $arIMAGE;
                                             }
                                             if ($FIELD_REQUIRED == "Y") {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                 break;
                                             }
                                         } elseif ($RESULT_ID > 0 && $fname_del != "Y") {
                                             $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                             break;
                                         }
                                         break;
                                     case "file":
                                         $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"];
                                         $fname_del = $arrVALUES["form_" . $FIELD_TYPE . "_" . $arAnswer["ID"] . "_del"];
                                         $arFILE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname];
                                         if (is_array($arFILE) && strlen($arFILE["tmp_name"]) > 0) {
                                             $arAnswerValues[] = $arFILE;
                                             if ($FIELD_REQUIRED == "Y") {
                                                 $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                                 break;
                                             }
                                         } elseif ($RESULT_ID > 0 && $fname_del != "Y") {
                                             $REQUIRED_FIELDS[$FIELD_SID] = "Y";
                                             break;
                                         }
                                         break;
                                 }
                             }
                         }
                     } else {
                         $FIELD_TYPE = $arQuestion["FIELD_TYPE"];
                         $fname = "form_date_ADDITIONAL_" . $arQuestion["ID"];
                         $arAnswerValues = array($arrVALUES[$fname]);
                         $bCheckValidators = true;
                         switch ($FIELD_TYPE) {
                             case "date":
                                 $USER_DATE = $arrVALUES[$fname];
                                 if (strlen($USER_DATE) > 0) {
                                     if (!CheckDateTime($USER_DATE)) {
                                         CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, GetMessage("FORM_INCORRECT_DATE_FORMAT")), $FIELD_SID);
                                     }
                                 }
                                 break;
                         }
                     }
                     // check custom validators
                     if ($bCheckValidators) {
                         if ($arQuestion["ADDITIONAL"] == "Y" || is_array($arAnswers[$FIELD_SID])) {
                             $rsValidatorList = CFormValidator::GetList($FIELD_ID, array("TYPE" => $FIELD_TYPE), $by = "C_SORT", $order = "ASC");
                             while ($arValidator = $rsValidatorList->Fetch()) {
                                 if (!CFormValidator::Execute($arValidator, $arQuestion, $arAnswers[$FIELD_SID], $arAnswerValues)) {
                                     if ($e = $APPLICATION->GetException()) {
                                         CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, $e->GetString()), $FIELD_SID);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if ($arForm["USE_CAPTCHA"] == "Y" && !$RESULT_ID && !defined('ADMIN_SECTION')) {
                     if (!$GLOBALS["APPLICATION"]->CaptchaCheckCode($arrVALUES["captcha_word"], $arrVALUES["captcha_sid"])) {
                         CForm::__check_PushError($errors, GetMessage("FORM_WRONG_CAPTCHA"));
                     }
                 }
                 //echo "<pre>"; print_r($REQUIRED_FIELDS); echo "</pre>";
                 if (is_array($REQUIRED_FIELDS) && count($REQUIRED_FIELDS) > 0) {
                     foreach ($REQUIRED_FIELDS as $key => $value) {
                         if ($value == "N") {
                             if (strlen($arQuestions[$key]["RESULTS_TABLE_TITLE"]) > 0) {
                                 $title = $arQuestions[$key]["RESULTS_TABLE_TITLE"];
                             } else {
                                 $title = $arQuestions[$key]["TITLE_TYPE"] == "html" ? strip_tags($arQuestions[$key]["TITLE"]) : $arQuestions[$key]["TITLE"];
                             }
                             if ($RETURN_ARRAY == 'N') {
                                 $EMPTY_REQUIRED_NAMES[] = $title;
                             } else {
                                 CForm::__check_PushError($errors, GetMessage("FORM_EMPTY_REQUIRED_FIELDS") . ' ' . $title, $key);
                             }
                         }
                     }
                 }
                 if ($RETURN_ARRAY == 'N') {
                     if (is_array($EMPTY_REQUIRED_NAMES) && count($EMPTY_REQUIRED_NAMES) > 0) {
                         $errMsg = "";
                         $errMsg .= GetMessage("FORM_EMPTY_REQUIRED_FIELDS") . "<br />";
                         foreach ($EMPTY_REQUIRED_NAMES as $key => $name) {
                             $errMsg .= ($key != 0 ? "<br />" : "") . "&nbsp;&nbsp;&raquo;&nbsp;\"" . $name . "\"";
                         }
                         CForm::__check_PushError($errors, $errMsg);
                     }
                 }
             }
         } else {
             CForm::__check_PushError($errors, GetMessage("FORM_INCORRECT_FORM_ID"));
         }
     }
     return $errors;
 }
Ejemplo n.º 14
0
 function GetHistoryList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = CWorkflow::err_mess() . "<br>Function: GetHistoryList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (strlen($val) <= 0 || "{$val}" == "NOT_REF") {
                 continue;
             }
             if (is_array($val) && count($val) <= 0) {
                 continue;
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L.ID", $val, $match);
                     break;
                 case "DOCUMENT_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L.DOCUMENT_ID", $val, $match);
                     break;
                 case "DATE_MODIFY_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "L.TIMESTAMP_X >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_MODIFY_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "L.TIMESTAMP_X < " . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "MODIFIED_BY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L.MODIFIED_BY", $val, $match);
                     break;
                 case "MODIFIED_USER":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.MODIFIED_BY, U.LOGIN, U.NAME, U.LAST_NAME", $val, $match);
                     break;
                 case "TITLE":
                 case "SITE_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L." . $key, $val, $match);
                     break;
                 case "FILENAME":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.FILENAME", $val, $match, array("/", "\\", ".", "_"));
                     break;
                 case "BODY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L.BODY", $val, $match, array(), "Y");
                     break;
                 case "STATUS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.STATUS_ID, S.TITLE", $val, $match);
                     break;
                 case "STATUS_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L.STATUS_ID", $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY L.ID";
     } elseif ($by == "s_document_id") {
         $strSqlOrder = "ORDER BY L.DOCUMENT_ID";
     } elseif ($by == "s_date_modify") {
         $strSqlOrder = "ORDER BY L.TIMESTAMP_X";
     } elseif ($by == "s_modified_by") {
         $strSqlOrder = "ORDER BY L.MODIFIED_BY";
     } elseif ($by == "s_filename") {
         $strSqlOrder = "ORDER BY L.FILENAME";
     } elseif ($by == "s_site_id") {
         $strSqlOrder = "ORDER BY L.SITE_ID";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY L.TITLE";
     } elseif ($by == "s_status") {
         $strSqlOrder = "ORDER BY L.STATUS_ID";
     } else {
         $by = "s_id";
         $strSqlOrder = "ORDER BY L.ID";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT DISTINCT\n\t\t\t\tL.*,\n\t\t\t\t" . $DB->DateToCharFunction("L.TIMESTAMP_X") . " TIMESTAMP_X,\n\t\t\t\tconcat('(',U.LOGIN,') ',ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,'')) USER_NAME,\n\t\t\t\tS.TITLE STATUS_TITLE\n\t\t\tFROM\n\t\t\t\tb_workflow_log L\n\t\t\t\tLEFT JOIN b_workflow_status S ON (S.ID = L.STATUS_ID)\n\t\t\t\tLEFT JOIN b_user U ON (U.ID = L.MODIFIED_BY)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Ejemplo n.º 15
0
 /**
  * <p>Проверяет дату на корректность и возвращает "true" если дата корректна, в противном случае - "false". Динамичный метод.</p> <p> </p>
  *
  *
  * @param string $date  Строка с проверяемой датой.
  *
  * @param string $format = false Формат даты.<br> Необязательный. По умолчанию - "false" - определять
  * формат по текущему сайту, либо языку (если административная
  * часть).
  *
  * @param string $lang = false Код сайта для публичной части, либо код языка для
  * административной части (для определения формата, если <i>format</i>
  * равен false).<br>Необязательный. По умолчанию - текущий сайт, либо
  * текущий язык (если административная часть).
  *
  * @param string $format_type = "SHORT" Тип формата даты: "FULL" - для даты со временем, "SHORT" - для даты (без
  * времени) <br>Необязательный. По умолчанию "SHORT". С версии 3.3.7 до
  * версии 4.1.0 назывался Type.
  *
  * @return bool 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * if (!<b>$DB-&gt;IsDate</b>("12.10.2005 22:34:15", "DD.MM.YYYY HH:MI:SS"))
  *   echo "Ошибка. Неверный формат даты.";
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/functions/date/index.php">Функции для работы с
  * датой и временем</a> </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/main/functions/filter/checkfilterdates.php">CheckFilterDates</a> </li> </ul> <a
  * name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/main/reference/cdatabase/isdate.php
  * @author Bitrix
  */
 public static function IsDate($value, $format = false, $lang = false, $format_type = "SHORT")
 {
     if ($format === false) {
         $format = CLang::GetDateFormat($format_type, $lang);
     }
     return CheckDateTime($value, $format);
 }
Ejemplo n.º 16
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array();
     $select = "";
     $from1 = "";
     $from2 = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                 case "GUEST_ID":
                 case "ADV_ID":
                 case "STOP_LIST_ID":
                 case "USER_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match);
                     break;
                 case "COUNTRY_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S.COUNTRY_ID", $val, $match);
                     break;
                 case "CITY_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S.CITY_ID", $val, $match);
                     break;
                 case "DATE_START_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_FIRST>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_START_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_FIRST<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "DATE_END_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_LAST>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_END_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_LAST<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "IP":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.IP_LAST", $val, $match, array("."));
                     break;
                 case "REGISTERED":
                     $arSqlSearch[] = $val == "Y" ? "S.USER_ID>0" : "(S.USER_ID<=0 or S.USER_ID is null)";
                     break;
                 case "EVENTS1":
                     $arSqlSearch[] = "S.C_EVENTS>='" . intval($val) . "'";
                     break;
                 case "EVENTS2":
                     $arSqlSearch[] = "S.C_EVENTS<='" . intval($val) . "'";
                     break;
                 case "HITS1":
                     $arSqlSearch[] = "S.HITS>='" . intval($val) . "'";
                     break;
                 case "HITS2":
                     $arSqlSearch[] = "S.HITS<='" . intval($val) . "'";
                     break;
                 case "ADV":
                     if ($val == "Y") {
                         $arSqlSearch[] = "(S.ADV_ID>0 and S.ADV_ID is not null)";
                     } elseif ($val == "N") {
                         $arSqlSearch[] = "(S.ADV_ID<=0 or S.ADV_ID is null)";
                     }
                     break;
                 case "REFERER1":
                 case "REFERER2":
                 case "REFERER3":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match);
                     break;
                 case "USER_AGENT":
                     $val = preg_replace("/[\n\r]+/", " ", $val);
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.USER_AGENT", $val, $match);
                     break;
                 case "STOP":
                     $arSqlSearch[] = $val == "Y" ? "S.STOP_LIST_ID>0" : "(S.STOP_LIST_ID<=0 or S.STOP_LIST_ID is null)";
                     break;
                 case "COUNTRY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match);
                     $from2 = "INNER JOIN b_stat_country C ON (C.ID = S.COUNTRY_ID)";
                     break;
                 case "REGION":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match);
                     break;
                 case "CITY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match);
                     break;
                 case "URL_TO":
                 case "URL_LAST":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "ADV_BACK":
                 case "NEW_GUEST":
                 case "FAVORITES":
                 case "URL_LAST_404":
                 case "URL_TO_404":
                 case "USER_AUTH":
                     $arSqlSearch[] = $val == "Y" ? "S." . $key . "='Y'" : "S." . $key . "='N'";
                     break;
                 case "USER":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = "ifnull(S.USER_ID,0)>0";
                     $arSqlSearch[] = GetFilterQuery("S.USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match);
                     $from1 = "LEFT JOIN b_user A ON (A.ID = S.USER_ID)";
                     $select = " , A.LOGIN, concat(ifnull(A.NAME,''),' ',ifnull(A.LAST_NAME,'')) USER_NAME";
                     break;
                 case "LAST_SITE_ID":
                 case "FIRST_SITE_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY S.ID";
     } elseif ($by == "s_last_site_id") {
         $strSqlOrder = "ORDER BY S.LAST_SITE_ID";
     } elseif ($by == "s_first_site_id") {
         $strSqlOrder = "ORDER BY S.FIRST_SITE_ID";
     } elseif ($by == "s_date_first") {
         $strSqlOrder = "ORDER BY S.DATE_FIRST";
     } elseif ($by == "s_date_last") {
         $strSqlOrder = "ORDER BY S.DATE_LAST";
     } elseif ($by == "s_user_id") {
         $strSqlOrder = "ORDER BY S.USER_ID";
     } elseif ($by == "s_guest_id") {
         $strSqlOrder = "ORDER BY S.GUEST_ID";
     } elseif ($by == "s_ip") {
         $strSqlOrder = "ORDER BY S.IP_LAST";
     } elseif ($by == "s_hits") {
         $strSqlOrder = "ORDER BY S.HITS ";
     } elseif ($by == "s_events") {
         $strSqlOrder = "ORDER BY S.C_EVENTS ";
     } elseif ($by == "s_adv_id") {
         $strSqlOrder = "ORDER BY S.ADV_ID ";
     } elseif ($by == "s_country_id") {
         $strSqlOrder = "ORDER BY S.COUNTRY_ID ";
     } elseif ($by == "s_region_name") {
         $strSqlOrder = "ORDER BY CITY.REGION ";
     } elseif ($by == "s_city_id") {
         $strSqlOrder = "ORDER BY S.CITY_ID ";
     } elseif ($by == "s_url_last") {
         $strSqlOrder = "ORDER BY S.URL_LAST ";
     } elseif ($by == "s_url_to") {
         $strSqlOrder = "ORDER BY S.URL_TO ";
     } else {
         $by = "s_id";
         $strSqlOrder = "ORDER BY S.ID";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tS.ID,\n\t\t\t\tS.GUEST_ID,\n\t\t\t\tS.NEW_GUEST,\n\t\t\t\tS.USER_ID,\n\t\t\t\tS.USER_AUTH,\n\t\t\t\tS.C_EVENTS,\n\t\t\t\tS.HITS,\n\t\t\t\tS.FAVORITES,\n\t\t\t\tS.URL_FROM,\n\t\t\t\tS.URL_TO,\n\t\t\t\tS.URL_TO_404,\n\t\t\t\tS.URL_LAST,\n\t\t\t\tS.URL_LAST_404,\n\t\t\t\tS.USER_AGENT,\n\t\t\t\tS.IP_FIRST,\n\t\t\t\tS.IP_LAST,\n\t\t\t\tS.FIRST_HIT_ID,\n\t\t\t\tS.LAST_HIT_ID,\n\t\t\t\tS.PHPSESSID,\n\t\t\t\tS.ADV_ID,\n\t\t\t\tS.ADV_BACK,\n\t\t\t\tS.REFERER1,\n\t\t\t\tS.REFERER2,\n\t\t\t\tS.REFERER3,\n\t\t\t\tS.STOP_LIST_ID,\n\t\t\t\tS.COUNTRY_ID,\n\t\t\t\tCITY.REGION REGION_NAME,\n\t\t\t\tS.CITY_ID,\n\t\t\t\tCITY.NAME CITY_NAME,\n\t\t\t\tS.FIRST_SITE_ID,\n\t\t\t\tS.LAST_SITE_ID,\n\t\t\t\tUNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST) SESSION_TIME,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_FIRST") . " DATE_FIRST,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_LAST") . " DATE_LAST\n\t\t\t\t{$select}\n\t\t\tFROM\n\t\t\t\tb_stat_session S\n\t\t\t{$from1}\n\t\t\t{$from2}\n\t\t\t\tLEFT JOIN b_stat_city CITY ON (CITY.ID = S.CITY_ID)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\tLIMIT " . intval(COption::GetOptionString('statistic', 'RECORDS_LIMIT')) . "\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Ejemplo n.º 17
0
 function __CheckFields($arFields)
 {
     $aMsg = array();
     if (is_set($arFields, "ACTIVE_FROM") && CheckDateTime($arFields['ACTIVE_FROM'], 'DD.MM.YYYY') && is_set($arFields, "ACTIVE_TO") && CheckDateTime($arFields['ACTIVE_TO'], 'DD.MM.YYYY')) {
         $dateElementsFrom = explode(".", $arFields["ACTIVE_FROM"]);
         $_activeFrom = mktime(0, 0, 0, $dateElementsFrom[1], $dateElementsFrom[0], $dateElementsFrom[2]);
         $dateElementsTo = explode(".", $arFields["ACTIVE_TO"]);
         $_activeTo = mktime(0, 0, 0, $dateElementsTo[1], $dateElementsTo[0], $dateElementsTo[2]);
         if ($_activeTo <= $_activeFrom) {
             $aMsg[] = array("id" => "ACTIVE_TO", "text" => GetMessage("SUP_ST_ERR_DATE_INTERVAL"));
         }
     }
     if (is_set($arFields, "ACTIVE") && !in_array($arFields['ACTIVE'], array('Y', 'N'))) {
         $aMsg[] = array("id" => "ACTIVE", "text" => GetMessage("SUP_ST_ERR_ACTIVE"));
     }
     if (is_set($arFields, "SLA_ID") && IntVal($arFields['SLA_ID']) == 0) {
         $aMsg[] = array("id" => "SLA_ID", "text" => GetMessage("SUP_ST_ERR_SLA_ID"));
     }
     if (!empty($aMsg)) {
         $e = new CAdminException($aMsg);
         $GLOBALS["APPLICATION"]->ThrowException($e);
         return false;
     }
     return true;
 }
Ejemplo n.º 18
0
 function ImportUser()
 {
     if ($this->isErrorOccured) {
         return false;
     }
     $this->errorMessage = "";
     $defaultEmail = $this->GetDefaultEmail();
     if (!($arUser = $this->csv->FetchDelimiter())) {
         return false;
     }
     $arFields = array();
     foreach ($this->arHeader as $index => $key) {
         if (($f = trim($arUser[$index])) != '') {
             $arFields[$key] = $f;
         }
     }
     if (!array_key_exists("NAME", $arFields) || strlen($arFields["NAME"]) < 1) {
         $this->errorMessage = GetMessage("CSV_IMPORT_NO_NAME") . " (" . implode(", ", $arFields) . ").<br>";
         return true;
     }
     if (!array_key_exists("LAST_NAME", $arFields) || strlen($arFields["LAST_NAME"]) < 1) {
         $this->errorMessage = GetMessage("CSV_IMPORT_NO_LASTNAME") . " (" . implode(", ", $arFields) . ").<br>";
         return true;
     }
     if (!array_key_exists("PASSWORD", $arFields) || strlen($arFields["PASSWORD"]) < 1) {
         $arFields["PASSWORD"] = $this->GenerateUserPassword(6);
     }
     $arFields["CONFIRM_PASSWORD"] = $arFields["PASSWORD"];
     if (!array_key_exists("EMAIL", $arFields) || strlen($arFields["EMAIL"]) < 3 || !check_email($arFields["EMAIL"])) {
         $arFields["EMAIL"] = $defaultEmail;
     }
     if (!array_key_exists("LOGIN", $arFields)) {
         $arFields["LOGIN"] = ToLower($arFields["NAME"] . " " . $arFields["LAST_NAME"]);
     }
     if (array_key_exists("PERSONAL_BIRTHDAY", $arFields) && (strlen($arFields["PERSONAL_BIRTHDAY"]) < 2 || !CheckDateTime($arFields["PERSONAL_BIRTHDAY"]))) {
         unset($arFields["PERSONAL_BIRTHDAY"]);
     }
     if (array_key_exists("DATE_REGISTER", $arFields) && (strlen($arFields["DATE_REGISTER"]) < 2 || !CheckDateTime($arFields["DATE_REGISTER"]))) {
         unset($arFields["DATE_REGISTER"]);
     }
     if ($this->externalAuthID !== null && !array_key_exists("EXTERNAL_AUTH_ID", $arFields)) {
         $arFields["EXTERNAL_AUTH_ID"] = $this->externalAuthID;
     }
     if (!array_key_exists("XML_ID", $arFields)) {
         $arFields["XML_ID"] = md5(uniqid(rand(), true));
     }
     if (!array_key_exists("CHECKWORD", $arFields) || strlen($arFields["CHECKWORD"]) <= 0) {
         $arFields["CHECKWORD"] = md5(CMain::GetServerUniqID() . uniqid());
     }
     if ($this->imageFilePath !== null) {
         if (array_key_exists("PERSONAL_PHOTO", $arFields) && strlen($arFields["PERSONAL_PHOTO"]) > 0) {
             $arFile = CFile::MakeFileArray($this->imageFilePath . "/" . $arFields["PERSONAL_PHOTO"]);
             $arFile["MODULE_ID"] = "main";
             $arFields["PERSONAL_PHOTO"] = $arFile;
         }
         if (array_key_exists("WORK_LOGO", $arFields) && strlen($arFields["WORK_LOGO"]) > 0) {
             $arFile = CFile::MakeFileArray($this->imageFilePath . "/" . $arFields["WORK_LOGO"]);
             $arFile["MODULE_ID"] = "main";
             $arFields["WORK_LOGO"] = $arFile;
         }
     } else {
         unset($arFields["PERSONAL_PHOTO"]);
         unset($arFields["WORK_LOGO"]);
     }
     $arFields["GROUP_ID"] = $this->userGroups;
     $user = new CUser();
     $userID = (int) $user->Add($arFields);
     if ($userID <= 0) {
         if ($user->LAST_ERROR != '') {
             $this->errorMessage = $arFields["NAME"] . " " . $arFields["LAST_NAME"] . ": " . $user->LAST_ERROR;
         }
     }
     if ($userID <= 0 && $this->ignoreDuplicate === false) {
         $postFix = 2;
         $login = $arFields["LOGIN"];
         do {
             $rsUser = CUser::GetByLogin($arFields["LOGIN"]);
             if (!$rsUser->Fetch()) {
                 break;
             }
             $arFields["LOGIN"] = $login . $postFix;
             $userID = (int) $user->Add($arFields);
             if ($userID > 1) {
                 break;
             }
             $postFix++;
         } while (true);
     }
     if ($userID > 0) {
         if ($this->attachIBlockID > 0) {
             $iblockSectionID = $this->__GetIBlockSectionID($arFields);
             if ($iblockSectionID > 0) {
                 if (!$this->isUserPropertyCreate) {
                     $this->isUserPropertyCreate = $this->__CreateUserProperty();
                 }
                 $arUpdate = array();
                 $arUpdate[$this->userPropertyName] = array($iblockSectionID);
                 $user->Update($userID, $arUpdate);
             }
         }
         if ($this->callback !== null) {
             call_user_func_array($this->callback, array(&$arFields, &$userID));
         }
     }
     return true;
 }
Ejemplo n.º 19
0
 /**
  * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">ссылающихся сайтов (страниц)</a>.</p>
  *
  *
  *
  *
  * @param string &$by = "s_id" Поле для сортировки. В зависимости от группировки списка, набор
  * доступных значений данной переменной может быть различным. <ul>
  * <li>при группировке по ссылающейся странице (<i>filter</i>["<b>GROUP</b>"]="U"): <ul>
  * <li> <b>s_url_from</b> - ссылающаяся страница; </li> <li> <b>s_quantity</b> - количество
  * заходов с ссылающейся страницы; </li> <li> <b>s_average_hits</b> - среднее
  * количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a>,
  * производимое посетителями заходящими с той или ссылающейся
  * страницы. </li> </ul> </li> <li>при группировке по ссылающемуся домену
  * (<i>filter</i>["<b>GROUP</b>"]="S"): <ul> <li> <b>s_url_from</b> - ссылающийся домен; </li> <li>
  * <b>s_quantity</b> - количество заходов с ссылающегося домена; </li> <li>
  * <b>s_average_hits</b> - среднее количество хитов, производимое
  * посетителями. </li> </ul> </li> <li>когда группировка не установлена: <ul> <li>
  * <b>s_id</b> - ID записи; </li> <li> <b>s_site_id</b> - ID сайта, на который пришли; </li> <li>
  * <b>s_url_from</b> - ссылающаяся страница (с которой пришли); </li> <li> <b>s_url_to</b>
  * - страница на которую пришли; </li> <li> <b>s_date_hit</b> - дата; </li> <li>
  * <b>s_session_id</b> - ID сессии. </li> </ul> </li> </ul>
  *
  *
  *
  * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по
  * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul>
  *
  *
  *
  * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве
  * допустимы следующие ключи: <ul> <li> <b>ID</b> - ID записи; </li> <li>
  * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b>
  * будет искаться вхождение; </li> <li> <b>SESSION_ID</b> - ID сессии; </li> <li>
  * <b>SESSION_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по
  * <b>SESSION_ID</b> будет искаться вхождение; </li> <li> <b>DATE1</b> - начальное
  * значение интервала для поля "дата"; </li> <li> <b>DATE2</b> - конечное
  * значение интервала для поля "дата"; </li> <li> <b>FROM_PROTOCOL</b> - протокол
  * ссылающейся страницы; </li> <li> <b>FROM_PROTOCOL_EXACT_MATCH</b> - если значение
  * равно "Y", то при фильтрации по <b>FROM_PROTOCOL</b> будет искаться точное
  * совпадение; </li> <li> <b>FROM_DOMAIN</b> - домен ссылающейся страницы; </li> <li>
  * <b>FROM_DOMAIN_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
  * <b>FROM_DOMAIN</b> будет искаться точное совпадение; </li> <li> <b>FROM_PAGE</b> -
  * ссылающаяся страница; </li> <li> <b>FROM_PAGE_EXACT_MATCH</b> - если значение равно
  * "Y", то при фильтрации по <b>FROM_PAGE</b> будет искаться точное
  * совпадение; </li> <li> <b>FROM</b> - протокол + домен + ссылающаяся страница;
  * </li> <li> <b>FROM_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
  * <b>FROM</b> будет искаться точное совпадение; </li> <li> <b>TO</b>* - страница на
  * которую пришли; </li> <li> <b>TO_EXACT_MATCH</b> - если значение равно "Y", то при
  * фильтрации по <b>TO</b> будет искаться точное совпадение; </li> <li>
  * <b>TO_404</b> - была ли <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a>
  * на странице, на которую пришли, возможные значения: <ul> <li> <b>Y</b> -
  * была; </li> <li> <b>N</b> - не была. </li> </ul> </li> <li> <b>SITE_ID</b> - ID сайта на который
  * пришли; </li> <li> <b>GROUP</b> - группировка результирующего списка;
  * возможные значения: <ul> <li> <b>S</b> - группировка по ссылающемуся
  * домену (сайту); </li> <li> <b>U</b> - группировка по ссылающейся странице.
  * </li> </ul> </li> </ul> * - допускается <a
  * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a>
  *
  *
  *
  * @param bool &$is_filtered  Флаг отфильтрованности результирующего списка. Если значение
  * равно "true", то список был отфильтрован.
  *
  *
  *
  * @param int &$total  Суммарные количество заходов с ссылающихся страниц.
  *
  *
  *
  * @param string &$group_by  Группировка результирующего списка. Возможные значения: <ul> <li>
  * <b>U</b> - группировка по ссылающейся странице; </li> <li> <b>S</b> -
  * группировка по ссылающемуся домену. </li> </ul>
  *
  *
  *
  * @param int &$max  Количество заходов с самой популярной ссылающейся страницы.
  *
  *
  *
  * @return CDBResult 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // отфильтруем только заходы с доменов "google"
  * // сгруппировав по ссылающемуся домену
  * $arFilter = array(
  *     "FROM_DOMAIN"  =&gt; "google",
  *     "GROUP"        =&gt; "S"
  *     );
  * 
  * // получим список записей
  * $rs = <b>CReferer::GetList</b>(
  *     ($by = "s_url_from"), 
  *     ($order = "desc"), 
  *     $arFilter, 
  *     $is_filtered,
  *     $total,
  *     $group_by,
  *     $max
  *     );
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">Термин "Ссылающийся
  * сайт (страница)"</a> </li> </ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/creferer/getlist.php
  * @author Bitrix
  */
 public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, &$total, &$grby, &$max)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     global $grby, $total;
     $DB = CDatabase::GetModuleConnection('statistic');
     $group = false;
     $strSqlGroup = "GROUP BY L.PROTOCOL, L.SITE_NAME, L.URL_FROM, R.HITS, R.SESSIONS";
     $url_from = $DB->Concat("L.PROTOCOL", "L.SITE_NAME", "L.URL_FROM");
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                 case "SESSION_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L." . $key, $val, $match);
                     break;
                 case "DATE1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "L.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "L.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
                     }
                     break;
                 case "FROM_PROTOCOL":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.PROTOCOL", $val, $match, array("/", "\\", ":"));
                     break;
                 case "FROM_DOMAIN":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.SITE_NAME", $val, $match, array("."));
                     break;
                 case "FROM_PAGE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.URL_FROM", $val, $match, array("/", "\\", ".", "?", "#", ":", ":"));
                     break;
                 case "FROM":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery($url_from, $val, $match, array("/", "\\", ".", "?", "#", ":"), "N", "N");
                     break;
                 case "TO":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("L.URL_TO", $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "TO_404":
                     $arSqlSearch[] = $val == "Y" ? "L.URL_TO_404='Y'" : "L.URL_TO_404='N'";
                     break;
                 case "GROUP":
                     $group = true;
                     if ($val == "S") {
                         $find_group = "S";
                         $strSqlGroup = "GROUP BY L.SITE_NAME, R.HITS, R.SESSIONS";
                         $url_from = "L.SITE_NAME";
                     } else {
                         $find_group = "U";
                     }
                     break;
                 case "SITE_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("L.SITE_ID", $val, $match);
                     break;
             }
         }
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $grby = $find_group == "U" || $find_group == "S" ? $find_group : "";
     $strSqlOrder = "";
     if (strlen($grby) <= 0) {
         if ($by == "s_id") {
             $strSqlOrder = " ORDER BY L.ID ";
         } elseif ($by == "s_site_id") {
             $strSqlOrder = " ORDER BY L.SITE_ID ";
         } elseif ($by == "s_url_from") {
             $strSqlOrder = " ORDER BY URL_FROM ";
         } elseif ($by == "s_url_to") {
             $strSqlOrder = " ORDER BY L.URL_TO ";
         } elseif ($by == "s_date_hit") {
             $strSqlOrder = " ORDER BY L.DATE_HIT ";
         } elseif ($by == "s_session_id") {
             $strSqlOrder = " ORDER BY L.SESSION_ID ";
         } else {
             $by = "s_id";
             $strSqlOrder = "ORDER BY L.ID";
         }
         if ($order != "asc") {
             $strSqlOrder .= " desc ";
             $order = "desc";
         }
         $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\t" . $url_from . " as URL_FROM,\n\t\t\t\t\tL.ID,\n\t\t\t\t\tL.SESSION_ID,\n\t\t\t\t\tL.SITE_ID,\n\t\t\t\t\t" . $DB->DateToCharFunction("L.DATE_HIT") . " DATE_HIT,\n\t\t\t\t\tL.URL_TO,\n\t\t\t\t\tL.URL_TO_404\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t";
     } elseif (IsFiltered($strSqlSearch) || $grby == "U") {
         if ($by == "s_url_from") {
             $strSqlOrder = "ORDER BY URL_FROM";
         } elseif ($by == "s_quantity") {
             $strSqlOrder = "ORDER BY QUANTITY";
         } elseif ($by == "s_average_hits") {
             $strSqlOrder = "ORDER BY AVERAGE_HITS";
         } else {
             $by = "s_quantity";
             $strSqlOrder = "ORDER BY QUANTITY";
         }
         if ($order != "asc") {
             $strSqlOrder .= " desc ";
             $order = "desc";
         }
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tcount(L.ID) as COUNTER\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\t\tLEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlGroup . "\n\t\t\t";
         $c = $DB->Query($strSql, false, $err_mess . __LINE__);
         $total = 0;
         $arrCount = array();
         while ($cr = $c->Fetch()) {
             $total += intval($cr["COUNTER"]);
             $arrCount[] = intval($cr["COUNTER"]);
         }
         if (count($arrCount) > 0) {
             $max = max($arrCount);
         }
         $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\t" . $url_from . " URL_FROM,\n\t\t\t\t\tcount(L.ID) QUANTITY,\n\t\t\t\t\t(count(L.ID)*100)/{$total} C_PERCENT,\n\t\t\t\t\tR.HITS/R.SESSIONS AVERAGE_HITS\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\t\tLEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlGroup . "\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t";
     } elseif ($grby == "S") {
         if ($by == "s_url_from") {
             $strSqlOrder = "ORDER BY URL_FROM";
         } elseif ($by == "s_quantity") {
             $strSqlOrder = "ORDER BY QUANTITY";
         } elseif ($by == "s_average_hits") {
             $strSqlOrder = "ORDER BY AVERAGE_HITS";
         } else {
             $by = "s_quantity";
             $strSqlOrder = "ORDER BY QUANTITY";
         }
         if ($order != "asc") {
             $strSqlOrder .= " desc ";
             $order = "desc";
         }
         $strSql = "SELECT sum(R.SESSIONS) TOTAL, max(R.SESSIONS) MAX FROM b_stat_referer R";
         $c = $DB->Query($strSql, false, $err_mess . __LINE__);
         $cr = $c->Fetch();
         $total = intval($cr["TOTAL"]);
         $max = intval($cr["MAX"]);
         $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\tR.SITE_NAME URL_FROM,\n\t\t\t\t\tsum(R.SESSIONS) QUANTITY,\n\t\t\t\t\t(sum(R.SESSIONS)*100)/{$total} C_PERCENT,\n\t\t\t\t\tsum(R.HITS)/sum(R.SESSIONS) AVERAGE_HITS\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer R\n\t\t\t\tGROUP BY R.SITE_NAME\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t";
     }
     $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch) || $group;
     return $res;
 }
Ejemplo n.º 20
0
 function CheckFields($arUserField, $value)
 {
     $aMsg = array();
     if (is_string($value) && !empty($value) && !CheckDateTime($value, FORMAT_DATE)) {
         $aMsg[] = array("id" => $arUserField["FIELD_NAME"], "text" => GetMessage("USER_TYPE_D_ERROR", array("#FIELD_NAME#" => $arUserField["EDIT_FORM_LABEL"] != '' ? $arUserField["EDIT_FORM_LABEL"] : $arUserField["FIELD_NAME"])));
     }
     return $aMsg;
 }
Ejemplo n.º 21
0
                        }
                        $arRecord[$key] .= '<a href="/bitrix/tools/bizproc_show_file.php?bp_id=' . $arParams['BP_ID'] . '&iblock_id=' . $arParams['BLOCK_ID'] . '&f=' . urlencode($key) . '&i=' . $file['ID'] . '">' . htmlspecialcharsbx($file['ORIGINAL_NAME']) . '</a>';
                    }
                }
            }
            if (is_array($arRecord[$key])) {
                $ar = $arRecord[$key];
                $arRecord[$key] = "";
                foreach ($ar as $val) {
                    if (strlen($arRecord[$key]) > 0) {
                        $arRecord[$key] .= ", ";
                    }
                    $arRecord[$key] .= $val;
                }
            }
            if (CheckDateTime($arRecord[$key])) {
                $arRecord[$key] = FormatDateFromDB($arRecord[$key]);
            }
        }
        $arResult["BP"] = $arRecord;
    } else {
        $arResult["FatalErrorMessage"] .= GetMessage("BPWC_WLC_WRONG_BP") . ". ";
    }
}
if (strlen($arResult["FatalErrorMessage"]) <= 0) {
    $arCurrentUserGroups = $GLOBALS["USER"]->GetUserGroupArray();
    if ("user_" . $GLOBALS["USER"]->GetID() == $arResult["BP"]["CREATED_BY"]) {
        $arCurrentUserGroups[] = "author";
    }
    $documentId = array("bizproc", "CBPVirtualDocument", $arResult["BP"]["ID"]);
    $arDocumentStates = CBPDocument::GetDocumentStates($documentType, $documentId);
Ejemplo n.º 22
0
 function CheckFields($arFields, $ID = false)
 {
     global $DB;
     $this->LAST_ERROR = "";
     if (is_set($arFields, "NAME") && strlen($arFields["NAME"]) < 3) {
         $this->LAST_ERROR .= GetMessage("BAD_GROUP_NAME") . "<br>";
     }
     if (is_array($arFields["USER_ID"]) && count($arFields["USER_ID"]) > 0) {
         if (is_array($arFields["USER_ID"][0]) && count($arFields["USER_ID"][0]) > 0) {
             foreach ($arFields["USER_ID"] as $arUser) {
                 if (strlen($arUser["DATE_ACTIVE_FROM"]) > 0 && !CheckDateTime($arUser["DATE_ACTIVE_FROM"])) {
                     $error = str_replace("#USER_ID#", $arUser["USER_ID"], GetMessage("WRONG_USER_DATE_ACTIVE_FROM"));
                     $this->LAST_ERROR .= $error . "<br>";
                 }
                 if (strlen($arUser["DATE_ACTIVE_TO"]) > 0 && !CheckDateTime($arUser["DATE_ACTIVE_TO"])) {
                     $error = str_replace("#USER_ID#", $arUser["USER_ID"], GetMessage("WRONG_USER_DATE_ACTIVE_TO"));
                     $this->LAST_ERROR .= $error . "<br>";
                 }
             }
         }
     }
     if (isset($arFields['STRING_ID']) && strlen($arFields['STRING_ID']) > 0) {
         $sql_str = "SELECT G.ID\n\t\t\t\t\tFROM b_group G\n\t\t\t\t\tWHERE G.STRING_ID='" . $DB->ForSql($arFields['STRING_ID']) . "'";
         $z = $DB->Query($sql_str, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
         if ($r = $z->Fetch()) {
             if ($ID === false || $ID != $r['ID']) {
                 $this->LAST_ERROR .= GetMessage('MAIN_ERROR_STRING_ID') . "<br>";
             }
         }
     }
     if (strlen($this->LAST_ERROR) > 0) {
         return false;
     }
     return true;
 }
Ejemplo n.º 23
0
 /**
  * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>. Число выводимых строк определяется в поле <b>Максимальное кол-во показываемых записей в таблицах</b> в <a href="http://dev.1c-bitrix.ru/user_help/statistic/settings.php" >настройках модуля</a> Веб-аналитика.</p>
  *
  *
  * @param string &$by = "s_id" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID хита; </li>
  * <li> <b>s_site_id</b> - ID сайта; </li> <li> <b>s_session_id</b> - ID <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессии</a>; </li> <li> <b>s_date_hit</b> -
  * время хита; </li> <li> <b>s_user_id</b> - ID <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user">пользователя</a> под которым
  * был авторизован посетитель (в момент хита или до того); </li> <li>
  * <b>s_guest_id</b> - ID <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителя</a>;
  * </li> <li> <b>s_ip</b> - <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#ip">IP адрес</a>
  * посетителя; </li> <li> <b>s_url</b> - страница хита; </li> <li> <b>s_country_id</b> - ID
  * страны посетителя. </li> </ul>
  *
  * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по
  * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul>
  *
  * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве
  * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID хита; </li> <li> <b>ID_EXACT_MATCH</b> -
  * если значение равно "N", то при фильтрации по <b>ID</b> будет искаться
  * вхождение; </li> <li> <b>GUEST_ID</b>* - ID посетителя; </li> <li> <b>GUEST_ID_EXACT_MATCH</b> -
  * если значение равно "N", то при фильтрации по <b>GUEST_ID</b> будет
  * искаться вхождение; </li> <li> <b>NEW_GUEST</b> - флаг "новый посетитель",
  * возможные значения: <ul> <li> <b>Y</b> - посетитель впервые на портале; </li>
  * <li> <b>N</b> - посетитель уже посещал ранее портал. </li> </ul> </li> <li>
  * <b>SESSION_ID</b>* - ID сессии; </li> <li> <b>SESSION_ID_EXACT_MATCH</b> - если значение равно
  * "N", то при фильтрации по <b>SESSION_ID</b> будет искаться вхождение; </li> <li>
  * <b>STOP_LIST_ID</b>* - ID записи <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#stop_list">стоп-листа</a> под которую
  * попал посетитель (если это имело место быть); </li> <li>
  * <b>STOP_LIST_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по
  * <b>STOP_LIST_ID</b> будет искаться вхождение; </li> <li> <b>URL</b>* - страница хита;
  * </li> <li> <b>URL_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
  * <b>URL</b> будет искаться точное совпадение; </li> <li> <b>URL_404</b> - была ли <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> на странице хита <ul>
  * <li> <b>Y</b> - была; </li> <li> <b>N</b> - не было. </li> </ul> </li> <li> <b>USER</b>* - ID, логин,
  * имя, фамилия пользователя под которым был авторизован посетитель
  * в момент хита или до него; </li> <li> <b>USER_EXACT_MATCH</b> - если значение равно
  * "Y", то при фильтрации по <b>USER</b> будет искаться точное совпадение;
  * </li> <li> <b>REGISTERED</b> - флаг "был ли авторизован посетитель в момент
  * хита или до этого", возможные значения: <ul> <li> <b>Y</b> - был; </li> <li> <b>N</b>
  * - не был. </li> </ul> </li> <li> <b>DATE_1</b> - начальное значение интервала даты
  * хита; </li> <li> <b>DATE_2</b> - конечное значение интервала даты хита; </li> <li>
  * <b>IP</b>* - IP адрес посетителя в момент хита; </li> <li> <b>IP_EXACT_MATCH</b> - если
  * значение равно "Y", то при фильтрации по <b>IP</b> будет искаться
  * точное совпадение; </li> <li> <b>USER_AGENT</b>* - <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user_agent">UserAgent</a> посетителя в
  * момент хита; </li> <li> <b>USER_AGENT_EXACT_MATCH</b> - если значение равно "Y", то при
  * фильтрации по <b>USER_AGENT</b> будет искаться точное совпадение; </li> <li>
  * <b>COUNTRY_ID</b>* - ID страны посетителя в момент хита; </li> <li>
  * <b>COUNTRY_ID_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
  * <b>COUNTRY_ID</b> будет искаться точное совпадение; </li> <li> <b>COUNTRY</b>* -
  * название страны; </li> <li> <b>COUNTRY_EXACT_MATCH</b> - если значение равно "Y", то
  * при фильтрации по <b>COUNTRY</b> будет искаться точное совпадение; </li>
  * <li> <b>COOKIE</b>* - содержимое <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#cookie">Cookie</a> в момент хита; </li> <li>
  * <b>COOKIE_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
  * <b>COOKIE</b> будет искаться точное совпадение; </li> <li> <b>STOP</b> - <ul> <li> <b>Y</b>
  * - был; </li> <li> <b>N</b> - не был. </li> </ul> </li> <li> <b>SITE_ID</b>* - ID сайта; </li> <li>
  * <b>SITE_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по
  * <b>SITE_ID</b> будет искаться вхождение. </li> </ul> <br> * - допускается <a
  * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a>
  *
  * @param bool &$is_filtered  Флаг отфильтрованности списка хитов. Если значение равно "true", то
  * список был отфильтрован.
  *
  * @return CDBResult 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // выберем хиты сессии #1056
  * $arFilter = array(
  *     "SESSION_ID" =&gt; 1056
  *     );
  * 
  * // получим список записей
  * $rs = <b>CHit::GetList</b>(
  *     ($by = "s_id"), 
  *     ($order = "desc"), 
  *     $arFilter, 
  *     $is_filtered
  *     );
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">Термин "Хит"</a> </li> </ul> <a
  * name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/chit/getlist.php
  * @author Bitrix
  */
 public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                 case "GUEST_ID":
                 case "SESSION_ID":
                 case "STOP_LIST_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match);
                     break;
                 case "URL":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H.URL", $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "URL_404":
                 case "NEW_GUEST":
                     $arSqlSearch[] = $val == "Y" ? "H." . $key . "='Y'" : "H." . $key . "='N'";
                     break;
                 case "REGISTERED":
                     $arSqlSearch[] = $val == "Y" ? "H.USER_ID>0" : "(H.USER_ID<=0 or H.USER_ID is null)";
                     break;
                 case "DATE_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "H.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "H.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
                     }
                     break;
                 case "IP":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H.IP", $val, $match, array("."));
                     break;
                 case "USER_AGENT":
                 case "COUNTRY_ID":
                 case "CITY_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match);
                     break;
                 case "COOKIE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H.COOKIES", $val, $match);
                     break;
                 case "USER":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = $DB->IsNull("H.USER_ID", "0") . ">0";
                     $arSqlSearch[] = GetFilterQuery("H.USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match);
                     $select = ", A.LOGIN, " . $DB->Concat($DB->IsNull("A.NAME", "''"), "' '", $DB->IsNull("A.LAST_NAME", "''")) . " USER_NAME";
                     $from1 = "LEFT JOIN b_user A ON (A.ID = H.USER_ID)";
                     break;
                 case "COUNTRY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match);
                     $from2 = "INNER JOIN b_stat_country C ON (C.ID = H.COUNTRY_ID)";
                     break;
                 case "REGION":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match);
                     break;
                 case "CITY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match);
                     break;
                 case "STOP":
                     $arSqlSearch[] = $val == "Y" ? "H.STOP_LIST_ID>0" : "(H.STOP_LIST_ID<=0 or H.STOP_LIST_ID is null)";
                     break;
                 case "SITE_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("H.SITE_ID", $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY H.ID";
     } elseif ($by == "s_site_id") {
         $strSqlOrder = "ORDER BY H.SITE_ID";
     } elseif ($by == "s_session_id") {
         $strSqlOrder = "ORDER BY H.SESSION_ID";
     } elseif ($by == "s_date_hit") {
         $strSqlOrder = "ORDER BY H.DATE_HIT";
     } elseif ($by == "s_user_id") {
         $strSqlOrder = "ORDER BY H.USER_ID";
     } elseif ($by == "s_guest_id") {
         $strSqlOrder = "ORDER BY H.GUEST_ID";
     } elseif ($by == "s_ip") {
         $strSqlOrder = "ORDER BY H.IP";
     } elseif ($by == "s_url") {
         $strSqlOrder = "ORDER BY H.URL ";
     } elseif ($by == "s_country_id") {
         $strSqlOrder = "ORDER BY H.COUNTRY_ID ";
     } elseif ($by == "s_region_name") {
         $strSqlOrder = "ORDER BY CITY.REGION ";
     } elseif ($by == "s_city_id") {
         $strSqlOrder = "ORDER BY H.CITY_ID ";
     } else {
         $by = "s_id";
         $strSqlOrder = "ORDER BY H.ID";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tH.ID,\n\t\t\t\tH.SESSION_ID,\n\t\t\t\tH.GUEST_ID,\n\t\t\t\tH.NEW_GUEST,\n\t\t\t\tH.USER_ID,\n\t\t\t\tH.USER_AUTH,\n\t\t\t\tH.URL,\n\t\t\t\tH.URL_404,\n\t\t\t\tH.URL_FROM,\n\t\t\t\tH.IP,\n\t\t\t\tH.METHOD,\n\t\t\t\tH.COOKIES,\n\t\t\t\tH.USER_AGENT,\n\t\t\t\tH.STOP_LIST_ID,\n\t\t\t\tH.COUNTRY_ID,\n\t\t\t\tH.CITY_ID,\n\t\t\t\tCITY.REGION REGION_NAME,\n\t\t\t\tCITY.NAME CITY_NAME,\n\t\t\t\tH.SITE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("H.DATE_HIT") . " DATE_HIT\n\t\t\t\t" . $select . "\n\t\t\tFROM\n\t\t\t\tb_stat_hit H\n\t\t\t\tLEFT JOIN b_stat_city CITY ON (CITY.ID = H.CITY_ID)\n\t\t\t" . $from1 . "\n\t\t\t" . $from2 . "\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\t" . $strSqlOrder . "\n\t\t";
     $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Ejemplo n.º 24
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                 case "SEARCHER_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match);
                     break;
                 case "URL":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H.URL", $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "URL_404":
                     $arSqlSearch[] = $val == "Y" ? "H.URL_404='Y'" : "H.URL_404='N'";
                     break;
                 case "SEARCHER":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.NAME", $val, $match);
                     break;
                 case "DATE1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "H.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "H.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
                     }
                     break;
                 case "IP":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H.IP", $val, $match, array("."));
                     break;
                 case "USER_AGENT":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("H.USER_AGENT", $val, $match);
                     break;
                 case "SITE_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("H.SITE_ID", $val, $match);
                     break;
             }
         }
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY H.ID";
     } elseif ($by == "s_site_id") {
         $strSqlOrder = "ORDER BY H.SITE_ID";
     } elseif ($by == "s_date_hit") {
         $strSqlOrder = "ORDER BY H.DATE_HIT";
     } elseif ($by == "s_searcher_id") {
         $strSqlOrder = "ORDER BY H.SEARCHER_ID";
     } elseif ($by == "s_user_agent") {
         $strSqlOrder = "ORDER BY H.USER_AGENT";
     } elseif ($by == "s_ip") {
         $strSqlOrder = "ORDER BY H.IP";
     } elseif ($by == "s_url") {
         $strSqlOrder = "ORDER BY H.URL ";
     } else {
         $by = "s_date_hit";
         $strSqlOrder = "ORDER BY H.DATE_HIT";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tH.ID, H.SEARCHER_ID, H.URL, H.URL_404, H.IP, H.USER_AGENT, H.HIT_KEEP_DAYS, H.SITE_ID,\n\t\t\t\tS.NAME SEARCHER_NAME,\n\t\t\t\t" . $DB->DateToCharFunction("H.DATE_HIT") . " DATE_HIT\n\t\t\tFROM\n\t\t\t\tb_stat_searcher_hit H\n\t\t\tINNER JOIN b_stat_searcher S ON (S.ID = H.SEARCHER_ID)\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\t" . $strSqlOrder . "\n\t\t";
     $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Ejemplo n.º 25
0
 function GetMessageDynamicList(&$by, &$order, $arFilter = array())
 {
     $err_mess = CTicket::err_mess() . "<br>Function: GetMessageDynamicList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         $filterKeys = array_keys($arFilter);
         for ($i = 0; $i < count($filterKeys); $i++) {
             $key = $filterKeys[$i];
             $val = $arFilter[$filterKeys[$i]];
             if (is_array($val) && count($val) <= 0 || !is_array($val) && (strlen($val) <= 0 || $val === 'NOT_REF')) {
                 continue;
             }
             $matchValueSet = in_array($key . "_EXACT_MATCH", $filterKeys) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "SITE":
                 case "SITE_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T.SITE_ID", $val, $match);
                     break;
                 case "DATE_CREATE_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "M.DATE_CREATE>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_CREATE_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "M.DATE_CREATE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "OWNER":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("M.OWNER_USER_ID, U.LOGIN, U.LAST_NAME, U.NAME", $val, $match);
                     break;
                 case "OWNER_ID":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "M.OWNER_USER_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(M.OWNER_USER_ID is null or M.OWNER_USER_ID=0)";
                     }
                     break;
                 case "IS_HIDDEN":
                 case "IS_LOG":
                 case "IS_OVERDUE":
                     $arSqlSearch[] = $val == "Y" ? "M." . $key . "='Y'" : "M." . $key . "='N'";
                     break;
                 case "SLA_ID":
                 case "SLA":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, $match);
                     break;
                 case "CATEGORY_ID":
                 case "CATEGORY":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.CATEGORY_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.CATEGORY_ID is null or T.CATEGORY_ID=0)";
                     }
                     break;
                 case "CRITICALITY_ID":
                 case "CRITICALITY":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.CRITICALITY_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)";
                     }
                     break;
                 case "STATUS_ID":
                 case "STATUS":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.STATUS_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.STATUS_ID is null or T.STATUS_ID=0)";
                     }
                     break;
                 case "MARK_ID":
                 case "MARK":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.MARK_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.MARK_ID is null or T.MARK_ID=0)";
                     }
                     break;
                 case "SOURCE_ID":
                 case "SOURCE":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.SOURCE_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.SOURCE_ID is null or T.SOURCE_ID=0)";
                     }
                     break;
                 case "DIFFICULTY_ID":
                 case "DIFFICULTY":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.DIFFICULTY_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)";
                     }
                     break;
             }
         }
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     if ($by == "s_date_create") {
         $strSqlOrder = "ORDER BY M.DATE_CREATE";
     } else {
         $by = "s_date_create";
         $strSqlOrder = "ORDER BY M.DATE_CREATE";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tcount(M.ID)\t\t\t\t\t\t\t\tCOUNTER,\n\t\t\t\tsum(if(M.EXPIRE_AGENT_DONE='Y', 1, 0))\tCOUNTER_OVERDUE,\n\t\t\t\tDAYOFMONTH(M.DAY_CREATE)\t\t\t\tCREATE_DAY,\n\t\t\t\tMONTH(M.DAY_CREATE)\t\t\t\t\t\tCREATE_MONTH,\n\t\t\t\tYEAR(M.DAY_CREATE)\t\t\t\t\t\tCREATE_YEAR\n\t\t\tFROM\n\t\t\t\tb_ticket_message M\n\t\t\tINNER JOIN b_ticket T ON (T.ID = M.TICKET_ID)\n\t\t\tLEFT JOIN b_user U ON (M.OWNER_USER_ID = U.ID)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\tGROUP BY\n\t\t\t\tTO_DAYS(M.DAY_CREATE)\n\t\t\t{$strSqlOrder}\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     return $res;
 }
Ejemplo n.º 26
0
 /**
  * <p>Возвращает количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a>, <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#host">хостов</a>, <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессий</a>, <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>, <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event">событий</a> за весь период ведения статистики, за последние 3 дня, а также за произвольный указанный интервал времени.</p> <p class="note"><b>Примечание</b>: при фильтрации по сайту (<i>filter</i>[<b>SITE_ID</b>]), будут доступны только данные по хитам, хостам, сессиям, событиям. Данные по посетителям будут отсутствовать, т.к. текущая версия модуля предполагает, что посетитель один на весь портал.</p>
  *
  *
  * @param array $arrayfilter = array() Массив для фильтрации результирующего списка. В массиве
  * допустимы следующие ключи: <ul> <li> <b>SITE_ID</b> - ID сайта для которого
  * необходимо получить статистику; </li> <li> <b>DATE1</b> - начальная дата; </li>
  * <li> <b>DATE2</b> - конечная дата. </li> </ul>
  *
  * @return array <p>В случае если не установлена фильтрация по сайту, то структура
  * возвращаемого массива будет следующей:</p> <pre class="syntax">Array ( [TOTAL_HITS]
  * =&gt; суммарное количество хитов за все время ведения статистики
  * [TOTAL_SESSIONS] =&gt; суммарное количество сессий за все время ведения
  * статистики [TOTAL_EVENTS] =&gt; суммарное количество событий за все время
  * ведения статистики [TOTAL_HOSTS] =&gt; суммарное количество хостов за все
  * время ведения статистики [TOTAL_GUESTS] =&gt; суммарное количество
  * посетителей за все время ведения статистики [TOTAL_FAVORITES] =&gt;
  * суммарное количество посетителей, добавивших сайт в "<a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#favorites">Избранное</a>" за все время
  * ведения статистики [TODAY_HITS] =&gt; количество хитов за сегодня
  * [TODAY_SESSIONS] =&gt; количество сессий за сегодня [TODAY_EVENTS] =&gt; количество
  * событий за сегодня [TODAY_HOSTS] =&gt; количество хостов за сегодня
  * [TODAY_GUESTS] =&gt; суммарное количество посетителей за сегодня
  * [TODAY_NEW_GUESTS] =&gt; количество <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#new_guest">новых посетителей</a> за
  * сегодня [TODAY_FAVORITES] =&gt; количество посетителей, добавивших сайт в
  * "Избранное", за сегодня [YESTERDAY_HITS] =&gt; количество хитов за вчера
  * [YESTERDAY_SESSIONS] =&gt; количество сессий за вчера [YESTERDAY_EVENTS] =&gt;
  * количество событий за вчера [YESTERDAY_HOSTS] =&gt; количество хостов за
  * вчера [YESTERDAY_GUESTS] =&gt; суммарное количество посетителей за вчера
  * [YESTERDAY_NEW_GUESTS] =&gt; количество новых посетителей за вчера
  * [YESTERDAY_FAVORITES] =&gt; количество посетителей, добавивших сайт в
  * "Избранное", за вчера [B_YESTERDAY_HITS] =&gt; количество хитов за позавчера
  * [B_YESTERDAY_SESSIONS] =&gt; количество сессий за позавчера [B_YESTERDAY_EVENTS] =&gt;
  * количество событий за позавчера [B_YESTERDAY_HOSTS] =&gt; количество хостов
  * за позавчера [B_YESTERDAY_GUESTS] =&gt; суммарное количество посетителей за
  * позавчера [B_YESTERDAY_NEW_GUESTS] =&gt; количество новых посетителей за
  * позавчера [B_YESTERDAY_FAVORITES] =&gt; количество посетителей, добавивших
  * сайт в "Избранное", за позавчера [PERIOD_HITS] =&gt; количество хитов за
  * установленный период времени (<i>filter</i>[<b>DATE1</b>], <i>filter</i>[<b>DATE2</b>])
  * [PERIOD_SESSIONS] =&gt; количество сессий за установленный период времени
  * [PERIOD_EVENTS] =&gt; количество событий за установленный период времени
  * [PERIOD_NEW_GUESTS] =&gt; количество новых посетителей за установленный
  * период времени [PERIOD_FAVORITES] =&gt; количество посетителей, добавивших
  * сайт в "Избранное", за установленный период времени [ONLINE_GUESTS] =&gt;
  * количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#online">посетителей в
  * online</a> )</pre> <p></p>
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // получим данные по посещаемости сайта
  * $arr = <b>CTraffic::GetCommonValues</b>();
  * 
  * echo "Всего хитов: ".$arr["TOTAL_HITS"];
  * echo "Сегодня хитов: ".$arr["TODAY_HITS"];
  * 
  * echo "Всего хостов: ".$arr["TOTAL_HOSTS"];
  * echo "Сегодня хостов: ".$arr["TODAY_HOSTS"];
  * 
  * echo "Всего посетителей: ".$arr["TOTAL_GUESTS"];
  * echo "Сегодня посетителей: ".$arr["TODAY_GUESTS"];
  * echo "Посетителей в онлайн: ".$arr["ONLINE_GUESTS"];
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/classes/cuseronline/getguestcount.php">CUserOnline::GetGuestCount</a>
  * </li> <li> <a href="http://www.1c-bitrix.ru/user_help/statistic/stat_list.php">Отчет "Сводная
  * статистика"</a> </li> </ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/ctraffic/getcommonvalues.php
  * @author Bitrix
  */
 public static function GetCommonValues($arFilter = array(), $bIgnoreErrors = false)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $site_id = $arFilter["SITE_ID"];
     if (strlen($site_id) > 0 && $site_id != "NOT_REF") {
         $site_filter = true;
         $strSqlSearch = " and SITE_ID = '" . $DB->ForSql($site_id, 2) . "' ";
     } else {
         $site_filter = false;
         $strSqlSearch = "";
     }
     $date1 = $arFilter["DATE1"];
     $date2 = $arFilter["DATE2"];
     if (strlen($date1) > 0 && CheckDateTime($date1)) {
         $is_filtered = true;
         $date_from = MkDateTime(ConvertDateTime($date1, "D.M.Y"), "d.m.Y");
         if (strlen($date2) > 0 && CheckDateTime($date2)) {
             $date_to = MkDateTime(ConvertDateTime($date2, "D.M.Y") . " 23:59", "d.m.Y H:i");
             $strSqlPeriod = "sum(if(DATE_STAT<FROM_UNIXTIME('{$date_from}'),0, if(DATE_STAT>FROM_UNIXTIME('{$date_to}'),0,";
             $strT = ")))";
         } else {
             $strSqlPeriod = "sum(if(DATE_STAT<FROM_UNIXTIME('{$date_from}'),0,";
             $strT = "))";
         }
     } elseif (strlen($date2) > 0 && CheckDateTime($date2)) {
         $is_filtered = true;
         $date_to = MkDateTime(ConvertDateTime($date2, "D.M.Y") . " 23:59", "d.m.Y H:i");
         $strSqlPeriod = "sum(if(DATE_STAT>FROM_UNIXTIME('{$date_to}'),0,";
         $strT = "))";
     } else {
         $is_filtered = false;
         $strSqlPeriod = "";
         $strT = "";
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tsum(HITS)\t\t\t\t\t\t\tTOTAL_HITS,\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),HITS,0))\t\tTODAY_HITS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,HITS,0))\t\tYESTERDAY_HITS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,HITS,0))\t\tB_YESTERDAY_HITS,\n\n\t\t\t\tsum(SESSIONS)\t\t\t\t\t\t\tTOTAL_SESSIONS,\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),SESSIONS,0))\tTODAY_SESSIONS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,SESSIONS,0))\tYESTERDAY_SESSIONS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,SESSIONS,0))\tB_YESTERDAY_SESSIONS,\n\n\t\t\t\tsum(C_EVENTS)\t\t\t\t\t\t\tTOTAL_EVENTS,\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),C_EVENTS,0))\tTODAY_EVENTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,C_EVENTS,0))\tYESTERDAY_EVENTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,C_EVENTS,0))\tB_YESTERDAY_EVENTS,\n\n\t\t\t\tsum(C_HOSTS)\t\t\t\t\t\t\tTOTAL_HOSTS,\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),C_HOSTS,0))\tTODAY_HOSTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,C_HOSTS,0))\tYESTERDAY_HOSTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,C_HOSTS,0))\tB_YESTERDAY_HOSTS,\n\n\t\t\t\tsum(NEW_GUESTS)\t\t\t\t\t\t\tTOTAL_GUESTS,\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),GUESTS,0))\t\tTODAY_GUESTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,GUESTS,0))\tYESTERDAY_GUESTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,GUESTS,0))\tB_YESTERDAY_GUESTS,\n\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),NEW_GUESTS,0))\tTODAY_NEW_GUESTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,NEW_GUESTS,0))\tYESTERDAY_NEW_GUESTS,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,NEW_GUESTS,0))\tB_YESTERDAY_NEW_GUESTS,\n\n\t\t\t\tsum(FAVORITES)\t\t\t\t\t\t\tTOTAL_FAVORITES,\n\t\t\t\tsum(if(to_days(curdate())=to_days(DATE_STAT),FAVORITES,0))\tTODAY_FAVORITES,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=1,FAVORITES,0))\tYESTERDAY_FAVORITES,\n\t\t\t\tsum(if(to_days(curdate())-to_days(DATE_STAT)=2,FAVORITES,0))\tB_YESTERDAY_FAVORITES\n\t\t\t\t" . ($is_filtered ? ',' . $strSqlPeriod . 'HITS' . $strT . ' PERIOD_HITS, ' . $strSqlPeriod . 'SESSIONS' . $strT . ' PERIOD_SESSIONS, ' . $strSqlPeriod . 'C_EVENTS' . $strT . ' PERIOD_EVENTS, ' . $strSqlPeriod . 'FAVORITES' . $strT . ' PERIOD_FAVORITES, ' . $strSqlPeriod . 'NEW_GUESTS' . $strT . ' PERIOD_NEW_GUESTS ' : '') . "\n\t\t\tFROM\n\t\t\t\t" . ($site_filter ? "b_stat_day_site" : "b_stat_day") . "\n\t\t\tWHERE\n\t\t\t\t1=1\n\t\t\t\t" . $strSqlSearch . "\n\t\t";
     $result = false;
     $rs = $DB->Query($strSql, $bIgnoreErrors, $err_mess . __LINE__);
     if ($rs) {
         if ($result = $rs->Fetch()) {
             foreach ($result as $key => $value) {
                 $result[$key] = intval($value);
             }
             if (!$site_filter) {
                 $result["ONLINE_GUESTS"] = CUserOnline::GetGuestCount();
             }
         }
     }
     return $result;
 }
Ejemplo n.º 27
0
 function GetGraphArray($arFilter, &$arrLegend)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array("D.SEARCHER_ID <> 1");
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "SEARCHER_ID":
                     $arSqlSearch[] = GetFilterQuery("D.SEARCHER_ID", $val, "N");
                     break;
                 case "DATE1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_STAT>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_STAT<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL");
                     }
                     break;
             }
         }
     }
     $arrDays = array();
     $arrLegend = array();
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $summa = $arFilter["SUMMA"] == "Y" ? "Y" : "N";
     $strSql = CSearcher::GetGraphArray_SQL($strSqlSearch);
     $rsD = $DB->Query($strSql, false, $err_mess . __LINE__);
     while ($arD = $rsD->Fetch()) {
         $arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
         $arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
         $arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
         if ($summa == "N") {
             $arrDays[$arD["DATE_STAT"]][$arD["SEARCHER_ID"]]["TOTAL_HITS"] = $arD["TOTAL_HITS"];
             $arrLegend[$arD["SEARCHER_ID"]]["COUNTER_TYPE"] = "DETAIL";
             $arrLegend[$arD["SEARCHER_ID"]]["NAME"] = $arD["NAME"];
         } elseif ($summa == "Y") {
             $arrDays[$arD["DATE_STAT"]]["TOTAL_HITS"] += $arD["TOTAL_HITS"];
             $arrLegend[0]["COUNTER_TYPE"] = "TOTAL";
         }
     }
     reset($arrLegend);
     $total = sizeof($arrLegend);
     while (list($key, $arr) = each($arrLegend)) {
         $color = GetNextRGB($color, $total);
         $arr["COLOR"] = $color;
         $arrLegend[$key] = $arr;
     }
     reset($arrDays);
     reset($arrLegend);
     return $arrDays;
 }
Ejemplo n.º 28
0
 function CheckFields($arFields, $id, $arRequired)
 {
     global $DB, $USER, $APPLICATION, $MESS;
     $arMsg = array();
     // проверяем указанные обязательные поля
     if (is_array($arRequired) && count($arRequired) > 0) {
         foreach ($arRequired as $key) {
             if ($id <= 0 || $id > 0 && is_set($arFields, $key)) {
                 if (!is_array($arFields[$key]) && (strlen($arFields[$key]) <= 0 || $arFields[$key] === "NOT_REF")) {
                     $arMsg[] = array("id" => $key, "text" => GetMessage("SUP_ERROR_REQUIRED_" . $key));
                     //$str.= GetMessage("SUP_ERROR_REQUIRED_".$key)."<br>";
                 }
             }
         }
     }
     // проверяем корректность дат
     $arDate = array("DATE_CREATE", "DATE_MODIFY", "LAST_MESSAGE_DATE");
     foreach ($arDate as $key) {
         if (strlen($arFields[$key]) > 0) {
             if (!CheckDateTime($arFields[$key])) {
                 $arMsg[] = array("id" => $key, "text" => GetMessage("SUP_ERROR_INCORRECT_" . $key));
             }
             //$str.= GetMessage("SUP_ERROR_INCORRECT_".$key)."<br>";
         }
     }
     $arEmail = array("EMAIL");
     foreach ($arEmail as $key) {
         if (strlen($arFields[$key]) > 0) {
             if (!check_email($arFields[$key])) {
                 $arMsg[] = array("id" => $key, "text" => GetMessage("SUP_ERROR_INCORRECT_" . $key));
             }
             //$str.= GetMessage("SUP_ERROR_INCORRECT_".$key)."<br>";
         }
     }
     if (!empty($arMsg)) {
         $e = new CAdminException($arMsg);
         $GLOBALS["APPLICATION"]->ThrowException($e);
         return false;
     }
     return true;
 }
Ejemplo n.º 29
0
 public function GetFieldInputValue($documentType, $fieldType, $fieldName, $request, &$errors)
 {
     $iblockId = intval(substr($documentType, strlen("iblock_")));
     if ($iblockId <= 0) {
         throw new CBPArgumentOutOfRangeException("documentType", $documentType);
     }
     $result = array();
     if ($fieldType["Type"] == "user") {
         $value = $request[$fieldName["Field"]];
         if (strlen($value) > 0) {
             $result = CBPHelper::usersStringToArray($value, array("lists", get_called_class(), $documentType), $errors);
             if (count($errors) > 0) {
                 foreach ($errors as $e) {
                     $errors[] = $e;
                 }
             }
         } else {
             $result = null;
         }
     } elseif (array_key_exists($fieldName["Field"], $request) || array_key_exists($fieldName["Field"] . "_text", $request)) {
         $valueArray = array();
         if (array_key_exists($fieldName["Field"], $request)) {
             $valueArray = $request[$fieldName["Field"]];
             if (!is_array($valueArray) || is_array($valueArray) && CBPHelper::isAssociativeArray($valueArray)) {
                 $valueArray = array($valueArray);
             }
         }
         if (array_key_exists($fieldName["Field"] . "_text", $request)) {
             $valueArray[] = $request[$fieldName["Field"] . "_text"];
         }
         foreach ($valueArray as $value) {
             if (is_array($value) || !is_array($value) && !\CBPDocument::IsExpression(trim($value))) {
                 if ($fieldType["Type"] == "int") {
                     if (strlen($value) > 0) {
                         $value = str_replace(" ", "", $value);
                         if ($value . "|" == intval($value) . "|") {
                             $value = intval($value);
                         } else {
                             $value = null;
                             $errors[] = array("code" => "ErrorValue", "message" => GetMessage("LISTS_BIZPROC_INVALID_INT"), "parameter" => $fieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($fieldType["Type"] == "double") {
                     if (strlen($value) > 0) {
                         $value = str_replace(" ", "", str_replace(",", ".", $value));
                         if (is_numeric($value)) {
                             $value = doubleval($value);
                         } else {
                             $value = null;
                             $errors[] = array("code" => "ErrorValue", "message" => GetMessage("LISTS_BIZPROC_INVALID_INT"), "parameter" => $fieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($fieldType["Type"] == "select") {
                     if (!is_array($fieldType["Options"]) || count($fieldType["Options"]) <= 0 || strlen($value) <= 0) {
                         $value = null;
                     } else {
                         $ar = array_values($fieldType["Options"]);
                         if (is_array($ar[0])) {
                             $b = false;
                             foreach ($ar as $a) {
                                 if ($a[0] == $value) {
                                     $b = true;
                                     break;
                                 }
                             }
                             if (!$b) {
                                 $value = null;
                                 $errors[] = array("code" => "ErrorValue", "message" => GetMessage("LISTS_BIZPROC_INVALID_SELECT"), "parameter" => $fieldName["Field"]);
                             }
                         } else {
                             if (!array_key_exists($value, $fieldType["Options"])) {
                                 $value = null;
                                 $errors[] = array("code" => "ErrorValue", "message" => GetMessage("LISTS_BIZPROC_INVALID_SELECT"), "parameter" => $fieldName["Field"]);
                             }
                         }
                     }
                 } elseif ($fieldType["Type"] == "bool") {
                     if ($value !== "Y" && $value !== "N") {
                         if ($value === true) {
                             $value = "Y";
                         } elseif ($value === false) {
                             $value = "N";
                         } elseif (strlen($value) > 0) {
                             $value = strtolower($value);
                             if (in_array($value, array("y", "yes", "true", "1"))) {
                                 $value = "Y";
                             } elseif (in_array($value, array("n", "no", "false", "0"))) {
                                 $value = "N";
                             } else {
                                 $value = null;
                                 $errors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID45"), "parameter" => $fieldName["Field"]);
                             }
                         } else {
                             $value = null;
                         }
                     }
                 } elseif ($fieldType["Type"] == "file") {
                     if (is_array($value) && array_key_exists("name", $value) && strlen($value["name"]) > 0) {
                         if (!array_key_exists("MODULE_ID", $value) || strlen($value["MODULE_ID"]) <= 0) {
                             $value["MODULE_ID"] = "bizproc";
                         }
                         $value = CFile::saveFile($value, "bizproc_wf", true, true);
                         if (!$value) {
                             $value = null;
                             $errors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID915"), "parameter" => $fieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($fieldType["Type"] == "date") {
                     if (strlen($value) > 0) {
                         if (!CheckDateTime($value, FORMAT_DATE)) {
                             $value = null;
                             $errors[] = array("code" => "ErrorValue", "message" => GetMessage("LISTS_BIZPROC_INVALID_DATE"), "parameter" => $fieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($fieldType["Type"] == "datetime") {
                     if (strlen($value) > 0) {
                         $valueTemporary = array();
                         $valueTemporary["VALUE"] = $value;
                         $result = CIBlockPropertyDateTime::checkFields('', $valueTemporary);
                         if (!empty($result)) {
                             $message = '';
                             foreach ($result as $error) {
                                 $message .= $error;
                             }
                             $value = null;
                             $errors[] = array("code" => "ErrorValue", "message" => $message, "parameter" => $fieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif (strpos($fieldType["Type"], ":") !== false && $fieldType["Type"] != "S:HTML") {
                     $customType = CIBlockProperty::getUserType(substr($fieldType["Type"], 2));
                     if (array_key_exists("GetLength", $customType)) {
                         if (call_user_func_array($customType["GetLength"], array(array("LINK_IBLOCK_ID" => $fieldType["Options"]), array("VALUE" => $value))) <= 0) {
                             $value = null;
                         }
                     }
                     if ($value != null && array_key_exists("CheckFields", $customType)) {
                         $errorsTemporary = call_user_func_array($customType["CheckFields"], array(array("LINK_IBLOCK_ID" => $fieldType["Options"]), array("VALUE" => $value)));
                         if (count($errorsTemporary) > 0) {
                             $value = null;
                             foreach ($errorsTemporary as $e) {
                                 $errors[] = array("code" => "ErrorValue", "message" => $e, "parameter" => $fieldName["Field"]);
                             }
                         }
                     } elseif (!array_key_exists("GetLength", $customType) && $value === '') {
                         $value = null;
                     }
                     if ($value !== null && $fieldType["Type"] == "S:employee" && COption::getOptionString("bizproc", "employee_compatible_mode", "N") != "Y") {
                         $value = "user_" . $value;
                     }
                 } else {
                     if (!is_array($value) && strlen($value) <= 0) {
                         $value = null;
                     }
                 }
             }
             if ($value !== null) {
                 $result[] = $value;
             }
         }
     }
     if (!$fieldType["Multiple"]) {
         if (is_array($result) && count($result) > 0) {
             $result = $result[0];
         } else {
             $result = null;
         }
     }
     return $result;
 }
Ejemplo n.º 30
0
 public static function GetGraphArray($arFilter, &$arLegend, $sort = false, $top = 0)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     global $arCityColor;
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (is_array($val)) {
                 if (count($val) <= 0) {
                     continue;
                 }
             } else {
                 if (strlen($val) <= 0 || $val === "NOT_REF") {
                     continue;
                 }
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter);
             $key = strtoupper($key);
             switch ($key) {
                 case "COUNTRY_ID":
                     if ($val != "NOT_REF") {
                         $arSqlSearch[] = GetFilterQuery("C.COUNTRY_ID", $val, "N");
                     }
                     break;
                 case "DATE1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_STAT>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_STAT<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL");
                     }
                     break;
             }
         }
     }
     $arrDays = array();
     $arLegend = array();
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\t" . $DB->DateToCharFunction("D.DATE_STAT", "SHORT") . " DATE_STAT,\n\t\t\t\t" . $DB->DateFormatToDB("DD", "D.DATE_STAT") . " DAY,\n\t\t\t\t" . $DB->DateFormatToDB("MM", "D.DATE_STAT") . " MONTH,\n\t\t\t\t" . $DB->DateFormatToDB("YYYY", "D.DATE_STAT") . " YEAR,\n\t\t\t\tD.CITY_ID,\n\t\t\t\tD.SESSIONS,\n\t\t\t\tD.NEW_GUESTS,\n\t\t\t\tD.HITS,\n\t\t\t\tD.C_EVENTS,\n\t\t\t\tC.NAME,\n\t\t\t\tC.SESSIONS TOTAL_SESSIONS,\n\t\t\t\tC.NEW_GUESTS TOTAL_NEW_GUESTS,\n\t\t\t\tC.HITS TOTAL_HITS,\n\t\t\t\tC.C_EVENTS TOTAL_C_EVENTS\n\t\t\tFROM\n\t\t\t\tb_stat_city_day D\n\t\t\t\tINNER JOIN b_stat_city C ON (C.ID = D.CITY_ID)\n\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\tORDER BY\n\t\t\t\tD.DATE_STAT, D.CITY_ID\n\t\t";
     $rsD = $DB->Query($strSql, false, $err_mess . __LINE__);
     while ($arD = $rsD->Fetch()) {
         $arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
         $arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
         $arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
         $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["SESSIONS"] = $arD["SESSIONS"];
         $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["NEW_GUESTS"] = $arD["NEW_GUESTS"];
         $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["HITS"] = $arD["HITS"];
         $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["C_EVENTS"] = $arD["C_EVENTS"];
         $arLegend[$arD["CITY_ID"]]["CITY_ID"] = intval($arD["CITY_ID"]);
         $arLegend[$arD["CITY_ID"]]["NAME"] = $arD["NAME"];
         $arLegend[$arD["CITY_ID"]]["SESSIONS"] += $arD["SESSIONS"];
         $arLegend[$arD["CITY_ID"]]["NEW_GUESTS"] += $arD["NEW_GUESTS"];
         $arLegend[$arD["CITY_ID"]]["HITS"] += $arD["HITS"];
         $arLegend[$arD["CITY_ID"]]["C_EVENTS"] += $arD["C_EVENTS"];
         $arLegend[$arD["CITY_ID"]]["TOTAL_SESSIONS"] = $arD["TOTAL_SESSIONS"];
         $arLegend[$arD["CITY_ID"]]["TOTAL_NEW_GUESTS"] = $arD["TOTAL_NEW_GUESTS"];
         $arLegend[$arD["CITY_ID"]]["TOTAL_HITS"] = $arD["TOTAL_HITS"];
         $arLegend[$arD["CITY_ID"]]["TOTAL_C_EVENTS"] = $arD["TOTAL_C_EVENTS"];
     }
     if ($sort) {
         CStatisticSort::Sort($arLegend, $sort);
     }
     if ($top) {
         $totals = array("CITY_ID" => 0, "NAME" => GetMessage("STAT_CITY_OTHER"), "SESSIONS" => 0, "NEW_GUESTS" => 0, "HITS" => 0, "C_EVENTS" => 0, "TOTAL_SESSIONS" => 0, "TOTAL_NEW_GUESTS" => 0, "TOTAL_HITS" => 0, "TOTAL_C_EVENTS" => 0);
         $i = 0;
         while (count($arLegend) > $top) {
             $i++;
             $tail = array_pop($arLegend);
             $totals["SESSIONS"] += $tail["SESSIONS"];
             $totals["NEW_GUESTS"] += $tail["NEW_GUESTS"];
             $totals["HITS"] += $tail["HITS"];
             $totals["C_EVENTS"] += $tail["C_EVENTS"];
             $totals["TOTAL_SESSIONS"] += $tail["TOTAL_SESSIONS"];
             $totals["TOTAL_NEW_GUESTS"] += $tail["TOTAL_NEW_GUESTS"];
             $totals["TOTAL_HITS"] += $tail["TOTAL_HITS"];
             $totals["TOTAL_C_EVENTS"] += $tail["TOTAL_C_EVENTS"];
         }
         if ($i) {
             $arLegend[0] = $totals;
         }
         foreach ($arrDays as $DATE_STAT => $arDate) {
             foreach ($arDate as $CITY_ID => $arCity) {
                 if (intval($CITY_ID) > 0) {
                     if (!array_key_exists($CITY_ID, $arLegend)) {
                         $arrDays[$DATE_STAT][0]["CITY_ID"] = 0;
                         $arrDays[$DATE_STAT][0]["NAME"] = GetMessage("STAT_CITY_OTHER");
                         $arrDays[$DATE_STAT][0]["SESSIONS"] += $arCity["SESSIONS"];
                         $arrDays[$DATE_STAT][0]["NEW_GUESTS"] += $arCity["NEW_GUESTS"];
                         $arrDays[$DATE_STAT][0]["HITS"] += $arCity["HITS"];
                         $arrDays[$DATE_STAT][0]["C_EVENTS"] += $arCity["C_EVENTS"];
                         unset($arrDays[$DATE_STAT][$CITY_ID]);
                     }
                 }
             }
         }
     }
     $total = count($arLegend);
     foreach ($arLegend as $key => $arr) {
         if (strlen($arCountryColor[$key]) > 0) {
             $color = $arCountryColor[$key];
         } else {
             $color = GetNextRGB($color_getnext, $total);
             $color_getnext = $color;
         }
         $arr["COLOR"] = $color;
         $arLegend[$key] = $arr;
     }
     return $arrDays;
 }