public async Task Create([FromBody] EditathonConfig cfg) { var user = _identity.GetUserInfo().Username; if (_session.Query <Editathon>().Any(_ => _.Code == cfg.Code || _.Name == cfg.Name)) { throw Forbidden(); } var rights = _identity.GetUserRights(); await rights.Actualize(); var publish = rights.IsAdminIn(cfg.Wiki); if (!publish && _session.Query <Editathon>().Any(_ => _.Creator == user && !_.IsPublished)) { throw Forbidden(); } var e = new Editathon { Creator = user, IsPublished = publish, }; ApplyConfig(e, cfg); _session.Save(e); }
public HttpResponseMessage Create(EditathonData e) { return(Unauthorized()); _auditContext.Operation = OperationType.CreateEditathon; var user = _identity.GetUserInfo(); if (user == null) { return(Unauthorized()); } var exist = Session.Query <Editathon>() .Any(i => i.Code == e.General.Code || i.Name == e.General.Title); if (exist) { return(Forbidden()); } var editathon = new Editathon { Name = e.General.Title, Code = e.General.Code, Description = e.General.Description, Wiki = e.General.Wiki, Start = e.General.StartDate, Finish = e.General.FinishDate.AddDays(1).AddSeconds(-1), Flags = e.General.Flags, Jury = new HashSet <string>(e.Jury.Jury), Rules = new HashSet <Rule>(e.Rules.Rules), }; if (e.Template.Enabled) { editathon.Template = JObject.FromObject(new { name = e.Template.Name, talkPage = e.Template.TalkPage, args = e.Template.Args, }); } Session.Save(editathon); if (e.Jury.SendInvites) { // ... } return(Ok()); }
private static IEnumerable <Editathon.ResultRow> GetRows(Editathon ed, UserInfo user) { if (ed.Flags.HasFlag(EditathonFlags.HiddenMarks)) { return(null); } if (!ed.Articles.Where(a => a.User == user.Username).Any(a => a.Marks.Any())) { return(null); } var rows = ed.GetResults(); var rank = rows.Single(x => x.Name == user.Username).Rank; return(rows.SkipWhile(u => u.Rank < rank - 1).TakeWhile(u => u.Rank <= rank + 1).ToArray()); }
private void ApplyConfig(Editathon e, EditathonConfig cfg) { e.Code = cfg.Code; e.Name = cfg.Name; e.Description = cfg.Description; e.Start = cfg.Start; e.Finish = cfg.Finish; e.Wiki = cfg.Wiki; e.Flags = cfg.Flags; e.Rules.Clear(); e.Rules.UnionWith(cfg.Rules.Select(_session.Merge)); e.Marks = cfg.Marks; e.Template = cfg.Template; e.Jury.Clear(); e.Jury.UnionWith(cfg.Jury); }