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

📄 commondataprovider.cs

📁 本系统是在asp版《在线文件管理器》的基础上设计制作
💻 CS
📖 第 1 页 / 共 3 页
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
//     Copyright (c) Telligent Systems Corporation.  All rights reserved.
// </copyright> 
//------------------------------------------------------------------------------

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Diagnostics;
using System.Web.Mail;
using System.Xml;
using CommunityServer.Configuration;
using Microsoft.ScalableHosting.Profile;
using Microsoft.ScalableHosting.Security;

namespace CommunityServer.Components {

    /// <summary>
    /// The DataProvider class contains a single method, Instance(), which returns an instance of the
    /// user-specified data provider class.
    /// </summary>
    /// <remarks>  The data provider class must inherit the CommonDataProvider
    /// interface.</remarks>
	public abstract class CommonDataProvider {

        public static readonly string CommonDataProviderName = "CommonDataProvider";

		#region Instance

        private static CommonDataProvider _defaultInstance = null;

        static CommonDataProvider()
        {
            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 CommonDataProvider Instance() {
            return _defaultInstance;
		}

        public static CommonDataProvider Instance (Provider dataProvider) 
        {
            CommonDataProvider fdp = CSCache.Get(dataProvider.Name) as CommonDataProvider;
            if(fdp == null)
            {
                fdp = DataProviders.Invoke(dataProvider) as CommonDataProvider;
                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[CommonDataProviderName];

            // Read the connection string for this provider
            //
            
            _defaultInstance = DataProviders.CreateInstance(sqlForumsProvider) as CommonDataProvider;
        }
        
        #endregion

        #region Site Settings
		public abstract void CalculateSiteStatistics(int settingsID, int updateWindow);
        public abstract SiteStatistics LoadSiteStatistics(int settingsID);
        public abstract SiteSettings LoadSiteSettings(string application);
        public abstract ArrayList LoadAllSiteSettings ();
        public abstract void SaveSiteSettings(SiteSettings siteSettings);
		public abstract Hashtable GetSiteUrls();

        public static SiteSettings PopulateSiteSettingsFromIDataReader(IDataReader dr) 
        {
			SiteSettings settings = null;

			try {
				settings =  Serializer.ConvertToObject(dr["SettingsXML"] as string,typeof(SiteSettings)) as SiteSettings;

                //When new sites/communities are created, it is very likely they will not have any XML history.
                //Serializer.ConvertToObject will return null if no XML is present.
                if(settings == null) 
                    settings = new SiteSettings();
			} catch (Exception exception) {

				if (exception.InnerException is XmlException) {

					Debug.WriteLine("Critical Error: SiteSettings serialized XML is invalid");
					CSException csException = new CSException(CSExceptionType.SiteSettingsInvalidXML);

					throw csException;
				
				} else {
					throw exception;
				}

			}

			// read addition data
			settings.SettingsID = (int) dr["SettingsID"];
			settings.SiteDomain = dr["SiteUrl"] as string;
			settings.ForumsDisabled = (bool)dr["Disabled"];
			settings.SiteKey = (Guid)dr["SettingsKey"];
			settings.ApplicationName = dr["ApplicationName"] as string;

			return settings;
        }

        #endregion

        #region Post

		public abstract bool IsThreadTracked(int threadID, int userID);
        public abstract void AddPostAttachment(Post post, PostAttachment attachment);
		public abstract void DeletePostAttachment(int postID);
        public abstract PostAttachment GetPostAttachment (int postID);
        public abstract void ReverseThreadTracking(int userID, int PostID);
		public abstract EmailSubscriptionType GetSectionSubscriptionType(int SectionID, int UserID);
		public abstract void SetSectionSubscriptionType(int SectionID, int UserID, EmailSubscriptionType subType);
		public abstract  void RemoveThreadTracking(int SectionID, int UserID);
        
        #endregion

        #region Ratings
        public abstract void ThreadRate (int threadID, int userID, int rating);
        public abstract ArrayList ThreadRatings (int threadID);
        #endregion

        #region Referrals

        public abstract void SaveReferralList(ArrayList referrals);
        public abstract ReferralSet GetReferrals(Referral r, int pageSize, int pageIndex);

        #endregion

        public abstract void SaveViewList(Hashtable views);
        
        #region Messages
        public abstract ArrayList GetMessages(int messageID);
        public abstract void CreateUpdateDeleteMessage(Message message, DataProviderAction action);
        #endregion

        #region Emails
        public abstract Hashtable GetEmailsTrackingThread(int postID);
		public abstract Hashtable GetEmailsTrackingSectionByPostID(int postID);
        public abstract void EmailEnqueue (MailMessage email);
        public abstract void EmailDelete (Guid emailID);
		public abstract void EmailFailure (ArrayList list, int failureInterval, int maxNumberOfTries);
        public abstract ArrayList EmailDequeue (int settingsID);

        // *********************************************************************
        //
        //  PopulateEmailFromIDataReader
        //
        /// <summary>
        /// This private method accepts a datareader and attempts to create and
        /// populate a EmailTempalte class instance which is returned to the caller.
        /// </summary>
        //
        // ********************************************************************/
        public static EmailTemplate PopulateEmailFromIDataReader(IDataReader reader) {
            EmailTemplate email = new EmailTemplate();

            email.EmailID       = (Guid) reader["EmailID"];
            email.Priority      = (MailPriority) (int) reader["emailPriority"];
			email.BodyFormat    = (MailFormat) (int) reader["emailBodyFormat"];
            email.Subject       = (string) reader["emailSubject"];
            email.To            = (string) reader["emailTo"];
            email.From          = (string) reader["emailFrom"];
            email.Body          = (string) reader["emailBody"];
			email.NumberOfTries = (int) reader["numberOfTries"];

            if (reader["emailCc"] != DBNull.Value)
                email.Cc = (string) reader["emailCc"];

            if (reader["emailBcc"] != DBNull.Value)
                email.Bcc = (string) reader["emailBcc"];


            return email;
        }
        #endregion

        #region Sections
        public abstract int CreateUpdateDeleteSection(Section section, DataProviderAction action);
		public abstract void ChangeSectionSortOrder(int forumID, bool moveUp); 
		public abstract HybridDictionary GetSectionsRead(int userID);
        #endregion

        #region Permissions
        public abstract void CreateUpdateDeletePermission(PermissionBase p, DataProviderAction action);


        public static void PopulatePermissionFromIDataReader( PermissionBase p, IDataReader reader) {

			p.Name          = (string) reader["RoleName"];
			p.RoleID        = (Guid) reader["RoleID"];
			p.SectionID       = (int) reader["SectionID"];
			p.Implied		= (bool)reader["Implied"];
			p.AllowMask		= (Permission) (long)reader["AllowMask"];
			p.DenyMask		= (Permission) (long)reader["DenyMask"];

		}


        #endregion

        #region Groups
        public abstract int CreateUpdateDeleteGroup(Group group, DataProviderAction action);
        public abstract void ChangeGroupSortOrder(int forumGroupID, bool moveUp);
       
        public abstract Hashtable GetGroups(ApplicationType appType, bool requireModeration);

        public static Group PopulateForumGroupFromIDataReader(IDataReader dr) {

            Group forumGroup               = new Group();
            forumGroup.GroupID             = (int) dr["GroupID"];
            forumGroup.Name                = (string) dr["Name"];
            forumGroup.NewsgroupName       = (string) dr["NewsgroupName"];
            forumGroup.SortOrder           = Convert.ToInt32(dr["SortOrder"]);
            forumGroup.ApplicationType     = (ApplicationType) (Int16) dr["ApplicationType"];

            return forumGroup;
        }
        #endregion

        #region User
		public abstract User GetAnonymousUser( int settingsID );
        public abstract Avatar GetUserAvatar (int userID);

		// 增加IP纪录和根据昵称取用户资料的方法
        public abstract User GetUser(int userID, string username, string nickname, bool isOnline, bool isEditable, string lastAction, string ipAddress);
        public abstract User CreateUpdateDeleteUser(User user, DataProviderAction action, out CreateUserStatus status);
        public abstract int UpdateAnonymousUsers(Hashtable anonymousUserList, int settingsID);
        public abstract int GetUserIDByEmail(string emailAddress);
		public abstract int GetUserIDByAppUserToken(string appUserToken);
		public abstract Hashtable WhoIsOnline(int pastMinutes);
        public abstract void UserChangePasswordAnswer(int userID, string newQuestion, string newAnswer);
        public abstract void ToggleOptions(string username, bool hideReadThreads, ViewOptions viewOptions);
        public abstract UserSet GetUsers(int pageIndex, int pageSize, SortUsersBy sortBy, SortOrder sortOrder, string usernameFilter, bool includeEmailInFilter, UserAccountStatus accountStatus, bool returnRecordCount, bool includeHiddenUsers, bool returnModerationCounters);
		public abstract void ToggleUserForceLogin(User user);
        public abstract bool UpgradePassword(string username, string password);
        public abstract bool ValidateUserPasswordAnswer(object UserId, string answer);
        #endregion

        #region Search
        //public abstract SearchResultSet GetSearchResults(int pageIndex, int pageSize, int userID, string[] forumsToSearch, string[] usersToSearch, string[] andTerms, string[] orTerms);
        public abstract Hashtable GetSearchIgnoreWords(int settingsID);
        public abstract void CreateDeleteSearchIgnoreWords (ArrayList words, DataProviderAction action);
        public abstract void InsertIntoSearchBarrel (Hashtable words, Post post, int settingsID);
        public abstract PostSet SearchReindexPosts (int setsize, int settingsID);
        #endregion
	
        #region Roles
		public abstract Hashtable GetRoles(int userID);
        public abstract UserSet UsersInRole(int pageIndex, int pageSize, SortUsersBy sortBy, SortOrder sortOrder, Guid roleID, UserAccountStatus accountStatus, bool returnRecordCount);
		public abstract Role GetRole(Guid roleID, string RoleName);
//		public abstract void AddUserToRole(int userID, Guid roleID);s
//		public abstract void RemoveUserFromRole(int userID, Guid roleID);
		public abstract void AddForumToRole(int forumID, Guid roleID);
		public abstract void RemoveForumFromRole(int forumID, Guid roleID);
		public abstract Guid CreateUpdateDeleteRole(Role role, string applicationName, DataProviderAction action);
        #endregion

        #region Vote
        public abstract void Vote(int postID, int userID, string selection);
        public abstract PollSummary GetPoll(PollSummary summary);
        #endregion

        #region Exceptions and Tracing
        public abstract void LogException (CSException exception, int SettingsID);

		public void LogException(CSException exception)
		{
			LogException(exception,CSContext.Current.SiteSettings.SettingsID);
		}

        public abstract ArrayList GetExceptions (int exceptionType, int minFrequency);
        public abstract void DeleteExceptions( int settingsID, ArrayList deleteList );

        public static CSException PopulateForumExceptionFromIDataReader (IDataReader reader) {

            CSException exception = new CSException( (CSExceptionType) (int) reader["Category"], (string) reader["ExceptionMessage"]);

            exception.LoggedStackTrace  = (string) reader["Exception"];
            exception.IPAddress         = (string) reader["IPAddress"];
            exception.UserAgent         = (string) reader["UserAgent"];
            exception.HttpReferrer      = (string) reader["HttpReferrer"];
            exception.HttpVerb          = (string) reader["HttpVerb"];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -