示例#1
0
        private void TransformPage(PageData sourcePage, bool clearPropertyValues = true)
        {
            MigrationHook.Invoke(new BeforePageTransformEvent(sourcePage), Logger);

            _currentConvertablePageData.Properties = sourcePage.Property;
            _currentConvertablePageData.TypeName   = sourcePage.PageTypeName;

            var pTRepo         = ServiceLocator.Current.GetInstance <PageTypeRepository>();
            var sourcePageType = pTRepo.Load(sourcePage.PageTypeID);
            var targetPageType = pTRepo.Load(_mapper.GetTargetPageType(sourcePage));

            string result;

            //Convert The Page
            if (clearPropertyValues)
            {
                var keys       = new List <KeyValuePair <int, int> >();
                var properties = sourcePage.Property.Select(p => p.PropertyDefinitionID).Where(p => p > 0);
                foreach (var propertyId in properties)
                {
                    keys.Add(new KeyValuePair <int, int>(propertyId, 0));
                }

                //Convert The Page
                result = PageTypeConverter.Convert(sourcePage.PageLink, sourcePageType, targetPageType,
                                                   keys, false, false, _repo);
            }
            else
            {
                result = PageTypeConverter.Convert(sourcePage.PageLink, sourcePageType, targetPageType,
                                                   new List <KeyValuePair <int, int> >(), false, false, _repo);
            }
            Logger.Log(result);

            var transformedPage = _repo.Get <PageData>(sourcePage.PageLink).CreateWritableClone();

            _mapper.SetPropertyValues(transformedPage, _currentConvertablePageData);

            transformedPage.URLSegment = UrlSegment.GetUrlFriendlySegment(transformedPage.URLSegment);
            var oldPrincipal = PrincipalInfo.CurrentPrincipal;

            try {
                PrincipalInfo.CurrentPrincipal =
                    PrincipalInfo.CreatePrincipal(sourcePage.ChangedBy);
                global::EPiServer.BaseLibrary.Context.Current["PageSaveDB:PageSaved"] = true;
                var savedPage = _repo.Save(transformedPage,
                                           SaveAction.ForceCurrentVersion | SaveAction.Publish | SaveAction.SkipValidation,
                                           AccessLevel.NoAccess);

                MigrationHook.Invoke(new AfterPageTransformEvent(savedPage), Logger);
            }
            finally {
                global::EPiServer.BaseLibrary.Context.Current["PageSaveDB:PageSaved"] = null;
                PrincipalInfo.CurrentPrincipal = oldPrincipal;
            }
        }
示例#2
0
        private IContent CreateAndAssignIdentity(MappedIdentity mappedIdentity, Type modelType, string name)
        {
            // Find parent
            var parentLink = EntryPoint;

            if (modelType == typeof(YouTubeVideo))
            {
                parentLink = SearchResultNode;
            }
            else if (modelType != typeof(YouTubeFolder))
            {
                parentLink = new ContentReference(int.Parse(RemoveEndingSlash(mappedIdentity.ExternalIdentifier.Segments[2])), ProviderKey);
            }

            // Set content type and content type Id.
            var contentType = ContentTypeRepository.Load(modelType);
            var content     = ContentFactory.CreateContent(contentType);

            content.ContentTypeID = contentType.ID;
            content.ParentLink    = parentLink;
            content.ContentGuid   = mappedIdentity.ContentGuid;
            content.ContentLink   = mappedIdentity.ContentLink;
            content.Name          = name;
            (content as IRoutable).RouteSegment = UrlSegment.GetUrlFriendlySegment(content.Name);

            var securable = content as IContentSecurable;

            securable.GetContentSecurityDescriptor().AddEntry(new AccessControlEntry(EveryoneRole.RoleName, AccessLevel.Read));

            var versionable = content as IVersionable;

            if (versionable != null)
            {
                versionable.Status = VersionStatus.Published;
            }

            var changeTrackable = content as IChangeTrackable;

            if (changeTrackable != null)
            {
                changeTrackable.Changed = DateTime.Now;
            }

            return(content);
        }