document template user flag rules should use the creator user for flag assignment

This commit is contained in:
Gary Sharp
2023-04-16 15:14:14 +10:00
parent cfe4c4b912
commit 937508c440
8 changed files with 191 additions and 337 deletions
@@ -14,8 +14,6 @@ namespace Disco.Models.Services.Documents
public bool AddFlag { get; set; } public bool AddFlag { get; set; }
public string Comments { get; set; } public string Comments { get; set; }
[JsonIgnore]
public User User { get; set; }
[JsonIgnore] [JsonIgnore]
public UserFlag UserFlag { get; set; } public UserFlag UserFlag { get; set; }
} }
@@ -272,7 +272,7 @@ namespace Disco.Services.Documents.AttachmentImport
foreach ( var rule in rules) foreach ( var rule in rules)
{ {
rule.Apply(Database, Identifier.Target); rule.Apply(Database, Identifier.Target, creatorUser);
} }
} }
} }
@@ -195,10 +195,9 @@ namespace Disco.Services
public static OnImportUserFlagRule AddDetails(this OnImportUserFlagRule rule, DiscoDataContext database) public static OnImportUserFlagRule AddDetails(this OnImportUserFlagRule rule, DiscoDataContext database)
{ {
rule.User = database.Users.FirstOrDefault(u => u.UserId == rule.UserId);
rule.UserFlag = database.UserFlags.FirstOrDefault(f => f.Id == rule.FlagId); rule.UserFlag = database.UserFlags.FirstOrDefault(f => f.Id == rule.FlagId);
if (rule.User == null || rule.UserFlag == null) if (rule.UserFlag == null)
return null; return null;
else else
return rule; return rule;
@@ -213,11 +212,6 @@ namespace Disco.Services
else else
rules = JsonConvert.DeserializeObject<List<OnImportUserFlagRule>>(template.OnImportUserFlagRules); rules = JsonConvert.DeserializeObject<List<OnImportUserFlagRule>>(template.OnImportUserFlagRules);
// validate user id
rule.User = database.Users.FirstOrDefault(u => u.UserId == rule.UserId);
if (rule.User == null)
throw new ArgumentException("Unknown rule user id", nameof(rule));
// validate user flag // validate user flag
rule.UserFlag = database.UserFlags.FirstOrDefault(f => f.Id == rule.FlagId); rule.UserFlag = database.UserFlags.FirstOrDefault(f => f.Id == rule.FlagId);
if (rule.UserFlag == null) if (rule.UserFlag == null)
@@ -256,7 +250,7 @@ namespace Disco.Services
return true; return true;
} }
public static void Apply(this OnImportUserFlagRule rule, DiscoDataContext database, IAttachmentTarget target) public static void Apply(this OnImportUserFlagRule rule, DiscoDataContext database, IAttachmentTarget target, User techUser)
{ {
string userId; string userId;
if (target is User targetUser) if (target is User targetUser)
@@ -276,9 +270,12 @@ namespace Disco.Services
if (user == null) if (user == null)
return; return;
var techUser = database.Users.FirstOrDefault(u => u.UserId == rule.UserId); if (techUser == null)
{
techUser = database.Users.FirstOrDefault(u => u.UserId == rule.UserId);
if (techUser == null) if (techUser == null)
return; return;
}
// remove flag // remove flag
if (!rule.AddFlag) if (!rule.AddFlag)
@@ -45,6 +45,9 @@ namespace Disco.Services
public static void OnRemoveUnsafe(this UserFlagAssignment fa, DiscoDataContext Database, User RemovingUser) public static void OnRemoveUnsafe(this UserFlagAssignment fa, DiscoDataContext Database, User RemovingUser)
{ {
fa = Database.UserFlagAssignments.First(a => a.Id == fa.Id);
RemovingUser = Database.Users.First(u => u.UserId == RemovingUser.UserId);
fa.RemovedDate = DateTime.Now; fa.RemovedDate = DateTime.Now;
fa.RemovedUserId = RemovingUser.UserId; fa.RemovedUserId = RemovingUser.UserId;
@@ -95,6 +98,10 @@ namespace Disco.Services
public static UserFlagAssignment OnAddUserFlagUnsafe(this User u, DiscoDataContext Database, UserFlag flag, User AddingUser, string Comments) public static UserFlagAssignment OnAddUserFlagUnsafe(this User u, DiscoDataContext Database, UserFlag flag, User AddingUser, string Comments)
{ {
flag = Database.UserFlags.First(f => f.Id == flag.Id);
u = Database.Users.First(user => user.UserId == u.UserId);
AddingUser = Database.Users.First(user => user.UserId == AddingUser.UserId);
var fa = new UserFlagAssignment() var fa = new UserFlagAssignment()
{ {
UserFlag = flag, UserFlag = flag,
@@ -1259,8 +1259,6 @@ namespace Disco.Web.Areas.API.Controllers
UserId = rule.UserId, UserId = rule.UserId,
AddFlag = rule.AddFlag, AddFlag = rule.AddFlag,
Comments = rule.Comments, Comments = rule.Comments,
UserDisplayName = rule.User.DisplayName,
UserIdFriendly = rule.User.FriendlyId(),
UserFlagName = rule.UserFlag.Name, UserFlagName = rule.UserFlag.Name,
UserFlagIcon = rule.UserFlag.Icon, UserFlagIcon = rule.UserFlag.Icon,
UserFlagColour = rule.UserFlag.IconColour, UserFlagColour = rule.UserFlag.IconColour,
@@ -10,9 +10,6 @@ namespace Disco.Web.Areas.API.Models.DocumentTemplate
public bool AddFlag { get; set; } public bool AddFlag { get; set; }
public string Comments { get; set; } public string Comments { get; set; }
public string UserDisplayName { get; set; }
public string UserIdFriendly { get; set; }
public string UserFlagIcon { get; set; } public string UserFlagIcon { get; set; }
public string UserFlagColour { get; set; } public string UserFlagColour { get; set; }
public string UserFlagName { get; set; } public string UserFlagName { get; set; }
@@ -690,14 +690,13 @@
<tr> <tr>
<td>Action</td> <td>Action</td>
<td>User Flag</td> <td>User Flag</td>
<td>Created By</td>
<td>Comments</td> <td>Comments</td>
<td>&nbsp;</td> <td>&nbsp;</td>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="@(Model.OnImportUserFlagRules.Any() ? "hidden" : null)"> <tr class="@(Model.OnImportUserFlagRules.Any() ? "hidden" : null)">
<td colspan="5"><span class="smallMessage">&lt;None Specified&gt;</span></td> <td colspan="4"><span class="smallMessage">&lt;None Specified&gt;</span></td>
</tr> </tr>
@foreach (var rule in Model.OnImportUserFlagRules) @foreach (var rule in Model.OnImportUserFlagRules)
{ {
@@ -714,16 +713,6 @@
<span>@rule.UserFlag.Name</span> <span>@rule.UserFlag.Name</span>
} }
</td> </td>
<td>
@if (Authorization.Has(Claims.User.Show))
{
<span>@Html.ActionLink(string.Format("{0} ({1})", rule.User.DisplayName, rule.User.FriendlyId()), MVC.User.Show(rule.User.UserId))</span>
}
else
{
<span>@string.Format("{0} ({1})", rule.User.DisplayName, rule.User.FriendlyId())</span>
}
</td>
<td> <td>
@if (string.IsNullOrWhiteSpace(rule.Comments)) @if (string.IsNullOrWhiteSpace(rule.Comments))
{ {
@@ -805,9 +794,6 @@
<i class="rule-flag fa fa-lg"></i> <i class="rule-flag fa fa-lg"></i>
<span class="rule-flag"></span> <span class="rule-flag"></span>
</td> </td>
<td>
<span class="rule-user"></span>
</td>
<td> <td>
<span class="rule-comments whitespace-pre-wrap"></span> <span class="rule-comments whitespace-pre-wrap"></span>
</td> </td>
@@ -888,7 +874,6 @@
row.find('.rule-action').text(r.AddFlag ? 'Assign' : 'Remove'); row.find('.rule-action').text(r.AddFlag ? 'Assign' : 'Remove');
row.find('i.rule-flag').addClass('fa-' + r.UserFlagIcon + ' d-' + r.UserFlagColour); row.find('i.rule-flag').addClass('fa-' + r.UserFlagIcon + ' d-' + r.UserFlagColour);
row.find('span.rule-flag').text(r.UserFlagName); row.find('span.rule-flag').text(r.UserFlagName);
row.find('.rule-user').text(r.UserDisplayName + ' (' + r.UserIdFriendly + ')');
row.find('.rule-comments').text(r.Comments); row.find('.rule-comments').text(r.Comments);
rulesTable.find('tbody').append(row); rulesTable.find('tbody').append(row);
@@ -927,7 +912,6 @@
<tr> <tr>
<td>Action</td> <td>Action</td>
<td>User Flag</td> <td>User Flag</td>
<td>Created By</td>
<td>Comments</td> <td>Comments</td>
</tr> </tr>
</thead> </thead>
@@ -947,16 +931,6 @@
<span>@rule.UserFlag.Name</span> <span>@rule.UserFlag.Name</span>
} }
</td> </td>
<td>
@if (Authorization.Has(Claims.User.Show))
{
<span>@Html.ActionLink(string.Format("{0} ({1})", rule.User.DisplayName, rule.User.FriendlyId()), MVC.User.Show(rule.User.UserId))</span>
}
else
{
<span>@string.Format("{0} ({1})", rule.User.DisplayName, rule.User.FriendlyId())</span>
}
</td>
<td> <td>
@if (string.IsNullOrWhiteSpace(rule.Comments)) @if (string.IsNullOrWhiteSpace(rule.Comments))
{ {
File diff suppressed because it is too large Load Diff