public void Delete(int id, int siteid)
        {
            List <ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(siteid).ToList();
            ModuleDefinition        moduledefinition  = moduledefinitions.Where(item => item.ModuleDefinitionId == id).FirstOrDefault();

            if (moduledefinition != null)
            {
                string moduledefinitionname = moduledefinition.ModuleDefinitionName.Substring(0, moduledefinition.ModuleDefinitionName.IndexOf(","));

                string folder = Path.Combine(_environment.WebRootPath, "Modules\\" + moduledefinitionname);
                if (Directory.Exists(folder))
                {
                    Directory.Delete(folder, true);
                }

                string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                foreach (string file in Directory.EnumerateFiles(binfolder, moduledefinitionname + "*.dll"))
                {
                    System.IO.File.Delete(file);
                }

                _moduleDefinitions.DeleteModuleDefinition(id, siteid);
                _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Deleted {ModuleDefinitionId}", id);

                _installationManager.RestartApplication();
            }
        }
예제 #2
0
        public void Delete(int id, int siteid)
        {
            ModuleDefinition moduledefinition = _moduleDefinitions.GetModuleDefinition(id, siteid);

            if (moduledefinition != null)
            {
                if (!string.IsNullOrEmpty(moduledefinition.ServerManagerType) && Utilities.GetAssemblyName(moduledefinition.ServerManagerType) != "Oqtane.Server")
                {
                    Type moduletype = Type.GetType(moduledefinition.ServerManagerType);

                    foreach (Tenant tenant in _tenants.GetTenants())
                    {
                        try
                        {
                            if (moduletype.GetInterface("IInstallable") != null)
                            {
                                var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
                                ((IInstallable)moduleobject).Uninstall(tenant);
                            }
                            else
                            {
                                _sql.ExecuteScript(tenant, moduletype.Assembly, Utilities.GetTypeName(moduledefinition.ModuleDefinitionName) + ".Uninstall.sql");
                            }
                            _logger.Log(LogLevel.Information, this, LogFunction.Delete, "{ModuleDefinitionName} Uninstalled For Tenant {Tenant}", moduledefinition.ModuleDefinitionName, tenant.Name);
                        }
                        catch (Exception ex)
                        {
                            _logger.Log(LogLevel.Error, this, LogFunction.Delete, "Error Uninstalling {ModuleDefinitionName} For Tenant {Tenant} {Error}", moduledefinition.ModuleDefinitionName, tenant.Name, ex.Message);
                        }
                    }

                    // clean up module static resource folder
                    string folder = Path.Combine(_environment.WebRootPath, Path.Combine("Modules", Utilities.GetTypeName(moduledefinition.ModuleDefinitionName)));
                    if (Directory.Exists(folder))
                    {
                        Directory.Delete(folder, true);
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Static Resources Removed For {ModuleDefinitionName}", moduledefinition.ModuleDefinitionName);
                    }

                    // get root assembly name ( note that this only works if modules follow a specific naming convention for their assemblies )
                    string assemblyname = Utilities.GetAssemblyName(moduledefinition.ModuleDefinitionName).ToLower();
                    assemblyname = assemblyname.Replace(".client", "").Replace(".oqtane", "");

                    // remove module assemblies from /bin
                    string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                    foreach (string file in Directory.EnumerateFiles(binfolder, assemblyname + "*.*"))
                    {
                        System.IO.File.Delete(file);
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Assembly {Filename} Removed For {ModuleDefinitionName}", file, moduledefinition.ModuleDefinitionName);
                    }

                    // remove module definition
                    _moduleDefinitions.DeleteModuleDefinition(id, siteid);
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Definition {ModuleDefinitionName} Deleted", moduledefinition.Name);

                    // restart application
                    _installationManager.RestartApplication();
                }
            }
        }
        public void Delete(int id, int siteid)
        {
            ModuleDefinition moduledefinition = _moduleDefinitions.GetModuleDefinition(id, siteid);

            if (moduledefinition != null)
            {
                if (!string.IsNullOrEmpty(moduledefinition.ServerManagerType))
                {
                    Type moduletype = Type.GetType(moduledefinition.ServerManagerType);
                    if (moduletype != null && moduletype.GetInterface("IInstallable") != null)
                    {
                        foreach (Tenant tenant in _tenants.GetTenants())
                        {
                            try
                            {
                                var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
                                ((IInstallable)moduleobject).Uninstall(tenant);
                            }
                            catch
                            {
                                // an error occurred executing the uninstall
                            }
                        }
                    }
                }

                // format root assembly name
                string assemblyname = Utilities.GetAssemblyName(moduledefinition.ModuleDefinitionName);
                if (assemblyname != "Oqtane.Client")
                {
                    assemblyname = assemblyname.Replace(".Client", "");

                    // clean up module static resource folder
                    string folder = Path.Combine(_environment.WebRootPath, Path.Combine("Modules", assemblyname));
                    if (Directory.Exists(folder))
                    {
                        Directory.Delete(folder, true);
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Static Resources Removed For {AssemblynName}", assemblyname);
                    }

                    // remove module assembly from /bin
                    string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                    foreach (string file in Directory.EnumerateFiles(binfolder, assemblyname + "*.*"))
                    {
                        System.IO.File.Delete(file);
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Assembly Removed {Filename}", file);
                    }
                }

                // remove module definition
                _moduleDefinitions.DeleteModuleDefinition(id, siteid);
                _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Definition Deleted {ModuleDefinitionName}", moduledefinition.Name);

                // restart application
                _installationManager.RestartApplication();
            }
        }
예제 #4
0
        public void Delete(string themename)
        {
            List <Theme> themes = Themes.GetThemes().ToList();
            Theme        theme  = themes.Where(item => item.ThemeName == themename).FirstOrDefault();

            if (theme != null)
            {
                themename = theme.ThemeName.Substring(0, theme.ThemeName.IndexOf(","));

                string folder = Path.Combine(environment.WebRootPath, "Themes\\" + themename);
                if (Directory.Exists(folder))
                {
                    Directory.Delete(folder, true);
                }

                string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                foreach (string file in Directory.EnumerateFiles(binfolder, themename + "*.dll"))
                {
                    System.IO.File.Delete(file);
                }
                logger.Log(LogLevel.Information, this, LogFunction.Delete, "Theme Deleted {ThemeName}", themename);

                InstallationManager.RestartApplication();
            }
        }
        public void Delete(string themename)
        {
            List <Theme> themes = _themes.GetThemes().ToList();
            Theme        theme  = themes.Where(item => item.ThemeName == themename).FirstOrDefault();

            if (theme != null && Utilities.GetAssemblyName(theme.ThemeName) != "Oqtane.Client")
            {
                // use assets.json to clean up file resources
                string assetfilepath = Path.Combine(_environment.WebRootPath, "Modules", Utilities.GetTypeName(theme.ThemeName), "assets.json");
                if (System.IO.File.Exists(assetfilepath))
                {
                    List <string> assets = JsonSerializer.Deserialize <List <string> >(System.IO.File.ReadAllText(assetfilepath));
                    foreach (string asset in assets)
                    {
                        if (System.IO.File.Exists(asset))
                        {
                            System.IO.File.Delete(asset);
                        }
                    }
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Theme Assets Removed For {ThemeName}", theme.ThemeName);
                }

                // clean up theme static resource folder
                string folder = Path.Combine(_environment.WebRootPath, "Themes", Utilities.GetTypeName(theme.ThemeName));
                if (Directory.Exists(folder))
                {
                    Directory.Delete(folder, true);
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Theme Resource Folder Removed For {ThemeName}", theme.ThemeName);
                }

                _installationManager.RestartApplication();
            }
        }
