public static List<Dynamic.Category> BuildCategories(TComm.Page page, BuildManager manager) { // note that there might be multiple fields based on the same category, so we need to combine them // for that purpose we use a dictionary if (page.Metadata == null || page.MetadataSchema == null) { return new List<Dynamic.Category>(); } Dictionary<string, Dynamic.Category> categories = new Dictionary<string, Dynamic.Category>(); // first, add categires from the metadata ItemFields tcmMetadataFields = new TCM.Fields.ItemFields(page.Metadata, page.MetadataSchema); addFromItemFields(tcmMetadataFields, categories, manager); // finally, create a List from the Dictionary and return it List<Dynamic.Category> categoryList = new List<Dynamic.Category>(); foreach (Dynamic.Category cat in categories.Values) { categoryList.Add(cat); } return categoryList; }
public static Dynamic.ComponentTemplate BuildComponentTemplate(TComm.ComponentTemplate tcmComponentTemplate, BuildManager manager) { Dynamic.ComponentTemplate ct = new Dynamic.ComponentTemplate(); ct.Title = tcmComponentTemplate.Title; ct.Id = tcmComponentTemplate.Id.ToString(); ct.OutputFormat = tcmComponentTemplate.OutputFormat; ct.RevisionDate = tcmComponentTemplate.RevisionDate; if (tcmComponentTemplate.Metadata != null && tcmComponentTemplate.MetadataSchema != null) { ct.MetadataFields = new Dynamic.FieldSet(); TCM.Fields.ItemFields tcmMetadataFields = new TCM.Fields.ItemFields(tcmComponentTemplate.Metadata, tcmComponentTemplate.MetadataSchema); ct.MetadataFields = manager.BuildFields(tcmMetadataFields); } else { ct.MetadataFields = null; } if (!manager.BuildProperties.OmitContextPublications) ct.Publication = manager.BuildPublication(tcmComponentTemplate.ContextRepository); if (!manager.BuildProperties.OmitOwningPublications) ct.OwningPublication = manager.BuildPublication(tcmComponentTemplate.OwningRepository); if (!manager.BuildProperties.OmitFolders) ct.Folder = manager.BuildOrganizationalItem((TCM.Folder)tcmComponentTemplate.OrganizationalItem); return ct; }
public static Dynamic.PageTemplate BuildPageTemplate(TComm.PageTemplate tcmPageTemplate, BuildManager manager) { Dynamic.PageTemplate pt = new Dynamic.PageTemplate(); pt.Title = tcmPageTemplate.Title; pt.Id = tcmPageTemplate.Id.ToString(); pt.FileExtension = tcmPageTemplate.FileExtension; pt.RevisionDate = tcmPageTemplate.RevisionDate; if (tcmPageTemplate.Metadata != null && tcmPageTemplate.MetadataSchema != null) { pt.MetadataFields = new Dynamic.FieldSet(); TCM.Fields.ItemFields tcmMetadataFields = new TCM.Fields.ItemFields(tcmPageTemplate.Metadata, tcmPageTemplate.MetadataSchema); pt.MetadataFields = manager.BuildFields(tcmMetadataFields); } else { pt.MetadataFields = null; } if (!manager.BuildProperties.OmitContextPublications) pt.Publication = manager.BuildPublication(tcmPageTemplate.ContextRepository); if (!manager.BuildProperties.OmitOwningPublications) pt.OwningPublication = manager.BuildPublication(tcmPageTemplate.OwningRepository); if (!manager.BuildProperties.OmitFolders) pt.Folder = manager.BuildOrganizationalItem((TCM.Folder)tcmPageTemplate.OrganizationalItem); return pt; }
public static Dynamic.Page BuildPage(TCM.Page tcmPage, Engine engine, BuildManager manager, int linkLevels, bool resolveWidthAndHeight) { Dynamic.Page p = new Dynamic.Page(); p.Title = tcmPage.Title; p.Id = tcmPage.Id.ToString(); p.Filename = tcmPage.FileName; p.PageTemplate = manager.BuildPageTemplate(tcmPage.PageTemplate); p.Schema = manager.BuildSchema(tcmPage.MetadataSchema); p.Metadata = new Dynamic.SerializableDictionary<string, Dynamic.Field>(); if (linkLevels > 0) { try { if (tcmPage.Metadata != null) { var tcmMetadataFields = new Tridion.ContentManager.ContentManagement.Fields.ItemFields(tcmPage.Metadata, tcmPage.MetadataSchema); p.Metadata = manager.BuildFields(tcmMetadataFields, linkLevels, resolveWidthAndHeight); } } catch (ItemDoesNotExistException) { // 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); p.Publication = manager.BuildPublication(tcmPage.ContextRepository); p.Categories = manager.BuildCategories(tcmPage); return p; }
public static Dynamic.OrganizationalItem BuildOrganizationalItem(TComm.StructureGroup tcmStructureGroup) { Dynamic.OrganizationalItem oi = new Dynamic.OrganizationalItem(); oi.Title = tcmStructureGroup.Title; oi.Id = tcmStructureGroup.Id.ToString(); oi.PublicationId = tcmStructureGroup.ContextRepository.Id.ToString(); return oi; }
public static Dynamic.OrganizationalItem BuildOrganizationalItem(TComm.StructureGroup tcmStructureGroup) { GeneralUtils.TimedLog("start BuildOrganizationalItem"); Dynamic.OrganizationalItem oi = new Dynamic.OrganizationalItem(); oi.Title = tcmStructureGroup.Title; oi.Id = tcmStructureGroup.Id.ToString(); oi.PublicationId = tcmStructureGroup.ContextRepository.Id.ToString(); GeneralUtils.TimedLog("finished BuildOrganizationalItem"); return oi; }
public static Dynamic.ComponentPresentation BuildComponentPresentation(TCM.ComponentPresentation tcmComponentPresentation, Engine engine, int linkLevels, bool resolveWidthAndHeight, BuildManager manager) { Dynamic.ComponentPresentation cp = new Dynamic.ComponentPresentation(); if (tcmComponentPresentation.ComponentTemplate.IsRepositoryPublishable) { // call render but ignore the output - render ensures componentlinking will be setup as normal. // don't bother with page flags because the end result is dynamically published so it needs to run with DCP settings engine.RenderComponentPresentation(tcmComponentPresentation.Component.Id, tcmComponentPresentation.ComponentTemplate.Id); // ignore the rendered CP, because it is already available in the broker // instead, we will render a very simple version without any links cp.Component = manager.BuildComponent(tcmComponentPresentation.Component, 0, false,false); // linkLevels = 0 means: only summarize the component cp.IsDynamic = true; } else { // render the component presentation using its own CT // but first, set a parameter in the context so that the CT will know it is beng called // from a DynamicDelivery page template if (engine.PublishingContext.RenderContext != null && !engine.PublishingContext.RenderContext.ContextVariables.Contains(BasePageTemplate.VariableNameCalledFromDynamicDelivery)) { engine.PublishingContext.RenderContext.ContextVariables.Add(BasePageTemplate.VariableNameCalledFromDynamicDelivery, BasePageTemplate.VariableValueCalledFromDynamicDelivery); } string renderedContent = engine.RenderComponentPresentation(tcmComponentPresentation.Component.Id, tcmComponentPresentation.ComponentTemplate.Id); engine.PublishingContext.RenderContext.ContextVariables.Remove(BasePageTemplate.VariableNameCalledFromDynamicDelivery); renderedContent = TridionUtils.StripTcdlTags(renderedContent); cp.IsDynamic = false; TextReader tr = new StringReader(renderedContent); if (serializer == null) { serializer = new ComponentSerializer(); //serializer = new XmlSerializerFactory().CreateSerializer(typeof(Dynamic.Component)); } try { cp.Component = (Dynamic.Component)serializer.Deserialize(tr); } catch (Exception e) { TemplatingLogger.GetLogger(typeof(ComponentPresentationBuilder)).Error("exception while deserializing into CP: " + e.Message); // the component presentation could not be deserialized, this probably not a Dynamic Delivery template // just store the output as 'RenderedContent' on the CP cp.RenderedContent = renderedContent; // because the CT was not a DD4T CT, we will generate the DD4T XML code here cp.Component = manager.BuildComponent(tcmComponentPresentation.Component); } } cp.ComponentTemplate = manager.BuildComponentTemplate(tcmComponentPresentation.ComponentTemplate); return cp; }
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.ComponentPresentation BuildComponentPresentation(TCM.ComponentPresentation tcmComponentPresentation, Engine engine, BuildManager manager) { TemplatingLogger logger = TemplatingLogger.GetLogger(typeof(ComponentPresentationBuilder)); Dynamic.ComponentPresentation cp = new Dynamic.ComponentPresentation(); logger.Debug(string.Format(">BuildCP {0} ({1})", tcmComponentPresentation.ComponentTemplate.Title, tcmComponentPresentation.ComponentTemplate.IsRepositoryPublishable)); if (tcmComponentPresentation.ComponentTemplate.IsRepositoryPublishable) { // call render but ignore the output - render ensures componentlinking will be setup as normal. // don't bother with page flags because the end result is dynamically published so it needs to run with DCP settings engine.RenderComponentPresentation(tcmComponentPresentation.Component.Id, tcmComponentPresentation.ComponentTemplate.Id); // ignore the rendered CP, because it is already available in the broker // instead, we will render a very simple version without any links cp.Component = manager.BuildComponent(tcmComponentPresentation.Component, 0); // linkLevel = 0 means: only summarize the component cp.IsDynamic = true; } else { // render the component presentation using its own CT // but first, set a parameter in the context so that the CT will know it is beng called // from a DynamicDelivery page template if (engine.PublishingContext.RenderContext != null && !engine.PublishingContext.RenderContext.ContextVariables.Contains(BasePageTemplate.VariableNameCalledFromDynamicDelivery)) { engine.PublishingContext.RenderContext.ContextVariables.Add(BasePageTemplate.VariableNameCalledFromDynamicDelivery, BasePageTemplate.VariableValueCalledFromDynamicDelivery); } string renderedContent = engine.RenderComponentPresentation(tcmComponentPresentation.Component.Id, tcmComponentPresentation.ComponentTemplate.Id); renderedContent = TridionUtils.StripTcdlTags(renderedContent); try { // we cannot be sure the component template uses the same serializer service as the page template // so we will call a factory which can detect the correct service based on the content ISerializerService serializerService = SerializerServiceFactory.FindSerializerServiceForContent(renderedContent); cp = serializerService.Deserialize<Dynamic.ComponentPresentation>(renderedContent); } catch (Exception e) { log.Error("exception while deserializing into CP", e); // the component presentation could not be deserialized, this probably not a Dynamic Delivery template // just store the output as 'RenderedContent' on the CP cp.RenderedContent = renderedContent; // because the CT was not a DD4T CT, we will generate the DD4T XML code here cp.Component = manager.BuildComponent(tcmComponentPresentation.Component); } cp.IsDynamic = false; } cp.ComponentTemplate = manager.BuildComponentTemplate(tcmComponentPresentation.ComponentTemplate); return cp; }
public static Dynamic.ComponentTemplate BuildComponentTemplate(TComm.ComponentTemplate tcmComponentTemplate, BuildManager manager) { Dynamic.ComponentTemplate ct = new Dynamic.ComponentTemplate(); ct.Title = tcmComponentTemplate.Title; ct.Id = tcmComponentTemplate.Id.ToString(); ct.OutputFormat = tcmComponentTemplate.OutputFormat; if (tcmComponentTemplate.Metadata != null && tcmComponentTemplate.MetadataSchema != null) { ct.MetadataFields = new Dynamic.SerializableDictionary<string, Dynamic.Field>(); TCM.Fields.ItemFields tcmMetadataFields = new TCM.Fields.ItemFields(tcmComponentTemplate.Metadata, tcmComponentTemplate.MetadataSchema); ct.MetadataFields = manager.BuildFields(tcmMetadataFields, 0, false); // never follow links to comopnents from component templates, never resolve binary widht/height } else { ct.MetadataFields = null; } ct.Folder = manager.BuildOrganizationalItem((TCM.Folder)tcmComponentTemplate.OrganizationalItem); ct.Publication = manager.BuildPublication(tcmComponentTemplate.ContextRepository); return ct; }
public static Dynamic.PageTemplate BuildPageTemplate(TComm.PageTemplate tcmPageTemplate, BuildManager manager) { Dynamic.PageTemplate pt = new Dynamic.PageTemplate(); pt.Title = tcmPageTemplate.Title; pt.Id = tcmPageTemplate.Id.ToString(); pt.FileExtension = tcmPageTemplate.FileExtension; if (tcmPageTemplate.Metadata != null && tcmPageTemplate.MetadataSchema != null) { pt.MetadataFields = new Dynamic.SerializableDictionary<string, Dynamic.Field>(); TCM.Fields.ItemFields tcmMetadataFields = new TCM.Fields.ItemFields(tcmPageTemplate.Metadata, tcmPageTemplate.MetadataSchema); pt.MetadataFields = manager.BuildFields(tcmMetadataFields, 0, false); // never follow links to comopnents from page templates, never resolve binary widht/height } else { pt.MetadataFields = null; } pt.Publication = manager.BuildPublication(tcmPageTemplate.ContextRepository); pt.Folder = manager.BuildOrganizationalItem((TCM.Folder)tcmPageTemplate.OrganizationalItem); return pt; }
public virtual List<Dynamic.Category> BuildCategories(TComm.Page page) { return CategoriesBuilder.BuildCategories(page,this); }
public virtual Dynamic.Page BuildPage(TComm.Page tcmPage, Engine engine) { return PageBuilder.BuildPage(tcmPage, engine, this); }
public static Dynamic.Page BuildPage(TCM.Page tcmPage, Engine engine, BuildManager manager) { return BuildPage(tcmPage, engine, manager, 1, false); }
public virtual Dynamic.Page BuildPage(TComm.Page tcmPage, Engine engine, int linkLevels, bool resolveWidthAndHeight, bool publishEmptyFields) { return PageBuilder.BuildPage(tcmPage, engine, this, linkLevels, resolveWidthAndHeight, publishEmptyFields); }
public virtual Dynamic.PageTemplate BuildPageTemplate(TComm.PageTemplate tcmPageTemplate) { return PageTemplateBuilder.BuildPageTemplate(tcmPageTemplate, this); }
public virtual Dynamic.OrganizationalItem BuildOrganizationalItem(TComm.StructureGroup tcmStructureGroup) { return OrganizationalItemBuilder.BuildOrganizationalItem(tcmStructureGroup); }
public virtual Dynamic.ComponentTemplate BuildComponentTemplate(TComm.ComponentTemplate tcmComponentTemplate) { return ComponentTemplateBuilder.BuildComponentTemplate(tcmComponentTemplate, this); }
public virtual Dynamic.ComponentPresentation BuildComponentPresentation(TComm.ComponentPresentation tcmComponentPresentation, Engine engine, int linkLevels, bool resolveWidthAndHeight) { return ComponentPresentationBuilder.BuildComponentPresentation(tcmComponentPresentation, engine, linkLevels, resolveWidthAndHeight, this); }