Region 的摘要说明
        public void BeforeAll()
        {
            var kernel = new StandardKernel();
            IoC.Configure(kernel);

            _source = Builder<Region>.CreateNew().Build();
            var mapper = kernel.Get<IMapper<Region, RegionModel>>();

            _result = mapper.Map(_source);
        }
예제 #2
0
        private PostEditModel Transform(DynamicPost post, bool isDraft)
        {
            var type = App.PostTypes.GetById(post.TypeId);

            var model = new PostEditModel
            {
                Id              = post.Id,
                BlogId          = post.BlogId,
                TypeId          = post.TypeId,
                Title           = post.Title,
                Slug            = post.Slug,
                MetaKeywords    = post.MetaKeywords,
                MetaDescription = post.MetaDescription,
                Published       = post.Published.HasValue ? post.Published.Value.ToString("yyyy-MM-dd HH:mm") : null,
                RedirectUrl     = post.RedirectUrl,
                RedirectType    = post.RedirectType.ToString(),
                State           = GetState(post, isDraft),
                UseBlocks       = type.UseBlocks
            };

            foreach (var regionType in type.Regions)
            {
                var region = new RegionModel
                {
                    Meta = new RegionMeta
                    {
                        Id           = regionType.Id,
                        Name         = regionType.Title,
                        Description  = regionType.Description,
                        Placeholder  = regionType.ListTitlePlaceholder,
                        IsCollection = regionType.Collection,
                        Icon         = regionType.Icon,
                        Display      = regionType.Display.ToString().ToLower()
                    }
                };
                var regionListModel = ((IDictionary <string, object>)post.Regions)[regionType.Id];

                if (!regionType.Collection)
                {
                    var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                    regionModel.Add(regionListModel);
                    regionListModel = regionModel;
                }

                foreach (var regionModel in (IEnumerable)regionListModel)
                {
                    var regionItem = new RegionItemModel();

                    foreach (var fieldType in regionType.Fields)
                    {
                        var appFieldType = App.Fields.GetByType(fieldType.Type);

                        var field = new FieldModel
                        {
                            Meta = new FieldMeta
                            {
                                Id          = fieldType.Id,
                                Name        = fieldType.Title,
                                Component   = appFieldType.Component,
                                Placeholder = fieldType.Placeholder,
                                IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth),
                                Description = fieldType.Description
                            }
                        };

                        if (typeof(Extend.Fields.SelectFieldBase).IsAssignableFrom(appFieldType.Type))
                        {
                            foreach (var item in ((Extend.Fields.SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items)
                            {
                                field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                            }
                        }

                        if (regionType.Fields.Count > 1)
                        {
                            field.Model = (Extend.IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                            if (regionType.ListTitleField == fieldType.Id)
                            {
                                regionItem.Title        = field.Model.GetTitle();
                                field.Meta.NotifyChange = true;
                            }
                        }
                        else
                        {
                            field.Model             = (Extend.IField)regionModel;
                            field.Meta.NotifyChange = true;
                            regionItem.Title        = field.Model.GetTitle();
                        }
                        regionItem.Fields.Add(field);
                    }

                    if (string.IsNullOrWhiteSpace(regionItem.Title))
                    {
                        regionItem.Title = "...";
                    }

                    region.Items.Add(regionItem);
                }
                model.Regions.Add(region);
            }

            foreach (var block in post.Blocks)
            {
                var blockType = App.Blocks.GetByType(block.Type);

                if (block is Extend.BlockGroup)
                {
                    var group = new BlockGroupModel
                    {
                        Id   = block.Id,
                        Type = block.Type,
                        Meta = new BlockMeta
                        {
                            Name      = blockType.Name,
                            Icon      = blockType.Icon,
                            Component = "block-group",
                            IsGroup   = true
                        }
                    };

                    if (blockType.Display != BlockDisplayMode.MasterDetail)
                    {
                        group.Meta.Component = blockType.Display == BlockDisplayMode.Horizontal ?
                                               "block-group-horizontal" : "block-group-vertical";
                    }

                    foreach (var prop in block.GetType().GetProperties(App.PropertyBindings))
                    {
                        if (typeof(Extend.IField).IsAssignableFrom(prop.PropertyType))
                        {
                            var fieldType = App.Fields.GetByType(prop.PropertyType);

                            group.Fields.Add(new FieldModel
                            {
                                Model = (Extend.IField)prop.GetValue(block),
                                Meta  = new FieldMeta
                                {
                                    Id        = prop.Name,
                                    Name      = prop.Name,
                                    Component = fieldType.Component,
                                }
                            });
                        }
                    }

                    bool firstChild = true;
                    foreach (var child in ((Extend.BlockGroup)block).Items)
                    {
                        blockType = App.Blocks.GetByType(child.Type);

                        group.Items.Add(new BlockItemModel
                        {
                            IsActive = firstChild,
                            Model    = child,
                            Meta     = new BlockMeta
                            {
                                Name      = blockType.Name,
                                Title     = child.GetTitle(),
                                Icon      = blockType.Icon,
                                Component = blockType.Component
                            }
                        });
                        firstChild = false;
                    }
                    model.Blocks.Add(group);
                }
                else
                {
                    model.Blocks.Add(new BlockItemModel
                    {
                        Model = block,
                        Meta  = new BlockMeta
                        {
                            Name      = blockType.Name,
                            Title     = block.GetTitle(),
                            Icon      = blockType.Icon,
                            Component = blockType.Component
                        }
                    });
                }
            }

            // Custom editors
            foreach (var editor in type.CustomEditors)
            {
                model.Editors.Add(new EditorModel
                {
                    Component = editor.Component,
                    Icon      = editor.Icon,
                    Name      = editor.Title
                });
            }
            return(model);
        }
예제 #3
0
        private SiteContentEditModel Transform(DynamicSiteContent site)
        {
            var type = App.SiteTypes.GetById(site.TypeId);

            var model = new SiteContentEditModel
            {
                Id        = site.Id,
                TypeId    = site.TypeId,
                Title     = site.Title,
                UseBlocks = false
            };

            foreach (var regionType in type.Regions)
            {
                var region = new RegionModel
                {
                    Meta = new RegionMeta
                    {
                        Id           = regionType.Id,
                        Name         = regionType.Title,
                        Description  = regionType.Description,
                        Placeholder  = regionType.ListTitlePlaceholder,
                        IsCollection = regionType.Collection,
                        Expanded     = regionType.ListExpand,
                        Icon         = regionType.Icon,
                        Display      = regionType.Display.ToString().ToLower()
                    }
                };
                var regionListModel = ((IDictionary <string, object>)site.Regions)[regionType.Id];

                if (!regionType.Collection)
                {
                    var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                    regionModel.Add(regionListModel);
                    regionListModel = regionModel;
                }

                foreach (var regionModel in (IEnumerable)regionListModel)
                {
                    var regionItem = new RegionItemModel();

                    foreach (var fieldType in regionType.Fields)
                    {
                        var appFieldType = App.Fields.GetByType(fieldType.Type);

                        var field = new FieldModel
                        {
                            Meta = new FieldMeta
                            {
                                Id          = fieldType.Id,
                                Name        = fieldType.Title,
                                Component   = appFieldType.Component,
                                Placeholder = fieldType.Placeholder,
                                IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth),
                                Description = fieldType.Description
                            }
                        };

                        if (typeof(SelectFieldBase).IsAssignableFrom(appFieldType.Type))
                        {
                            foreach (var item in ((SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items)
                            {
                                field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                            }
                        }

                        if (regionType.Fields.Count > 1)
                        {
                            field.Model = (IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                            if (regionType.ListTitleField == fieldType.Id)
                            {
                                regionItem.Title        = field.Model.GetTitle();
                                field.Meta.NotifyChange = true;
                            }
                        }
                        else
                        {
                            field.Model             = (IField)regionModel;
                            field.Meta.NotifyChange = true;
                            regionItem.Title        = field.Model.GetTitle();
                        }
                        regionItem.Fields.Add(field);
                    }

                    if (string.IsNullOrWhiteSpace(regionItem.Title))
                    {
                        regionItem.Title = "...";
                    }

                    region.Items.Add(regionItem);
                }
                model.Regions.Add(region);
            }
            return(model);
        }
예제 #4
0
 public LatLng GetCoordinate(RegionModel region)
 {
     return(new LatLng());
 }
예제 #5
0
 /// <summary>
 /// Generates semantic markup (HTML/RDFa attributes) for a given Region Model.
 /// </summary>
 /// <param name="htmlHelper">The HtmlHelper instance on which the extension method operates.</param>
 /// <param name="region">The Region Model to generate semantic markup for.</param>
 /// <returns>The HTML/RDFa attributes for the Region. These should be included in an HTML start tag.</returns>
 public static MvcHtmlString DxaRegionMarkup(this HtmlHelper htmlHelper, RegionModel region)
 {
     return(Markup.RenderRegionAttributes(region));
 }
예제 #6
0
 public void Resolve(RegionModel model)
 {
     this.Result = this.populator.Populate(model, this.valueResolver);
 }
 public void Resolve(RegionModel model)
 {
     this.ResultOpt = null;
 }
예제 #8
0
        public static List <Select2Item> SearchRegion(string searchVal)
        {
            RegionModel regionModel = new RegionModel();

            return(regionModel.SearchRegion(searchVal));
        }
        private async Task <HttpResponseMessage> GetContentIfRedirectedAsync(string requestBaseUrl, string url, bool followRedirects, int maxRedirections, RegionModel regionModel, IHeaderDictionary headers)
        {
            HttpResponseMessage response = null;
            var httpClient = httpClientFactory.GetClientForRegionEndpoint(regionModel.RegionEndpoint);

            for (int i = 0; i < maxRedirections; i++)
            {
                var request = new HttpRequestMessage(HttpMethod.Get, url);
                foreach (var(key, value) in headers.Where(h => headerSettings.SupportedHeaders
                                                          .Any(sh => string.Equals(sh, h.Key, StringComparison.CurrentCultureIgnoreCase))))
                {
                    request.Headers.Add(key, value.ToArray());
                }

                response = await httpClient.SendAsync(request);

                if (!response.IsRedirectionStatus())
                {
                    return(response);
                }

                if (!followRedirects)
                {
                    var redirectUrl = response.Headers.Location.IsAbsoluteUri
                        ? response.Headers.Location.ToString()
                        : $"{requestBaseUrl}{response.Headers.Location.ToString()}";

                    throw new RedirectException(new Uri(url), new Uri(redirectUrl), response.StatusCode == HttpStatusCode.PermanentRedirect);
                }

                url = response.Headers.Location.IsAbsoluteUri
                    ? response.Headers.Location.ToString()
                    : $"{requestBaseUrl}/{response.Headers.Location.ToString().TrimStart('/')}";

                logger.LogWarning($"{nameof(GetContent)}: Redirecting get of child response from: {url}");
            }

            return(null);
        }
        public async Task <PostResponseModel> PostContent(string url, string path, RegionModel regionModel, IEnumerable <KeyValuePair <string, string> > formParameters, string requestBaseUrl)
        {
            _ = regionModel ?? throw new ArgumentNullException(nameof(regionModel));

            var results = new PostResponseModel();

            try
            {
                if (regionModel.IsHealthy)
                {
                    logger.LogInformation($"{nameof(PostContent)}: Posting child response from: {url}");

                    var request = new HttpRequestMessage(HttpMethod.Post, url)
                    {
                        Content = formParameters != null ? new FormUrlEncodedContent(formParameters) : null,
                    };

                    var httpClient = httpClientFactory.GetClientForRegionEndpoint(regionModel.RegionEndpoint);
                    var response   = await httpClient.SendAsync(request);

                    if (response.IsRedirectionStatus())
                    {
                        responseHandler.Process(response);

                        var redirectUrl = requestBaseUrl;

                        redirectUrl += response.Headers.Location.IsAbsoluteUri
                            ? response.Headers.Location.PathAndQuery.ToString(CultureInfo.InvariantCulture)
                            : response.Headers.Location.ToString();

                        throw new RedirectException(new Uri(url), new Uri(redirectUrl),
                                                    response.StatusCode == HttpStatusCode.PermanentRedirect);
                    }

                    if (!response.IsSuccessStatusCode)
                    {
                        throw new EnhancedHttpException(response.StatusCode, response.ReasonPhrase, url);
                    }

                    var mediaType = response.Content.Headers.ContentType.MediaType;
                    if (FileDownloadContentTypes.TryGetValue(mediaType, out var fileExtension))
                    {
                        results.FileDownloadModel = new FileDownloadModel
                        {
                            FileBytes       = await response.Content.ReadAsByteArrayAsync(),
                            FileContentType = mediaType,
                            FileName        = !string.IsNullOrWhiteSpace(response.Content.Headers.ContentDisposition.FileNameStar) ? response.Content.Headers.ContentDisposition.FileNameStar : $"NCS file download.{fileExtension}",
                        };
                    }
                    else
                    {
                        results.Html = await response.Content.ReadAsStringAsync();
                    }

                    logger.LogInformation($"{nameof(PostContent)}: Received child response from: {url}");
                }
                else
                {
                    results.Html = !string.IsNullOrWhiteSpace(regionModel.OfflineHtml)
                        ? regionModel.OfflineHtml
                        : markupMessages.GetRegionOfflineHtml(regionModel.PageRegion);
                }
            }
            catch (BrokenCircuitException ex)
            {
                logger.LogError(ex, $"{nameof(ContentRetriever)}: BrokenCircuit: {url} - {ex.Message}");

                if (regionModel.HealthCheckRequired)
                {
                    await appRegistryDataService.SetRegionHealthState(path, regionModel.PageRegion, false);
                }

                results.Html = !string.IsNullOrWhiteSpace(regionModel.OfflineHtml)
                    ? regionModel.OfflineHtml
                    : markupMessages.GetRegionOfflineHtml(regionModel.PageRegion);
            }
            catch (Exception ex)
            {
                logger.LogInformation($"{nameof(PostContent)}: Received error response from: {url}. {ex.Message}");
                throw;
            }

            return(results);
        }
예제 #11
0
 public static List <RegionModel> ToModel(this ICollection <Region> input)
 {
     return(input.AsEnumerable().Select(RegionModel => RegionModel.ToModel()).ToList());
 }
 public static bool RequiresHealthCheck(this RegionModel regionModel)
 {
     return(!(regionModel?.IsHealthy).GetValueOrDefault() && (regionModel?.HealthCheckRequired).GetValueOrDefault());
 }
예제 #13
0
 public RegionModel Update(RegionModel model)
 {
     return(_repository.Update(model));
 }
예제 #14
0
 public RegionModel Add(RegionModel model)
 {
     return(_repository.Add(model));
 }
        private async Task <string> GetContent_WithoutCaching(string url, string path, RegionModel regionModel, bool followRedirects, string requestBaseUrl, IHeaderDictionary headers)
        {
            const int MaxRedirections = 10;

            _ = regionModel ?? throw new ArgumentNullException(nameof(regionModel));

            string results = null;

            try
            {
                if (regionModel.IsHealthy)
                {
                    logger.LogInformation($"{nameof(GetContent)}: Getting child response from: {url}");

                    var response = await GetContentIfRedirectedAsync(requestBaseUrl, url, followRedirects, MaxRedirections, regionModel, headers);

                    if (response != null && !response.IsSuccessStatusCode)
                    {
                        throw new EnhancedHttpException(response.StatusCode, response.ReasonPhrase, url);
                    }

                    responseHandler.Process(response);

                    if (response != null)
                    {
                        results = await response.Content.ReadAsStringAsync();
                    }

                    logger.LogInformation($"{nameof(GetContent)}: Received child response from: {url}");
                }
                else
                {
                    results = !string.IsNullOrWhiteSpace(regionModel.OfflineHtml) ? regionModel.OfflineHtml : markupMessages.GetRegionOfflineHtml(regionModel.PageRegion);
                }
            }
            catch (BrokenCircuitException ex)
            {
                logger.LogError(ex, $"{nameof(ContentRetriever)}: BrokenCircuit: {url} - {ex.Message}");

                if (regionModel.HealthCheckRequired)
                {
                    await appRegistryDataService.SetRegionHealthState(path, regionModel.PageRegion, false);
                }

                results = !string.IsNullOrWhiteSpace(regionModel.OfflineHtml) ? regionModel.OfflineHtml : markupMessages.GetRegionOfflineHtml(regionModel.PageRegion);
            }

            return(results);
        }
예제 #16
0
        private static void AddCommentsViews(PageModel pageModel, RegionModel region, Localization localization, RegionModel ugcRegion)
        {
            List <EntityModel> regionEntities = new List <EntityModel>();

            foreach (var entity in region.Entities.Where(e => e.ExtensionData != null))
            {
                if (entity.ExtensionData == null)
                {
                    continue;
                }

                // comments get added to the ugcRegion if it exists else we place in same region as entity
                IList <EntityModel> entities = ugcRegion != null ? ugcRegion.Entities : regionEntities;
                if (entity.ExtensionData.ContainsKey(CommentsEntityRegionExt))
                {
                    // comment region specified for this entity so lets find it and use that
                    var targetRegion = FindRegion(pageModel.Regions, (string)entity.ExtensionData[CommentsEntityRegionExt]);
                    if (targetRegion != null && targetRegion != region)
                    {
                        entities = targetRegion.Entities;
                    }
                    else if (targetRegion == null || targetRegion == region)
                    {
                        entities = regionEntities;
                    }
                }

                if (entity.ExtensionData.ContainsKey(ShowCommentsExtData) &&
                    (bool)entity.ExtensionData[ShowCommentsExtData])
                {
                    entities.Add(CreateUgcCommentsEntity(localization, entity.Id, ItemType.Component));
                }
                if (entity.ExtensionData.ContainsKey(PostCommentsExtData) && entity.ExtensionData[PostCommentsExtData] != null)
                {
                    entities.Add(CreateUgcPostCommentEntity(localization, entity.Id, ItemType.Component, (ContentModelData)entity.ExtensionData[PostCommentsExtData]));
                }
            }

            // Add our ugc views to either the same region as the entity we have comments enabled for or the ugc "Comments" region if available
            foreach (var x in regionEntities)
            {
                region.Entities.Add(x);
            }

            foreach (var childRegion in region.Regions)
            {
                AddCommentsViews(pageModel, childRegion, localization, ugcRegion);
            }
        }
예제 #17
0
        public List <RegionsVilleModel> GetRegion()
        {
            RegionModel reg = new RegionModel();

            return(reg.GetRegionsVilles());
        }
예제 #18
0
 public async Task <JsonResult> SaveRegion(RegionModel region)
 {
     return(new JsonResult(await _regionsService.AddRegion(region)));
 }
        protected virtual RegionModel CreateRegionModel(RegionModelData regionModelData, ILocalization localization)
        {
            MvcData mvcData         = CreateMvcData(regionModelData.MvcData, "Region");
            Type    regionModelType = ModelTypeRegistry.GetViewModelType(mvcData);

            RegionModel result = (RegionModel)regionModelType.CreateInstance(regionModelData.Name);

            result.ExtensionData = regionModelData.ExtensionData;
            result.HtmlClasses   = regionModelData.HtmlClasses;
            result.MvcData       = mvcData;
            result.XpmMetadata   = localization.IsXpmEnabled ? regionModelData.XpmMetadata : null;
            result.SchemaId      = regionModelData.SchemaId;

            if (!string.IsNullOrEmpty(regionModelData.SchemaId))
            {
                SemanticSchema semanticSchema = SemanticMapping.GetSchema(regionModelData.SchemaId, localization);

                Type modelType = ModelTypeRegistry.GetViewModelType(mvcData);

                MappingData mappingData = new MappingData
                {
                    SourceViewModel    = regionModelData,
                    ModelType          = modelType,
                    PropertyValidation = new Validation
                    {
                        MainSchema       = semanticSchema,
                        InheritedSchemas = GetInheritedSemanticSchemas(regionModelData, localization)
                    },
                    Fields         = null,
                    MetadataFields = regionModelData.Metadata,
                    Localization   = localization
                };
                MapSemanticProperties(result, mappingData);
            }

            if (regionModelData.Regions != null)
            {
                IEnumerable <RegionModel> nestedRegionModels = regionModelData.Regions.Select(data => CreateRegionModel(data, localization));
                result.Regions.UnionWith(nestedRegionModels);
                result.IsVolatile |= result.Regions.Any(region => region.IsVolatile);
            }

            if (regionModelData.Entities != null)
            {
                foreach (EntityModelData entityModelData in regionModelData.Entities)
                {
                    EntityModel entityModel;
                    try
                    {
                        entityModel = ModelBuilderPipeline.CreateEntityModel(entityModelData, null, localization);
                        // indicate to region model that this region is potentially volatile if it contains a volatile entity
                        result.IsVolatile |= entityModel.IsVolatile;
                        entityModel.MvcData.RegionName = regionModelData.Name;
                    }
                    catch (Exception ex)
                    {
                        // If there is a problem mapping an Entity, we replace it with an ExceptionEntity which holds the error details and carry on.
                        Log.Error(ex);
                        entityModel = new ExceptionEntity(ex);
                    }
                    result.Entities.Add(entityModel);
                }
            }

            return(result);
        }
예제 #20
0
        private PageEditModel Transform(DynamicPage page, bool isDraft)
        {
            var config = new Config(_api);
            var type   = App.PageTypes.GetById(page.TypeId);
            var route  = type.Routes.FirstOrDefault(r => r.Route == page.Route) ?? type.Routes.FirstOrDefault();

            var model = new PageEditModel
            {
                Id              = page.Id,
                SiteId          = page.SiteId,
                ParentId        = page.ParentId,
                OriginalId      = page.OriginalPageId,
                SortOrder       = page.SortOrder,
                TypeId          = page.TypeId,
                Title           = page.Title,
                NavigationTitle = page.NavigationTitle,
                Slug            = page.Slug,
                MetaKeywords    = page.MetaKeywords,
                MetaDescription = page.MetaDescription,
                IsHidden        = page.IsHidden,
                Published       = page.Published.HasValue ? page.Published.Value.ToString("yyyy-MM-dd HH:mm") : null,
                RedirectUrl     = page.RedirectUrl,
                RedirectType    = page.RedirectType.ToString(),
                State           = GetState(page, isDraft),
                UseBlocks       = type.UseBlocks,
                SelectedRoute   = route == null ? null : new RouteModel
                {
                    Title = route.Title,
                    Route = route.Route
                }
            };

            foreach (var r in type.Routes)
            {
                model.Routes.Add(new RouteModel {
                    Title = r.Title,
                    Route = r.Route
                });
            }

            foreach (var regionType in type.Regions)
            {
                var region = new RegionModel
                {
                    Meta = new RegionMeta
                    {
                        Id           = regionType.Id,
                        Name         = regionType.Title,
                        Description  = regionType.Description,
                        Placeholder  = regionType.ListTitlePlaceholder,
                        IsCollection = regionType.Collection,
                        Icon         = regionType.Icon,
                        Display      = regionType.Display.ToString().ToLower()
                    }
                };
                var regionListModel = ((IDictionary <string, object>)page.Regions)[regionType.Id];

                if (!regionType.Collection)
                {
                    var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                    regionModel.Add(regionListModel);
                    regionListModel = regionModel;
                }

                foreach (var regionModel in (IEnumerable)regionListModel)
                {
                    var regionItem = new RegionItemModel();

                    foreach (var fieldType in regionType.Fields)
                    {
                        var appFieldType = App.Fields.GetByType(fieldType.Type);

                        var field = new FieldModel
                        {
                            Meta = new FieldMeta
                            {
                                Id          = fieldType.Id,
                                Name        = fieldType.Title,
                                Component   = appFieldType.Component,
                                Placeholder = fieldType.Placeholder,
                                IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth),
                                Description = fieldType.Description
                            }
                        };

                        if (typeof(Extend.Fields.SelectFieldBase).IsAssignableFrom(appFieldType.Type))
                        {
                            foreach (var item in ((Extend.Fields.SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items)
                            {
                                field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                            }
                        }

                        if (regionType.Fields.Count > 1)
                        {
                            field.Model = (Extend.IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                            if (regionType.ListTitleField == fieldType.Id)
                            {
                                regionItem.Title        = field.Model.GetTitle();
                                field.Meta.NotifyChange = true;
                            }
                        }
                        else
                        {
                            field.Model             = (Extend.IField)regionModel;
                            field.Meta.NotifyChange = true;
                            regionItem.Title        = field.Model.GetTitle();
                        }
                        regionItem.Fields.Add(field);
                    }

                    if (string.IsNullOrWhiteSpace(regionItem.Title))
                    {
                        regionItem.Title = "...";
                    }

                    region.Items.Add(regionItem);
                }
                model.Regions.Add(region);
            }

            foreach (var block in page.Blocks)
            {
                var blockType = App.Blocks.GetByType(block.Type);

                if (block is Extend.BlockGroup)
                {
                    var group = new BlockGroupModel
                    {
                        Id   = block.Id,
                        Type = block.Type,
                        Meta = new BlockMeta
                        {
                            Name        = blockType.Name,
                            Icon        = blockType.Icon,
                            Component   = "block-group",
                            IsGroup     = true,
                            IsReadonly  = page.OriginalPageId.HasValue,
                            isCollapsed = config.ManagerDefaultCollapsedBlocks,
                            ShowHeader  = !config.ManagerDefaultCollapsedBlockGroupHeaders
                        }
                    };

                    if (blockType.Display != BlockDisplayMode.MasterDetail)
                    {
                        group.Meta.Component = blockType.Display == BlockDisplayMode.Horizontal ?
                                               "block-group-horizontal" : "block-group-vertical";
                    }

                    foreach (var prop in block.GetType().GetProperties(App.PropertyBindings))
                    {
                        if (typeof(Extend.IField).IsAssignableFrom(prop.PropertyType))
                        {
                            var fieldType = App.Fields.GetByType(prop.PropertyType);
                            var field     = new FieldModel
                            {
                                Model = (Extend.IField)prop.GetValue(block),
                                Meta  = new FieldMeta
                                {
                                    Id        = prop.Name,
                                    Name      = prop.Name,
                                    Component = fieldType.Component,
                                }
                            };

                            // Check if this is a select field
                            if (typeof(Extend.Fields.SelectFieldBase).IsAssignableFrom(fieldType.Type))
                            {
                                foreach (var item in ((Extend.Fields.SelectFieldBase)Activator.CreateInstance(fieldType.Type)).Items)
                                {
                                    field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                                }
                            }

                            // Check if we have field meta-data available
                            var attr = prop.GetCustomAttribute <Extend.FieldAttribute>();
                            if (attr != null)
                            {
                                field.Meta.Name        = !string.IsNullOrWhiteSpace(attr.Title) ? attr.Title : field.Meta.Name;
                                field.Meta.Placeholder = attr.Placeholder;
                                field.Meta.IsHalfWidth = attr.Options.HasFlag(FieldOption.HalfWidth);
                            }

                            // Check if we have field description meta-data available
                            var descAttr = prop.GetCustomAttribute <Extend.FieldDescriptionAttribute>();
                            if (descAttr != null)
                            {
                                field.Meta.Description = descAttr.Text;
                            }
                            group.Fields.Add(field);
                        }
                    }

                    bool firstChild = true;
                    foreach (var child in ((Extend.BlockGroup)block).Items)
                    {
                        blockType = App.Blocks.GetByType(child.Type);

                        group.Items.Add(new BlockItemModel
                        {
                            IsActive = firstChild,
                            Model    = child,
                            Meta     = new BlockMeta
                            {
                                Name      = blockType.Name,
                                Title     = child.GetTitle(),
                                Icon      = blockType.Icon,
                                Component = blockType.Component
                            }
                        });
                        firstChild = false;
                    }
                    model.Blocks.Add(group);
                }
                else
                {
                    model.Blocks.Add(new BlockItemModel
                    {
                        Model = block,
                        Meta  = new BlockMeta
                        {
                            Name        = blockType.Name,
                            Title       = block.GetTitle(),
                            Icon        = blockType.Icon,
                            Component   = blockType.Component,
                            IsReadonly  = page.OriginalPageId.HasValue,
                            isCollapsed = config.ManagerDefaultCollapsedBlocks
                        }
                    });
                }
            }

            // Custom editors
            foreach (var editor in type.CustomEditors)
            {
                model.Editors.Add(new EditorModel
                {
                    Component = editor.Component,
                    Icon      = editor.Icon,
                    Name      = editor.Title
                });
            }
            return(model);
        }
예제 #21
0
        public async Task <string> PostContent(string url, RegionModel regionModel, IEnumerable <KeyValuePair <string, string> > formParameters, string requestBaseUrl)
        {
            if (regionModel == null)
            {
                throw new ArgumentNullException(nameof(regionModel));
            }

            string results = null;

            try
            {
                if (regionModel.IsHealthy)
                {
                    logger.LogInformation($"{nameof(PostContent)}: Posting child response from: {url}");

                    var request = new HttpRequestMessage(HttpMethod.Post, url)
                    {
                        Content = formParameters != null ? new FormUrlEncodedContent(formParameters) : null,
                    };

                    var response = await httpClient.SendAsync(request).ConfigureAwait(false);

                    if (response.IsRedirectionStatus())
                    {
                        var redirectUrl = requestBaseUrl;

                        redirectUrl += response.Headers.Location.IsAbsoluteUri
                            ? response.Headers.Location.PathAndQuery.ToString(CultureInfo.InvariantCulture)
                            : response.Headers.Location.ToString();

                        throw new RedirectException(new Uri(url), new Uri(redirectUrl), response.StatusCode == HttpStatusCode.PermanentRedirect);
                    }

                    if (!response.IsSuccessStatusCode)
                    {
                        throw new EnhancedHttpException(response.StatusCode, response.ReasonPhrase, url);
                    }

                    results = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    logger.LogInformation($"{nameof(PostContent)}: Received child response from: {url}");
                }
                else if (!string.IsNullOrWhiteSpace(regionModel.OfflineHTML))
                {
                    results = regionModel.OfflineHTML;
                }
            }
            catch (BrokenCircuitException ex)
            {
                logger.LogError(ex, $"{nameof(ContentRetriever)}: BrokenCircuit: {url} - {ex.Message}");

                if (regionModel.HealthCheckRequired)
                {
                    await regionService.SetRegionHealthState(regionModel.Path, regionModel.PageRegion, false).ConfigureAwait(false);
                }

                results = regionModel.OfflineHTML;
            }

            return(results);
        }
예제 #22
0
        /// <summary>
        /// Generates semantic markup (HTML/RDFa attributes) for the current Region Model.
        /// </summary>
        /// <param name="htmlHelper">The HtmlHelper instance on which the extension method operates.</param>
        /// <returns>The HTML/RDFa attributes for the Region. These should be included in an HTML start tag.</returns>
        /// <remarks>This method will throw an exception if the current Model does not represent a Region.</remarks>
        public static MvcHtmlString DxaRegionMarkup(this HtmlHelper htmlHelper)
        {
            RegionModel region = (RegionModel)htmlHelper.ViewData.Model;

            return(htmlHelper.DxaRegionMarkup(region));
        }
예제 #23
0
        public async Task <PageEditModel> GetById(Guid id)
        {
            var page = await _api.Pages.GetByIdAsync(id);

            if (page != null)
            {
                var type = App.PageTypes.GetById(page.TypeId);

                var model = new PageEditModel
                {
                    Id              = page.Id,
                    SiteId          = page.SiteId,
                    ParentId        = page.ParentId,
                    SortOrder       = page.SortOrder,
                    TypeId          = page.TypeId,
                    Title           = page.Title,
                    NavigationTitle = page.NavigationTitle,
                    Slug            = page.Slug,
                    MetaKeywords    = page.MetaKeywords,
                    MetaDescription = page.MetaDescription,
                    Published       = page.Published.HasValue ? page.Published.Value.ToString("yyyy-MM-dd HH:mm") : null
                };

                foreach (var regionType in type.Regions)
                {
                    var region = new RegionModel
                    {
                        Meta = new RegionMeta
                        {
                            Id           = regionType.Id,
                            Name         = regionType.Title,
                            Description  = regionType.Description,
                            Placeholder  = regionType.ListTitlePlaceholder,
                            IsCollection = regionType.Collection,
                            Icon         = regionType.Icon,
                            Display      = regionType.Display.ToString().ToLower()
                        }
                    };
                    var regionListModel = ((IDictionary <string, object>)page.Regions)[regionType.Id];

                    if (!regionType.Collection)
                    {
                        var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                        regionModel.Add(regionListModel);
                        regionListModel = regionModel;
                    }

                    foreach (var regionModel in (IEnumerable)regionListModel)
                    {
                        var regionItem = new RegionItemModel();

                        foreach (var fieldType in regionType.Fields)
                        {
                            var appFieldType = App.Fields.GetByType(fieldType.Type);

                            var field = new FieldModel
                            {
                                Meta = new FieldMeta
                                {
                                    Id          = fieldType.Id,
                                    Name        = fieldType.Title,
                                    Component   = appFieldType.Component,
                                    Placeholder = fieldType.Placeholder,
                                    IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth)
                                }
                            };

                            if (regionType.Fields.Count > 1)
                            {
                                field.Model = (Extend.IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                                if (regionType.ListTitleField == fieldType.Id)
                                {
                                    regionItem.Title        = field.Model.GetTitle();
                                    field.Meta.NotifyChange = true;
                                }
                            }
                            else
                            {
                                field.Model             = (Extend.IField)regionModel;
                                field.Meta.NotifyChange = true;
                                regionItem.Title        = field.Model.GetTitle();
                            }
                            regionItem.Fields.Add(field);
                        }

                        if (string.IsNullOrWhiteSpace(regionItem.Title))
                        {
                            regionItem.Title = "...";
                        }

                        region.Items.Add(regionItem);
                    }
                    model.Regions.Add(region);
                }

                foreach (var block in page.Blocks)
                {
                    var blockType = App.Blocks.GetByType(block.Type);

                    if (block is Extend.BlockGroup)
                    {
                        var group = new BlockGroupModel
                        {
                            Id   = block.Id,
                            Type = block.Type,
                            Meta = new BlockMeta
                            {
                                Name      = blockType.Name,
                                Icon      = blockType.Icon,
                                Component = "block-group",
                                IsGroup   = true
                            }
                        };

                        if (blockType.Display != BlockDisplayMode.MasterDetail)
                        {
                            group.Meta.Component = blockType.Display == BlockDisplayMode.Horizontal ?
                                                   "block-group-horizontal" : "block-group-vertical";
                        }

                        foreach (var prop in block.GetType().GetProperties(App.PropertyBindings))
                        {
                            if (typeof(Extend.IField).IsAssignableFrom(prop.PropertyType))
                            {
                                var fieldType = App.Fields.GetByType(prop.PropertyType);

                                group.Fields.Add(new FieldModel
                                {
                                    Model = (Extend.IField)prop.GetValue(block),
                                    Meta  = new FieldMeta
                                    {
                                        Id        = prop.Name,
                                        Name      = prop.Name,
                                        Component = fieldType.Component,
                                    }
                                });
                            }
                        }

                        bool firstChild = true;
                        foreach (var child in ((Extend.BlockGroup)block).Items)
                        {
                            blockType = App.Blocks.GetByType(child.Type);

                            group.Items.Add(new BlockItemModel
                            {
                                IsActive = firstChild,
                                Model    = child,
                                Meta     = new BlockMeta
                                {
                                    Name      = blockType.Name,
                                    Title     = child.GetTitle(),
                                    Icon      = blockType.Icon,
                                    Component = blockType.Component
                                }
                            });
                            firstChild = false;
                        }
                        model.Blocks.Add(group);
                    }
                    else
                    {
                        model.Blocks.Add(new BlockItemModel
                        {
                            Model = block,
                            Meta  = new BlockMeta
                            {
                                Name      = blockType.Name,
                                Title     = block.GetTitle(),
                                Icon      = blockType.Icon,
                                Component = blockType.Component
                            }
                        });
                    }
                }
                return(model);
            }
            return(null);
        }
예제 #24
0
        public List <RegionModel> Get(RegionModel filter)
        {
            RegionDA da = new RegionDA();

            return(da.Get(filter));
        }
예제 #25
0
 public void Resolve(RegionModel model)
 {
     model.IsExpanded = true;
 }
예제 #26
0
 public void SetRegionPanel(RegionModel model)
 {
     info           = model;
     RegionName.Key = info.Name;
     Flag.sprite    = Resources.Load <Sprite>("Flag" + info.Id);
 }
 public void TestInitialize()
 {
     _region1  = ModelsFactory.NewRegionModel(1, "First Region");
     _traffic1 = ModelsFactory.NewTrafficModel(_region1.Code, 2, "No jams");
 }
예제 #28
0
 public void Resolve(RegionModel model)
 {
     // do nothing
 }
예제 #29
0
 public async Task Post([FromBody] RegionModel model)
 {
     await _regionService.CreateAsync(model.Id, model.Name, model.ParentId);
 }
예제 #30
0
        private PostEditModel Transform(DynamicPost post, bool isDraft)
        {
            var config = new Config(_api);
            var type   = App.PostTypes.GetById(post.TypeId);
            var route  = type.Routes.FirstOrDefault(r => r.Route == post.Route) ?? type.Routes.FirstOrDefault();

            var model = new PostEditModel
            {
                Id                     = post.Id,
                BlogId                 = post.BlogId,
                TypeId                 = post.TypeId,
                PrimaryImage           = post.PrimaryImage,
                Title                  = post.Title,
                Slug                   = post.Slug,
                MetaTitle              = post.MetaTitle,
                MetaKeywords           = post.MetaKeywords,
                MetaDescription        = post.MetaDescription,
                OgTitle                = post.OgTitle,
                OgDescription          = post.OgDescription,
                OgImage                = post.OgImage,
                Excerpt                = post.Excerpt,
                Published              = post.Published?.ToString("yyyy-MM-dd HH:mm"),
                RedirectUrl            = post.RedirectUrl,
                RedirectType           = post.RedirectType.ToString(),
                EnableComments         = post.EnableComments,
                CloseCommentsAfterDays = post.CloseCommentsAfterDays,
                CommentCount           = post.CommentCount,
                State                  = post.GetState(isDraft),
                UseBlocks              = type.UseBlocks,
                UsePrimaryImage        = type.UsePrimaryImage,
                UseExcerpt             = type.UseExcerpt,
                UseHtmlExcerpt         = config.HtmlExcerpt,
                SelectedRoute          = route == null ? null : new RouteModel
                {
                    Title = route.Title,
                    Route = route.Route
                },
                Permissions = App.Permissions
                              .GetPublicPermissions()
                              .Select(p => new KeyValuePair <string, string>(p.Name, p.Title))
                              .ToList(),
                SelectedPermissions = post.Permissions
            };

            foreach (var r in type.Routes)
            {
                model.Routes.Add(new RouteModel
                {
                    Title = r.Title,
                    Route = r.Route
                });
            }

            foreach (var regionType in type.Regions)
            {
                var region = new RegionModel
                {
                    Meta = new RegionMeta
                    {
                        Id           = regionType.Id,
                        Name         = regionType.Title,
                        Description  = regionType.Description,
                        Placeholder  = regionType.ListTitlePlaceholder,
                        IsCollection = regionType.Collection,
                        Expanded     = regionType.ListExpand,
                        Icon         = regionType.Icon,
                        Display      = regionType.Display.ToString().ToLower()
                    }
                };
                var regionListModel = ((IDictionary <string, object>)post.Regions)[regionType.Id];

                if (!regionType.Collection)
                {
                    var regionModel = (IRegionList)Activator.CreateInstance(typeof(RegionList <>).MakeGenericType(regionListModel.GetType()));
                    regionModel.Add(regionListModel);
                    regionListModel = regionModel;
                }

                foreach (var regionModel in (IEnumerable)regionListModel)
                {
                    var regionItem = new RegionItemModel();

                    foreach (var fieldType in regionType.Fields)
                    {
                        var appFieldType = App.Fields.GetByType(fieldType.Type);

                        var field = new FieldModel
                        {
                            Meta = new FieldMeta
                            {
                                Id          = fieldType.Id,
                                Name        = fieldType.Title,
                                Component   = appFieldType.Component,
                                Placeholder = fieldType.Placeholder,
                                IsHalfWidth = fieldType.Options.HasFlag(FieldOption.HalfWidth),
                                Description = fieldType.Description
                            }
                        };

                        if (typeof(SelectFieldBase).IsAssignableFrom(appFieldType.Type))
                        {
                            foreach (var item in ((SelectFieldBase)Activator.CreateInstance(appFieldType.Type)).Items)
                            {
                                field.Meta.Options.Add(Convert.ToInt32(item.Value), item.Title);
                            }
                        }

                        if (regionType.Fields.Count > 1)
                        {
                            field.Model = (IField)((IDictionary <string, object>)regionModel)[fieldType.Id];

                            if (regionType.ListTitleField == fieldType.Id)
                            {
                                regionItem.Title        = field.Model.GetTitle();
                                field.Meta.NotifyChange = true;
                            }
                        }
                        else
                        {
                            field.Model             = (IField)regionModel;
                            field.Meta.NotifyChange = true;
                            regionItem.Title        = field.Model.GetTitle();
                        }
                        regionItem.Fields.Add(field);
                    }

                    if (string.IsNullOrWhiteSpace(regionItem.Title))
                    {
                        regionItem.Title = "...";
                    }

                    region.Items.Add(regionItem);
                }
                model.Regions.Add(region);
            }

            foreach (var block in post.Blocks)
            {
                var blockType = App.Blocks.GetByType(block.Type);

                if (block is BlockGroup blockGroup)
                {
                    var group = new BlockGroupModel
                    {
                        Id   = block.Id,
                        Type = block.Type,
                        Meta = new BlockMeta
                        {
                            Name        = blockType.Name,
                            Icon        = blockType.Icon,
                            Component   = "block-group",
                            IsGroup     = true,
                            isCollapsed = config.ManagerDefaultCollapsedBlocks,
                            ShowHeader  = !config.ManagerDefaultCollapsedBlockGroupHeaders
                        }
                    };

                    if (blockType.Display != BlockDisplayMode.MasterDetail)
                    {
                        group.Meta.Component = blockType.Display == BlockDisplayMode.Horizontal ?
                                               "block-group-horizontal" : "block-group-vertical";
                    }

                    group.Fields = ContentUtils.GetBlockFields(block);

                    bool firstChild = true;
                    foreach (var child in blockGroup.Items)
                    {
                        blockType = App.Blocks.GetByType(child.Type);

                        if (!blockType.IsGeneric)
                        {
                            group.Items.Add(new BlockItemModel
                            {
                                IsActive = firstChild,
                                Model    = child,
                                Meta     = new BlockMeta
                                {
                                    Name      = blockType.Name,
                                    Title     = child.GetTitle(),
                                    Icon      = blockType.Icon,
                                    Component = blockType.Component
                                }
                            });
                        }
                        else
                        {
                            // Generic block item model
                            group.Items.Add(new BlockGenericModel
                            {
                                IsActive = firstChild,
                                Model    = ContentUtils.GetBlockFields(child),
                                Type     = child.Type,
                                Meta     = new BlockMeta
                                {
                                    Name      = blockType.Name,
                                    Title     = child.GetTitle(),
                                    Icon      = blockType.Icon,
                                    Component = blockType.Component,
                                }
                            });
                        }
                        firstChild = false;
                    }
                    model.Blocks.Add(group);
                }
                else
                {
                    if (!blockType.IsGeneric)
                    {
                        // Regular block item model
                        model.Blocks.Add(new BlockItemModel
                        {
                            Model = block,
                            Meta  = new BlockMeta
                            {
                                Name        = blockType.Name,
                                Title       = block.GetTitle(),
                                Icon        = blockType.Icon,
                                Component   = blockType.Component,
                                isCollapsed = config.ManagerDefaultCollapsedBlocks
                            }
                        });
                    }
                    else
                    {
                        // Generic block item model
                        model.Blocks.Add(new BlockGenericModel
                        {
                            Model = ContentUtils.GetBlockFields(block),
                            Type  = block.Type,
                            Meta  = new BlockMeta
                            {
                                Name        = blockType.Name,
                                Title       = block.GetTitle(),
                                Icon        = blockType.Icon,
                                Component   = blockType.Component,
                                isCollapsed = config.ManagerDefaultCollapsedBlocks
                            }
                        });
                    }
                }
            }

            // Custom editors
            foreach (var editor in type.CustomEditors)
            {
                model.Editors.Add(new EditorModel
                {
                    Component = editor.Component,
                    Icon      = editor.Icon,
                    Name      = editor.Title
                });
            }
            return(model);
        }
예제 #31
0
        public void BuildPageModel(ref PageModel pageModel, DD4T.ContentModel.IPage page, IEnumerable <DD4T.ContentModel.IPage> includes, Localization localization)
        {
            var containers = new List <AbstractContainerModel>();

            // Get absolute order of the different container items
            //
            var regionAbsoluteOrder    = new Dictionary <string, IList <int> >();
            var containerAbsoluteOrder = new List <int>();
            int index = 0;

            foreach (var cp in page.ComponentPresentations)
            {
                if (cp.ComponentTemplate.MetadataFields.ContainsKey("regionName"))
                {
                    string      regionName = (string)cp.ComponentTemplate.MetadataFields["regionName"].Values[0];
                    IList <int> orderList  = null;
                    regionAbsoluteOrder.TryGetValue(regionName, out orderList);
                    if (orderList == null)
                    {
                        orderList = new List <int>();
                        regionAbsoluteOrder.Add(regionName, orderList);
                    }
                    orderList.Add(index);
                }
                else if (cp.ComponentTemplate.MetadataFields.ContainsKey("action"))
                {
                    string controllerAction = (string)cp.ComponentTemplate.MetadataFields["action"].Values[0];
                    if (controllerAction.Equals("Container"))
                    {
                        containerAbsoluteOrder.Add(index);
                    }
                }
                index++;
            }

            // Go through the entity list and extract all containers
            //
            index = 1;
            foreach (var region in pageModel.Regions)
            {
                // TODO: Remove container region from the top level? Otherwise XPM drop zones are generated for them as well?

                foreach (var entity in region.Entities)
                {
                    if (entity is AbstractContainerModel)
                    {
                        AbstractContainerModel container = (AbstractContainerModel)entity;

                        // Override region name using MVC route values
                        //
                        string containerRegionName = null;
                        container.MvcData.RouteValues.TryGetValue("containerRegion", out containerRegionName);
                        if (containerRegionName != null)
                        {
                            container.Name = containerRegionName;
                        }
                        // TODO: if no container region name -> should we skip this container then???
                        try
                        {
                            container.Region = new ContainerRegionModel(container);
                        }
                        catch (DxaException e)
                        {
                            throw new DxaException("Could not create empty region for container: " + container.Name, e);
                        }
                        container.Index = index;
                        index++;
                        containers.Add(container);
                    }
                }
            }

            // Move all container items to the containers (to avoid the container items to be rendered outside the container)
            //
            foreach (var container in containers)
            {
                if (containerAbsoluteOrder.Count == 0)
                {
                    break;
                }
                int containerIndex = containerAbsoluteOrder[0];
                containerAbsoluteOrder.RemoveAt(0);
                RegionModel regionWithContainerItems = null;
                pageModel.Regions.TryGetValue(container.Name, out regionWithContainerItems);
                if (regionWithContainerItems == null)
                {
                    // No container items found on the page -> continue
                    //
                    continue;
                }
                IList <int> orderList = null;
                regionAbsoluteOrder.TryGetValue(container.Name, out orderList);
                if (orderList != null && orderList.Count > 0)
                {
                    index = orderList[0];
                    if (containerIndex + 1 == index)
                    {
                        int noOfItems = 0;
                        foreach (var entity in regionWithContainerItems.Entities)
                        {
                            container.Region.Entities.Add(entity);
                            noOfItems++;
                            orderList.RemoveAt(0);
                            if (orderList.Count == 0)
                            {
                                break;
                            }
                            int nextIndex = orderList[0];
                            if (nextIndex != index + 1)
                            {
                                break;
                            }
                            else
                            {
                                index = nextIndex;
                            }
                        }
                        for (int i = 0; i < noOfItems; i++)
                        {
                            regionWithContainerItems.Entities.RemoveAt(0);
                        }
                    }
                }
            }
        }