• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/general/controllergroup.php
  • Класс: CControllerGroup
  • Вызов: CControllerGroup::RunCommand
static function RunCommand($group_id, $php_script, $arParameters = Array())
{
	global $DB;
	$group_id = intval($group_id);

	if ($php_script == 'COUNTERS_UPDATE' || $php_script == 'SET_SETTINGS' || $php_script == 'UPDATE')
	{
		$task_id = $php_script;
		$php_script = "";
	}
	else
	{
		$task_id = 'REMOTE_COMMAND';
	}

	$arUpdateFields = array(
		"~DATE_CREATE" => $DB->CurrentTimeFunction(),
		"INIT_EXECUTE" => ($php_script <> ''? $php_script : false),
		"INIT_EXECUTE_PARAMS" => (count($arParameters)? serialize($arParameters): false),
	);
	$arUpdateBinds = array();
	$strUpdate = "
		UPDATE b_controller_task
		SET ".$DB->PrepareUpdateBind("b_controller_task", $arUpdateFields, "", false, $arUpdateBinds)."
		WHERE
			CONTROLLER_MEMBER_ID = #'MID'#
			AND TASK_ID = '$task_id'
			AND DATE_EXECUTE IS NULL
	";

	$arInsertFields = array(
		"~DATE_CREATE" => $DB->CurrentTimeFunction(),
		"TASK_ID" => $task_id,
		"INIT_EXECUTE" => ($php_script <> ''? $php_script : false),
		"INIT_EXECUTE_PARAMS" => (count($arParameters)? serialize($arParameters): false),
		"DATE_EXECUTE" => false,
	);

	$strSql = "SELECT M.ID FROM b_controller_member M WHERE M.CONTROLLER_GROUP_ID=".$group_id." AND M.ACTIVE = 'Y'";
	$rsMembers = $DB->Query($strSql);
	while ($arMember = $rsMembers->Fetch())
	{
		$arBinds = array();
		foreach ($arUpdateBinds as $field_id)
			$arBinds[$field_id] = $arUpdateFields[$field_id];
		$rsUpdate = $DB->QueryBind(str_replace("#'MID'#", $arMember["ID"], $strUpdate), $arBinds);

		if ($rsUpdate->AffectedRowsCount() <= 0)
		{
			$arInsertFields["CONTROLLER_MEMBER_ID"] = $arMember["ID"];
			$DB->Add("b_controller_task", $arInsertFields, array("INIT_EXECUTE", "INIT_EXECUTE_PARAMS"));
		}
	}
}