/// <summary> Refresh the web skin collection by pulling the data back from the database </summary>
        /// <returns> TRUE if successful, otherwise FALSE </returns>
        public static bool RefreshWebSkins()
        {
            try
            {
                lock (webSkinsLock)
                {
                    if (webSkins == null)
                    {
                        webSkins = new Web_Skin_Collection();
                    }

                    Web_Skin_Utilities.Populate_Default_Skins(webSkins, null);
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
예제 #2
0
        /// <summary> Constructor for a new instance of the Skins_AdminViewer class </summary>
        /// <param name="RequestSpecificValues"> All the necessary, non-global data specific to the current request </param>
        /// <remarks> Postback from handling an edit or new html skin is handled here in the constructor </remarks>
        public Skins_AdminViewer(RequestCache RequestSpecificValues)  : base(RequestSpecificValues)
        {
            RequestSpecificValues.Tracer.Add_Trace("Skins_AdminViewer.Constructor", String.Empty);

            // Set action message to nothing to start
            actionMessage = String.Empty;

            // If the RequestSpecificValues.Current_User cannot edit this, go back
            if ((!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;
            }

            // If this is a postback, handle any events first
            if (RequestSpecificValues.Current_Mode.isPostBack)
            {
                try
                {
                    // Pull the standard values
                    NameValueCollection form = HttpContext.Current.Request.Form;

                    string reset_value        = form["admin_interface_reset"].ToLower();
                    string save_value         = form["admin_interface_tosave"].ToUpper().Trim();
                    string delete_value       = form["admin_interface_delete"].ToUpper().Trim();
                    string new_interface_code = form["admin_interface_code"].ToUpper().Trim();

                    // Was this a reset request?
                    if (reset_value.Length > 0)
                    {
                        RequestSpecificValues.Tracer.Add_Trace("Skins_AdminViewer.Constructor", "Reset html skin '" + reset_value + "'");

                        int values_cleared = CachedDataManager.WebSkins.Remove_Skin(reset_value, RequestSpecificValues.Tracer);

                        if (values_cleared == 0)
                        {
                            actionMessage = "Html skin <i>" + reset_value.ToUpper() + "</i> was not in the application cache";
                        }
                        else
                        {
                            actionMessage = "Removed " + values_cleared + " values from the cache for <i>" + reset_value.ToUpper() + "</i>";
                        }
                    }
                    else if (delete_value.Length > 0)
                    {
                        if (RequestSpecificValues.Current_User.Is_System_Admin)
                        {
                            RequestSpecificValues.Tracer.Add_Trace("Skins_AdminViewer.Constructor", "Delete skin '" + delete_value + "' from the database");


                            // Delete from the database
                            if (SobekCM_Database.Delete_Web_Skin(delete_value, false, RequestSpecificValues.Tracer))
                            {
                                // Set the deleted wordmark message
                                actionMessage = "Deleted web skin <i>" + delete_value + "</i>";

                                // Remove this web skin from the collection
                                Web_Skin_Utilities.Populate_Default_Skins(UI_ApplicationCache_Gateway.Web_Skin_Collection, RequestSpecificValues.Tracer);

                                // If this was your current web skin, forward
                                if (String.Compare(delete_value, RequestSpecificValues.HTML_Skin.Skin_Code, StringComparison.InvariantCultureIgnoreCase) == 0)
                                {
                                    RequestSpecificValues.Current_Mode.Skin_In_URL = false;
                                    RequestSpecificValues.Current_Mode.Skin        = null;
                                    UrlWriterHelper.Redirect(RequestSpecificValues.Current_Mode);
                                }
                            }
                            else
                            {
                                // Report the error
                                if (SobekCM_Database.Last_Exception == null)
                                {
                                    actionMessage = "Error: Unable to delete web skin <i>" + delete_value + "</i> since it is linked to an item, aggregation, or portal";
                                }
                                else
                                {
                                    actionMessage = "Unknown error while deleting web skin <i>" + delete_value + "</i>";
                                }
                            }
                        }
                    }
                    else
                    {
                        // Or.. was this a save request
                        if (save_value.Length > 0)
                        {
                            RequestSpecificValues.Tracer.Add_Trace("Skins_AdminViewer.Constructor", "Save html skin '" + save_value + "'");

                            bool   override_banner  = false;
                            bool   override_header  = false;
                            bool   suppress_top_nav = false;
                            bool   copycurrent      = false;
                            object temp_object;

                            // Was this to save a new interface (from the main page) or edit an existing (from the popup form)?
                            if (save_value == new_interface_code)
                            {
                                string new_base_code   = form["admin_interface_basecode"].ToUpper().Trim();
                                string new_banner_link = form["admin_interface_link"].Trim();
                                string new_notes       = form["admin_interface_notes"].Trim();

                                temp_object = form["admin_interface_banner_override"];
                                if (temp_object != null)
                                {
                                    override_banner = true;
                                }

                                temp_object = form["admin_interface_top_nav"];
                                if (temp_object != null)
                                {
                                    suppress_top_nav = true;
                                }

                                temp_object = form["admin_interface_copycurrent"];
                                if (temp_object != null)
                                {
                                    copycurrent = true;
                                }

                                // Only real validation needed is that this is a new wek skin name and is alphanumeric
                                bool result           = save_value.All(C => Char.IsLetterOrDigit(C) || C == '_');
                                bool existing_already = UI_ApplicationCache_Gateway.Web_Skin_Collection.Ordered_Skin_Codes.Any(ThisSkinCode => String.Equals(ThisSkinCode, save_value, StringComparison.CurrentCultureIgnoreCase));

                                if ((!result) || (existing_already))
                                {
                                    actionMessage = !result ? "ERROR: New web skin code must be only letters and numbers" : "ERROR: New web skin code already exists!";
                                }
                                else
                                {
                                    // Save this new interface
                                    if (SobekCM_Database.Save_Web_Skin(save_value, new_base_code, override_banner, true, new_banner_link, new_notes, suppress_top_nav, RequestSpecificValues.Tracer))
                                    {
                                        // Ensure a folder exists for this, otherwise create one
                                        try
                                        {
                                            string folder = UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins/" + save_value.ToLower();
                                            if (!Directory.Exists(folder))
                                            {
                                                // Create this directory and the necessary subdirectories
                                                Directory.CreateDirectory(folder);

                                                // Create a default stylesheet
                                                StreamWriter writer = new StreamWriter(folder + "\\" + save_value.ToLower() + ".css");
                                                writer.WriteLine("/*  Skin-specific stylesheet used to override values from the base stylesheets */");
                                                writer.WriteLine();
                                                writer.WriteLine();
                                                writer.Flush();
                                                writer.Close();

                                                // Create the html subdirectory
                                                Directory.CreateDirectory(folder + "/html");

                                                // Do the rest differently depending on whether we should copy the current files
                                                if (!copycurrent)
                                                {
                                                    // Write the default header file
                                                    writer = new StreamWriter(folder + "\\html\\header.html");
                                                    writer.WriteLine("<div id=\"container-inner\">");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<!-- Add the standard header buttons -->");
                                                    writer.WriteLine("<div style=\"width: 100%; background-color: #eeeeee; color: Black; height:30px;\">");
                                                    writer.WriteLine("<%BREADCRUMBS%>");
                                                    writer.WriteLine("<div style=\"float: right\"><%MYSOBEK%></div>");
                                                    writer.WriteLine("</div>");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<%BANNER%>");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<div id=\"pagecontainer\">");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<!-- Blankets out the rest of the web form when a pop-up form is envoked -->");
                                                    writer.WriteLine("<div id=\"blanket_outer\" style=\"display:none;\"></div>");
                                                    writer.Flush();
                                                    writer.Close();

                                                    // Write the default header_item file
                                                    writer = new StreamWriter(folder + "/html/header_item.html");
                                                    writer.WriteLine("<!-- Blankets out the rest of the web form when a pop-up form is envoked -->");
                                                    writer.WriteLine("<div id=\"blanket_outer\" style=\"display:none;\"></div>");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<!-- Add the standard header buttons -->");
                                                    writer.WriteLine("<div style=\"width: 100%; background-color: #eeeeee; color: Black; height:30px;\">");
                                                    writer.WriteLine("<%BREADCRUMBS%>");
                                                    writer.WriteLine("<div style=\"float: right\"><%MYSOBEK%></div>");
                                                    writer.WriteLine("</div>");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<%BANNER%>");
                                                    writer.Flush();
                                                    writer.Close();

                                                    // Write the default footer file
                                                    writer = new StreamWriter(folder + "/html/footer.html");
                                                    writer.WriteLine("</div> <!-- END PAGE CONTAINER DIV -->");
                                                    writer.WriteLine();
                                                    writer.WriteLine("<!-- Add most the standard footer buttons -->");
                                                    writer.WriteLine("<center>");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>contact<%?URLOPTS%>\">Contact Us</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>preferences<%?URLOPTS%>\">Preferences</a> | ");
                                                    writer.WriteLine("<a href=\"http://ufdc.ufl.edu/sobekcm\">Technical Aspects</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>stats<%?URLOPTS%>\">Statistics</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>internal<%?URLOPTS%>\">Internal</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>admin<%?URLOPTS%>\">Admin</a>");
                                                    writer.WriteLine("</center>");
                                                    writer.WriteLine("<br />");
                                                    writer.WriteLine("<br />");
                                                    writer.WriteLine("<span style=\"color: Gray; font-size: 0.8em;\">");
                                                    writer.WriteLine("To edit this footer or header, edit header.html or footer.html at:  " + folder + "\\html\\ <br />");
                                                    writer.WriteLine("</span>");
                                                    writer.WriteLine();
                                                    writer.WriteLine("</div> <!-- END CONTAINER INNER -->");
                                                    writer.Flush();
                                                    writer.Close();

                                                    // Write the default footer item file
                                                    writer = new StreamWriter(folder + "/html/footer_item.html");
                                                    writer.WriteLine("<!-- Add most the standard footer buttons -->");
                                                    writer.WriteLine("<center>");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>contact<%?URLOPTS%>\">Contact Us</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>preferences<%?URLOPTS%>\">Preferences</a> | ");
                                                    writer.WriteLine("<a href=\"http://ufdc.ufl.edu/sobekcm\">Technical Aspects</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>stats<%?URLOPTS%>\">Statistics</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>internal<%?URLOPTS%>\">Internal</a> | ");
                                                    writer.WriteLine("<a href=\"<%BASEURL%>admin<%?URLOPTS%>\">Admin</a>");
                                                    writer.WriteLine("</center>");
                                                    writer.WriteLine("<br />");
                                                    writer.WriteLine("<br />");
                                                    writer.WriteLine("<span style=\"color: Gray; font-size: 0.8em;\">");
                                                    writer.WriteLine("To edit this footer or header, edit header.html or footer.html at:  " + folder + "\\html\\ <br />");
                                                    writer.WriteLine("</span>");
                                                    writer.Flush();
                                                    writer.Close();
                                                }
                                                else
                                                {
                                                    // Copy the web skin information over?
                                                    string current_web_skin   = RequestSpecificValues.Current_Mode.Skin;
                                                    string current_web_folder = UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins/" + current_web_skin;
                                                    copy_entire_folder(current_web_folder, folder);
                                                    //if (File.Exists(current_web_folder + "\\" + current_web_skin + ".css"))
                                                    //{
                                                    //    File.Copy(current_web_folder + "\\" + current_web_skin + ".css", folder + "\\" + new_interface_code + ".css", true );
                                                    //}
                                                    //if (File.Exists(current_web_folder + "\\html\\header.html"))
                                                    //{
                                                    //    File.Copy(current_web_folder + "\\html\\header.html", folder + "\\html\\header.html");
                                                    //}
                                                    //if (File.Exists(current_web_folder + "\\html\\header_item.html"))
                                                    //{
                                                    //    File.Copy(current_web_folder + "\\html\\header_item.html", folder + "\\html\\header_item.html");
                                                    //}
                                                    //if (File.Exists(current_web_folder + "\\html\\footer.html"))
                                                    //{
                                                    //    File.Copy(current_web_folder + "\\html\\footer.html", folder + "\\html\\footer.html");
                                                    //}
                                                    //if (File.Exists(current_web_folder + "\\html\\footer_item.html"))
                                                    //{
                                                    //    File.Copy(current_web_folder + "\\html\\footer_item.html", folder + "\\html\\footer_item.html");
                                                    //}
                                                    if (File.Exists(folder + "\\" + current_web_skin + ".css"))
                                                    {
                                                        if (File.Exists(folder + "\\" + new_interface_code + ".css"))
                                                        {
                                                            File.Delete(folder + "\\" + new_interface_code + ".css");
                                                        }
                                                        File.Move(folder + "\\" + current_web_skin + ".css", folder + "\\" + new_interface_code + ".css");
                                                    }
                                                }

                                                // Irregardless of the RequestSpecificValues.Current_User's choice on whether to copy the current skin, if there is NO base skin
                                                // provided and the folder does not exist, then we'll copy over the base skin type of stuff, such
                                                // as buttons, tabs, etc...
                                                if (new_base_code.Length == 0)
                                                {
                                                    // What is the current base skin folder then?
                                                    string base_skin_folder = UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins/" + RequestSpecificValues.Current_Mode.Base_Skin_Or_Skin;
                                                    copy_entire_folder(base_skin_folder + "/buttons", folder + "/buttons");
                                                    copy_entire_folder(base_skin_folder + "/tabs", folder + "/tabs");
                                                }
                                            }
                                        }
                                        catch
                                        {
                                            actionMessage = "Error creating some of the files for the new web skin";
                                        }

                                        // Reload the list of all skins from the database, to include this new skin
                                        lock (UI_ApplicationCache_Gateway.Web_Skin_Collection)
                                        {
                                            Web_Skin_Utilities.Populate_Default_Skins(UI_ApplicationCache_Gateway.Web_Skin_Collection, RequestSpecificValues.Tracer);
                                        }
                                        if (String.IsNullOrEmpty(actionMessage))
                                        {
                                            actionMessage = "Saved new html skin <i>" + save_value + "</i>";
                                        }
                                    }
                                    else
                                    {
                                        actionMessage = "Unable to save new html skin <i>" + save_value + "</i>";
                                    }



                                    // Try to create the directory
                                    try
                                    {
                                        if (!Directory.Exists(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value))
                                        {
                                            Directory.CreateDirectory(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value);
                                        }
                                        if (!Directory.Exists(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\html"))
                                        {
                                            Directory.CreateDirectory(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\html");
                                        }
                                        if (new_base_code.Length == 0)
                                        {
                                            if (!Directory.Exists(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\buttons"))
                                            {
                                                Directory.CreateDirectory(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\buttons");
                                            }
                                            if (!Directory.Exists(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\tabs"))
                                            {
                                                Directory.CreateDirectory(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\tabs");
                                            }
                                            if (!Directory.Exists(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\zoom_controls"))
                                            {
                                                Directory.CreateDirectory(UI_ApplicationCache_Gateway.Settings.Servers.Base_Design_Location + "skins\\" + save_value + "\\zoom_controls");
                                            }
                                        }
                                    }
                                    catch
                                    {
                                        actionMessage = "Error creating all the necessary folders";
                                    }
                                }
                            }
                            else
                            {
                                string edit_base_code   = form["form_interface_basecode"].ToUpper().Trim();
                                string edit_banner_link = form["form_interface_link"].Trim();
                                string edit_notes       = form["form_interface_notes"].Trim();

                                temp_object = form["form_interface_banner_override"];
                                if (temp_object != null)
                                {
                                    override_banner = true;
                                }

                                temp_object = form["form_interface_header_override"];
                                if (temp_object != null)
                                {
                                    override_header = true;
                                }

                                temp_object = form["form_interface_top_nav"];
                                if (temp_object != null)
                                {
                                    suppress_top_nav = true;
                                }

                                // Save this existing interface
                                if (SobekCM_Database.Save_Web_Skin(save_value, edit_base_code, override_banner, override_header, edit_banner_link, edit_notes, suppress_top_nav, RequestSpecificValues.Tracer))
                                {
                                    lock (UI_ApplicationCache_Gateway.Web_Skin_Collection)
                                    {
                                        Web_Skin_Utilities.Populate_Default_Skins(UI_ApplicationCache_Gateway.Web_Skin_Collection, RequestSpecificValues.Tracer);
                                    }
                                    CachedDataManager.WebSkins.Remove_Skin(save_value, RequestSpecificValues.Tracer);

                                    actionMessage = "Edited existing html skin <i>" + save_value + "</i>";
                                }
                                else
                                {
                                    actionMessage = "Unable to edit existing html skin <i>" + save_value + "</i>";
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    actionMessage = "Unknown error caught while handing your request.";
                }
            }
        }