/// <summary> Saves the citation-only METS file for this incoming digital resource </summary> /// <returns> TRUE if successful, otherwise FALSE </returns> /// <remarks> This is used for displaying the full citation information in the browse/search FULL VIEW </remarks> public bool Save_Citation_METS() { try { bibPackage.Save_Citation_Only_METS(); return(true); } catch { return(false); } }
private void complete_item_submission(SobekCM_Item Item_To_Complete, Custom_Tracer Tracer) { // If this is a newspaper type, and the pubdate has a value, try to use that for the serial heirarchy if ((Item_To_Complete.Behaviors.Serial_Info.Count == 0) && (Item_To_Complete.Bib_Info.Origin_Info.Date_Issued.Length > 0) && (Item_To_Complete.Bib_Info.SobekCM_Type == TypeOfResource_SobekCM_Enum.Newspaper)) { DateTime asDateTime; if (DateTime.TryParse(Item_To_Complete.Bib_Info.Origin_Info.Date_Issued, out asDateTime)) { hierarchyCopiedFromDate = true; Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(1, asDateTime.Year, asDateTime.Year.ToString()); switch (asDateTime.Month) { case 1: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "January"); break; case 2: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "February"); break; case 3: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "March"); break; case 4: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "April"); break; case 5: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "May"); break; case 6: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "June"); break; case 7: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "July"); break; case 8: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "August"); break; case 9: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "September"); break; case 10: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "October"); break; case 11: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "November"); break; case 12: Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(2, asDateTime.Month, "December"); break; } Item_To_Complete.Behaviors.Serial_Info.Add_Hierarchy(3, asDateTime.Day, asDateTime.Day.ToString()); } } // Determine the in process directory for this string user_in_process_directory = SobekCM_Library_Settings.In_Process_Submission_Location + "\\" + user.UserName.Replace(".", "").Replace("@", "") + "\\newitem"; if (user.UFID.Trim().Length > 0) { user_in_process_directory = SobekCM_Library_Settings.In_Process_Submission_Location + "\\" + user.UFID + "\\newitem"; } // Ensure this directory exists if (!Directory.Exists(user_in_process_directory)) { Directory.CreateDirectory(user_in_process_directory); } // Now, delete all the files in the processing directory string[] all_files = Directory.GetFiles(user_in_process_directory); foreach (string thisFile in all_files) { File.Delete(thisFile); } // Save to the database Item_To_Complete.Web.File_Root = Item_To_Complete.BibID.Substring(0, 2) + "\\" + Item_To_Complete.BibID.Substring(2, 2) + "\\" + Item_To_Complete.BibID.Substring(4, 2) + "\\" + Item_To_Complete.BibID.Substring(6, 2) + "\\" + Item_To_Complete.BibID.Substring(8, 2); SobekCM_Database.Save_New_Digital_Resource(Item_To_Complete, false, false, user.UserName, String.Empty, -1); // Assign the file root and assoc file path Item_To_Complete.Web.AssocFilePath = Item_To_Complete.Web.File_Root + "\\" + Item_To_Complete.VID + "\\"; // Create the static html pages string base_url = currentMode.Base_URL; try { Static_Pages_Builder staticBuilder = new Static_Pages_Builder(SobekCM_Library_Settings.System_Base_URL, SobekCM_Library_Settings.Base_Data_Directory, Translator, codeManager, itemList, iconList, webSkin); string filename = user_in_process_directory + "\\" + Item_To_Complete.BibID + "_" + Item_To_Complete.VID + ".html"; staticBuilder.Create_Item_Citation_HTML(Item_To_Complete, filename, String.Empty); } catch (Exception ee) { message = message + "<br /><span style=\"color: red\"><strong>" + ee.Message + "<br />" + ee.StackTrace.Replace("\n", "<br />") + "</strong></span>"; } currentMode.Base_URL = base_url; // Save the rest of the metadata Item_To_Complete.Source_Directory = user_in_process_directory; Item_To_Complete.Save_SobekCM_METS(); Item_To_Complete.Save_Citation_Only_METS(); // Add this to the cache itemList.Add_SobekCM_Item(Item_To_Complete); Database.SobekCM_Database.Add_Item_To_User_Folder(user.UserID, "Submitted Items", Item_To_Complete.BibID, Item_To_Complete.VID, 0, String.Empty, Tracer); // Save Bib_Level METS? //SobekCM.Resource_Object.Writers.OAI_Writer oaiWriter = new SobekCM.Resource_Object.Writers.OAI_Writer(); //oaiWriter.Save_OAI_File(bibPackage, resource_folder + "\\oai_dc.xml", bibPackage.Processing_Parameters.Collection_Primary.ToLower(), createDate); // If there was no match, try to save to the tracking database Database.SobekCM_Database.Tracking_Online_Submit_Complete(Item_To_Complete.Web.ItemID, user.Full_Name, String.Empty); List <string> collectionnames = new List <string>(); MarcXML_File_ReaderWriter marcWriter = new MarcXML_File_ReaderWriter(); string Error_Message; Dictionary <string, object> options = new Dictionary <string, object>(); options["MarcXML_File_ReaderWriter:Additional_Tags"] = Item_To_Complete.MARC_Sobek_Standard_Tags(collectionnames, true, SobekCM_Library_Settings.System_Name, SobekCM_Library_Settings.System_Abbreviation); marcWriter.Write_Metadata(Item_To_Complete.Source_Directory + "\\marc.xml", Item_To_Complete, options, out Error_Message); // Copy this to all the image servers SobekCM_Library_Settings.Refresh(Database.SobekCM_Database.Get_Settings_Complete(Tracer)); string[] allFiles = Directory.GetFiles(user_in_process_directory); // Copy all the files over to the server string serverNetworkFolder = SobekCM_Library_Settings.Image_Server_Network + Item_To_Complete.Web.AssocFilePath; // Create the folder if (!Directory.Exists(serverNetworkFolder)) { Directory.CreateDirectory(serverNetworkFolder); } foreach (string thisFile in allFiles) { string destination_file = serverNetworkFolder + "\\" + (new FileInfo(thisFile)).Name; File.Copy(thisFile, destination_file, true); } // Add this to the cache itemList.Add_SobekCM_Item(Item_To_Complete); // Incrememnt the count of number of items submitted by this user user.Items_Submitted_Count++; // Delete any remaining items all_files = Directory.GetFiles(user_in_process_directory); foreach (string thisFile in all_files) { File.Delete(thisFile); } }
private void Complete_Item_Save() { if (isProject) { // Save the new project METS item.Save_METS(); // Clear the cache of this item Cached_Data_Manager.Remove_Project(user.UserID, item.BibID, null); // Redirect currentMode.Mode = Display_Mode_Enum.Administrative; currentMode.Admin_Type = Admin_Type_Enum.Projects; currentMode.My_Sobek_SubMode = String.Empty; HttpContext.Current.Response.Redirect(currentMode.Redirect_URL()); } else { // Determine the in process directory for this string user_bib_vid_process_directory = SobekCM_Library_Settings.In_Process_Submission_Location + "\\" + user.UFID + "\\metadata_updates\\" + item.BibID + "_" + item.VID; if (user.UFID.Trim().Length == 0) { user_bib_vid_process_directory = SobekCM_Library_Settings.In_Process_Submission_Location + "\\" + user.UserName.Replace(".", "").Replace("@", "") + "\\metadata_updates\\" + item.BibID + "_" + item.VID; } // Ensure the folder exists and is empty to start with if (!Directory.Exists(user_bib_vid_process_directory)) { Directory.CreateDirectory(user_bib_vid_process_directory); } else { // Anything older than a day should be deleted string[] files = Directory.GetFiles(user_bib_vid_process_directory); foreach (string thisFile in files) { try { File.Delete(thisFile); } catch (Exception) { // Not much to do here } } } // Update the METS file with METS note and name item.METS_Header.Creator_Individual = user.UserName; item.METS_Header.Modify_Date = DateTime.Now; item.METS_Header.RecordStatus_Enum = METS_Record_Status.METADATA_UPDATE; // Save the METS file and related items bool successful_save = true; try { SobekCM_Database.Save_Digital_Resource(item, DateTime.Now, true); } catch { successful_save = false; } // Create the static html pages string base_url = currentMode.Base_URL; try { Static_Pages_Builder staticBuilder = new Static_Pages_Builder(SobekCM_Library_Settings.System_Base_URL, SobekCM_Library_Settings.Base_Data_Directory, Translator, codeManager, itemList, iconList, webSkin); string filename = user_bib_vid_process_directory + "\\" + item.BibID + "_" + item.VID + ".html"; staticBuilder.Create_Item_Citation_HTML(item, filename, SobekCM_Library_Settings.Image_Server_Network + item.Web.AssocFilePath); } catch (Exception) { // Failing to make the static page is not the worst thing in the world... } currentMode.Base_URL = base_url; item.Source_Directory = user_bib_vid_process_directory; item.Save_SobekCM_METS(); item.Save_Citation_Only_METS(); // If this was not able to be saved in the UFDC database, try it again if (!successful_save) { SobekCM_Database.Save_Digital_Resource(item, DateTime.Now, false); } // Make sure the progress has been added to this item's work log try { Database.SobekCM_Database.Tracking_Online_Edit_Complete(item.Web.ItemID, user.Full_Name, String.Empty); } catch (Exception) { // This is not critical } List <string> collectionnames = new List <string>(); MarcXML_File_ReaderWriter marcWriter = new MarcXML_File_ReaderWriter(); string Error_Message; Dictionary <string, object> options = new Dictionary <string, object>(); options["MarcXML_File_ReaderWriter:Additional_Tags"] = item.MARC_Sobek_Standard_Tags(collectionnames, true, SobekCM_Library_Settings.System_Name, SobekCM_Library_Settings.System_Abbreviation); marcWriter.Write_Metadata(item.Source_Directory + "\\marc.xml", item, options, out Error_Message); // Copy this to all the image servers SobekCM_Library_Settings.Refresh(Database.SobekCM_Database.Get_Settings_Complete(null)); string[] allFiles = Directory.GetFiles(user_bib_vid_process_directory); string serverNetworkFolder = SobekCM_Library_Settings.Image_Server_Network + item.Web.AssocFilePath; // Create the folder if (!Directory.Exists(serverNetworkFolder)) { Directory.CreateDirectory(serverNetworkFolder); } else { // Rename any existing standard mets to keep a backup if (File.Exists(serverNetworkFolder + "\\" + item.BibID + "_" + item.VID + ".mets.xml")) { FileInfo currentMetsFileInfo = new FileInfo(serverNetworkFolder + "\\" + item.BibID + "_" + item.VID + ".mets.xml"); DateTime lastModDate = currentMetsFileInfo.LastWriteTime; File.Copy(serverNetworkFolder + "\\" + item.BibID + "_" + item.VID + ".mets.xml", serverNetworkFolder + "\\" + item.BibID + "_" + item.VID + "_" + lastModDate.Year + "_" + lastModDate.Month + "_" + lastModDate.Day + ".mets.bak", true); } } foreach (string thisFile in allFiles) { string destination_file = serverNetworkFolder + "\\" + (new FileInfo(thisFile)).Name; File.Copy(thisFile, destination_file, true); } // Copy the static HTML file as well try { if (!Directory.Exists(SobekCM_Library_Settings.Static_Pages_Location + item.BibID.Substring(0, 2) + "\\" + item.BibID.Substring(2, 2) + "\\" + item.BibID.Substring(4, 2) + "\\" + item.BibID.Substring(6, 2) + "\\" + item.BibID.Substring(8))) { Directory.CreateDirectory(SobekCM_Library_Settings.Static_Pages_Location + item.BibID.Substring(0, 2) + "\\" + item.BibID.Substring(2, 2) + "\\" + item.BibID.Substring(4, 2) + "\\" + item.BibID.Substring(6, 2) + "\\" + item.BibID.Substring(8)); } if (File.Exists(user_bib_vid_process_directory + "\\" + item.BibID + "_" + item.VID + ".html")) { File.Copy(user_bib_vid_process_directory + "\\" + item.BibID + "_" + item.VID + ".html", SobekCM_Library_Settings.Static_Pages_Location + item.BibID.Substring(0, 2) + "\\" + item.BibID.Substring(2, 2) + "\\" + item.BibID.Substring(4, 2) + "\\" + item.BibID.Substring(6, 2) + "\\" + item.BibID.Substring(8) + "\\" + item.BibID + "_" + item.VID + ".html", true); } } catch (Exception) { // This is not critical } // Add this to the cache itemList.Add_SobekCM_Item(item, false); // Now, delete all the files here string[] all_files = Directory.GetFiles(user_bib_vid_process_directory); foreach (string thisFile in all_files) { File.Delete(thisFile); } // Clear the user-specific and global cache of this item Cached_Data_Manager.Remove_Digital_Resource_Object(user.UserID, item.BibID, item.VID, null); Cached_Data_Manager.Remove_Digital_Resource_Object(item.BibID, item.VID, null); Cached_Data_Manager.Remove_Items_In_Title(item.BibID, null); // Forward to the display item again currentMode.Mode = Display_Mode_Enum.Item_Display; currentMode.ViewerCode = "citation"; HttpContext.Current.Response.Redirect(currentMode.Redirect_URL()); } }