Exemplo n.º 1
0
        /// <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);
        }