This commit is contained in:
2021-06-22 10:05:59 +01:00
parent 558be9063f
commit e40ff8a7f2
50 changed files with 899 additions and 184 deletions
+3 -1
View File
@@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
public static class Version
{
private static String version { get; } = "1.0.8.1";
private static String version { get; } = "1.0.9.0";
// Retrieve version.
public static String GetFullVersion () { return version; }
public static String GetAppVersion ()
@@ -40,6 +40,8 @@ namespace Saxonite.Net.Standard.Base.App
//-------------------------------------------------------------------
// Version history.
//-------------------------------------------------------------------
// 1.0.9 ?-Jun-2021 Journalist Articles
// - Online Article Images.
// 1.0.8 15-Jun-2021 Online Article Content
// - Journalist Articles styled content.
// - Online home page click through activity for details with reaction.
+5 -1
View File
@@ -227,8 +227,12 @@ namespace Saxonite.Net.Standard.Base.App
Unknown,
/// <summary>User's profile image.</summary>
Avatar = 100,
/// <summary>User's new profile image awaiting confirmation.</summary>
/// <summary>User's profile image, uploaded awaiting confirmation.</summary>
AvatarUpload = 101,
/// <summary>Journalist Article image.</summary>
Article = 200,
/// <summary>Journalist Article image uploaded, awaiting confirmation.</summary>
ArticleUpload = 201,
}
//-------------------------------------------------------------------
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Fri 18-Jun-2021 11:08:40
// Code generated by Sarand Database Utilities Tue 22-Jun-2021 08:56:11
//---------------------------------------------------------------------------
namespace Saxonite.Base.App
{
@@ -57,6 +57,8 @@ namespace Saxonite.Base.App
ItemImage_ItemId,
ItemImage_ImageType,
ItemImage_ImageSeq,
ItemImage_SessionUid,
ItemImage_ImageUid,
ItemImage_Filename,
ItemImage_Mime,
ItemImage_ContentType,
@@ -269,7 +271,7 @@ namespace Saxonite.Base.App
//-------------------------------------------------------------------
// Data members.
private static readonly int tableCount = 14;
private static readonly int columnCount = 226;
private static readonly int columnCount = 228;
private static ulong maxTextLen = 0;
//-------------------------------------------------------------------
@@ -474,6 +476,8 @@ namespace Saxonite.Base.App
new ColumnDfn(2,"ItemId",4,4,false,10),
new ColumnDfn(2,"ImageType",3,5,false,5),
new ColumnDfn(2,"ImageSeq",2,-6,false,3),
new ColumnDfn(2,"SessionUid",5,-5,false,19),
new ColumnDfn(2,"ImageUid",4,4,false,10),
new ColumnDfn(2,"Filename",0,-9,false,1024),
new ColumnDfn(2,"Mime",0,12,false,64),
new ColumnDfn(2,"ContentType",0,12,false,128),
@@ -10,6 +10,7 @@ using System.Text;
using System.Diagnostics;
using Sarand.Net.Standard.Base.Utils;
using Newtonsoft.Json.Converters;
using Sarand.Net.Standard.Base.Helpers;
namespace Saxonite.Net.Standard.Base.App
{
@@ -17,16 +18,15 @@ namespace Saxonite.Net.Standard.Base.App
public abstract class SaxSessionData
{
//-------------------------------------------------------------------
// Protected construction.
protected SaxSessionData()
{
}
private static long sessionIdxRoot = SacsRandomHelper.GetInt32(1000, 1999);
//-------------------------------------------------------------------
// Construction.
/// <summary>Hidden constructor for deserialisation only.</summary>
private SaxSessionData(SaxSessionContext sessionContext)
/// <summary>Protected constructor for deserialisation only.</summary>
protected SaxSessionData(long sessionIdx, int itemIdx, SaxSessionContext sessionContext)
{
SessionIdx = sessionIdx;
ItemIdx = itemIdx;
SessionContext = sessionContext;
userData = CreateUserData(SessionContext, null, null);
}
@@ -37,12 +37,20 @@ namespace Saxonite.Net.Standard.Base.App
/// </summary>
protected SaxSessionData(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles)
{
SessionIdx = ++sessionIdxRoot;
ItemIdx = 1000;
SessionContext = sessionContext;
userData = CreateUserData(SessionContext, userAccount, userRoles);
}
//-------------------------------------------------------------------
// Properties.
// Session and Item indexers.
public long SessionIdx { get; }
public int ItemIdx { get; private set; }
[JsonIgnore]
public int NextItemIdx { get { return ++ItemIdx; } }
// Session context.
public SaxSessionContext SessionContext { get; }
[JsonIgnore]
public bool ValidUserSession { get { return SysId.IsValid(User.UserAccountId) && SysId.IsValid(User.UserAccountId); } }
@@ -98,6 +98,8 @@ namespace Saxonite.Net.Standard.Base.App
// Image types.
imageTypeCodes.Add(Sax.ImageType.Avatar, "Avatar", "Avatar");
imageTypeCodes.Add(Sax.ImageType.AvatarUpload, "AvatarUpload", "Avatar - upload");
imageTypeCodes.Add(Sax.ImageType.Article, "Article", "Article");
imageTypeCodes.Add(Sax.ImageType.ArticleUpload, "ArticleUpload", "Article - upload");
//---------------------------------------------------------------
// Organisation types.
+43 -2
View File
@@ -53,6 +53,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public ItemId ItemId { get; set; }
public Sax.ImageType ImageType { get; set; }
public byte ImageSeq { get; set; }
public long SessionUid { get; set; }
public int ImageUid { get; set; }
public String Filename { get; set; }
public String Mime { get; set; }
public String ContentType { get; set; }
@@ -88,6 +90,16 @@ namespace Saxonite.Net.Standard.Base.Bus
get { return data.ImageSeq; }
set { CheckChanged(data.ImageSeq, value); data.ImageSeq = value; }
}
public long SessionUid
{
get { return data.SessionUid; }
set { CheckChanged(data.SessionUid, value); data.SessionUid = value; }
}
public int ImageUid
{
get { return data.ImageUid; }
set { CheckChanged(data.ImageUid, value); data.ImageUid = value; }
}
public String Filename
{
get { return data.Filename; }
@@ -124,6 +136,8 @@ namespace Saxonite.Net.Standard.Base.Bus
ItemId = data.ItemId;
ImageType = data.ImageType;
ImageSeq = data.ImageSeq;
SessionUid = data.SessionUid;
ImageUid = data.ImageUid;
Filename = data.Filename;
Mime = data.Mime;
ContentType = data.ContentType;
@@ -148,6 +162,8 @@ namespace Saxonite.Net.Standard.Base.Bus
public ValidValue ItemId { get; set; } = ValidValue.Valid;
public ValidValue ImageType { get; set; } = ValidValue.Valid;
public ValidValue ImageSeq { get; set; } = ValidValue.Valid;
public ValidValue SessionUid { get; set; } = ValidValue.Valid;
public ValidValue ImageUid { get; set; } = ValidValue.Valid;
public ValidValue Filename { get; set; } = ValidValue.Valid;
public ValidValue Mime { get; set; } = ValidValue.Valid;
public ValidValue ContentType { get; set; } = ValidValue.Valid;
@@ -213,18 +229,28 @@ namespace Saxonite.Net.Standard.Base.Bus
public ItemId ItemId
{
get { return data.ItemId; }
protected set { data.ItemId = value; }
set { data.ItemId = value; }
}
public Sax.ImageType ImageType
{
get { return data.ImageType; }
protected set { data.ImageType = value; }
set { data.ImageType = value; }
}
public byte ImageSeq
{
get { return data.ImageSeq; }
set { data.ImageSeq = value; }
}
public long SessionUid
{
get { return data.SessionUid; }
set { data.SessionUid = value; }
}
public int ImageUid
{
get { return data.ImageUid; }
set { data.ImageUid = value; }
}
public String Filename
{
get { return data.Filename; }
@@ -273,6 +299,7 @@ namespace Saxonite.Net.Standard.Base.Bus
NotDeleted,
ActiveOnly,
InctiveOnly,
Deleted,
}
/// <summary>
/// Item list parameters.
@@ -294,6 +321,20 @@ namespace Saxonite.Net.Standard.Base.Bus
// Item list extension methods.
public static class SaxItemImageList
{
//-------------------------------------------------------------------
public static SaxItemImage GetItemImageById(this List<SaxItemImage> values, SysId itemImageId)
{
if (!SysId.IsValid(itemImageId)) return null;
return values.Find(item => item.Id.Equals(itemImageId));
}
public static SaxItemImage GetItemImageBySessionImage(this List<SaxItemImage> values, long sessionUid, int imageUid)
{
if (sessionUid < 1 || imageUid < 1) return null;
return values.Find(item => item.SessionUid == sessionUid && item.ImageUid == imageUid);
}
//-------------------------------------------------------------------
}
//=======================================================================
@@ -21,23 +21,46 @@ namespace Saxonite.Net.Standard.Base.Bus
private static readonly String ElementName_Segments = "segments";
private static readonly String ElementName_Segment = "segment";
private static readonly String ElementName_Body = "body";
private static readonly String ElementName_Html= "html";
private static readonly String ElementName_Html = "html";
private static readonly String ElementName_Image = "image";
private static readonly String ElementName_ImageId = "imageId";
//-------------------------------------------------------------------
/// <summary>Article content.</summary>
public class ContentData
{
/// <summary>
/// Article Content Segment - either body content or image.
/// </summary>
public class SegmentData
{
// Segment body.
public class BodyData
{
public bool IsValid()
{
if (!StringUtil.IsEmpty(Html)) return true;
return false;
}
public String Html { get; set; } = String.Empty;
}
public BodyData Body { get; } = new BodyData();
// Segment image.
public class ImageData
{
public bool IsValid()
{
if (SysId.IsValid(ItemImageId)) return true;
return false;
}
public SysId ItemImageId { get; set; }
}
public ImageData Image { get; } = new ImageData();
// Validate.
public bool IsValid()
{
if (!StringUtil.IsEmpty(Body.Html)) return true;
if (Body.IsValid()) return true;
if (Image.IsValid()) return true;
return false;
}
}
@@ -59,6 +82,7 @@ namespace Saxonite.Net.Standard.Base.Bus
{
String fn = typeof(ContentData).FullName + ".ExtractContent";
ContentData content = new ContentData();
if (StringUtil.IsEmpty(contentData)) return content;
try
{
@@ -99,6 +123,22 @@ namespace Saxonite.Net.Standard.Base.Bus
else SaLogger.Warn(fn + " Unexpected 'Segment' child element: " + segmentChildElementName);
}
}
else if (segmentChildElementName.EqualsCI(ElementName_Image))
{
// Content segment image.
XElement imageElement = segmentChildElement;
foreach (XElement imageChildElement in imageElement.GetChildElements())
{
String imageChildElementName = imageChildElement.GetLocalName();
if (imageChildElementName.EqualsCI(ElementName_ImageId))
{
// Content segment image Id.
XElement imageIdElement = imageChildElement;
segment.Image.ItemImageId = imageIdElement.Value.ToSysId();
}
else SaLogger.Warn(fn + " Unexpected 'Segment' child element: " + segmentChildElementName);
}
}
else SaLogger.Warn(fn + " Unexpected 'Segment' child element: " + segmentChildElementName);
}
// Add this segment to the list.
@@ -136,9 +176,20 @@ namespace Saxonite.Net.Standard.Base.Bus
{
if (!segment.IsValid()) continue;
XElement segmentElement = segmentsElement.AppendElement(ElementName_Segment);
XElement bodyElement = segmentElement.AppendElement(ElementName_Body);
if (!StringUtil.IsEmpty(segment.Body.Html))
bodyElement.AppendElement(ElementName_Html, segment.Body.Html);
if (segment.Body.IsValid())
{
// Segment Body.
XElement bodyElement = segmentElement.AppendElement(ElementName_Body);
if (!StringUtil.IsEmpty(segment.Body.Html))
bodyElement.AppendElement(ElementName_Html, segment.Body.Html);
}
else if (segment.Image.IsValid())
{
// Segment Image.
XElement imageElement = segmentElement.AppendElement(ElementName_Image);
if (SysId.IsValid(segment.Image.ItemImageId))
imageElement.AppendElement(ElementName_ImageId, SysId.ToString(segment.Image.ItemImageId));
}
}
return doc.GetXml();
}