Esempio n. 1
0
 function GetDynamicList($arFilter, &$arrLegend, &$is_filtered)
 {
     $err_mess = CAdvBanner::err_mess() . "<br>Function: GetDynamicList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     if (CAdvBanner::CheckDynamicFilter($arFilter)) {
         if (is_array($arFilter)) {
             $filter_keys = array_keys($arFilter);
             for ($i = 0, $n = count($filter_keys); $i < $n; $i++) {
                 $key = $filter_keys[$i];
                 $val = $arFilter[$filter_keys[$i]];
                 if (is_array($val)) {
                     if (count($val) <= 0) {
                         continue;
                     }
                 } else {
                     if (strlen($val) <= 0 || "{$val}" == "NOT_REF") {
                         continue;
                     }
                 }
                 $key = strtoupper($key);
                 switch ($key) {
                     case "DATE_1":
                         $arSqlSearch[] = "D.DATE_STAT>=" . $DB->CharToDateFunction($val, "SHORT");
                         break;
                     case "DATE_2":
                         $arSqlSearch[] = "D.DATE_STAT<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL");
                         break;
                 }
             }
         }
     }
     $arContract = is_array($arFilter["CONTRACT_ID"]) ? $arFilter["CONTRACT_ID"] : array();
     $arBanner = is_array($arFilter["BANNER_ID"]) ? $arFilter["BANNER_ID"] : array();
     $arGroup = is_array($arFilter["GROUP_SID"]) ? $arFilter["GROUP_SID"] : array();
     $contract_total = $arFilter["CONTRACT_SUMMA"] == "Y" ? "Y" : "N";
     $banner_total = $arFilter["BANNER_SUMMA"] == "Y" ? "Y" : "N";
     $group_total = $arFilter["GROUP_SUMMA"] == "Y" ? "Y" : "N";
     $arShow = is_array($arFilter["WHAT_SHOW"]) ? $arFilter["WHAT_SHOW"] : array();
     if (in_array("ctr", $arShow)) {
         $arShow[] = "show";
         $arShow[] = "click";
     }
     $arShow = array_unique($arShow);
     $arrDays = array();
     $arrLegend = array();
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = CAdvBanner::GetDynamicList_SQL($strSqlSearch);
     $rsD = $DB->Query($strSql, false, $err_mess . __LINE__);
     while ($arD = $rsD->Fetch()) {
         $arrDays[$arD["DATE_STAT"]]["DATE"] = $arD["DATE_STAT"];
         $arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
         $arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
         $arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
         foreach ($arShow as $ctype) {
             if ($ctype == "CTR") {
                 continue;
             }
             $ctype_u = strtoupper($ctype);
             if (intval($arD[$ctype_u . "_COUNT"]) > 0) {
                 if (in_array($arD["CONTRACT_ID"], $arContract)) {
                     if ($contract_total == "N") {
                         $arrLegend["3_CONTRACT_" . $arD["CONTRACT_ID"]]["TYPE"] = "CONTRACT";
                         $arrLegend["3_CONTRACT_" . $arD["CONTRACT_ID"]]["ID"] = $arD["CONTRACT_ID"];
                         $arrLegend["3_CONTRACT_" . $arD["CONTRACT_ID"]]["NAME"] = $arD["CONTRACT_NAME"];
                         $arrLegend["3_CONTRACT_" . $arD["CONTRACT_ID"]]["COUNTER_TYPE"] = "DETAIL";
                         $arrLegend["3_CONTRACT_" . $arD["CONTRACT_ID"]][$ctype_u] += $arD[$ctype_u . "_COUNT"];
                         $arrDays[$arD["DATE_STAT"]]["CONTRACT"]["DETAIL_" . $ctype_u][$arD["CONTRACT_ID"]] += $arD[$ctype_u . "_COUNT"];
                     } elseif ($contract_total == "Y") {
                         $arrLegend["3_CONTRACT"]["TYPE"] = "CONTRACT";
                         $arrLegend["3_CONTRACT"]["COUNTER_TYPE"] = "TOTAL";
                         $arrLegend["3_CONTRACT"][$ctype_u] += $arD[$ctype_u . "_COUNT"];
                         $arrDays[$arD["DATE_STAT"]]["CONTRACT"]["TOTAL_" . $ctype_u] += $arD[$ctype_u . "_COUNT"];
                     }
                 }
                 if (in_array($arD["BANNER_ID"], $arBanner)) {
                     if ($banner_total == "N") {
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["TYPE"] = "BANNER";
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["ID"] = $arD["BANNER_ID"];
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["TYPE_SID"] = $arD["BANNER_TYPE_SID"];
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["GROUP"] = $arD["GROUP_SID"];
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["NAME"] = $arD["BANNER_NAME"];
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["CONTRACT_ID"] = $arD["CONTRACT_ID"];
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]]["COUNTER_TYPE"] = "DETAIL";
                         $arrLegend["1_BANNER_" . $arD["BANNER_ID"]][$ctype_u] += $arD[$ctype_u . "_COUNT"];
                         $arrDays[$arD["DATE_STAT"]]["BANNER"]["DETAIL_" . $ctype_u][$arD["BANNER_ID"]] += $arD[$ctype_u . "_COUNT"];
                     } elseif ($banner_total == "Y") {
                         $arrLegend["1_BANNER"]["TYPE"] = "BANNER";
                         $arrLegend["1_BANNER"]["COUNTER_TYPE"] = "TOTAL";
                         $arrLegend["1_BANNER"][$ctype_u] += $arD[$ctype_u . "_COUNT"];
                         $arrDays[$arD["DATE_STAT"]]["BANNER"]["TOTAL_" . $ctype_u] += $arD[$ctype_u . "_COUNT"];
                     }
                 }
                 if (in_array($arD["GROUP_SID"], $arGroup)) {
                     if ($group_total == "N") {
                         $arrLegend["2_GROUP_" . $arD["GROUP_SID"]]["TYPE"] = "GROUP";
                         $arrLegend["2_GROUP_" . $arD["GROUP_SID"]]["ID"] = $arD["GROUP_SID"];
                         $arrLegend["2_GROUP_" . $arD["GROUP_SID"]]["COUNTER_TYPE"] = "DETAIL";
                         $arrLegend["2_GROUP_" . $arD["GROUP_SID"]][$ctype_u] += $arD[$ctype_u . "_COUNT"];
                         $arrDays[$arD["DATE_STAT"]]["GROUP"]["DETAIL_" . $ctype_u][$arD["GROUP_SID"]] += $arD[$ctype_u . "_COUNT"];
                     } elseif ($group_total == "Y") {
                         $arrLegend["2_GROUP"]["TYPE"] = "GROUP";
                         $arrLegend["2_GROUP"]["COUNTER_TYPE"] = "TOTAL";
                         $arrLegend["2_GROUP"][$ctype_u] += $arD[$ctype_u . "_COUNT"];
                         $arrDays[$arD["DATE_STAT"]]["GROUP"]["TOTAL_" . $ctype_u] += $arD[$ctype_u . "_COUNT"];
                     }
                 }
             }
         }
     }
     if (in_array("ctr", $arShow)) {
         // рассчитаем CTR
         reset($arrDays);
         while (list($keyD, $arD) = each($arrDays)) {
             reset($arrLegend);
             while (list(, $arrS) = each($arrLegend)) {
                 if ($arrS["COUNTER_TYPE"] == "DETAIL") {
                     $show_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"] . "_SHOW"][$arrS["ID"]]);
                     $click_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"] . "_CLICK"][$arrS["ID"]]);
                     if ($show_value <= 0) {
                         $ctr_value = 0;
                     } else {
                         $ctr_value = round($click_value * 100 / $show_value, 2);
                     }
                     $arD[$arrS["TYPE"]]["DETAIL_CTR"][$arrS["ID"]] = $ctr_value;
                     $arrDays[$keyD] = $arD;
                 } else {
                     $show_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"] . "_SHOW"]);
                     $click_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"] . "_CLICK"]);
                     if ($show_value <= 0) {
                         $ctr_value = 0;
                     } else {
                         $ctr_value = round($click_value * 100 / $show_value, 2);
                     }
                     $arD[$arrS["TYPE"]]["TOTAL_CTR"] = $ctr_value;
                     $arrDays[$keyD] = $arD;
                 }
             }
         }
     }
     // Определим цвета и суммарный CTR
     reset($arrLegend);
     $s = 0;
     if (in_array("ctr", $arShow)) {
         $s++;
     }
     if ($arFilter["WHAT_SHOW"] != array("ctr") && in_array("show", $arShow)) {
         $s++;
     }
     if ($arFilter["WHAT_SHOW"] != array("ctr") && in_array("click", $arShow)) {
         $s++;
     }
     if ($arFilter["WHAT_SHOW"] != array("ctr") && in_array("visitor", $arShow)) {
         $s++;
     }
     $total = sizeof($arrLegend) * $s;
     $color = "";
     while (list($key, $arr) = each($arrLegend)) {
         if (in_array("ctr", $arShow)) {
             $color = GetNextRGB($color, $total);
             $arr["COLOR_CTR"] = $color;
             if ($arr["SHOW"] <= 0) {
                 $ctr = 0;
             } else {
                 $ctr = round($arr["CLICK"] * 100 / $arr["SHOW"], 2);
             }
             $arr["CTR"] = $ctr;
         }
         if ($arFilter["WHAT_SHOW"] != array("ctr")) {
             if (in_array("show", $arShow)) {
                 $color = GetNextRGB($color, $total);
                 $arr["COLOR_SHOW"] = $color;
             }
             if (in_array("click", $arShow)) {
                 $color = GetNextRGB($color, $total);
                 $arr["COLOR_CLICK"] = $color;
             }
             if (in_array("visitor", $arShow)) {
                 $color = GetNextRGB($color, $total);
                 $arr["COLOR_VISITOR"] = $color;
             }
         }
         $arr["COLOR"] = $color;
         $arrLegend[$key] = $arr;
     }
     krsort($arrLegend);
     $is_filtered = IsFiltered($strSqlSearch);
     reset($arrDays);
     reset($arrLegend);
     return $arrDays;
 }