This commit is contained in:
9
devdocs/specs/core-internationalization.txt
Normal file
9
devdocs/specs/core-internationalization.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
# Internationalization specifications
|
||||
|
||||
DATES, TIMES, CURRENCY, (RTL?)
|
||||
|
||||
REQUIREMENTS
|
||||
- Client does *ALL* internationalization display locally, only exception is the server ops logs
|
||||
- This saves bandwidth and hassle and leaves presentation to the client where it belongs (was a source of trouble in v7)
|
||||
- User options contain the date, timezone and currency format for presentation purposes
|
||||
- API data is in as neutral a format as possible, i.e. ISO whatever it is for dates and times, currency is just a number? (not going multicurrency?)
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
- Client does *ALL* localization locally, only exception is the server ops logs
|
||||
- This saves bandwidth and hassle and leaves presentation to the client where it belongs (was a source of trouble in v7)
|
||||
- Keys are text, human readable and as short as possible
|
||||
- Not numeric ID's for these, strictly textual
|
||||
- values may have substitution tokens in them for certain things
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
using EnumsNET;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AyaNova.Api.ControllerHelpers
|
||||
{
|
||||
|
||||
internal static class UserLocaleIdFromContext
|
||||
{
|
||||
internal static long LocaleId(IDictionary<object, object> HttpContextItems)
|
||||
{
|
||||
|
||||
long? l = (long?)HttpContextItems["AY_LOCALE_ID"];
|
||||
if (l==null)
|
||||
return 0L;
|
||||
return (long)l;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}//eons
|
||||
@@ -43,17 +43,16 @@ namespace AyaNova.Api.Controllers
|
||||
}
|
||||
|
||||
|
||||
//TODO: code the log makers in EventLogProcessor
|
||||
//
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get events as text document for object specified
|
||||
/// Get event log for object and date range specified
|
||||
///
|
||||
/// Required roles:
|
||||
/// Read rights to object type specified
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns>Event log for object</returns>
|
||||
/// <returns>Event log entry list for object</returns>
|
||||
[HttpGet("ObjectLog")]
|
||||
public async Task<IActionResult> GetObjectLog([FromQuery] EventLogOptions opt)
|
||||
{
|
||||
@@ -78,7 +77,7 @@ namespace AyaNova.Api.Controllers
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get events for a user as text document for object specified
|
||||
/// Get event log entries for a specified user and date range
|
||||
///
|
||||
/// Required roles:
|
||||
/// Read rights to User object or UserId specified must be requestor Id
|
||||
|
||||
@@ -337,11 +337,10 @@ namespace AyaNova
|
||||
var ct = context.RequestServices.GetService<AyContext>();
|
||||
|
||||
//get the user record
|
||||
var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, Id = m.Id, LocaleId = m.LocaleId }).First();
|
||||
var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, Id = m.Id }).First();
|
||||
context.Request.HttpContext.Items["AY_ROLES"] = u.roles;
|
||||
context.Request.HttpContext.Items["AY_USERNAME"] = u.name;
|
||||
context.Request.HttpContext.Items["AY_USER_ID"] = u.Id;
|
||||
context.Request.HttpContext.Items["AY_LOCALE_ID"] = u.LocaleId;
|
||||
}
|
||||
await next.Invoke();
|
||||
});
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
@@ -46,11 +47,7 @@ namespace AyaNova.Biz
|
||||
/// <summary>
|
||||
/// Get the event log for a specified object
|
||||
/// </summary>
|
||||
/// <param name="ayId"></param>
|
||||
/// <param name="userLocaleId"></param>
|
||||
/// <param name="ct"></param>
|
||||
/// <returns></returns>
|
||||
internal static async Task<string> GetLogForObject(long ayId, long userLocaleId, AyContext ct)
|
||||
internal static async Task<string> GetLogForObject(long ayId, DateTime StartDate, DateTime EndDate, AyContext ct)
|
||||
{
|
||||
var items = await ct.Event
|
||||
.Where(m => m.AyId == ayId)
|
||||
@@ -62,23 +59,10 @@ namespace AyaNova.Biz
|
||||
return "";
|
||||
}
|
||||
|
||||
AyaNova.Api.Controllers.LocaleController.LocaleSubsetParam param = new Api.Controllers.LocaleController.LocaleSubsetParam();
|
||||
param.LocaleId = userLocaleId;
|
||||
param.Keys.AddRange(new string[] { "CommonCreated", "Delete", "Modified", "Retrieved" });
|
||||
|
||||
//TODO: add all the keys from all the events in AyaEvent
|
||||
//Attachment, Created instead of AttachmentCreate, or is it attached?
|
||||
|
||||
var LT = await LocaleBiz.GetSubsetStatic(param);
|
||||
|
||||
//Have list of locales and list of ops, now make it into a readable text display and return it
|
||||
System.Text.StringBuilder SbReturn = new System.Text.StringBuilder();
|
||||
foreach (Event ev in items)
|
||||
{
|
||||
SbReturn.AppendLine(BuildLogEntry(ev, LT));
|
||||
}
|
||||
|
||||
return SbReturn.ToString();
|
||||
|
||||
}
|
||||
|
||||
@@ -88,8 +72,24 @@ namespace AyaNova.Biz
|
||||
}
|
||||
|
||||
|
||||
internal static string BuildLogEntry(Event ev, List<KeyValuePair<string, string>> lt)
|
||||
|
||||
internal static string BuildLogEntry(bool userFormat, Event ev, List<KeyValuePair<string, string>> lt)
|
||||
{
|
||||
StringBuilder S=new StringBuilder();
|
||||
|
||||
//Object format:
|
||||
//DateTime, UserId, ActionNumber, Textra
|
||||
|
||||
//User format:
|
||||
//DateTime, ObjectType, ObjectId, ActionNumber, Textra
|
||||
|
||||
ev
|
||||
|
||||
switch(ev.AyEvent){
|
||||
case AyaEvent.Created:
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return ":";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user