public static function IncrementWithSelect($sub_select, $sendPull = true) { global $DB, $CACHE_MANAGER, $APPLICATION; if (strlen($sub_select) > 0) { $pullInclude = $sendPull && self::CheckLiveMode(); $strSQL = " INSERT INTO b_user_counter (USER_ID, CNT, SITE_ID, CODE, SENT) (".$sub_select.") ON DUPLICATE KEY UPDATE CNT = CNT + VALUES(CNT), SENT = VALUES(SENT) "; $DB->Query($strSQL, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); self::$counters = false; $CACHE_MANAGER->CleanDir("user_counter"); if ($pullInclude) { $db_lock = $DB->Query("SELECT GET_LOCK('".$APPLICATION->GetServerUniqID()."_pull', 0) as L"); $ar_lock = $db_lock->Fetch(); if($ar_lock["L"] > 0) { $arSites = Array(); $res = CSite::GetList(($b = ""), ($o = ""), Array("ACTIVE" => "Y")); while($row = $res->Fetch()) $arSites[] = $row['ID']; $strSQL = " SELECT distinct pc.CHANNEL_ID, uc1.USER_ID, uc1.SITE_ID, uc1.CODE, uc1.CNT FROM b_user_counter uc INNER JOIN b_user_counter uc1 ON uc1.USER_ID = uc.USER_ID AND uc1.CODE = uc.CODE INNER JOIN b_pull_channel pc ON pc.USER_ID = uc.USER_ID WHERE uc.SENT = '0' "; $res = $DB->Query($strSQL, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $pullMessage = Array(); while($row = $res->Fetch()) { if ($row['SITE_ID'] == '**') { foreach($arSites as $siteId) { if (isset($pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']])) $pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']] += intval($row['CNT']); else $pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']] = intval($row['CNT']); } } else { if (isset($pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']])) $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']] += intval($row['CNT']); else $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']] = intval($row['CNT']); } } $DB->Query("UPDATE b_user_counter SET SENT = '1' WHERE SENT = '0'"); $DB->Query("SELECT RELEASE_LOCK('".$APPLICATION->GetServerUniqID()."_pull')"); foreach ($pullMessage as $channelId => $arMessage) { CPullStack::AddByChannel($channelId, Array( 'module_id' => 'main', 'command' => 'user_counter', 'params' => $arMessage, )); } } } } }
public static function DeleteByCode($code) { global $DB, $APPLICATION, $CACHE_MANAGER; if (strlen($code) <= 0) { return false; } $pullMessage = array(); $bPullEnabled = false; if (self::CheckLiveMode()) { $db_lock = $DB->Query("SELECT GET_LOCK('" . $APPLICATION->GetServerUniqID() . "_pull', 0) as L"); $ar_lock = $db_lock->Fetch(); if ($ar_lock["L"] > 0) { $bPullEnabled = true; $arSites = array(); $res = CSite::GetList($b = "", $o = "", array("ACTIVE" => "Y")); while ($row = $res->Fetch()) { $arSites[] = $row['ID']; } $strSQL = "\n\t\t\t\t\tSELECT distinct pc.CHANNEL_ID, uc.USER_ID, uc.SITE_ID, uc.CODE, uc.CNT\n\t\t\t\t\tFROM b_user_counter uc\n\t\t\t\t\tINNER JOIN b_pull_channel pc ON pc.USER_ID = uc.USER_ID\n\t\t\t\t\tWHERE uc.CODE LIKE '**%'\n\t\t\t\t"; $res = $DB->Query($strSQL, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); while ($row = $res->Fetch()) { if ($row["CODE"] == $code) { continue; } CUserCounter::addValueToPullMessage($row, $arSites, $pullMessage); } } } $DB->Query("DELETE FROM b_user_counter WHERE CODE = '" . $code . "'", false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); self::$counters = false; $CACHE_MANAGER->CleanDir("user_counter"); if ($bPullEnabled) { $DB->Query("SELECT RELEASE_LOCK('" . $APPLICATION->GetServerUniqID() . "_pull')"); } foreach ($pullMessage as $channelId => $arMessage) { CPullStack::AddByChannel($channelId, array('module_id' => 'main', 'command' => 'user_counter', 'params' => $arMessage)); } }
public static function IncrementWithSelect($sub_select) { global $DB, $CACHE_MANAGER; if (strlen($sub_select) > 0) { $strSQL = "\n\t\t\t\tINSERT INTO b_user_counter (USER_ID, CNT, SITE_ID, CODE) (" . $sub_select . ")\n\t\t\t\tON DUPLICATE KEY UPDATE CNT = CNT + 1\n\t\t\t"; $DB->Query($strSQL, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); self::$counters = false; $CACHE_MANAGER->CleanDir("user_counter"); } }
public static function IncrementWithSelect($sub_select, $sendPull = true, $arParams = array()) { global $DB, $CACHE_MANAGER, $APPLICATION; if (strlen($sub_select) > 0) { $pullInclude = $sendPull && self::CheckLiveMode(); if (is_array($arParams) && isset($arParams["TAG_SET"])) { $strSQL = "\n\t\t\t\t\tINSERT INTO b_user_counter (USER_ID, CNT, SITE_ID, CODE, SENT, TAG) (" . $sub_select . ")\n\t\t\t\t\tON DUPLICATE KEY UPDATE CNT = CNT + VALUES(CNT), SENT = VALUES(SENT), TAG = '" . $DB->ForSQL($arParams["TAG_SET"]) . "'\n\t\t\t\t"; } elseif (is_array($arParams) && isset($arParams["TAG_CHECK"])) { $strSQL = "\n\t\t\t\t\tINSERT INTO b_user_counter (USER_ID, CNT, SITE_ID, CODE, SENT) (" . $sub_select . ")\n\t\t\t\t\tON DUPLICATE KEY UPDATE CNT = CASE\n\t\t\t\t\t\tWHEN\n\t\t\t\t\t\t\tTAG = '" . $DB->ForSQL($arParams["TAG_CHECK"]) . "'\n\t\t\t\t\t\tTHEN\n\t\t\t\t\t\t\tCNT\n\n\t\t\t\t\t\tELSE\n\t\t\t\t\t\t\tCNT + VALUES(CNT)\n\t\t\t\t\t\tEND,\n\t\t\t\t\t\tSENT = CASE\n\t\t\t\t\t\tWHEN\n\t\t\t\t\t\t\tTAG = '" . $DB->ForSQL($arParams["TAG_CHECK"]) . "'\n\t\t\t\t\t\tTHEN\n\t\t\t\t\t\t\tSENT\n\t\t\t\t\t\tELSE\n\t\t\t\t\t\t\tSENT = VALUES(SENT)\n\t\t\t\t\t\tEND\n\t\t\t\t"; } else { $strSQL = "\n\t\t\t\t\tINSERT INTO b_user_counter (USER_ID, CNT, SITE_ID, CODE, SENT) (" . $sub_select . ")\n\t\t\t\t\tON DUPLICATE KEY UPDATE CNT = CNT + VALUES(CNT), SENT = VALUES(SENT)\n\t\t\t\t"; } $DB->Query($strSQL, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); if (!is_array($arParams) || !isset($arParams["TAG_SET"])) { self::$counters = false; $CACHE_MANAGER->CleanDir("user_counter"); } if ($pullInclude) { $db_lock = $DB->Query("SELECT GET_LOCK('" . $APPLICATION->GetServerUniqID() . "_pull', 0) as L"); $ar_lock = $db_lock->Fetch(); if ($ar_lock["L"] > 0) { $arSites = array(); $res = CSite::GetList($b = "", $o = "", array("ACTIVE" => "Y")); while ($row = $res->Fetch()) { $arSites[] = $row['ID']; } $strSQL = "\n\t\t\t\t\t\tSELECT distinct pc.CHANNEL_ID, uc1.USER_ID, uc1.SITE_ID, uc1.CODE, uc1.CNT\n\t\t\t\t\t\tFROM b_user_counter uc\n\t\t\t\t\t\tINNER JOIN b_user_counter uc1 ON uc1.USER_ID = uc.USER_ID AND uc1.CODE = uc.CODE\n\t\t\t\t\t\tINNER JOIN b_pull_channel pc ON pc.USER_ID = uc.USER_ID\n\t\t\t\t\t\tWHERE uc.SENT = '0'\n\t\t\t\t\t"; $res = $DB->Query($strSQL, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); $pullMessage = array(); while ($row = $res->Fetch()) { if ($row['SITE_ID'] == self::ALL_SITES) { foreach ($arSites as $siteId) { if (isset($pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']])) { $pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']] += intval($row['CNT']); } else { $pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']] = intval($row['CNT']); } } } else { if (isset($pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']])) { $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']] += intval($row['CNT']); } else { $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']] = intval($row['CNT']); } } } $DB->Query("UPDATE b_user_counter SET SENT = '1' WHERE SENT = '0'"); $DB->Query("SELECT RELEASE_LOCK('" . $APPLICATION->GetServerUniqID() . "_pull')"); foreach ($pullMessage as $channelId => $arMessage) { CPullStack::AddByChannel($channelId, array('module_id' => 'main', 'command' => 'user_counter', 'params' => $arMessage)); } } } } }