public static function submitData($limit = 5) { if (!Catalog::isOn()) { return '\\' . __METHOD__ . '(5);'; } $ids = array(); $rows = array(); $r = static::getList(array('order' => array('ID' => 'ASC'), 'limit' => $limit)); while ($row = $r->fetch()) { $rows[] = array('type' => $row['TYPE'], 'data' => $row['DATA']); $ids[] = $row['ID']; } if (!empty($rows)) { // get queue size $totalCount = static::getCount(); $queueSize = $totalCount > $limit ? $totalCount - $limit : 0; // send data $data = \http_build_query(array('op' => 'e', 'aid' => Counter::getAccountId(), 'ad[cd][value]' => base64_encode(json_encode($rows)), 'ad[cd][queue]' => $queueSize)); if (strlen($data) > 30000) { if ($limit > 1) { return '\\' . __METHOD__ . '(' . max(1, $limit - 1) . ');'; } } $f = fsockopen('bitrix.info', 80, $errno, $errstr, 3); if ($f) { $out = "POST /bx_stat HTTP/1.1\r\n"; $out .= "Host: bitrix.info\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Content-length: " . strlen($data) . "\r\n"; $out .= "User-Agent: Bitrix Stats Counter\r\n"; $out .= "Connection: Close\r\n"; $out .= "\r\n"; $out .= $data . "\r\n\r\n"; fwrite($f, $out); $response = ''; while (!feof($f)) { $response .= fgets($f, 128); } fclose($f); // delete rows if service received data if (strpos($response, 'uid')) { foreach ($ids as $id) { static::delete($id); } } } } return '\\' . __METHOD__ . '(5);'; }
else { $this->AbortResultCache(); ShowError(GetMessage("CATALOG_ELEMENT_NOT_FOUND")); @define("ERROR_404", "Y"); if($arParams["SET_STATUS_404"]==="Y") CHTTP::SetStatus("404 Not Found"); } } if(isset($arResult["ID"])) { if (isset($arResult['counterData'])) { // send counter data if (\Bitrix\Main\Analytics\Catalog::isOn()) { \Bitrix\Main\Analytics\Counter::sendData('ct', $arResult['counterData']); } } if ('N' != $arParams['USE_ELEMENT_COUNTER']) { if (Loader::includeModule('iblock')) { CIBlockElement::CounterInc($arResult["ID"]); } } if (!isset($_SESSION["VIEWED_ENABLE"]) && isset($_SESSION["VIEWED_PRODUCT"]) && $_SESSION["VIEWED_PRODUCT"] != $arResult["ID"] && Loader::includeModule("sale")) {
?> </div> <div class="clb"></div> </div> </div> <div class="adm-c-bigdata-activate"> <div class="adm-c-bigdata-activate-title"><?php echo GetMessage('BIGDATA_HOWTO_ENABLE'); ?> </div> <div class="adm-c-bigdata-activate-content"> <ul class="adm-c-bigdata-activate-content-task-list"> <?php $available = \Bitrix\Main\Analytics\Catalog::isOn(); ?> <li <?php echo $available ? 'class="good"' : ''; ?> > <?php echo GetMessage('BIGDATA_ENABLED'); ?> <?php if (!$available) { ?> <div class="adm-c-bigdata-activate-content-task-list-warning"><span><?php echo GetMessage('BIGDATA_DISABLED'); ?> </span></div>
public static function submitData($limit = 50) { if (!Catalog::isOn()) { return '\\' . __METHOD__ . '();'; } $rows = array(); $r = static::getList(array('order' => array('ID' => 'ASC'), 'limit' => $limit)); while ($row = $r->fetch()) { $rows[$row['ID']] = array('type' => $row['TYPE'], 'data' => $row['DATA']); } if (!empty($rows)) { // get queue size $totalCount = static::getCount(); $queueSize = $totalCount > $limit ? $totalCount - $limit : 0; // set limit $dataSizeLimit = 45000; // make an optimal dataset $dataSize = strlen(base64_encode(json_encode(array_values($rows)))); // records to delete $toDelete = array(); if ($dataSize > $dataSizeLimit) { $reducedRows = array(); foreach ($rows as $id => $row) { $rowSize = strlen(base64_encode(json_encode(array_values($row)))); $reducedDataSize = strlen(base64_encode(json_encode(array_values($reducedRows)))); if ($rowSize > $dataSizeLimit) { // abnormally big row, delete it $toDelete[] = $id; } elseif (!empty($reducedRows) && $reducedDataSize + $rowSize > $dataSizeLimit) { // it's enough break; } else { $reducedRows[$id] = $row; } } $rows = $reducedRows; } if (!empty($rows)) { // if there are still some data, send it $data = \http_build_query(array('op' => 'e', 'aid' => Counter::getAccountId(), 'ad[cd][value]' => base64_encode(json_encode(array_values($rows))), 'ad[cd][queue]' => $queueSize)); $f = fsockopen('bitrix.info', 80, $errno, $errstr, 3); if ($f) { $out = "POST /bx_stat HTTP/1.1\r\n"; $out .= "Host: bitrix.info\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Content-length: " . strlen($data) . "\r\n"; $out .= "User-Agent: Bitrix Stats Counter\r\n"; $out .= "Connection: Close\r\n"; $out .= "\r\n"; $out .= $data . "\r\n\r\n"; fwrite($f, $out); $response = ''; while (!feof($f)) { $response .= fgets($f, 128); } fclose($f); // delete rows if service received data if (strpos($response, '200 OK')) { $toDelete = array_merge($toDelete, array_keys($rows)); } } } // delete abnormally big and sent rows foreach ($toDelete as $id) { static::delete($id); } } return '\\' . __METHOD__ . '();'; }