internal static int GetAppIdFromGuidName(int zoneId, string appName, bool alsoCheckFolderName = false) { var baseCache = (BaseCache)DataSource.GetCache(Eav.Constants.DefaultZoneId, Eav.Constants.MetaDataAppId); // ReSharper disable once UnusedVariable var dummy = baseCache.CacheTimestamp; if (String.IsNullOrEmpty(appName)) { return(0); } var appId = baseCache.ZoneApps[zoneId].Apps .Where(p => p.Value == appName).Select(p => p.Key).FirstOrDefault(); // optionally check folder names if (appId == 0 && alsoCheckFolderName) { var nameLower = appName.ToLower(); foreach (var p in baseCache.ZoneApps[zoneId].Apps) { var mds = DataSource.GetMetaDataSource(zoneId, p.Key); var appMetaData = mds .GetMetadata(SystemRuntime.MetadataType(Eav.Constants.AppAssignmentName), p.Key, AppConstants.TypeAppConfig) .FirstOrDefault(); var folder = appMetaData?.GetBestValue("Folder").ToString(); if (!String.IsNullOrEmpty(folder) && folder.ToLower() == nameLower) { return(p.Key); } } } return(appId > 0 ? appId : Settings.DataIsMissingInDb); }
internal static int GetAppIdFromGuidName(int zoneId, string appName, bool alsoCheckFolderName = false) { // ToDo: Fix issue in EAV (cache is only ensured when a CacheItem-Property is accessed like LastRefresh) var baseCache = ((BaseCache)DataSource.GetCache(Constants.DefaultZoneId, Constants.MetaDataAppId)); // ReSharper disable once UnusedVariable var dummy = baseCache.CacheLastRefresh; if (IsNullOrEmpty(appName)) { return(0); } var appId = baseCache.ZoneApps[zoneId].Apps .Where(p => p.Value == appName).Select(p => p.Key).FirstOrDefault(); // optionally check folder names if (appId == 0 && alsoCheckFolderName) { var nameLower = appName.ToLower(); foreach (var p in baseCache.ZoneApps[zoneId].Apps) { var mds = DataSource.GetMetaDataSource(zoneId, p.Key); var appMetaData = mds .GetMetadata(SystemRuntime.MetadataType(Constants.AppAssignmentName), p.Key, AppConstants.AttributeSetStaticNameApps) .FirstOrDefault(); string folder = appMetaData?.GetBestValue("Folder").ToString(); if (!IsNullOrEmpty(folder) && folder.ToLower() == nameLower) { return(p.Key); } } } return(appId > 0 ? appId : Settings.DataIsMissingInDb); }
/// <summary> /// Assign all kinds of metadata / resources / settings (App-Mode only) /// </summary> private void InitializeResourcesSettingsAndMetadata(bool allowSideEffects) { Log.Add($"init app resources allowSE:{allowSideEffects}"); _env = new Environment.DnnEnvironment(Log); if (allowSideEffects) { // if it's a real App (not content/default), do more AppManagement.EnsureAppIsConfigured(ZoneId, AppId, parentLog: Log); // make sure additional settings etc. exist } // Get app-describing entity var appAssignmentId = SystemRuntime.MetadataType(Eav.Constants.AppAssignmentName); var mds = DataSource.GetMetaDataSource(ZoneId, AppId); var appMetaData = mds .GetMetadata(appAssignmentId, AppId, SexyContent.Settings.AttributeSetStaticNameApps) .FirstOrDefault(); var appResources = mds .GetMetadata(appAssignmentId, AppId, SexyContent.Settings.AttributeSetStaticNameAppResources) .FirstOrDefault(); var appSettings = mds .GetMetadata(appAssignmentId, AppId, SexyContent.Settings.AttributeSetStaticNameAppSettings) .FirstOrDefault(); dynamic appMetaDataDynamic = appMetaData != null ? new DynamicEntity(appMetaData, new[] { Thread.CurrentThread.CurrentCulture.Name }, null) : null; Name = appMetaDataDynamic?.DisplayName ?? "Error"; Folder = appMetaDataDynamic?.Folder ?? "Error"; Configuration = appMetaDataDynamic; Resources = appResources != null ? new DynamicEntity(appResources, new[] { Thread.CurrentThread.CurrentCulture.Name }, null) : null; Settings = appResources != null ? new DynamicEntity(appSettings, new[] { Thread.CurrentThread.CurrentCulture.Name }, null) : null; Hidden = appMetaDataDynamic?.Hidden ?? false; }
/// <summary> /// Create app-describing entity for configuration and add Settings and Resources Content Type /// </summary> internal static void EnsureAppIsConfigured(int zoneId, int appId, Log parentLog, string appName = null) { var appAssignment = SystemRuntime.MetadataType(Constants.AppAssignmentName); var scope = Settings.AttributeSetScopeApps; var mds = DataSource.GetMetaDataSource(zoneId, appId); var appMetaData = mds.GetMetadata(appAssignment, appId, Settings.AttributeSetStaticNameApps).FirstOrDefault(); var appResources = mds.GetMetadata(appAssignment, appId, Settings.AttributeSetStaticNameAppResources).FirstOrDefault(); var appSettings = mds.GetMetadata(appAssignment, appId, Settings.AttributeSetStaticNameAppSettings).FirstOrDefault(); // Get appName from cache - stop if it's a "Default" app var eavAppName = new ZoneRuntime(zoneId, parentLog).GetName(appId);// State.GetAppName(zoneId, appId); if (eavAppName == Eav.Constants.DefaultAppName) { return; } var appMan = new AppManager(zoneId, appId); if (appMetaData == null) { appMan.MetadataEnsureTypeAndSingleEntity(scope, Settings.AttributeSetStaticNameApps, "App Metadata", appAssignment, new Dictionary <string, object>() { { "DisplayName", IsNullOrEmpty(appName) ? eavAppName : appName }, { "Folder", IsNullOrEmpty(appName) ? eavAppName : RemoveIllegalCharsFromPath(appName) }, { "AllowTokenTemplates", "False" }, { "AllowRazorTemplates", "False" }, { "Version", "00.00.01" }, { "OriginalId", "" } }); } // Add new (empty) ContentType for Settings if (appSettings == null) { appMan.MetadataEnsureTypeAndSingleEntity(scope, Settings.AttributeSetStaticNameAppSettings, "Stores settings for an app", appAssignment, null); } // add new (empty) ContentType for Resources if (appResources == null) { appMan.MetadataEnsureTypeAndSingleEntity(scope, Settings.AttributeSetStaticNameAppResources, "Stores resources like translations for an app", appAssignment, null); } if (appMetaData == null || appSettings == null || appResources == null) { SystemManager.Purge(zoneId, appId); } }