توسعه سیستم مدیریت محتوای DNTCms - قسمت ششم
نویسنده: سالار ربال
تاریخ: ۱۳۹۴/۱۱/۰۵ ۱۸:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
/// <summary>
/// Represent The Operation's log
/// </summary>
public class AuditLog
{
#region Ctor
/// <summary>
/// Create One Instance Of <see cref="AuditLog"/>
/// </summary>
public AuditLog()
{
Id = SequentialGuidGenerator.NewSequentialGuid();
OperatedOn = DateTime.Now;
}
#endregion
#region Properties
/// <summary>
/// sets or gets identifier of AuditLog
/// </summary>
public virtual Guid Id { get; set; }
/// <summary>
/// gets or sets Type of Modification(create,softDelet,Delete,update)
/// </summary>
public virtual AuditAction Action { get; set; }
/// <summary>
/// sets or gets description of Log
/// </summary>
public virtual string Description { get; set; }
/// <summary>
/// sets or gets when log is operated
/// </summary>
public virtual DateTime OperatedOn { get; set; }
/// <summary>
/// sets or gets Type Of Entity
/// </summary>
public virtual string Entity { get; set; }
/// <summary>
/// gets or sets Old value of Properties before modification
/// </summary>
public virtual string XmlOldValue { get; set; }
/// <summary>
/// gets or sets XML Base OldValue of Properties (NotMapped)
/// </summary>
public virtual XElement XmlOldValueWrapper
{
get { return XElement.Parse(XmlOldValue); }
set { XmlOldValue = value.ToString(); }
}
/// <summary>
/// gets or sets new value of Properties after modification
/// </summary>
public virtual string XmlNewValue { get; set; }
/// <summary>
/// gets or sets XML Base NewValue of Properties (NotMapped)
/// </summary>
public virtual XElement XmlNewValueWrapper
{
get { return XElement.Parse(XmlNewValue); }
set { XmlNewValue = value.ToString(); }
}
/// <summary>
/// gets or sets Identifier Of Entity
/// </summary>
public virtual string EntityId { get; set; }
/// <summary>
/// gets or sets user agent information
/// </summary>
public virtual string Agent { get; set; }
/// <summary>
/// gets or sets user's ip address
/// </summary>
public virtual string OperantIp { get; set; }
#endregion
#region NavigationProperties
/// <summary>
/// sets or gets log's creator
/// </summary>
public virtual User Operant { get; set; }
/// <summary>
/// sets or gets identifier of log's creator
/// </summary>
public virtual long OperantId { get; set; }
#endregion
}
public enum AuditAction
{
Create,
Update,
Delete,
SoftDelete,
} /// <summary>
/// Represents Activity Log record
/// </summary>
public class ActivityLog
{
#region Ctor
/// <summary>
/// Create one instance of <see cref="ActivityLog"/>
/// </summary>
public ActivityLog()
{
Id = SequentialGuidGenerator.NewSequentialGuid();
OperatedOn=DateTime.Now;
}
#endregion
#region Properties
/// <summary>
/// gets or sets identifier
/// </summary>
public virtual Guid Id { get; set; }
/// <summary>
/// gets or sets the comment of this activity
/// </summary>
public virtual string Comment { get; set; }
/// <summary>
/// gets or sets the date that this activity was done
/// </summary>
public virtual DateTime OperatedOn { get; set; }
/// <summary>
/// gets or sets the page url .
/// </summary>
public virtual string Url { get; set; }
/// <summary>
/// gets or sets the title of page if Url is Not null
/// </summary>
public virtual string Title { get; set; }
/// <summary>
/// gets or sets user agent information
/// </summary>
public virtual string Agent { get; set; }
/// <summary>
/// gets or sets user's ip address
/// </summary>
public virtual string OperantIp { get; set; }
#endregion
#region NavigationProperties
/// <summary>
/// gets or sets the type of this activity
/// </summary>
public virtual ActivityLogType Type{ get; set; }
/// <summary>
/// gets or sets the type's id of this activity
/// </summary>
public virtual Guid TypeId { get; set; }
/// <summary>
/// gets or sets User that done this activity
/// </summary>
public virtual User Operant { get; set; }
/// <summary>
/// gets or sets Id of User that done this activity
/// </summary>
public virtual long OperantId { get; set; }
#endregion
}
/// <summary>
/// Represents Activity Log Type Record
/// </summary>
public class ActivityLogType
{
#region Ctor
/// <summary>
/// Create one Instance of <see cref="ActivityLogType"/>
/// </summary>
public ActivityLogType()
{
Id = SequentialGuidGenerator.NewSequentialGuid();
}
#endregion
#region Properties
/// <summary>
/// gets or sets identifier
/// </summary>
public virtual Guid Id { get; set; }
/// <summary>
/// gets or sets the system name
/// </summary>
public virtual string Name{ get; set; }
/// <summary>
/// gets or sets the display name
/// </summary>
public virtual string DisplayName { get; set; }
/// <summary>
/// gets or sets the description
/// </summary>
public virtual string Description { get; set; }
/// <summary>
/// indicate this log type is enable for logging
/// </summary>
public virtual bool IsEnabled { get; set; }
#endregion
} /// <summary>
/// Represents the entity
/// </summary>
/// <typeparam name="TForeignKey">type of user's Id that can be long or long? </typeparam>
public abstract class Entity<TForeignKey>
{
#region Properties
/// <summary>
/// gets or sets date that this entity was created
/// </summary>
public virtual DateTime CreatedOn { get; set; }
/// <summary>
/// gets or sets Date that this entity was updated
/// </summary>
public virtual DateTime ModifiedOn { get; set; }
/// <summary>
/// gets or sets IP Address of Creator
/// </summary>
public virtual string CreatorIp { get; set; }
/// <summary>
/// gets or set IP Address of Modifier
/// </summary>
public virtual string ModifierIp { get; set; }
/// <summary>
/// indicate this entity is Locked for Modify
/// </summary>
public virtual bool ModifyLocked { get; set; }
/// <summary>
/// indicate this entity is deleted softly
/// </summary>
public virtual bool IsDeleted { get; set; }
/// <summary>
/// gets or sets information of user agent of modifier
/// </summary>
public virtual string ModifierAgent { get; set; }
/// <summary>
/// gets or sets information of user agent of Creator
/// </summary>
public virtual string CreatorAgent { get; set; }
/// <summary>
/// gets or sets date that this entity repoted last time
/// </summary>
public virtual DateTime? ReportedOn { get; set; }
/// <summary>
/// gets or sets counter for Content's report
/// </summary>
public virtual int ReportsCount { get; set; }
/// <summary>
/// gets or sets count of Modification Default is 1
/// </summary>
public virtual int Version { get; set; }
/// <summary>
/// gets or sets action (create,update,softDelete)
/// </summary>
public virtual AuditAction Action { get; set; }
/// <summary>
/// gets or sets TimeStamp for prevent concurrency Problems
/// </summary>
public virtual byte[] RowVersion { get; set; }
#endregion
#region NavigationProperties
/// <summary>
/// gets ro sets User that Modify this entity
/// </summary>
public virtual User ModifiedBy { get; set; }
/// <summary>
/// gets ro sets Id of User that modify this entity
/// </summary>
public virtual TForeignKey ModifiedById { get; set; }
/// <summary>
/// gets ro sets User that Create this entity
/// </summary>
public virtual User CreatedBy { get; set; }
/// <summary>
/// gets ro sets User that Create this entity
/// </summary>
public virtual TForeignKey CreatedById { get; set; }
#endregion
}
/// <summary>
/// Represents the base Entity
/// </summary>
/// <typeparam name="TKey">type of Id</typeparam>
/// <typeparam name="TForeignKey">type of User's Id that can be long or long?</typeparam>
public abstract class BaseEntity<TKey,TForeignKey> : Entity<TForeignKey>
{
#region Properties
/// <summary>
/// gets or sets Identifier of this Entity
/// </summary>
public virtual TKey Id { get; set; }
#endregion
} /// <summary>
/// Represents the Notification Record
/// </summary>
public class Notification
{
#region Ctor
/// <summary>
/// create one instance of <see cref="Notification"/>
/// </summary>
public Notification()
{
Id = SequentialGuidGenerator.NewSequentialGuid();
ReceivedOn = DateTime.Now;
}
#endregion
#region Properties
/// <summary>
/// gets or sets identifier
/// </summary>
public virtual Guid Id { get; set; }
/// <summary>
/// indicate that this notification is read by owner
/// </summary>
public virtual bool IsRead { get; set; }
/// <summary>
/// gets or sets notification's text body
/// </summary>
public virtual string Message { get; set; }
/// <summary>
/// gets or sets page url that this notification is related with it
/// </summary>
public virtual string Url { get; set; }
/// <summary>
/// gets or sets date that this Notification Received
/// </summary>
public virtual DateTime ReceivedOn { get; set; }
/// <summary>
/// gets or sets the type of notification
/// </summary>
public virtual NotificationType Type { get; set; }
#endregion
#region NavigationProperties
/// <summary>
/// gets or sets the id of user that is owner of this notification
/// </summary>
public virtual long OwnerId { get; set; }
/// <summary>
/// gets or sets the user that is owner of this notification
/// </summary>
public virtual User Owner { get; set; }
#endregion
}
public enum NotificationType
{
NewConversation,
NewConversationReply,
...
} public class Observation
{
#region Ctor
/// <summary>
/// create one instance of <see cref="Observation"/>
/// </summary>
public Observation()
{
LastObservedOn = DateTime.Now;
Id = SequentialGuidGenerator.NewSequentialGuid();
}
#endregion
#region Properties
public virtual Guid Id { get; set; }
/// <summary>
/// gets or sets datetime of last visit
/// </summary>
public virtual DateTime LastObservedOn { get; set; }
/// <summary>
/// gets or sets Id Of section That user is observing the entity
/// </summary>
public virtual string SectionId { get; set; }
/// <summary>
/// gets or sets section That user is observing in it
/// </summary>
public virtual string Section { get; set; }
#endregion
#region NavigationProperites
/// <summary>
/// gets or sets user that observed the entity
/// </summary>
public virtual User Observer { get; set; }
/// <summary>
/// gets or sets identifier of user that observed the entity
/// </summary>
public virtual long ObserverId { get; set; }
#endregion
} /// <summary>
/// represents one custom page
/// </summary>
public class Page : BaseEntity<long, long>
{
#region Properties
/// <summary>
/// gets or sets the blog pot body
/// </summary>
public virtual string Body { get; set; }
/// <summary>
/// gets or sets the content title
/// </summary>
public virtual string Title { get; set; }
/// <summary>
/// gets or sets value indicating Custom Slug
/// </summary>
public virtual string SlugUrl { get; set; }
/// <summary>
/// gets or sets meta title for seo
/// </summary>
public virtual string MetaTitle { get; set; }
/// <summary>
/// gets or sets meta keywords for seo
/// </summary>
public virtual string MetaKeywords { get; set; }
/// <summary>
/// gets or sets meta description of the content
/// </summary>
public virtual string MetaDescription { get; set; }
/// <summary>
/// gets or sets
/// </summary>
public virtual string FocusKeyword { get; set; }
/// <summary>
/// gets or sets value indicating whether the content use CanonicalUrl
/// </summary>
public virtual bool UseCanonicalUrl { get; set; }
/// <summary>
/// gets or sets CanonicalUrl That the Post Point to it
/// </summary>
public virtual string CanonicalUrl { get; set; }
/// <summary>
/// gets or sets value indicating whether the content user no Follow for Seo
/// </summary>
public virtual bool UseNoFollow { get; set; }
/// <summary>
/// gets or sets value indicating whether the content user no Index for Seo
/// </summary>
public virtual bool UseNoIndex { get; set; }
/// <summary>
/// gets or sets value indicating whether the content in sitemap
/// </summary>
public virtual bool IsInSitemap { get; set; }
/// <summary>
/// gets or sets title for snippet
/// </summary>
public string SocialSnippetTitle { get; set; }
/// <summary>
/// gets or sets description for snippet
/// </summary>
public string SocialSnippetDescription { get; set; }
/// <summary>
/// gets or sets section's type that this page show on
/// </summary>
public virtual ShowPageSection Section { get; set; }
/// <summary>
/// indicate this page has not any body
/// </summary>
public virtual bool IsCategory { get; set; }
/// <summary>
/// gets or sets order for display forum
/// </summary>
public virtual int DisplayOrder { get; set; }
#endregion
#region NavigationProeprties
/// <summary>
/// gets or sets Parent of this page
/// </summary>
public virtual Page Parent { get; set; }
/// <summary>
/// gets or sets parent'id of this page
/// </summary>
public virtual long? ParentId { get; set; }
/// <summary>
/// get or set collection of page that they are children of this page
/// </summary>
public virtual ICollection<Page> Children { get; set; }
#endregion
}
public enum ShowPageSection
{
Menu,
Footer,
SideBar
}
public virtual User DeletedBy { get; set; }
public virtual TForeignKey DeletedById { get; set; } public virtual ICollection<Category> CategoriesCreated { get; set; }
public virtual ICollection<Category> CategoriesDeleted { get; set; }
public virtual ICollection<Category> CategoriesModified { get; set; } HasRequired(row => row.CreatedBy).WithMany(row => row.CategoriesCreated).HasForeignKey(row => row.CreatedById).WillCascadeOnDelete(false); HasOptional(row => row.DeletedBy).WithMany(row => row.CategoriesDeleted).HasForeignKey(row => row.DeletedById).WillCascadeOnDelete(false);
HasRequired(row => row.CreatedBy).WithMany().HasForeignKey(row => row.CreatedById).WillCascadeOnDelete(false);
[Flags]
public enum Roles
{
User=1,
Author=2,
Editor=4,
Moderator=8,
Adminisrator=16,
BlogModerator=32,
NewsModerator=64,
PollModerator=128,
AnnouncementModerator=256,
ForumModerator=512,
PagesModerator=1024,
CollectionsModerator=2048
}