Portal signin via Control Instance

This commit is contained in:
Andy Howard
2024-10-29 08:40:47 +00:00
parent bf6bb966bc
commit c5ee285e27
467 changed files with 25771 additions and 3347 deletions
@@ -0,0 +1,273 @@
@* Account - User Account *@
@model Model_UserAccount
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "User Accounts";
Model.AdditionalFiles_JS.Add("js/sbc-res-pag.js");
Model.AdditionalFiles_JS.Add("js/sbc-usr.js");
}
<div class="sbc-panel Users fullheight">
<script type="text/javascript">
sbc.dlg.title.createItem = '@(Localiser.GetJavascriptText("caption.user.create"))';
sbc.dlg.title.updateItem = '@(Localiser.GetJavascriptText("caption.user.update"))';
</script>
<div class="sbc-panel-data sbc-flex">
@* Filter form - wrap header to include paging controls. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmUserFilter", @class = "sbc-form", @onSubmit = "return false;" }))
{
<div class="sbc-panel-header">
<div class="row">
<div class="fixed">
<partial name="~/Views/Common/ResultsPaging.cshtml" />
</div>
<div class="col center"><div class="sbc-panel-caption">@Localiser["label.users"]</div></div>
<div class="fixed">
@* Burger menu *@
<ul class="nav navbar-nav navbar-dark navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
</div>
@* Filter Panel *@
<div class="sbc-panel-filter">
<div class="row pb4">
<div class="col-sm-5 sbc-label text-left text-sm-right">@Localiser["label.search"]</div>
<div class="col-sm-7">
@Html.TextBoxFor(model => model.Filter.Search, new { @id = "", @class = "FilterSearch", @maxlength = "32" })
</div>
</div>
</div>
}
<div class="sbc-panel-item-table sbc-flex">
<table class="sbc-item-list">
<thead>
<tr>
<th class="pl-2">@Localiser["label.email"]</th>
<th class="">@Localiser["label.name"]</th>
<th class="center">@Localiser["label.phone"]</th>
<th class="center">@Localiser["label.last.login"]</th>
<th class="center">@Localiser["label.status"]</th>
<th class="right" style="width:2%;"></th>
</tr>
<tr><td colspan="6"><div class="sbc-panel-messages"></div></td></tr>
</thead>
<tbody></tbody>
</table>
</div>
@* Element templates *@
<div class="sbc-panel-item-template">
@* Filter Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu UserFilter">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
@* User row template - table is ignored. *@
<table class="">
<tr class="sbc-row-item User">
<td><div class="UserEmailAddress pl-1"></div></td>
<td><div class="UserDisplayName"></div></td>
<td><div class="UserPhone center"></div></td>
<td><div class="UserLastLoginOn center"></div></td>
<td><div class="UserStatusDesc center"></div></td>
<td>
<div class="right">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</td>
</tr>
</table>
@* Item Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu User">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
</div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmUserId", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.User.Id, new { @id = "", @class = "UserId" })
}
<div id="dlgUser" class="sbc-dialog">
<div class="spacer2"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmUser", @class = "sbc-form", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.User.Exists, new { @id = "", @class = "UserExists" })
@Html.HiddenFor(model => model.User.Id, new { @id = "", @class = "UserId" })
@* Email Address *@
<div class="sbc-form-control UserEmailAddress">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserEmailAddress"><span>@Localiser["label.email"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.EmailAddress, new { @id = "ifUserEmailAddress", @class = "UserEmailAddress sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_EmailAddress) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Title *@
<div class="sbc-form-control UserTitle">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserTitle"><span>@Localiser["label.title"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.Title, new { @id = "ifUserTitle", @class = "UserTitle sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_Title) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* First Name *@
<div class="sbc-form-control UserFirstName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserFirstName"><span>@Localiser["label.first.name"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.FirstName, new { @id = "ifUserFirstName", @class = "UserFirstName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_FirstName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Initials *@
<div class="sbc-form-control UserInitials">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserInitials"><span>@Localiser["label.initials"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.Initials, new { @id = "ifUserInitials", @class = "UserInitials sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_Initials) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Last Name *@
<div class="sbc-form-control UserLastName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserLastName"><span>@Localiser["label.last.name"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.LastName, new { @id = "ifUserLastName", @class = "UserLastName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_LastName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* PhoneMain *@
<div class="sbc-form-control UserPhoneMain">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserPhoneMain"><span>@Localiser["label.phone"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.PhoneMain, new { @id = "ifUserPhoneMain", @class = "UserPhoneMain sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_PhoneMain) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* PhoneMobile *@
<div class="sbc-form-control UserPhoneMobile">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserPhoneMobile"><span>@Localiser["label.mobile"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.PhoneMobile, new { @id = "ifUserPhoneMobile", @class = "UserPhoneMobile sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_PhoneMobile) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* PhoneAlt *@
<div class="sbc-form-control UserPhoneAlt">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifUserPhoneAlt"><span>@Localiser["label.phone.alt"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.User.PhoneAlt, new { @id = "ifUserPhoneAlt", @class = "UserPhoneAlt sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_PhoneAlt) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* User Status *@
<div class="sbc-form-control UserStatus">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="cbUserStatus"><span>@Localiser["label.status"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
<select id="cbUserStatus" class="sbc-select UserStatus" name="User.StatusCode"></select>
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
}
<div class="spacer2"></div>
</div>
</div>
</div>
@@ -0,0 +1,25 @@
@model SbmModel_Control
@inject SbmLocaliser Localiser
@{
// Scripts.
Model.AdditionalFiles_JS.Add("js/sbc-res-pag.js");
}
<script type="text/javascript">
sbc.resultsPaging = sbc.resultsPaging || { fn: {}, msg: {}, contexts: [] };
sbc.resultsPaging.msg.pageInfo = '@Localiser.GetJavascriptText("label.page.info", "{0}", "{1}")';
</script>
@* Results paging *@
<div class="sbc-results-paging hidden">
@Html.HiddenFor(model => model.Paging.PageNo, new { @id = "", @class = "PagingPageNo" })
@Html.HiddenFor(model => model.Paging.PageLength, new { @id = "", @class = "PagingPageLength" })
<div class="iblock sbc-action sbc-paging-first"><img src="~/img/action/first24.png" alt="@(Localiser["label.first"])" title="@(Localiser["label.first"])" /></div>
<div class="iblock sbc-action sbc-paging-prev"><img src="~/img/action/prev24.png" alt="@(Localiser["label.previous"])" title="@(Localiser["label.previous"])" /></div>
<div class="iblock sbc-paging-info"></div>
<div class="iblock sbc-action sbc-paging-next"><img src="~/img/action/next24.png" alt="@(Localiser["label.next"])" title="@(Localiser["label.next"])" /></div>
<div class="iblock sbc-action sbc-paging-last"><img src="~/img/action/last24.png" alt="@(Localiser["label.last"])" title="@(Localiser["label.last"])" /></div>
</div>
@@ -0,0 +1,53 @@
@model SbmModel_Control
@inject SbmLocaliser Localiser
@{
// Ensure view is only included once in page.
if (!Model.RegisterView("Views/Common/SelectItem")) return;
// Scripts.
Model.AdditionalFiles_JS.Add("js/sbc-sel-itm.js");
}
<link rel="stylesheet" href="~/css/sbc-sel-itm.css?@Model.HrefVersion" />
<div id="dlgSelectItem" class="sbc-dialog sbc-form">
<div class="container-fluid h-100">
@* Selected Item *@
<div class="SelectedItem">
<div class="row">
<div class="col-sm-12"><div class="sbc-label">@Localiser["label.item.selected"]:</div></div>
<div class="col-sm-12"><div class="SelectedItemName"></div></div>
</div>
<div class="spacer2"></div>
</div>
@* Item Filter *@
<div class="ItemFilter sbc-form">
<div class="row">
<div class="col right"><div class="sbc-label">@Localiser["label.search"]</div></div>
<div class="fixed"><input type="search" id="ifItemFilter" class="sbc-input" autocomplete="off" onkeyup="sbc.data.selectItem.fn.displayItems();" /></div>
</div>
<div class="spacer2"></div>
</div>
@* Available items *@
<div class="row">
<div class="col"><div class="sbc-label bottom">@Localiser["label.items.available"]:</div></div>
</div>
<div class="row">
<div class="col-sm-12 sbc-selectItem-items AvailableItems"></div>
</div>
</div>
<div class="sbc-panel-item-template">
<div class="sbc-panel-item Item">
<div class="ItemName"></div>
</div>
</div>
</div>
@@ -1,4 +1,6 @@
@{
@model Model_Home
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Home Page";
}
@@ -0,0 +1,222 @@
@* Instance - Owner *@
@model Model_Owner
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Owner Accounts";
Model.AdditionalFiles_JS.Add("js/sbc-res-pag.js");
Model.AdditionalFiles_JS.Add("js/sbc-ins-own.js");
}
<div class="sbc-panel Owners fullheight">
<script type="text/javascript">
sbc.dlg.title.createItem= '@(Localiser.GetJavascriptText("caption.owner.create"))';
sbc.dlg.title.updateItem= '@(Localiser.GetJavascriptText("caption.owner.update"))';
</script>
<div class="sbc-panel-data sbc-flex">
@* Filter form - wrap header to include paging controls. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmOwnerFilter", @class = "sbc-form", @onSubmit = "return false;" }))
{
<div class="sbc-panel-header">
<div class="row">
<div class="fixed">
<partial name="~/Views/Common/ResultsPaging.cshtml" />
</div>
<div class="col center"><div class="sbc-panel-caption">@Localiser["label.owners"]</div></div>
<div class="fixed">
@* Burger menu *@
<ul class="nav navbar-nav navbar-dark navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
</div>
@* Filter Panel *@
<div class="sbc-panel-filter">
<div class="row pb4">
<div class="col-sm-5 sbc-label text-left text-sm-right">@Localiser["label.search"]</div>
<div class="col-sm-7">
@Html.TextBoxFor(model => model.Filter.Search, new { @id = "", @class = "FilterSearch", @maxlength = "32" })
</div>
</div>
</div>
}
<div class="sbc-panel-item-table sbc-flex">
<table class="sbc-item-list">
<thead>
<tr>
<th class="pl-2">@Localiser["label.name"]</th>
<th class="">@Localiser["label.contact"]</th>
<th class="">@Localiser["label.email"]</th>
<th class="center">@Localiser["label.phone"]</th>
<th class="center">@Localiser["label.status"]</th>
<th class="right" style="width:2%;"></th>
</tr>
<tr><td colspan="6"><div class="sbc-panel-messages"></div></td></tr>
</thead>
<tbody></tbody>
</table>
</div>
@* Element templates *@
<div class="sbc-panel-item-template">
@* Filter Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu OwnerFilter">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
@* Owner row template - table is ignored. *@
<table class="">
<tr class="sbc-row-item Owner">
<td><div class="OwnerName pl-1"></div></td>
<td><div class="OwnerContactName"></div></td>
<td><div class="OwnerContactEmailAddress"></div></td>
<td><div class="OwnerContactPhone center"></div></td>
<td><div class="OwnerStatusDesc center"></div></td>
<td>
<div class="right">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</td>
</tr>
</table>
@* Item Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu Owner">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
</div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmOwnerId", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.Owner.Id, new { @id = "", @class = "OwnerId" })
}
<div id="dlgOwner" class="sbc-dialog">
<div class="spacer2"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmOwner", @class = "sbc-form", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.Owner.Exists, new { @id = "", @class = "OwnerExists" })
@Html.HiddenFor(model => model.Owner.Id, new { @id = "", @class = "OwnerId" })
@* Name *@
<div class="sbc-form-control OwnerName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifOwnerName"><span>@Localiser["label.name"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Owner.Name, new { @id = "ifOwnerName", @class = "OwnerName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Owner_Name) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Contact Name *@
<div class="sbc-form-control OwnerContactName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifOwnerContactName"><span>@Localiser["label.contact"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Owner.ContactName, new { @id = "ifOwnerContactName", @class = "OwnerContactName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Owner_ContactName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Contact Email Address *@
<div class="sbc-form-control OwnerContactEmailAddress">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifOwnerContactEmailAddress"><span>@Localiser["label.email"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Owner.ContactEmailAddress, new { @id = "ifOwnerContactEmailAddress", @class = "OwnerContactEmailAddress sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Owner_ContactEmailAddress) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* PhoneMain *@
<div class="sbc-form-control OwnerContactPhoneMain">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifOwnerContactPhoneMain"><span>@Localiser["label.phone"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Owner.ContactPhoneMain, new { @id = "ifOwnerContactPhoneMain", @class = "OwnerContactPhoneMain sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Owner_ContactPhoneMain) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* PhoneAlt *@
<div class="sbc-form-control OwnerContactPhoneAlt">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifOwnerContactPhoneAlt"><span>@Localiser["label.phone.alt"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Owner.ContactPhoneAlt, new { @id = "ifOwnerContactPhoneAlt", @class = "OwnerContactPhoneAlt sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Owner_ContactPhoneAlt) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Owner Status *@
<div class="sbc-form-control OwnerStatus">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="cbOwnerStatus"><span>@Localiser["label.status"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
<select id="cbOwnerStatus" class="sbc-select OwnerStatus" name="Owner.StatusCode"></select>
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
}
<div class="spacer2"></div>
</div>
</div>
</div>
@@ -0,0 +1,271 @@
@* Instance - Repository *@
@model Model_Repository
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Repository Accounts";
Model.AdditionalFiles_JS.Add("js/sbc-res-pag.js");
Model.AdditionalFiles_JS.Add("js/sbc-ins-rep.js");
}
<div class="sbc-panel Repositories fullheight">
<script type="text/javascript">
sbc.dlg.title.createItem = '@(Localiser.GetJavascriptText("caption.repository.create"))';
sbc.dlg.title.updateItem = '@(Localiser.GetJavascriptText("caption.repository.update"))';
sbc.lbl.selectOwner = '@(Localiser.GetJavascriptText("caption.select.owner"))';
</script>
<div class="sbc-panel-data sbc-flex">
@* Filter form - wrap header to include paging controls. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRepositoryFilter", @class = "sbc-form", @onSubmit = "return false;" }))
{
<div class="sbc-panel-header">
<div class="row">
<div class="fixed">
<partial name="~/Views/Common/ResultsPaging.cshtml" />
</div>
<div class="col center"><div class="sbc-panel-caption">@Localiser["label.repositories"]</div></div>
<div class="fixed">
@* Burger menu *@
<ul class="nav navbar-nav navbar-dark navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
</div>
@* Filter Panel *@
<div class="sbc-panel-filter">
<div class="row pb4">
<div class="col-sm-5 sbc-label text-left text-sm-right">@Localiser["label.search"]</div>
<div class="col-sm-7">
@Html.TextBoxFor(model => model.Filter.Search, new { @id = "", @class = "FilterSearch", @maxlength = "32" })
</div>
</div>
</div>
}
<div class="sbc-panel-item-table sbc-flex">
<table class="sbc-item-list">
<thead>
<tr>
<th class="pl-2">@Localiser["label.context"]</th>
<th class="">@Localiser["label.owner"]</th>
<th class="">@Localiser["label.server"]</th>
<th class="">@Localiser["label.instance"]</th>
<th class="">@Localiser["label.database"]</th>
<th class="center">@Localiser["label.status"]</th>
<th class="right" style="width:2%;"></th>
</tr>
<tr><td colspan="6"><div class="sbc-panel-messages"></div></td></tr>
</thead>
<tbody></tbody>
</table>
</div>
@* Element templates *@
<div class="sbc-panel-item-template">
@* Filter Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu RepositoryFilter">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
@* Repository row template - table is ignored. *@
<table class="">
<tr class="sbc-row-item Repository">
<td><div class="RepositoryContext pl-1"></div></td>
<td><div class="RepositoryOwnerName"></div></td>
<td><div class="RepositoryServerName"></div></td>
<td><div class="RepositoryInstanceName"></div></td>
<td><div class="RepositoryDatabaseName"></div></td>
<td><div class="RepositoryStatusDesc center"></div></td>
<td>
<div class="right">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</td>
</tr>
</table>
@* Item Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu Repository">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
</div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRepositoryId", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.Repository.Id, new { @id = "", @class = "RepositoryId" })
}
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmOwners", @onSubmit = "return false;" }))
{
}
<div id="dlgRepository" class="sbc-dialog">
<div class="spacer2"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRepository", @class = "sbc-form", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.Repository.Exists, new { @id = "", @class = "RepositoryExists" })
@Html.HiddenFor(model => model.Repository.Id, new { @id = "", @class = "RepositoryId" })
@* Repository Owner *@
<div class="sbc-form-control RepositoryOwner">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for=""><span>@Localiser["label.owner"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control row">
<div class="col">
@Html.HiddenFor(model => model.Repository.OwnerId, new { @id = "", @class = "RepositoryOwnerId" })
<input type="text" class="RepositoryOwner sbc-input" readonly="readonly" />
</div>
<div class="fixed">
<div class="sbc-action RepositoryOwnerSearch"><img src="~/img/action/search24.png" alt="" title="" /></div>
</div>
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository Context *@
<div class="sbc-form-control RepositoryContext">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifRepositoryContext"><span>@Localiser["label.context"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Repository.Context, new { @id = "ifRepositoryContext", @class = "RepositoryContext sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Repository_Context) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository Server Name *@
<div class="sbc-form-control RepositoryServerName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifRepositoryServerName"><span>@Localiser["label.server"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Repository.ServerName, new { @id = "ifRepositoryServerName", @class = "RepositoryServerName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Repository_ServerName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository Instance Name *@
<div class="sbc-form-control RepositoryInstanceName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifRepositoryInstanceName"><span>@Localiser["label.instance"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Repository.InstanceName, new { @id = "ifRepositoryInstanceName", @class = "RepositoryInstanceName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Repository_InstanceName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository Database Name *@
<div class="sbc-form-control RepositoryDatabaseName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifRepositoryDatabaseName"><span>@Localiser["label.database"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Repository.DatabaseName, new { @id = "ifRepositoryDatabaseName", @class = "RepositoryDatabaseName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Repository_DatabaseName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository User Name *@
<div class="sbc-form-control RepositoryUserName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifRepositoryUserName"><span>@Localiser["label.user"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Repository.UserName, new { @id = "ifRepositoryUserName", @class = "RepositoryUserName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Repository_UserName) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository Password *@
<div class="sbc-form-control RepositoryPassword">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifRepositoryPassword"><span>@Localiser["label.password"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.PasswordFor(model => model.Repository.Password, new { @id = "ifRepositoryPassword", @class = "RepositoryPassword sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.Repository_Password) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Repository Status *@
<div class="sbc-form-control RepositoryStatus">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="cbRepositoryStatus"><span>@Localiser["label.status"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
<select id="cbRepositoryStatus" class="sbc-select RepositoryStatus" name="Repository.StatusCode"></select>
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
}
<div class="spacer2"></div>
</div>
</div>
@* Select Item dialog and script *@
<partial name="~/Views/Common/SelectItem.cshtml" />
</div>
@@ -0,0 +1,249 @@
@* Instance - Param *@
@model Model_Param
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Param Accounts";
Model.AdditionalFiles_JS.Add("js/sbc-res-pag.js");
Model.AdditionalFiles_JS.Add("js/sbc-prm.js");
}
<div class="sbc-panel Params fullheight">
<script type="text/javascript">
sbc.dlg.title.createItem = '@(Localiser.GetJavascriptText("caption.param.create"))';
sbc.dlg.title.updateItem = '@(Localiser.GetJavascriptText("caption.param.update"))';
sbc.lbl.selectItem = '@(Localiser.GetJavascriptText("caption.select.item"))';
sbc.msg.itemNotSelected = '@(Localiser.GetJavascriptText("msg.warn.item.not.selected"))';
</script>
<div class="sbc-panel-data sbc-flex">
@* Filter form - wrap header to include paging controls. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmParamFilter", @class = "sbc-form", @onSubmit = "return false;" }))
{
<div class="sbc-panel-header">
<div class="row">
<div class="fixed">
<partial name="~/Views/Common/ResultsPaging.cshtml" />
</div>
<div class="col center"><div class="sbc-panel-caption">@Localiser["label.params"]</div></div>
<div class="fixed">
@* Burger menu *@
<ul class="nav navbar-nav navbar-dark navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
</div>
@* Filter Panel *@
<div class="sbc-panel-filter">
<div class="row">
<div class="col-sm-8 row pb4">
<div class="col-sm-3 sbc-label text-left text-sm-right">@Localiser["label.item"]</div>
<div class="col row">
<div class="fixed">
@Html.DropDownListFor(model => model.Filter.ItemType, Model.GetParamItemTypesForSelect(), new { @id = "", @class = "FilterItemType mr-1" })
</div>
<div class="col-sm row">
<input type="hidden" id="" name="Filter.ItemId" class="FilterItemId" />
<div class="col">
<input type="text" id="" class="FilterItem fullwidth" readonly="readonly" style="" />
</div>
<div class="fixed">
<div class="sbc-action FilterItemSearch"><img src="/img/action/search24.png" alt="" title=""></div>
</div>
</div>
</div>
</div>
<div class="col-sm-4 row pb4">
<div class="col-sm-4 sbc-label text-left text-sm-right">@Localiser["label.search"]</div>
<div class="col-sm-8">
@Html.TextBoxFor(model => model.Filter.Search, new { @id = "", @class = "FilterSearch fullwidth", @maxlength = "32" })
</div>
</div>
</div>
</div>
}
<div class="sbc-panel-item-table sbc-flex">
<table class="sbc-item-list">
<thead>
<tr>
<th class="pl-2">@Localiser["label.item"]</th>
<th class="">@Localiser["label.context"]</th>
<th class="">@Localiser["label.name"]</th>
<th class="">@Localiser["label.value"]</th>
<th class="center">@Localiser["label.status"]</th>
<th class="right" style="width:2%;"></th>
</tr>
<tr><td colspan="6"><div class="sbc-panel-messages"></div></td></tr>
</thead>
<tbody></tbody>
</table>
</div>
@* Element templates *@
<div class="sbc-panel-item-template">
@* Filter Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu ParamFilter">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
@* Param row template - table is ignored. *@
<table class="">
<tr class="sbc-row-item Param">
<td><div class="ParamItem pl-1"></div></td>
<td><div class="ParamContext"></div></td>
<td><div class="ParamName"></div></td>
<td><div class="ParamValue"></div></td>
<td><div class="ParamStatusDesc center"></div></td>
<td>
<div class="right">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sbc-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span><span class="sbc-ellipsis-dot"></span></a>
<ul class="dropdown-menu dropdown-menu-right sbc-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</td>
</tr>
</table>
@* Item Burger option template - ul is ignored *@
<ul class="sbc-dropdown-menu Param">
<li class="sbc-dropdown-item sbc-action"><div class="sbc-label">XXX</div></li>
</ul>
</div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmParamId", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.Param.Id, new { @id = "", @class = "ParamId" })
}
<div id="dlgParam" class="sbc-dialog">
<div class="spacer2"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmParam", @class = "sbc-form", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.Param.Exists, new { @id = "", @class = "ParamExists sbc-input" })
@Html.HiddenFor(model => model.Param.Id, new { @id = "", @class = "ParamId sbc-input" })
@* Item *@
<div class="sbc-form-control ParamItem">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifParamName"><span>@Localiser["label.item"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.HiddenFor(model => model.Param.ItemType, new { @class = "ParamItemType sbc-input" })
@Html.HiddenFor(model => model.Param.ItemId, new { @class = "ParamItemId sbc-input" })
<input type="text" id="ifParamItem" class="ParamItem sbc-input" readonly="readonly" />
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Context *@
<div class="sbc-form-control ParamContext">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifParamContext"><span>@Localiser["label.context"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Param.Context, new { @id = "ifParamContext", @class = "ParamContext sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.ItemParam_Context) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Name *@
<div class="sbc-form-control ParamName">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifParamName"><span>@Localiser["label.name"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextBoxFor(model => model.Param.Name, new { @id = "ifParamName", @class = "ParamName sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.ItemParam_Name) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Value *@
<div class="sbc-form-control ParamValue">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifParamValue"><span>@Localiser["label.value"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.HiddenFor(model => model.Param.ValueChanged, new { @id = "", @class = "ParamValueChanged sbc-input" })
@Html.TextBoxFor(model => model.Param.Value, new { @id = "ifParamValue", @class = "ParamValue sbc-input", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.ItemParam_Value) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Notes *@
<div class="sbc-form-control ParamNotes">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="ifParamNotes"><span>@Localiser["label.notes"]</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
@Html.TextAreaFor(model => model.Param.Notes, new { @id = "ifParamNotes", @class = "ParamNotes sbc-textarea", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.ItemParam_Notes) })
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
@* Status *@
<div class="sbc-form-control ParamStatus">
<div class="row">
<div class="col-sm-3">
<div class="sbc-label">
<label for="cbParamStatus"><span>@Localiser["label.status"]</span><span class="required">&nbsp;*</span></label>
</div>
</div>
<div class="col-sm-9">
<div class="sbc-control">
<select id="cbParamStatus" class="sbc-select ParamStatus" name="Param.StatusCode"></select>
</div>
<div class="sbc-message"></div>
</div>
</div>
</div>
}
<div class="spacer2"></div>
</div>
</div>
@* Select Item dialog and script *@
<partial name="~/Views/Common/SelectItem.cshtml" />
</div>
@@ -0,0 +1,66 @@
@model Model_Security
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Change Password";
}
<div class="">
<div class="sbc-panel-form security">
<div class="sbc-header"><div class="sbc-caption">@Localiser["security.caption.change.password"]</div></div>
<div class="sbc-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmChangePassword", @class = "sbc-form", @onsubmit = "return false;" }))
{
@if (!Model.RequestPasswordMode)
{
/* Current password - required when setting password within user session. */
<div class="sbc-form-control PasswordCurrent">
<div class="sbc-label"><label for="ifPasswordCurrent"><span><span class="required">*</span> @Localiser["label.password.current"]</span></label></div>
<div class="sbc-control">
@Html.PasswordFor(model => model.PasswordCurrent, new { @id = "ifPasswordCurrent", @class = "sbc-input", @maxlength = Model.PasswordMaxLength })
</div>
<div class="sbc-message"></div>
</div>
}
else
{
/* 'Request Password' encrypted parameters from email link. */
@Html.HiddenFor(model => model.rpe, new { @id = "ifRpe" });
}
<div class="spacer4"></div>
<div class="sbc-form-control Password">
<div class="sbc-label"><label for="ifPassword"><span><span class="required">*</span> @Localiser["label.password"]</span></label></div>
<div class="sbc-control">
@Html.PasswordFor(model => model.Password, new { @id = "ifPassword", @class = "sbc-input", @maxlength = Model.PasswordMaxLength })
</div>
<div class="row">
<div class="col-auto sbc-label-text pt4">@Localiser["label.strength"]&nbsp;</div>
<div id="" class="col-auto"><div id="prgPasswordStrength" class="col-auto"></div></div>
</div>
<div class="sbc-message"></div>
</div>
<div class="sbc-form-control PasswordConfirm">
<div class="sbc-label"><label for="ifPasswordConfirm"><span><span class="required">*</span> @Localiser["label.password.confirm"]</span></label></div>
<div class="sbc-control">
@Html.PasswordFor(model => model.PasswordConfirm, new { @id = "ifPasswordConfirm", @class = "sbc-input", @maxlength = Model.PasswordMaxLength })
</div>
<div class="sbc-message"></div>
</div>
<div class="spacer4"></div>
<div class="">
<div id="pbChangePassword" class="sbc-button-action fullwidth pointer" style="margin:16px 0;">@Localiser["security.caption.change.password"]</div>
</div>
}
</div>
</div>
</div>
@@ -0,0 +1,37 @@
@model Model_Security
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Request Password";
}
<div class="">
<div class="sbc-panel-form security">
<div class="sbc-header"><div class="sbc-caption">@Localiser["caption.request.password"]</div></div>
<div class="sbc-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRequestPassword", @class = "sbc-form", @onsubmit = "return false;" }))
{
<div class="sbc-form-control EmailAddress">
<div class="sbc-label">
<label for="ifEmailAddress"><span><span class="required">*</span> @Localiser["label.email.address"]</span></label>
</div>
<div class="sbc-control">
@Html.TextBoxFor(model => model.EmailAddress, new { @id = "ifEmailAddress", @class = "sbc-input lower", @maxlength = "128" })
</div>
<div class="sbc-message"></div>
</div>
<div class="spacer4"></div>
<div class="">
<div id="pbRequestPassword" class="sbc-button-action fullwidth pointer" style="margin:16px 0;">@Localiser["caption.request.password"]</div>
</div>
}
</div>
</div>
</div>
@@ -0,0 +1,62 @@
@model Model_Security
@inject SbmLocaliser Localiser
@{
ViewData["Title"] = "Signin";
}
<div class="">
<div class="sbc-panel-form security">
<div class="sbc-header"><div class="sbc-caption">@Localiser["label.signin"]</div></div>
<div class="sbc-content">
<div class="spacer4"></div>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmSignIn", @class = "sbc-form", @onsubmit = "return false;" }))
{
<div class="sbc-form-control EmailAddress">
<div class="sbc-label">
<label for="ifEmailAddress"><span><span class="required">*</span> @Localiser["label.email.address"]</span></label>
</div>
<div class="sbc-control">
@Html.TextBoxFor(model => model.EmailAddress, new { @id = "ifEmailAddress", @class = "sbc-input lower", @maxlength = @Model.GetControlMaxLength(SbmDbDfn_Control.ColumnIdx.UserAccount_EmailAddress) })
</div>
<div class="sbc-message"></div>
</div>
<div class="spacer2"></div>
<div class="sbc-form-control Password">
<div class="sbc-label">
<label for="ifPassword"><span><span class="required">*</span> @Localiser["label.password"]</span></label>
</div>
<div class="sbc-control">
@Html.PasswordFor(model => model.Password, new { @id = "ifPassword", @class = "sbc-input", @maxlength = @Model.PasswordMaxLength })
</div>
<div class="sbc-message"></div>
</div>
<div class="spacer2"></div>
<div class="sbc-form-control">
<div class="row">
<div class="col-6">
@Html.CheckBoxFor(model => model.KeepMeSignedIn, new { @id = "chkKeepMeSignedIn" })
&nbsp;
<span class="sbc-label pointer" onclick="$('#chkKeepMeSignedIn').click()">@Localiser["label.keep.signed.in"]</span>
</div>
<div class="col-6 right">
<div class="sbc-action-link" style="font-size:12px;" onclick="sbc.goToPage('Security/RequestPassword');">@Localiser["label.forgotten.password"]</div>
</div>
</div>
</div>
<div class="spacer2"></div>
<div class="">
<div id="pbSignIn" class="sbc-button-action fullwidth pointer" style="margin:16px 0;">@Localiser["label.signin"]</div>
</div>
}
</div>
</div>
</div>
@@ -5,49 +5,213 @@
Application: BusinessMgr Web Control
Purpose: Page template.
*@
@{
// Model properties to become javascript values.
var awaitingLogin = Model.AwaitingLogin ? "1" : "0";
var keepLoggedIn = Model.KeepLoggedIn ? "1" : "0";
var debug = Model.DebugMode ? "1" : "0";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - SaBusinessMgrCoreWebAdmin</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
@* IE11 incompatibility eg. 'border-radius' not recognised. Must be at top of head *@
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
@if (Model.ProhibitCache)
{
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
}
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="application/javascript" />
<title>@ViewData["Title"] - BusMgr Control</title>
@* Stylesheets *@
<link rel="stylesheet" href="~/lib/jqueryui/jquery-ui.css" />
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute"
crossorigin="anonymous"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" />
</environment>
<link rel="stylesheet" href="~/css/sbc-base.css?@Model.HrefVersion" />
<link rel="stylesheet" href="~/css/sbc-main.css?@Model.HrefVersion" />
<link rel="stylesheet" href="~/css/sbc-data.css?@Model.HrefVersion" />
<link rel="stylesheet" href="~/css/sbc-form.css?@Model.HrefVersion" />
@foreach (var cssFile in Model.AdditionalFiles_CSS)
{
<link rel="stylesheet" href="~/@cssFile?@Model.HrefVersion" />
}
@* Scripts *@
<script>
var sbc = sbc || { page: {}, mdl: {}, fn: {}, url: {}, links: {}, form: {}, data: {}, ajax: {}, msg: {}, lbl: {}, dlg: { title: {}, btn: {} }, $frm: {}, $dlg: {}, $pnl: {}, session: {}, kli: {} };
sbc.url.base = '@Model.RedirectLocation.Base';
sbc.url.home = '@Model.RedirectLocation.Home';
sbc.url.sessionExpired = '@Model.RedirectLocation.Home_SessionExpired';
sbc.links.facebook = '@Model.Links.Facebook';
sbc.links.linkedin = '@Model.Links.LinkedIn';
sbc.dlg.title.alert = '@Localiser.GetJavascriptText("dialog.title.alert")';
sbc.dlg.title.confirm = '@Localiser.GetJavascriptText("dialog.title.confirm")';
sbc.dlg.title.progress = '@Localiser.GetJavascriptText("dialog.title.progress")';
sbc.dlg.title.signOut = '@Localiser.GetJavascriptText("dialog.title.signout")';
sbc.lbl.yes = '@Localiser["label.yes"]';
sbc.lbl.no = '@Localiser["label.no"]';
sbc.lbl.ok = '@Localiser["label.ok"]';
sbc.lbl.save = '@Localiser["label.save"]';
sbc.lbl.close = '@Localiser["label.close"]';
sbc.lbl.cancel = '@Localiser["label.cancel"]';
sbc.lbl.refresh = '@(Localiser.GetJavascriptText("label.refresh"))';
sbc.lbl.create = '@(Localiser.GetJavascriptText("label.create"))';
sbc.lbl.edit = '@(Localiser.GetJavascriptText("label.edit"))';
sbc.lbl.emails = '@(Localiser.GetJavascriptText("label.emails"))';
sbc.lbl.charAvailable = '@Localiser.GetJavascriptText("info.char.available")';
sbc.lbl.charsAvailable = '@Localiser.GetJavascriptText("info.chars.available", "{0}")';
sbc.lbl.noneSelected = '@Localiser.GetJavascriptText("label.selected.none")';
sbc.lbl.numberSelected = '@Localiser.GetJavascriptText("label.selected.count", "{0}")';
sbc.msg.signOutConfirm = '@Localiser.GetJavascriptText("security.msg.signout.confirm")';
sbc.msg.somethingGoneWrong = '@Localiser.GetJavascriptText("msg.something.gone.wrong")';
sbc.msg.dataRefreshing = '@Localiser.GetJavascriptText("msg.data.refreshing")';
sbc.msg.dataQuerying = '@Localiser.GetJavascriptText("msg.data.querying")';
sbc.msg.dataNoneFound = '@Localiser.GetJavascriptText("msg.data.noneFound")';
sbc.session.cookieName = '@Model.SessionCookieName';
sbc.awaitingLogin = @awaitingLogin;
sbc.kli.active = @keepLoggedIn;
sbc.kli.interval = @(Sbm.Config.Control.Session.Cookie.KeepLoggedInTimeoutMillis);
sbc.debugMode = @debug;
</script>
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">SaBusinessMgr-Control</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
@(Model.CopyrightNotice) - Sarand BusinessMgr
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
@* Header *@
<header id="sbc-page-header">
@* Navigation bar *@
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">SBM Control</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
@if (Model.AwaitingLogin)
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Policies" asp-action="Privacy">@Localiser["label.privacy"]</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Security" asp-action="">@Localiser["label.signin"]</a>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">@Localiser["label.home"]</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link text-dark dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@Localiser["label.accounts"]
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<div class="dropdown-item text-dark sbc-action" onclick="sbc.goToPage('Account/UserAccount');">@Localiser["label.users"]</div>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link text-dark dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@Localiser["label.instances"]
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<div class="dropdown-item text-dark sbc-action" onclick="sbc.goToPage('Instance/Owner');">@Localiser["label.owners"]</div>
<div class="dropdown-item text-dark sbc-action" onclick="sbc.goToPage('Instance/Repository');">@Localiser["label.repositories"]</div>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link text-dark dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@Localiser["label.configuration"]
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<div class="dropdown-item text-dark sbc-action" onclick="sbc.goToPage('Param/Param');">@Localiser["label.params"]</div>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link text-dark dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@Localiser["label.system"]
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<div class="dropdown-item text-dark sbc-action" onclick="sbc.goToPage('System/Database');">@Localiser["label.database"]</div>
<div class="dropdown-item text-dark sbc-action" onclick="sbc.goToPage('System/Logs');">@Localiser["label.logs"]</div>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link text-dark dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@Localiser["label.security"]
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<div class="dropdown-item text-dark sbc-action" onclick="sbc.navigateTo('Security/ChangePassword');">@Localiser["caption.change.password"]</div>
<div class="dropdown-divider"></div>
<div class="dropdown-item text-dark sbc-action" onclick="sbc.onSignOut();">@Localiser["label.signout"]</div>
</div>
</li>
}
</ul>
</div>
</div>
</nav>
</header>
@* Page body *@
<div id="sbc-page-body" class="container">
<main role="main" class="pb-3 fullheight">
@RenderBody()
</main>
</div>
@* Footer *@
<footer id="sbc-page-footer" class="border-top footer text-muted">
<div class="container">
@(Model.CopyrightNotice) - Sarand BusinessMgr
</div>
</footer>
@* Form to allow page navigation. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmNavigate" })) { }
<div id='sbc-please-wait'></div>
@* Scripts *@
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o">
</script>
</environment>
<script src="~/lib/jqueryui/jquery-ui.js"></script>
<script src="~/js/sbc-main.js?@Model.HrefVersion"></script>
@foreach (var jsFile in Model.AdditionalFiles_JS)
{
<script src="~/@jsFile?@Model.HrefVersion"></script>
}
@RenderSection("Scripts", required: false)
</body>
</html>
@@ -1,4 +1,8 @@
@using Sarand.BusinessMgr.Net.Core.Web.App
@using Sarand.BusinessMgr.Net.Core.Web.Control
@using Sarand.BusinessMgr.Net.Core.Web.Control.Models
@using Sarand.BusinessMgr.Net.Standard.Base.App
@using Sarand.BusinessMgr.Net.Core.Web.App
@using Sarand.BusinessMgr.Web.Control
@using Sarand.BusinessMgr.Web.Control.Models
@using Sarand.BusinessMgr.Web.Control.Models.Account
@using Sarand.BusinessMgr.Web.Control.Models.Instance
@using Sarand.BusinessMgr.Web.Control.Models.Param
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers