User Flag Expressions
Adds the ability to have expressions evaluated when flags are added and removed.
This commit is contained in:
@@ -154,6 +154,10 @@
|
||||
<Compile Include="Migrations\201609260741183_DBv17.Designer.cs">
|
||||
<DependentUpon>201609260741183_DBv17.cs</DependentUpon>
|
||||
</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\DiscoDataMigrator.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
@@ -220,6 +224,9 @@
|
||||
<EmbeddedResource Include="Migrations\201609260741183_DBv17.resx">
|
||||
<DependentUpon>201609260741183_DBv17.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Migrations\201611090729100_DBv18.resx">
|
||||
<DependentUpon>201611090729100_DBv18.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
|
||||
@@ -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 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 override string ToString()
|
||||
|
||||
@@ -22,6 +22,9 @@ namespace Disco.Models.Repository
|
||||
|
||||
public string Comments { get; set; }
|
||||
|
||||
public string OnAssignmentExpressionResult { get; set; }
|
||||
public string OnUnassignmentExpressionResult { get; set; }
|
||||
|
||||
[ForeignKey("UserFlagId"), InverseProperty("UserFlagAssignments")]
|
||||
public virtual UserFlag UserFlag { get; set; }
|
||||
|
||||
|
||||
@@ -333,6 +333,7 @@
|
||||
<Compile Include="Interop\ActiveDirectory\ADSite.cs" />
|
||||
<Compile Include="Interop\ActiveDirectory\ADNetworkLogonDatesUpdateTask.cs" />
|
||||
<Compile Include="Interop\ActiveDirectory\ADUserAccount.cs" />
|
||||
<Compile Include="Interop\ActiveDirectory\ADUserAccountControlFlags.cs" />
|
||||
<Compile Include="Interop\ActiveDirectory\Description.cs" />
|
||||
<Compile Include="Interop\ActiveDirectory\IADObject.cs" />
|
||||
<Compile Include="Interop\DiscoServices\DiscoServiceHelpers.cs" />
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using Disco.Data.Repository;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Expressions;
|
||||
using Disco.Services.Logging;
|
||||
using Disco.Services.Users;
|
||||
using System;
|
||||
using System.Linq;
|
||||
@@ -32,13 +34,36 @@ namespace Disco.Services
|
||||
|
||||
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())
|
||||
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.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
|
||||
|
||||
@@ -59,24 +84,116 @@ namespace Disco.Services
|
||||
|
||||
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))
|
||||
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()
|
||||
{
|
||||
UserFlagId = flag.Id,
|
||||
UserId = u.UserId,
|
||||
UserFlag = flag,
|
||||
User = u,
|
||||
AddedDate = DateTime.Now,
|
||||
AddedUserId = Technician.UserId,
|
||||
AddedUser = AddingUser,
|
||||
Comments = string.IsNullOrWhiteSpace(Comments) ? null : Comments.Trim()
|
||||
};
|
||||
|
||||
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;
|
||||
}
|
||||
#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()));
|
||||
|
||||
var fa = new UserFlagAssignment()
|
||||
{
|
||||
UserFlagId = UserFlag.Id,
|
||||
UserId = user.UserId,
|
||||
AddedDate = DateTime.Now,
|
||||
AddedUserId = Technician.UserId,
|
||||
Comments = comments
|
||||
};
|
||||
|
||||
Database.UserFlagAssignments.Add(fa);
|
||||
return fa;
|
||||
return user.OnAddUserFlag(Database, UserFlag, Technician, comments);
|
||||
}).ToList();
|
||||
|
||||
// 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()));
|
||||
|
||||
flagAssignment.RemovedDate = removedDateTime;
|
||||
flagAssignment.RemovedUserId = Technician.UserId;
|
||||
flagAssignment.OnRemoveUnsafe(Database, Technician);
|
||||
|
||||
return flagAssignment;
|
||||
}).ToList();
|
||||
@@ -223,17 +212,7 @@ namespace Disco.Services.Users.UserFlags
|
||||
{
|
||||
Status.UpdateStatus((chunkIndexOffset + index) * progressInterval, string.Format("Assigning Flag: {0}", user.ToString()));
|
||||
|
||||
var fa = new UserFlagAssignment()
|
||||
{
|
||||
UserFlagId = UserFlag.Id,
|
||||
UserId = user.UserId,
|
||||
AddedDate = DateTime.Now,
|
||||
AddedUserId = Technician.UserId,
|
||||
Comments = comments
|
||||
};
|
||||
|
||||
Database.UserFlagAssignments.Add(fa);
|
||||
return fa;
|
||||
return user.OnAddUserFlag(Database, UserFlag, Technician, comments);
|
||||
}).ToList();
|
||||
|
||||
// Save Chunk Items to Database
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace Disco.Services.Users.UserFlags
|
||||
{
|
||||
// Load Flag
|
||||
var userFlag = Database.UserFlags.FirstOrDefault(uf => uf.Id == UserFlagId);
|
||||
|
||||
if (userFlag == null)
|
||||
throw new Exception("Invalid User Flag Id");
|
||||
|
||||
Status.UpdateStatus(0, string.Format("Bulk Assigning Users to User Flag: {0}", userFlag.Name), "Preparing to start");
|
||||
|
||||
// Load Technician
|
||||
|
||||
@@ -75,7 +75,9 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
[DiscoAuthorizeAny(Claims.User.Actions.AddFlags)]
|
||||
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)
|
||||
throw new ArgumentException("Invalid User Flag Id", "id");
|
||||
|
||||
@@ -86,8 +88,9 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
if (!user.CanAddUserFlag(userFlag))
|
||||
throw new InvalidOperationException("Adding user flag is denied");
|
||||
|
||||
var userFlagAssignment = user.OnAddUserFlag(Database, userFlag, CurrentUser, Comments);
|
||||
Database.SaveChanges();
|
||||
var addingUser = Database.Users.Find(CurrentUser.UserId);
|
||||
|
||||
var userFlagAssignment = user.OnAddUserFlag(Database, userFlag, addingUser, Comments);
|
||||
|
||||
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)]
|
||||
public virtual ActionResult RemoveUser(int id)
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
|
||||
var userFlagAssignment = Database.UserFlagAssignments.FirstOrDefault(a => a.Id == id);
|
||||
if (userFlagAssignment == null)
|
||||
throw new ArgumentException("Invalid User Flag Assignment Id", "id");
|
||||
@@ -102,7 +107,9 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
if (!userFlagAssignment.CanRemove())
|
||||
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();
|
||||
|
||||
return Redirect(string.Format("{0}#UserDetailTab-Flags", Url.Action(MVC.User.Show(userFlagAssignment.UserId))));
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Interop.ActiveDirectory;
|
||||
using Disco.Services.Tasks;
|
||||
@@ -16,6 +17,8 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
const string pDescription = "description";
|
||||
const string pIcon = "icon";
|
||||
const string pIconColour = "iconcolour";
|
||||
const string pOnAssignmentExpression = "onassignmentexpression";
|
||||
const string pOnUnassignmentExpression = "onunassignmentexpression";
|
||||
|
||||
[DiscoAuthorize(Claims.Config.UserFlag.Configure)]
|
||||
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:
|
||||
UpdateIconColour(flag, value);
|
||||
break;
|
||||
case pOnAssignmentExpression:
|
||||
UpdateOnAssignmentExpression(flag, value);
|
||||
break;
|
||||
case pOnUnassignmentExpression:
|
||||
UpdateOnUnassignmentExpression(flag, value);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Invalid Update Key");
|
||||
}
|
||||
@@ -123,6 +132,16 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
}
|
||||
}
|
||||
[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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
var configJson = ADManagedGroup.ValidConfigurationToJson(UserFlagUsersManagedGroup.GetKey(UserFlag), AssignedUsersLinkedGroup, FilterBeginDate);
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
|
||||
var hideAdvanced =
|
||||
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");
|
||||
}
|
||||
@@ -222,6 +224,147 @@
|
||||
</td>
|
||||
</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"><None Specified></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"><None Specified></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">
|
||||
<th>
|
||||
Linked Groups:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 {
|
||||
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 {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
|
||||
@@ -261,13 +261,13 @@ table.deviceProfileTable {
|
||||
border: none;
|
||||
}
|
||||
|
||||
span.fancytree-node > span.fancytree-icon {
|
||||
background: none;
|
||||
display: inline-block;
|
||||
font-family: FontAwesome;
|
||||
font-size: 1.2em;
|
||||
width: 14px;
|
||||
}
|
||||
span.fancytree-node > span.fancytree-icon {
|
||||
background: none;
|
||||
display: inline-block;
|
||||
font-family: FontAwesome;
|
||||
font-size: 1.2em;
|
||||
width: 14px;
|
||||
}
|
||||
|
||||
span.fancytree-ico-ef > span.fancytree-icon:before {
|
||||
color: @StatusInformation;
|
||||
@@ -487,10 +487,10 @@ div.logEventsViewport {
|
||||
}
|
||||
}
|
||||
|
||||
.session:hover {
|
||||
border: 5px solid #6C7A87;
|
||||
background-color: #DFE1F8;
|
||||
}
|
||||
.session:hover {
|
||||
border: 5px solid #6C7A87;
|
||||
background-color: #DFE1F8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1169,13 +1169,13 @@ div.logEventsViewport {
|
||||
border: none;
|
||||
}
|
||||
|
||||
span.fancytree-node > span.fancytree-icon {
|
||||
background: none;
|
||||
display: inline-block;
|
||||
font-family: FontAwesome;
|
||||
font-size: 1.2em;
|
||||
width: 14px;
|
||||
}
|
||||
span.fancytree-node > span.fancytree-icon {
|
||||
background: none;
|
||||
display: inline-block;
|
||||
font-family: FontAwesome;
|
||||
font-size: 1.2em;
|
||||
width: 14px;
|
||||
}
|
||||
|
||||
span.fancytree-ico-ef > span.fancytree-icon:before {
|
||||
color: @StatusClosed;
|
||||
@@ -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 {
|
||||
i {
|
||||
width: 1.2857142857142858em;
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -290,6 +290,11 @@
|
||||
#UserDetailTab-Flags #userFlags td.removed {
|
||||
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 {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
@@ -267,6 +267,11 @@
|
||||
|
||||
td.added, td.removed {
|
||||
vertical-align: middle;
|
||||
|
||||
.expressionResult {
|
||||
margin-top: 4px;
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
td.comments {
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -95,6 +95,18 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
}
|
||||
[NonAction]
|
||||
[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()
|
||||
{
|
||||
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 UpdateIconColour = "UpdateIconColour";
|
||||
public readonly string UpdateIconAndColour = "UpdateIconAndColour";
|
||||
public readonly string UpdateOnAssignmentExpression = "UpdateOnAssignmentExpression";
|
||||
public readonly string UpdateOnUnassignmentExpression = "UpdateOnUnassignmentExpression";
|
||||
public readonly string UpdateAssignedUsersLinkedGroup = "UpdateAssignedUsersLinkedGroup";
|
||||
public readonly string UpdateAssignedUserDevicesLinkedGroup = "UpdateAssignedUserDevicesLinkedGroup";
|
||||
public readonly string Delete = "Delete";
|
||||
@@ -161,6 +175,8 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
public const string UpdateIcon = "UpdateIcon";
|
||||
public const string UpdateIconColour = "UpdateIconColour";
|
||||
public const string UpdateIconAndColour = "UpdateIconAndColour";
|
||||
public const string UpdateOnAssignmentExpression = "UpdateOnAssignmentExpression";
|
||||
public const string UpdateOnUnassignmentExpression = "UpdateOnUnassignmentExpression";
|
||||
public const string UpdateAssignedUsersLinkedGroup = "UpdateAssignedUsersLinkedGroup";
|
||||
public const string UpdateAssignedUserDevicesLinkedGroup = "UpdateAssignedUserDevicesLinkedGroup";
|
||||
public const string Delete = "Delete";
|
||||
@@ -231,6 +247,26 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
public readonly string IconColour = "IconColour";
|
||||
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();
|
||||
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
|
||||
public ActionParamsClass_UpdateAssignedUsersLinkedGroup UpdateAssignedUsersLinkedGroupParams { get { return s_params_UpdateAssignedUsersLinkedGroup; } }
|
||||
@@ -386,6 +422,34 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
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]
|
||||
partial void UpdateAssignedUsersLinkedGroupOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id, string GroupId, System.DateTime? FilterBeginDate, bool redirect);
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 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
|
||||
// the code is regenerated.
|
||||
@@ -27,7 +27,6 @@ namespace Disco.Web.Views.User
|
||||
using System.Web.UI;
|
||||
using System.Web.WebPages;
|
||||
using Disco;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
</td>
|
||||
<td class="added">
|
||||
@CommonHelpers.FriendlyDateAndUser(fa.Item1.AddedDate, fa.Item1.AddedUser)
|
||||
@if (fa.Item1.OnAssignmentExpressionResult != null)
|
||||
{
|
||||
<div class="expressionResult">@fa.Item1.OnAssignmentExpressionResult</div>
|
||||
}
|
||||
</td>
|
||||
<td class="comments">
|
||||
@if (hasEdit)
|
||||
@@ -57,6 +61,10 @@
|
||||
@if (fa.Item1.RemovedDate.HasValue)
|
||||
{
|
||||
@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())
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 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
|
||||
// the code is regenerated.
|
||||
@@ -27,7 +27,6 @@ namespace Disco.Web.Views.User.UserParts
|
||||
using System.Web.UI;
|
||||
using System.Web.WebPages;
|
||||
using Disco;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
@@ -43,9 +42,9 @@ namespace Disco.Web.Views.User.UserParts
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
|
||||
[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()
|
||||
@@ -249,20 +248,58 @@ WriteLiteral(" ");
|
||||
|
||||
#line default
|
||||
#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(">\r\n");
|
||||
|
||||
|
||||
#line 42 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 46 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 42 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 46 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
if (hasEdit)
|
||||
{
|
||||
|
||||
@@ -282,7 +319,7 @@ WriteLiteral(" title=\"Edit Comments\"");
|
||||
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(" ");
|
||||
|
||||
|
||||
#line 46 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 50 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
if (fa.Item1.Comments == null)
|
||||
{
|
||||
|
||||
@@ -305,7 +342,7 @@ WriteLiteral(" class=\"comments smallMessage\"");
|
||||
WriteLiteral(">[no comments]</div>\r\n");
|
||||
|
||||
|
||||
#line 49 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 53 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -320,7 +357,7 @@ WriteLiteral(" class=\"comments\"");
|
||||
WriteLiteral(">");
|
||||
|
||||
|
||||
#line 52 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 56 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
Write(fa.Item1.Comments.ToHtmlComment());
|
||||
|
||||
|
||||
@@ -335,7 +372,7 @@ WriteLiteral(" class=\"commentsRaw\"");
|
||||
WriteLiteral(">");
|
||||
|
||||
|
||||
#line 53 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 57 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
Write(fa.Item1.Comments);
|
||||
|
||||
|
||||
@@ -344,7 +381,7 @@ WriteLiteral(">");
|
||||
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
|
||||
WriteLiteral(" </td>\r\n <td");
|
||||
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 2719), Tuple.Create("\"", 2782)
|
||||
, Tuple.Create(Tuple.Create("", 2727), Tuple.Create("removed", 2727), true)
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 2954), Tuple.Create("\"", 3017)
|
||||
, Tuple.Create(Tuple.Create("", 2962), Tuple.Create("removed", 2962), true)
|
||||
|
||||
#line 56 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 2734), Tuple.Create<System.Object, System.Int32>(!fa.Item1.RemovedDate.HasValue ? " na" : null
|
||||
#line 60 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 2969), Tuple.Create<System.Object, System.Int32>(!fa.Item1.RemovedDate.HasValue ? " na" : null
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 2734), false)
|
||||
, 2969), false)
|
||||
);
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 57 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 61 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 57 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 61 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
if (fa.Item1.RemovedDate.HasValue)
|
||||
{
|
||||
|
||||
@@ -380,15 +417,39 @@ WriteLiteral(">\r\n");
|
||||
#line default
|
||||
#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));
|
||||
|
||||
|
||||
#line default
|
||||
#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())
|
||||
{
|
||||
@@ -405,7 +466,7 @@ WriteLiteral(" class=\"button small remove\"");
|
||||
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");
|
||||
|
||||
|
||||
#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");
|
||||
|
||||
|
||||
#line 70 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 78 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 70 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 78 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
using (Html.BeginForm(MVC.API.UserFlagAssignment.RemoveUser()))
|
||||
{
|
||||
|
||||
@@ -465,7 +526,7 @@ WriteLiteral(" class=\"fa fa-exclamation-triangle fa-lg\"");
|
||||
WriteLiteral("></i> 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");
|
||||
|
||||
|
||||
#line 79 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 87 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 79 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 87 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
using (Html.BeginForm(MVC.API.UserFlagAssignment.UpdateComments()))
|
||||
{
|
||||
|
||||
@@ -532,7 +593,7 @@ WriteLiteral(" class=\"block\"");
|
||||
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");
|
||||
|
||||
|
||||
#line 166 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 174 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -605,7 +666,7 @@ WriteLiteral(" class=\"none\"");
|
||||
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 [");
|
||||
|
||||
|
||||
#line 172 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
#line 180 "..\..\Views\User\UserParts\_Flags.cshtml"
|
||||
Write(activeAssignmentCount);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user