Пример #1
0
        // GET
        public IActionResult Remove(int?gid)
        {
            using var context = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0 || gid != null)
            {
                return(Redirect("/Home/Index"));
            }

            var record = context.GroupsList.First(i => i.Id == gid);

            if (record.Owner <= 0)
            {
                return(Redirect("/User/Profile"));
            }

            var order0 = context.GroupsList.Where(i => i.GroupId == gid);
            var order1 = context.Groups.Where(i => i.Id == gid);

            foreach (var g in order0)
            {
                context.GroupsList.Remove(g);
            }
            foreach (var g in order1)
            {
                context.Groups.Remove(g);
            }
            context.SaveChanges();

            return(Redirect("/User/Profile"));
        }
Пример #2
0
        public IActionResult LoadPhoto(ImageData imageData, string Id)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var id  = int.Parse(Id);
            var tst = context.Tests.First(i => i.Id == id && i.OwnerId == userData.Id);

            if (imageData.Image == null)
            {
                return(Redirect($"/Test/Create?id={id}"));
            }

            byte[] data = null;
            using (var binaryReader = new BinaryReader(imageData.Image.OpenReadStream()))
            {
                data = binaryReader.ReadBytes((int)imageData.Image.Length);
            }


            tst.Photo = data;
            context.Tests.Update(tst);
            context.SaveChanges();

            return(Redirect($"/Test/Create?id={id}"));
        }
Пример #3
0
        public IActionResult Index(int id)
        {
            var context = ContextBuilder.Context;

            // Проверка на доступность пользователю
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }
            var ask = context.Asks.First(i => i.Id == id);

            if (context.Tests.Count(i => i.Id == ask.TestId && i.OwnerId == userData.Id) < 1)
            {
                return(Redirect("/Home/Index"));
            }

            var answers = new List <Answer>(context.Answers.Where(i => i.AskId == ask.Id));

            ViewData["ask"]     = ask;
            ViewData["answers"] = answers;

            return(View());
        }
Пример #4
0
        public IActionResult Login(int gid, string pass)
        {
            using var context = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var count = context.Groups.Count(i => i.Id == gid && i.Pass == pass);

            if (count > 0)
            {
                var countInList = context.GroupsList.Count(i => i.GroupId == gid && i.UserId == userData.Id);
                if (countInList >= 1)
                {
                    return(Redirect($"/Group/Index?gid={gid}"));
                }

                var record = new GroupList {
                    GroupId = gid, Owner = 0, UserId = userData.Id
                };
                context.GroupsList.Add(record);
                context.SaveChanges();
                return(Redirect($"/Group/Index?gid={gid}"));
            }

            return(View());
        }
Пример #5
0
        public IActionResult Kick(int?gid, int usr)
        {
            using var context = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0 || gid is null)
            {
                return(Redirect("/Home/Index"));
            }

            if (usr == userData.Id)
            {
                return(Redirect($"/Group/Create?gid={gid}"));
            }

            var countInList = context.GroupsList.Count(i => i.GroupId == gid && i.UserId == userData.Id && i.Owner > 0);

            if (countInList < 1)
            {
                return(Redirect($"/Group/Create?gid={gid}"));
            }

            var record = context.GroupsList.First(i => i.UserId == usr && i.UserId != userData.Id);

            context.GroupsList.Remove(record);
            context.SaveChanges();

            return(Redirect($"/Group/Create?gid={gid}"));
        }
Пример #6
0
        public IActionResult LoadPhoto(ImageData imageData, int id)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }
            var ask = context.Asks.First(i => i.Id == id);

            if (context.Tests.Count(i => i.Id == ask.TestId && i.OwnerId == userData.Id) < 1)
            {
                return(Redirect("/Home/Index"));
            }

            if (imageData.Image == null)
            {
                return(Redirect($"/Ask/Index?id={ask.Id}"));
            }

            byte[] data = null;
            using (var binaryReader = new BinaryReader(imageData.Image.OpenReadStream()))
            {
                data = binaryReader.ReadBytes((int)imageData.Image.Length);
            }

            ask.Photo = data;
            context.Asks.Update(ask);
            context.SaveChanges();

            return(Redirect($"/Ask/Index?id={ask.Id}"));
        }
Пример #7
0
        public IActionResult Create(int?gid, string name, string pass)
        {
            using var context = ContextBuilder.Context;
            SessionKeeper.Get(this, false);
            ViewData["Title"] = "Редактирование группы";

            var userData = SessionKeeper.Get(this);

            if (gid == null)
            {
                ViewData["Title"] = "Создание группы";

                var r = new Random();
                var g = r.Next(0, 10000000).ToString();
                context.Groups.Add(new Group {
                    Name = g
                });
                context.SaveChanges();

                var created = context.Groups.First(i => i.Name == g);
                created.Name = "Новая группа";
                context.Groups.Update(created);

                context.GroupsList.Add(new GroupList {
                    GroupId = created.Id, Owner = 1, UserId = userData.Id
                });
                context.SaveChanges();

                ViewData["gid"]   = created.Id;
                ViewData["gName"] = created.Name;
                ViewData["gPass"] = created.Pass;
            }
            else
            {
                var group = context.Groups.First(i => i.Id == gid);

                var allowed =
                    context.GroupsList.Count(i => i.GroupId == gid && i.UserId == userData.Id && i.Owner > 0);
                if (allowed < 1)
                {
                    return(Redirect("/Home/Index"));
                }

                // Изменение полей при запросе
                if (name != null && pass != null)
                {
                    group.Name = name.TrimName().MakeSafe();
                    group.Pass = pass;

                    context.Groups.Update(group);
                    context.SaveChanges();
                }

                ViewData["gid"]   = gid;
                ViewData["gName"] = group.Name;
                ViewData["gPass"] = group.Pass;
            }

            return(View());
        }
Пример #8
0
        public IActionResult AnswerAdd(int id)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }
            var ask = context.Asks.First(i => i.Id == id);

            if (context.Tests.Count(i => i.Id == ask.TestId && i.OwnerId == userData.Id) < 1)
            {
                return(Redirect("/Home/Index"));
            }

            var answer = new Answer {
                Value = "Вариант ответа", Impact = 0, AskId = ask.Id, TestId = ask.TestId
            };

            context.Answers.Add(answer);
            context.SaveChanges();

            return(Redirect($"/Ask/Index?id={id}"));
        }
Пример #9
0
        public IActionResult LoadAvatar(ImageData imageData)
        {
            var context = ContextBuilder.Context;

            if (imageData.Image == null)
            {
                return(Redirect("/User/Profile"));
            }

            byte[] data = null;
            using (var binaryReader = new BinaryReader(imageData.Image.OpenReadStream()))
            {
                data = binaryReader.ReadBytes((int)imageData.Image.Length);
            }

            var userdata = SessionKeeper.Get(this);

            var name = userdata.Name;
            var pass = userdata.Password;
            var usr  = context.Users.First(i => i.Name == name && i.Pass == pass);

            usr.Photo = data;
            context.Users.Update(usr);
            context.SaveChanges();

            return(Redirect("/User/Profile"));
        }
Пример #10
0
        public IActionResult Index()
        {
            SessionKeeper.Get(this);
            using var context = ContextBuilder.Context;
            var tests = new List <Test>(context.Tests.Where(r => r.Show > 0).Take(MainTestsCount));

            return(View(tests));
        }
Пример #11
0
 public ResultContent SendTest(int tid, int[] AskId, int[] AnswerId, string user, string sessionkey)
 {
     try
     {
         var usrData = SessionKeeper.Get(user, sessionkey);
         var result  = FreqRequests.GetResultContent(tid, AskId, AnswerId, usrData.Id);
         return(result);
     }
     catch
     {
         return(ResultContent.Error);
     }
 }
Пример #12
0
 public TestContent GetTest(int id, string user, string sessionkey)
 {
     try
     {
         var usrData = SessionKeeper.Get(user, sessionkey);
         var test    = FreqRequests.GetTestContent(id, usrData.Id);
         return(test);
     }
     catch
     {
         return(TestContent.Error);
     }
 }
Пример #13
0
        // GET
        public IActionResult Index()
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);
            var id       = int.Parse(Request.Query["id"]);
            var test     = context.Tests.First(i => i.Id == id);

            ViewData["test"]  = test;
            ViewData["Title"] = $"Тест - {test.Name}";

            ViewData["tAllow"] = false;
            ViewData["tries"]  = 0;

            // Проверка на количество попыток
            var triesCount = context.Results.Count(i => i.UserId == userData.Id);

            ViewData["tries"] = triesCount;
            if (test.Tries > 0 && test.Tries - triesCount < 1)
            {
                return(View());
            }

            // Проверка на наличие в группе
            var groupCount = context.GroupsList.Count(i => i.UserId == userData.Id && i.GroupId == test.Limit);

            if (groupCount < 1 && test.Limit > 0)
            {
                return(View());
            }
            if (userData.Id < 0 && test.SaveResults > 0)
            {
                return(View());
            }

            // Отображение body в случае прохождения проверок
            ViewData["tAllow"] = true;
            var asks = new List <Ask>();

            asks.AddRange(context.Asks.Where(i => i.TestId == test.Id));

            var answers = new List <Answer>();

            answers.AddRange(context.Answers.Where(i => i.TestId == test.Id));

            ViewData["tAsks"]    = asks;
            ViewData["tAnswers"] = answers;

            ViewData["Title"] = $"Тест - {test.Name}";

            return(View());
        }
Пример #14
0
        public IActionResult Find(string name)
        {
            using var context = ContextBuilder.Context;
            SessionKeeper.Get(this, false);

            ViewBag.Groups = null;
            if (name is null)
            {
                return(View());
            }

            var groups = new List <Group>(context.Groups.Where(i => i.Name == name));

            ViewBag.Groups = groups;
            return(View());
        }
Пример #15
0
        public IActionResult Remove()
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var id  = int.Parse(Request.Query["id"]);
            var tst = context.Tests.First(i => i.Id == id && i.OwnerId == userData.Id);

            context.Tests.Remove(tst);
            context.SaveChanges();

            return(Redirect("/User/Profile"));
        }
Пример #16
0
        public IActionResult Index(int?id)
        {
            var context = ContextBuilder.Context;

            SessionKeeper.Get(this);
            if (id is null)
            {
                return(Redirect("/User/Profile"));
            }
            var user = context.Users.First(i => i.Id == id);

            var groupslist = new List <GroupList>(context.GroupsList.Where(i => i.UserId == id));
            var groups     = groupslist.Select(g => context.Groups.First(i => i.Id == g.GroupId)).ToList();

            ViewData["user"]   = user;
            ViewData["groups"] = groups;

            return(View());
        }
Пример #17
0
        public IActionResult Create(int tid)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var test = context.Tests.First(i => i.Id == tid && i.OwnerId == userData.Id);
            var ask  = new Ask {
                TestId = test.Id, Value = "Empty"
            };

            context.Asks.Add(ask);
            context.SaveChanges();

            return(Redirect($"/Test/Create?id={tid}"));
        }
Пример #18
0
        public IActionResult AddDescription(int tid)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var test  = context.Tests.First(i => i.Id == tid && i.OwnerId == userData.Id);
            var descr = new ResultDescription {
                MinValue = 0, Text = "", TestId = test.Id
            };

            context.Descriptions.Add(descr);
            context.SaveChanges();

            return(Redirect($"/Test/Create?id={tid}"));
        }
Пример #19
0
        public IActionResult SetGroup()
        {
            var context = ContextBuilder.Context;

            ViewData["Title"] = "Сделать доступным для группы...";

            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var id  = int.Parse(Request.Query["id"]);
            var tst = context.Tests.First(i => i.Id == id && i.OwnerId == userData.Id);

            // Вывод списка с доступными группами
            if (Request.Query.ContainsKey("gname"))
            {
                var gname  = (string)Request.Query["gname"];
                var groups = new List <Group>(context.Groups.Where(i => i.Name == gname));
                ViewData["groups"] = groups;
                ViewData["test"]   = tst;

                return(View());
            }

            if (!Request.Query.ContainsKey("gid"))
            {
                return(Redirect($"/Test/Create?id={id}"));
            }

            // Установка новой группы для теста
            var gid = int.Parse(Request.Query["gid"]);

            tst.Limit = gid;
            context.Tests.Update(tst);
            context.SaveChanges();

            return(Redirect($"/Test/Create?id={id}"));
        }
Пример #20
0
        public IActionResult Remove(int id)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }
            var ask = context.Asks.First(i => i.Id == id);

            if (context.Tests.Count(i => i.Id == ask.TestId && i.OwnerId == userData.Id) < 1)
            {
                return(Redirect("/Home/Index"));
            }

            context.Asks.Remove(ask);
            context.SaveChanges();

            return(Redirect($"/Test/Create?id={ask.TestId}"));
        }
Пример #21
0
        public IActionResult Index(int?gid)
        {
            using var context = ContextBuilder.Context;
            SessionKeeper.Get(this, false);

            if (gid is null)
            {
                return(Redirect("/Home/Index"));
            }
            var group = context.Groups.First(i => i.Id == gid);

            var needReg = 1;

            try
            {
                var usr      = context.Users.First(i => i.Name == (string)ViewData["Name"]);
                var contains = context.GroupsList.Count(i => i.UserId == usr.Id && i.GroupId == gid);
                if (contains > 0)
                {
                    needReg = 2;
                }
            }
            catch
            {
                needReg = 0;
            }

            var glists = new List <GroupList>(context.GroupsList.Where(i => i.GroupId == gid));
            var users  = glists.Select(u => context.Users.First(i => i.Id == u.UserId)).ToList();
            var tests  = new List <Test>(context.Tests.Where(i => i.Limit == gid));

            ViewData["needReg"] = needReg;
            ViewData["Title"]   = group.Name;
            ViewData["gName"]   = group.Name;
            ViewData["gUsers"]  = users;
            ViewData["gid"]     = gid;
            ViewData["tests"]   = tests;

            return(View());
        }
Пример #22
0
        // GET
        public IActionResult Profile()
        {
            var context = ContextBuilder.Context;
            var user    = SessionKeeper.Get(this);

            if (!Request.Cookies.ContainsKey("Name"))
            {
                return(Redirect("/Home/Index"));
            }
            if (user.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            ViewData["Password"] = user.Password;
            ViewData["HideBar"]  = true;

            ViewData["Title"] = $"Профиль пользователя {Request.Cookies["Name"]}";
            ViewData["Tests"] = new List <Test>(context.Tests.Where(i => i.OwnerId == user.Id));

            return(View());
        }
Пример #23
0
        public IActionResult KickSelf(int gid)
        {
            using var context = ContextBuilder.Context;
            try
            {
                var userData = SessionKeeper.Get(this);
                if (userData.Id < 0)
                {
                    return(Redirect("/Home/Index"));
                }

                var record =
                    context.GroupsList.First(i => i.UserId == userData.Id && i.Owner < 1 && i.GroupId == gid);
                context.GroupsList.Remove(record);
                context.SaveChanges();
                return(Redirect($"/Group/Index?gid={gid}"));
            }
            catch
            {
                return(Redirect($"/User/Profile"));
            }
        }
Пример #24
0
        public IActionResult AnswerEdit(int id, string value, int impact)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }
            var answer = context.Answers.First(i => i.Id == id);

            if (context.Tests.Count(i => i.Id == answer.TestId && i.OwnerId == userData.Id) < 1)
            {
                return(Redirect("/Home/Index"));
            }

            answer.Impact = impact;
            answer.Value  = value.MakeSafe();
            context.Answers.Update(answer);
            context.SaveChanges();

            return(Redirect($"/Ask/Index?id={answer.AskId}"));
        }
Пример #25
0
        public IActionResult Edit(int id, string value)
        {
            var context = ContextBuilder.Context;

            // Проверка на доступность пользователю
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }
            var ask = context.Asks.First(i => i.Id == id);

            if (context.Tests.Count(i => i.Id == ask.TestId && i.OwnerId == userData.Id) < 1)
            {
                return(Redirect("/Home/Index"));
            }

            ask.Value = value;
            context.Asks.Update(ask);
            context.SaveChanges();

            return(Redirect($"/Ask/Index?id={id}"));
        }
Пример #26
0
        public IActionResult EditDescription(int id, string descr, int minv)
        {
            var context  = ContextBuilder.Context;
            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            var resdescr = context.Descriptions.First(i => i.Id == id);

            if (context.Tests.Count(i => i.OwnerId == userData.Id && i.Id == resdescr.TestId) < 1)
            {
                return(Redirect($"/Test/Create?id={resdescr.TestId}"));
            }

            resdescr.Text     = descr.MakeSafe();
            resdescr.MinValue = minv;
            context.Descriptions.Update(resdescr);
            context.SaveChanges();

            return(Redirect($"/Test/Create?id={resdescr.TestId}"));
        }
Пример #27
0
        public bool IsSessionValid(string name, string key)
        {
            var usrData = SessionKeeper.Get(name, key);

            return(usrData.Id > 0);
        }
