public static function updateUserDataPoint($userId, $dataPointId, $value, $updateTimestamp = null, $triggers = array(), $silentlySkipTriggers = false) { // Does the user have a value for this data point already $exists = DB::table("users_data_points")->where("user_id", '=', (int) $userId)->where("data_point_id", '=', $dataPointId)->grab(1)->get(); $oldvalue = ""; // If they have an entry already, just update it if ($exists) { $userDataPointsId = $exists->id; $oldvalue = $exists->value; // only if we're dealing with making new kicks, allow an old value and a new // value to be the same and so that a new record is created in user_data_point_history if ($oldvalue == $value && $dataPointId == DataPoint::$BABY_KICK) { $isUpdated = true; } else { //$isUpdated would be false otherwise if $oldvalue and $value were the same $isUpdated = DB::table('users_data_points')->where('user_id', '=', (int) $userId)->where('data_point_id', '=', $dataPointId)->update(array("value" => $value)); } // Otherwise, create a new one } else { $array = array('user_id' => $userId, 'data_point_id' => $dataPointId, 'value' => $value); $userDataPointsId = DB::table('users_data_points')->insert_get_id($array); $isUpdated = true; } // If the update was successful, add in history records Log::user("isUpdated is: {$isUpdated} and user data points id is: {$userDataPointsId}"); if ($userDataPointsId > 0) { // $isUpdated && $dt = new DateTime(); if ($updateTimestamp) { $dt->setTimestamp($updateTimestamp); } $updateTime = $dt->format(DATABASE_DATETIME_FORMAT); $array = array('current_user_id' => $userId, 'users_data_points_id' => $userDataPointsId, 'updated_at' => $updateTime, 'old_value' => $oldvalue, 'new_value' => $value); //Log::user((print_r($array))); DB::table('user_data_point_history')->insert($array); } if ($silentlySkipTriggers) { return true; } // mostly for testing Log::user("Calling out triggers"); // Are there any triggers to checked? $defaultTriggers = DataPoint::getApplicableTriggers($dataPointId, $userId); $triggers = array_merge($triggers, $defaultTriggers); DataPoint::processTriggers($triggers); return true; }