Ejemplo n.º 1
0
        public override WidgetPackage PackWidget(WidgetBase widget)
        {
            var package               = base.PackWidget(widget);
            var sectionWidget         = package.Widget as Models.SectionWidget;
            var pluginRootPath        = _pluginLoader.GetPlugins().First(m => m.ID == SectionPlug.PluginID).RelativePath;
            var cmsApplicationContext = ApplicationContext as CMSApplicationContext;
            var rootPath              = cmsApplicationContext.MapPath("~/");

            sectionWidget.Groups.Each(g =>
            {
                sectionWidget.Template = _sectionTemplateService.Get(g.PartialView);
                packFiles.Each(f =>
                {
                    string file = cmsApplicationContext.MapPath(Path.Combine(pluginRootPath, f).FormatWith(sectionWidget.Template.TemplateName));
                    if (File.Exists(file))
                    {
                        FileInfo fileInfo = new FileInfo(file);
                        package.Files.Add(new PackageManger.FileInfo
                        {
                            FileName = fileInfo.Name,
                            FilePath = "~/" + f.FormatWith(sectionWidget.Template.TemplateName),
                            Content  = File.ReadAllBytes(file)
                        });
                    }
                });
            });
            return(package);
        }
        public PluginRazorViewEngineOptionsSetup(IHostingEnvironment hostingEnvironment, IPluginLoader loader) :
            base(options =>
        {
            if (hostingEnvironment.IsDevelopment())
            {
                options.FileProviders.Add(new DeveloperViewFileProvider(hostingEnvironment));
            }

            loader.GetPlugins().Where(m => m.Enable && m.ID.IsNotNullAndWhiteSpace()).Each(m =>
            {
                var directory = new DirectoryInfo(m.RelativePath);
                if (hostingEnvironment.IsDevelopment())
                {
                    options.ViewLocationFormats.Add($"{DeveloperViewFileProvider.ProjectRootPath}{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"{DeveloperViewFileProvider.ProjectRootPath}{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"{DeveloperViewFileProvider.ProjectRootPath}{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension);
                }
                else
                {
                    options.ViewLocationFormats.Add($"/wwwroot/{Loader.PluginFolder}/{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/wwwroot/{Loader.PluginFolder}/{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/wwwroot/{Loader.PluginFolder}/{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension);
                }
            });
            options.ViewLocationFormats.Add("/Views/{0}" + RazorViewEngine.ViewExtension);
        })
        {
        }
Ejemplo n.º 3
0
        private static void ConfigureRazor(RazorViewEngineOptions options, IHostingEnvironment hostingEnvironment, IPluginLoader loader)
        {
            if (hostingEnvironment.IsDevelopment())
            {
                options.FileProviders.Add(new DeveloperViewFileProvider());
            }
            loader.GetPluginAssemblies().Each(assembly =>
            {
                var reference = MetadataReference.CreateFromFile(assembly.Location);
                options.AdditionalCompilationReferences.Add(reference);
            });
            //options.CompilationCallback = context =>
            //{
            //    var reference = MetadataReference.CreateFromFile(@"D:\Projects\ZKEACMS.Core\src\TestAss\bin\Debug\netstandard1.6\TestAss.dll");

            //    context.Compilation = context.Compilation.AddReferences(reference);
            //};
            loader.GetPlugins().Where(m => m.Enable && m.ID.IsNotNullAndWhiteSpace()).Each(m =>
            {
                var directory = new DirectoryInfo(m.RelativePath);
                if (hostingEnvironment.IsDevelopment())
                {
                    options.ViewLocationFormats.Add($"/Porject.RootPath/{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/Porject.RootPath/{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/Porject.RootPath/{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension);
                }
                else
                {
                    options.ViewLocationFormats.Add($"/{Loader.PluginFolder}/{directory.Name}" + "/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/{Loader.PluginFolder}/{directory.Name}" + "/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/{Loader.PluginFolder}/{directory.Name}" + "/Views/{0}" + RazorViewEngine.ViewExtension);
                }
            });
            options.ViewLocationFormats.Add("/Views/{0}" + RazorViewEngine.ViewExtension);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Loads plugins.
        /// </summary>
        protected override async Task RefreshAsync(bool force, CancellationToken token)
        {
            if (Plugins == null)
            {
                Plugins = _pluginLoader.GetPlugins().Where(p => p.IsVisible).ToArray();

                if (_request.PluginName == null)
                {
                    ServerConfiguration config;
                    try
                    {
                        config = await _serverAccess.LoadConfigurationAsync();

                        _settings.Configuration = config;
                    }
                    catch
                    {
                        // something went wrong during the fetch, use the saved config
                    }
                }
                else
                {
                    var plugin = Plugins.FirstOrDefault(p => p.Id.Equals(_request.PluginName, StringComparison.OrdinalIgnoreCase));
                    if (plugin != null)
                    {
                        _navigationService.RemoveCurrentFromBackStack();
                        OpenPlugin(plugin);
                    }
                }

                // Filter the plugins anyway, but let the user go to a plugin
                // from an outside source even if it's filtered out
                FilterPlugins();
            }
        }
Ejemplo n.º 5
0
        public static void Initialize( IPluginLoader pluginLoader, INavigationService navigationService )
        {
            DataViewModelOptions.AddNetworkExceptionType( typeof( WebException ) );
            DataViewModelOptions.AddNetworkExceptionType( typeof( OperationCanceledException ) );

            Container.Bind<IMainSettings, MainSettings>();
            Container.Bind<IServerAccess, ServerAccess>();

            foreach ( var plugin in pluginLoader.GetPlugins() )
            {
                plugin.Initialize( navigationService );
            }

            // SecureRequestHandler depends on the auth plugin, so it must be initialized after it
            Container.Bind<ISecureRequestHandler, SecureRequestHandler>();
        }
Ejemplo n.º 6
0
        public static void Initialize(IPluginLoader pluginLoader, INavigationService navigationService)
        {
            DataViewModelOptions.AddNetworkExceptionType(typeof(WebException));
            DataViewModelOptions.AddNetworkExceptionType(typeof(OperationCanceledException));

            Container.Bind <IMainSettings, MainSettings>();
            Container.Bind <IServerAccess, ServerAccess>();

            foreach (var plugin in pluginLoader.GetPlugins())
            {
                plugin.Initialize(navigationService);
            }

            // SecureRequestHandler depends on the auth plugin, so it must be initialized after it
            Container.Bind <ISecureRequestHandler, SecureRequestHandler>();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates a new App.
        /// </summary>
        public App()
        {
            InitializeComponent();

            // Services
            _navigationService = Container.Bind <IWindowsPhoneNavigationService, WindowsPhoneNavigationService>();
            Container.Bind <ISettingsStorage, WindowsPhoneSettingsStorage>();
            Container.Bind <IHttpClient, HttpClient>();
            Container.Bind <IBrowserService, BrowserService>();
            Container.Bind <IEmailService, EmailService>();
            Container.Bind <IPhoneService, PhoneService>();
            Container.Bind <ILocationService, LocationService>();
            Container.Bind <ITileService, TileService>();
            Container.Bind <IDeviceIdentifier, DeviceIdentifier>();
            Container.Bind <IRatingService, RatingService>();
            Container.Bind <IDataCache, WindowsPhoneDataCache>();
            Container.Bind <ICredentialsStorage, WindowsPhoneCredentialsStorage>();
            _pluginLoader = Container.Bind <IPluginLoader, PluginLoader>();
            _logger       = Container.Bind <Logger, GoogleAnalyticsLogger>();

            // Common part of plugins & services initialization
            AppInitializer.Initialize(_pluginLoader, _navigationService);

            // View-ViewModels bindings for Main
            _navigationService.Bind <MainViewModel>("/Views/MainView.xaml");
            _navigationService.Bind <SettingsViewModel>("/Views/SettingsView.xaml");
            _navigationService.Bind <AboutViewModel>("/Views/AboutView.xaml");

            // URI mapping
            LauncherEx.RegisterProtocol(PocketCampusProtocol, NavigateToCustomUri);

            // WP-specific part of plugin initialization
            _plugins = _pluginLoader.GetPlugins().Cast <IWindowsPhonePlugin>().ToArray();
            foreach (var plugin in _plugins)
            {
                plugin.Initialize(_navigationService);
            }

            // Debug settings
            DebugSettings.UserIdleDetectionMode = IdleDetectionMode.Disabled;

            // Theme initialization
            ThemeManager.OverrideOptions = ThemeManagerOverrideOptions.ApplicationBarColors;
            ThemeManager.ToLightTheme();
            ThemeManager.SetAccentColor((Color)Resources["AppAccentColor"]);
        }
Ejemplo n.º 8
0
        public SectionGroup GenerateContentFromConfig(SectionGroup group)
        {
            string configFile = _pluginLoader.GetPlugins().First(m => m.ID == SectionPlug.PluginID).RelativePath + @"\Thumbnail\{0}.xml".FormatWith(group.PartialView);
            List <SectionContent> contents = new List <SectionContent>();

            if (File.Exists(configFile))
            {
                XmlDocument doc        = new XmlDocument();
                FileStream  fileStream = new FileStream(configFile, FileMode.Open);
                doc.Load(fileStream);
                var nodes = doc.SelectNodes("/required/item");
                foreach (XmlNode item in nodes)
                {
                    var attr = item.Attributes["type"];
                    if (attr != null && attr.Value.IsNotNullAndWhiteSpace())
                    {
                        try
                        {
                            if (SectionPlug.ContentTypes.ContainsKey(attr.Value))
                            {
                                var content    = Activator.CreateInstance(SectionPlug.ContentTypes[attr.Value]) as SectionContent;
                                var properties = item.SelectNodes("property");
                                foreach (XmlNode property in properties)
                                {
                                    var name = property.Attributes["name"];
                                    if (name != null && name.Value.IsNotNullAndWhiteSpace() && property.InnerText.IsNotNullAndWhiteSpace())
                                    {
                                        ClassAction.SetObjPropertyValue(content, name.Value, property.InnerText);
                                    }
                                }
                                content.SectionGroupId  = group.ID;
                                content.SectionWidgetId = group.SectionWidgetId;
                                contents.Add(content);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex);
                        }
                    }
                }
            }
            group.SectionContents = contents;
            return(group);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Creates a new App.
        /// </summary>
        public App()
        {
            InitializeComponent();

            // Services
            _navigationService = Container.Bind<IWindowsPhoneNavigationService, WindowsPhoneNavigationService>();
            Container.Bind<ISettingsStorage, WindowsPhoneSettingsStorage>();
            Container.Bind<IHttpClient, HttpClient>();
            Container.Bind<IBrowserService, BrowserService>();
            Container.Bind<IEmailService, EmailService>();
            Container.Bind<IPhoneService, PhoneService>();
            Container.Bind<ILocationService, LocationService>();
            Container.Bind<ITileService, TileService>();
            Container.Bind<IDeviceIdentifier, DeviceIdentifier>();
            Container.Bind<IRatingService, RatingService>();
            Container.Bind<IDataCache, WindowsPhoneDataCache>();
            Container.Bind<ICredentialsStorage, WindowsPhoneCredentialsStorage>();
            _pluginLoader = Container.Bind<IPluginLoader, PluginLoader>();
            _logger = Container.Bind<Logger, GoogleAnalyticsLogger>();

            // Common part of plugins & services initialization
            AppInitializer.Initialize( _pluginLoader, _navigationService );

            // View-ViewModels bindings for Main
            _navigationService.Bind<MainViewModel>( "/Views/MainView.xaml" );
            _navigationService.Bind<SettingsViewModel>( "/Views/SettingsView.xaml" );
            _navigationService.Bind<AboutViewModel>( "/Views/AboutView.xaml" );

            // URI mapping
            LauncherEx.RegisterProtocol( PocketCampusProtocol, NavigateToCustomUri );

            // WP-specific part of plugin initialization
            _plugins = _pluginLoader.GetPlugins().Cast<IWindowsPhonePlugin>().ToArray();
            foreach ( var plugin in _plugins )
            {
                plugin.Initialize( _navigationService );
            }

            // Debug settings
            DebugSettings.UserIdleDetectionMode = IdleDetectionMode.Disabled;

            // Theme initialization
            ThemeManager.OverrideOptions = ThemeManagerOverrideOptions.ApplicationBarColors;
            ThemeManager.ToLightTheme();
            ThemeManager.SetAccentColor( (Color) Resources["AppAccentColor"] );
        }
Ejemplo n.º 10
0
        private void Initialize()
        {
            CustomXamlResourceLoader.Current = new LocalizingResourceLoader();

            LocalizationHelper.Initialize();

            DataViewModelOptions.AddNetworkExceptionType( typeof( WebException ) );
            DataViewModelOptions.AddNetworkExceptionType( typeof( OperationCanceledException ) );

            // ThinMVVM types
            Container.Bind<ISettingsStorage, WindowsRuntimeSettingsStorage>();
            Container.Bind<IDataCache, WindowsRuntimeDataCache>();
            _navigationService = Container.Bind<IWindowsRuntimeNavigationService, WindowsRuntimeNavigationService>();

            // Basic types
            _pluginLoader = Container.Bind<IPluginLoader, PluginLoader>();
            _settings = Container.Bind<IMainSettings, MainSettings>();
            Container.Bind<IHttpClient, HttpClient>();
            Container.Bind<IHttpHeaders, HttpHeaders>();
            Container.Bind<IBrowserService, BrowserService>();
            Container.Bind<IEmailService, EmailService>();
            Container.Bind<IPhoneService, PhoneService>();
            Container.Bind<ILocationService, LocationService>();
            Container.Bind<ITileService, TileService>();
            Container.Bind<IDeviceIdentifier, DeviceIdentifier>();
            Container.Bind<IAppRatingService, AppRatingService>();
            Container.Bind<ICredentialsStorage, CredentialsStorage>();

            // Logger
            Container.Bind<Logger, GoogleAnalyticsLogger>().Start();

            // Types dependent on one of the above types
            _serverAccess = Container.Bind<IServerAccess, ServerAccess>();
            _protocolHandler = new ProtocolHandler( _pluginLoader, _navigationService );

            // Views from Main
            _navigationService.Bind<AboutViewModel, AboutView>();
            _navigationService.Bind<MainViewModel, MainView>();
            _navigationService.Bind<SettingsViewModel, SettingsView>();

            // Register pocketcampus:// URIs to avoid going to the system and back when they're used inside of the app
            LauncherEx.RegisterProtocol( ProtocolHandler.PocketCampusProtocol, _protocolHandler.NavigateToCustomUri );

            // Initialize plugins, both their common part and their WinRT part
            foreach ( var plugin in _pluginLoader.GetPlugins().Cast<IWindowsRuntimePlugin>() )
            {
                plugin.Initialize( (INavigationService) _navigationService );
                plugin.Initialize( _navigationService );
            }

            // Handle the back button, since Windows Phone doesn't do it for us any more (unlike WP8 "Silverlight")
            HardwareButtons.BackPressed += ( _, e ) =>
            {
                e.Handled = true;
                _navigationService.NavigateBack();
            };
        }
Ejemplo n.º 11
0
 public IActionResult Index()
 {
     return(View(_pluginLoader.GetPlugins()));
 }
Ejemplo n.º 12
0
 public ProtocolHandler( IPluginLoader pluginLoader, INavigationService navigationService )
 {
     _plugins = pluginLoader.GetPlugins();
     _navigationService = navigationService;
 }