/// <summary> Constructor for a new instance of the Folder_Mgmt_MySobekViewer class </summary> /// <param name="RequestSpecificValues"> All the necessary, non-global data specific to the current request </param> public Folder_Mgmt_MySobekViewer(RequestCache RequestSpecificValues) : base(RequestSpecificValues) { RequestSpecificValues.Tracer.Add_Trace("Folder_Mgmt_MySobekViewer.Constructor", String.Empty); properFolderName = String.Empty; int current_folder_id = -1; if ( !String.IsNullOrEmpty(RequestSpecificValues.Current_Mode.My_Sobek_SubMode)) { // Try to get this RequestSpecificValues.Current_User folder from the RequestSpecificValues.Current_User object User_Folder userFolder = RequestSpecificValues.Current_User.Get_Folder( RequestSpecificValues.Current_Mode.My_Sobek_SubMode ); // If the RequestSpecificValues.Current_User folder is null, then this folder is not in the current RequestSpecificValues.Current_User object // This may still be a valid folder though. Check this by pulling folder list for this // RequestSpecificValues.Current_User again if (userFolder == null) { // Get the RequestSpecificValues.Current_User from the database again User_Object checkFolderUser = Engine_Database.Get_User(RequestSpecificValues.Current_User.UserID, RequestSpecificValues.Tracer); // Look for this folder in the new RequestSpecificValues.Current_User object userFolder = checkFolderUser.Get_Folder(RequestSpecificValues.Current_Mode.My_Sobek_SubMode); if (userFolder == null) { // Invalid folder.. should not have gotten this far though HttpContext.Current.Response.Redirect(RequestSpecificValues.Current_Mode.Base_URL, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); RequestSpecificValues.Current_Mode.Request_Completed = true; return; } // Save this to the RequestSpecificValues.Current_User so this does not have to happen again RequestSpecificValues.Current_User.Add_Folder(userFolder); } // Get the proper name and folder id Debug.Assert(userFolder != null, "userFolder != null"); properFolderName = userFolder.Folder_Name; current_folder_id = userFolder.Folder_ID; } if ((RequestSpecificValues.Current_Mode.isPostBack) || ((HttpContext.Current.Request.Form["item_action"] != null) && (HttpContext.Current.Request.Form["item_action"].Length > 0 ))) { try { // Pull the standard values NameValueCollection form = HttpContext.Current.Request.Form; string item_action = form["item_action"].Replace(",","").ToUpper().Trim(); string bookshelf_items = form["bookshelf_items"].Trim().Replace("%22", "\"").Replace("%27", "'").Replace("%3D", "=").Replace("%26", "&"); string bookshelf_params = form["bookshelf_params"].Trim(); string add_bookshelf = String.Empty; if ( form["add_bookshelf"] != null ) add_bookshelf = form["add_bookshelf"].Trim(); if (item_action == "REFRESH_FOLDER") { refresh_user_folders(RequestSpecificValues.Current_User, RequestSpecificValues.Tracer); CachedDataManager.Remove_All_User_Folder_Browses(RequestSpecificValues.Current_User.UserID, RequestSpecificValues.Tracer); } if (item_action == "DELETE_FOLDER") { int folder_id = Convert.ToInt32(bookshelf_items); SobekCM_Database.Delete_User_Folder(RequestSpecificValues.Current_User.UserID, folder_id, RequestSpecificValues.Tracer); CachedDataManager.Clear_Public_Folder_Info(folder_id, RequestSpecificValues.Tracer); refresh_user_folders(RequestSpecificValues.Current_User, RequestSpecificValues.Tracer); } if (item_action == "NEW_BOOKSHELF") { string folder_name = form["new_bookshelf_name"].Trim().Replace("<", "(").Replace(">", ")"); int parent_id = Convert.ToInt32(form["new_bookshelf_parent"]); if (SobekCM_Database.Edit_User_Folder(-1, RequestSpecificValues.Current_User.UserID, parent_id, folder_name, false, String.Empty, RequestSpecificValues.Tracer) > 0) { refresh_user_folders(RequestSpecificValues.Current_User, RequestSpecificValues.Tracer); } } if ( item_action == "FOLDER_VISIBILITY" ) { User_Folder thisFolder = RequestSpecificValues.Current_User.Get_Folder(bookshelf_items); if (bookshelf_params.ToUpper() == "PRIVATE") { if (SobekCM_Database.Edit_User_Folder(thisFolder.Folder_ID, RequestSpecificValues.Current_User.UserID, -1, thisFolder.Folder_Name, false, String.Empty, RequestSpecificValues.Tracer) >= 0) thisFolder.IsPublic = false; CachedDataManager.Clear_Public_Folder_Info(thisFolder.Folder_ID, RequestSpecificValues.Tracer); } if (bookshelf_params.ToUpper() == "PUBLIC") { if (SobekCM_Database.Edit_User_Folder(thisFolder.Folder_ID, RequestSpecificValues.Current_User.UserID, -1, thisFolder.Folder_Name, true, String.Empty, RequestSpecificValues.Tracer) >= 0 ) thisFolder.IsPublic = true; } } if ((item_action == "REMOVE") || ( item_action == "MOVE" )) { if (bookshelf_items.IndexOf("|") > 0) { string[] split_multi_items = bookshelf_items.Split("|".ToCharArray()); foreach (string[] split in split_multi_items.Select(ThisItem => ThisItem.Split("_".ToCharArray())).Where(Split => Split.Length == 2)) { SobekCM_Database.Delete_Item_From_User_Folder(RequestSpecificValues.Current_User.UserID, properFolderName, split[0], split[1], RequestSpecificValues.Tracer); if (item_action == "MOVE") { SobekCM_Database.Add_Item_To_User_Folder(RequestSpecificValues.Current_User.UserID, add_bookshelf, split[0], split[1], 0, String.Empty, RequestSpecificValues.Tracer); } } // Ensure this RequestSpecificValues.Current_User folder is not sitting in the cache CachedDataManager.Remove_User_Folder_Browse(RequestSpecificValues.Current_User.UserID, properFolderName, RequestSpecificValues.Tracer); CachedDataManager.Clear_Public_Folder_Info(current_folder_id, RequestSpecificValues.Tracer); if (item_action == "MOVE") { CachedDataManager.Remove_User_Folder_Browse(RequestSpecificValues.Current_User.UserID, add_bookshelf, RequestSpecificValues.Tracer); User_Folder moved_to_folder = RequestSpecificValues.Current_User.Get_Folder(add_bookshelf); if (moved_to_folder != null) { CachedDataManager.Clear_Public_Folder_Info(moved_to_folder.Folder_ID, RequestSpecificValues.Tracer); } } } else { string[] split = bookshelf_items.Split("_".ToCharArray()); if (split.Length == 2) { SobekCM_Database.Delete_Item_From_User_Folder(RequestSpecificValues.Current_User.UserID, properFolderName, split[0], split[1], RequestSpecificValues.Tracer); if (item_action == "MOVE") { SobekCM_Database.Add_Item_To_User_Folder(RequestSpecificValues.Current_User.UserID, add_bookshelf, split[0], split[1], 1, String.Empty, RequestSpecificValues.Tracer); } } // Ensure this RequestSpecificValues.Current_User folder is not sitting in the cache CachedDataManager.Remove_User_Folder_Browse(RequestSpecificValues.Current_User.UserID, properFolderName, RequestSpecificValues.Tracer); CachedDataManager.Clear_Public_Folder_Info(current_folder_id, RequestSpecificValues.Tracer); if (item_action == "MOVE") { CachedDataManager.Remove_User_Folder_Browse(RequestSpecificValues.Current_User.UserID, add_bookshelf, RequestSpecificValues.Tracer); User_Folder moved_to_folder = RequestSpecificValues.Current_User.Get_Folder(add_bookshelf); if (moved_to_folder != null) { CachedDataManager.Clear_Public_Folder_Info(moved_to_folder.Folder_ID, RequestSpecificValues.Tracer); } } } } if ( item_action == "EMAIL" ) { string comments = form["email_comments"].Trim().Replace(">",")").Replace("<","("); string email = form["email_address"].Trim(); string format = HttpContext.Current.Request.Form["email_format"].Trim().ToUpper(); string[] split = bookshelf_items.Split("_".ToCharArray()); if (split.Length == 2) { SobekCM_Assistant newAssistant = new SobekCM_Assistant(); SobekCM_Item newItem; Page_TreeNode newPage; SobekCM_Items_In_Title itemsInTitle; newAssistant.Get_Item(RequestSpecificValues.Current_Mode, UI_ApplicationCache_Gateway.Items, UI_ApplicationCache_Gateway.Settings.Servers.Image_URL, null, RequestSpecificValues.Current_User, RequestSpecificValues.Tracer, out newItem, out newPage, out itemsInTitle ); SobekCM_Database.Add_Item_To_User_Folder(RequestSpecificValues.Current_User.UserID, add_bookshelf, split[0], split[1], 1, comments, RequestSpecificValues.Tracer); // Determine the email format bool is_html_format = (format != "TEXT"); // Send this email // Item_Email_Helper.Send_Email(email, String.Empty, comments, RequestSpecificValues.Current_User.Full_Name, RequestSpecificValues.Current_Mode.Instance_Abbreviation, newItem, is_html_format, RequestSpecificValues.Current_Mode.Base_URL + newItem.BibID + "/" + newItem.VID, RequestSpecificValues.Current_User.UserID); } } if ( item_action == "EDIT_NOTES" ) { string notes = form["add_notes"].Trim().Replace(">",")").Replace("<","("); string[] split = bookshelf_items.Split("_".ToCharArray()); if (split.Length == 2) { SobekCM_Database.Add_Item_To_User_Folder(RequestSpecificValues.Current_User.UserID, add_bookshelf, split[0], split[1], 1, notes, RequestSpecificValues.Tracer); CachedDataManager.Remove_User_Folder_Browse(RequestSpecificValues.Current_User.UserID, add_bookshelf, RequestSpecificValues.Tracer); } } } catch(Exception) { // Catches any errors which may occur. User will be sent back to the same URL, // so any error that occurs should be obvious to the RequestSpecificValues.Current_User } string return_url = HttpContext.Current.Items["Original_URL"].ToString(); HttpContext.Current.Response.Redirect(return_url, false); HttpContext.Current.ApplicationInstance.CompleteRequest(); RequestSpecificValues.Current_Mode.Request_Completed = true; } }
/// <summary> Constructor for a new instance of the Folder_Mgmt_MySobekViewer class </summary> /// <param name="User"> Authenticated user information </param> /// <param name="Results_Statistics"> Information about the entire set of results for the current folder </param> /// <param name="Paged_Results"> Single page of results for the current folder, within the entire set </param> /// <param name="Code_Manager"> Code manager object maintains mapping between SobekCM codes and greenstone codes (used by result_dataset_html_subwriter)</param> /// <param name="Item_List"> Object for pulling additional information about each item during display </param> /// <param name="currentCollection"> Current item aggregation [UNUSED?] </param> /// <param name="htmlSkin"> HTML interface, which determines the header, footer, stylesheet, and other design elements for the rendered HTML</param> /// <param name="Translator"> Translation / language support object for writing the user interface is multiple languages</param> /// <param name="currentMode"> Mode / navigation information for the current request</param> /// <param name="Tracer">Trace object keeps a list of each method executed and important milestones in rendering</param> public Folder_Mgmt_MySobekViewer(User_Object User, Search_Results_Statistics Results_Statistics, List<iSearch_Title_Result> Paged_Results, Aggregation_Code_Manager Code_Manager, Item_Lookup_Object Item_List, Item_Aggregation currentCollection, SobekCM_Skin_Object htmlSkin, Language_Support_Info Translator, SobekCM_Navigation_Object currentMode, Custom_Tracer Tracer) : base(User) { Tracer.Add_Trace("Folder_Mgmt_MySobekViewer.Constructor", String.Empty); user = User; pagedResults = Paged_Results; resultsStatistics = Results_Statistics; codeManager = Code_Manager; itemList = Item_List; this.htmlSkin = htmlSkin; base.Translator = Translator; this.currentCollection = currentCollection; properFolderName = String.Empty; int current_folder_id = -1; if (currentMode.My_Sobek_SubMode.Length > 0) { // Try to get this user folder from the user object User_Folder userFolder = user.Get_Folder( currentMode.My_Sobek_SubMode ); // If the user folder is null, then this folder is not in the current user object // This may still be a valid folder though. Check this by pulling folder list for this // user again if (userFolder == null) { // Get the user from the database again User_Object checkFolderUser = SobekCM_Database.Get_User(user.UserID, Tracer); // Look for this folder in the new user object userFolder = checkFolderUser.Get_Folder(currentMode.My_Sobek_SubMode); if (userFolder == null) { // Invalid folder.. should not have gotten this far though HttpContext.Current.Response.Redirect(currentMode.Base_URL); } else { // Save this to the user so this does not have to happen again user.Add_Folder(userFolder); } } // Get the proper name and folder id Debug.Assert(userFolder != null, "userFolder != null"); properFolderName = userFolder.Folder_Name; current_folder_id = userFolder.Folder_ID; } if ((currentMode.isPostBack) || ((HttpContext.Current.Request.Form["item_action"] != null) && (HttpContext.Current.Request.Form["item_action"].Length > 0 ))) { try { // Pull the standard values NameValueCollection form = HttpContext.Current.Request.Form; string item_action = form["item_action"].Replace(",","").ToUpper().Trim(); string bookshelf_items = form["bookshelf_items"].Trim().Replace("%22", "\"").Replace("%27", "'").Replace("%3D", "=").Replace("%26", "&"); string bookshelf_params = form["bookshelf_params"].Trim(); string add_bookshelf = String.Empty; if ( form["add_bookshelf"] != null ) add_bookshelf = form["add_bookshelf"].Trim(); if (item_action == "REFRESH_FOLDER") { refresh_user_folders(user, Tracer); Cached_Data_Manager.Remove_All_User_Folder_Browses(user.UserID, Tracer); } if (item_action == "DELETE_FOLDER") { int folder_id = Convert.ToInt32(bookshelf_items); SobekCM_Database.Delete_User_Folder(user.UserID, folder_id, Tracer); Cached_Data_Manager.Clear_Public_Folder_Info(folder_id, Tracer); refresh_user_folders(user, Tracer); } if (item_action == "NEW_BOOKSHELF") { string folder_name = form["new_bookshelf_name"].Trim().Replace("<", "(").Replace(">", ")"); int parent_id = Convert.ToInt32(form["new_bookshelf_parent"]); if (SobekCM_Database.Edit_User_Folder(-1, user.UserID, parent_id, folder_name, false, String.Empty, Tracer) > 0) { refresh_user_folders(user, Tracer); } } if ( item_action == "FOLDER_VISIBILITY" ) { User_Folder thisFolder = user.Get_Folder(bookshelf_items); if (bookshelf_params.ToUpper() == "PRIVATE") { if (SobekCM_Database.Edit_User_Folder(thisFolder.Folder_ID, user.UserID, -1, thisFolder.Folder_Name, false, String.Empty, Tracer) >= 0) thisFolder.isPublic = false; Cached_Data_Manager.Clear_Public_Folder_Info(thisFolder.Folder_ID, Tracer); } if (bookshelf_params.ToUpper() == "PUBLIC") { if (SobekCM_Database.Edit_User_Folder(thisFolder.Folder_ID, user.UserID, -1, thisFolder.Folder_Name, true, String.Empty, Tracer) >= 0 ) thisFolder.isPublic = true; } } if ((item_action == "REMOVE") || ( item_action == "MOVE" )) { if (bookshelf_items.IndexOf("|") > 0) { string[] split_multi_items = bookshelf_items.Split("|".ToCharArray()); foreach (string[] split in split_multi_items.Select(thisItem => thisItem.Split("_".ToCharArray())).Where(split => split.Length == 2)) { SobekCM_Database.Delete_Item_From_User_Folder(user.UserID, properFolderName, split[0], split[1], Tracer); if (item_action == "MOVE") { SobekCM_Database.Add_Item_To_User_Folder(user.UserID, add_bookshelf, split[0], split[1], 0, String.Empty, Tracer); } } // Ensure this user folder is not sitting in the cache Cached_Data_Manager.Remove_User_Folder_Browse(user.UserID, properFolderName, Tracer); Cached_Data_Manager.Clear_Public_Folder_Info(current_folder_id, Tracer); if (item_action == "MOVE") { Cached_Data_Manager.Remove_User_Folder_Browse(user.UserID, add_bookshelf, Tracer); User_Folder moved_to_folder = user.Get_Folder(add_bookshelf); if (moved_to_folder != null) { Cached_Data_Manager.Clear_Public_Folder_Info(moved_to_folder.Folder_ID, Tracer); } } } else { string[] split = bookshelf_items.Split("_".ToCharArray()); if (split.Length == 2) { SobekCM_Database.Delete_Item_From_User_Folder(user.UserID, properFolderName, split[0], split[1], Tracer); if (item_action == "MOVE") { SobekCM_Database.Add_Item_To_User_Folder(user.UserID, add_bookshelf, split[0], split[1], 1, String.Empty, Tracer); } } // Ensure this user folder is not sitting in the cache Cached_Data_Manager.Remove_User_Folder_Browse(user.UserID, properFolderName, Tracer); Cached_Data_Manager.Clear_Public_Folder_Info(current_folder_id, Tracer); if (item_action == "MOVE") { Cached_Data_Manager.Remove_User_Folder_Browse(user.UserID, add_bookshelf, Tracer); User_Folder moved_to_folder = user.Get_Folder(add_bookshelf); if (moved_to_folder != null) { Cached_Data_Manager.Clear_Public_Folder_Info(moved_to_folder.Folder_ID, Tracer); } } } } if ( item_action == "EMAIL" ) { string comments = form["email_comments"].Trim().Replace(">",")").Replace("<","("); string email = form["email_address"].Trim(); string format = HttpContext.Current.Request.Form["email_format"].Trim().ToUpper(); string[] split = bookshelf_items.Split("_".ToCharArray()); if (split.Length == 2) { SobekCM_Assistant newAssistant = new SobekCM_Assistant(); SobekCM_Item newItem; Page_TreeNode newPage; SobekCM_Items_In_Title itemsInTitle; newAssistant.Get_Item(currentMode, Item_List, SobekCM_Library_Settings.Image_URL, null, user, Tracer, out newItem, out newPage, out itemsInTitle ); SobekCM_Database.Add_Item_To_User_Folder(user.UserID, add_bookshelf, split[0], split[1], 1, comments, Tracer); // Determine the email format bool is_html_format = (format != "TEXT"); // Send this email Item_Email_Helper.Send_Email(email, String.Empty, comments, user.Full_Name, currentMode.SobekCM_Instance_Abbreviation, newItem, is_html_format, currentMode.Base_URL + newItem.BibID + "/" + newItem.VID); } } if ( item_action == "EDIT_NOTES" ) { string notes = form["add_notes"].Trim().Replace(">",")").Replace("<","("); string[] split = bookshelf_items.Split("_".ToCharArray()); if (split.Length == 2) { SobekCM_Database.Add_Item_To_User_Folder(user.UserID, add_bookshelf, split[0], split[1], 1, notes, Tracer); Cached_Data_Manager.Remove_User_Folder_Browse(user.UserID, add_bookshelf, Tracer); } } } catch(Exception) { // Catches any errors which may occur. User will be sent back to the same URL, // so any error that occurs should be obvious to the user } string return_url = HttpContext.Current.Items["Original_URL"].ToString(); HttpContext.Current.Response.Redirect(return_url, false); } }