v1.2.10.1
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user