/// <summary>
        /// This method returns the requested item status based on content location url parameters.
        /// </summary>
        /// <remarks>Copied from IContentLocatableView in Sitefinity. Should use it instead when it goes public.</remarks>
        /// <returns>Requested item status.</returns>
        private ContentLifecycleStatus ResolveRequestedItemStatus()
        {
            var itemStatusParam           = SystemManager.CurrentHttpContext.Request.Params["sf-lc-status"] ?? SystemManager.CurrentHttpContext.Items["sf-lc-status"];
            ContentLifecycleStatus status = ContentLifecycleStatus.Live;

            if (itemStatusParam != null)
            {
                if (!Enum.TryParse <ContentLifecycleStatus>(itemStatusParam as string, out status))
                {
                    status = ContentLifecycleStatus.Live;
                }
            }

            return(status);
        }
Ejemplo n.º 2
0
        private IDictionary<Guid, List> GetRelevantItemsList(List<List> contentList, ListsManager manager, ContentLifecycleStatus status)
        {
            Dictionary<Guid, List> result = new Dictionary<Guid, List>();

            ////get all master content items ids
            var contentItemsIds = contentList.Select(cl => cl.Id).ToArray<Guid>();

            if (contentItemsIds.Length > 0)
            {
                ////get all items in the specified status related  to the master items in the list
                var relatedContentItems = manager.GetItems<List>().Where(t => contentItemsIds.Contains(t.OriginalContentId) && t.Status == status);

                foreach (var item in relatedContentItems)
                    result.Add(item.OriginalContentId, item);
            }

            return result.Count > 0 ? result : null;
        }
Ejemplo n.º 3
0
        public IDataItem GetItemByUrl(string url, Type itemType, string provider, out string redirectUrl)
        {
            var manager = this.ResolveManager(itemType, provider);

            if (manager == null)
            {
                redirectUrl = null;
                return(null);
            }

            var itemIdFromQueryParam = (SystemManager.CurrentHttpContext.Request.ParamsGet("sf-itemId") ?? SystemManager.CurrentHttpContext.Items["sf-itemId"]) as string;

            if (!itemIdFromQueryParam.IsNullOrEmpty())
            {
                Guid itemIdGuid;
                if (Guid.TryParse(itemIdFromQueryParam, out itemIdGuid))
                {
                    redirectUrl = null;
                    return(manager.GetItem(itemType, itemIdGuid) as IDataItem);
                }
            }

            IDataItem item = null;

            if (manager is IContentManager || manager is DynamicModuleManager)
            {
                try
                {
                    item = this.GetItemFromUrl(manager, itemType, url, out redirectUrl);
                }
                catch (System.UnauthorizedAccessException e)
                {
                    redirectUrl = null;
                    ItemAccessException access = new ItemAccessException(e.Message, e.InnerException);
                    access.Data["ItemType"] = itemType.Name;

                    throw access;
                }

                if (item != null)
                {
                    var type = item.GetType();
                    if (!type.Equals(itemType) && !(type.Module != null && type.Module.ScopeName == "OpenAccessDynamic" && type.BaseType != null && type.BaseType.Equals(itemType)))
                    {
                        item = null;
                    }
                }
            }
            else
            {
                item = ((IUrlProvider)manager.Provider).GetItemFromUrl(itemType, url, out redirectUrl);
            }

            var lifecycleItem    = item as ILifecycleDataItem;
            var lifecycleManager = manager as ILifecycleManager;

            if (lifecycleItem != null && lifecycleManager != null)
            {
                ContentLifecycleStatus requestedStatus = ContentLocatableViewExtensions.GetRequestedItemStatus();
                if (lifecycleItem.Status != requestedStatus)
                {
                    item = lifecycleManager.Lifecycle.GetLive(lifecycleItem);
                }

                object requestedItem;
                if (ContentLocatableViewExtensions.TryGetItemWithRequestedStatus(lifecycleItem, lifecycleManager, out requestedItem))
                {
                    item = requestedItem as IDataItem;
                }
            }

            return(item);
        }
Ejemplo n.º 4
0
        private IDictionary <Guid, List> GetRelevantItemsList(List <List> contentList, ListsManager manager, ContentLifecycleStatus status)
        {
            Dictionary <Guid, List> result = new Dictionary <Guid, List>();

            ////get all master content items ids
            var contentItemsIds = contentList.Select(cl => cl.Id).ToArray <Guid>();

            if (contentItemsIds.Length > 0)
            {
                ////get all items in the specified status related  to the master items in the list
                var relatedContentItems = manager.GetItems <List>().Where(t => contentItemsIds.Contains(t.OriginalContentId) && t.Status == status);

                foreach (var item in relatedContentItems)
                {
                    result.Add(item.OriginalContentId, item);
                }
            }

            return(result.Count > 0 ? result : null);
        }