/// <summary> /// Creates a new hotel item. /// </summary> /// <param name="parentId">The id of the city.</param> /// <param name="title">The title of the hotel.</param> public void CreateHotel(Guid parentId, string title) { var providerName = string.Empty; if (ServerOperations.MultiSite().CheckIsMultisiteMode()) { providerName = "dynamicContentProvider"; } DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName); Type hotelType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Booking.Hotel"); DynamicContent hotelItem = dynamicModuleManager.CreateDataItem(hotelType); hotelItem.SetValue("Title", title); hotelItem.SetString("UrlName", Regex.Replace(title.ToLower(), urlNameCharsToReplace, urlNameReplaceString)); hotelItem.SetValue("Owner", SecurityManager.GetCurrentUserId()); hotelItem.SetValue("PublicationDate", DateTime.Now); hotelItem.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Published"); Type cityType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Booking.City"); DynamicContent parent = dynamicModuleManager.GetDataItems(cityType) .First(i => i.Id == parentId && i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master); hotelItem.SetParent(parent.Id, cityType.FullName); dynamicModuleManager.Lifecycle.Publish(hotelItem); dynamicModuleManager.SaveChanges(); }
/// <summary> /// Publishes the specified data item. /// </summary> /// <param name="manager">The manager to publish with.</param> /// <param name="dataItem">The data item.</param> /// <param name="parentItem">(Optional) The parent of the data item to publish and save.</param> /// <returns> /// true if it succeeds, false if it fails. /// </returns> public static bool PublishAndSave(this DynamicModuleManager manager, DynamicContent dataItem, DynamicModel parentItem = null) { //CODE TAKEN FROM DEFAULT CODE REFERENCE OF MODULE BUILDER try { //UPDATE PUBLICATION DATE dataItem.PublicationDate = DateTime.UtcNow; //HANDLE NEW ITEM IF APPLICABLE if (dataItem.OriginalContentId == Guid.Empty) { // Set item parent if applicable if (parentItem != null) { var parentMaster = manager.GetDataItems(TypeResolutionService.ResolveType(parentItem.MappedType)) .First(i => i.UrlName == parentItem.Slug && i.Status == ContentLifecycleStatus.Master); dataItem.SetParent(parentMaster.Id, parentItem.MappedType); } //You need to set appropriate workflow status dataItem.SetWorkflowStatus(manager.Provider.ApplicationName, "Published"); // We can now call the following to publish the item manager.Lifecycle.Publish(dataItem); } else //HANDLE UPDATES ON EXISTING ITEM { // Now we need to check in, so the changes apply var master = manager.Lifecycle.CheckIn(dataItem); // We can now call the following to publish the item manager.Lifecycle.Publish(master); } // You need to call SaveChanges() in order for the items to be actually persisted to data store manager.SaveChanges(); return(true); } catch (Exception) { //TODO: LOG ERROR return(false); } }
/// <summary> /// Sets relational data in the DynamicContent data item using the property value found in item T. /// </summary> /// <typeparam name="T">A subclass of SitefinityContent.</typeparam> /// <param name="item">The item being adapted into the dataItem object.</param> /// <param name="metadataAttribute">The SitefinityMetadataAttribute found on item T.</param> /// <param name="property">The property on item T being adapted.</param> /// <param name="dataItem">The DynamicContent data item being adapted from item T.</param> /// <param name="providerName">The provider name used when retrieving the DynamicModuleManager.</param> /// <returns></returns> private static DynamicContent SetPropertyInDataItemAsRelationship <T>( T item, SitefinityMetadataAttribute metadataAttribute, PropertyInfo property, DynamicContent dataItem, string providerName ) where T : SitefinityContent { var parentDynamicContentType = metadataAttribute.ParentDynamicContentType; var sitefinityContentItem = (SitefinityContent)item.GetType().GetProperty(property.Name)?.GetValue(item); SitefinityMetadataAttribute sitefinityType = (SitefinityMetadataAttribute)sitefinityContentItem?.GetType() .GetCustomAttribute(typeof(SitefinityMetadataAttribute)); if (sitefinityType == null) { return(dataItem); } var relatedDynamicContentType = sitefinityType.DynamicContentType; var contentItemType = TypeResolutionService.ResolveType(relatedDynamicContentType.ToString()); var dynamicModuleManager = DynamicModuleManager.GetManager(providerName); var dynamicContentItem = dynamicModuleManager.GetDataItem(contentItemType, sitefinityContentItem.Id); // If this property happens to be the Parent Relation, set the parent + SystemParentId. Otherwise, create the relation if (parentDynamicContentType != null && relatedDynamicContentType.Equals(parentDynamicContentType)) { dataItem.SetParent(dynamicContentItem); dataItem.SystemParentId = dynamicContentItem.Id; return(dataItem); } dataItem.CreateRelation(dynamicContentItem, property.Name); return(dataItem); }