Esempio n. 1
0
        public async Task <ActionResult> Edit(int id)
        {
            using (var db = DbHelper.GetDb())
            {
                var badge = await db.Badges.Include(b => b.Requirements.Select(r => r.Parameters))
                            .FirstOrDefaultAsync(b => b.Id == id);

                if (badge != null)
                {
                    var model = new EditBadge()
                    {
                        Description    = badge.Description,
                        Name           = badge.Name,
                        Id             = badge.Id,
                        EstimatedHours = badge.EstimatedHours ?? 0,
                        ImageSource    = badge.Image?.ImageString,
                        Requirements   = badge.Requirements.Select(r => new EditRequirement()
                        {
                            Id     = r.Id,
                            Text   = r.Text,
                            Url    = r.UrlForStatus,
                            Params = r.Parameters.Select(p => new EditParam()
                            {
                                Name  = p.Name,
                                Value = p.Value
                            }).ToList()
                        }).ToList()
                    };

                    return(View(model));
                }
            }

            return(Redirect("Error"));
        }
Esempio n. 2
0
        public async Task <ActionResult> Create(EditBadge model)
        {
            if (ModelState.IsValid)
            {
                using (var db = DbHelper.GetDb())
                {
                    var badge = new Badge()
                    {
                        Description    = model.Description,
                        Name           = model.Name,
                        EstimatedHours = model.EstimatedHours
                    };

                    db.Badges.Add(badge);

                    await db.SaveChangesAsync();

                    return(RedirectToAction("Edit", new { id = badge.Id }));
                }
            }

            return(Redirect("Error"));
        }
Esempio n. 3
0
        public async Task <ActionResult> Edit(EditBadge model)
        {
            if (ModelState.IsValid)
            {
                if (model.Id.HasValue)
                {
                    using (var db = DbHelper.GetDb())
                    {
                        var badge = await db.Badges.Include(b => b.Requirements.Select(r => r.Parameters)).FirstOrDefaultAsync(b => b.Id == model.Id);

                        if (badge == null)
                        {
                            return(RedirectToAction("Index"));
                        }

                        badge.EstimatedHours = model.EstimatedHours;
                        badge.Description    = model.Description;
                        badge.Name           = model.Name;

                        if (badge.ImageId == null)
                        {
                            badge.Image = new Image();
                        }

                        var matches = Regex.Match(model.ImageSource ?? "", @"data:image/(?<type>.+?),(?<data>.+)");
                        var type    = matches.Groups["type"]?.Value ?? "";
                        var data    = matches.Groups["data"]?.Value ?? "";

                        badge.Image.ImageData = Convert.FromBase64String(data);
                        badge.Image.Type      = type;

                        //Clear deleted requirements
                        foreach (var requirement in badge.Requirements.ToList())
                        {
                            if (!model.Requirements.Any(r => r.Id == requirement.Id))
                            {
                                badge.Requirements.Remove(requirement);
                                foreach (var param in requirement.Parameters.ToList())
                                {
                                    db.Entry(param).State = EntityState.Deleted;
                                }
                                db.Entry(requirement).State = EntityState.Deleted;
                            }
                        }
                        //Add or modify new ones
                        foreach (var requirement in model.Requirements)
                        {
                            var dbReq = badge.Requirements.FirstOrDefault(r => r.Id == requirement.Id) ?? new Requirement();
                            dbReq.Text         = requirement.Text;
                            dbReq.UrlForStatus = requirement.Url;
                            //Clear params
                            foreach (var param in dbReq.Parameters.ToList())
                            {
                                dbReq.Parameters.Remove(param);
                                db.Entry(param).State = EntityState.Deleted;;
                            }
                            //Add new ones
                            dbReq.Parameters = requirement.Params.Select(p => new Parameter()
                            {
                                Name  = p.Name,
                                Value = p.Value
                            }).ToList();

                            badge.Requirements.Add(dbReq);
                        }

                        await db.SaveChangesAsync();

                        return(RedirectToAction("Index"));
                    }
                }
            }

            return(View(model));
        }