/// <summary> Constructor for a new instance of the RequestCache class </summary> /// <param name="Current_Mode"> Mode / navigation information for the current request</param> /// <param name="Results_Statistics"> Information about the entire set of results for a search or browse </param> /// <param name="Paged_Results"> Single page of results for a search or browse, within the entire set </param> /// <param name="HTML_Skin"> HTML Web skin which controls the overall appearance of this digital library </param> /// <param name="Current_User"> Currently logged on user </param> /// <param name="Public_Folder"> Object contains the information about the public folder to display </param> /// <param name="Top_Collection"> Item aggregation for the top-level collection, which is used in a number of places, for example /// showing the correct banner, even when it is not the "current" aggregation </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param> public RequestCache(Navigation_Object Current_Mode, Search_Results_Statistics Results_Statistics, List<iSearch_Title_Result> Paged_Results, Web_Skin_Object HTML_Skin, User_Object Current_User, Public_User_Folder Public_Folder, Item_Aggregation Top_Collection, Custom_Tracer Tracer) { this.Current_Mode = Current_Mode; this.Results_Statistics = Results_Statistics; this.Paged_Results = Paged_Results; this.HTML_Skin = HTML_Skin; this.Current_User = Current_User; this.Public_Folder = Public_Folder; this.Top_Collection = Top_Collection; this.Tracer = Tracer; }
/// <summary> Stores a public folder object into the cache </summary> /// <param name="StoreObject"> Object to store (which contains the primary key) </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering</param> public static void Store_Public_Folder_Info(Public_User_Folder StoreObject, Custom_Tracer Tracer) { // If the cache is disabled, just return before even tracing if (Settings.Disabled) return; string key = "FOLDER_INFO_" + StoreObject.UserFolderID; if (Tracer != null) { Tracer.Add_Trace("CachedDataManager.Store_Public_Folder_Info", "Adding object '" + key + "' to the cache with expiration of 2 minutes"); } if (HttpContext.Current.Cache[key] == null) { HttpContext.Current.Cache.Insert(key, StoreObject, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(2)); } }
/// <summary> Retrieve the public user folder information and browse by user folder id </summary> /// <param name="UserFolderID"> Primary key for the public user folder to retrieve </param> /// <param name="ResultsPage">Which page of results to return ( one-based, so the first page is page number of one ) </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param> /// <param name="Folder_Info"> [OUT] Information about this public user folder including name and owner</param> /// <param name="Complete_Result_Set_Info"> [OUT] Information about the entire set of results </param> /// <param name="Paged_Results"> [OUT] List of search results for the requested page of results </param> /// <returns> TRUE if successful, otherwise FALSE </returns> /// <remarks> This attempts to pull the objects from the cache. If unsuccessful, it builds the objects from the /// database and hands off to the <see cref="CachedDataManager" /> to store in the cache </remarks> public bool Get_Public_User_Folder(int UserFolderID, int ResultsPage, Custom_Tracer Tracer, out Public_User_Folder Folder_Info, out Search_Results_Statistics Complete_Result_Set_Info, out List<iSearch_Title_Result> Paged_Results) { if (Tracer != null) { Tracer.Add_Trace("SobekCM_Assistant.Get_Public_User_Folder", String.Empty); } // Set output initially to null Paged_Results = null; Complete_Result_Set_Info = null; // Try to get this from the cache first, otherwise get from database and store in cache Folder_Info = CachedDataManager.Retrieve_Public_Folder_Info(UserFolderID, Tracer); if (Folder_Info == null) { Folder_Info = SobekCM_Database.Get_Public_User_Folder(UserFolderID, Tracer); if ((Folder_Info != null) && (Folder_Info.IsPublic)) { CachedDataManager.Store_Public_Folder_Info(Folder_Info, Tracer); } } // If this folder is invalid or private, return false if ((Folder_Info == null) || (!Folder_Info.IsPublic)) { return false; } // Look to see if the browse statistics are available on any cache for this browse bool need_browse_statistics = true; Complete_Result_Set_Info = CachedDataManager.Retrieve_Public_Folder_Statistics(UserFolderID, Tracer); if (Complete_Result_Set_Info != null) need_browse_statistics = false; // Look to see if the paged results are available on any cache.. bool need_paged_results = true; Paged_Results = CachedDataManager.Retrieve_Public_Folder_Browse(UserFolderID, ResultsPage, Tracer); if (Paged_Results != null) need_paged_results = false; // Was a copy found in the cache? if ((!need_browse_statistics) && (!need_paged_results)) { if (Tracer != null) { Tracer.Add_Trace("SobekCM_Assistant.Get_User_Folder", "Browse statistics and paged results retrieved from cache"); } } else { if (Tracer != null) { Tracer.Add_Trace("SobekCM_Assistant.Get_User_Folder", "Building results information"); } Single_Paged_Results_Args returnArgs = Engine_Database.Get_Public_Folder_Browse(UserFolderID, 20, ResultsPage, false, new List<short>(), need_browse_statistics, Tracer); if (need_browse_statistics) { Complete_Result_Set_Info = returnArgs.Statistics; } Paged_Results = returnArgs.Paged_Results; // Save the overall result set statistics to the cache if something was pulled if ((need_browse_statistics) && (Complete_Result_Set_Info != null)) { CachedDataManager.Store_Public_Folder_Statistics(UserFolderID, Complete_Result_Set_Info, Tracer); } // Save the overall result set statistics to the cache if something was pulled if ((need_paged_results) && (Paged_Results != null)) { CachedDataManager.Store_Public_Folder_Browse(UserFolderID, ResultsPage, Paged_Results, Tracer); } } return true; }
/// <summary> Constructor for a new instance of the RequestCache class </summary> /// <param name="Current_Mode"> Mode / navigation information for the current request</param> /// <param name="Hierarchy_Object"> Current item aggregation object to display </param> /// <param name="Results_Statistics"> Information about the entire set of results for a search or browse </param> /// <param name="Paged_Results"> Single page of results for a search or browse, within the entire set </param> /// <param name="Browse_Object"> Object contains all the basic information about any browse or info display </param> /// <param name="Current_Item"> Current item to display </param> /// <param name="Current_Page"> Current page within the item</param> /// <param name="HTML_Skin"> HTML Web skin which controls the overall appearance of this digital library </param> /// <param name="Current_User"> Currently logged on user </param> /// <param name="Public_Folder"> Object contains the information about the public folder to display </param> /// <param name="Site_Map"> Optional site map object used to render a navigational tree-view on left side of static web content pages </param> /// <param name="Items_In_Title"> List of items within the current title ( used for the Item Group display )</param> /// <param name="Static_Web_Content"> HTML content-based browse, info, or imple CMS-style web content objects. These are objects which are read from a static HTML file and much of the head information must be maintained </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param> public RequestCache(Navigation_Object Current_Mode, Item_Aggregation Hierarchy_Object, Search_Results_Statistics Results_Statistics, List<iSearch_Title_Result> Paged_Results, Item_Aggregation_Child_Page Browse_Object, SobekCM_Item Current_Item, Page_TreeNode Current_Page, Web_Skin_Object HTML_Skin, User_Object Current_User, Public_User_Folder Public_Folder, SobekCM_SiteMap Site_Map, SobekCM_Items_In_Title Items_In_Title, HTML_Based_Content Static_Web_Content, Custom_Tracer Tracer) { this.Current_Mode = Current_Mode; this.Hierarchy_Object = Hierarchy_Object; this.Results_Statistics = Results_Statistics; this.Paged_Results = Paged_Results; this.Browse_Object = Browse_Object; this.Current_Item = Current_Item; this.Current_Page = Current_Page; this.HTML_Skin = HTML_Skin; this.Current_User = Current_User; this.Public_Folder = Public_Folder; this.Site_Map = Site_Map; this.Items_In_Title = Items_In_Title; this.Static_Web_Content = Static_Web_Content; this.Tracer = Tracer; }
/// <summary> Gets the information about a folder which should be public </summary> /// <param name="UserFolderID"> ID for the user folder to retrieve </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering</param> /// <returns> Built public user folder regardless if it is public or not. A non-public folder will only be populated with FALSE for the isPublic field. </returns> /// <remarks> This calls the 'mySobek_Get_Folder_Information' stored procedure</remarks> public static Public_User_Folder Get_Public_User_Folder(int UserFolderID, Custom_Tracer Tracer) { if (Tracer != null) { Tracer.Add_Trace("SobekCM_Database.Get_Public_User_Folder", String.Empty); } try { // Execute this non-query stored procedure EalDbParameter[] paramList = new EalDbParameter[1]; paramList[0] = new EalDbParameter("@folderid", UserFolderID); DataSet resultSet = EalDbAccess.ExecuteDataset(DatabaseType, connectionString, CommandType.StoredProcedure, "mySobek_Get_Folder_Information", paramList); // Build the returnvalue if ((resultSet == null) || (resultSet.Tables.Count == 0) || (resultSet.Tables[0].Rows.Count == 0)) return new Public_User_Folder(false); // Check that it is really public bool isPublic = Convert.ToBoolean(resultSet.Tables[0].Rows[0]["isPublic"]); if ( !isPublic ) return new Public_User_Folder(false); // Pull out the row and all the values DataRow thisRow = resultSet.Tables[0].Rows[0]; string folderName = thisRow["FolderName"].ToString(); string folderDescription = thisRow["FolderDescription"].ToString(); int userID = Convert.ToInt32(thisRow["UserID"]); string firstName = thisRow["FirstName"].ToString(); string lastName = thisRow["LastName"].ToString(); string nickname = thisRow["NickName"].ToString(); string email = thisRow["EmailAddress"].ToString(); // Return the folder object Public_User_Folder returnValue = new Public_User_Folder(UserFolderID, folderName, folderDescription, userID, firstName, lastName, nickname, email, true); return returnValue; } catch (Exception ee) { lastException = ee; if (Tracer != null) { Tracer.Add_Trace("SobekCM_Database.Get_Public_User_Folder", "Exception caught during database work", Custom_Trace_Type_Enum.Error); Tracer.Add_Trace("SobekCM_Database.Get_Public_User_Folder", ee.Message, Custom_Trace_Type_Enum.Error); Tracer.Add_Trace("SobekCM_Database.Get_Public_User_Folder", ee.StackTrace, Custom_Trace_Type_Enum.Error); } return null; } }