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 string Comments { get; set; }
[JsonIgnore]
public User User { get; set; }
[JsonIgnore]
public UserFlag UserFlag { get; set; }
}
@@ -272,7 +272,7 @@ namespace Disco.Services.Documents.AttachmentImport
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)
{
rule.User = database.Users.FirstOrDefault(u => u.UserId == rule.UserId);
rule.UserFlag = database.UserFlags.FirstOrDefault(f => f.Id == rule.FlagId);
if (rule.User == null || rule.UserFlag == null)
if (rule.UserFlag == null)
return null;
else
return rule;
@@ -213,11 +212,6 @@ namespace Disco.Services
else
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
rule.UserFlag = database.UserFlags.FirstOrDefault(f => f.Id == rule.FlagId);
if (rule.UserFlag == null)
@@ -256,7 +250,7 @@ namespace Disco.Services
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;
if (target is User targetUser)
@@ -276,9 +270,12 @@ namespace Disco.Services
if (user == null)
return;
var techUser = database.Users.FirstOrDefault(u => u.UserId == rule.UserId);
if (techUser == null)
return;
{
techUser = database.Users.FirstOrDefault(u => u.UserId == rule.UserId);
if (techUser == null)
return;
}
// remove flag
if (!rule.AddFlag)
@@ -45,6 +45,9 @@ namespace Disco.Services
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.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)
{
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()
{
UserFlag = flag,
@@ -1259,8 +1259,6 @@ namespace Disco.Web.Areas.API.Controllers
UserId = rule.UserId,
AddFlag = rule.AddFlag,
Comments = rule.Comments,
UserDisplayName = rule.User.DisplayName,
UserIdFriendly = rule.User.FriendlyId(),
UserFlagName = rule.UserFlag.Name,
UserFlagIcon = rule.UserFlag.Icon,
UserFlagColour = rule.UserFlag.IconColour,
@@ -10,9 +10,6 @@ namespace Disco.Web.Areas.API.Models.DocumentTemplate
public bool AddFlag { get; set; }
public string Comments { get; set; }
public string UserDisplayName { get; set; }
public string UserIdFriendly { get; set; }
public string UserFlagIcon { get; set; }
public string UserFlagColour { get; set; }
public string UserFlagName { get; set; }
@@ -690,14 +690,13 @@
<tr>
<td>Action</td>
<td>User Flag</td>
<td>Created By</td>
<td>Comments</td>
<td>&nbsp;</td>
</tr>
</thead>
<tbody>
<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>
@foreach (var rule in Model.OnImportUserFlagRules)
{
@@ -714,16 +713,6 @@
<span>@rule.UserFlag.Name</span>
}
</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>
@if (string.IsNullOrWhiteSpace(rule.Comments))
{
@@ -805,9 +794,6 @@
<i class="rule-flag fa fa-lg"></i>
<span class="rule-flag"></span>
</td>
<td>
<span class="rule-user"></span>
</td>
<td>
<span class="rule-comments whitespace-pre-wrap"></span>
</td>
@@ -888,7 +874,6 @@
row.find('.rule-action').text(r.AddFlag ? 'Assign' : 'Remove');
row.find('i.rule-flag').addClass('fa-' + r.UserFlagIcon + ' d-' + r.UserFlagColour);
row.find('span.rule-flag').text(r.UserFlagName);
row.find('.rule-user').text(r.UserDisplayName + ' (' + r.UserIdFriendly + ')');
row.find('.rule-comments').text(r.Comments);
rulesTable.find('tbody').append(row);
@@ -927,7 +912,6 @@
<tr>
<td>Action</td>
<td>User Flag</td>
<td>Created By</td>
<td>Comments</td>
</tr>
</thead>
@@ -947,16 +931,6 @@
<span>@rule.UserFlag.Name</span>
}
</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>
@if (string.IsNullOrWhiteSpace(rule.Comments))
{
File diff suppressed because it is too large Load Diff