/// <summary> Constructor for a new instance of the Portals_AdminViewer class </summary> /// <param name="RequestSpecificValues"> All the necessary, non-global data specific to the current request </param> public Portals_AdminViewer(RequestCache RequestSpecificValues) : base(RequestSpecificValues) { RequestSpecificValues.Tracer.Add_Trace("Portals_AdminViewer.Constructor", String.Empty); // Set action message to nothing to start and some defaults actionMessage = String.Empty; entered_portal_name = String.Empty; entered_sys_abbrev = String.Empty; entered_web_skin = String.Empty; entered_aggregation = String.Empty; entered_url_segment = String.Empty; entered_base_purl = String.Empty; // If the RequestSpecificValues.Current_User cannot edit this, go back if ((RequestSpecificValues.Current_User == null) || ((!RequestSpecificValues.Current_User.Is_System_Admin) && (!RequestSpecificValues.Current_User.Is_Portal_Admin))) { RequestSpecificValues.Current_Mode.Mode = Display_Mode_Enum.My_Sobek; RequestSpecificValues.Current_Mode.My_Sobek_Type = My_Sobek_Type_Enum.Home; UrlWriterHelper.Redirect(RequestSpecificValues.Current_Mode); return; } readOnlyMode = true; if (((RequestSpecificValues.Current_User.Is_System_Admin) && (!UI_ApplicationCache_Gateway.Settings.Servers.isHosted)) || (RequestSpecificValues.Current_User.Is_Host_Admin)) { readOnlyMode = false; } // Handle any post backs if (RequestSpecificValues.Current_Mode.isPostBack) { if (!readOnlyMode) { try { // Pull the standard values from the form NameValueCollection form = HttpContext.Current.Request.Form; string save_value = form["admin_portal_tosave"]; string action_value = form["admin_portal_action"]; // Switch, depending on the request if (action_value != null) { switch (action_value.Trim().ToLower()) { case "edit": // Get the values from the form for this new portal string edit_name = form["form_portal_name"].Trim(); string edit_abbr = form["form_portal_abbr"].Trim(); string edit_skin = form["form_portal_skin"].Trim(); string edit_aggr = String.IsNullOrEmpty(form["form_portal_aggregation"]) ? String.Empty : form["form_portal_aggregation"].Trim(); string edit_url = form["form_portal_url"].Trim(); string edit_purl = form["form_portal_purl"].Trim(); int portalid = Convert.ToInt32(save_value); // Look for this to see if this was the pre-existing default bool isDefault = UI_ApplicationCache_Gateway.URL_Portals.Default_Portal.ID == portalid; // Don't edit if the URL segment is empty and this is NOT default if ((!isDefault) && (edit_url.Trim().Length == 0)) { actionMessage = "ERROR: Non default portals MUST have a url segment associated."; } else if (edit_name.Length == 0) { actionMessage = "ERROR: Portal name is a REQUIRED field."; } else if (edit_abbr.Length == 0) { actionMessage = "ERROR: System abbreviation is a REQUIRED field"; } else { // Look for matching portal or URL segment names bool portal_name_match = false; bool url_segment_match = false; foreach (Portal thisPortal in UI_ApplicationCache_Gateway.URL_Portals.All_Portals) { if (thisPortal.ID != portalid) { if (String.Compare(thisPortal.Name, edit_name, true) == 0) { portal_name_match = true; break; } if (String.Compare(thisPortal.URL_Segment, edit_url, true) == 0) { url_segment_match = true; break; } } } if (portal_name_match) { actionMessage = "ERROR: Portal name must be unique, and that name is already in use"; } else if (url_segment_match) { actionMessage = "ERROR: URL segment must be unique, and that URL segment already exists"; } else { bool result = edit_abbr.All(C => Char.IsLetterOrDigit(C) || C == '_'); if (!result) { actionMessage = "ERROR: System abbreviation must include only letters and numbers"; edit_abbr = edit_abbr.Replace("\"", ""); } else { // Now, save this portal information int edit_id = SobekCM_Database.Edit_URL_Portal(portalid, edit_url, true, isDefault, edit_abbr, edit_name, edit_aggr, edit_skin, edit_purl, RequestSpecificValues.Tracer); if (edit_id > 0) { actionMessage = "Edited existing URL portal '" + edit_name + "'"; } else { actionMessage = "Error editing URL portal."; } } } } break; case "delete": actionMessage = SobekCM_Database.Delete_URL_Portal(Convert.ToInt32(save_value), RequestSpecificValues.Tracer) ? "URL portal deleted" : "Error deleting the URL portal"; break; case "new": // Get the values from the form for this new portal entered_portal_name = form["admin_portal_name"]; entered_sys_abbrev = form["admin_portal_abbr"]; entered_web_skin = form["admin_portal_skin"].ToLower(); entered_aggregation = form["admin_portal_aggregation"].ToLower(); entered_url_segment = form["admin_portal_url"]; entered_base_purl = form["admin_portal_purl"]; if (entered_portal_name.Length == 0) { actionMessage = "ERROR: Portal name is a REQUIRED field."; } else if (entered_sys_abbrev.Length == 0) { actionMessage = "ERROR: System abbreviation is a REQUIRED field."; } else if (entered_web_skin.Length == 0) { actionMessage = "ERROR: Default web skin is a REQUIRED field."; } else if (entered_url_segment.Length == 0) { actionMessage = "ERROR: URL segment is a REQUIRED field."; } else { // Look for matching portal or URL segment names bool portal_name_match = false; bool url_segment_match = false; foreach (Portal thisPortal in UI_ApplicationCache_Gateway.URL_Portals.All_Portals) { if (String.Compare(thisPortal.Name, entered_portal_name, true) == 0) { portal_name_match = true; break; } if (String.Compare(thisPortal.URL_Segment, entered_url_segment, true) == 0) { url_segment_match = true; break; } } if (portal_name_match) { actionMessage = "ERROR: Portal name must be unique, and that name is already in use"; } else if (url_segment_match) { actionMessage = "ERROR: URL segment must be unique, and that URL segment already exists"; } else { bool result = entered_sys_abbrev.All(C => Char.IsLetterOrDigit(C) || C == '_'); if (!result) { actionMessage = "ERROR: System abbreviation must include only letters and numbers"; entered_sys_abbrev = entered_sys_abbrev.Replace("\"", ""); } else { // Save this to the database int new_id = SobekCM_Database.Edit_URL_Portal(-1, entered_url_segment, true, false, entered_sys_abbrev, entered_portal_name, entered_aggregation, entered_web_skin, entered_base_purl, RequestSpecificValues.Tracer); if (new_id > 0) { actionMessage = "Saved new URL portal '" + entered_portal_name + "'"; entered_portal_name = String.Empty; entered_sys_abbrev = String.Empty; entered_web_skin = String.Empty; entered_aggregation = String.Empty; entered_url_segment = String.Empty; entered_base_purl = String.Empty; } else { actionMessage = "Error saving URL portal."; } } } } break; } } } catch { actionMessage = "Exception caught while handling request"; } // Reload all the URL UI_ApplicationCache_Gateway.URL_Portals Engine_Database.Populate_URL_Portals(UI_ApplicationCache_Gateway.URL_Portals, RequestSpecificValues.Tracer); } } }
/// <summary> Constructor for a new instance of the Portals_AdminViewer class </summary> /// <param name="User"> Authenticated user information </param> /// <param name="Current_Mode"> Mode / navigation information for the current request</param> /// <param name="URL_Portals"> List of all web portals into this system </param> /// <param name="Tracer">Trace object keeps a list of each method executed and important milestones in rendering</param> public Portals_AdminViewer(User_Object User, SobekCM_Navigation_Object Current_Mode, Portal_List URL_Portals, Custom_Tracer Tracer) : base(User) { Tracer.Add_Trace("Portals_AdminViewer.Constructor", String.Empty); portals = URL_Portals; // Save the mode currentMode = Current_Mode; // Set action message to nothing to start actionMessage = String.Empty; // If the user cannot edit this, go back if (!user.Is_System_Admin) { Current_Mode.My_Sobek_Type = My_Sobek_Type_Enum.Home; HttpContext.Current.Response.Redirect(Current_Mode.Redirect_URL()); } // Handle any post backs if (Current_Mode.isPostBack) { try { // Pull the standard values from the form NameValueCollection form = HttpContext.Current.Request.Form; string save_value = form["admin_portal_tosave"]; string action_value = form["admin_portal_action"]; // Switch, depending on the request if (action_value != null) { switch (action_value.Trim().ToLower()) { case "edit": // Get the values from the form for this new portal string edit_name = form["form_portal_name"].Trim(); string edit_abbr = form["form_portal_abbr"].Trim(); string edit_skin = form["form_portal_skin"].Trim(); string edit_aggr = form["form_portal_aggregation"].Trim(); string edit_url = form["form_portal_url"].Trim(); string edit_purl = form["form_portal_purl"].Trim(); int portalid = Convert.ToInt32(save_value); // Look for this to see if this was the pre-existing default bool isDefault = false; if (portals.Default_Portal.ID == portalid) { isDefault = true; } // Don't edit if the URL segment is empty and this is NOT default if ((!isDefault) && (edit_url.Trim().Length == 0)) { actionMessage = "ERROR: Non default portals MUST have a url segment associated."; } else { // Now, save this portal information int edit_id = SobekCM_Database.Edit_URL_Portal(portalid, edit_url, true, isDefault, edit_abbr, edit_name, edit_aggr, edit_skin, edit_purl, Tracer); if (edit_id > 0) { actionMessage = "Edited existing URL portal '" + edit_name + "'"; } else { actionMessage = "Error editing URL portal."; } } break; case "delete": actionMessage = SobekCM_Database.Delete_URL_Portal(Convert.ToInt32(save_value), Tracer) ? "URL portal deleted" : "Error deleting the URL portal"; break; case "new": // Get the values from the form for this new portal string new_name = form["admin_portal_name"]; string new_abbr = form["admin_portal_abbr"]; string new_skin = form["admin_portal_skin"]; string new_aggr = form["admin_portal_aggregation"]; string new_url = form["admin_portal_url"]; string new_purl = form["admin_portal_purl"]; // Save this to the database int new_id = SobekCM_Database.Edit_URL_Portal(-1, new_url, true, false, new_abbr, new_name, new_aggr, new_skin, new_purl, Tracer); if (new_id > 0) { actionMessage = "Saved new URL portal '" + new_name + "'"; } else { actionMessage = "Error saving URL portal."; } break; } } } catch (Exception) { actionMessage = "Exception caught while handling request"; } // Reload all the URL portals SobekCM_Database.Populate_URL_Portals(portals, Tracer); } }