Пример #28
0
        public IActionResult Create()
        {
            var context = ContextBuilder.Context;

            ViewData["Title"] = "Редактирование теста";

            var userData = SessionKeeper.Get(this);

            if (userData.Id < 0)
            {
                return(Redirect("/Home/Index"));
            }

            if (!Request.Query.ContainsKey("id"))
            {
                ViewData["Title"] = "Создание теста";

                // Создание нового теста
                var r        = new Random();
                var testname = r.Next(0, 10000).ToString();
                var newtest  = new Test {
                    Name = testname, Limit = 0, Info = "", SaveResults = 0, Show = 0, Tries = 0, OwnerId = userData.Id
                };
                context.Tests.Add(newtest);
                context.SaveChanges();

                // Получение нового теста из БД
                var test = context.Tests.First(i => i.Name == testname);
                test.Name = "Новый тест";
                context.Tests.Update(test);
                context.SaveChanges();

                return(Redirect($"/Test/Create?id={test.Id}"));
            }

            // Редактирование имеющейся записи
            var id  = int.Parse(Request.Query["id"]);
            var tst = context.Tests.First(i => i.Id == id && i.OwnerId == userData.Id);

            var changed = false;

            if (Request.Query.ContainsKey("name"))
            {
                tst.Name = ((string)Request.Query["name"]).MakeSafe(); changed = true;
            }
            if (Request.Query.ContainsKey("text"))
            {
                tst.Info = ((string)Request.Query["text"]).MakeSafe(); changed = true;
            }
            if (Request.Query.ContainsKey("tries"))
            {
                tst.SaveResults = 1; tst.Tries = int.Parse(Request.Query["tries"]); changed = true;
            }
            if (Request.Query.ContainsKey("name"))
            {
                tst.SaveResults = Request.Query.ContainsKey("saveres") ? 1 : 0;
                tst.Show        = Request.Query.ContainsKey("show") ? 1 : 0;
            }

            if (changed)
            {
                context.Tests.Update(tst);
                context.SaveChanges();
            }

            var asks    = new List <Ask>(context.Asks.Where(i => i.TestId == tst.Id));
            var descrs  = new List <ResultDescription>(context.Descriptions.Where(i => i.TestId == tst.Id));
            var results = new List <Result>(context.Results.Where(i => i.TestId == tst.Id));

            ViewData["asks"]      = asks;
            ViewData["test"]      = tst;
            ViewData["descrs"]    = descrs;
            ViewData["results"]   = results;
            ViewData["groupname"] = "";

            // Описание группы, для которой доступен тест
            if (tst.Limit != 0)
            {
                var group = context.Groups.First(i => i.Id == tst.Limit);
                ViewData["groupname"] = group.Name;
            }

            return(View());
        }
Пример #29
0
        public IActionResult Send(int[] AskId, int[] AnswerId)
        {
            var context = ContextBuilder.Context;

            ViewData["error"] = true;
            ViewData["Title"] = "Результаты тестирования";

            var userData = SessionKeeper.Get(this);

            if (AskId.Length < 1 || AnswerId.Length < 1)
            {
                return(View());
            }

            // Получение теста
            var firstAsk = context.Asks.First(i => i.Id == AskId[0]);
            var test     = context.Tests.First(i => i.Id == firstAsk.TestId);

            // Контроль доступа
            if (userData.Id < 0 && test.SaveResults > 0)
            {
                return(View());
            }
            if (context.GroupsList.Count(i => i.GroupId == test.Limit && i.UserId == userData.Id) < 0)
            {
                return(View());
            }

            var asks        = new List <Ask>(context.Asks.Where(i => i.TestId == test.Id));
            var answers     = new List <Answer>(context.Answers.Where(i => i.TestId == test.Id));
            var userAnswers = new Dictionary <int, int>();

            if (asks.Count != AskId.Length)
            {
                return(View());
            }

            // Максимально возможный результат
            var maxResult = 0;

            foreach (var ask in asks)
            {
                var maxImpact = int.MinValue;
                foreach (var a in answers.Where(a => a.AskId == ask.Id && a.Impact > maxImpact))
                {
                    maxImpact = a.Impact;
                }
                maxResult += maxImpact;
            }

            // Результат пользователя
            foreach (var ask in asks)
            {
                int j;
                for (j = 0; j < AskId.Length && AskId[j] != ask.Id; j++)
                {
                    ;
                }
                var answ = answers.First(i => i.Id == AnswerId[j]);
                userAnswers[ask.Id] = answ.Impact;
            }
            var result = userAnswers.Values.Sum();

            // Отображение описания результата
            var resultText     = "";
            var descriptions   = context.Descriptions.Where(i => i.TestId == test.Id);
            var maxDescrImpact = int.MinValue;

            foreach (var d in descriptions)
            {
                if (d.MinValue <= maxDescrImpact || result <= d.MinValue)
                {
                    continue;
                }
                maxDescrImpact = d.MinValue;
                resultText     = d.Text;
            }

            ViewData["error"]  = false;
            ViewData["rText"]  = resultText;
            ViewData["res"]    = result;
            ViewData["maxres"] = maxResult;

            if (test.SaveResults <= 0)
            {
                return(View());
            }

            var record = new Result {
                TestId = test.Id, UserId = userData.Id, Value = result
            };

            context.Results.Add(record);
            context.SaveChanges();

            return(View());
        }