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);
             }
         }
     }
 }
Ejemplo n.º 2
0
 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);
             }
         }
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
     }
 }
Ejemplo n.º 9
0
        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;
            }
        }
Ejemplo n.º 10
0
        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");
        }
Ejemplo n.º 11
0
        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);
                        }
                    }
                }
            }
        }
Ejemplo n.º 12
0
        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
 }