Ejemplo n.º 1
0
        private PropagationProcessResult PropagatePrototype(Prototype prototype, IEnumerable <Content> content)
        {
            var processResult = new PropagationProcessResult();
            var newRows       = new List <XElement>();

            foreach (var contentItem in content)
            {
                // Create new item from the prototype.
                var newItemEntry = prototype.Clone();

                foreach (var xElement in newItemEntry.PrototypeItems)
                {
                    var newElement = new XElement(xElement);
                    if (!newElement.DescendantsAndSelf(W.sdt).Any())
                    {
                        newRows.Add(newElement);
                        continue;
                    }

                    foreach (var sdt in newElement.FirstLevelDescendantsAndSelf(W.sdt).ToList())
                    {
                        var fieldContent = contentItem.GetContentItem(sdt.SdtTagName());
                        if (fieldContent == null)
                        {
                            processResult.AddError(new CustomError(
                                                       string.Format("Field content for field '{0}' not found",
                                                                     sdt.SdtTagName())));

                            continue;
                        }

                        var contentProcessResult = new ContentProcessor(this.context)
                                                   .SetRemoveContentControls(this.isNeedToRemoveContentControls)
                                                   .FillContent(sdt, fieldContent);

                        processResult.Merge(contentProcessResult);
                    }

                    newRows.Add(newElement);
                }
            }

            processResult.Result = newRows;
            return(processResult);
        }
        // Fills prototype with values recursive.
        private PropagationProcessResult PropagatePrototype(Prototype prototype,
                                                            IEnumerable <ListItemContent> content)
        {
            var processResult = new PropagationProcessResult();
            var newRows       = new List <XElement>();

            foreach (var contentItem in content)
            {
                var currentLevelPrototype = prototype.CurrentLevelPrototype(contentItem.FieldNames);

                if (currentLevelPrototype == null || !currentLevelPrototype.IsValid)
                {
                    processResult.AddError(new CustomError(
                                               string.Format("Prototype for list item '{0}' not found",
                                                             string.Join(", ", contentItem.FieldNames))));

                    continue;
                }

                // Create new item from the prototype.
                var newItemEntry = currentLevelPrototype.Clone();

                foreach (var xElement in newItemEntry.PrototypeItems)
                {
                    var newElement = new XElement(xElement);
                    if (!newElement.DescendantsAndSelf(W.sdt).Any())
                    {
                        newRows.Add(newElement);
                        continue;
                    }

                    foreach (var sdt in newElement.FirstLevelDescendantsAndSelf(W.sdt).ToList())
                    {
                        var fieldContent = contentItem.GetContentItem(sdt.SdtTagName());
                        if (fieldContent == null)
                        {
                            processResult.AddError(new CustomError(
                                                       string.Format("Field content for field '{0}' not found",
                                                                     sdt.SdtTagName())));

                            continue;
                        }

                        var contentProcessResult = new ContentProcessor(_context)
                                                   .SetRemoveContentControls(_isNeedToRemoveContentControls)
                                                   .FillContent(sdt, fieldContent);

                        processResult.Merge(contentProcessResult);
                    }
                    newRows.Add(newElement);
                }

                // If there are nested items fill prototype for them.
                if (contentItem.NestedFields != null)
                {
                    var filledNestedFields = PropagatePrototype(
                        prototype.Exclude(currentLevelPrototype),
                        contentItem.NestedFields);

                    newRows.AddRange(filledNestedFields.Result);
                }
            }
            processResult.Result = newRows;
            return(processResult);
        }
		// Fills prototype with values recursive.
		private PropagationProcessResult PropagatePrototype(Prototype prototype, 
			IEnumerable<ListItemContent> content)
		{
			var processResult = new PropagationProcessResult();
			var newRows = new List<XElement>();

			foreach (var contentItem in content)
			{
				var currentLevelPrototype = prototype.CurrentLevelPrototype(contentItem.FieldNames);
				
				if (currentLevelPrototype == null || !currentLevelPrototype.IsValid)
				{
					processResult.Errors.Add(
						string.Format("Prototype for list item '{0}' not found", 
						string.Join(", ", contentItem.FieldNames)));

					continue;
				}
				
				// Create new item from the prototype.
				var newItemEntry = currentLevelPrototype.Clone();

				foreach (var xElement in newItemEntry.PrototypeItems)
				{
					var newElement = new XElement(xElement);
					if (!newElement.DescendantsAndSelf(W.sdt).Any())
					{
						newRows.Add(newElement);
						continue;
					}

					foreach (var sdt in newElement.FirstLevelDescendantsAndSelf(W.sdt).ToList())
					{
						var fieldContent = contentItem.GetContentItem(sdt.SdtTagName());
						if (fieldContent == null)
						{
							processResult.Errors.Add(string.Format("Field content for field '{0}' not found", sdt.SdtTagName()));
							continue;
						}
						
						var contentProcessResult = new ContentProcessor(_context)
							.SetRemoveContentControls(_isNeedToRemoveContentControls)
							.FillContent(sdt, fieldContent);

						if (!contentProcessResult.Success)
							processResult.Errors.AddRange(processResult.Errors);
						
						
					}
					newRows.Add(newElement);
					
				}
				
				// If there are nested items fill prototype for them.
				if (contentItem.NestedFields != null)
				{
					var filledNestedFields = PropagatePrototype(
						prototype.Exclude(currentLevelPrototype), 
						contentItem.NestedFields);

					newRows.AddRange(filledNestedFields.Result);					
				}		
			}
			processResult.Result = newRows;
			return processResult;
		}