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);
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }