Ejemplo n.º 1
0
 function FixShowAll()
 {
     global $DB, $CACHE_ADVERTISING, $arrADV_VIEWED_BANNERS, $APPLICATION;
     $err_mess = CAdvBanner::err_mess() . "<br>Function: FixShowAll<br>Line: ";
     if (is_array($CACHE_ADVERTISING) && array_key_exists("BANNERS_ALL", $CACHE_ADVERTISING) && is_array($CACHE_ADVERTISING["BANNERS_ALL"]) && !empty($CACHE_ADVERTISING["BANNERS_ALL"]) && array_key_exists("BANNERS_CNT", $CACHE_ADVERTISING) && is_array($CACHE_ADVERTISING["BANNERS_CNT"])) {
         if (array_key_exists("ALL_DATE_SHOW_FIRST", $CACHE_ADVERTISING) && is_array($CACHE_ADVERTISING["ALL_DATE_SHOW_FIRST"])) {
             foreach ($CACHE_ADVERTISING["ALL_DATE_SHOW_FIRST"] as $key => $value) {
                 $DB->Update("b_adv_banner", array("DATE_SHOW_FIRST" => $value), "WHERE ID='" . $key . "'", $err_mess . __LINE__);
             }
         }
         $bEqualBanID = $CACHE_ADVERTISING["BANNERS_ALL"] == $CACHE_ADVERTISING["BANNERS_CNT"];
         //Update баннеров
         $arFields = array("SHOW_COUNT" => "SHOW_COUNT + 1", "DATE_LAST_SHOW" => $DB->GetNowFunction());
         if ($bEqualBanID) {
             $arFields["VISITOR_COUNT"] = "VISITOR_COUNT + 1";
         }
         $group_all = '';
         foreach ($CACHE_ADVERTISING["BANNERS_ALL"] as $b) {
             $group_all .= ($group_all != '' ? ',' : '') . intval($b);
         }
         $DB->Update("b_adv_banner", $arFields, "WHERE ID IN(" . $group_all . ")", $err_mess . __LINE__);
         if (!$bEqualBanID && !empty($CACHE_ADVERTISING["BANNERS_CNT"])) {
             $arFields = array("VISITOR_COUNT" => "VISITOR_COUNT + 1");
             $group_inc = "";
             foreach ($CACHE_ADVERTISING["BANNERS_CNT"] as $BANNERS_CNT) {
                 $group_inc .= ($group_inc != "" ? "," : "") . intval($BANNERS_CNT);
             }
             $DB->Update("b_adv_banner", $arFields, "WHERE ID IN(" . $group_inc . ")", $err_mess . __LINE__);
         }
         //Баннеры по дням
         $strSql = "SELECT BANNER_ID FROM b_adv_banner_2_day WHERE BANNER_ID IN (" . $group_all . ") and DATE_STAT = " . $DB->GetNowDate();
         $res = $DB->Query($strSql, false, $err_mess . __LINE__);
         $arExist = $arInsert = array();
         while ($ar = $res->Fetch()) {
             $arExist[] = $ar["BANNER_ID"];
         }
         $arInsert = array_diff($CACHE_ADVERTISING["BANNERS_ALL"], $arExist);
         foreach ($arInsert as $BANNER_ID) {
             $strSql = "INSERT INTO b_adv_banner_2_day (DATE_STAT, BANNER_ID, SHOW_COUNT, VISITOR_COUNT) VALUES (" . $DB->GetNowDate() . ", {$BANNER_ID},1,1)";
             $DB->Query($strSql, true, $err_mess . __LINE__);
         }
         if (!empty($arExist)) {
             $arExistInc = array_intersect($arExist, $CACHE_ADVERTISING["BANNERS_CNT"]);
             if (!empty($arExistInc)) {
                 $sExistInc = '';
                 foreach ($arExistInc as $b) {
                     $sExistInc .= ($sExistInc != '' ? ',' : '') . intval($b);
                 }
                 $arFields = array("SHOW_COUNT" => "SHOW_COUNT + 1", "VISITOR_COUNT" => "VISITOR_COUNT + 1");
                 $DB->Update("b_adv_banner_2_day", $arFields, "WHERE BANNER_ID IN(" . $sExistInc . ") and DATE_STAT = " . $DB->GetNowDate(), $err_mess . __LINE__);
             }
             $arExistInc = array_diff($arExist, $arExistInc);
             if (!empty($arExistInc)) {
                 $sExistInc = '';
                 foreach ($arExistInc as $b) {
                     $sExistInc .= ($sExistInc != '' ? ',' : '') . intval($b);
                 }
                 $arFields = array("SHOW_COUNT" => "SHOW_COUNT + 1");
                 $DB->Update("b_adv_banner_2_day", $arFields, "WHERE BANNER_ID IN(" . $sExistInc . ") and DATE_STAT = " . $DB->GetNowDate(), $err_mess . __LINE__);
             }
         }
         //Контракты
         $DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
         if ($DONT_USE_CONTRACT == "N" && array_key_exists("CONTRACTS_ALL", $CACHE_ADVERTISING) && is_array($CACHE_ADVERTISING["CONTRACTS_ALL"]) && !empty($CACHE_ADVERTISING["CONTRACTS_ALL"]) && array_key_exists("CONTRACTS_CNT", $CACHE_ADVERTISING) && is_array($CACHE_ADVERTISING["CONTRACTS_CNT"])) {
             $arCount = array_count_values($CACHE_ADVERTISING["CONTRACTS_ALL"]);
             $arUpdate = array();
             foreach ($arCount as $CONTRACT_ID => $value) {
                 $arUpdate[$value][] = $CONTRACT_ID;
             }
             foreach ($arUpdate as $count => $arContact) {
                 $arFields = array("SHOW_COUNT" => "SHOW_COUNT + " . $count);
                 if ($arContact == array_intersect($arContact, $CACHE_ADVERTISING["CONTRACTS_CNT"])) {
                     $arFields["VISITOR_COUNT"] = "VISITOR_COUNT + 1";
                     $CACHE_ADVERTISING["CONTRACTS_CNT"] = array_diff($CACHE_ADVERTISING["CONTRACTS_CNT"], $arContact);
                 }
                 $sContact = '';
                 foreach ($arContact as $c) {
                     $sContact .= ($sContact != '' ? ',' : '') . intval($c);
                 }
                 $DB->Update("b_adv_contract", $arFields, "WHERE ID IN(" . $sContact . ")", $err_mess . __LINE__);
             }
             if (!empty($CACHE_ADVERTISING["CONTRACTS_CNT"])) {
                 $sContrCnt = '';
                 foreach ($CACHE_ADVERTISING["CONTRACTS_CNT"] as $c) {
                     $sContrCnt .= ($sContrCnt != '' ? ',' : '') . intval($c);
                 }
                 $arFields = array("VISITOR_COUNT" => "VISITOR_COUNT + 1");
                 $DB->Update("b_adv_banner", $arFields, "WHERE ID IN(" . $sContrCnt . ")", $err_mess . __LINE__);
             }
         }
         // сформируем значение cookie
         if (is_array($arrADV_VIEWED_BANNERS) && count($arrADV_VIEWED_BANNERS) > 0) {
             $cookie_value = "";
             $arrCookie = $arrADV_VIEWED_BANNERS;
             foreach ($arrCookie as $key => $arr) {
                 if (intval($key) > 0) {
                     $cookie_value .= intval($arr["CONTRACT_ID"]) . "_" . $key . "_" . intval($arr["COUNTER"]) . "_" . trim($arr["EXPIRATION_DATE"]) . ",";
                 }
             }
             // длина cookie не может превышать 4Кб
             $max_length = 4 * 1024;
             $j = 0;
             while (strlen($cookie_value) > $max_length && $j < 200) {
                 $j++;
                 $arrCookie_temp = $arrCookie;
                 $arrCookie = array();
                 $i = 0;
                 foreach ($arrCookie_temp as $key => $arrValue) {
                     $i++;
                     if ($i > 1) {
                         $arrCookie[$key] = $arrValue;
                     }
                 }
                 $cookie_value = "";
                 foreach ($arrCookie as $key => $arr) {
                     if (intval($key) > 0) {
                         $cookie_value .= intval($arr["CONTRACT_ID"]) . "_" . $key . "_" . intval($arr["COUNTER"]) . "_" . trim($arr["EXPIRATION_DATE"]) . ",";
                     }
                 }
             }
             $cookie_value = trim($cookie_value, ",");
             $cookie_name = "BANNERS";
             $secure = COption::GetOptionString("main", "use_secure_password_cookies", "N") == "Y" && CMain::IsHTTPS();
             $APPLICATION->set_cookie($cookie_name, $cookie_value, false, "/", false, $secure);
         }
         CAdvBanner::BeforeRestartBuffer();
     }
 }