public KontentPublishingModule() : base(MODULE_NAME) { _settings = new SyncSettings(); _settings.LoadFromConfig(); if (_settings.IsValid()) { _assetSync = new AssetSync(_settings); _languageSync = new LanguageSync(_settings); _contentTypeSync = new ContentTypeSync(_settings); _pageSync = new PageSync(_settings, _assetSync, _contentTypeSync); _taxonomySync = new TaxonomySync(_settings); } }
private async Task UpsertItem(TreeNode node) { if (node == null) { throw new ArgumentNullException(nameof(node)); } var externalId = GetPageExternalId(node.NodeGUID); var endpoint = $"/items/external-id/{HttpUtility.UrlEncode(externalId)}"; var pageType = DataClassInfoProvider.GetDataClassInfo(node.NodeClassName); if (pageType == null) { throw new InvalidOperationException($"Page type {node.NodeClassName} not found."); } var formInfo = FormHelper.GetFormInfo(node.ClassName, false); if (formInfo == null) { throw new InvalidOperationException($"Form info for {node.NodeClassName} not found."); } var name = node.NodeName.LimitedTo(ITEM_NAME_MAXLENGTH); if (string.IsNullOrEmpty(name)) { name = node.NodeAliasPath.LimitedTo(ITEM_NAME_MAXLENGTH); } var payload = new { name, type = new { external_id = ContentTypeSync.GetPageTypeExternalId(pageType.ClassGUID) }, sitemap_locations = Array.Empty <object>() }; await ExecuteWithoutResponse(endpoint, HttpMethod.Put, payload); }
private List <object> GetRelationshipElements(TreeNode node) { var query = new DataQuery(); var nodeRelationshipsQuery = RelationshipInfo.Provider.Get() .WhereEquals("LeftNodeID", node.NodeID); // Get all the relationships for the document and also empty records for every existing relationships that the document is not using to send a complete set of relationship elements var allRelationshipsQuery = query .From( @" (" + query.IncludeDataParameters(nodeRelationshipsQuery.Parameters, nodeRelationshipsQuery.QueryText) + @") R FULL OUTER JOIN CMS_RelationshipNameSite RNS ON R.RelationshipNameID = RNS.RelationshipNameID LEFT JOIN CMS_RelationshipName RN ON RNS.RelationshipNameID = RN.RelationshipNameID LEFT JOIN CMS_Tree T ON R.RightNodeID = T.NodeID " ) .Columns("NodeGUID", "RelationshipGUID") .WhereEqualsOrNull("RelationshipNameIsAdHoc", false) .WhereEquals("RNS.SiteID", node.NodeSiteID) .OrderBy("RelationshipOrder"); var relationshipElements = allRelationshipsQuery .Result .Tables[0] .AsEnumerable() .GroupBy(row => (Guid)row["RelationshipGUID"]) .Select(group => new { element = new { external_id = ContentTypeSync.GetFieldExternalId(ContentTypeSync.RELATED_PAGES_GUID, group.Key) }, value = (object)group .Where(row => row["NodeGUID"] != DBNull.Value) .Select(row => new { external_id = GetPageExternalId((Guid)row["NodeGUID"]) }) .ToList() }) .Cast <object>() .ToList(); return(relationshipElements); }
private async Task UpsertVariant(TreeNode node) { if (node == null) { throw new ArgumentNullException(nameof(node)); } var externalId = GetPageExternalId(node.NodeGUID); var endpoint = GetVariantEndpoint(node); var contentType = DataClassInfoProvider.GetDataClassInfo(node.NodeClassName); if (contentType == null) { throw new InvalidOperationException($"Content type {node.NodeClassName} not found."); } var formInfo = FormHelper.GetFormInfo(node.ClassName, false); if (formInfo == null) { throw new InvalidOperationException($"Form info for {node.NodeClassName} not found."); } var fieldsToSync = ContentTypeSync.GetItemsToSync(node.NodeClassName).OfType <FormFieldInfo>(); var fieldElements = await Task.WhenAll( fieldsToSync.Select(async(field) => new { element = new { external_id = ContentTypeSync.GetFieldExternalId(contentType.ClassGUID, field.Guid) }, value = await GetElementValue(node, field) }) ); var unsortedAttachmentsElement = new { element = new { external_id = ContentTypeSync.GetFieldExternalId(contentType.ClassGUID, ContentTypeSync.UNSORTED_ATTACHMENTS_GUID) }, value = (object)GetAttachmentGuids(node, null).Select(guid => new { external_id = AssetSync.GetAttachmentExternalId(guid) }) }; var categoriesElement = new { element = new { external_id = ContentTypeSync.GetFieldExternalId(contentType.ClassGUID, TaxonomySync.CATEGORIES_GUID) }, value = (object)GetCategoryGuids(node).Select(guid => new { external_id = TaxonomySync.GetCategoryTermExternalId(guid) }).ToList() }; var relationshipElements = GetRelationshipElements(node); var payload = new { elements = fieldElements .Concat(new[] { unsortedAttachmentsElement, categoriesElement, }) .Concat(relationshipElements) .ToList() }; await ExecuteWithoutResponse(endpoint, HttpMethod.Put, payload, true); }
public PageSync(SyncSettings settings, AssetSync assetSync, ContentTypeSync contentTypeSync) : base(settings) { _assetSync = assetSync; _contentTypeSync = contentTypeSync; _linkTranslator = new LinkTranslator(settings, assetSync); }