/// <summary> /// Loads Formatter Providers from an assembly. /// </summary> /// <param name="assembly">The path of the Assembly to load the Providers from.</param> public static int LoadFormatterProvidersFromAuto(string assembly) { Type[] forms; LoadFormatterProvidersFromAssembly(assembly, out forms); int count = 0; // Setup and add to the Collectors for (int i = 0; i < forms.Length; i++) { Collectors.AddPlugin(forms[i], Assembly.GetAssembly(forms[i])); foreach (Configuration.Wiki wiki in GlobalSettings.Provider.GetAllWikis()) { try { SetUp <IFormatterProviderV50>(forms[i], Settings.GetProvider(wiki.WikiName).GetPluginConfiguration(forms[i].FullName)); SavePluginStatus(wiki.WikiName, forms[i].FullName, true); } catch (InvalidConfigurationException) { SavePluginStatus(wiki.WikiName, forms[i].FullName, false); } } count++; } return(count); }
/// <summary> /// Gets the currently selected provider. /// </summary> /// <returns>The provider.</returns> /// <param name="enabled">A value indicating whether the returned provider is enabled.</param> /// <param name="canDisable">A value indicating whether the returned provider can be disabled.</param> private IProviderV30 GetCurrentProvider(out bool enabled) { enabled = true; bool canDisable; return(Collectors.FindProvider(txtCurrentProvider.Value, out enabled, out canDisable)); }
/// <summary> /// Loads all formatter providers from dlls. /// </summary> public static void LoadAllFormatterProviders() { string[] pluginAssemblies = GlobalSettings.Provider.ListPluginAssemblies(); List <Type> forms = new List <Type>(2); for (int i = 0; i < pluginAssemblies.Length; i++) { Type[] f; LoadFormatterProvidersFromAssembly(pluginAssemblies[i], out f); forms.AddRange(f); } // Add to the Collectors and Setup for (int i = 0; i < forms.Count; i++) { Collectors.AddPlugin(forms[i], Assembly.GetAssembly(forms[i])); foreach (PluginFramework.Wiki wiki in GlobalSettings.Provider.GetAllWikis()) { try { SetUp <IFormatterProviderV40>(forms[i], Settings.GetProvider(wiki.WikiName).GetPluginConfiguration(forms[i].FullName)); SavePluginStatus(wiki.WikiName, forms[i].FullName, true); } catch (InvalidConfigurationException) { SavePluginStatus(wiki.WikiName, forms[i].FullName, false); } } } }
/// <summary> /// Enables a provider. /// </summary> /// <param name="typeName">The provider to enable.</param> public static void EnableProvider(string typeName) { bool enabled, canDisable; IProviderV30 provider = Collectors.FindProvider(typeName, out enabled, out canDisable); if (!enabled) { provider.Init(Host.Instance, LoadConfiguration(typeName)); Collectors.TryEnable(typeName); SaveStatus(typeName, true); } }
/// <summary> /// Disables a provider. /// </summary> /// <param name="typeName">The provider to disable.</param> public static void DisableProvider(string typeName) { bool enabled, canDisable; IProviderV30 provider = Collectors.FindProvider(typeName, out enabled, out canDisable); if (enabled && canDisable) { provider.Shutdown( ); Collectors.TryDisable(typeName); SaveStatus(typeName, false); } }
/// <summary> /// Tries to change a provider's configuration. /// </summary> /// <param name="typeName">The provider.</param> /// <param name="configuration">The new configuration.</param> /// <param name="error">The error message, if any.</param> /// <returns><c>true</c> if the configuration is saved, <c>false</c> if the provider rejected it.</returns> public static bool TryChangeConfiguration(string typeName, string configuration, out string error) { error = null; bool enabled, canDisable; IProviderV30 provider = Collectors.FindProvider(typeName, out enabled, out canDisable); try { provider.Init(Host.Instance, configuration); } catch (InvalidConfigurationException icex) { error = icex.Message; return(false); } SaveConfiguration(typeName, configuration); return(true); }
/// <summary> /// Loads all formatter providers from dlls. /// </summary> public static void LoadAllFormatterProviders() { string[] pluginAssemblies = GlobalSettings.Provider.ListPluginAssemblies(); List <Type> forms = new List <Type>(2); for (int i = 0; i < pluginAssemblies.Length; i++) { Type[] f; LoadFormatterProvidersFromAssembly(pluginAssemblies[i], out f); forms.AddRange(f); } // Add to the Collectors and Setup for (int i = 0; i < forms.Count; i++) { Collectors.AddPlugin(forms[i], Assembly.GetAssembly(forms[i])); foreach (Configuration.Wiki wiki in GlobalSettings.Provider.GetAllWikis()) { try { SetUp <IFormatterProviderV50>(forms[i], Settings.GetProvider(wiki.WikiName).GetPluginConfiguration(forms[i].FullName)); SavePluginStatus(wiki.WikiName, forms[i].FullName, true); } catch (InvalidConfigurationException) { SavePluginStatus(wiki.WikiName, forms[i].FullName, false); } catch (Exception exception) { SavePluginStatus(wiki.WikiName, forms[i].FullName, false); Log.LogEntry(String.Format("Unable to load provider " + forms[i].FullName + " ({0}).", exception.Message), EntryType.Error, Log.SystemUsername, wiki.WikiName); } } } }
/// <summary> /// Performs all needed startup operations. /// </summary> public static void Startup() { // Load Host Host.Instance = new Host(); // Load config ISettingsStorageProviderV30 ssp = ProviderLoader.LoadSettingsStorageProvider(WebConfigurationManager.AppSettings["SettingsStorageProvider"]); ssp.Init(Host.Instance, GetSettingsStorageProviderConfiguration()); Collectors.SettingsProvider = ssp; Settings.CanOverridePublicDirectory = false; if (!(ssp is SettingsStorageProvider)) { // Update DLLs from public\Plugins UpdateDllsIntoSettingsProvider(ssp, ProviderLoader.SettingsStorageProviderAssemblyName); } if (ssp.IsFirstApplicationStart()) { if (ssp.GetMetaDataItem(MetaDataItem.AccountActivationMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.AccountActivationMessage, null, Defaults.AccountActivationMessageContent); } if (ssp.GetMetaDataItem(MetaDataItem.EditNotice, null) == "") { ssp.SetMetaDataItem(MetaDataItem.EditNotice, null, Defaults.EditNoticeContent); } if (ssp.GetMetaDataItem(MetaDataItem.Footer, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Footer, null, Defaults.FooterContent); } if (ssp.GetMetaDataItem(MetaDataItem.Header, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Header, null, Defaults.HeaderContent); } if (ssp.GetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null, Defaults.PasswordResetProcedureMessageContent); } if (ssp.GetMetaDataItem(MetaDataItem.Sidebar, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Sidebar, null, Defaults.SidebarContent); } if (ssp.GetMetaDataItem(MetaDataItem.PageChangeMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.PageChangeMessage, null, Defaults.PageChangeMessage); } if (ssp.GetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null, Defaults.DiscussionChangeMessage); } if (ssp.GetMetaDataItem(MetaDataItem.ApproveDraftMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.ApproveDraftMessage, null, Defaults.ApproveDraftMessage); } } MimeTypes.Init(); // Load Providers Collectors.FileNames = new System.Collections.Generic.Dictionary <string, string>(10); Collectors.UsersProviderCollector = new ProviderCollector <IUsersStorageProviderV30>(); Collectors.PagesProviderCollector = new ProviderCollector <IPagesStorageProviderV30>(); Collectors.FilesProviderCollector = new ProviderCollector <IFilesStorageProviderV30>(); Collectors.FormatterProviderCollector = new ProviderCollector <IFormatterProviderV30>(); Collectors.CacheProviderCollector = new ProviderCollector <ICacheProviderV30>(); Collectors.DisabledUsersProviderCollector = new ProviderCollector <IUsersStorageProviderV30>(); Collectors.DisabledPagesProviderCollector = new ProviderCollector <IPagesStorageProviderV30>(); Collectors.DisabledFilesProviderCollector = new ProviderCollector <IFilesStorageProviderV30>(); Collectors.DisabledFormatterProviderCollector = new ProviderCollector <IFormatterProviderV30>(); Collectors.DisabledCacheProviderCollector = new ProviderCollector <ICacheProviderV30>(); // Load built-in providers var providers = new IProviderV30[] { new FilesStorageProvider(), new UsersStorageProvider(), new Footnotes() }; foreach (var provider in providers) { var isDisabled = ProviderLoader.IsDisabled(provider.GetType().FullName); if (!isDisabled) { provider.Init(Host.Instance, ""); Log.LogEntry("Provider " + provider.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Log.LogEntry("Provider " + provider.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } if (provider is IUsersStorageProviderV30) { (isDisabled ? Collectors.DisabledUsersProviderCollector : Collectors.UsersProviderCollector).AddProvider(provider as IUsersStorageProviderV30); } else if (provider is IPagesStorageProviderV30) { (isDisabled ? Collectors.DisabledPagesProviderCollector : Collectors.PagesProviderCollector).AddProvider(provider as IPagesStorageProviderV30); } else if (provider is IFilesStorageProviderV30) { (isDisabled ? Collectors.DisabledFilesProviderCollector : Collectors.FilesProviderCollector).AddProvider(provider as IFilesStorageProviderV30); } else if (provider is IFormatterProviderV30) { (isDisabled ? Collectors.DisabledFormatterProviderCollector : Collectors.FormatterProviderCollector).AddProvider(provider as IFormatterProviderV30); } else if (provider is ICacheProviderV30) { (isDisabled ? Collectors.DisabledCacheProviderCollector : Collectors.CacheProviderCollector).AddProvider(provider as ICacheProviderV30); } } // Load Users (pages storage providers might need access to users/groups data for upgrading from 2.0 to 3.0) ProviderLoader.FullLoad(true, false, false, false, false); //Users.Instance = new Users(); bool groupsCreated = VerifyAndCreateDefaultGroups(); PagesStorageProvider p = new PagesStorageProvider(); if (!ProviderLoader.IsDisabled(p.GetType().FullName)) { p.Init(Host.Instance, ""); Collectors.PagesProviderCollector.AddProvider(p); Log.LogEntry("Provider " + p.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Collectors.DisabledPagesProviderCollector.AddProvider(p); Log.LogEntry("Provider " + p.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } CacheProvider c = new CacheProvider(); if (!ProviderLoader.IsDisabled(c.GetType().FullName)) { c.Init(Host.Instance, ""); Collectors.CacheProviderCollector.AddProvider(c); Log.LogEntry("Provider " + c.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Collectors.DisabledCacheProviderCollector.AddProvider(c); Log.LogEntry("Provider " + c.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } // Load all other providers ProviderLoader.FullLoad(false, true, true, true, true); if (groupsCreated) { // It is necessary to set default permissions for file management UserGroup administratorsGroup = Users.FindUserGroup(Settings.AdministratorsGroup); UserGroup anonymousGroup = Users.FindUserGroup(Settings.AnonymousGroup); UserGroup usersGroup = Users.FindUserGroup(Settings.UsersGroup); SetAdministratorsGroupDefaultPermissions(administratorsGroup); SetUsersGroupDefaultPermissions(usersGroup); SetAnonymousGroupDefaultPermissions(anonymousGroup); } // Init cache //Cache.Instance = new Cache(Collectors.CacheProviderCollector.GetProvider(Settings.DefaultCacheProvider)); if (Collectors.CacheProviderCollector.GetProvider(Settings.DefaultCacheProvider) == null) { Log.LogEntry("Default Cache Provider was not loaded, backing to integrated provider", EntryType.Error, Log.SystemUsername); Settings.DefaultCacheProvider = typeof(CacheProvider).FullName; Collectors.TryEnable(Settings.DefaultCacheProvider); } // Create the Main Page, if needed if (Pages.FindPage(Settings.DefaultPage) == null) { CreateMainPage(); } Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername); System.Threading.ThreadPool.QueueUserWorkItem(state => { using (((WindowsIdentity)state).Impersonate()) { if ((DateTime.Now - Settings.LastPageIndexing).TotalDays > 7) { Settings.LastPageIndexing = DateTime.Now; System.Threading.Thread.Sleep(10000); using (MemoryStream ms = new MemoryStream()) { using (StreamWriter wr = new System.IO.StreamWriter(ms)) { System.Web.HttpContext.Current = new System.Web.HttpContext(new System.Web.Hosting.SimpleWorkerRequest("", "", wr)); foreach (var provider in Collectors.PagesProviderCollector.AllProviders) { if (!provider.ReadOnly) { Log.LogEntry("Starting automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername); provider.RebuildIndex(); Log.LogEntry("Finished automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername); } } } } Pages.RebuildPageLinks(Pages.GetPages(null)); foreach (ScrewTurn.Wiki.PluginFramework.NamespaceInfo nspace in Pages.GetNamespaces()) { Pages.RebuildPageLinks(Pages.GetPages(nspace)); } } } }, WindowsIdentity.GetCurrent()); }
/// <summary> /// Performs all needed startup operations. /// </summary> public static void Startup() { // Load Host Host.Instance = new Host(); // Load config ISettingsStorageProviderV30 ssp = ProviderLoader.LoadSettingsStorageProvider(WebConfigurationManager.AppSettings["SettingsStorageProvider"]); ssp.Init(Host.Instance, GetSettingsStorageProviderConfiguration()); Collectors.SettingsProvider = ssp; if (!(ssp is SettingsStorageProvider)) { // Update DLLs from public\Plugins UpdateDllsIntoSettingsProvider(ssp, ProviderLoader.SettingsStorageProviderAssemblyName); } if (ssp.IsFirstApplicationStart()) { if (ssp.GetMetaDataItem(MetaDataItem.AccountActivationMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.AccountActivationMessage, null, Defaults.AccountActivationMessageContent); } if (ssp.GetMetaDataItem(MetaDataItem.EditNotice, null) == "") { ssp.SetMetaDataItem(MetaDataItem.EditNotice, null, Defaults.EditNoticeContent); } if (ssp.GetMetaDataItem(MetaDataItem.Footer, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Footer, null, Defaults.FooterContent); } if (ssp.GetMetaDataItem(MetaDataItem.Header, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Header, null, Defaults.HeaderContent); } if (ssp.GetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null, Defaults.PasswordResetProcedureMessageContent); } if (ssp.GetMetaDataItem(MetaDataItem.Sidebar, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Sidebar, null, Defaults.SidebarContent); } if (ssp.GetMetaDataItem(MetaDataItem.PageChangeMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.PageChangeMessage, null, Defaults.PageChangeMessage); } if (ssp.GetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null, Defaults.DiscussionChangeMessage); } if (ssp.GetMetaDataItem(MetaDataItem.ApproveDraftMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.ApproveDraftMessage, null, Defaults.ApproveDraftMessage); } } // Load config IIndexDirectoryProviderV30 idp = ProviderLoader.LoadIndexDirectoryProvider(WebConfigurationManager.AppSettings["IndexDirectoryProvider"]); idp.Init(Host.Instance, GetSettingsStorageProviderConfiguration()); Collectors.IndexDirectoryProvider = idp; MimeTypes.Init(); // Load Providers Collectors.FileNames = new System.Collections.Generic.Dictionary <string, string>(10); Collectors.UsersProviderCollector = new ProviderCollector <IUsersStorageProviderV30>(); Collectors.PagesProviderCollector = new ProviderCollector <IPagesStorageProviderV30>(); Collectors.FilesProviderCollector = new ProviderCollector <IFilesStorageProviderV30>(); Collectors.FormatterProviderCollector = new ProviderCollector <IFormatterProviderV30>(); Collectors.CacheProviderCollector = new ProviderCollector <ICacheProviderV30>(); Collectors.DisabledUsersProviderCollector = new ProviderCollector <IUsersStorageProviderV30>(); Collectors.DisabledPagesProviderCollector = new ProviderCollector <IPagesStorageProviderV30>(); Collectors.DisabledFilesProviderCollector = new ProviderCollector <IFilesStorageProviderV30>(); Collectors.DisabledFormatterProviderCollector = new ProviderCollector <IFormatterProviderV30>(); Collectors.DisabledCacheProviderCollector = new ProviderCollector <ICacheProviderV30>(); // Load built-in providers // Files storage providers have to be loaded BEFORE users storage providers in order to properly set permissions FilesStorageProvider f = new FilesStorageProvider(); if (!ProviderLoader.IsDisabled(f.GetType().FullName)) { f.Init(Host.Instance, ""); Collectors.FilesProviderCollector.AddProvider(f); Log.LogEntry("Provider " + f.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Collectors.DisabledFilesProviderCollector.AddProvider(f); Log.LogEntry("Provider " + f.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } UsersStorageProvider u = new UsersStorageProvider(); if (!ProviderLoader.IsDisabled(u.GetType().FullName)) { u.Init(Host.Instance, ""); Collectors.UsersProviderCollector.AddProvider(u); Log.LogEntry("Provider " + u.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Collectors.DisabledUsersProviderCollector.AddProvider(u); Log.LogEntry("Provider " + u.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } // Load Users (pages storage providers might need access to users/groups data for upgrading from 2.0 to 3.0) ProviderLoader.FullLoad(true, false, false, false, false); //Users.Instance = new Users(); bool groupsCreated = VerifyAndCreateDefaultGroups(); PagesStorageProvider p = new PagesStorageProvider(); if (!ProviderLoader.IsDisabled(p.GetType().FullName)) { p.Init(Host.Instance, ""); Collectors.PagesProviderCollector.AddProvider(p); Log.LogEntry("Provider " + p.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Collectors.DisabledPagesProviderCollector.AddProvider(p); Log.LogEntry("Provider " + p.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } CacheProvider c = new CacheProvider(); if (!ProviderLoader.IsDisabled(c.GetType().FullName)) { c.Init(Host.Instance, ""); Collectors.CacheProviderCollector.AddProvider(c); Log.LogEntry("Provider " + c.Information.Name + " loaded (Enabled)", EntryType.General, Log.SystemUsername); } else { Collectors.DisabledCacheProviderCollector.AddProvider(c); Log.LogEntry("Provider " + c.Information.Name + " loaded (Disabled)", EntryType.General, Log.SystemUsername); } // Load all other providers ProviderLoader.FullLoad(false, true, true, true, true); if (groupsCreated) { // It is necessary to set default permissions for file management UserGroup administratorsGroup = Users.FindUserGroup(Settings.AdministratorsGroup); UserGroup anonymousGroup = Users.FindUserGroup(Settings.AnonymousGroup); UserGroup usersGroup = Users.FindUserGroup(Settings.UsersGroup); SetAdministratorsGroupDefaultPermissions(administratorsGroup); SetUsersGroupDefaultPermissions(usersGroup); SetAnonymousGroupDefaultPermissions(anonymousGroup); } // Init cache //Cache.Instance = new Cache(Collectors.CacheProviderCollector.GetProvider(Settings.DefaultCacheProvider)); if (Collectors.CacheProviderCollector.GetProvider(Settings.DefaultCacheProvider) == null) { Log.LogEntry("Default Cache Provider was not loaded, backing to integrated provider", EntryType.Error, Log.SystemUsername); Settings.DefaultCacheProvider = typeof(CacheProvider).FullName; Collectors.TryEnable(Settings.DefaultCacheProvider); } // Create the Main Page, if needed if (Pages.FindPage(Settings.DefaultPage) == null) { CreateMainPage(); } Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername); System.Threading.ThreadPool.QueueUserWorkItem(ignored => { SearchClass.RebuildIndex(); }); }
protected void btnCopySettings_Click(object sender, EventArgs e) { ISettingsStorageProviderV30 to = null; ISettingsStorageProviderV30[] allProviders = ProviderLoader.LoadAllSettingsStorageProviders(Settings.Provider); foreach (ISettingsStorageProviderV30 prov in allProviders) { if (prov.GetType().ToString() == lstSettingsDestination.SelectedValue) { to = prov; break; } } Log.LogEntry("Settings data copy requested to " + to.Information.Name, EntryType.General, SessionFacade.CurrentUsername); try { to.Init(Host.Instance, txtSettingsDestinationConfig.Text); } catch (InvalidConfigurationException ex) { Log.LogEntry("Provider rejected configuration: " + ex, EntryType.Error, Log.SystemUsername); lblCopySettingsResult.CssClass = "resulterror"; lblCopySettingsResult.Text = Properties.Messages.ProviderRejectedConfiguration; return; } // Find namespaces List <string> namespaces = new List <string>(5); foreach (NamespaceInfo ns in Pages.GetNamespaces()) { namespaces.Add(ns.Name); } DataMigrator.CopySettingsStorageProviderData(Settings.Provider, to, namespaces.ToArray(), Collectors.GetAllProviders()); lblCopySettingsResult.CssClass = "resultok"; lblCopySettingsResult.Text = Properties.Messages.DataCopied; }
/// <summary> /// Unloads a provider from memory. /// </summary> /// <param name="typeName">The provider to unload.</param> public static void UnloadProvider(string typeName) { DisableProvider(typeName); Collectors.TryUnload(typeName); }
/// <summary> /// Performs all needed startup operations. /// </summary> public static void Startup() { // Load Host Host.Instance = new Host(); // Initialize MimeTypes MimeTypes.Init(); GlobalSettings.CanOverridePublicDirectory = false; // Initialize Collectors Collectors.InitCollectors(); Collectors.FileNames = new Dictionary <string, string>(10); // Load Global Config IGlobalSettingsStorageProviderV60 globalSettingsStorageProvider = ProviderLoader.LoadGlobalSettingsStorageProvider(ApplicationSettings.Instance.GlobalSettingsStorageProvider); Collectors.AddGlobalSettingsStorageProvider(globalSettingsStorageProvider.GetType(), Assembly.GetAssembly(globalSettingsStorageProvider.GetType())); globalSettingsStorageProvider.SetUp(Host.Instance, GetGlobalSettingsStorageProviderConfiguration()); globalSettingsStorageProvider.Dispose(); // Add StorageProviders, from WebConfig, to Collectors and Setup them ProviderLoader.LoadStorageProviders <ISettingsStorageProviderV60>(new List <StorageProvider>() { ApplicationSettings.Instance.SettingProvider }); ProviderLoader.LoadStorageProviders <IFilesStorageProviderV60>(ApplicationSettings.Instance.FilesProviders); ProviderLoader.LoadStorageProviders <IThemesStorageProviderV60>(ApplicationSettings.Instance.ThemesProviders); ProviderLoader.LoadStorageProviders <IUsersStorageProviderV60>(ApplicationSettings.Instance.UsersProviders); ProviderLoader.LoadStorageProviders <IPagesStorageProviderV60>(ApplicationSettings.Instance.PagesProviders); ProviderLoader.LoadStorageProviders <IIndexDirectoryProviderV60>(new List <StorageProvider>() { ApplicationSettings.Instance.IndexDirectoryProvider }); ProviderLoader.LoadAllFormatterProviders(); foreach (Configuration.Wiki wiki in Collectors.CollectorsBox.GlobalSettingsProvider.GetAllWikis()) { ISettingsStorageProviderV60 ssp = Collectors.CollectorsBox.GetSettingsProvider(wiki.WikiName); if (ssp.IsFirstApplicationStart()) { if (ssp.GetMetaDataItem(MetaDataItem.AccountActivationMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.AccountActivationMessage, null, Defaults.AccountActivationMessageContent); } if (ssp.GetMetaDataItem(MetaDataItem.EditNotice, null) == "") { ssp.SetMetaDataItem(MetaDataItem.EditNotice, null, Defaults.EditNoticeContent); } if (ssp.GetMetaDataItem(MetaDataItem.Footer, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Footer, null, Defaults.FooterContent); } if (ssp.GetMetaDataItem(MetaDataItem.Header, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Header, null, Defaults.HeaderContent); } if (ssp.GetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null, Defaults.PasswordResetProcedureMessageContent); } if (ssp.GetMetaDataItem(MetaDataItem.Sidebar, null) == "") { ssp.SetMetaDataItem(MetaDataItem.Sidebar, null, Defaults.SidebarContent); } if (ssp.GetMetaDataItem(MetaDataItem.PageChangeMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.PageChangeMessage, null, Defaults.PageChangeMessage); } if (ssp.GetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null, Defaults.DiscussionChangeMessage); } if (ssp.GetMetaDataItem(MetaDataItem.ApproveDraftMessage, null) == "") { ssp.SetMetaDataItem(MetaDataItem.ApproveDraftMessage, null, Defaults.ApproveDraftMessage); } } bool groupsCreated = VerifyAndCreateDefaultGroups(wiki.WikiName); if (groupsCreated) { // It is necessary to set default permissions for file management UserGroup administratorsGroup = Users.FindUserGroup(wiki.WikiName, Settings.GetAdministratorsGroup(wiki.WikiName)); UserGroup anonymousGroup = Users.FindUserGroup(wiki.WikiName, Settings.GetAnonymousGroup(wiki.WikiName)); UserGroup usersGroup = Users.FindUserGroup(wiki.WikiName, Settings.GetUsersGroup(wiki.WikiName)); SetAdministratorsGroupDefaultPermissions(wiki.WikiName, administratorsGroup); SetUsersGroupDefaultPermissions(wiki.WikiName, usersGroup); SetAnonymousGroupDefaultPermissions(wiki.WikiName, anonymousGroup); } // Create the Main Page, if needed if (Pages.FindPage(wiki.WikiName, Settings.GetDefaultPage(wiki.WikiName)) == null) { CreateMainPage(wiki.WikiName); } Log.LogEntry("Wiki " + wiki.WikiName + " is ready", EntryType.General, Log.SystemUsername, null); //Pages.RebuildPageLinks(Pages.GetPages(wiki.WikiName, null)); //foreach(ScrewTurn.Wiki.PluginFramework.NamespaceInfo nspace in Pages.GetNamespaces(wiki.WikiName)) { // Pages.RebuildPageLinks(Pages.GetPages(wiki.WikiName, nspace)); //} } Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername, null); }
/// <summary> /// Unloads a plugin from memory. /// </summary> /// <param name="typeName">The provider to unload.</param> public static void UnloadPlugin(string typeName) { Collectors.TryUnloadPlugin(typeName); }
/// <summary> /// Loads the storage providers. /// </summary> /// <typeparam name="T">The provider interface type</typeparam> /// <param name="storageProviders">A list of StorageProvider.</param> public static void LoadStorageProviders <T>(List <StorageProvider> storageProviders) where T : class, IProviderV60 { foreach (StorageProvider storageProvider in storageProviders) { try { // assemblyName should be an absolute path or a relative path in bin or public\Plugins Assembly asm = null; Type t; string assemblyName = storageProvider.AssemblyName; if (!assemblyName.ToLowerInvariant().EndsWith(".dll")) { assemblyName += ".dll"; } if (File.Exists(assemblyName)) { asm = Assembly.Load(LoadAssemblyFromDisk(assemblyName)); t = asm.GetType(storageProvider.TypeName); } else { string tentativePluginsPath = null; try { // Settings.PublicDirectory is only available when running the web app tentativePluginsPath = Path.Combine(GlobalSettings.PublicDirectory, "Plugins"); tentativePluginsPath = Path.Combine(tentativePluginsPath, assemblyName); } catch { } if (!string.IsNullOrEmpty(tentativePluginsPath) && File.Exists(tentativePluginsPath)) { asm = Assembly.Load(LoadAssemblyFromDisk(tentativePluginsPath)); t = asm.GetType(storageProvider.TypeName); } else { // Trim .dll t = Type.GetType(storageProvider.TypeName + "," + assemblyName.Substring(0, assemblyName.Length - 4), true, true); asm = Assembly.GetAssembly(t); } } Collectors.AddProvider(t, asm, storageProvider.ConfigurationString, typeof(T)); SetUp <T>(t, storageProvider.ConfigurationString); if (storageProvider.IsDefault) { switch (typeof(T).FullName) { case PagesProviderInterfaceName: GlobalSettings.DefaultPagesProvider = storageProvider.TypeName; break; case FilesProviderInterfaceName: GlobalSettings.DefaultFilesProvider = storageProvider.TypeName; break; case UsersProviderInterfaceName: GlobalSettings.DefaultUsersProvider = storageProvider.TypeName; break; case ThemesProviderInterfaceName: GlobalSettings.DefaultThemesProvider = storageProvider.TypeName; break; } } } catch (Exception ex) { throw new ArgumentException("Could not load the provider with name: " + storageProvider.TypeName + " - in assembly: " + storageProvider.AssemblyName, ex); } } }
/// <summary> /// Loads the Configuration data of a storage provider. /// </summary> /// <param name="typeName">The Type Name of the storage provider.</param> /// <returns>The Configuration, if available, otherwise an empty string.</returns> public static string LoadStorageProviderConfiguration(string typeName) { return(Collectors.GetStorageProviderConfiguration(typeName)); }
/// <summary> /// Gets the currently selected provider. /// </summary> /// <returns>The provider.</returns> /// <param name="enabled">A value indicating whether the returned provider is enabled.</param> /// <param name="canDisable">A value indicating whether the returned provider can be disabled.</param> private IProviderV40 GetCurrentProvider(out bool enabled) { enabled = true; return(Collectors.FindProvider(currentWiki, txtCurrentProvider.Value, out enabled)); }