📄 gallerydataprovider.cs
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
// Copyright (c) Telligent Systems Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Data;
using System.IO;
using System.Xml;
using CommunityServer.Components;
using CommunityServer.Configuration;
namespace CommunityServer.Galleries.Components
{
/// <summary>
/// Summary description for GalleryDataProvider.
/// </summary>
public abstract class GalleryDataProvider
{
public static readonly string GalleryDataProviderName = "GalleryDataProvider";
#region Instance
private static GalleryDataProvider _defaultInstance = null;
static GalleryDataProvider()
{
CreateDefaultCommonProvider();
}
/// <summary>
/// Returns an instance of the user-specified data provider class.
/// </summary>
/// <returns>An instance of the user-specified data provider class. This class must inherit the
/// CommonDataProvider interface.</returns>
public static GalleryDataProvider Instance()
{
return _defaultInstance;
}
public static GalleryDataProvider Instance (Provider dataProvider)
{
GalleryDataProvider fdp = CSCache.Get(dataProvider.Name) as GalleryDataProvider;
if(fdp == null)
{
fdp = DataProviders.Invoke(dataProvider) as GalleryDataProvider;
CSCache.Max(dataProvider.Name,fdp);
}
return fdp;
}
/// <summary>
/// Creates the Default CommonDataProvider
/// </summary>
private static void CreateDefaultCommonProvider()
{
// Get the names of the providers
//
CSConfiguration config = CSConfiguration.GetConfig();
// Read the configuration specific information
// for this provider
//
Provider sqlForumsProvider = (Provider) config.Providers[GalleryDataProviderName];
// Read the connection string for this provider
//
_defaultInstance = DataProviders.CreateInstance(sqlForumsProvider) as GalleryDataProvider;
}
#endregion
public abstract Hashtable GetGalleries(bool mergePermissions);
public abstract void UpdatePictureCategories(int galleryID, int postID, string[] categoryList);
public abstract ArrayList GetPictureCategories(int postID);
public abstract void CreatePicture(Picture picture);
public abstract void CreatePictureData(Picture picture, PostAttachment pictureData);
public abstract void DeletePictureData(int postID);
public abstract void UpdatePicture(Picture picture, int editedByUserID);
public abstract void DeletePicture(int sectionID, int threadID);
public abstract void DeletePost(int postID, int userID);
public abstract ThreadSet GetPictures(GalleryThreadQuery query);
public abstract int GetPictureSortOrder(int postID, GalleryThreadQuery query);
public abstract Picture GetPicture(int postID, int userID);
public abstract int GetRandomPostID(int sectionID, int categoryID);
public abstract PostAttachment GetPictureData(int postID);
public abstract ArrayList GetComments(int postID, bool allowUnapproved);
public abstract void CreateComment(GalleryComment comment);
public abstract ArrayList GetGalleryPermissions(int id);
public abstract bool ApprovePost(int postID, int userIDApprovedBy);
public abstract void UpdatePictureMetadata(int postID, Hashtable metadata);
public abstract Hashtable GetPictureMetadata(int postID);
public abstract Hashtable GetAllPictures(int galleryID);
public abstract PostSet SearchReindexPosts(int setsize, int settingsID);
public abstract SearchResultSet GetSearchResults(SearchQuery query, SearchTerms terms);
#region Populate
public static void PopulateGalleryFromIDataReader(IDataReader dr, ref Gallery gallery)
{
gallery.SectionID = (int) dr["SectionID"];
gallery.ParentID = (int) dr["ParentID"];
gallery.GroupID = (int) dr["GroupID"];
gallery.DateCreated = (DateTime) dr["DateCreated"];
gallery.Description = (string) dr["Description"];
gallery.Name = (string) dr["Name"];
gallery.NewsgroupName = (string) dr["NewsgroupName"];
gallery.IsModerated = Convert.ToBoolean(dr["IsModerated"]);
gallery.DefaultThreadDateFilter = (ThreadDateFilterMode) dr["DaysToView"];
gallery.IsActive = Convert.ToBoolean(dr["IsActive"]);
gallery.SortOrder = (int) dr["SortOrder"];
gallery.DisplayMask = (byte[]) dr["DisplayMask"];
gallery.TotalPosts = (int) dr["TotalPosts"];
gallery.TotalThreads = (int) dr["TotalThreads"];
gallery.MostRecentPostAuthor = (string) dr["MostRecentPostAuthor"];
gallery.MostRecentPostSubject = (string) dr["MostRecentPostSubject"];
gallery.MostRecentPostAuthorID = (int) dr["MostRecentPostAuthorID"];
gallery.MostRecentPostID = (int) dr["MostRecentPostId"];
gallery.MostRecentThreadID = (int) dr["MostRecentThreadId"];
gallery.MostRecentThreadReplies = (int) dr["MostRecentThreadReplies"];
gallery.MostRecentPostDate = (DateTime) dr["MostRecentPostDate"];
gallery.EnableAutoDelete = Convert.ToBoolean(dr["EnableAutoDelete"]);
gallery.EnablePostStatistics = Convert.ToBoolean(dr["EnablePostStatistics"]);
gallery.AutoDeleteThreshold = (int) dr["AutoDeleteThreshold"];
gallery.EnableAnonymousPosting = Convert.ToBoolean(dr["EnableAnonymousPosting"]);
gallery.ForumType = (ForumType) dr["ForumType"];
gallery.NavigateUrl = (string) dr["Url"];
gallery.ApplicationKey = dr["ApplicationKey"] as string;
SerializerData data = CommonDataProvider.PopulateSerializerDataIDataReader(dr, SerializationType.Section);
gallery.SetSerializerData(data);
gallery.ApplicationType = (ApplicationType) (Int16)dr["ApplicationType"];
try
{
gallery.PostsToModerate = (int) dr["PostsToModerate"];
}
catch {}
}
public static Picture PopulatePictureFromIDataReader(IDataReader dr)
{
Picture picture = new Picture();
// Populate picture
//
picture.SectionID = (int) dr["SectionID"];
picture.PostID = (int) dr["PostID"];
picture.Subject = (string) dr["Subject"];
picture.FormattedBody = (string) dr["FormattedBody"];
picture.Body = (string) dr["Body"];
picture.PostDate = (DateTime) dr["PostDate"];
picture.ThreadDate = (DateTime) dr["ThreadDate"];
picture.ThreadID = Convert.ToInt32(dr["ThreadID"]);
picture.Username = (string) dr["Username"];
picture.IsApproved = Convert.ToBoolean(dr["IsApproved"]);
picture.IsLocked = (bool) dr["IsLocked"];
picture.Views = (int) dr["TotalViews"];
picture.AuthorID = (int) dr["UserID"];
picture.RatingSum = (int) dr["RatingSum"];
picture.TotalRatings = (int) dr["TotalRatings"];
picture.StickyDate = (DateTime) dr["StickyDate"];
picture.IsSticky = (bool) dr["IsSticky"];
picture.SortOrder = (int) dr["SortOrder"];
picture.SettingsID = (int) dr["SettingsID"];
SerializerData data = CommonDataProvider.PopulateSerializerDataIDataReader(dr, SerializationType.Post);
picture.SetSerializerData(data);
// Fields for ThreadSet
try
{
picture.Replies = (int) dr["TotalReplies"];
picture.MostRecentPostID = (int) dr["MostRecentPostID"];
picture.MostRecentPostAuthor = (string) dr["MostRecentPostAuthor"];
picture.MostRecentPostAuthorID = (int) dr["MostRecentPostAuthorID"];
picture.Status = (ThreadStatus) dr["ThreadStatus"];
picture.EmoticonID = (int) dr["ThreadEmoticonID"];
}
catch { }
try { picture.AttachmentFilename = (string) dr["AttachmentFilename"]; }
catch { }
// Fields for just a Post
try
{
picture.Replies = (int) dr["Replies"];
picture.PostLevel = Convert.ToInt32(dr["PostLevel"]);
picture.SortOrder = Convert.ToInt32(dr["SortOrder"]);
picture.UserHostAddress = (string) dr["IPAddress"];
picture.PostType = (PostType) dr["PostType"];
picture.EmoticonID = (int) dr["EmoticonID"];
picture.IsTracked = (bool) dr["UserIsTrackingThread"];
picture.ThreadIDNext = (int) dr["NextThreadID"];
picture.ThreadIDPrev = (int) dr["PrevThreadID"];
if(dr["EditNotes"] != DBNull.Value)
picture.EditNotes = (string) dr["EditNotes"];
}
catch { }
return picture;
}
public static Picture PopulatePictureFromIDataReader(DataRow dr, DataRelation relationShip)
{
Picture picture = new Picture();
// Populate picture
//
picture.SectionID = (int) dr["SectionID"];
picture.PostID = (int) dr["PostID"];
picture.Subject = (string) dr["Subject"];
picture.FormattedBody = (string) dr["FormattedBody"];
picture.Body = (string) dr["Body"];
picture.PostDate = (DateTime) dr["PostDate"];
picture.ThreadDate = (DateTime) dr["ThreadDate"];
picture.ThreadID = Convert.ToInt32(dr["ThreadID"]);
picture.Username = (string) dr["Username"];
picture.IsApproved = Convert.ToBoolean(dr["IsApproved"]);
picture.IsLocked = (bool) dr["IsLocked"];
picture.Views = (int) dr["TotalViews"];
picture.AuthorID = (int) dr["UserID"];
picture.RatingSum = (int) dr["RatingSum"];
picture.TotalRatings = (int) dr["TotalRatings"];
picture.StickyDate = (DateTime) dr["StickyDate"];
picture.IsSticky = (bool) dr["IsSticky"];
picture.SortOrder = (int) dr["SortOrder"];
picture.SettingsID = (int) dr["SettingsID"];
// Fields for ThreadSet
try
{
picture.Replies = (int) dr["TotalReplies"];
picture.MostRecentPostID = (int) dr["MostRecentPostID"];
picture.MostRecentPostAuthor = (string) dr["MostRecentPostAuthor"];
picture.MostRecentPostAuthorID = (int) dr["MostRecentPostAuthorID"];
picture.Status = (ThreadStatus) dr["ThreadStatus"];
picture.EmoticonID = (int) dr["ThreadEmoticonID"];
}
catch { }
// Fields for just a Post
try
{
picture.Replies = (int) dr["Replies"];
picture.AttachmentFilename = (string) dr["AttachmentFilename"];
picture.PostLevel = Convert.ToInt32(dr["PostLevel"]);
picture.SortOrder = Convert.ToInt32(dr["SortOrder"]);
picture.UserHostAddress = (string) dr["IPAddress"];
picture.PostType = (PostType) dr["PostType"];
picture.EmoticonID = (int) dr["EmoticonID"];
picture.IsTracked = (bool) dr["UserIsTrackingThread"];
picture.ThreadIDNext = (int) dr["NextThreadID"];
picture.ThreadIDPrev = (int) dr["PrevThreadID"];
if(dr["EditNotes"] != DBNull.Value)
picture.EditNotes = (string) dr["EditNotes"];
}
catch { }
DataRow[] categories = dr.GetChildRows(relationShip);
if(categories != null && categories.Length > 0)
{
picture.Categories = new string[categories.Length];
for(int i = 0; i<categories.Length; i++)
{
picture.Categories[i] = categories[i]["Name"] as string;
}
}
return picture;
}
public static void PopulateMetadataFromIDataReader(IDataReader dr, Hashtable metadata)
{
ExifProperty tag = (ExifProperty)Enum.Parse(typeof(ExifProperty), (string)dr["MetaKey"], true);
if(((string)dr["MetaType"]).EndsWith("Rational"))
metadata.Add( tag, new Rational((string)dr["MetaValue"]) );
else
metadata.Add( tag, Convert.ChangeType( (string)dr["MetaValue"], Type.GetType( (string)dr["MetaType"] ) ) );
}
#endregion
#region Helpers
public static object ConvertCategoriesToXML(string[] Categories)
{
if(Categories == null || Categories.Length == 0)
return DBNull.Value;
StringWriter sw = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(sw);
writer.WriteStartElement("Categories");
foreach (string category in Categories)
{
writer.WriteElementString("Category", category);
}
writer.Close();
return sw.ToString();
}
public static object ConvertMetadataToXML(Hashtable metadata)
{
if(metadata == null || metadata.Count == 0)
return DBNull.Value;
StringWriter sw = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(sw);
writer.WriteStartElement("entries");
foreach(ExifProperty key in metadata.Keys)
{
writer.WriteStartElement("entry");
writer.WriteAttributeString("key", key.ToString());
writer.WriteAttributeString("type", metadata[key].GetType().FullName);
if(metadata[key].GetType().Name == "DateTime")
writer.WriteAttributeString( "value", ((DateTime)metadata[key]).ToString("yyyy-MM-dd HH:mm:ss") );
else if(metadata[key].GetType().Name == "Rational")
writer.WriteAttributeString( "value", ((Rational)metadata[key]).ToDatabase() );
else
writer.WriteAttributeString( "value", Convert.ToString(metadata[key]) );
writer.WriteEndElement();
}
writer.Close();
return sw.ToString();
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -