User Flag Expressions

Adds the ability to have expressions evaluated when flags are added and
removed.
This commit is contained in:
Gary Sharp committed 2016-11-09 20:06:24 +11:00
1 parent cbf16a41a6
commit 065b14b158
24 files changed
+1240 -209

No files matched your search

+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");
}
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Target" xml:space="preserve">
<value>H4sIAAAAAAAEAO19WXPcSJLm+5rtf6DxaXfMRtRVKqlNmjEWKVWTLYlqUlX1SIMygySmkUAOgFSL/df2YX/S/oWNwBmHe1wIHMniS5WY4fBw9/DwuP37f//n/779zx+b5OA7yYs4S98dPnvy9PCApKtsHae37w535c2/vz78z//4n//j7fv15sfB7y3dC0ZHv0yLd4d3Zbn9y9FRsbojm6h4solXeVZkN+WTVbY5itbZ0fOnT98cPXt2RCiLQ8rr4ODt5S4t4w2p/qB/nmTpimzLXZR8ytYkKZrfaclVxfXgc7QhxTZakXeHp3Gxyp6cRmX05JJssyIus/z+8OA4iSMqzBVJbg4Pti//8ltBrso8S2+vtlEZR8nX+y2h5TdRUpBG9L9sX9pK//Q5k/4oStOspOyy1Ev7w04vqtl7aoHynolVaffukBrhJr7d5RX/s5II5PSDv5F74Qf605c825K8vL8kNw2TqxX95fDgyExJ2cl0b4/kOrrvRPZMavpHmVMvOTz4EP8g648kvS3vOgN/in60v7ymrvJbGlOfot+U+Y6Wft4lSfQtIR35kbbWStSJ6/w9SnaumtJ/aqqt/+ZrfXvUO4HWNU6z1W5D0vIr2WyTqCQ+nnG2dm9u9o2TBV4MtvspKVZ5vK37mFPdz38aXLmPe78aWumHOClJ/v7HNidF4a62q9OpAlykv5KU0LhDZhXibLPN8vK4LKPVHXP2GYX5QDtZSdIPWb5p6/4lyxISpR7+/D1ekeJjnP6DrH/Ns912cm3oUJhPK8Dn6Ht8W41jkijn2ber3bdqLD48uCRJRVPcxdt65H4iB7pr4YMPeba5zBIgIPJ011fZLl+xbpxZEH+N8ltSesblnlGYiAyS0UpYDZPE7+eDQygnrVPNP803cDx76q416uF9/BrZy1vHtfLytkvYalFHrZOMhuSU8kTUEIlQLXAyVQkNrasO9Nu/78gOaYO2FJMaKlfEBYk85KwiCCIlK9MIKRdDMio0HiKiVtTIZpLLKJP9BFn0m+nnx2dp+eI5EDboSvSKLlBJO8Naf2Ezizxl35JKC7sJRLUu1lRnMw8YK0La1H2SFWVb6SlZxZsoOTz4ktN/NRsPrw8PrlYRYweZ0S1uVcbShKyq/FqNcXLMgumQoIUQe3Q1/QxpeNBV5kcWAXpAr6xb40H1SN9+9NPgfvQpSnc30arc5SR3ntsNrrzuV3PUWo+QTjW/HFrxKbmJdkn5hfaWu6ggp2zjpQ1h9N9f440Hy7qr+QVDB6H/iPI8Sst7Wvo9Xjv7SijbXZJtFOeTCRFiPjtwcICDq2EkcVNDJ/21MALKMvOlyDAmkASYk3ltYpM8jpLPu8035jPOe9TC1257eYOXv8dFQUqvugd3uY/ZKgq+bWof1MLMUBkn+uNNnBDzUG7D7JeoXN0FEes020Rx6r6xMdS81KXi25Ss2Tbe9LV/jIryMyn/meX/+JjdZmmIUfA4SbJ//pZGu/KOzbhWbBb2Ps2zbm7hu9l6khPGyySjFa9KoMTMzNaIFb8wc4hVttnE1c54GPF4jpckKrgYUo8scnExdCQ2rdAchjF4wAVHOjcZmzCkkbKhuO6GZVlQiQAZcmUqv826KtBphK3KcVGFYkRQkcZVTD6O6ZpepFPani/GGl+g8Wt99mnNZmOYMIqUjXlUwUEyxNAwrZ9fnJIyihOdAjUFKrhQjAgs0vgJ2u+c64TtqVCBFRJEaJXOc5uc/hLfVMOYds+mJ0NFV2mwLXKVMNimbsOvLlf6H/sZ63dVWYAtozb0PqBNI/bfCc6l5LXQXZaXXlXPdxw3fJOs2Xy4yG+jNC4q9z5er9llgkHLALZw39FWZ391N3FCnqXbGTYuaF3fdkwrYVes6rpSYeHMnjdalFBRy6Aq2tj5fXqT5fU+SWvukyz9zvpZ70y+S4SGOa6mL+Nqk4tNkY9Pj1erbJcO5sjPYtjiPjleb+LBBmgWX7QhChrHLkm8iW4JDdzV+oQNhg/gxgtvuVkF4YbpdhO0cBRi+AY6J8QxXXJnedzvC08vzR9xThIaipsxfkJBBmyrOq/04AkSth4cMFWql31/7onS8BmD7RmP3aRrt90m8Qznc50W7ZJvYiuyYXTMsy3G/++7qHGjQRu61QQx3MZ1e9z2e5TEazq4xonOi1w4+rXl8JHrLC12eZjtxYpVlK7IbB2jUSZIw3TazNUydF7cbJJMXPGfemKnmTzIscRiE1b9BNuPlSmRmQVKHv6I2WkjWS9tgFlQtUvsMf1pT9Ncp0DhT+FsV/3bJLr3mBwNj55Xuzydo95fY7rmn0XjL3dZSrxO8YfflHy/oaOKtF1lW7n7aS8aB5if644O+vJr+aBGKlJ2sOVy143r6nTEcFgg0oAiSsWgmDKN3wGB91mS/ihMQ2x3rgQepQ0+Pqi4yYcH3Y/KiNCXuA5V7MsPSXRrMq1KB/oDQAL6BEQ36KJU3x/CDWTwvapxHwfPNDT6PNoMcLTi/ig5QKVTvEo2dbmhwwEUAKDhwrsv9UH7Ie2LzXP96ytZ3c3Urz/ECfGYd+q3saxq/hRviMeF8wA1sw2Joow2W90uhd1VOL9dggA6yA8RwyYRCBivHOeHUNzC5pC28rXdy0bGnhaVsyUxydrROe8OyIkoLORWv0HlV96wGvRQ6AMcqIhzZJ8RpOaju8QOftbOxustV9chCKp0+rvvnAID49e8t55/SyNLZdzikeUdyGDLQHj7zWbh6LbCHet6pJX80kU5r75PF6APabI4YxaGMcOQbbaT6QPGxZa21XrG2XItQJiXDz+2ZEW97iTJijAngDWncaxjX38ITdjmTz+nbmc7n6I0uiUsGDXlPgdrfyXJeqh4Paf5jN3L4Pkibfgeei3CJYnW9x+y/JKUuzwNY1qR59xGrqUI9QiI5zifZn9EcUkrojauhvkV70DDJ2CGZCvXXbmSyIT9rMxH+DLXmZMp04NDbhVELG0Wh0GTOu3jAORhsbD7H2QBrzllgDbu/SQQR3a0pWQysbHEUrC9JBLXJhOHWFRMmUwUUywFxZRI/DyLH6BQUSFSUVyVAhQZIPMTGw7+BgWwjyBVYFqNUsgHvuqJsd+omEwOqyRSaZWRSD0iqulcWCBhAUGSWiyEklZJFB7HpoY0FDwFIKFQBgkoEnjI9zG7RSWjZYBMza+QNG3RONnbmoEOStzWFKE529pyD8E+kTLqrgFi8glEgJBKOSSpSuQpbnudVCdtS4MIyxdjsgo0nqJ+zlIbaTkyRGCJApNZJht0lt/OHyffS9r3NJvO03jT3LmakzvkTQTGJYVm6BbjwzyZpooNzdXyeMw8ac2Px8xhj5mr8Wf4bBMIQch8NMj5ssgemcbbnC4jZKMcLot16c6W9ZQGJcKeLPOz8sfIv5TIP2eKgony4WoCk/0aE+gp8CI0VFTquSNBSSXQC6kNSS69mK5mH/vvUvrv7LMYn2wePl1Vv+kCeL68HxOqYzK+SJfkizCRgnXDdgPngfXFSq2hHTJAnz5er0Pd4mKcZgoPVd1Nz578oeol2WTfwxzMNqzmOY1tKp/LjFcfj9//2MY5KUJY8kseV8lPhPsbbb/rC4eE8IqVHnCkDV4w3EhXioON9CQeO6xDt9OB0A5ut1vfiGwjhFEwjhIWryPQCtlTuYrKdUSjsAItLC5HohWYpwsycD6kUfOz+85dgGdYc64cz1YeKb6HKswqPckS6qXOxh5u6yqnQTsSDEv8EmgEUB7If/svsirP1hPk5BhyJOIOeIXFpUG3i7gBMMQ4icqoDqW+YVM88PUIn82k3DWCBpjLf8yK4iI/jViWvxBzqPcsD6Mv1ECAi52+gXf4XPTrXZzTAYr+cBLtCtK1i2+eRJmfx1A23KCyEH/cub5qfhUgI2CZkqIgBfuzaFJfEOfkF8ON8csuv02i/P7rHbkpaZ+/y9YXNzQe5K42CZCBpPmTIQdcERIEduFLlsQr8jljySCHu6/I7aqcJyCIUoS30klOWTCc+bz8nDlq93KwdpdkRaf++SVZ71ZEvAptDYQ++GVLeUdyOvYQ2iurGXpexs6dM0BOZ9qcFzdthsPhD1KieMPgna/oaBbmhQvHcKKtGp9lvvutNGB6hV9ds7+tLJnLTl7gM430CrVZF/WTEFPH7jrbXs0c3/9gS/EoCb7EtppmNpV/zG5vw8T1liM1LQ1l1cXNmXRi55IJscApCtrrXW53Iv0EvE05pGPwVz33qm+cFV3MqELG0MlUkzGe+uHJHbPrJfnvXRwo/SrGe54DBVkaq7Mmb8bL0PFLFI+iIuM7j4btPOwiX9PpaRQHel0LsF2Cfp4jxvOgUoSaqSpM57HwWfo9q978rEgc6KBUYjnXgSlDvK1RSyafYbSVh5s1tRznmzW1Eow0a9KNjrbPT/Q8tO9SdJ9i0zDr753PYrEh1NcQ2JGt9Xc+JvA/4MXGV1/1+++dtG8/81G++9ZVd2TotVUd/VyrOfKVjeLYp4P0ttmNQIXQ7EkYv3HWWLs/odMXGCRttQU/1eoKfGGjKfSZx1vgsK8HLeQevCxmmorphR/SXY1Wu6GL7znvE+79rciHcjFxNhSUi7Tvne9/bNlZZcxwsYtdMv39yIu0zVQ4jzjG3OwuCdlremNSdvYTmBgUo/XJKx86kbylvIGvTwK1gFNyHZ2N6OPdqQQqQ65W6ilttAh20bJz5gc0eD9etHzoFy2Z184K7sUEWADGGDzAL2ZoX8Cg7gm44jK+WwKvCHMBr1hdO5w//Ipnsu+RoVgWkA38EZZlSgxCQ77GBl8FS74tFCNJt0WaAIn2H2YynPkTYD/m0pm05tlfoT+wXDrGWMZnaUHimUKCxDSVLuiLeaUS6O08SmSWedxMO6qJNMl2jMQWLTACmMsJVTq+iVdM2gc0yNA/v8drjxD/6uXQUNFVna7Jj2H7+D4PXl4P3jZOS+4h+y9xGrHXHaYp4qsXr186X/dMGe3gdxbVLine truncated
</data>
</root>
@@ -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;
+29 -18
View File
@@ -261,13 +261,13 @@ table.deviceProfileTable {
border: none; border: none;
} }
span.fancytree-node > span.fancytree-icon { span.fancytree-node > span.fancytree-icon {
background: none; background: none;
display: inline-block; display: inline-block;
font-family: FontAwesome; font-family: FontAwesome;
font-size: 1.2em; font-size: 1.2em;
width: 14px; width: 14px;
} }
span.fancytree-ico-ef > span.fancytree-icon:before { span.fancytree-ico-ef > span.fancytree-icon:before {
color: @StatusInformation; color: @StatusInformation;
@@ -487,10 +487,10 @@ div.logEventsViewport {
} }
} }
.session:hover { .session:hover {
border: 5px solid #6C7A87; border: 5px solid #6C7A87;
background-color: #DFE1F8; background-color: #DFE1F8;
} }
} }
} }
@@ -1169,13 +1169,13 @@ div.logEventsViewport {
border: none; border: none;
} }
span.fancytree-node > span.fancytree-icon { span.fancytree-node > span.fancytree-icon {
background: none; background: none;
display: inline-block; display: inline-block;
font-family: FontAwesome; font-family: FontAwesome;
font-size: 1.2em; font-size: 1.2em;
width: 14px; width: 14px;
} }
span.fancytree-ico-ef > span.fancytree-icon:before { span.fancytree-ico-ef > span.fancytree-icon:before {
color: @StatusClosed; 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 { #Config_UserFlags_Index {
i { i {
width: 1.2857142857142858em; width: 1.2857142857142858em;
+1 -1
View File
@@ -1 +1 @@
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc;}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:#fefefe;}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa;}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAGFklEQVRYw+WVe1BUVRzHvwE+QE0ZLF1Y3gTGSxIl4rk85KHFe0cUiIc8IjNx8gUmLJAFpbIKKJmmCSOi4q48zAe6LqAoioiIMlpOqYWxKCroWFNzO2eXXRdYCBqmf/rNfPece+6598738/ud3wJjHPV8WNwphoSO+L+F3HznWaTVbcGDsYQggkhjJPucWIhcGYYP5xnAKnkh0n1skcGxRobzLGx0MsYmR2MUO5qBMzEAiXhvxmLZU94tq/rJqzUV3q08zL+ei/lt+fC9sRt+N0vh334U/rdOYMEtMRnPqzL/4CxSu46jQFIJgSoI93FfZ7Tmi1FsVoSitWuwhv1Pe51ZcO0+g0BHNkqYH7BVrueXsPlhDYou7cYhrh2OOCzCdhQg7SWAcCYK4X/GIPyPBHBfJIP7fAWCe1chuGc9Qp5kIfhRDgIfbkHQo0IESnaCI74yKPNnkNZ5HPldxLxEiEuSw7i7fgl65BCo+Soc2zkaCHLzZSgLpeM2bBsWAscSM90McID5GTuy41BKzfdexOYn51Ao+R5lvwpR9bsAP65chr0z+TijqgLWw7dtI/zatsoy315GVA2/WyJp1uVyr7k6oOxT5ea7BGgk5u+pMt+N7pCRQtiP/VbUdA1qPLrxNLgFrR/T6wLsMlRscj+bpZAdn+tph5SeBvDi/HGYQjCfjObHtdj+8CRKOwQQ/XIIVyT78GhRFAQ6n6NJ9hKrZeGKF3IZdXDIefO/PQH2l7UQUD8FLnXaZG060Uy8c14PnAYjsJwa6Xb5me86KSv7LpL5riEyT8334FmSCOK8T7D6mrLZjhaEpacjFKzxoTAOWE2W1KhZUgFBj9ETRp+juozmFXQ9D3ksBYBIJgJOe32o+S4xPp1riKqGPdho+BrKKQQWxtXe3IMm8SbcFeWi8zMuJDPsIdLNxg3Z1y2TImUTRk1m/tiEoA78NlDwJOZd6gxg/r6/HAA1WZSCJ5IqCKVlL8BVah4Gvny5TuF0/kDzI6mADcgQfIEcfjOuLXmKZ/H0eTImilGfFI3Yo2SLuhSAV5MfNX9hH1Kpeeh4rHEwQnXjN/hWG69WMBfxk/F0dKpD84W1If4y0oJQ3Q779Xno6AMQG0vMvwKTwHUwWpgJQ/+vpIbJolzSa11XMdhuF5QBKEPoKsc9OioaHwXQVwE7satOlXma+RqhLPseC0gFsNVDYeCQRO/xkCkUQLjtJYTemFa0xcUjsTwa0S1kyzjoe7rRvW5u0Hcxw3d2s2BEr+cYw5VCaNqOFu1x6B0PtWJomyTLvzvRHxFTQ3FPdmUekaAq44MqwE1sTPTGQADKEPp1/T4AcgjUvCHIO0YYPGSVC1FRWI1qfg5y8w6hPGkpEk6kI6MuDnH9ADA8aFApHj54UB3qk0M9zUijM42yRgTDxiSdE6q/ZLYoWTnj0rmhTyH0vfaQD5RBn1MBPfeTJPu10HNpgFVK2EAAcgj9FpQA0JCaj68tQbyIPfD8C0sRFvcBQlnWCAHbdqnsCGyYRyAIjqKyoAKVW2MQ25yJzLoVSGkk82sc8ncO9nz3QQB4PDUsJz0soH0KFt+ZIVU0Yzo0AFPuR4OyLW16jaTpndaDH2l6nPNmcK63gHOjFWanRaoCMCiUAVDT1HwWkwiPYzUDIQxdBTzbLGQLDqCsiGZ9LdY1RCPmeglKLKUb9H1dZUmMipKKIUdZPldWFPPmsABId9eESbCiB8DQuxAGpAL0PA7A85yptAJoD6AVMFoAyuaXX8+Wzu2/ZkZ6FHKRa0ErIRZLmyMR2c4H31ZxU9+n/xE4SP7FSBNHkGgaQm6wwG03RsRNG8Qxs4cHYNsyCd6npsLrog6czr1Osq0Lb9LxXepMiMzhdcGSyBauDXNGBYBKlfkRVoA88pFvswQRt7OQZd/vRh8ARaa5zHjVFfBs7vAAqHldZwuwA21gnjAPs9e64C2eNxy+fBeOeSFw2hGu0EgBKJe/077Gf2t+2DAKfLtfBTCMpkJHGB3wGANkMJbIYWyGB0ANjVajCWp6rM3T0Ji2ifxUQV2rQqHxU4i0KomqoKHZN06sGhrAfxVjbX4M4m/gZza+uQwOHQAAAABJRU5ErkJggg==);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{baLine truncated .tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc;}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:#fefefe;}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa;}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{baLine truncated
+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 {
+1 -1
View File
@@ -1 +1 @@
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc;}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:#fefefe;}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa;}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#layout_PageHeading #User_Show_Flags{display:inline-block;float:right;height:50px;font-size:.6em;}#layout_PageHeading #User_Show_Flags>i{cursor:default;}#layout_PageHeading #User_Show_Flags>i>.details{display:none;}#User_Show #User_Show_Subjects{table-layout:fixed;}#User_Show #User_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#User_Show #User_Show_Subjects>tbody>tr>td>div{position:relative;}#User_Show #User_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#User_Show #User_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#User_Show #User_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#User_Show #User_Show_Subjects #User_Show_Details{width:330px;}#User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Identity_Id{font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_GenerateDocument_Container{padding-top:4px;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_GenerateDocument_Container #User_Show_GenerateDocument{padding:0;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Actions{margin-top:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment{border-bottom:1px dashed #ddd;padding:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment td:first-child{width:90px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment img.User_Show_AssignedDevices_CurrentAssignment_Image{float:left;width:64px;height:64px;margin-right:6px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment div.User_Show_AssignedDevices_CurrentAssignment_Details{float:left;}#User_Show #User_Show_Subjects #User_Show_Subjects_Actions>td{padding-top:4px;}#UserDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#UserDetailTabs #UserDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#UserDetailTabs #UserDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#UserDetailTabs #UserDetailTabItems>li>a{padding:5px 8px;}#UserDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#UserDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#User_Show_Details_Actions_AddFlag_Dialog{height:400px;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#User_Show_Details_Actions_AddFlag_Line truncated .tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc;}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:#fefefe;}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa;}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#layout_PageHeading #User_Show_Flags{display:inline-block;float:right;height:50px;font-size:.6em;}#layout_PageHeading #User_Show_Flags>i{cursor:default;}#layout_PageHeading #User_Show_Flags>i>.details{display:none;}#User_Show #User_Show_Subjects{table-layout:fixed;}#User_Show #User_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#User_Show #User_Show_Subjects>tbody>tr>td>div{position:relative;}#User_Show #User_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#User_Show #User_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#User_Show #User_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#User_Show #User_Show_Subjects #User_Show_Details{width:330px;}#User_Show #User_Show_Subjects #User_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Identity_Id{font-weight:600;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_GenerateDocument_Container{padding-top:4px;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_GenerateDocument_Container #User_Show_GenerateDocument{padding:0;}#User_Show #User_Show_Subjects #User_Show_Details #User_Show_Details_Actions{margin-top:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment{border-bottom:1px dashed #ddd;padding:4px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment td:first-child{width:90px;font-weight:600;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment img.User_Show_AssignedDevices_CurrentAssignment_Image{float:left;width:64px;height:64px;margin-right:6px;}#User_Show #User_Show_Subjects #User_Show_AssignedDevices .User_Show_AssignedDevices_CurrentAssignment div.User_Show_AssignedDevices_CurrentAssignment_Details{float:left;}#User_Show #User_Show_Subjects #User_Show_Subjects_Actions>td{padding-top:4px;}#UserDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#UserDetailTabs #UserDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#UserDetailTabs #UserDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#UserDetailTabs #UserDetailTabItems>li>a{padding:5px 8px;}#UserDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#UserDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#UserDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#User_Show_Details_Actions_AddFlag_Dialog{height:400px;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#User_Show_Details_Actions_AddFlag_Dialog .flagPicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#User_Show_Details_Actions_AddFlag_Line truncated
@@ -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);