Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Fetch - ALL */
- private Type ResolveType(string type) {
- return TypeResolutionService.ResolveType(string.Concat("Telerik.Sitefinity.DynamicTypes.Model.", type));
- }
- private IQueryable<DynamicContent> GetAllDynamicContentItems(string dynamicContentTypeName) {
- var dynamicContentType = ResolveType(dynamicContentTypeName);
- //Aaaahh non-multisite, how simple you were
- if (!SystemManager.CurrentContext.IsMultisiteMode) {
- return DynamicModuleManager.GetManager().GetDataItems(dynamicContentType);
- }
- return SitefinityQuery.Get<DynamicContent>(dynamicContentType, DynamicModuleManager.GetManager().Provider)
- .Where(o => GetDynamicContentApplicationNames(dynamicContentTypeName).Contains(o.ApplicationName));
- }
- /* Fetch - LIVE RECORDS */
- public IQueryable<DynamicContent> GetDynamicContentItems(string dynamicContentTypeName) {
- return GetAllDynamicContentItems(dynamicContentTypeName).Where(o => o.Visible && o.Status == ContentLifecycleStatus.Live);
- }
- public DynamicContent GetDynamicContentItem(string dynamicContentTypeName, Guid id) {
- return GetDynamicContentItems(dynamicContentTypeName).SingleOrDefault(o => o.Id == id);
- }
- IEnumerable<string> GetDynamicContentApplicationNames(string dynamicContentTypeName) {
- //I like to pass around shorthand, but some functions need the full type
- var fullDynamicContentTypeName = string.Concat("Telerik.Sitefinity.DynamicTypes.Model.", dynamicContentTypeName);
- //Seems like each type you want to work with has it's own Gotchas, the Gotcha for DynamicContent is that the dataSourceName
- //Isn't the same as the "Type" and must be looked up via code, unfortunately that code is an Interal Method
- var moduleBuilderManager = ModuleBuilderManager.GetManager();
- var getDynamicModuleTypesMethod = moduleBuilderManager.GetType().GetMethod("GetDynamicModuleTypes", BindingFlags.Instance | BindingFlags.NonPublic);
- var dynamicModuleTypes = (IQueryable<DynamicModuleType>)getDynamicModuleTypesMethod.Invoke(moduleBuilderManager, null);
- var dynamicModuleType = dynamicModuleTypes.Single(o => o.TypeNamespace + "." + o.TypeName == fullDynamicContentTypeName);
- //This has just translated the programattic type name - "MyModuleTitle.ModuleItem" to the Title of the module e.g., "My Module Title"
- //Back on track with getting provider Names
- var providerNames = GetProviderNames(dynamicModuleType.ModuleName);
- //NOW we can't just use these, because the "Default" provider for Sitefinity
- //Has a different ProviderName from ApplicationName
- //We could hardcode it, but that's not right, let's look it up in the place Sitefinity sets it.
- return providerNames.Select(o => DynamicContentProviderApplicationName(o));
- }
- string DynamicContentProviderApplicationName(string providerName) {
- //Marking this Internal makes code harder and slower too... Should I just hardcode these defaults? No, doesn't feel right to do so.
- var dynamicModulesConfigType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicModules.Configuration.DynamicModulesConfig");
- var dynamicModulesConfig = Config.Get(dynamicModulesConfigType);
- var dynamicModuleProviders = (ConfigElementDictionary<string, DataProviderSettings>)dynamicModulesConfigType.GetProperty("Providers").GetValue(dynamicModulesConfig, null);
- return dynamicModuleProviders[providerName].Parameters["applicationName"];
- }
- IEnumerable<string> GetProviderNames(string dataSourceName) {
- return SystemManager.CurrentContext.CurrentSite.SiteDataSourceLinks
- .Where(o => o.DataSourceName == dataSourceName)
- .Select(o => o.ProviderName);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement