User Flag Expressions

Adds the ability to have expressions evaluated when flags are added and
removed.
This commit is contained in:
Gary Sharp
2016-11-09 20:06:24 +11:00
parent cbf16a41a6
commit 065b14b158
24 changed files with 1241 additions and 210 deletions
+7
View File
@@ -154,6 +154,10 @@
<Compile Include="Migrations\201609260741183_DBv17.Designer.cs"> <Compile Include="Migrations\201609260741183_DBv17.Designer.cs">
<DependentUpon>201609260741183_DBv17.cs</DependentUpon> <DependentUpon>201609260741183_DBv17.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Migrations\201611090729100_DBv18.cs" />
<Compile Include="Migrations\201611090729100_DBv18.Designer.cs">
<DependentUpon>201611090729100_DBv18.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" /> <Compile Include="Migrations\Configuration.cs" />
<Compile Include="Migrations\DiscoDataMigrator.cs" /> <Compile Include="Migrations\DiscoDataMigrator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
@@ -220,6 +224,9 @@
<EmbeddedResource Include="Migrations\201609260741183_DBv17.resx"> <EmbeddedResource Include="Migrations\201609260741183_DBv17.resx">
<DependentUpon>201609260741183_DBv17.cs</DependentUpon> <DependentUpon>201609260741183_DBv17.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Migrations\201611090729100_DBv18.resx">
<DependentUpon>201611090729100_DBv18.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+27
View File
@@ -0,0 +1,27 @@
// <auto-generated />
namespace Disco.Data.Migrations
{
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
public sealed partial class DBv18 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(DBv18));
string IMigrationMetadata.Id
{
get { return "201611090729100_DBv18"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,24 @@
namespace Disco.Data.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class DBv18 : DbMigration
{
public override void Up()
{
AddColumn("dbo.UserFlagAssignments", "OnAssignmentExpressionResult", c => c.String());
AddColumn("dbo.UserFlagAssignments", "OnUnassignmentExpressionResult", c => c.String());
AddColumn("dbo.UserFlags", "OnAssignmentExpression", c => c.String());
AddColumn("dbo.UserFlags", "OnUnassignmentExpression", c => c.String());
}
public override void Down()
{
DropColumn("dbo.UserFlags", "OnUnassignmentExpression");
DropColumn("dbo.UserFlags", "OnAssignmentExpression");
DropColumn("dbo.UserFlagAssignments", "OnUnassignmentExpressionResult");
DropColumn("dbo.UserFlagAssignments", "OnAssignmentExpressionResult");
}
}
}
File diff suppressed because one or more lines are too long
@@ -22,6 +22,11 @@ namespace Disco.Models.Repository
public string UsersLinkedGroup { get; set; } public string UsersLinkedGroup { get; set; }
public string UserDevicesLinkedGroup { get; set; } public string UserDevicesLinkedGroup { get; set; }
[DataType(DataType.MultilineText)]
public string OnAssignmentExpression { get; set; }
[DataType(DataType.MultilineText)]
public string OnUnassignmentExpression { get; set; }
public virtual IList<UserFlagAssignment> UserFlagAssignments { get; set; } public virtual IList<UserFlagAssignment> UserFlagAssignments { get; set; }
public override string ToString() public override string ToString()
@@ -22,6 +22,9 @@ namespace Disco.Models.Repository
public string Comments { get; set; } public string Comments { get; set; }
public string OnAssignmentExpressionResult { get; set; }
public string OnUnassignmentExpressionResult { get; set; }
[ForeignKey("UserFlagId"), InverseProperty("UserFlagAssignments")] [ForeignKey("UserFlagId"), InverseProperty("UserFlagAssignments")]
public virtual UserFlag UserFlag { get; set; } public virtual UserFlag UserFlag { get; set; }
+1
View File
@@ -333,6 +333,7 @@
<Compile Include="Interop\ActiveDirectory\ADSite.cs" /> <Compile Include="Interop\ActiveDirectory\ADSite.cs" />
<Compile Include="Interop\ActiveDirectory\ADNetworkLogonDatesUpdateTask.cs" /> <Compile Include="Interop\ActiveDirectory\ADNetworkLogonDatesUpdateTask.cs" />
<Compile Include="Interop\ActiveDirectory\ADUserAccount.cs" /> <Compile Include="Interop\ActiveDirectory\ADUserAccount.cs" />
<Compile Include="Interop\ActiveDirectory\ADUserAccountControlFlags.cs" />
<Compile Include="Interop\ActiveDirectory\Description.cs" /> <Compile Include="Interop\ActiveDirectory\Description.cs" />
<Compile Include="Interop\ActiveDirectory\IADObject.cs" /> <Compile Include="Interop\ActiveDirectory\IADObject.cs" />
<Compile Include="Interop\DiscoServices\DiscoServiceHelpers.cs" /> <Compile Include="Interop\DiscoServices\DiscoServiceHelpers.cs" />
@@ -1,6 +1,8 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services.Authorization; using Disco.Services.Authorization;
using Disco.Services.Expressions;
using Disco.Services.Logging;
using Disco.Services.Users; using Disco.Services.Users;
using System; using System;
using System.Linq; using System.Linq;
@@ -32,13 +34,36 @@ namespace Disco.Services
return UserService.CurrentAuthorization.Has(Claims.User.Actions.RemoveFlags); return UserService.CurrentAuthorization.Has(Claims.User.Actions.RemoveFlags);
} }
public static void OnRemove(this UserFlagAssignment fa, User Technician) public static void OnRemove(this UserFlagAssignment fa, DiscoDataContext Database, User RemovingUser)
{ {
if (!fa.CanRemove()) if (!fa.CanRemove())
throw new InvalidOperationException("Removing user flags is denied"); throw new InvalidOperationException("Removing user flags is denied");
fa.OnRemoveUnsafe(Database, RemovingUser);
}
public static void OnRemoveUnsafe(this UserFlagAssignment fa, DiscoDataContext Database, User RemovingUser)
{
fa.RemovedDate = DateTime.Now; fa.RemovedDate = DateTime.Now;
fa.RemovedUserId = Technician.UserId; fa.RemovedUserId = RemovingUser.UserId;
if (!string.IsNullOrWhiteSpace(fa.UserFlag.OnUnassignmentExpression))
{
try
{
Database.SaveChanges();
var expressionResult = fa.EvaluateOnUnassignmentExpression(Database, RemovingUser, fa.AddedDate);
if (!string.IsNullOrWhiteSpace(expressionResult))
{
fa.OnUnassignmentExpressionResult = expressionResult;
Database.SaveChanges();
}
}
catch (Exception ex)
{
SystemLog.LogException("User Flag Expression - OnUnassignmentExpression", ex);
}
}
} }
#endregion #endregion
@@ -59,24 +84,116 @@ namespace Disco.Services
return true; return true;
} }
public static UserFlagAssignment OnAddUserFlag(this User u, DiscoDataContext Database, UserFlag flag, User Technician, string Comments) public static UserFlagAssignment OnAddUserFlag(this User u, DiscoDataContext Database, UserFlag flag, User AddingUser, string Comments)
{ {
if (!u.CanAddUserFlag(flag)) if (!u.CanAddUserFlag(flag))
throw new InvalidOperationException("Adding user flag is denied"); throw new InvalidOperationException("Adding user flag is denied");
return u.OnAddUserFlagUnsafe(Database, flag, AddingUser, Comments);
}
public static UserFlagAssignment OnAddUserFlagUnsafe(this User u, DiscoDataContext Database, UserFlag flag, User AddingUser, string Comments)
{
var fa = new UserFlagAssignment() var fa = new UserFlagAssignment()
{ {
UserFlagId = flag.Id, UserFlag = flag,
UserId = u.UserId, User = u,
AddedDate = DateTime.Now, AddedDate = DateTime.Now,
AddedUserId = Technician.UserId, AddedUser = AddingUser,
Comments = string.IsNullOrWhiteSpace(Comments) ? null : Comments.Trim() Comments = string.IsNullOrWhiteSpace(Comments) ? null : Comments.Trim()
}; };
Database.UserFlagAssignments.Add(fa); Database.UserFlagAssignments.Add(fa);
if (!string.IsNullOrWhiteSpace(flag.OnAssignmentExpression))
{
try
{
Database.SaveChanges();
fa = Database.UserFlagAssignments.Where(ufa => ufa.Id == fa.Id).First();
var expressionResult = fa.EvaluateOnAssignmentExpression(Database, AddingUser, fa.AddedDate);
if (!string.IsNullOrWhiteSpace(expressionResult))
{
fa.OnAssignmentExpressionResult = expressionResult;
Database.SaveChanges();
}
}
catch (Exception ex)
{
SystemLog.LogException("User Flag Expression - OnAssignmentExpression", ex);
}
}
return fa; return fa;
} }
#endregion #endregion
#region Expressions
public static Expression OnAssignmentExpressionFromCache(this UserFlag uf)
{
return ExpressionCache.GetValue("UserFlag_OnAssignmentExpression", uf.Id.ToString(), () => { return Expression.TokenizeSingleDynamic(null, uf.OnAssignmentExpression, 0); });
}
public static void OnAssignmentExpressionInvalidateCache(this UserFlag uf)
{
ExpressionCache.InvalidateKey("UserFlag_OnAssignmentExpression", uf.Id.ToString());
}
public static string EvaluateOnAssignmentExpression(this UserFlagAssignment ufa, DiscoDataContext Database, User AddingUser, DateTime TimeStamp)
{
if (!string.IsNullOrEmpty(ufa.UserFlag.OnAssignmentExpression))
{
Expression compiledExpression = ufa.UserFlag.OnAssignmentExpressionFromCache();
System.Collections.IDictionary evaluatorVariables = Expression.StandardVariables(null, Database, AddingUser, TimeStamp, null);
try
{
object result = compiledExpression.EvaluateFirst<object>(ufa, evaluatorVariables);
if (result == null)
return null;
else
return result.ToString();
}
catch
{
throw;
}
}
return null;
}
public static Expression OnUnassignmentExpressionFromCache(this UserFlag uf)
{
return ExpressionCache.GetValue("UserFlag_OnUnassignmentExpression", uf.Id.ToString(), () => { return Expression.TokenizeSingleDynamic(null, uf.OnUnassignmentExpression, 0); });
}
public static void OnUnassignmentExpressionInvalidateCache(this UserFlag uf)
{
ExpressionCache.InvalidateKey("UserFlag_OnUnassignmentExpression", uf.Id.ToString());
}
public static string EvaluateOnUnassignmentExpression(this UserFlagAssignment ufa, DiscoDataContext Database, User RemovingUser, DateTime TimeStamp)
{
if (!string.IsNullOrEmpty(ufa.UserFlag.OnUnassignmentExpression))
{
Expression compiledExpression = ufa.UserFlag.OnUnassignmentExpressionFromCache();
System.Collections.IDictionary evaluatorVariables = Expression.StandardVariables(null, Database, RemovingUser, TimeStamp, null);
try
{
object result = compiledExpression.EvaluateFirst<object>(ufa, evaluatorVariables);
if (result == null)
return null;
else
return result.ToString();
}
catch
{
throw;
}
}
return null;
}
#endregion
} }
} }
@@ -146,17 +146,7 @@ namespace Disco.Services.Users.UserFlags
{ {
Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Assigning Flag: {0}", user.ToString())); Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Assigning Flag: {0}", user.ToString()));
var fa = new UserFlagAssignment() return user.OnAddUserFlag(Database, UserFlag, Technician, comments);
{
UserFlagId = UserFlag.Id,
UserId = user.UserId,
AddedDate = DateTime.Now,
AddedUserId = Technician.UserId,
Comments = comments
};
Database.UserFlagAssignments.Add(fa);
return fa;
}).ToList(); }).ToList();
// Save Chunk Items to Database // Save Chunk Items to Database
@@ -202,8 +192,7 @@ namespace Disco.Services.Users.UserFlags
{ {
Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Removing Flag: {0}", flagAssignment.User.ToString())); Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Removing Flag: {0}", flagAssignment.User.ToString()));
flagAssignment.RemovedDate = removedDateTime; flagAssignment.OnRemoveUnsafe(Database, Technician);
flagAssignment.RemovedUserId = Technician.UserId;
return flagAssignment; return flagAssignment;
}).ToList(); }).ToList();
@@ -223,17 +212,7 @@ namespace Disco.Services.Users.UserFlags
{ {
Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Assigning Flag: {0}", user.ToString())); Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Assigning Flag: {0}", user.ToString()));
var fa = new UserFlagAssignment() return user.OnAddUserFlag(Database, UserFlag, Technician, comments);
{
UserFlagId = UserFlag.Id,
UserId = user.UserId,
AddedDate = DateTime.Now,
AddedUserId = Technician.UserId,
Comments = comments
};
Database.UserFlagAssignments.Add(fa);
return fa;
}).ToList(); }).ToList();
// Save Chunk Items to Database // Save Chunk Items to Database
@@ -29,9 +29,9 @@ namespace Disco.Services.Users.UserFlags
{ {
// Load Flag // Load Flag
var userFlag = Database.UserFlags.FirstOrDefault(uf => uf.Id == UserFlagId); var userFlag = Database.UserFlags.FirstOrDefault(uf => uf.Id == UserFlagId);
if (userFlag == null) if (userFlag == null)
throw new Exception("Invalid User Flag Id"); throw new Exception("Invalid User Flag Id");
Status.UpdateStatus(0, string.Format("Bulk Assigning Users to User Flag: {0}", userFlag.Name), "Preparing to start"); Status.UpdateStatus(0, string.Format("Bulk Assigning Users to User Flag: {0}", userFlag.Name), "Preparing to start");
// Load Technician // Load Technician
@@ -75,7 +75,9 @@ namespace Disco.Web.Areas.API.Controllers
[DiscoAuthorizeAny(Claims.User.Actions.AddFlags)] [DiscoAuthorizeAny(Claims.User.Actions.AddFlags)]
public virtual ActionResult AddUser(int id, string UserId, string Comments) public virtual ActionResult AddUser(int id, string UserId, string Comments)
{ {
var userFlag = UserFlagService.GetUserFlag(id); Database.Configuration.LazyLoadingEnabled = true;
var userFlag = Database.UserFlags.Find(id);
if (userFlag == null) if (userFlag == null)
throw new ArgumentException("Invalid User Flag Id", "id"); throw new ArgumentException("Invalid User Flag Id", "id");
@@ -86,8 +88,9 @@ namespace Disco.Web.Areas.API.Controllers
if (!user.CanAddUserFlag(userFlag)) if (!user.CanAddUserFlag(userFlag))
throw new InvalidOperationException("Adding user flag is denied"); throw new InvalidOperationException("Adding user flag is denied");
var userFlagAssignment = user.OnAddUserFlag(Database, userFlag, CurrentUser, Comments); var addingUser = Database.Users.Find(CurrentUser.UserId);
Database.SaveChanges();
var userFlagAssignment = user.OnAddUserFlag(Database, userFlag, addingUser, Comments);
return Redirect(string.Format("{0}#UserDetailTab-Flags", Url.Action(MVC.User.Show(user.UserId)))); return Redirect(string.Format("{0}#UserDetailTab-Flags", Url.Action(MVC.User.Show(user.UserId))));
} }
@@ -95,6 +98,8 @@ namespace Disco.Web.Areas.API.Controllers
[DiscoAuthorizeAny(Claims.User.Actions.RemoveFlags)] [DiscoAuthorizeAny(Claims.User.Actions.RemoveFlags)]
public virtual ActionResult RemoveUser(int id) public virtual ActionResult RemoveUser(int id)
{ {
Database.Configuration.LazyLoadingEnabled = true;
var userFlagAssignment = Database.UserFlagAssignments.FirstOrDefault(a => a.Id == id); var userFlagAssignment = Database.UserFlagAssignments.FirstOrDefault(a => a.Id == id);
if (userFlagAssignment == null) if (userFlagAssignment == null)
throw new ArgumentException("Invalid User Flag Assignment Id", "id"); throw new ArgumentException("Invalid User Flag Assignment Id", "id");
@@ -102,7 +107,9 @@ namespace Disco.Web.Areas.API.Controllers
if (!userFlagAssignment.CanRemove()) if (!userFlagAssignment.CanRemove())
throw new InvalidOperationException("Removing user flag assignment is denied"); throw new InvalidOperationException("Removing user flag assignment is denied");
userFlagAssignment.OnRemove(CurrentUser); var removingUser = Database.Users.Find(CurrentUser.UserId);
userFlagAssignment.OnRemove(Database, removingUser);
Database.SaveChanges(); Database.SaveChanges();
return Redirect(string.Format("{0}#UserDetailTab-Flags", Url.Action(MVC.User.Show(userFlagAssignment.UserId)))); return Redirect(string.Format("{0}#UserDetailTab-Flags", Url.Action(MVC.User.Show(userFlagAssignment.UserId))));
@@ -1,4 +1,5 @@
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services;
using Disco.Services.Authorization; using Disco.Services.Authorization;
using Disco.Services.Interop.ActiveDirectory; using Disco.Services.Interop.ActiveDirectory;
using Disco.Services.Tasks; using Disco.Services.Tasks;
@@ -16,6 +17,8 @@ namespace Disco.Web.Areas.API.Controllers
const string pDescription = "description"; const string pDescription = "description";
const string pIcon = "icon"; const string pIcon = "icon";
const string pIconColour = "iconcolour"; const string pIconColour = "iconcolour";
const string pOnAssignmentExpression = "onassignmentexpression";
const string pOnUnassignmentExpression = "onunassignmentexpression";
[DiscoAuthorize(Claims.Config.UserFlag.Configure)] [DiscoAuthorize(Claims.Config.UserFlag.Configure)]
public virtual ActionResult Update(int id, string key, string value = null, Nullable<bool> redirect = null) public virtual ActionResult Update(int id, string key, string value = null, Nullable<bool> redirect = null)
@@ -45,6 +48,12 @@ namespace Disco.Web.Areas.API.Controllers
case pIconColour: case pIconColour:
UpdateIconColour(flag, value); UpdateIconColour(flag, value);
break; break;
case pOnAssignmentExpression:
UpdateOnAssignmentExpression(flag, value);
break;
case pOnUnassignmentExpression:
UpdateOnUnassignmentExpression(flag, value);
break;
default: default:
throw new Exception("Invalid Update Key"); throw new Exception("Invalid Update Key");
} }
@@ -123,6 +132,16 @@ namespace Disco.Web.Areas.API.Controllers
} }
} }
[DiscoAuthorize(Claims.Config.UserFlag.Configure)] [DiscoAuthorize(Claims.Config.UserFlag.Configure)]
public virtual ActionResult UpdateOnAssignmentExpression(int id, string OnAssignmentExpression = null, bool redirect = false)
{
return Update(id, pOnAssignmentExpression, OnAssignmentExpression, redirect);
}
[DiscoAuthorize(Claims.Config.UserFlag.Configure)]
public virtual ActionResult UpdateOnUnassignmentExpression(int id, string OnUnassignmentExpression = null, bool redirect = false)
{
return Update(id, pOnUnassignmentExpression, OnUnassignmentExpression, redirect);
}
[DiscoAuthorize(Claims.Config.UserFlag.Configure)]
public virtual ActionResult UpdateAssignedUsersLinkedGroup(int id, string GroupId = null, DateTime? FilterBeginDate = null, bool redirect = false) public virtual ActionResult UpdateAssignedUsersLinkedGroup(int id, string GroupId = null, DateTime? FilterBeginDate = null, bool redirect = false)
{ {
try try
@@ -247,6 +266,38 @@ namespace Disco.Web.Areas.API.Controllers
} }
} }
private void UpdateOnAssignmentExpression(UserFlag UserFlag, string OnAssignmentExpression)
{
if (string.IsNullOrWhiteSpace(OnAssignmentExpression))
{
UserFlag.OnAssignmentExpression = null;
}
else
{
UserFlag.OnAssignmentExpression = OnAssignmentExpression.Trim();
}
// Invalidate Cache
UserFlag.OnAssignmentExpressionInvalidateCache();
UserFlagService.Update(Database, UserFlag);
}
private void UpdateOnUnassignmentExpression(UserFlag UserFlag, string OnUnassignmentExpression)
{
if (string.IsNullOrWhiteSpace(OnUnassignmentExpression))
{
UserFlag.OnUnassignmentExpression = null;
}
else
{
UserFlag.OnUnassignmentExpression = OnUnassignmentExpression.Trim();
}
// Invalidate Cache
UserFlag.OnUnassignmentExpressionInvalidateCache();
UserFlagService.Update(Database, UserFlag);
}
private ScheduledTaskStatus UpdateAssignedUsersLinkedGroup(UserFlag UserFlag, string AssignedUsersLinkedGroup, DateTime? FilterBeginDate) private ScheduledTaskStatus UpdateAssignedUsersLinkedGroup(UserFlag UserFlag, string AssignedUsersLinkedGroup, DateTime? FilterBeginDate)
{ {
var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUsersManagedGroup.GetKey(UserFlag), AssignedUsersLinkedGroup, FilterBeginDate); var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUsersManagedGroup.GetKey(UserFlag), AssignedUsersLinkedGroup, FilterBeginDate);
@@ -14,7 +14,9 @@
var hideAdvanced = var hideAdvanced =
Model.UserFlag.UserDevicesLinkedGroup == null && Model.UserFlag.UserDevicesLinkedGroup == null &&
Model.UserFlag.UsersLinkedGroup == null; Model.UserFlag.UsersLinkedGroup == null &&
Model.UserFlag.OnAssignmentExpression == null &&
Model.UserFlag.OnUnassignmentExpression == null;
Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers");
} }
@@ -222,6 +224,147 @@
</td> </td>
</tr> </tr>
} }
<tr class="Config_HideAdvanced_Item">
<th>
On Assignment<br />Expression:
</th>
<td>
@if (canConfig)
{
@Html.EditorFor(model => model.UserFlag.OnAssignmentExpression)
@AjaxHelpers.AjaxRemove()
@AjaxHelpers.AjaxSave()
@AjaxHelpers.AjaxLoader()
<script type="text/javascript">
$(function () {
var field = $('#UserFlag_OnAssignmentExpression');
var fieldRemove = field.next('.ajaxRemove');
var fieldOriginalWidth, fieldOriginalHeight;
document.DiscoFunctions.PropertyChangeHelper(
field,
'None',
'@Url.Action(MVC.API.UserFlag.UpdateOnAssignmentExpression(Model.UserFlag.Id))',
'OnAssignmentExpression'
);
field.focus(function () {
fieldOriginalWidth = field.width();
fieldOriginalHeight = field.height();
field.css('overflow', 'visible').animate({ width: field.parent().width() - 42, height: 75 }, 200);
}).blur(function () {
field.css('overflow', 'hidden').animate({ width: fieldOriginalWidth, height: fieldOriginalHeight }, 200);
}).change(function () {
if (!!field.val()) {
fieldRemove.show();
} else {
fieldRemove.hide();
}
}).attr('placeholder', 'None').attr('spellcheck', 'false');
fieldRemove.click(function () {
field.val('').change();
});
if (!!field.val()) {
fieldRemove.show();
} else {
fieldRemove.hide();
}
});
</script>
}
else
{
if (string.IsNullOrWhiteSpace(Model.UserFlag.OnAssignmentExpression))
{
<span class="smallMessage">&lt;None Specified&gt;</span>
}
else
{
<div class="code">
@Model.UserFlag.OnAssignmentExpression
</div>
}
}
<div class="info-box">
<p class="fa-p">
<i class="fa fa-fw fa-info-circle"></i>This expression will be evaluated whenever the user flag is assigned to a user. The output of the expression will be shown with the flag assignment.
</p>
</div>
</td>
</tr>
<tr class="Config_HideAdvanced_Item">
<th>
On Unassignment<br />Expression:
</th>
<td>
@if (canConfig)
{
@Html.EditorFor(model => model.UserFlag.OnUnassignmentExpression)
@AjaxHelpers.AjaxRemove()
@AjaxHelpers.AjaxSave()
@AjaxHelpers.AjaxLoader()
<script type="text/javascript">
$(function () {
var field = $('#UserFlag_OnUnassignmentExpression');
var fieldRemove = field.next('.ajaxRemove');
var fieldOriginalWidth, fieldOriginalHeight;
document.DiscoFunctions.PropertyChangeHelper(
field,
'None',
'@Url.Action(MVC.API.UserFlag.UpdateOnUnassignmentExpression(Model.UserFlag.Id))',
'OnUnassignmentExpression'
);
field.focus(function () {
fieldOriginalWidth = field.width();
fieldOriginalHeight = field.height();
field.css('overflow', 'visible').animate({ width: field.parent().width() - 42, height: 75 }, 200);
}).blur(function () {
field.css('overflow', 'hidden').animate({ width: fieldOriginalWidth, height: fieldOriginalHeight }, 200);
}).change(function () {
if (!!field.val()) {
fieldRemove.show();
} else {
fieldRemove.hide();
}
}).attr('placeholder', 'None').attr('spellcheck', 'false');
fieldRemove.click(function () {
field.val('').change();
});
if (!!field.val()) {
fieldRemove.show();
} else {
fieldRemove.hide();
}
});
</script>
}
else
{
if (string.IsNullOrWhiteSpace(Model.UserFlag.OnUnassignmentExpression))
{
<span class="smallMessage">&lt;None Specified&gt;</span>
}
else
{
<div class="code">
@Model.UserFlag.OnUnassignmentExpression
</div>
}
}
<div class="info-box">
<p class="fa-p">
<i class="fa fa-fw fa-info-circle"></i>This expression will be evaluated whenever the user flag is removed from a user. The output of the expression will be shown with the flag assignment.
</p>
</div>
</td>
</tr>
<tr class="Config_HideAdvanced_Item"> <tr class="Config_HideAdvanced_Item">
<th> <th>
Linked Groups: Linked Groups:
File diff suppressed because it is too large Load Diff
+7
View File
@@ -1461,6 +1461,13 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover { #Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover {
opacity: 1; opacity: 1;
} }
#Config_UserFlags_Show #UserFlag_OnAssignmentExpression,
#Config_UserFlags_Show #UserFlag_OnUnassignmentExpression {
height: 16px;
min-height: 16px;
overflow: hidden;
font-family: Consolas, "Courier New", monospace;
}
#Config_UserFlags_Index i { #Config_UserFlags_Index i {
width: 1.2857142857142858em; width: 1.2857142857142858em;
text-align: center; text-align: center;
+11
View File
@@ -1677,6 +1677,17 @@ div.logEventsViewport {
} }
} }
#Config_UserFlags_Show {
#UserFlag_OnAssignmentExpression, #UserFlag_OnUnassignmentExpression {
height: 16px;
min-height: 16px;
overflow: hidden;
font-family: @FontFamilyMono;
}
}
#Config_UserFlags_Index { #Config_UserFlags_Index {
i { i {
width: 1.2857142857142858em; width: 1.2857142857142858em;
File diff suppressed because one or more lines are too long
+5
View File
@@ -290,6 +290,11 @@
#UserDetailTab-Flags #userFlags td.removed { #UserDetailTab-Flags #userFlags td.removed {
vertical-align: middle; vertical-align: middle;
} }
#UserDetailTab-Flags #userFlags td.added .expressionResult,
#UserDetailTab-Flags #userFlags td.removed .expressionResult {
margin-top: 4px;
font-style: italic;
}
#UserDetailTab-Flags #userFlags td.comments { #UserDetailTab-Flags #userFlags td.comments {
vertical-align: middle; vertical-align: middle;
} }
+5
View File
@@ -267,6 +267,11 @@
td.added, td.removed { td.added, td.removed {
vertical-align: middle; vertical-align: middle;
.expressionResult {
margin-top: 4px;
font-style: italic;
}
} }
td.comments { td.comments {
File diff suppressed because one or more lines are too long
@@ -95,6 +95,18 @@ namespace Disco.Web.Areas.API.Controllers
} }
[NonAction] [NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult UpdateOnAssignmentExpression()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnAssignmentExpression);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult UpdateOnUnassignmentExpression()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnUnassignmentExpression);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult UpdateAssignedUsersLinkedGroup() public virtual System.Web.Mvc.ActionResult UpdateAssignedUsersLinkedGroup()
{ {
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateAssignedUsersLinkedGroup); return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateAssignedUsersLinkedGroup);
@@ -145,6 +157,8 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string UpdateIcon = "UpdateIcon"; public readonly string UpdateIcon = "UpdateIcon";
public readonly string UpdateIconColour = "UpdateIconColour"; public readonly string UpdateIconColour = "UpdateIconColour";
public readonly string UpdateIconAndColour = "UpdateIconAndColour"; public readonly string UpdateIconAndColour = "UpdateIconAndColour";
public readonly string UpdateOnAssignmentExpression = "UpdateOnAssignmentExpression";
public readonly string UpdateOnUnassignmentExpression = "UpdateOnUnassignmentExpression";
public readonly string UpdateAssignedUsersLinkedGroup = "UpdateAssignedUsersLinkedGroup"; public readonly string UpdateAssignedUsersLinkedGroup = "UpdateAssignedUsersLinkedGroup";
public readonly string UpdateAssignedUserDevicesLinkedGroup = "UpdateAssignedUserDevicesLinkedGroup"; public readonly string UpdateAssignedUserDevicesLinkedGroup = "UpdateAssignedUserDevicesLinkedGroup";
public readonly string Delete = "Delete"; public readonly string Delete = "Delete";
@@ -161,6 +175,8 @@ namespace Disco.Web.Areas.API.Controllers
public const string UpdateIcon = "UpdateIcon"; public const string UpdateIcon = "UpdateIcon";
public const string UpdateIconColour = "UpdateIconColour"; public const string UpdateIconColour = "UpdateIconColour";
public const string UpdateIconAndColour = "UpdateIconAndColour"; public const string UpdateIconAndColour = "UpdateIconAndColour";
public const string UpdateOnAssignmentExpression = "UpdateOnAssignmentExpression";
public const string UpdateOnUnassignmentExpression = "UpdateOnUnassignmentExpression";
public const string UpdateAssignedUsersLinkedGroup = "UpdateAssignedUsersLinkedGroup"; public const string UpdateAssignedUsersLinkedGroup = "UpdateAssignedUsersLinkedGroup";
public const string UpdateAssignedUserDevicesLinkedGroup = "UpdateAssignedUserDevicesLinkedGroup"; public const string UpdateAssignedUserDevicesLinkedGroup = "UpdateAssignedUserDevicesLinkedGroup";
public const string Delete = "Delete"; public const string Delete = "Delete";
@@ -231,6 +247,26 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string IconColour = "IconColour"; public readonly string IconColour = "IconColour";
public readonly string redirect = "redirect"; public readonly string redirect = "redirect";
} }
static readonly ActionParamsClass_UpdateOnAssignmentExpression s_params_UpdateOnAssignmentExpression = new ActionParamsClass_UpdateOnAssignmentExpression();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_UpdateOnAssignmentExpression UpdateOnAssignmentExpressionParams { get { return s_params_UpdateOnAssignmentExpression; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_UpdateOnAssignmentExpression
{
public readonly string id = "id";
public readonly string OnAssignmentExpression = "OnAssignmentExpression";
public readonly string redirect = "redirect";
}
static readonly ActionParamsClass_UpdateOnUnassignmentExpression s_params_UpdateOnUnassignmentExpression = new ActionParamsClass_UpdateOnUnassignmentExpression();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_UpdateOnUnassignmentExpression UpdateOnUnassignmentExpressionParams { get { return s_params_UpdateOnUnassignmentExpression; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_UpdateOnUnassignmentExpression
{
public readonly string id = "id";
public readonly string OnUnassignmentExpression = "OnUnassignmentExpression";
public readonly string redirect = "redirect";
}
static readonly ActionParamsClass_UpdateAssignedUsersLinkedGroup s_params_UpdateAssignedUsersLinkedGroup = new ActionParamsClass_UpdateAssignedUsersLinkedGroup(); static readonly ActionParamsClass_UpdateAssignedUsersLinkedGroup s_params_UpdateAssignedUsersLinkedGroup = new ActionParamsClass_UpdateAssignedUsersLinkedGroup();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_UpdateAssignedUsersLinkedGroup UpdateAssignedUsersLinkedGroupParams { get { return s_params_UpdateAssignedUsersLinkedGroup; } } public ActionParamsClass_UpdateAssignedUsersLinkedGroup UpdateAssignedUsersLinkedGroupParams { get { return s_params_UpdateAssignedUsersLinkedGroup; } }
@@ -386,6 +422,34 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo; return callInfo;
} }
[NonAction]
partial void UpdateOnAssignmentExpressionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string OnAssignmentExpression, bool redirect);
[NonAction]
public override System.Web.Mvc.ActionResult UpdateOnAssignmentExpression(int id, string OnAssignmentExpression, bool redirect)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnAssignmentExpression);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "OnAssignmentExpression", OnAssignmentExpression);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect);
UpdateOnAssignmentExpressionOverride(callInfo, id, OnAssignmentExpression, redirect);
return callInfo;
}
[NonAction]
partial void UpdateOnUnassignmentExpressionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string OnUnassignmentExpression, bool redirect);
[NonAction]
public override System.Web.Mvc.ActionResult UpdateOnUnassignmentExpression(int id, string OnUnassignmentExpression, bool redirect)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateOnUnassignmentExpression);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "OnUnassignmentExpression", OnUnassignmentExpression);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect);
UpdateOnUnassignmentExpressionOverride(callInfo, id, OnUnassignmentExpression, redirect);
return callInfo;
}
[NonAction] [NonAction]
partial void UpdateAssignedUsersLinkedGroupOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect); partial void UpdateAssignedUsersLinkedGroupOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect);
+1 -2
View File
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.34014 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@@ -27,7 +27,6 @@ namespace Disco.Web.Views.User
using System.Web.UI; using System.Web.UI;
using System.Web.WebPages; using System.Web.WebPages;
using Disco; using Disco;
using Disco.BI.Extensions;
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services; using Disco.Services;
using Disco.Services.Authorization; using Disco.Services.Authorization;
@@ -37,6 +37,10 @@
</td> </td>
<td class="added"> <td class="added">
@CommonHelpers.FriendlyDateAndUser(fa.Item1.AddedDate, fa.Item1.AddedUser) @CommonHelpers.FriendlyDateAndUser(fa.Item1.AddedDate, fa.Item1.AddedUser)
@if (fa.Item1.OnAssignmentExpressionResult != null)
{
<div class="expressionResult">@fa.Item1.OnAssignmentExpressionResult</div>
}
</td> </td>
<td class="comments"> <td class="comments">
@if (hasEdit) @if (hasEdit)
@@ -57,6 +61,10 @@
@if (fa.Item1.RemovedDate.HasValue) @if (fa.Item1.RemovedDate.HasValue)
{ {
@CommonHelpers.FriendlyDateAndUser(fa.Item1.RemovedDate.Value, fa.Item1.RemovedUser) @CommonHelpers.FriendlyDateAndUser(fa.Item1.RemovedDate.Value, fa.Item1.RemovedUser)
if (fa.Item1.OnUnassignmentExpressionResult != null)
{
<div class="expressionResult">@fa.Item1.OnUnassignmentExpressionResult</div>
}
} }
else if (fa.Item1.CanRemove()) else if (fa.Item1.CanRemove())
{ {
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.34014 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@@ -27,7 +27,6 @@ namespace Disco.Web.Views.User.UserParts
using System.Web.UI; using System.Web.UI;
using System.Web.WebPages; using System.Web.WebPages;
using Disco; using Disco;
using Disco.BI.Extensions;
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services; using Disco.Services;
using Disco.Services.Authorization; using Disco.Services.Authorization;
@@ -43,9 +42,9 @@ namespace Disco.Web.Views.User.UserParts
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/Views/User/UserParts/_Flags.cshtml")] [System.Web.WebPages.PageVirtualPathAttribute("~/Views/User/UserParts/_Flags.cshtml")]
public partial class Flags : Disco.Services.Web.WebViewPage<Disco.Web.Models.User.ShowModel> public partial class _Flags : Disco.Services.Web.WebViewPage<Disco.Web.Models.User.ShowModel>
{ {
public Flags() public _Flags()
{ {
} }
public override void Execute() public override void Execute()
@@ -249,20 +248,58 @@ WriteLiteral(" ");
#line default #line default
#line hidden #line hidden
WriteLiteral("\r\n </td>\r\n <td"); WriteLiteral("\r\n");
#line 40 "..\..\Views\User\UserParts\_Flags.cshtml"
#line default
#line hidden
#line 40 "..\..\Views\User\UserParts\_Flags.cshtml"
if (fa.Item1.OnAssignmentExpressionResult != null)
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" class=\"expressionResult\"");
WriteLiteral(">");
#line 42 "..\..\Views\User\UserParts\_Flags.cshtml"
Write(fa.Item1.OnAssignmentExpressionResult);
#line default
#line hidden
WriteLiteral("</div>\r\n");
#line 43 "..\..\Views\User\UserParts\_Flags.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n <td");
WriteLiteral(" class=\"comments\""); WriteLiteral(" class=\"comments\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 42 "..\..\Views\User\UserParts\_Flags.cshtml" #line 46 "..\..\Views\User\UserParts\_Flags.cshtml"
#line default #line default
#line hidden #line hidden
#line 42 "..\..\Views\User\UserParts\_Flags.cshtml" #line 46 "..\..\Views\User\UserParts\_Flags.cshtml"
if (hasEdit) if (hasEdit)
{ {
@@ -282,7 +319,7 @@ WriteLiteral(" title=\"Edit Comments\"");
WriteLiteral("></i></div>\r\n"); WriteLiteral("></i></div>\r\n");
#line 45 "..\..\Views\User\UserParts\_Flags.cshtml" #line 49 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -291,7 +328,7 @@ WriteLiteral("></i></div>\r\n");
WriteLiteral(" "); WriteLiteral(" ");
#line 46 "..\..\Views\User\UserParts\_Flags.cshtml" #line 50 "..\..\Views\User\UserParts\_Flags.cshtml"
if (fa.Item1.Comments == null) if (fa.Item1.Comments == null)
{ {
@@ -305,7 +342,7 @@ WriteLiteral(" class=\"comments smallMessage\"");
WriteLiteral(">[no comments]</div>\r\n"); WriteLiteral(">[no comments]</div>\r\n");
#line 49 "..\..\Views\User\UserParts\_Flags.cshtml" #line 53 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
else else
{ {
@@ -320,7 +357,7 @@ WriteLiteral(" class=\"comments\"");
WriteLiteral(">"); WriteLiteral(">");
#line 52 "..\..\Views\User\UserParts\_Flags.cshtml" #line 56 "..\..\Views\User\UserParts\_Flags.cshtml"
Write(fa.Item1.Comments.ToHtmlComment()); Write(fa.Item1.Comments.ToHtmlComment());
@@ -335,7 +372,7 @@ WriteLiteral(" class=\"commentsRaw\"");
WriteLiteral(">"); WriteLiteral(">");
#line 53 "..\..\Views\User\UserParts\_Flags.cshtml" #line 57 "..\..\Views\User\UserParts\_Flags.cshtml"
Write(fa.Item1.Comments); Write(fa.Item1.Comments);
@@ -344,7 +381,7 @@ WriteLiteral(">");
WriteLiteral("</div>\r\n"); WriteLiteral("</div>\r\n");
#line 54 "..\..\Views\User\UserParts\_Flags.cshtml" #line 58 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -352,27 +389,27 @@ WriteLiteral("</div>\r\n");
#line hidden #line hidden
WriteLiteral(" </td>\r\n <td"); WriteLiteral(" </td>\r\n <td");
WriteAttribute("class", Tuple.Create(" class=\"", 2719), Tuple.Create("\"", 2782) WriteAttribute("class", Tuple.Create(" class=\"", 2954), Tuple.Create("\"", 3017)
, Tuple.Create(Tuple.Create("", 2727), Tuple.Create("removed", 2727), true) , Tuple.Create(Tuple.Create("", 2962), Tuple.Create("removed", 2962), true)
#line 56 "..\..\Views\User\UserParts\_Flags.cshtml" #line 60 "..\..\Views\User\UserParts\_Flags.cshtml"
, Tuple.Create(Tuple.Create("", 2734), Tuple.Create<System.Object, System.Int32>(!fa.Item1.RemovedDate.HasValue ? " na" : null , Tuple.Create(Tuple.Create("", 2969), Tuple.Create<System.Object, System.Int32>(!fa.Item1.RemovedDate.HasValue ? " na" : null
#line default #line default
#line hidden #line hidden
, 2734), false) , 2969), false)
); );
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 57 "..\..\Views\User\UserParts\_Flags.cshtml" #line 61 "..\..\Views\User\UserParts\_Flags.cshtml"
#line default #line default
#line hidden #line hidden
#line 57 "..\..\Views\User\UserParts\_Flags.cshtml" #line 61 "..\..\Views\User\UserParts\_Flags.cshtml"
if (fa.Item1.RemovedDate.HasValue) if (fa.Item1.RemovedDate.HasValue)
{ {
@@ -380,15 +417,39 @@ WriteLiteral(">\r\n");
#line default #line default
#line hidden #line hidden
#line 59 "..\..\Views\User\UserParts\_Flags.cshtml" #line 63 "..\..\Views\User\UserParts\_Flags.cshtml"
Write(CommonHelpers.FriendlyDateAndUser(fa.Item1.RemovedDate.Value, fa.Item1.RemovedUser)); Write(CommonHelpers.FriendlyDateAndUser(fa.Item1.RemovedDate.Value, fa.Item1.RemovedUser));
#line default #line default
#line hidden #line hidden
#line 59 "..\..\Views\User\UserParts\_Flags.cshtml" #line 63 "..\..\Views\User\UserParts\_Flags.cshtml"
if (fa.Item1.OnUnassignmentExpressionResult != null)
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" class=\"expressionResult\"");
WriteLiteral(">");
#line 66 "..\..\Views\User\UserParts\_Flags.cshtml"
Write(fa.Item1.OnUnassignmentExpressionResult);
#line default
#line hidden
WriteLiteral("</div>\r\n");
#line 67 "..\..\Views\User\UserParts\_Flags.cshtml"
}
} }
else if (fa.Item1.CanRemove()) else if (fa.Item1.CanRemove())
{ {
@@ -405,7 +466,7 @@ WriteLiteral(" class=\"button small remove\"");
WriteLiteral(">Remove</a>\r\n"); WriteLiteral(">Remove</a>\r\n");
#line 64 "..\..\Views\User\UserParts\_Flags.cshtml" #line 72 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -414,7 +475,7 @@ WriteLiteral(">Remove</a>\r\n");
WriteLiteral(" </td>\r\n </tr>\r\n"); WriteLiteral(" </td>\r\n </tr>\r\n");
#line 67 "..\..\Views\User\UserParts\_Flags.cshtml" #line 75 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -433,13 +494,13 @@ WriteLiteral(" title=\"Remove this flag from the user?\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 70 "..\..\Views\User\UserParts\_Flags.cshtml" #line 78 "..\..\Views\User\UserParts\_Flags.cshtml"
#line default #line default
#line hidden #line hidden
#line 70 "..\..\Views\User\UserParts\_Flags.cshtml" #line 78 "..\..\Views\User\UserParts\_Flags.cshtml"
using (Html.BeginForm(MVC.API.UserFlagAssignment.RemoveUser())) using (Html.BeginForm(MVC.API.UserFlagAssignment.RemoveUser()))
{ {
@@ -465,7 +526,7 @@ WriteLiteral(" class=\"fa fa-exclamation-triangle fa-lg\"");
WriteLiteral("></i>&nbsp;Are you sure?\r\n </p>\r\n"); WriteLiteral("></i>&nbsp;Are you sure?\r\n </p>\r\n");
#line 76 "..\..\Views\User\UserParts\_Flags.cshtml" #line 84 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -484,13 +545,13 @@ WriteLiteral(" title=\"Edit the Comments\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 79 "..\..\Views\User\UserParts\_Flags.cshtml" #line 87 "..\..\Views\User\UserParts\_Flags.cshtml"
#line default #line default
#line hidden #line hidden
#line 79 "..\..\Views\User\UserParts\_Flags.cshtml" #line 87 "..\..\Views\User\UserParts\_Flags.cshtml"
using (Html.BeginForm(MVC.API.UserFlagAssignment.UpdateComments())) using (Html.BeginForm(MVC.API.UserFlagAssignment.UpdateComments()))
{ {
@@ -532,7 +593,7 @@ WriteLiteral(" class=\"block\"");
WriteLiteral("></textarea>\r\n </p>\r\n"); WriteLiteral("></textarea>\r\n </p>\r\n");
#line 87 "..\..\Views\User\UserParts\_Flags.cshtml" #line 95 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -590,7 +651,7 @@ WriteLiteral(">\r\n $(function () {\r\n var userFlags
";\r\n });\r\n </script>\r\n"); ";\r\n });\r\n </script>\r\n");
#line 166 "..\..\Views\User\UserParts\_Flags.cshtml" #line 174 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
else else
{ {
@@ -605,7 +666,7 @@ WriteLiteral(" class=\"none\"");
WriteLiteral(">This user has no associated flags</div>\r\n"); WriteLiteral(">This user has no associated flags</div>\r\n");
#line 170 "..\..\Views\User\UserParts\_Flags.cshtml" #line 178 "..\..\Views\User\UserParts\_Flags.cshtml"
} }
@@ -615,7 +676,7 @@ WriteLiteral(" <script>\r\n $(\'#UserDetailTabItems\').append(\'<li><a
"b-Flags\">Flags ["); "b-Flags\">Flags [");
#line 172 "..\..\Views\User\UserParts\_Flags.cshtml" #line 180 "..\..\Views\User\UserParts\_Flags.cshtml"
Write(activeAssignmentCount); Write(activeAssignmentCount);