ExtensionByCode() публичный Метод

Gets the information from the database for a single extension
public ExtensionByCode ( string Code ) : ExtensionInfo
Code string Code of the extensions, which must match the directory for the plug-in
Результат SobekCM.Core.Configuration.Extensions.ExtensionInfo
        private static bool read_config_file(string ConfigFile, InstanceWide_Configuration ConfigObj, InstanceWide_Settings Settings)
        {
            // If the file doesn't exist, that is strange.. but not an error per se
            if (!File.Exists(ConfigFile))
            {
                return true;
            }

            // Add to the log
            ConfigObj.Source.Add_Log();
            string directoryName = "Unknown";
            string directory = Path.GetDirectoryName(ConfigFile);
            try
            {
                string file = Path.GetFileName(ConfigFile);
                DirectoryInfo dirInfo = new DirectoryInfo(Path.GetDirectoryName(ConfigFile));
                directoryName = dirInfo.Name;
                string directory2 = dirInfo.Parent.Name;

                ConfigObj.Source.Add_Log("Reading " + directory2 + "\\" + directoryName + "\\" + file);
            }
            catch
            {
                ConfigObj.Source.Add_Log("Reading " + ConfigFile + " (Error parsing for logging)");
            }

            // Streams used for reading
            Stream readerStream = null;
            XmlTextReader readerXml = null;

            try
            {
                // Check the file for the last modified date
                DateTime lastModifiedDate = (new FileInfo(ConfigFile)).LastWriteTime;
                if (DateTime.Compare(ConfigObj.Source.LatestDateTimeStamp, lastModifiedDate) < 0)
                    ConfigObj.Source.LatestDateTimeStamp = lastModifiedDate;

                // Open a link to the file
                readerStream = new FileStream(ConfigFile, FileMode.Open, FileAccess.Read);

                // Try to read the XML
                readerXml = new XmlTextReader(readerStream);

                // Step through this configuration file
                while (readerXml.Read())
                {
                    if (readerXml.NodeType == XmlNodeType.Element)
                    {
                        switch (readerXml.Name.ToLower())
                        {
                            case "authentication":
                                ConfigObj.Source.Add_Log("        Parsing AUTHENTICATION subtree");
                                read_authentication_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "oai-pmh":
                                ConfigObj.Source.Add_Log("        Parsing OAI-PMH subtree");
                                read_oai_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "contactform":
                                ConfigObj.Source.Add_Log("        Parsing CONTACTFORM subtree");
                                read_contactform_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "briefitem_mapping":
                                ConfigObj.Source.Add_Log("        Parsing BRIEFITEM_MAPPING subtree");
                                read_briefitem_mapping_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "mapeditor":
                                ConfigObj.Source.Add_Log("        Parsing MAPEDITOR subtree");
                                read_mapeditor_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "engine":
                                ConfigObj.Source.Add_Log("        Parsing ENGINE subtree");
                                if (readerXml.MoveToAttribute("ClearAll"))
                                {
                                    if ((readerXml.Value.Trim().ToLower() == "true") && ( ConfigObj.Engine != null ))
                                    {
                                        ConfigObj.Engine.ClearAll();
                                    }
                                    readerXml.MoveToElement();
                                }
                                read_engine_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "qualitycontrol":
                                ConfigObj.Source.Add_Log("        Parsing QUALITYCONTROL subtree");
                                read_quality_control_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "metadata":
                                ConfigObj.Source.Add_Log("        Parsing METADATA subtree");
                                read_metadata_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "writerviewers":
                                ConfigObj.Source.Add_Log("        Parsing WRITER/VIEWER subtree");
                                read_writer_viewer_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "citation":
                                ConfigObj.Source.Add_Log("        Parsing CITATION subtree");
                                read_citation_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "templateelements":
                            case "templateconfig":
                                ConfigObj.Source.Add_Log("        Parsing TEMPLATE ELEMENTS subtree");
                                read_template_elements_details(readerXml.ReadSubtree(), ConfigObj);
                                break;

                            case "extension":
                                // Ensure the extension configuration exists
                                if (ConfigObj.Extensions == null)
                                    ConfigObj.Extensions = new Extension_Configuration();

                                ConfigObj.Source.Add_Log("        Parsing EXTENSION subtree");
                                ExtensionInfo extensionInfo = read_extension_details(readerXml, ConfigObj, directoryName, directory);

                                // Since this was read here, it must be enabled, but determine enabled date
                                extensionInfo.Enabled = true;
                                ExtensionInfo dbInfo = Settings.ExtensionByCode(extensionInfo.Code);
                                if (dbInfo != null)
                                    extensionInfo.EnabledDate = dbInfo.EnabledDate;

                                // Add this to the list of extensions
                                ConfigObj.Extensions.Add_Extension(extensionInfo);
                                break;

                            case "static_resources":
                                string base_url = Settings.Servers.Base_URL;
                                bool read_section = false;
                                if (readerXml.MoveToAttribute("code"))
                                {
                                    string code = readerXml.Value;
                                    if ((code == "*") || (String.Compare(Settings.Servers.Static_Resources_Config_File, code, StringComparison.OrdinalIgnoreCase) == 0))
                                        read_section = true;
                                    readerXml.MoveToElement();

                                    // Savethe code though, if it wasn't an asterisk
                                    if (( code != "*") && ( !ConfigObj.UI.StaticResources.Static_Resource_Codes.Contains(code.ToLower())))
                                        ConfigObj.UI.StaticResources.Static_Resource_Codes.Add(code.ToLower());
                                }
                                if (readerXml.MoveToAttribute("baseUrl"))
                                {
                                    base_url = readerXml.Value;
                                    readerXml.MoveToElement();
                                }
                                if (read_section)
                                {
                                    ConfigObj.Source.Add_Log("        Parsing active STATIC RESOURCES subtree");
                                    read_static_resource_details(readerXml.ReadSubtree(), ConfigObj, base_url);
                                }
                                else
                                {
                                    ConfigObj.Source.Add_Log("        Skipping inactive STATIC RESOURCES subtree");
                                }
                                break;

                        }
                    }
                }
            }
            catch (Exception ee)
            {
                ConfigObj.Source.Add_Log("EXCEPTION CAUGHT in Configuration_Files_Reader.read_config_files");
                ConfigObj.Source.Add_Log(ee.Message);
                ConfigObj.Source.Add_Log(ee.StackTrace);

                ConfigObj.Source.ErrorEncountered = true;
            }
            finally
            {
                if (readerXml != null)
                {
                    readerXml.Close();
                }
                if (readerStream != null)
                {
                    readerStream.Close();
                }
            }

            return true;
        }
        /// <summary> Refreshes the values from the database settings </summary>
        /// <returns> A fully built instance-wide setting object </returns>
        public static InstanceWide_Configuration Read_Config_Files( InstanceWide_Settings Settings)
        {
            // Get the directories to read
            List<string> configurationDirectories = new List<string>();

            // Add the default configuration directory first
            configurationDirectories.Add(Path.Combine(Settings.Servers.Application_Server_Network, "config", "default"));

            // Add all of the plug-in foldersm but ensure they are sorted
            string plug_in_folder = Path.Combine(Settings.Servers.Application_Server_Network, "plugins");
            List<string> unreadPluginDirectories = new List<string>();
            if (Directory.Exists(plug_in_folder))
            {
                // Get the list of subdirectories
                string[] subdirs = Directory.GetDirectories(plug_in_folder);

                // Ensure it is sorted alphabetically
                SortedList<string, string> subdirs_sorted = new SortedList<string, string>();
                foreach (string thisSubDir in subdirs)
                {
                    // Get the directory name and add to the sorted list
                    string dirName = (new DirectoryInfo(thisSubDir)).Name;

                    // Does this match an enabled extension?
                    if (Settings.ExtensionEnabled(dirName))
                        subdirs_sorted.Add(dirName, thisSubDir);
                    else
                    {
                        // Keep track of all plugin folders though
                        unreadPluginDirectories.Add(thisSubDir);
                    }
                }

                // Now, add each folder correctly sorted
                foreach (string thisSubDir in subdirs_sorted.Values)
                {
                    configurationDirectories.Add(thisSubDir);
                    if (Directory.Exists(Path.Combine(thisSubDir, "config")))
                        configurationDirectories.Add(Path.Combine(thisSubDir, "config"));
                }
            }

            // Add the final user configuration directory last
            configurationDirectories.Add(Path.Combine(Settings.Servers.Application_Server_Network, "config", "user"));

            InstanceWide_Configuration returnValue = Read_Config_Files(configurationDirectories, Settings);

            // Now, handle any changes to the plug-ins folders and ensure database and
            // the plug-in folders are in agreement
            bool extension_change_occured = false;

            // Look for plug-ins that exist in the directory, but not the database
            foreach (string plugInDirectory in unreadPluginDirectories)
            {
                // Get the plug-in name
                string dirName = Path.GetFileName(plugInDirectory);

                // Get the list of XML and CONFIG files, and read them in alphabetical order
                string[] files = Tools.SobekCM_File_Utilities.GetFiles(plugInDirectory, "*.xml|*.config");
                if (files.Length > 0)
                {
                    // Get all the files and sort by name
                    foreach (string thisFile in files)
                    {
                        ExtensionInfo extensionInfo = read_extension_config_file(thisFile);
                        if (extensionInfo != null)
                        {
                            // Does this already exist?
                            ExtensionInfo dbExtensionInfo = Settings.ExtensionByCode(extensionInfo.Code);
                            if (dbExtensionInfo == null)
                            {
                                Engine_Database.Plugin_Add_Update(extensionInfo.Code, extensionInfo.Name, extensionInfo.Version, String.Empty, String.Empty, String.Empty, null);
                                extension_change_occured = true;
                            }
                            else
                            {
                                // Does this need to be updated?
                                if ((String.Compare(dbExtensionInfo.Name, extensionInfo.Name) != 0) || (String.Compare(dbExtensionInfo.Version, extensionInfo.Version) != 0))
                                {
                                    Engine_Database.Plugin_Add_Update(extensionInfo.Code, extensionInfo.Name, extensionInfo.Version, String.Empty, String.Empty, String.Empty, null);
                                    extension_change_occured = true;
                                }
                            }

                            // Must not be enabled, since it wasn't read above
                            extensionInfo.Enabled = false;

                            // Add this to the configuration as well
                            returnValue.Extensions.Add_Extension(extensionInfo);

                            break;
                        }
                    }

                    // Repull the extension information, if it changed
                    if (extension_change_occured)
                        Settings.DbExtensions = Engine_Database.Plugin_Get_All(null);

                }

            }

            return returnValue;
        }