⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gallerydataprovider.cs

📁 本系统是在asp版《在线文件管理器》的基础上设计制作
💻 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 + -