private void ParseXmlIntoUmbracoNodes()
        {
            // Iterate through each XML element in the config.
            foreach (var element in ParsedXml.Descendants())
            {
                // Elements that have an id and urlName attribute are Umbraco nodes.
                if (element.Attribute("id") != null && element.Attribute("urlName") != null)
                {
                    List <int> nodeIdPaths = GetNodeIdPath(element);
                    int        nodeId      = Convert.ToInt32(element.Attribute("id").Value);

                    var    urlAlias      = element.Element("umbracoUrlAlias");
                    string firstUrlAlias = null;
                    if (urlAlias != null && !string.IsNullOrWhiteSpace(urlAlias.Value))
                    {
                        firstUrlAlias = urlAlias.Value.Split(',')[0];
                    }

                    var url       = GetUrlForNodeIdPaths(nodeIdPaths, firstUrlAlias);
                    var pathNames = GetPathNamesForNodeIdPaths(nodeIdPaths);

                    _nodes[nodeId] = new UmbracoNode(this, nodeId, element, url, nodeIdPaths, pathNames);

                    // Set parent
                    if (_nodes[nodeId].ParentId != null && _nodes.ContainsKey(_nodes[nodeId].ParentId.Value))
                    {
                        _nodes[nodeId].Parent = _nodes[_nodes[nodeId].ParentId.Value];
                    }

                    // Add to the list in order (for multiple enumeration in GetNodes())
                    _nodesInOrder.Add(_nodes[nodeId]);
                }
            }
        }
        private void ParseTreeIntoUmbracoNodes()
        {
            foreach (var nodeId in ParsedTree.Keys)
            {
                var        treeNode        = ParsedTree[nodeId];
                List <int> nodeIdPaths     = GetNodeIdPath(treeNode);
                string     umbracoUrlAlias = null;
                if (treeNode.PublishedData != null)
                {
                    var umbracoUrlAliasProperty = treeNode.PublishedData.Properties.FirstOrDefault(p => p.Key == "umbracoUrlAlias");
                    if (umbracoUrlAliasProperty.Value != null && umbracoUrlAliasProperty.Value.FirstOrDefault() != null)
                    {
                        umbracoUrlAlias = umbracoUrlAliasProperty.Value.FirstOrDefault().Value as string;
                    }
                }

                var url       = GetUrlForNodeIdPaths(nodeIdPaths, umbracoUrlAlias);
                var pathNames = GetPathNamesForNodeIdPaths(nodeIdPaths);

                _nodes[nodeId] = new UmbracoNode(this, nodeId, treeNode, url, nodeIdPaths, pathNames);

                // Set parent
                if (_nodes[nodeId].ParentId != null && _nodes.ContainsKey(_nodes[nodeId].ParentId.Value))
                {
                    _nodes[nodeId].Parent = _nodes[_nodes[nodeId].ParentId.Value];
                }

                // Add to the list in order (for multiple enumeration in GetNodes())
                _nodesInOrder.Add(_nodes[nodeId]);
            }
        }
示例#3
0
 private UmbracoNode GenerateImage(UmbracoNode folder)
 {
     return(_imageNodeFaker
            .RuleFor(x => x.Path, f => $"-1,{folder.Id}")
            .RuleFor(x => x.ParentId, f => folder.Id)
            .Generate());
 }
        public async Task <IdentityResult> CreateAsync(TUser user, CancellationToken cancellationToken)
        {
            var umbracoNode = new UmbracoNode
            {
                CreateDate     = DateTime.UtcNow,
                Level          = 1,
                NodeObjectType = Const.MemberObjectType,
                NodeUser       = 0,
                ParentId       = -1,
                SortOrder      = 3,
                Text           = user.Email,
                Trashed        = false,
                UniqueId       = Guid.NewGuid(),
                Path           = "-1"
            };

            await umbracoNodeRepository.AddAsync(umbracoNode, cancellationToken);

            await umbracoNodeRepository.SaveChangesAsync(cancellationToken);

            umbracoNode.Path = $"-1,{umbracoNode.Id}";
            umbracoNodeRepository.Update(umbracoNode);

            user.Id = umbracoNode.Id;

            var content = new CmsContent
            {
                ContentType = DefaultMemberContentTypeId,
                NodeId      = umbracoNode.Id
            };

            await contentRepository.AddAsync(content, cancellationToken);

            var xmlWriterSettings = new System.Xml.XmlWriterSettings
            {
                Indent             = false,
                OmitXmlDeclaration = true
            };

            using (var sw = new StringWriter())
                using (var writer = System.Xml.XmlWriter.Create(sw, xmlWriterSettings))
                {
                    var xmlNode = new XmlNode
                    {
                        CreateDate        = umbracoNode.CreateDate,
                        Email             = user.Email,
                        Id                = umbracoNode.Id,
                        LastPasswordReset = DateTime.UtcNow,
                        Level             = umbracoNode.Level,
                        LoginName         = user.Email,
                        NodeName          = umbracoNode.Text,
                        NodeType          = DefaultMemberContentTypeId,
                        NodeTypeAlias     = "Default",
                        ParentId          = umbracoNode.ParentId,
                        Path              = umbracoNode.Path,
                        SortOrder         = umbracoNode.SortOrder,
                        Template          = 0,
                        Version           = umbracoNode.UniqueId,
                        WriterId          = 0,
                        WriterName        = "kkadmin",
                        UrlName           = umbracoNode.Text,
                        UpdateDate        = umbracoNode.CreateDate
                    };

                    var emptyNamespaces       = new XmlSerializerNamespaces(new[] { System.Xml.XmlQualifiedName.Empty });
                    var umbracoNodeSerializer = new XmlSerializer(typeof(XmlNode));
                    umbracoNodeSerializer.Serialize(writer, xmlNode, emptyNamespaces);

                    var contentXml = new CmsContentXml
                    {
                        NodeId = umbracoNode.Id,
                        Xml    = sw.ToString()
                    };

                    await contentXmlRepository.AddAsync(contentXml, cancellationToken);
                }


            var member = new CmsMember
            {
                NodeId    = umbracoNode.Id,
                Email     = user.Email,
                LoginName = user.Alias,
                Password  = user.PasswordHash
            };

            await membersRepository.AddAsync(member, cancellationToken);

            var propertyTypes = propertyTypeRepository
                                .GetAll()
                                .Where(pt => pt.ContentTypeId == DefaultMemberContentTypeId)
                                .ToList();

            var properties = user.GetType().GetProperties(BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public)
                             .ToDictionary(pt => pt.Name.ToLower(), pt => pt);


            var cmsContentVersion = new CmsContentVersion
            {
                ContentId   = member.NodeId,
                VersionDate = DateTime.UtcNow,
                VersionId   = Guid.NewGuid()
            };

            await contentVersionRepository.AddAsync(cmsContentVersion, cancellationToken);

            foreach (var pt in propertyTypes)
            {
                var cmsProp = new CmsPropertyData
                {
                    ContentNodeId  = member.NodeId,
                    VersionId      = cmsContentVersion.VersionId,
                    PropertyTypeId = pt.Id
                };

                if (properties.ContainsKey(pt.Alias.ToLower()))
                {
                    var p = properties[pt.Alias.ToLower()];
                    switch (p.PropertyType)
                    {
                    case Type boolType when boolType == typeof(bool):
                        cmsProp.DataInt = (bool)Convert.ChangeType(p.GetValue(user) ?? 0, p.PropertyType) ? 1 : 0;
                        break;

                    case Type dateType when dateType == typeof(DateTime):
                        cmsProp.DataDate = (DateTime?)Convert.ChangeType(p.GetValue(user) ?? 0, p.PropertyType);
                        break;

                    default:
                        cmsProp.DataNvarchar = p.GetValue(user)?.ToString();
                        break;
                    }
                }

                await propertyDataRepository.AddAsync(cmsProp, cancellationToken);
            }

            await propertyTypeRepository.SaveChangesAsync(cancellationToken);

            return(IdentityResult.Success);
        }