• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/general/counter.php
  • Класс: CAllControllerCounter
  • Вызов: CAllControllerCounter::UpdateMemberValues
static function UpdateMemberValues($CONTROLLER_MEMBER_ID, $arValues, $preserve = false)
{
	global $DB;
	$CONTROLLER_MEMBER_ID = intval($CONTROLLER_MEMBER_ID);

	if (!$preserve)
	{
		$DB->Query("
			DELETE FROM b_controller_counter_value
			WHERE CONTROLLER_MEMBER_ID = ".$CONTROLLER_MEMBER_ID."
		");
	}

	foreach($arValues as $CONTROLLER_COUNTER_ID => $value)
	{
		$CONTROLLER_COUNTER_ID = intval($CONTROLLER_COUNTER_ID);
		if($CONTROLLER_COUNTER_ID > 0)
		{
			if(isset($arValues["DATE_FORMAT"]) && CheckDateTime($value, $arValues["DATE_FORMAT"]))
				$sqlDate = $DB->CharToDateFunction($DB->FormatDate($value, $arValues["DATE_FORMAT"], CLang::GetDateFormat("FULL", LANGUAGE_ID)));
			elseif(CheckDateTime($value, "YYYY-MM-DD HH:MI:SS"))
				$sqlDate = $DB->CharToDateFunction($DB->FormatDate($value, "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANGUAGE_ID)));
			else
				$sqlDate = "NULL";

			if ($preserve)
			{
				$DB->Query("
					DELETE FROM b_controller_counter_value
					WHERE CONTROLLER_MEMBER_ID = ".$CONTROLLER_MEMBER_ID."
					AND CONTROLLER_COUNTER_ID = ".$CONTROLLER_COUNTER_ID."
				");
			}

			$res = $DB->Query("
				INSERT INTO b_controller_counter_value
				(CONTROLLER_MEMBER_ID, CONTROLLER_COUNTER_ID, VALUE_INT, VALUE_FLOAT, VALUE_DATE, VALUE_STRING)
				SELECT
					cm.ID
					,cc.ID
					,".intval($value)."
					,".roundDB($value)."
					,".$sqlDate."
					,'".$DB->ForSQL($value, 255)."'
				FROM
					b_controller_member cm
					INNER JOIN b_controller_counter_group ccg ON ccg.CONTROLLER_GROUP_ID = cm.CONTROLLER_GROUP_ID
					INNER JOIN b_controller_counter cc ON cc.ID = ccg.CONTROLLER_COUNTER_ID
				WHERE
					cm.ID = ".$CONTROLLER_MEMBER_ID."
					and cc.ID = ".$CONTROLLER_COUNTER_ID."
			", true);

			if (!$res)
				break;
		}
	}

	return true;
}