public Item_HtmlSubwriter( RequestCache RequestSpecificValues)
: base(RequestSpecificValues)
{
// First, check that the menu provider was created
if (menuProvider == null)
{
// Was there some configuration information?
if (UI_ApplicationCache_Gateway.Configuration.UI.WriterViewers.Items.MainMenu != null)
{
if ((UI_ApplicationCache_Gateway.Configuration.UI.WriterViewers.Items.MainMenu.Class == "SobekCM.Library.ItemViewer.Menu.StandardItemMenuProvider") && (String.IsNullOrWhiteSpace(UI_ApplicationCache_Gateway.Configuration.UI.WriterViewers.Items.MainMenu.Assembly)))
menuProvider = new StandardItemMenuProvider();
else
{
try
{
string assemblyName = UI_ApplicationCache_Gateway.Configuration.UI.WriterViewers.Items.MainMenu.Assembly;
string assemblyFilePath = Engine_ApplicationCache_Gateway.Configuration.Extensions.Get_Assembly(assemblyName);
Assembly dllAssembly = Assembly.LoadFrom(assemblyFilePath);
Type readerWriterType = dllAssembly.GetType(UI_ApplicationCache_Gateway.Configuration.UI.WriterViewers.Items.MainMenu.Class);
menuProvider = (iItemMenuProvider)Activator.CreateInstance(readerWriterType);
}
catch (Exception)
{
// Do nothing here... will be fixed in the next couple lines of code
}
}
}
// Finally, just set to the standard if there was a problem
if ( menuProvider == null )
menuProvider = new StandardItemMenuProvider();
}
// Add the trace
if (RequestSpecificValues.Tracer != null)
RequestSpecificValues.Tracer.Add_Trace("Item_HtmlSubwriter.Constructor");
showZoomable = (String.IsNullOrEmpty(UI_ApplicationCache_Gateway.Settings.Servers.JP2ServerUrl));
searchResultsCount = 0;
// Determine if the TOC should be shown
showToc = false;
if (HttpContext.Current.Session["Show TOC"] != null)
{
Boolean.TryParse(HttpContext.Current.Session["Show TOC"].ToString(), out showToc);
}
// Try to get the current item
currentItem = SobekEngineClient.Items.Get_Item_Brief(RequestSpecificValues.Current_Mode.BibID, RequestSpecificValues.Current_Mode.VID, true, RequestSpecificValues.Tracer);
RequestSpecificValues.Current_Mode.VID = currentItem.VID;
// Ensure the UI portion has been configured for this user interface
ItemViewer_Factory.Configure_Brief_Item_Viewers(currentItem);
// Set some flags based on the resource type
is_bib_level = (String.Compare(currentItem.VID, "00000", StringComparison.OrdinalIgnoreCase) == 0);
is_ead = (String.Compare(currentItem.Type, "EAD", StringComparison.OrdinalIgnoreCase) == 0);
// Look for TEI-type item
is_tei = false;
if ((UI_ApplicationCache_Gateway.Configuration.Extensions != null) &&
(UI_ApplicationCache_Gateway.Configuration.Extensions.Get_Extension("TEI") != null) &&
(UI_ApplicationCache_Gateway.Configuration.Extensions.Get_Extension("TEI").Enabled))
{
string tei_file = currentItem.Behaviors.Get_Setting("TEI.Source_File");
string xslt_file = currentItem.Behaviors.Get_Setting("TEI.XSLT");
if ((tei_file != null) && (xslt_file != null))
{
is_tei = true;
}
}
// Determine if this user can edit this item
userCanEditItem = false;
if (RequestSpecificValues.Current_User != null)
{
userCanEditItem = RequestSpecificValues.Current_User.Can_Edit_This_Item(currentItem.BibID, currentItem.Type, currentItem.Behaviors.Source_Institution_Aggregation, currentItem.Behaviors.Holding_Location_Aggregation, currentItem.Behaviors.Aggregation_Code_List );
}
// Check that this item is not checked out by another user
itemCheckedOutByOtherUser = false;
if (currentItem.Behaviors.Single_Use)
{
if (!Engine_ApplicationCache_Gateway.Checked_List.Check_Out(currentItem.Web.ItemID, HttpContext.Current.Request.UserHostAddress))
{
itemCheckedOutByOtherUser = true;
}
}
// Check to see if this is IP restricted
restriction_message = String.Empty;
if (currentItem.Behaviors.IP_Restriction_Membership > 0)
{
if (HttpContext.Current != null)
{
int user_mask = (int)HttpContext.Current.Session["IP_Range_Membership"];
int comparison = currentItem.Behaviors.IP_Restriction_Membership & user_mask;
if (comparison == 0)
{
itemRestrictedFromUserByIp = true;
int restriction = currentItem.Behaviors.IP_Restriction_Membership;
int restriction_counter = 1;
while (restriction % 2 != 1)
{
restriction = restriction >> 1;
restriction_counter++;
}
if (Engine_ApplicationCache_Gateway.IP_Restrictions[restriction_counter] != null)
restriction_message = Engine_ApplicationCache_Gateway.IP_Restrictions[restriction_counter].Item_Restricted_Statement;
else
restriction_message = "Restricted Item";
}
}
}
// If this item is restricted by IP than alot of the upcoming code is unnecessary
if ((RequestSpecificValues.Current_User != null) && ((!itemRestrictedFromUserByIp) || (userCanEditItem) || (RequestSpecificValues.Current_User.Is_Internal_User)))
{
#region Region suppressed currently - was for adding feature to a map image?
//// Searching for EAD/EAC type items is different from others
//if (!isEadTypeItem)
//{
// // If there is a coordinate search, and polygons, do that
// // GEt the geospatial metadata module
// GeoSpatial_Information geoInfo = RequestSpecificValues.Current_Item.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
// if ((geoInfo != null) && (geoInfo.hasData))
// {
// if ((currentMode.Coordinates.Length > 0) && (geoInfo.Polygon_Count > 1))
// {
// // Determine the coordinates in this search
// string[] splitter = currentMode.Coordinates.Split(",".ToCharArray());
// if (((splitter.Length > 1) && (splitter.Length < 4)) || ((splitter.Length == 4) && (splitter[2].Length == 0) && (splitter[3].Length == 0)))
// {
// Double.TryParse(splitter[0], out providedMaxLat);
// Double.TryParse(splitter[1], out providedMaxLong);
// providedMinLat = providedMaxLat;
// providedMinLong = providedMaxLong;
// }
// else if (splitter.Length >= 4)
// {
// Double.TryParse(splitter[0], out providedMaxLat);
// Double.TryParse(splitter[1], out providedMaxLong);
// Double.TryParse(splitter[2], out providedMinLat);
// Double.TryParse(splitter[3], out providedMinLong);
// }
// // Now, if there is length, determine the count of results
// searchResultsString = new List<string>();
// if (searchResultsString.Count > 0)
// {
// searchResultsCount = searchResultsString.Count;
// // Also, look to see where the current point lies in the matching, current polygon
// if ((providedMaxLong == providedMinLong) && (providedMaxLat == providedMinLat))
// {
// foreach (Coordinate_Polygon itemPolygon in geoInfo.Polygons)
// {
// // Is this the current page?
// if (itemPolygon.Page_Sequence == currentMode.Page)
// {
// if (itemPolygon.is_In_Bounding_Box(providedMaxLat, providedMaxLong))
// {
// searchMatchOnThisPage = true;
// ReadOnlyCollection<Coordinate_Point> boundingBox = itemPolygon.Bounding_Box;
// featureYRatioLocation = Math.Abs(((providedMaxLat - boundingBox[0].Latitude)/(boundingBox[0].Latitude - boundingBox[1].Latitude)));
// featureXRatioLocation = Math.Abs(((providedMaxLong - boundingBox[0].Longitude)/(boundingBox[0].Longitude - boundingBox[1].Longitude)));
// }
// }
// }
// }
// }
// }
// }
//}
#endregion
// Is this a postback?
if (RequestSpecificValues.Current_Mode.isPostBack)
{
// Handle any actions from standard user action (i.e., email, add to bookshelf, etc. )
if (HttpContext.Current.Request.Form["item_action"] != null)
{
string action = HttpContext.Current.Request.Form["item_action"].ToLower().Trim();
if (action == "email")
{
string address = HttpContext.Current.Request.Form["email_address"].Replace(";", ",").Trim();
string comments = HttpContext.Current.Request.Form["email_comments"].Trim();
string format = HttpContext.Current.Request.Form["email_format"].Trim().ToUpper();
if (address.Length > 0)
{
// Determine the email format
bool is_html_format = format != "TEXT";
// CC: the user, unless they are already on the list
string cc_list = RequestSpecificValues.Current_User.Email;
if (address.ToUpper().IndexOf(RequestSpecificValues.Current_User.Email.ToUpper()) >= 0)
cc_list = String.Empty;
// Send the email
HttpContext.Current.Session.Add("ON_LOAD_MESSAGE", !Item_Email_Helper.Send_Email(address, cc_list, comments, RequestSpecificValues.Current_User.Full_Name, RequestSpecificValues.Current_Mode.Instance_Abbreviation, currentItem, is_html_format, HttpContext.Current.Items["Original_URL"].ToString(), RequestSpecificValues.Current_User.UserID)
? "Error encountered while sending email" : "Your email has been sent");
HttpContext.Current.Response.Redirect(HttpContext.Current.Items["Original_URL"].ToString(), false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
RequestSpecificValues.Current_Mode.Request_Completed = true;
return;
}
}
if (action == "add_item")
{
string usernotes = HttpContext.Current.Request.Form["add_notes"].Trim();
string foldername = HttpContext.Current.Request.Form["add_bookshelf"].Trim();
bool open_bookshelf = HttpContext.Current.Request.Form["open_bookshelf"] != null;
if (SobekCM_Database.Add_Item_To_User_Folder(RequestSpecificValues.Current_User.UserID, foldername, currentItem.BibID, currentItem.VID, 0, usernotes, RequestSpecificValues.Tracer))
{
RequestSpecificValues.Current_User.Add_Bookshelf_Item(currentItem.BibID, currentItem.VID);
// Ensure this user folder is not sitting in the cache
CachedDataManager.Remove_User_Folder_Browse(RequestSpecificValues.Current_User.UserID, foldername, RequestSpecificValues.Tracer);
HttpContext.Current.Session.Add("ON_LOAD_MESSAGE", "Item was saved to your bookshelf.");
if (open_bookshelf)
{
HttpContext.Current.Session.Add("ON_LOAD_WINDOW", "?m=lmfl" + foldername.Replace("\"", "%22").Replace("'", "%27").Replace("=", "%3D").Replace("&", "%26") + "&vp=1");
}
}
else
{
HttpContext.Current.Session.Add("ON_LOAD_MESSAGE", "ERROR encountered while trying to save to your bookshelf.");
}
HttpContext.Current.Response.Redirect(HttpContext.Current.Items["Original_URL"].ToString(), false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
RequestSpecificValues.Current_Mode.Request_Completed = true;
return;
}
if (action == "remove")
{
if (SobekCM_Database.Delete_Item_From_User_Folders(RequestSpecificValues.Current_User.UserID, currentItem.BibID, currentItem.VID, RequestSpecificValues.Tracer))
{
RequestSpecificValues.Current_User.Remove_From_Bookshelves(currentItem.BibID, currentItem.VID);
CachedDataManager.Remove_All_User_Folder_Browses(RequestSpecificValues.Current_User.UserID, RequestSpecificValues.Tracer);
HttpContext.Current.Session.Add("ON_LOAD_MESSAGE", "Item was removed from your bookshelves.");
}
else
{
HttpContext.Current.Session.Add("ON_LOAD_MESSAGE", "ERROR encountered while trying to remove item from your bookshelves.");
}
HttpContext.Current.Response.Redirect(HttpContext.Current.Items["Original_URL"].ToString(), false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
RequestSpecificValues.Current_Mode.Request_Completed = true;
return;
}
if (action.IndexOf("add_tag") == 0)
{
int tagid = -1;
if (action.Replace("add_tag", "").Length > 0)
{
tagid = Convert.ToInt32(action.Replace("add_tag_", ""));
}
string description = HttpContext.Current.Request.Form["add_tag"].Trim();
int new_tagid = SobekCM_Database.Add_Description_Tag(RequestSpecificValues.Current_User.UserID, tagid, currentItem.Web.ItemID, description, RequestSpecificValues.Tracer);
if (new_tagid > 0)
{
currentItem.Web.Add_User_Tag(RequestSpecificValues.Current_User.UserID, RequestSpecificValues.Current_User.Full_Name, description, DateTime.Now, new_tagid);
RequestSpecificValues.Current_User.Has_Descriptive_Tags = true;
}
HttpContext.Current.Response.Redirect(HttpContext.Current.Items["Original_URL"].ToString(), false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
RequestSpecificValues.Current_Mode.Request_Completed = true;
return;
}
if (action.IndexOf("delete_tag") == 0)
{
if (action.Replace("delete_tag", "").Length > 0)
{
int tagid = Convert.ToInt32(action.Replace("delete_tag_", ""));
if (currentItem.Web.Delete_User_Tag(tagid, RequestSpecificValues.Current_User.UserID))
{
SobekCM_Database.Delete_Description_Tag(tagid, RequestSpecificValues.Tracer);
}
}
HttpContext.Current.Response.Redirect(HttpContext.Current.Items["Original_URL"].ToString(), false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
RequestSpecificValues.Current_Mode.Request_Completed = true;
return;
}
}
}
// Handle any request from the internal header for the item
if ((HttpContext.Current != null) && (HttpContext.Current.Request.Form["internal_header_action"] != null) && (RequestSpecificValues.Current_User != null))
{
// Pull the action value
string internalHeaderAction = HttpContext.Current.Request.Form["internal_header_action"].Trim();
// Was this to save the item comments?
if (internalHeaderAction == "save_comments")
{
string new_comments = HttpContext.Current.Request.Form["intheader_internal_notes"].Trim();
if (SobekCM_Item_Database.Save_Item_Internal_Comments(currentItem.Web.ItemID, new_comments))
currentItem.Web.Internal_Comments = new_comments;
}
}
}
// Set the code for bib level mets to show the volume tree by default
if ((is_bib_level) && (String.IsNullOrEmpty(RequestSpecificValues.Current_Mode.ViewerCode)))
{
RequestSpecificValues.Current_Mode.ViewerCode = "allvolumes1";
}
// If there is a file name included, look for the sequence of that file
if (!String.IsNullOrEmpty(RequestSpecificValues.Current_Mode.Page_By_FileName))
{
int page_sequence = currentItem.Page_Sequence_By_FileName(RequestSpecificValues.Current_Mode.Page_By_FileName);
if (page_sequence > 0)
{
RequestSpecificValues.Current_Mode.ViewerCode = page_sequence.ToString();
RequestSpecificValues.Current_Mode.Page = (ushort)page_sequence;
}
}
// Get the valid viewer code
RequestSpecificValues.Tracer.Add_Trace("Item_HtmlSubwriter.Add_Controls", "Getting the appropriate item viewer");
prototyper = ItemViewer_Factory.Get_Item_Viewer(currentItem, RequestSpecificValues.Current_Mode.ViewerCode);
if (( prototyper != null ) && ( prototyper.Has_Access(currentItem, RequestSpecificValues.Current_User, !String.IsNullOrEmpty(restriction_message))))
pageViewer = prototyper.Create_Viewer(currentItem, RequestSpecificValues.Current_User, RequestSpecificValues.Current_Mode, RequestSpecificValues.Tracer );
else
{
// Since the user did not have access to THAT viewer, try to find one that he does have access to
if (currentItem.UI.Viewers_By_Priority != null)
{
foreach (string viewerType in currentItem.UI.Viewers_By_Priority)
{
prototyper = ItemViewer_Factory.Get_Viewer_By_ViewType(viewerType);
if ((prototyper != null) && (prototyper.Has_Access(currentItem, RequestSpecificValues.Current_User, !String.IsNullOrEmpty(restriction_message))))
{
pageViewer = prototyper.Create_Viewer(currentItem, RequestSpecificValues.Current_User, RequestSpecificValues.Current_Mode, RequestSpecificValues.Tracer);
break;
}
}
}
}
// If execution should end, do it now
if (RequestSpecificValues.Current_Mode.Request_Completed)
return;
// If there were NO views, then pageViewer could be null
if (pageViewer == null)
pageViewer = new NoViews_ItemViewer();
RequestSpecificValues.Tracer.Add_Trace("Html_MainWriter.Add_Controls", "Created " + pageViewer.GetType().ToString().Replace("SobekCM.Library.ItemViewer.Viewers.", ""));
// Assign the rest of the information, if a page viewer was created
behaviors = new List<HtmlSubwriter_Behaviors_Enum>();
if (pageViewer != null)
{
// Get the list of any special behaviors
pageViewerBehaviors = pageViewer.ItemViewer_Behaviors;
if ( pageViewerBehaviors != null )
behaviors.AddRange(pageViewerBehaviors);
else
pageViewerBehaviors = new List<HtmlSubwriter_Behaviors_Enum>();
}
else
{
pageViewerBehaviors = new List<HtmlSubwriter_Behaviors_Enum>();
}
// ALways suppress the banner and skip to main content
if (behaviors == null)
behaviors = new List<HtmlSubwriter_Behaviors_Enum>();
if (!behaviors.Contains(HtmlSubwriter_Behaviors_Enum.Suppress_Banner))
behaviors.Add(HtmlSubwriter_Behaviors_Enum.Suppress_Banner);
if (!behaviors.Contains(HtmlSubwriter_Behaviors_Enum.Include_Skip_To_Main_Content_Link))
behaviors.Add(HtmlSubwriter_Behaviors_Enum.Include_Skip_To_Main_Content_Link);
//if ((searchMatchOnThisPage) && ((PageViewer.ItemViewer_Type == ItemViewer_Type_Enum.JPEG) || (PageViewer.ItemViewer_Type == ItemViewer_Type_Enum.JPEG2000)))
//{
// if (PageViewer.ItemViewer_Type == ItemViewer_Type_Enum.JPEG2000)
// {
// Aware_JP2_ItemViewer jp2_viewer = (Aware_JP2_ItemViewer) PageViewer;
// jp2_viewer.Add_Feature("Red", "DrawEllipse", ((int) (featureXRatioLocation*jp2_viewer.Width)), ((int) (featureYRatioLocation*jp2_viewer.Height)), 800, 800);
// }
//}
}