in MySql.Web/src/PersonalizationProviderProcedures.cs [531:642]
internal static int my_aspnet_PersonalizationPerUser_SetPageSettings(long applicationId, string userName, string path, byte[] settings, DateTime currentTimeUtc, MySQLPersonalizationConnectionHelper connection)
{
if (applicationId <= 0)
return 0;
if (!connection.Opened)
throw new Exception("Error: Connection should be open");
var cmd = new MySqlCommand();
cmd.Connection = connection.Connection;
cmd.CommandText = "SELECT PathId FROM my_aspnet_paths WHERE ApplicationId = @ApplicationId AND LoweredPath = LOWER(@Path)";
cmd.Parameters.AddWithValue("@ApplicationId", applicationId);
cmd.Parameters.AddWithValue("@Path", path);
var pathId = (string)cmd.ExecuteScalar();
cmd.Parameters.Clear();
if (pathId == null)
{
// create path
MySqlTransaction trans;
trans = connection.Connection.BeginTransaction();
try
{
cmd.Transaction = trans;
cmd.CommandText = "INSERT INTO my_aspnet_paths (applicationId, pathId, path, loweredpath) values (@ApplicationId, @PathId, @Path, LOWER(@Path))";
cmd.Parameters.AddWithValue("@ApplicationId", applicationId);
cmd.Parameters.AddWithValue("@PathId", pathId = Guid.NewGuid().ToString());
cmd.Parameters.AddWithValue("@Path", path);
cmd.ExecuteNonQuery();
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
cmd.Parameters.Clear();
cmd.CommandText = "SELECT id FROM my_aspnet_users WHERE ApplicationId = @ApplicationId AND name = LOWER(@UserName)";
cmd.Parameters.AddWithValue("@ApplicationId", applicationId);
cmd.Parameters.AddWithValue("@UserName", userName);
var userId = (cmd.ExecuteScalar() ?? "").ToString();
userId = string.IsNullOrEmpty(userId) ? "0" : userId;
// create user
if (int.Parse(userId, CultureInfo.InvariantCulture) == 0)
{
// create path
MySqlTransaction trans;
trans = connection.Connection.BeginTransaction();
try
{
cmd.Parameters.Clear();
cmd.Transaction = trans;
cmd.CommandText = "INSERT INTO my_aspnet_users (applicationId, name, isAnonymous, lastActivityDate) values (@ApplicationId, @UserName, false, @CurrentTimeUtc)";
cmd.Parameters.AddWithValue("@ApplicationId", applicationId);
cmd.Parameters.AddWithValue("@UserName", userName);
cmd.Parameters.AddWithValue("@CurrentTimeUtc", DateTime.UtcNow);
cmd.ExecuteNonQuery();
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
cmd.Parameters.Clear();
cmd.CommandText = "SELECT Id from my_aspnet_users where applicationId = @ApplicationId and name = @UserName)";
cmd.Parameters.AddWithValue("@ApplicationId", applicationId);
cmd.Parameters.AddWithValue("@UserName", userName);
userId = (string)cmd.ExecuteScalar();
}
var rows = UpdateUserLastActiveDate(connection.Connection, int.Parse(userId, CultureInfo.InvariantCulture), DateTime.UtcNow);
if (rows == 0)
throw new Exception("User not found");
cmd.Parameters.Clear();
cmd.CommandText = "Select COUNT(*) from my_aspnet_personalizationperuser where userid = @UserId and pathId = @PathId";
cmd.Parameters.AddWithValue("@UserId", userId);
cmd.Parameters.AddWithValue("@PathId", pathId);
if ((long)cmd.ExecuteScalar() > 0)
{
cmd.Parameters.Clear();
cmd.CommandText = "UPDATE my_aspnet_personalizationperuser SET PageSettings = @PageSettings, LastUpdatedDate = @CurrentTimeUtc " +
"where userid = @UserId and pathId = @PathId";
cmd.Parameters.AddWithValue("@UserId", userId);
cmd.Parameters.AddWithValue("@PathId", pathId);
cmd.Parameters.AddWithValue("@PageSettings", settings);
cmd.Parameters.AddWithValue("@CurrentTimeUtc", DateTime.UtcNow);
cmd.ExecuteNonQuery();
}
else
{
cmd.Parameters.Clear();
cmd.CommandText = "INSERT INTO my_aspnet_personalizationperuser(applicationId, pathId, userId, pageSettings, lastUpdatedDate) VALUES(@applicationId, @PathId, @userId, @PageSettings, @LastUpdatedDate)";
cmd.Parameters.AddWithValue("@applicationId", applicationId);
cmd.Parameters.AddWithValue("@UserId", userId);
cmd.Parameters.AddWithValue("@PathId", pathId);
cmd.Parameters.AddWithValue("@PageSettings", settings);
cmd.Parameters.AddWithValue("@LastUpdatedDate", DateTime.UtcNow);
rows = cmd.ExecuteNonQuery();
}
return rows;
}