v1.0.9.0
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user