function Update($ID, $arFields, $strNote = "")
 {
     global $DB, $USER_FIELD_MANAGER;
     $dbr_m = CControllerMember::GetByID($ID);
     $ar_m = $dbr_m->Fetch();
     if (!CControllerMember::CheckFields($arFields, $ID)) {
         return false;
     }
     if (!$USER_FIELD_MANAGER->CheckFields("CONTROLLER_MEMBER", $ID, $arFields)) {
         return false;
     }
     if (isset($arFields["CONTROLLER_GROUP_ID"]) && $ar_m["CONTROLLER_GROUP_ID"] != $arFields["CONTROLLER_GROUP_ID"] && !isset($arFields["IN_GROUP_FROM"])) {
         $arFields["~IN_GROUP_FROM"] = $DB->CurrentTimeFunction();
     }
     unset($arFields["TIMESTAMP_X"]);
     if (array_key_exists("TIMESTAMP", $arFields)) {
         $arFields["~TIMESTAMP_X"] = $DB->CharToDateFunction($arFields["TIMESTAMP"]);
     } else {
         $arFields["~TIMESTAMP_X"] = $DB->CurrentTimeFunction();
     }
     $arUpdateBinds = array();
     $strUpdate = $DB->PrepareUpdateBind("b_controller_member", $arFields, "", false, $arUpdateBinds);
     $strSql = "UPDATE b_controller_member SET " . $strUpdate . " WHERE ID=" . intval($ID);
     $arBinds = array();
     foreach ($arUpdateBinds as $field_id) {
         $arBinds[$field_id] = $arFields[$field_id];
     }
     $DB->QueryBind($strSql, $arBinds);
     $dbr_m = CControllerMember::GetByID($ID);
     $ar_n = $dbr_m->Fetch();
     CControllerMember::logChanges($ID, $ar_m, $ar_n, $strNote);
     $USER_FIELD_MANAGER->Update("CONTROLLER_MEMBER", $ID, $arFields);
     if (isset($arFields["CONTROLLER_GROUP_ID"]) && $ar_m["CONTROLLER_GROUP_ID"] != $arFields["CONTROLLER_GROUP_ID"]) {
         CControllerMember::SetGroupSettings($ID);
     }
     if (isset($arFields["ACTIVE"]) && $ar_m["ACTIVE"] != $arFields["ACTIVE"] || isset($arFields["DATE_ACTIVE_FROM"]) && $ar_m["DATE_ACTIVE_FROM"] != $arFields["DATE_ACTIVE_FROM"] || isset($arFields["DATE_ACTIVE_TO"]) && $ar_m["DATE_ACTIVE_TO"] != $arFields["DATE_ACTIVE_TO"]) {
         CControllerMember::UnregisterExpiredAgent($ID);
     }
     return true;
 }