v1.2.10.1

This commit is contained in:
2022-12-12 14:20:49 +00:00
parent ea5e27a5b3
commit 61af3ef40b
72 changed files with 2002 additions and 221 deletions
@@ -75,7 +75,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Construct response.
PopulateOrganisationResponseItemData(organisation, address, responseData.organisation);
GetOrganisationMembers(model, organisationId, responseData.Members);
GetOrganisationMembers(model, organisationId, responseData.Members, true);
}
// Complete response.
@@ -118,7 +118,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
responseData.DefaultStatusCode = SacsSystem.GetStatusCode(SaxUserOrganisation.DefaultStatus);
// Get organisation members.
GetOrganisationMembers(model, organisationId, responseData.Members);
GetOrganisationMembers(model, organisationId, responseData.Members, false);
if (model.Paging.IsPaged)
model.Paging.ItemCount = (ushort)responseData.Members.Count;
@@ -128,13 +128,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
responseData.Success = true;
return Json(responseData);
}
private void GetOrganisationMembers(SaxModel_Admin model, SysId organisationId, List<MemberListData> members)
private void GetOrganisationMembers(SaxModel_Admin model, SysId organisationId, List<MemberListData> members, bool inactiveOnly)
{
// Item filter.
SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params();
prmUserOrganisation.OrganisationIdsIncluded.Add(organisationId);
prmUserOrganisation.OrganisationMembersOnly = true;
prmUserOrganisation.UserAccountStatusCat = SaxUserAccount.StatusCat.NotDeleted;
prmUserOrganisation.UserAccountStatusCat = inactiveOnly ? SaxUserAccount.StatusCat.InactiveOnly : SaxUserAccount.StatusCat.NotDeleted;
prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.NotDeleted;
model.Paging.ItemTotal = (ulong)AccountMgr.GetUserOrganisationCount(prmUserOrganisation);
model.PopulatePagingTo(prmUserOrganisation.ResultsPaging);
@@ -126,6 +126,8 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{
// Construction.
public AjaxResponse_ValidateDatabaseSchema(SaxModel_Admin model) : base(model) { }
// Database instance.
public String Instance { get; set; }
// Schema validation list.
public List<DbSchemaItemResponseData> Items { get; } = new List<DbSchemaItemResponseData>();
}
@@ -146,12 +148,20 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
{
// Database instance.
Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseInstance), Sax.Database.Unknown);
if (databaseInstance <= 0)
return Json(responseData.SetMessage(messageTitle, "Database instance must be specified"));
responseData.Instance = databaseInstance.ToString();
// Core Database connection.
ISacsDatabase db = Internals.CoreDatabase;
ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance);
if (db == null)
return Json(responseData.SetMessage(messageTitle, "Unrecognised database instance specified: " + model.DatabaseInstance));
// Retrieve XML database schema definition.
var assembly = typeof(SaxSystem_Dbas).GetTypeInfo().Assembly;
String xmlSchema = SacsResourceHelper.GetManifestResourceAsText(assembly, "", "SaxDbDfn_Core.xml");
String xmlSchema = SacsResourceHelper.GetManifestResourceAsText(assembly, "", "SaxDbDfn_" + databaseInstance.ToString() + ".xml");
if (StringUtil.IsEmpty(xmlSchema))
return Json(responseData.SetMessage(messageTitle, "Failed to extract XML schema definition."));
@@ -19,6 +19,7 @@ namespace Saxonite.Net.Core.Web.Admin.Models
//-------------------------------------------------------------------
// Properties.
public String DatabaseInstance { get; set; }
//-------------------------------------------------------------------
// Database page properties.
@@ -699,6 +699,9 @@
<data name="system.caption.logs" xml:space="preserve">
<value>System - Logs</value>
</data>
<data name="system.caption.support.database.schema" xml:space="preserve">
<value>Support Database Schema</value>
</data>
<data name="system.msg.database.schema.valid" xml:space="preserve">
<value>Database schema is valid.</value>
</data>
+35 -2
View File
@@ -51,8 +51,15 @@
</div>
@* Database Schema *@
<div class="sax-panel-info sax-panel-results DbSchema">
@* Database Schema form. *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDatabaseSchema" }))
{
<input type="hidden" name="DatabaseInstance" class="DatabaseInstance" />
}
@* Database Schema - Core *@
<div class="sax-panel-info sax-panel-results DbSchema Core">
<div class="sax-header">
<div class="sax-caption">@Localiser["system.caption.core.database.schema"]</div>
@@ -77,3 +84,29 @@
</div>
@* Database Schema - Support *@
<div class="sax-panel-info sax-panel-results DbSchema Support">
<div class="sax-header">
<div class="sax-caption">@Localiser["system.caption.support.database.schema"]</div>
</div>
<div class="sax-content">
<div class="sax-panel-messages"></div>
<div class="sax-panel-item-list"></div>
<div class="sax-panel-item-template">
@* Db Schema templates *@
<div class="sax-panel-item DbSchemaItem">
<div class="sax-header">
<div class="sax-caption SchemaTable">@(Localiser["label.table"]): <span class="TableName"></span></div>
</div>
<div class="sax-content">
<div class="SchemaIndex">@(Localiser["label.index"]): <span class="IndexName"></span></div>
<div class="SchemaColumn">@(Localiser["label.column"]): <span class="ColumnName"></span></div>
<div class=""><span class="Comment"></span></div>
</div>
</div>
</div>
</div>
</div>
+21 -14
View File
@@ -35,7 +35,7 @@
// Users.
let user = response.stats.user;
let $user = sax.getAppStatItemTemplate();
$('.sax-header .sax-caption', $user).text(user.caption||'Users');
$('.sax-header .sax-caption', $user).text(user.caption || 'Users');
ah.populateAppStat($user, user.awaiting.label, user.awaiting.value, user.awaitingLink)
for (let item of user.onlineStats)
ah.populateAppStat($user, item.label, item.value, user.onlineLink)
@@ -43,7 +43,7 @@
// Organisations.
let org = response.stats.organisation;
let $org = sax.getAppStatItemTemplate();
$('.sax-header .sax-caption', $org).text(org.caption||'Organisations');
$('.sax-header .sax-caption', $org).text(org.caption || 'Organisations');
ah.populateAppStat($org, org.awaiting.label, org.awaiting.value, org.awaitingLink)
$items.append($org);
$items.slideDown(750);
@@ -67,35 +67,39 @@
}
//--------------------------------------------------------------
sax.refreshDbSchema = function (delay)
ah.refreshDbSchema = function (instance, delay)
{
if (sax.awaitingLogin) return;
if (!ah.awaitingSchemaResponse)
{
var $items = $('.sax-panel-item-list', $pnl.dbSchema).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $pnl.dbSchema).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
let $pnlSchema = $('.sax-panel-results.DbSchema.' + instance);
var $items = $('.sax-panel-item-list', $pnlSchema).fadeOut(200).empty();
var $msgs = $('.sax-panel-messages', $pnlSchema).hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajax.dbSchema = sax.ajax.dbSchema || { url: sax.url.base + 'System/Ajax/ValidateDatabaseSchema', formId: 'frmNavigate', callbackFn: sax.handleDbSchemaResponse, noWaitIcon: true };
$('.DatabaseInstance', $frm.dbSchema).val(instance);
sax.ajax.dbSchema = sax.ajax.dbSchema || { url: sax.url.base + 'System/Ajax/ValidateDatabaseSchema', formId: $frm.dbSchema.prop('id'), callbackFn: ah.handleDbSchemaResponse, noWaitIcon: true };
sax.doAjaxRequest(sax.ajax.dbSchema, delay || 50);
ah.awaitingSchemaResponse = true;
}
sax.handleDbSchemaResponse = function (response)
ah.handleDbSchemaResponse = function (response)
{
//sax.debug('handleDbSchemaResponse', response);
delete ah.awaitingSchemaResponse;
var $msgs = $('.sax-panel-messages', $pnl.dbSchema).hide().empty();
var $items = $('.sax-panel-item-list', $pnl.dbSchema).hide().empty();
var $tmpl = $('.sax-panel-item-template .sax-panel-item.DbSchemaItem', $pnl.dbSchema);
let $pnlSchema = $('.sax-panel-results.DbSchema.' + response.instance) ;
var $msgs = $('.sax-panel-messages', $pnlSchema).hide().empty();
var $items = $('.sax-panel-item-list', $pnlSchema).hide().empty();
var $tmpl = $('.sax-panel-item-template .sax-panel-item.DbSchemaItem', $pnlSchema);
if (!response.success) return;
if (response.instance == 'Core') ah.toSchema = setTimeout(function () { ah.refreshDbSchema('Support'); }, 250);
// Items.
var items = response.items;
if (!items.length)
return $msgs.append($('<div class="sax-message">' + sax.msg.dbSchemaValid + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$items.append(sax.populateDbSchemaItem($tmpl.clone(), items[itemIdx]));
$items.append(ah.populateDbSchemaItem($tmpl.clone(), items[itemIdx]));
$items.slideDown(750);
}
sax.populateDbSchemaItem = function ($item, item)
ah.populateDbSchemaItem = function ($item, item)
{
if (!item) return;
$item.prop('id', sax.itemIdPrefix + item.id);
@@ -112,10 +116,13 @@
$(function ()
{
$pnl.appStats = $('.sax-panel-results.ApplicationStats');
$pnl.dbSchema = $('.sax-panel-results.DbSchema');
$frm.dbSchema = $('#frmDatabaseSchema');
$pnl.dbSchemaCore = $('.sax-panel-results.DbSchema.Core');
$pnl.dbSchemaSupport = $('.sax-panel-results.DbSchema.Support');
ah.toStats = setTimeout(ah.refreshApplicationStats, 400);
ah.toSchema = setTimeout(sax.refreshDbSchema, 600);
ah.toSchema = setTimeout(function () { ah.refreshDbSchema('Core'); }, 600);
// NB Can only request one of the database schemas at a time as they share the same ajax config.
});
//--------------------------------------------------------------
@@ -411,6 +411,10 @@
//--------------------------------------------------------------
// Data entry.
sax.hasControlErrors = function (context)
{
return $('.sax-form-control', $(context || doc.body)).hasClass('sax-error');
}
sax.clearControlErrors = function (context)
{
var $ctrls = $('.sax-form-control', $(context || doc.body)).removeClass('sax-error');
@@ -23,7 +23,7 @@
}
oa.doRefreshResults = function (response)
{
sax.debug('doRefreshResults', response);
//sax.debug('doRefreshResults', response);
delete oa.awaitingRefreshResponse;
sax.refreshControlValues(response.controlValues);
var $msgs = $('.sax-panel-messages', $pnl.results).hide().empty();
@@ -156,7 +156,7 @@
}
oa.onUpdateItem = function (response)
{
sax.debug('onUpdateItemAssociation', response);
//sax.debug('onUpdateItemAssociation', response);
if (!response.success) return;
oa.clearItem();
// Association.