diff --git a/Disco.Services/Interop/ActiveDirectory/ADDomainController.cs b/Disco.Services/Interop/ActiveDirectory/ADDomainController.cs index f735a313..bd0a2662 100644 --- a/Disco.Services/Interop/ActiveDirectory/ADDomainController.cs +++ b/Disco.Services/Interop/ActiveDirectory/ADDomainController.cs @@ -13,7 +13,7 @@ namespace Disco.Services.Interop.ActiveDirectory public class ADDomainController { private const string LdapPathTemplate = @"LDAP://{0}/{1}"; - private ActiveDirectoryContext context; + private readonly ActiveDirectoryContext context; public DomainController DomainController { get; private set; } public ADDomain Domain { get; private set; } @@ -100,25 +100,25 @@ namespace Disco.Services.Interop.ActiveDirectory return results; } - internal IEnumerable SearchInternal(string SearchRoot, string LdapFilter, string[] LoadProperties, int? ResultLimit) + internal IEnumerable SearchInternal(string searchRoot, string ldapFilter, string[] loadProperties, int? resultLimit, bool searchSubtree = true) { - if (string.IsNullOrEmpty(SearchRoot)) + if (string.IsNullOrEmpty(searchRoot)) throw new ArgumentNullException("SearchRoot"); - if (string.IsNullOrEmpty(LdapFilter)) + if (string.IsNullOrEmpty(ldapFilter)) throw new ArgumentNullException("LdapFilter"); - if (ResultLimit.HasValue && ResultLimit.Value < 1) + if (resultLimit.HasValue && resultLimit.Value < 1) throw new ArgumentOutOfRangeException("ResultLimit", "The ResultLimit must be 1 or greater"); - using (ADDirectoryEntry rootEntry = RetrieveDirectoryEntry(SearchRoot)) + using (ADDirectoryEntry rootEntry = RetrieveDirectoryEntry(searchRoot)) { - using (DirectorySearcher searcher = new DirectorySearcher(rootEntry.Entry, LdapFilter, LoadProperties, System.DirectoryServices.SearchScope.Subtree)) + using (DirectorySearcher searcher = new DirectorySearcher(rootEntry.Entry, ldapFilter, loadProperties, searchSubtree ? System.DirectoryServices.SearchScope.Subtree : System.DirectoryServices.SearchScope.OneLevel)) { searcher.PageSize = 500; - if (ResultLimit.HasValue) - searcher.SizeLimit = ResultLimit.Value; + if (resultLimit.HasValue) + searcher.SizeLimit = resultLimit.Value; - return searcher.FindAll().Cast().Select(result => new ADSearchResult(Domain, this, SearchRoot, LdapFilter, result)); + return searcher.FindAll().Cast().Select(result => new ADSearchResult(Domain, this, searchRoot, ldapFilter, result)); } } } @@ -225,7 +225,7 @@ namespace Disco.Services.Interop.ActiveDirectory if (SecurityIdentifier == null) throw new ArgumentNullException("SecurityIdentifier"); if (!SecurityIdentifier.IsEqualDomainSid(Domain.SecurityIdentifier)) - throw new ArgumentException($"The specified Security Identifier [{SecurityIdentifier.ToString()}] does not belong to this domain [{Domain.Name}]", "SecurityIdentifier"); + throw new ArgumentException($"The specified Security Identifier [{SecurityIdentifier}] does not belong to this domain [{Domain.Name}]", "SecurityIdentifier"); var sidBinaryString = SecurityIdentifier.ToBinaryString(); @@ -295,6 +295,7 @@ namespace Disco.Services.Interop.ActiveDirectory private const string OrganisationalUnitsLdapFilter = "(objectCategory=organizationalUnit)"; private static readonly string[] OrganisationalUnitsLoadProperties = { "name", "distinguishedName" }; + [Obsolete("Retrieve as needed using RetrieveADOrganisationUnits(parentDistinguishedName)")] public List RetrieveADOrganisationalUnitStructure() { Dictionary> resultTree = new Dictionary>(); @@ -319,6 +320,15 @@ namespace Disco.Services.Interop.ActiveDirectory return indexedChildren[Domain.DistinguishedName]; } + + public List RetrieveADOrganisationUnits(string parentDistinguishedName = null) + { + if (parentDistinguishedName is null) + parentDistinguishedName = Domain.DistinguishedName; + + return SearchInternal(parentDistinguishedName, OrganisationalUnitsLdapFilter, OrganisationalUnitsLoadProperties, null, false) + .Select(r => r.AsADOrganisationalUnit()).OrderBy(ou => ou.Name).ToList(); + } #endregion private ADSearchResult RetrieveBySamAccountName(string Id, string LdapFilterTemplate, string[] LoadProperties) diff --git a/Disco.Services/Interop/ActiveDirectory/ActiveDirectory.cs b/Disco.Services/Interop/ActiveDirectory/ActiveDirectory.cs index 20aab88f..4d525399 100644 --- a/Disco.Services/Interop/ActiveDirectory/ActiveDirectory.cs +++ b/Disco.Services/Interop/ActiveDirectory/ActiveDirectory.cs @@ -16,7 +16,7 @@ namespace Disco.Services.Interop.ActiveDirectory private static ActiveDirectoryContext context; private static ActiveDirectoryGroupCache groupCache; - private static object contextInitializingLock = new object(); + private static readonly object contextInitializingLock = new object(); public static void Initialize(DiscoDataContext Database) { @@ -157,6 +157,7 @@ namespace Disco.Services.Interop.ActiveDirectory #endregion #region Organisational Units + [Obsolete("Retrieve as needed using RetrieveADOrganisationUnits(parentDistinguishedName)")] public static IEnumerable>> RetrieveADOrganisationalUnitStructure() { return Context.Domains diff --git a/Disco.Web/Areas/API/Controllers/SystemController.cs b/Disco.Web/Areas/API/Controllers/SystemController.cs index 332d0cbe..7fce77b2 100644 --- a/Disco.Web/Areas/API/Controllers/SystemController.cs +++ b/Disco.Web/Areas/API/Controllers/SystemController.cs @@ -7,6 +7,7 @@ using Disco.Services.Messaging; using Disco.Services.Users; using Disco.Services.Web; using Disco.Web.Areas.API.Models.Shared; +using Disco.Web.Models.Shared; using System; using System.Collections.Generic; using System.Drawing; @@ -309,16 +310,99 @@ namespace Disco.Web.Areas.API.Controllers [DiscoAuthorizeAny(Claims.Config.System.ConfigureActiveDirectory, Claims.Config.DeviceProfile.Configure)] [HttpPost, ValidateAntiForgeryToken] - public virtual ActionResult DomainOrganisationalUnits() + public virtual ActionResult DomainOrganisationalUnitTree(string expandNode = null) { - var domainOUs = ActiveDirectory.RetrieveADOrganisationalUnitStructure() - .Select(d => new Models.System.DomainOrganisationalUnitsModel() { Domain = d.Item1, OrganisationalUnits = d.Item2 }) - .Select(ous => ous.ToFancyTreeNode()).ToList(); + List nodes; + + nodes = ActiveDirectory.Context.Domains + .Select(d => new FancyTreeNode() + { + key = d.DistinguishedName, + title = d.NetBiosName, + folder = true, + tooltip = d.Name, + children = d.GetAvailableDomainController().RetrieveADOrganisationUnits() + .Select(ou => new FancyTreeNode() + { + key = ou.DistinguishedName, + title = ou.Name, + folder = true, + tooltip = ou.DistinguishedName, + unselectable = false, + expanded = false, + lazy = true, + }).ToArray(), + unselectable = true, + expanded = true, + lazy = false, + }).ToList(); + if (!string.IsNullOrWhiteSpace(expandNode) && ActiveDirectory.Context.TryGetDomainFromDistinguishedName(expandNode, out var domain)) + { + // domain node + var node = nodes.FirstOrDefault(n => n.key.Equals(domain.DistinguishedName, StringComparison.OrdinalIgnoreCase)); + if (node != null) + { + var domainController = domain.GetAvailableDomainController(); + var ouIndex = expandNode.Length; + do + { + ouIndex = expandNode.LastIndexOf("OU=", ouIndex - 1, StringComparison.OrdinalIgnoreCase); + if (ouIndex >= 0) + { + var dn = expandNode.Substring(ouIndex); + + node = node.children.FirstOrDefault(n => n.key.Equals(dn, StringComparison.OrdinalIgnoreCase)); + if (node != null) + { + node.children = domainController.RetrieveADOrganisationUnits(dn).Select(ou => new FancyTreeNode() + { + key = ou.DistinguishedName, + title = ou.Name, + folder = true, + tooltip = ou.DistinguishedName, + unselectable = false, + expanded = false, + lazy = true, + }).ToArray(); + node.expanded = true; + node.lazy = false; + } + } + } while (node != null && ouIndex > 0); + } + } return new JsonResult() { - Data = domainOUs, - JsonRequestBehavior = JsonRequestBehavior.AllowGet, + Data = nodes, + MaxJsonLength = int.MaxValue + }; + } + + [DiscoAuthorizeAny(Claims.Config.System.ConfigureActiveDirectory, Claims.Config.DeviceProfile.Configure)] + [HttpPost, ValidateAntiForgeryToken] + public virtual ActionResult DomainOrganisationalUnits(string node) + { + if (string.IsNullOrWhiteSpace(node)) + throw new ArgumentNullException("node"); + if (!ActiveDirectory.Context.TryGetDomainFromDistinguishedName(node, out var domain)) + throw new ArgumentException("Invalid node distinguished name", "node"); + + var domainController = domain.GetAvailableDomainController(); + var nodes = domainController.RetrieveADOrganisationUnits(node).Select(ou => new FancyTreeNode() + { + key = ou.DistinguishedName, + title = ou.Name, + folder = true, + tooltip = ou.DistinguishedName, + unselectable = false, + expanded = false, + lazy = true, + }).ToArray(); + + return new JsonResult() + { + Data = nodes, MaxJsonLength = int.MaxValue }; } diff --git a/Disco.Web/Areas/API/Models/System/DomainOrganisationalUnitsModel.cs b/Disco.Web/Areas/API/Models/System/DomainOrganisationalUnitsModel.cs deleted file mode 100644 index 36a88980..00000000 --- a/Disco.Web/Areas/API/Models/System/DomainOrganisationalUnitsModel.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Disco.Services.Interop.ActiveDirectory; -using Disco.Web.Models.Shared; -using System.Collections.Generic; -using System.Linq; - -namespace Disco.Web.Areas.API.Models.System -{ - public class DomainOrganisationalUnitsModel - { - public ADDomain Domain { get; set; } - public List OrganisationalUnits { get; set; } - - public FancyTreeNode ToFancyTreeNode() - { - FancyTreeNode[] children = OrganisationalUnits.Select(ou => OrganisationalUnitToFancyTreeNode(ou)).ToArray(); - - return new FancyTreeNode() - { - key = Domain.DistinguishedName, - title = Domain.NetBiosName, - folder = true, - tooltip = Domain.Name, - children = children, - unselectable = false, - expanded = true - }; - } - private FancyTreeNode OrganisationalUnitToFancyTreeNode(ADOrganisationalUnit OrganisationalUnit) - { - FancyTreeNode[] children = OrganisationalUnit.Children == null - ? null - : OrganisationalUnit.Children.Select(ou => OrganisationalUnitToFancyTreeNode(ou)).ToArray(); - - return new FancyTreeNode() - { - key = OrganisationalUnit.DistinguishedName, - title = OrganisationalUnit.Name, - folder = true, - tooltip = OrganisationalUnit.DistinguishedName, - children = children, - unselectable = false - }; - } - } -} \ No newline at end of file diff --git a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml index ddd812ab..89335910 100644 --- a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml +++ b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.cshtml @@ -620,7 +620,7 @@ @AjaxHelpers.AjaxLoader() -
+
@AjaxHelpers.AjaxLoader() Loading Organisational Units
@@ -690,6 +690,7 @@ $enforceCheckbox = $('#enforceOrganisationalUnit'); const body = new FormData(); + body.append('expandNode', ouValue); body.append('__RequestVerificationToken', document.body.dataset.antiforgery); const response = await fetch($dialog.attr('data-url'), { method: 'POST', @@ -698,17 +699,23 @@ const data = await response.json(); $loading.hide(); - // Make 'Domains' unselectable - $.each(data, function (i, node) { - node.unselectable = true; - }); - ouTree = $ouTree.fancytree({ source: data, checkbox: false, selectMode: 1, keyboard: false, - fx: null + fx: null, + lazyload: function (event, data) { + data.result = { + url: $dialog.attr('data-urllazy'), + method: 'POST', + cache: false, + data: { + node: data.node.key, + '__RequestVerificationToken': document.body.dataset.antiforgery + } + }; + } }).fancytree('getTree'); ouTree.$container.css('position', 'relative'); diff --git a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs index 0717d88f..a1dff4d8 100644 --- a/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs +++ b/Disco.Web/Areas/Config/Views/DeviceProfile/Show.generated.cs @@ -2041,7 +2041,18 @@ WriteLiteral(" data-url=\""); #line 623 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" - Write(Url.Action(MVC.API.System.DomainOrganisationalUnits())); + Write(Url.Action(MVC.API.System.DomainOrganisationalUnitTree())); + + + #line default + #line hidden +WriteLiteral("\""); + +WriteLiteral(" data-urllazy=\""); + + + #line 623 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + Write(Url.Action(MVC.API.System.DomainOrganisationalUnits())); #line default @@ -2181,52 +2192,59 @@ WriteLiteral(">\r\n $(function () {\r\n " = $(\'#treeOrganisationalUnit\');\r\n $dialog.cs" + "s(\'overflow\', \'visible\');\r\n\r\n $enforceCheckbo" + "x = $(\'#enforceOrganisationalUnit\');\r\n\r\n cons" + -"t body = new FormData();\r\n body.append(\'__Req" + -"uestVerificationToken\', document.body.dataset.antiforgery);\r\n " + -" const response = await fetch($dialog.attr(\'data-url\'), {\r\n " + -" method: \'POST\',\r\n " + -" body: body\r\n });\r\n " + -" const data = await response.json();\r\n " + -" $loading.hide();\r\n\r\n // Make \'D" + -"omains\' unselectable\r\n $.each(data, function " + -"(i, node) {\r\n node.unselectable = true;\r\n" + -" });\r\n\r\n o" + -"uTree = $ouTree.fancytree({\r\n source: dat" + -"a,\r\n checkbox: false,\r\n " + -" selectMode: 1,\r\n ke" + -"yboard: false,\r\n fx: null\r\n " + -" }).fancytree(\'getTree\');\r\n\r\n " + -" ouTree.$container.css(\'position\', \'relative\');\r\n\r\n " + -" // Set Buttons\r\n $dialog.dialog(\'" + -"option\', \'buttons\', {\r\n \'Use Default Comp" + -"uters Container\': function () {\r\n var" + -" $this = $(this);\r\n $this.css(\'overfl" + -"ow\', \'hidden\');\r\n $this.dialog(\"disab" + -"le\");\r\n $this.dialog(\"option\", \"butto" + -"ns\", null);\r\n ouSet(\'\');\r\n " + -" },\r\n \'Save\':" + -" function () {\r\n var node = ouTree.ge" + -"tActiveNode();\r\n if (node && node.key" + -".substr(0, 3).toLowerCase() == \'ou=\') {\r\n " + -" var $this = $(this);\r\n $" + -"this.css(\'overflow\', \'hidden\');\r\n " + -" $this.dialog(\"disable\");\r\n $this" + -".dialog(\"option\", \"buttons\", null);\r\n " + -" ouSet(node.key);\r\n } else {\r\n " + -" alert(\'Select an Organisational Uni" + -"t to Save\')\r\n }\r\n " + -" }\r\n });\r\n\r\n " + -" // Expand\r\n expandAndFo" + -"cusNode(ouValue);\r\n\r\n ouTree.options.fx = { h" + -"eight: \"toggle\", duration: 200 };\r\n }\r\n " + -" $dialog.dialog(\'open\');\r\n\r\n " + -" $enforceCheckbox.prop(\'checked\', $(\'#DeviceProfile_EnforceOrganisationalUnit\')." + -"prop(\'checked\'));\r\n };\r\n\r\n " + -" $(\'#changeOrganisationalUnit\').click(ouChange);\r\n });\r\n " + -" \r\n"); +"t body = new FormData();\r\n body.append(\'expan" + +"dNode\', ouValue);\r\n body.append(\'__RequestVer" + +"ificationToken\', document.body.dataset.antiforgery);\r\n " + +" const response = await fetch($dialog.attr(\'data-url\'), {\r\n " + +" method: \'POST\',\r\n " + +" body: body\r\n });\r\n " + +" const data = await response.json();\r\n " + +" $loading.hide();\r\n\r\n ouTree = $ouTree." + +"fancytree({\r\n source: data,\r\n " + +" checkbox: false,\r\n " + +" selectMode: 1,\r\n keyboard: false,\r\n" + +" fx: null,\r\n " + +" lazyload: function (event, data) {\r\n " + +" data.result = {\r\n url:" + +" $dialog.attr(\'data-urllazy\'),\r\n " + +"method: \'POST\',\r\n cache: false,\r\n" + +" data: {\r\n " + +" node: data.node.key,\r\n " + +" \'__RequestVerificationToken\': document.body.dataset.antif" + +"orgery\r\n }\r\n " + +" };\r\n }\r\n " + +" }).fancytree(\'getTree\');\r\n\r\n " + +" ouTree.$container.css(\'position\', \'relative\');\r\n\r\n " + +" // Set Buttons\r\n $dialog.dial" + +"og(\'option\', \'buttons\', {\r\n \'Use Default " + +"Computers Container\': function () {\r\n " + +" var $this = $(this);\r\n $this.css(\'ov" + +"erflow\', \'hidden\');\r\n $this.dialog(\"d" + +"isable\");\r\n $this.dialog(\"option\", \"b" + +"uttons\", null);\r\n ouSet(\'\');\r\n " + +" },\r\n \'Sa" + +"ve\': function () {\r\n var node = ouTre" + +"e.getActiveNode();\r\n if (node && node" + +".key.substr(0, 3).toLowerCase() == \'ou=\') {\r\n " + +" var $this = $(this);\r\n " + +" $this.css(\'overflow\', \'hidden\');\r\n " + +" $this.dialog(\"disable\");\r\n $" + +"this.dialog(\"option\", \"buttons\", null);\r\n " + +" ouSet(node.key);\r\n } else {\r" + +"\n alert(\'Select an Organisational" + +" Unit to Save\')\r\n }\r\n " + +" }\r\n });\r\n\r\n " + +" // Expand\r\n expandA" + +"ndFocusNode(ouValue);\r\n\r\n ouTree.options.fx =" + +" { height: \"toggle\", duration: 200 };\r\n }\r\n " + +" $dialog.dialog(\'open\');\r\n\r\n " + +" $enforceCheckbox.prop(\'checked\', $(\'#DeviceProfile_EnforceOrganisationalUni" + +"t\').prop(\'checked\'));\r\n };\r\n\r\n " + +" $(\'#changeOrganisationalUnit\').click(ouChange);\r\n })" + +";\r\n \r\n"); - #line 752 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 759 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else { @@ -2245,7 +2263,7 @@ WriteLiteral(">\r\n \r\n"); WriteLiteral(" "); - #line 757 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 764 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Model.FriendlyOrganisationalUnitName); @@ -2254,7 +2272,7 @@ WriteLiteral(" "); WriteLiteral("\r\n \r\n
\r\n"); - #line 760 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 767 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2263,7 +2281,7 @@ WriteLiteral("\r\n \r\n
\ WriteLiteral(" "); - #line 761 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 768 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (!Model.OrganisationalUnitExists) { @@ -2286,7 +2304,7 @@ WriteLiteral(">The Organisational Unit could not be found.\r\n " \r\n"); - #line 768 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 775 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2299,13 +2317,13 @@ WriteLiteral(" style=\"margin-top: 8px;\""); WriteLiteral(">\r\n"); - #line 770 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 777 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 770 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 777 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig) { @@ -2321,7 +2339,7 @@ WriteLiteral(" type=\"checkbox\""); WriteLiteral(" "); - #line 772 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 779 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Model.DeviceProfile.EnforceOrganisationalUnit ? new MvcHtmlString("checked=\"checked\" ") : new MvcHtmlString(string.Empty)); @@ -2341,7 +2359,7 @@ WriteLiteral(@"> '"); - #line 778 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 785 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Url.Action(MVC.API.DeviceProfile.UpdateEnforceOrganisationalUnit(Model.DeviceProfile.Id))); @@ -2352,7 +2370,7 @@ WriteLiteral("\',\r\n \'EnforceOrganisational " \r\n"); - #line 783 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 790 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else { @@ -2369,7 +2387,7 @@ WriteLiteral(" type=\"checkbox\""); WriteLiteral(" "); - #line 786 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 793 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Model.DeviceProfile.EnforceOrganisationalUnit ? new MvcHtmlString("checked=\"checked\" ") : new MvcHtmlString(string.Empty)); @@ -2378,7 +2396,7 @@ WriteLiteral(" "); WriteLiteral(" disabled=\"disabled\" />\r\n"); - #line 787 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 794 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2394,7 +2412,7 @@ WriteLiteral(">\r\n Enforce Organisational Unit\r\n WriteLiteral(" "); - #line 791 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 798 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(AjaxHelpers.AjaxLoader()); @@ -2425,13 +2443,13 @@ WriteLiteral(@">When an Active Directory account is provisioned it will be p "); - #line 805 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 812 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 805 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 812 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && (Model.CertificateProviders.Count > 0 || Model.CertificateAuthorityProviders.Count > 0)) { @@ -2441,20 +2459,20 @@ WriteLiteral(@">When an Active Directory account is provisioned it will be p WriteLiteral("
\r\n"); - #line 808 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 815 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 808 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 815 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(AjaxHelpers.AjaxLoader("DeviceProfile_CertificateProviders")); #line default #line hidden - #line 808 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 815 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2464,7 +2482,7 @@ WriteLiteral("
\r\n"); WriteLiteral(" "); - #line 810 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 817 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && Model.CertificateProviders.Count > 0) { @@ -2489,7 +2507,7 @@ WriteLiteral(@"> fetch('"); - #line 823 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 830 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Url.Action(MVC.API.DeviceProfile.UpdateCertificateProviders(Model.DeviceProfile.Id))); @@ -2515,7 +2533,7 @@ WriteLiteral(@"', { "); - #line 840 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 847 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2524,7 +2542,7 @@ WriteLiteral(@"', { WriteLiteral(" "); - #line 841 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 848 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && Model.CertificateProviders.Count > 0) { @@ -2549,7 +2567,7 @@ WriteLiteral(@"> fetch('"); - #line 854 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 861 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Url.Action(MVC.API.DeviceProfile.UpdateCertificateAuthorityProviders(Model.DeviceProfile.Id))); @@ -2575,7 +2593,7 @@ WriteLiteral(@"', { "); - #line 871 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 878 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2585,13 +2603,13 @@ WriteLiteral(" \r\n \r\n

Devic "tes

\r\n"); - #line 875 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 882 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 875 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 882 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && Model.CertificateProviders.Count > 0) { @@ -2599,14 +2617,14 @@ WriteLiteral(" \r\n \r\n

Devic #line default #line hidden - #line 877 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 884 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(CommonHelpers.CheckBoxList("DeviceProfile_CertificateProviders", "DeviceProfile_CertificateProviders", Model.CertificateProviders.ToSelectListItems(Model.DeviceProfile.GetCertificateProviders()))); #line default #line hidden - #line 877 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 884 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else @@ -2626,7 +2644,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral("><None Allocated>\r\n"); - #line 886 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 893 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else { @@ -2637,13 +2655,13 @@ WriteLiteral("><None Allocated>\r\n"); WriteLiteral("
    \r\n"); - #line 890 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 897 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 890 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 897 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" foreach (var certificateProvider in certificateProviders) { @@ -2653,7 +2671,7 @@ WriteLiteral("
      \r\n"); WriteLiteral("
    • "); - #line 892 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 899 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(certificateProvider.Name); @@ -2662,7 +2680,7 @@ WriteLiteral("
    • "); WriteLiteral("
    • \r\n"); - #line 893 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 900 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2671,7 +2689,7 @@ WriteLiteral("\r\n"); WriteLiteral("
    \r\n"); - #line 895 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 902 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } } @@ -2685,13 +2703,13 @@ WriteLiteral(" style=\"margin-top: 4px;\""); WriteLiteral(">Authority Certificates

\r\n"); - #line 898 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 905 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 898 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 905 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && Model.CertificateAuthorityProviders.Count > 0) { @@ -2699,14 +2717,14 @@ WriteLiteral(">Authority Certificates\r\n"); #line default #line hidden - #line 900 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 907 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(CommonHelpers.CheckBoxList("DeviceProfile_CertificateAuthorityProviders", "DeviceProfile_CertificateAuthorityProviders", Model.CertificateAuthorityProviders.ToSelectListItems(Model.DeviceProfile.GetCertificateAuthorityProviders()))); #line default #line hidden - #line 900 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 907 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else @@ -2726,7 +2744,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral("><None Allocated>\r\n"); - #line 909 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 916 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else { @@ -2737,13 +2755,13 @@ WriteLiteral("><None Allocated>\r\n"); WriteLiteral("
    \r\n"); - #line 913 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 920 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 913 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 920 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" foreach (var certificateProvider in certificateProviders) { @@ -2753,7 +2771,7 @@ WriteLiteral("
      \r\n"); WriteLiteral("
    • "); - #line 915 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 922 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(certificateProvider.Name); @@ -2762,7 +2780,7 @@ WriteLiteral("
    • "); WriteLiteral("
    • \r\n"); - #line 916 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 923 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2771,7 +2789,7 @@ WriteLiteral("\r\n"); WriteLiteral("
    \r\n"); - #line 918 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 925 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } } @@ -2781,7 +2799,7 @@ WriteLiteral("
\r\n"); WriteLiteral(" "); - #line 920 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 927 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canViewPlugins) { @@ -2802,21 +2820,21 @@ WriteLiteral(" class=\"fa fa-info-circle\""); WriteLiteral(">View the (Url.Action(MVC.Config.Plugins.Install()) + #line 931 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" +, Tuple.Create(Tuple.Create("", 53943), Tuple.Create(Url.Action(MVC.Config.Plugins.Install()) #line default #line hidden -, 53303), false) +, 53943), false) ); WriteLiteral(">Plugin Catalogue to discover and install certificate provider plugins.\r\n " + "

\r\n \r\n"); - #line 927 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 934 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2826,13 +2844,13 @@ WriteLiteral(" \r\n \r\n \r\n " Provision Wireless Profiles:\r\n"); - #line 933 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 940 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 933 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 940 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && Model.WirelessProfileProviders.Count > 0) { @@ -2842,20 +2860,20 @@ WriteLiteral(" \r\n \r\n \r\n WriteLiteral("
\r\n"); - #line 936 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 943 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 936 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 943 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(AjaxHelpers.AjaxLoader("DeviceProfile_WirelessProfileProviders")); #line default #line hidden - #line 936 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 943 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" @@ -2879,7 +2897,7 @@ WriteLiteral(@"> fetch('"); - #line 948 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 955 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Url.Action(MVC.API.DeviceProfile.UpdateWirelessProfileProviders(Model.DeviceProfile.Id))); @@ -2905,7 +2923,7 @@ WriteLiteral(@"', { "); - #line 965 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 972 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -2914,13 +2932,13 @@ WriteLiteral(@"', { WriteLiteral(" \r\n \r\n"); - #line 968 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 975 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 968 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 975 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig && Model.WirelessProfileProviders.Count > 0) { @@ -2928,14 +2946,14 @@ WriteLiteral(" \r\n \r\n"); #line default #line hidden - #line 970 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 977 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(CommonHelpers.CheckBoxList("DeviceProfile_WirelessProfileProviders", "DeviceProfile_WirelessProfileProviders", Model.WirelessProfileProviders.ToSelectListItems(Model.DeviceProfile.GetWirelessProfileProviders()))); #line default #line hidden - #line 970 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 977 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else @@ -2955,7 +2973,7 @@ WriteLiteral(" class=\"smallMessage\""); WriteLiteral("><None Allocated>\r\n"); - #line 979 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 986 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } else { @@ -2966,13 +2984,13 @@ WriteLiteral("><None Allocated>\r\n"); WriteLiteral("
    \r\n"); - #line 983 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 990 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 983 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 990 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" foreach (var wirelessProfileProvider in wirelessProfileProviders) { @@ -2982,7 +3000,7 @@ WriteLiteral("
      \r\n"); WriteLiteral("
    • "); - #line 985 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 992 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(wirelessProfileProvider.Name); @@ -2991,7 +3009,7 @@ WriteLiteral("
    • "); WriteLiteral("
    • \r\n"); - #line 986 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 993 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3000,7 +3018,7 @@ WriteLiteral("\r\n"); WriteLiteral("
    \r\n"); - #line 988 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 995 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } } @@ -3010,7 +3028,7 @@ WriteLiteral("
\r\n"); WriteLiteral(" "); - #line 990 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 997 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canViewPlugins) { @@ -3031,21 +3049,21 @@ WriteLiteral(" class=\"fa fa-info-circle\""); WriteLiteral(">View the (Url.Action(MVC.Config.Plugins.Install()) + #line 1001 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" +, Tuple.Create(Tuple.Create("", 57601), Tuple.Create(Url.Action(MVC.Config.Plugins.Install()) #line default #line hidden -, 56961), false) +, 57601), false) ); WriteLiteral(">Plugin Catalogue to discover and install wireless profile provider plugins.\r" + "\n

\r\n \r\n"); - #line 997 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1004 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3054,13 +3072,13 @@ WriteLiteral(">Plugin Catalogue to discover and install wireless profile pro WriteLiteral(" \r\n \r\n"); - #line 1000 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1007 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 1000 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1007 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (hideAdvanced) { @@ -3094,7 +3112,7 @@ WriteLiteral(@">Show Advanced Options "); - #line 1016 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1023 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3110,7 +3128,7 @@ WriteLiteral(">\r\n \r\n Linked Groups:\r\n WriteLiteral(" "); - #line 1023 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1030 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() { CanConfigure = canConfig, @@ -3128,7 +3146,7 @@ WriteLiteral("\r\n"); WriteLiteral(" "); - #line 1031 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1038 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel() { CanConfigure = canConfig, @@ -3144,13 +3162,13 @@ WriteLiteral(" "); WriteLiteral("\r\n"); - #line 1039 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1046 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 1039 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1046 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canConfig) { @@ -3158,14 +3176,14 @@ WriteLiteral("\r\n"); #line default #line hidden - #line 1041 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1048 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared)); #line default #line hidden - #line 1041 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1048 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3175,7 +3193,7 @@ WriteLiteral("\r\n"); WriteLiteral(" \r\n \r\n \r\n \r\n\r\n"); - #line 1048 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1055 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.Partial(MVC.Config.Shared.Views._DeviceGroupDocumentBulkGenerate, Model)); @@ -3188,13 +3206,13 @@ WriteLiteral(" class=\"actionBar\""); WriteLiteral(">\r\n"); - #line 1050 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1057 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 1050 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1057 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (Model.CanDecommission) { @@ -3220,13 +3238,13 @@ WriteLiteral(" title=\"Profile Device Decommission\""); WriteLiteral(">\r\n"); - #line 1054 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1061 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 1054 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1061 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" using (Html.BeginForm(MVC.API.Device.DeviceProfileDecommission(Model.DeviceProfile.Id))) { @@ -3234,14 +3252,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 1056 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1063 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.AntiForgeryToken()); #line default #line hidden - #line 1056 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1063 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" @@ -3266,13 +3284,13 @@ WriteLiteral(" class=\"none\""); WriteLiteral(">\r\n"); - #line 1062 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1069 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 1062 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1069 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)).Cast().OrderBy(r => r.ToString())) { @@ -3283,33 +3301,33 @@ WriteLiteral("
  • \r\n WriteLiteral(" type=\"radio\""); -WriteAttribute("id", Tuple.Create(" id=\"", 60656), Tuple.Create("\"", 60728) -, Tuple.Create(Tuple.Create("", 60661), Tuple.Create("DeviceProfile_Decommission_Dialog_Reason_", 60661), true) +WriteAttribute("id", Tuple.Create(" id=\"", 61296), Tuple.Create("\"", 61368) +, Tuple.Create(Tuple.Create("", 61301), Tuple.Create("DeviceProfile_Decommission_Dialog_Reason_", 61301), true) - #line 1065 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" - , Tuple.Create(Tuple.Create("", 60702), Tuple.Create((int)decommissionReason + #line 1072 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + , Tuple.Create(Tuple.Create("", 61342), Tuple.Create((int)decommissionReason #line default #line hidden -, 60702), false) +, 61342), false) ); WriteLiteral("\r\n name=\"decommissionReason\""); -WriteAttribute("value", Tuple.Create(" value=\"", 60795), Tuple.Create("\"", 60829) +WriteAttribute("value", Tuple.Create(" value=\"", 61435), Tuple.Create("\"", 61469) - #line 1066 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" -, Tuple.Create(Tuple.Create("", 60803), Tuple.Create((int)decommissionReason + #line 1073 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" +, Tuple.Create(Tuple.Create("", 61443), Tuple.Create((int)decommissionReason #line default #line hidden -, 60803), false) +, 61443), false) ); WriteLiteral(" "); - #line 1066 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1073 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write((decommissionReason == DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty); @@ -3317,21 +3335,21 @@ WriteLiteral(" "); #line hidden WriteLiteral(" />\r\n ((int)decommissionReason + #line 1074 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + , Tuple.Create(Tuple.Create("", 61656), Tuple.Create((int)decommissionReason #line default #line hidden -, 61016), false) +, 61656), false) ); WriteLiteral(">"); - #line 1067 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1074 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(decommissionReason.ReasonMessage()); @@ -3340,7 +3358,7 @@ WriteLiteral(">"); WriteLiteral("\r\n
  • \r\n"); - #line 1069 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1076 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3359,7 +3377,7 @@ WriteLiteral(" />\r\n Unassign devices users\r\n "\r\n \r\n"); - #line 1077 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1084 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3403,7 +3421,7 @@ WriteLiteral(@"> "); - #line 1108 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1115 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3412,7 +3430,7 @@ WriteLiteral(@"> WriteLiteral(" "); - #line 1109 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1116 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (canDelete) { @@ -3440,13 +3458,13 @@ WriteLiteral(" title=\"Delete this Device Profile?\""); WriteLiteral(">\r\n"); - #line 1113 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1120 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" #line default #line hidden - #line 1113 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1120 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" using (Html.BeginForm(MVC.API.DeviceProfile.Delete(Model.DeviceProfile.Id, true))) { @@ -3454,14 +3472,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 1115 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1122 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.AntiForgeryToken()); #line default #line hidden - #line 1115 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1122 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3509,7 +3527,7 @@ WriteLiteral(@"> "); - #line 1149 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1156 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3518,7 +3536,7 @@ WriteLiteral(@"> WriteLiteral(" "); - #line 1150 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1157 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (Authorization.Has(Claims.Device.Actions.Export)) { @@ -3526,14 +3544,14 @@ WriteLiteral(" "); #line default #line hidden - #line 1152 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1159 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.DeviceExportTypes.Profile, Model.DeviceProfile.Id))); #line default #line hidden - #line 1152 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1159 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } @@ -3543,7 +3561,7 @@ WriteLiteral(" "); WriteLiteral(" "); - #line 1154 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1161 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" if (Authorization.Has(Claims.Device.Search) && Model.DeviceCount > 0) { @@ -3551,14 +3569,14 @@ WriteLiteral(" "); #line default #line hidden - #line 1156 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1163 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" Write(Html.ActionLinkButton(string.Format("View {0} Device{1}", Model.DeviceCount, (Model.DeviceCount != 1 ? "s" : null)), MVC.Search.Query(Model.DeviceProfile.Id.ToString(), "DeviceProfile"))); #line default #line hidden - #line 1156 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" + #line 1163 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml" } diff --git a/Disco.Web/Disco.Web.csproj b/Disco.Web/Disco.Web.csproj index 78e88265..5f65cd17 100644 --- a/Disco.Web/Disco.Web.csproj +++ b/Disco.Web/Disco.Web.csproj @@ -226,7 +226,6 @@ - _ViewStart.cshtml diff --git a/Disco.Web/Extensions/T4MVC/API.SystemController.generated.cs b/Disco.Web/Extensions/T4MVC/API.SystemController.generated.cs index 0c5e94e5..04f24c83 100644 --- a/Disco.Web/Extensions/T4MVC/API.SystemController.generated.cs +++ b/Disco.Web/Extensions/T4MVC/API.SystemController.generated.cs @@ -109,6 +109,12 @@ namespace Disco.Web.Areas.API.Controllers } [NonAction] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult DomainOrganisationalUnits() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DomainOrganisationalUnits); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] public virtual System.Web.Mvc.ActionResult SearchSubjects() { return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.SearchSubjects); @@ -179,6 +185,7 @@ namespace Disco.Web.Areas.API.Controllers public readonly string UpdateActiveDirectorySearchScope = "UpdateActiveDirectorySearchScope"; public readonly string UpdateActiveDirectorySearchAllServers = "UpdateActiveDirectorySearchAllServers"; public readonly string UpdateActiveDirectorySearchWildcardSuffixOnly = "UpdateActiveDirectorySearchWildcardSuffixOnly"; + public readonly string DomainOrganisationalUnitTree = "DomainOrganisationalUnitTree"; public readonly string DomainOrganisationalUnits = "DomainOrganisationalUnits"; public readonly string SearchSubjects = "SearchSubjects"; public readonly string SearchGroupSubjects = "SearchGroupSubjects"; @@ -206,6 +213,7 @@ namespace Disco.Web.Areas.API.Controllers public const string UpdateActiveDirectorySearchScope = "UpdateActiveDirectorySearchScope"; public const string UpdateActiveDirectorySearchAllServers = "UpdateActiveDirectorySearchAllServers"; public const string UpdateActiveDirectorySearchWildcardSuffixOnly = "UpdateActiveDirectorySearchWildcardSuffixOnly"; + public const string DomainOrganisationalUnitTree = "DomainOrganisationalUnitTree"; public const string DomainOrganisationalUnits = "DomainOrganisationalUnits"; public const string SearchSubjects = "SearchSubjects"; public const string SearchGroupSubjects = "SearchGroupSubjects"; @@ -301,6 +309,22 @@ namespace Disco.Web.Areas.API.Controllers public readonly string SearchWildcardSuffixOnly = "SearchWildcardSuffixOnly"; public readonly string redirect = "redirect"; } + static readonly ActionParamsClass_DomainOrganisationalUnitTree s_params_DomainOrganisationalUnitTree = new ActionParamsClass_DomainOrganisationalUnitTree(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_DomainOrganisationalUnitTree DomainOrganisationalUnitTreeParams { get { return s_params_DomainOrganisationalUnitTree; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_DomainOrganisationalUnitTree + { + public readonly string expandNode = "expandNode"; + } + static readonly ActionParamsClass_DomainOrganisationalUnits s_params_DomainOrganisationalUnits = new ActionParamsClass_DomainOrganisationalUnits(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_DomainOrganisationalUnits DomainOrganisationalUnitsParams { get { return s_params_DomainOrganisationalUnits; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_DomainOrganisationalUnits + { + public readonly string node = "node"; + } static readonly ActionParamsClass_SearchSubjects s_params_SearchSubjects = new ActionParamsClass_SearchSubjects(); [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] public ActionParamsClass_SearchSubjects SearchSubjectsParams { get { return s_params_SearchSubjects; } } @@ -578,13 +602,26 @@ namespace Disco.Web.Areas.API.Controllers } [NonAction] - partial void DomainOrganisationalUnitsOverride(T4MVC_System_Web_Mvc_ActionResult callInfo); + partial void DomainOrganisationalUnitTreeOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string expandNode); [NonAction] - public override System.Web.Mvc.ActionResult DomainOrganisationalUnits() + public override System.Web.Mvc.ActionResult DomainOrganisationalUnitTree(string expandNode) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DomainOrganisationalUnitTree); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "expandNode", expandNode); + DomainOrganisationalUnitTreeOverride(callInfo, expandNode); + return callInfo; + } + + [NonAction] + partial void DomainOrganisationalUnitsOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string node); + + [NonAction] + public override System.Web.Mvc.ActionResult DomainOrganisationalUnits(string node) { var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DomainOrganisationalUnits); - DomainOrganisationalUnitsOverride(callInfo); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "node", node); + DomainOrganisationalUnitsOverride(callInfo, node); return callInfo; } diff --git a/Disco.Web/Models/Shared/FancyTreeNode.cs b/Disco.Web/Models/Shared/FancyTreeNode.cs index 896e9984..62c98f9c 100644 --- a/Disco.Web/Models/Shared/FancyTreeNode.cs +++ b/Disco.Web/Models/Shared/FancyTreeNode.cs @@ -13,6 +13,7 @@ namespace Disco.Web.Models.Shared public bool unselectable { get; set; } public FancyTreeNode[] children { get; set; } public string tooltip { get; set; } + public bool lazy { get; set; } public static FancyTreeNode FromClaimNavigatorItem(IClaimNavigatorItem Item, bool Unselectable) {