예제 #6
0
        public void Delete(string themename)
        {
            List <Theme> themes = _themes.GetThemes().ToList();
            Theme        theme  = themes.Where(item => item.ThemeName == themename).FirstOrDefault();

            if (theme != null && Utilities.GetAssemblyName(theme.ThemeName) != "Oqtane.Client")
            {
                // clean up theme static resource folder
                string folder = Path.Combine(_environment.WebRootPath, "Themes", Utilities.GetTypeName(theme.ThemeName));
                if (Directory.Exists(folder))
                {
                    Directory.Delete(folder, true);
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Theme Static Resources Removed For {ThemeName}", theme.ThemeName);
                }

                // remove theme assembly from /bin
                string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                System.IO.File.Delete(Path.Combine(binfolder, Utilities.GetAssemblyName(theme.ThemeName) + ".dll"));
                _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Theme Assembly {Filename} Removed For {ThemeName}", Utilities.GetAssemblyName(theme.ThemeName) + ".dll", themename);

                _installationManager.RestartApplication();
            }
        }
        public void Delete(int id, int siteid)
        {
            ModuleDefinition moduledefinition = _moduleDefinitions.GetModuleDefinition(id, siteid);

            if (moduledefinition != null)
            {
                if (!string.IsNullOrEmpty(moduledefinition.ServerManagerType) && Utilities.GetAssemblyName(moduledefinition.ServerManagerType) != "Oqtane.Server")
                {
                    Type moduletype = Type.GetType(moduledefinition.ServerManagerType);

                    // execute uninstall logic
                    foreach (Tenant tenant in _tenants.GetTenants())
                    {
                        try
                        {
                            if (moduletype.GetInterface("IInstallable") != null)
                            {
                                var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
                                ((IInstallable)moduleobject).Uninstall(tenant);
                            }
                            else
                            {
                                _sql.ExecuteScript(tenant, moduletype.Assembly, Utilities.GetTypeName(moduledefinition.ModuleDefinitionName) + ".Uninstall.sql");
                            }
                            _logger.Log(LogLevel.Information, this, LogFunction.Delete, "{ModuleDefinitionName} Uninstalled For Tenant {Tenant}", moduledefinition.ModuleDefinitionName, tenant.Name);
                        }
                        catch (Exception ex)
                        {
                            _logger.Log(LogLevel.Error, this, LogFunction.Delete, "Error Uninstalling {ModuleDefinitionName} For Tenant {Tenant} {Error}", moduledefinition.ModuleDefinitionName, tenant.Name, ex.Message);
                        }
                    }

                    // use assets.json to clean up file resources
                    string assetfilepath = Path.Combine(_environment.WebRootPath, "Modules", Utilities.GetTypeName(moduledefinition.ModuleDefinitionName), "assets.json");
                    if (System.IO.File.Exists(assetfilepath))
                    {
                        List <string> assets = JsonSerializer.Deserialize <List <string> >(System.IO.File.ReadAllText(assetfilepath));
                        foreach (string asset in assets)
                        {
                            if (System.IO.File.Exists(asset))
                            {
                                System.IO.File.Delete(asset);
                            }
                        }
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Assets Removed For {ModuleDefinitionName}", moduledefinition.ModuleDefinitionName);
                    }

                    // clean up module static resource folder
                    string folder = Path.Combine(_environment.WebRootPath, Path.Combine("Modules", Utilities.GetTypeName(moduledefinition.ModuleDefinitionName)));
                    if (Directory.Exists(folder))
                    {
                        Directory.Delete(folder, true);
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Resources Folder Removed For {ModuleDefinitionName}", moduledefinition.ModuleDefinitionName);
                    }

                    // remove module definition
                    _moduleDefinitions.DeleteModuleDefinition(id, siteid);
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Definition {ModuleDefinitionName} Deleted", moduledefinition.Name);

                    // restart application
                    _installationManager.RestartApplication();
                }
            }
        }
 public void Restart()
 {
     _installationManager.RestartApplication();
 }
        public void Delete(int id, int siteid)
        {
            List <ModuleDefinition> moduledefinitions = _moduleDefinitions.GetModuleDefinitions(siteid).ToList();
            ModuleDefinition        moduledefinition  = moduledefinitions.Where(item => item.ModuleDefinitionId == id).FirstOrDefault();

            if (moduledefinition != null)
            {
                // server assembly name should follow client naming convention
                string assemblyname = Utilities.GetAssemblyName(moduledefinition.ModuleDefinitionName).Replace(".Client", ".Server");

                string   uninstallScript = "";
                Assembly assembly        = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(a => a.GetName().Name == assemblyname);
                if (assembly != null)
                {
                    Stream resourceStream = assembly.GetManifestResourceStream(assemblyname + ".Scripts.Uninstall.sql");
                    if (resourceStream != null)
                    {
                        using (var reader = new StreamReader(resourceStream))
                        {
                            uninstallScript = reader.ReadToEnd();
                        }
                    }
                }

                foreach (Tenant tenant in _tenants.GetTenants())
                {
                    // uninstall module database schema
                    if (!string.IsNullOrEmpty(uninstallScript))
                    {
                        _sql.ExecuteScript(tenant, uninstallScript);
                        _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Uninstall Script Executed For {AssemblyName}", assemblyname);
                    }
                    // clean up module schema versions
                    _sql.ExecuteNonQuery(tenant, "DELETE FROM [dbo].[SchemaVersions] WHERE ScriptName LIKE '" + assemblyname + "%'");
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Schema Versions Removed For {AssemblyName}", assemblyname);
                }

                // format root assembly name
                assemblyname = assemblyname.Replace(".Server", "");

                // clean up module static resource folder
                string folder = Path.Combine(_environment.WebRootPath, "Modules\\" + assemblyname);
                if (Directory.Exists(folder))
                {
                    Directory.Delete(folder, true);
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Static Resources Removed For {AssemblynName}", assemblyname);
                }

                // remove module assembly from /bin
                string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                foreach (string file in Directory.EnumerateFiles(binfolder, assemblyname + "*.*"))
                {
                    System.IO.File.Delete(file);
                    _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Assembly Removed {Filename}", file);
                }

                // remove module definition
                _moduleDefinitions.DeleteModuleDefinition(id, siteid);
                _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Module Definition Deleted {ModuleDefinitionName}", moduledefinition.Name);

                // restart application
                _installationManager.RestartApplication();
            }
        }