public static IActionTokenProvider GetActionTokenProvider(Type elementProviderType, string actionTypeName) { Dictionary <string, IActionTokenProvider> actionTokenProviders; using (_resourceLocker.Locker) { if (_resourceLocker.Resources.ActionTokenProviderCache.TryGetValue(elementProviderType, out actionTokenProviders) == false) { actionTokenProviders = new Dictionary <string, IActionTokenProvider>(); var pairs = (from t in elementProviderType.GetCustomAttributesRecursively <ActionTokenProviderAttribute>() select new { ActionTypeName = t.ActionTypeName, ActionTokenProviderType = t.ActionTokenProviderType }); foreach (var pair in pairs) { if (actionTokenProviders.ContainsKey(pair.ActionTypeName) == false) { IActionTokenProvider newActionTokenProvider = (IActionTokenProvider)Activator.CreateInstance(pair.ActionTokenProviderType); actionTokenProviders.Add(pair.ActionTypeName, newActionTokenProvider); } } _resourceLocker.Resources.ActionTokenProviderCache.Add(elementProviderType, actionTokenProviders); } IActionTokenProvider actionTokenProvider; actionTokenProviders.TryGetValue(actionTypeName, out actionTokenProvider); return(actionTokenProvider); } }
/// <exclude /> public List <ElementAction> GetActions(IData data, Type elementProviderType) { if (!(data is IPublishControlled) || !data.DataSourceId.DataScopeIdentifier.Equals(DataScopeIdentifier.Administrated)) { return(new List <ElementAction>()); } if (data is ILocalizedControlled && !UserSettings.ActiveLocaleCultureInfo.Equals(data.DataSourceId.LocaleScope)) { return(new List <ElementAction>()); } var publishControlled = (IPublishControlled)data; IList <string> visualTrans; if (!_visualTransitions.TryGetValue(publishControlled.PublicationStatus, out visualTrans)) { throw new InvalidOperationException($"Unknown publication state '{publishControlled.PublicationStatus}'"); } var clientActions = visualTrans.Select(newState => _visualTransitionsActions[newState]()).ToList(); IData publicData = DataFacade.GetDataFromOtherScope(data, DataScopeIdentifier.Public, true, false).FirstOrDefault(); if (publicData != null) { var unpublishAction = new ElementAction(new ActionHandle(new ProxyDataActionToken(ActionIdentifier.Unpublish) { DoIgnoreEntityTokenLocking = true })) { VisualData = new ActionVisualizedData { Label = StringResourceSystemFacade.GetString("Composite.Plugins.GenericPublishProcessController", "Unpublish"), ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.GenericPublishProcessController", "UnpublishToolTip"), Icon = GenericPublishProcessController.Unpublish, Disabled = false, ActionLocation = new ActionLocation { ActionType = ActionType.Other, IsInFolder = false, IsInToolbar = true, ActionGroup = WorkflowActionGroup } } }; clientActions.Add(unpublishAction); if (publishControlled.PublicationStatus == Draft) { if (ProcessControllerAttributesFacade.IsActionIgnored(elementProviderType, GenericPublishProcessControllerActionTypeNames.UndoUnpublishedChanges) == false) { ActionToken actionToken; IActionTokenProvider actionTokenProvider = ProcessControllerAttributesFacade.GetActionTokenProvider(elementProviderType, GenericPublishProcessControllerActionTypeNames.UndoUnpublishedChanges); if (actionTokenProvider != null) { actionToken = actionTokenProvider.GetActionToken(GenericPublishProcessControllerActionTypeNames.UndoUnpublishedChanges, data); } else { actionToken = new UndoPublishedChangesActionToken(); } var undoPublishedChangesAction = new ElementAction(new ActionHandle(actionToken)) { VisualData = new ActionVisualizedData { Label = StringResourceSystemFacade.GetString("Composite.Plugins.GenericPublishProcessController", "UndoPublishedChanges"), ToolTip = StringResourceSystemFacade.GetString("Composite.Plugins.GenericPublishProcessController", "UndoPublishedChangesToolTip"), Icon = GenericPublishProcessController.UndoUnpublishedChanges, Disabled = false, ActionLocation = new ActionLocation { ActionType = ActionType.Other, IsInFolder = false, IsInToolbar = true, ActionGroup = WorkflowActionGroup } } }; clientActions.Add(undoPublishedChangesAction); } } } return(clientActions); }