private void PublishAllBinaries(Dynamic.Page page) { GeneralUtils.TimedLog("page: " + page); GeneralUtils.TimedLog("page metadata fields property: " + (page.MetadataFields == null ? "null" : page.MetadataFields.ToString())); GeneralUtils.TimedLog("page metadata fields count: " + page.MetadataFields.Count); foreach (Dynamic.Field field in page.MetadataFields.Values) { if (field.FieldType == Dynamic.FieldType.ComponentLink || field.FieldType == Dynamic.FieldType.MultiMediaLink) { foreach (Dynamic.Component linkedComponent in field.LinkedComponentValues) { PublishAllBinaries(linkedComponent); } } if (field.FieldType == Dynamic.FieldType.Embedded) { foreach (Dynamic.FieldSet embeddedFields in field.EmbeddedValues) { PublishAllBinaries(embeddedFields); } } if (field.FieldType == Dynamic.FieldType.Xhtml) { for (int i = 0; i < field.Values.Count; i++) { string xhtml = field.Values[i]; field.Values[i] = BinaryPublisher.PublishBinariesInRichTextField(xhtml); } } } }
private void PublishAllBinaries(Dynamic.Page page) { foreach (Dynamic.Field field in page.MetadataFields.Values) { if (field.FieldType == Dynamic.FieldType.ComponentLink || field.FieldType == Dynamic.FieldType.MultiMediaLink) { foreach (Dynamic.Component linkedComponent in field.LinkedComponentValues) { PublishAllBinaries(linkedComponent); } } if (field.FieldType == Dynamic.FieldType.Embedded) { foreach (Dynamic.FieldSet embeddedFields in field.EmbeddedValues) { PublishAllBinaries(embeddedFields); } } if (field.FieldType == Dynamic.FieldType.Xhtml) { for (int i = 0; i < field.Values.Count; i++) { string xhtml = field.Values[i]; field.Values[i] = BinaryPublisher.PublishBinariesInRichTextField(xhtml, Manager.BuildProperties); } } } }
protected override void TransformPage(Dynamic.Page page) { // call helper function to publish all relevant multimedia components // Note: this template only published mm components that are found in the metadata of the page // MM components that are used as component presentation, or that are linked from a component that is // used as a component presentation, will be published from the component template // (e.g. by adding 'Publish binaries for components' to that CT) PublishAllBinaries(page); }
public static Dynamic.Page BuildPage(TCM.Page tcmPage, Engine engine, BuildManager manager, int linkLevels, bool resolveWidthAndHeight, bool publishEmptyFields) { Dynamic.Page p = new Dynamic.Page { Title = tcmPage.Title, Id = tcmPage.Id.ToString(), Filename = tcmPage.FileName, PageTemplate = manager.BuildPageTemplate(tcmPage.PageTemplate), Schema = manager.BuildSchema(tcmPage.MetadataSchema), Version = tcmPage.Version, RevisionDate = tcmPage.RevisionDate, MetadataFields = new Dynamic.FieldSet() }; if (linkLevels > 0) { try { if (tcmPage.Metadata != null && tcmPage.MetadataSchema != null) { var tcmMetadataFields = new Tridion.ContentManager.ContentManagement.Fields.ItemFields(tcmPage.Metadata, tcmPage.MetadataSchema); p.MetadataFields = manager.BuildFields(tcmMetadataFields); } } catch (Exception) { // fail silently if there is no metadata schema } } p.ComponentPresentations = new List <Dynamic.ComponentPresentation>(); foreach (TCM.ComponentPresentation cp in tcmPage.ComponentPresentations) { Dynamic.ComponentPresentation dynCp = manager.BuildComponentPresentation(cp, engine, linkLevels - 1, resolveWidthAndHeight); p.ComponentPresentations.Add(dynCp); } p.StructureGroup = manager.BuildOrganizationalItem((TCM.StructureGroup)tcmPage.OrganizationalItem); if (!manager.BuildProperties.OmitContextPublications) { p.Publication = manager.BuildPublication(tcmPage.ContextRepository); } if (!manager.BuildProperties.OmitOwningPublications) { p.OwningPublication = manager.BuildPublication(tcmPage.OwningRepository); } if (!manager.BuildProperties.OmitCategories) { p.Categories = manager.BuildCategories(tcmPage); } manager.AddXpathToFields(p.MetadataFields, "Metadata"); return(p); }
public static Dynamic.Page BuildPage(TCM.Page tcmPage, Engine engine, BuildManager manager, int linkLevels, bool resolveWidthAndHeight,bool publishEmptyFields) { Dynamic.Page p = new Dynamic.Page { Title = tcmPage.Title, Id = tcmPage.Id.ToString(), Filename = tcmPage.FileName, PageTemplate = manager.BuildPageTemplate(tcmPage.PageTemplate), Schema = manager.BuildSchema(tcmPage.MetadataSchema), Version = tcmPage.Version, RevisionDate = tcmPage.RevisionDate, MetadataFields = new Dynamic.FieldSet() }; if (linkLevels > 0) { try { if (tcmPage.Metadata != null && tcmPage.MetadataSchema != null) { var tcmMetadataFields = new Tridion.ContentManager.ContentManagement.Fields.ItemFields(tcmPage.Metadata, tcmPage.MetadataSchema); p.MetadataFields = manager.BuildFields(tcmMetadataFields); } } catch (Exception) { // fail silently if there is no metadata schema } } p.ComponentPresentations = new List<Dynamic.ComponentPresentation>(); foreach (TCM.ComponentPresentation cp in tcmPage.ComponentPresentations) { Dynamic.ComponentPresentation dynCp = manager.BuildComponentPresentation(cp, engine, linkLevels - 1, resolveWidthAndHeight); p.ComponentPresentations.Add(dynCp); } p.StructureGroup = manager.BuildOrganizationalItem((TCM.StructureGroup)tcmPage.OrganizationalItem); if (!manager.BuildProperties.OmitContextPublications) { p.Publication = manager.BuildPublication(tcmPage.ContextRepository); } if (!manager.BuildProperties.OmitOwningPublications) { p.OwningPublication = manager.BuildPublication(tcmPage.OwningRepository); } if (!manager.BuildProperties.OmitCategories) { p.Categories = manager.BuildCategories(tcmPage); } manager.AddXpathToFields(p.MetadataFields, "Metadata"); return p; }
public Dynamic.Page GetDynamicPage(BuildManager manager) { Item item = Package.GetByName(Package.PageName); if (item == null) { Log.Error("no page found (is this a component template?)"); return(null); } Page tcmPage = (Page)Engine.GetObject(item.GetAsSource().GetValue("ID")); int linkLevels; if (HasPackageValue(Package, "LinkLevels")) { linkLevels = Convert.ToInt32(Package.GetValue("LinkLevels")); } else { GeneralUtils.TimedLog("no link levels configured, using default level " + this.DefaultLinkLevels); linkLevels = this.DefaultLinkLevels; } bool resolveWidthAndHeight; if (HasPackageValue(Package, "ResolveWidthAndHeight")) { resolveWidthAndHeight = Package.GetValue("ResolveWidthAndHeight").ToLower().Equals("yes"); } else { GeneralUtils.TimedLog("no ResolveWidthAndHeight configured, using default value " + this.DefaultResolveWidthAndHeight); resolveWidthAndHeight = this.DefaultResolveWidthAndHeight; } bool publishEmptyFields; if (HasPackageValue(Package, "PublishEmptyFields")) { publishEmptyFields = Package.GetValue("PublishEmptyFields").ToLower().Equals("yes"); } else { GeneralUtils.TimedLog("no PublishEmptyFields configured, using default value " + this.DefaultResolveWidthAndHeight); publishEmptyFields = this.DefaultPublishEmptyFields; } Log.Debug("found page with title " + tcmPage.Title + " and id " + tcmPage.Id); Log.Debug("constructing dynamic page, links are followed to level " + linkLevels + ", width and height are " + (resolveWidthAndHeight ? "" : "not ") + "resolved"); Dynamic.Page page = manager.BuildPage(tcmPage, Engine, linkLevels, resolveWidthAndHeight, publishEmptyFields); return(page); }
public Dynamic.Page GetDynamicPage() { Item item = Package.GetByName(Package.PageName); if (item == null) { Log.Error("no page found (is this a component template?)"); return(null); } Page tcmPage = (Page)Engine.GetObject(item); Dynamic.Page page = Manager.BuildPage(tcmPage, Engine); EnsureExtraProperties(page, tcmPage); return(page); }
private void EnsureExtraProperties(Dynamic.Page page, Page tcmPage) { // make sure that the Publication, Folder and OwningPublication are always available on the top level if (page.Publication == null) { page.Publication = Manager.BuildPublication(tcmPage.ContextRepository); } if (page.OwningPublication == null) { page.OwningPublication = Manager.BuildPublication(tcmPage.OwningRepository); } if (page.StructureGroup == null) { page.StructureGroup = Manager.BuildOrganizationalItem((StructureGroup)tcmPage.OrganizationalItem); } }
protected override void TransformPage(Dynamic.Page page) { GeneralUtils.TimedLog("start TransformPage with id " + page.Id); Page tcmPage = this.GetTcmPage(); StructureGroup tcmSG = (StructureGroup)tcmPage.OrganizationalItem; String mergeActionStr = Package.GetValue("MergeAction"); Dynamic.MergeAction mergeAction; if (!string.IsNullOrEmpty(mergeActionStr)) { try { mergeAction = (Dynamic.MergeAction)Enum.Parse(typeof(Dynamic.MergeAction), mergeActionStr); } catch { GeneralUtils.TimedLog("unexpected merge action " + mergeActionStr + ", using default"); mergeAction = defaultMergeAction; } } else { GeneralUtils.TimedLog("no merge action specified, using default"); mergeAction = defaultMergeAction; } GeneralUtils.TimedLog("using merge action " + mergeAction.ToString()); while (tcmSG != null) { GeneralUtils.TimedLog("found structure group with id " + tcmSG.Id); if (tcmSG.MetadataSchema != null) { TCM.Fields.ItemFields tcmFields = new TCM.Fields.ItemFields(tcmSG.Metadata, tcmSG.MetadataSchema); GeneralUtils.TimedLog(string.Format("about to merge {0} fields on structure group with {1} fields on page ", tcmFields.Count, page.MetadataFields.Count)); // change FieldsBuilder.AddFields(page.MetadataFields, tcmFields, LinkLevels, false, false, mergeAction, Manager); GeneralUtils.TimedLog(string.Format("finished merging, we now have {0} fields on structure group and {1} fields on page ", tcmFields.Count, page.MetadataFields.Count)); } tcmSG = tcmSG.OrganizationalItem as StructureGroup; } }
protected override void TransformPage(Dynamic.Page page) { GeneralUtils.TimedLog("start TransformPage with id " + page.Id); Page tcmPage = this.GetTcmPage(); StructureGroup tcmSG = (StructureGroup)tcmPage.OrganizationalItem; String mergeActionStr = Package.GetValue("MergeAction"); while (tcmSG != null) { if (tcmSG.MetadataSchema != null) { TCM.Fields.ItemFields tcmFields = new TCM.Fields.ItemFields(tcmSG.Metadata, tcmSG.MetadataSchema); FieldsBuilder.AddFields(page.MetadataFields, tcmFields, Manager); } tcmSG = tcmSG.OrganizationalItem as StructureGroup; } GeneralUtils.TimedLog("finished TransformPage"); }
private void ProcessRegions(IList <IRegion> regions, Dynamic.Page dd4tPage, int fieldCounter) { int i = fieldCounter; Log.Debug($"ProcessRegions {regions.Count()}, {dd4tPage.ComponentPresentations.Count()}, {fieldCounter}"); foreach (var region in regions) { if (region.ComponentPresentations != null && region.ComponentPresentations.Any()) { foreach (var cp in region.ComponentPresentations) { Dynamic.Component component = Manager.BuildComponent(cp.Component); Dynamic.ComponentTemplate componentTemplate = Manager.BuildComponentTemplate(cp.ComponentTemplate); Dynamic.ComponentPresentation componentPresentation = new Dynamic.ComponentPresentation() { Component = component, ComponentTemplate = componentTemplate, IsDynamic = cp.ComponentTemplate.IsRepositoryPublishable }; dd4tPage.ComponentPresentations.Add(componentPresentation); if (componentTemplate.MetadataFields == null) { componentTemplate.MetadataFields = new Dynamic.FieldSet(); } if (componentTemplate.MetadataFields.ContainsKey("region")) { componentTemplate.MetadataFields["region"].Values.Clear(); componentTemplate.MetadataFields["region"].Values.Add(region.RegionSchema.Title); } else { componentTemplate.MetadataFields.Add("region", new Dynamic.Field() { Name = "region", FieldType = Dynamic.FieldType.Text, Values = new List <string>() { region.RegionName } }); } // remove regionView metadata field, because it is no longer possible to manage this information in Tridion 9 with Regions if (componentTemplate.MetadataFields.ContainsKey("regionView")) { componentTemplate.MetadataFields.Remove("regionView"); } // copy all other metadata fields from the region to the entity if (region.Metadata != null) { ItemFields regionMetadataFields = new ItemFields(region.Metadata, region.RegionSchema); try { foreach (var regionMeta in regionMetadataFields) { componentTemplate.MetadataFields.Add(regionMeta.Name, Manager.BuildField(regionMeta, 1)); } } catch (Exception e) { Log.Warning("error while trying to copy metadata from region to component template\r\n" + e.Message + "\r\n" + e.StackTrace); } } if (region.Regions != null && region.RegionName.Any()) { ProcessRegions(region.Regions, dd4tPage, i); } } } } }
protected override void TransformPage(Dynamic.Page page) { var tcmPage = GetTcmPage(); ProcessRegions(tcmPage.Regions, page, 0); }
/// <summary> /// Abstract method to be implemented by a subclass. The method takes a DynamicDelivery page and can add information to it (e.g. by searching in folders / structure groups / linked components, etc /// </summary> /// <param name="page">DynamicDelivery page</param> protected abstract void TransformPage(Dynamic.Page page);
protected override void TransformPage(Dynamic.Page page) { // do nothing, this is the basic operation }