public ActionResult Delete(RegionEditModel model)
 {
     String[] errors = proc.DeleteRegion(User.GetDbUser(db), model.Iid.Value);
     if (errors.Length > 0)
     {
         foreach (var s in errors)
         {
             ModelState.AddModelError(String.Empty, s);
         }
         return(View(model));
     }
     else
     {
         return(RedirectToAction("Index", model.IidParent));
     }
 }
        //
        // GET: /Regions/Create
        public ActionResult Create(long?parent)
        {
            if (!User.IsInRole(db, RoleEnum.Admin, parent))
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = Url.Action("Create", "Regions", new { parent = parent }) }));
            }

            var regList = proc.GetAdministartorRegion(User.GetDbUser(db), parent);

            ViewBag.Regions = regList;
            var model = new RegionEditModel
            {
                IidParent = parent
            };

            model.LoadUsers(db);
            return(View("Edit", model));
        }
        public ActionResult Edit(long id)
        {
            var model = db.Regions.Find(id);

            if (model == null)
            {
                return(HttpNotFound());
            }
            if (!User.IsInRole(db, RoleEnum.Admin, model.IidParent))
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = Url.Action("Edit", "Regions", new { id = id }) }));
            }
            ViewBag.Regions = proc.GetAdministartorRegion(User.GetDbUser(db), model.IidParent);

            var editModel = new RegionEditModel(model);

            editModel.LoadUsers(db);
            return(View(editModel));
        }
        public ActionResult Save(RegionEditModel model)
        {
            ViewBag.Message = String.Empty;
            ViewBag.Regions = proc.GetAdministartorRegion(User.GetDbUser(db), model.IidParent);
            if (!ModelState.IsValid)
            {
                return(View("Edit", model));
            }
            var errors = proc.SaveRegion(User.GetDbUser(db), model);

            if (errors.Length > 0)
            {
                foreach (var err in errors)
                {
                    ModelState.AddModelError(err.Item1, err.Item2);
                }
                return(View("Edit", model));
            }
            return(RedirectToAction("Index", new { id = model.IidParent }));
        }
Esempio n. 5
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 RegionEditModel
                    {
                        Meta = new RegionMeta
                        {
                            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 RegionItemEditModel();

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

                            var field = new FieldEditModel
                            {
                                Type = appFieldType.TypeName,
                                Meta = new FieldMeta
                                {
                                    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 BlockEditModel
                        {
                            Meta = new ContentMeta
                            {
                                Name      = blockType.Name,
                                Icon      = blockType.Icon,
                                Component = "block-group"
                            }
                        };

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

                        var groupItem = new BlockGroupEditModel
                        {
                            Type = block.Type
                        };

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

                                groupItem.Fields.Add(new FieldEditModel
                                {
                                    Type  = fieldType.TypeName,
                                    Model = (Extend.IField)prop.GetValue(block),
                                    Meta  = new FieldMeta
                                    {
                                        Name      = prop.Name,
                                        Component = fieldType.Component,
                                    }
                                });
                            }
                        }

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

                            groupItem.Items.Add(new BlockEditModel
                            {
                                IsActive = firstChild,
                                Model    = child,
                                Meta     = new ContentMeta
                                {
                                    Name      = blockType.Name,
                                    Title     = child.GetTitle(),
                                    Icon      = blockType.Icon,
                                    Component = blockType.Component
                                }
                            });
                            firstChild = false;
                        }
                        group.Model = groupItem;
                        model.Blocks.Add(group);
                    }
                    else
                    {
                        model.Blocks.Add(new BlockEditModel
                        {
                            Model = block,
                            Meta  = new ContentMeta
                            {
                                Name      = blockType.Name,
                                Title     = block.GetTitle(),
                                Icon      = blockType.Icon,
                                Component = blockType.Component
                            }
                        });
                    }
                }
                return(model);
            }
            return(null);
        }
Esempio n. 6
0
        public ErrorTuple[] SaveRegion(UserProfileModel user, RegionEditModel model)
        {
            List <ErrorTuple> res = new List <ErrorTuple>();

            if (!user.IsInRoleRegion(RoleEnum.Admin, model.IidParent))
            {
                res.Add(new ErrorTuple("IidParent", "У вас нет прав для создания команд в выбранном регионе"));
            }
            RegionModel saveModel;

            if ((model.Iid ?? 0) > 0)
            {
                saveModel = db.Regions.Find(model.Iid);
                if (saveModel == null)
                {
                    res.Add(new ErrorTuple(String.Empty, "Корректируемый регион был удален"));
                }
                else if (!user.IsInRoleRegion(RoleEnum.Admin, saveModel.IidParent))
                {
                    res.Add(new ErrorTuple(String.Empty, "У вас нет прав для корректировки выбранного региона"));
                }
                if (res.Count > 0)
                {
                    return(res.ToArray());
                }
            }
            else
            {
                if (res.Count > 0)
                {
                    return(res.ToArray());
                }
                saveModel = new RegionModel()
                {
                    UserRoles = new List <UserRoleModel>()
                };
                db.Regions.Add(saveModel);
            }
            saveModel.IidParent = model.IidParent;
            saveModel.Name      = model.Name;
            String prefixCode;

            if (model.IidParent == null)
            {
                prefixCode = String.Empty;
            }
            else
            {
                var preg = db.Regions.Find(model.IidParent);
                prefixCode = preg == null ? String.Empty : (preg.SymCode ?? String.Empty);
            }
            saveModel.SymCode = prefixCode + model.SymCode;
            if (model.Users == null)
            {
                saveModel.UserRoles.Clear();
            }
            else
            {
                var existingRoles = saveModel.UserRoles.ToList();
                var rolesToDel    = existingRoles.Where(r => r.CompID != null || r.RoleId < (int)RoleEnum.Admin).ToList();
                foreach (var r in rolesToDel)
                {
                    existingRoles.Remove(r);
                }
                rolesToDel.AddRange(existingRoles.Where(r => model.Users.Count(um => um.UserId == r.UserId && um.IsAdmin) < 1));
                foreach (var r in rolesToDel)
                {
                    existingRoles.Remove(r);
                }
                foreach (var um in model.Users.Where(um => um.IsAdmin && existingRoles.Count(r => r.UserId == um.UserId) < 1))
                {
                    saveModel.UserRoles.Add(new UserRoleModel {
                        UserId = um.UserId, CompID = null, RoleId = (int)RoleEnum.Admin
                    });
                }
                foreach (var r in rolesToDel)
                {
                    db.UserRoles.Remove(r);
                }
            }
            db.SaveChanges();
            model.Iid = saveModel.Iid;
            return(new ErrorTuple[0]);
        }