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);
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }