コード例 #1
0
 private void TestUri(CmUri testURI, ContentNamespace ns, int publicationId, int itemId, int itemTypeId)
 {
     Assert.AreEqual(ns, testURI.Namespace, "Namespace should match");
     Assert.AreEqual(publicationId, testURI.PublicationId, "Publication ID should match");
     Assert.AreEqual(itemId, testURI.ItemId, "Item ID should match");
     Assert.AreEqual(itemTypeId, (int)testURI.ItemType, "Item Type ID should match");
 }
コード例 #2
0
 public static IGraphQLRequest BinaryComponent(CmUri cmUri, string customMetaFilter,
                                               IContextData contextData, IContextData globalContextData) =>
 new QueryBuilder().WithQueryResource("BinaryComponentByCmUri", true).WithCmUri(cmUri)
 .WithCustomMetaFilter(customMetaFilter)
 .WithContextData(contextData)
 .WithContextData(globalContextData)
 .Build();
        public override Localization GetLocalization(string localizationId)
        {
            using (new Tracer(localizationId))
            {
                Localization result;
                if (!KnownLocalizations.TryGetValue(localizationId, out result))
                {
                    // Check for namespace prefix (ish: or tcm:)
                    if (localizationId.StartsWith("ish:"))
                    {
                        CmUri uri = CmUri.FromString(localizationId);
                        result = new DocsLocalization(uri.PublicationId);
                    }
                    else if (localizationId.StartsWith("tcm:"))
                    {
                        CmUri uri = CmUri.FromString(localizationId);
                        result = new Localization {
                            Id = uri.ItemId.ToString()
                        };
                    }
                    else
                    {
                        // Attempt to resolve it from Docs
                        var         client      = ApiClientFactory.Instance.CreateClient();
                        Publication publication = client.GetPublication(ContentNamespace.Docs, int.Parse(localizationId), null, null);
                        result = publication != null ? new DocsLocalization(publication.PublicationId) : base.GetLocalization(localizationId);
                    }

                    KnownLocalizations[localizationId] = result;
                }

                return(result);
            }
        }
コード例 #4
0
 public async Task <Page> GetPageAsync(CmUri cmUri,
                                       string customMetaFilter, ContentIncludeMode contentIncludeMode, IContextData contextData,
                                       CancellationToken cancellationToken = default(CancellationToken))
 => (await _client.ExecuteAsync <ContentQuery>(
         GraphQLRequests.Page(cmUri, customMetaFilter, contentIncludeMode, contextData, GlobalContextDataInternal),
         cancellationToken).ConfigureAwait(false))
 .TypedResponseData.Page;
コード例 #5
0
 public static IGraphQLRequest Page(CmUri cmUri, string customMetaFilter, ContentIncludeMode contentIncludeMode,
                                    IContextData contextData, IContextData globalContextData) =>
 new QueryBuilder().WithQueryResource("PageByCmUri", true).WithCmUri(cmUri)
 .WithCustomMetaFilter(customMetaFilter)
 .WithContentIncludeMode(contentIncludeMode)
 .WithContextData(contextData)
 .WithContextData(globalContextData)
 .Build();
コード例 #6
0
        protected override TaxonomyNode CreateTaxonomyNode(Keyword keyword, int expandLevels, NavigationFilter filter, ILocalization localization)
        {
            TaxonomyNode node      = base.CreateTaxonomyNode(keyword, expandLevels, filter, localization);
            string       ishRefUri = (string)keyword.KeywordMeta.GetFirstValue("ish.ref.uri");

            if (ishRefUri != null)
            {
                var ish = CmUri.FromString(ishRefUri);
                node.Url = $"/{ish.PublicationId}/{ish.ItemId}";
            }
            node.Visible = true;
            return(node);
        }
コード例 #7
0
        public void TestCreateFromStringWithVersion()
        {
            string uriString = CreateCmUriString(ContentNamespace.Sites, _testPublicationId, _testItemId, _testItemTypeId, _testVersion);

            try
            {
                CmUri testURI = new CmUri(uriString);
                TestUri(testURI, ContentNamespace.Sites, _testPublicationId, _testItemId, _testItemTypeId, _testVersion);
            }
            catch (Exception ex)
            {
                Assert.Fail($"Failed to parse {uriString} : {ex}");
            }
        }
コード例 #8
0
        private static UgcComments CreateUgcCommentsEntity(Localization localization, string modelId, ItemType itemType)
        {
            var mvcData = new Common.Models.MvcData("Ugc:Ugc:UgcComments");

            mvcData.ControllerAreaName = "Ugc";
            return(new UgcComments
            {
                Target =
                    CmUri.FromString(
                        $"{localization.CmUriScheme}:{localization.Id}-{modelId}-{(int)itemType}"),
                MvcData = mvcData,
                IsVolatile = true
            });
        }
コード例 #9
0
        public void TestInvalidNamespace()
        {
            string uri = "tcr:1-2-3-4";

            try
            {
                CmUri testURI = new CmUri(uri);
                Assert.Fail($"Should not be able to create a uri from {uri}");
            }
            catch (Exception)
            {
                //expected behaviour
            }
        }
コード例 #10
0
        public void TestCreateFromStringWithVersionButNoItemType()
        {
            string uriString =
                $"{UriPrefix}{_testPublicationId}{UriSeparator}{_testItemId}{UriSeparator}v{_testVersion}";

            try
            {
                CmUri testURI = new CmUri(uriString);
                TestUri(testURI, ContentNamespace.Sites, _testPublicationId, _testItemId, (int)ItemType.Component, _testVersion);
            }
            catch (Exception ex)
            {
                Assert.Fail($"Failed to parse {uriString} : {ex}");
            }
        }
コード例 #11
0
        public void TestTcmUriOperatorOverloads()
        {
            CmUri testURI1 = new CmUri(ContentNamespace.Sites, 1, 2, ItemType.Category, 4);
            CmUri testURI2 = new CmUri(ContentNamespace.Sites, 1, 2, ItemType.Category, 4);

            Assert.AreEqual(testURI1.ToString(), testURI2.ToString(), "CmUri ToString() should be equal");
            Assert.AreEqual(testURI1.GetHashCode(), testURI2.GetHashCode(), "CmUri hashCode() should be equal");

            Assert.IsTrue(testURI1 == testURI2, "CmUri objects should be equal");
            Assert.IsTrue(testURI1.Equals(testURI2), "CmUri objects should be equal");

            HashSet <CmUri> testSet = new HashSet <CmUri> {
                testURI1
            };

            Assert.IsTrue(testSet.Contains(testURI1), "Due to object equality, set contains should match");
        }
        /// <summary>
        /// Resolves a link URI (TCM URI or site URL) to a normalized site URL.
        /// </summary>
        /// <param name="sourceUri">The source URI (TCM URI or site URL)</param>
        /// <param name="resolveToBinary">Specifies whether a link to a Multimedia Component should be resolved directly to its Binary (<c>true</c>) or as a regular Component link.</param>
        /// <param name="localization">The context Localization (optional, since the TCM URI already contains a Publication ID, but this allows resolving in a different context).</param>
        /// <returns>The resolved URL.</returns>
        public string ResolveLink(string sourceUri, bool resolveToBinary = false, ILocalization localization = null)
        {
            if (sourceUri == null)
            {
                return(null);
            }

            string url = SiteConfiguration.CacheProvider.GetOrAdd($"{sourceUri}:{resolveToBinary}:{localization?.Id}",
                                                                  CacheRegions.LinkResolving,
                                                                  () =>
            {
                if (sourceUri.IsCmUri())
                {
                    var client = ApiClientFactory.Instance.CreateClient();
                    var cmUri  = new CmUri(sourceUri);
                    switch (cmUri.ItemType)
                    {
                    case ItemType.Component:
                        return(resolveToBinary ?
                               client.ResolveBinaryLink(cmUri.Namespace, cmUri.PublicationId, cmUri.ItemId, null) :
                               client.ResolveComponentLink(cmUri.Namespace, cmUri.PublicationId, cmUri.ItemId, null, null));

                    case ItemType.Page:
                        return(client.ResolvePageLink(cmUri.Namespace, cmUri.PublicationId, cmUri.ItemId));
                    }
                }
                else
                {
                    return(sourceUri);
                }
                return(null);
            });

            // Strip off default extension / page name
            if (url == null || !url.EndsWith(Constants.DefaultExtension))
            {
                return(url);
            }
            url = url.Substring(0, url.Length - Constants.DefaultExtension.Length);
            if (url.EndsWith("/" + Constants.DefaultExtensionLessPageName))
            {
                url = url.Substring(0, url.Length - Constants.DefaultExtensionLessPageName.Length);
            }
            return(url);
        }
コード例 #13
0
        private static UgcPostCommentForm CreateUgcPostCommentEntity(Localization localization, string modelId, ItemType itemType, ContentModelData postFormConfig)
        {
            var mvcData = new Common.Models.MvcData("Ugc:Ugc:UgcPostCommentForm");

            mvcData.ControllerAreaName = "Ugc";
            return(new UgcPostCommentForm
            {
                Target =
                    CmUri.FromString(
                        $"{localization.CmUriScheme}:{localization.Id}-{modelId}-{(int)itemType}"),
                MvcData = mvcData,
                UserNameLabel = GetValue <string>(postFormConfig, "userNameLabel"),
                EmailAddressLabel = GetValue <string>(postFormConfig, "emailAddressLabel"),
                ContentLabel = GetValue <string>(postFormConfig, "contentLabel"),
                SubmitButtonLabel = GetValue <string>(postFormConfig, "submitButtonLabel"),
                NoContentMessage = GetValue <string>(postFormConfig, "noContentMessage"),
                NoEmailAddressMessage = GetValue <string>(postFormConfig, "noEmailAddressMessage"),
                NoUserNameMessage = GetValue <string>(postFormConfig, "noUserNameMessage"),
                IsVolatile = true
            });
        }
コード例 #14
0
ファイル: UgcService.cs プロジェクト: gdeheul/dxa-modules
        private static CmUri CreateUri(int publicationId, int pageId)
        {
            ILocalization localization = WebRequestContext.Localization;

            return(CmUri.Create(localization.CmUriScheme, publicationId, pageId, ItemType.Page));
        }
コード例 #15
0
 public Page GetPage(CmUri cmUri, string customMetaFilter, ContentIncludeMode contentIncludeMode,
                     IContextData contextData)
 => _client.Execute <ContentQuery>(
     GraphQLRequests.Page(cmUri, customMetaFilter, contentIncludeMode, contextData, GlobalContextDataInternal))
 .TypedResponseData.Page;
コード例 #16
0
 public BinaryComponent GetBinaryComponent(CmUri cmUri, string customMetaFilter, IContextData contextData)
 =>
 _client.Execute <ContentQuery>(GraphQLRequests.BinaryComponent(cmUri, customMetaFilter, contextData,
                                                                GlobalContextDataInternal))
 .TypedResponseData.BinaryComponent;
コード例 #17
0
 public async Task <BinaryComponent> GetBinaryComponentAsync(CmUri cmUri, string customMetaFilter,
                                                             IContextData contextData, CancellationToken cancellationToken = default(CancellationToken)) => (await
                                                                                                                                                             _client.ExecuteAsync <ContentQuery>(
                                                                                                                                                                 GraphQLRequests.BinaryComponent(cmUri, customMetaFilter, contextData, GlobalContextDataInternal),
                                                                                                                                                                 cancellationToken).ConfigureAwait(false))
 .TypedResponseData.BinaryComponent;
コード例 #18
0
 public QueryBuilder WithCmUri(CmUri cmUri)
 => WithVariable("cmUri", cmUri).WithNamespace(cmUri.Namespace).WithPublicationId(cmUri.PublicationId);
コード例 #19
0
 public static ContentNamespace Namespace(this ILocalization localization)
 => CmUri.NamespaceIdentiferToId(localization.CmUriScheme);
コード例 #20
0
 private string CreateCmUriString(ContentNamespace ns, int publicationId, int itemId)
 => $"{CmUri.NamespaceIdToIdentifer(ns)}:{publicationId}{UriSeparator}{itemId}";