示例#1
0
        protected ActionResult GetIndex(long userId,
                                        UserLanguages userLanguages,
                                        long groupId,
                                        Action <TrainerModel> modelSetter)
        {
            if (WebSettingsConfig.Instance.IsSectionForbidden(SectionId))
            {
                return(RedirectToAction("Index", RouteConfig.MAIN_CONTROLLER_NAME));
            }

            if (IdValidator.IsInvalid(userId) || UserLanguages.IsInvalid(userLanguages) ||
                IdValidator.IsInvalid(groupId))
            {
                return(RedirectToParentPage());
            }

            IUserRepetitionIntervalQuery userRepetitionIntervalQuery = CreateUserRepetitionIntervalQuery(userId, groupId);

            var          trainerHelper = new TrainerHelper(userRepetitionIntervalQuery, userLanguages);
            TrainerModel model         = trainerHelper.GetTrainerModel(Request);

            modelSetter(model);
            if (EnumerableValidator.IsNullOrEmpty(model.Items))
            {
                return(RedirectToParentPage());
            }

            ViewData[OurHtmlHelper.ViewDataFlags.SKIP_POPUP_PANEL] = true;
            return(View("../Trainer/Index", model));
        }
示例#2
0
        public FileResult GetVideo(string urlPart)
        {
            if (WebSettingsConfig.Instance.IsSectionForbidden(SectionId.TVSeries))
            {
                return(null);
            }
            TVSeriesWatch seriesWatch = GetSeriesWatch(urlPart);

            if (seriesWatch == null)
            {
                return(null);
            }

            string fullFileName = WebSettingsConfig.Instance.GetDataFileName(SERIES_FOLDER, seriesWatch.GetPathToFiles(),
                                                                             seriesWatch.VideoFileName);

            byte[] fileContents = ReadFile(fullFileName);
            if (EnumerableValidator.IsNullOrEmpty(fileContents))
            {
                return(null);
            }

            TVSeriesInfo seriesInfo = seriesWatch.GetSeriesInfo();

            return(File(fileContents, "video/mp4", seriesInfo.OrigTitle + "_" + seriesWatch.VideoFileName));
        }
示例#3
0
        /// <summary>
        /// Устанавливает отложенные настройки
        /// </summary>
        /// <param name="args">функции по отложенным вычислениям</param>
        public void SetDeferredSettings(params Action <WebSettingsConfig>[] args)
        {
            const int MAX_ATTEMPTS = 3;

            _deferredActions = args;
            if (EnumerableValidator.IsNullOrEmpty(_deferredActions))
            {
                return;
            }

            Task.Run(() => {
                foreach (var action in _deferredActions)
                {
                    for (int i = 0; i < MAX_ATTEMPTS; i++)
                    {
                        try {
                            action(this);
                            break;
                        } catch (ThreadAbortException e) {} catch (Exception e) {
                            if (i - 1 == MAX_ATTEMPTS)
                            {
                                LoggerWrapper.RemoteMessage(LoggingSource.Mail, LoggingType.Error,
                                                            "WebSettingsConfig.SetDeferredSettings вылетело исключение {0}. Сделали {1} попыток!",
                                                            e, MAX_ATTEMPTS);
                            }
                        }
                    }
                }
            });
        }
示例#4
0
        public JsonResult AnswerInterview(List <long> answersIds)
        {
            List <long> validAnswersIds = (answersIds ?? new List <long>(0)).Where(IdValidator.IsValid).ToList();

            if (EnumerableValidator.IsNullOrEmpty(validAnswersIds))
            {
                return(JsonResultHelper.Error());
            }

            IInterviewsQuery interviewsQuery = new InterviewsQuery();
            bool             isSuccess       = interviewsQuery.IncrementCountAnswers(validAnswersIds);

            return(JsonResultHelper.Success(isSuccess));
        }
示例#5
0
        public List <VideoForUser> GetVisibleWithText(VideoType type, int count = 0)
        {
            var result = GetVisible(type, count);

            if (EnumerableValidator.IsNullOrEmpty(result))
            {
                return(result);
            }
            Adapter.ActionByContext(c => {
                IQueryable <long> videoIdsWithText = c.VideoSentence.Select(e => e.VideoId).Distinct();
                var fast = new HashSet <long>(videoIdsWithText);
                result   = result.Where(e => fast.Contains(e.Id)).ToList();
            });
            return(result);
        }
示例#6
0
        public JsonResult AddMany(long userId, List <UserKnowledgeItem> knowledgeItems)
        {
            IUserKnowledgeQuery userKnowledgeQuery = CreateUserKnowledgeQuery(userId);

            if (EnumerableValidator.IsNullOrEmpty(knowledgeItems) || knowledgeItems.Any(userKnowledgeQuery.IsInvalid))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "KnowledgeController.AddMany пользователь с идентификатором {0}, передал некорректные данные",
                    userId);
                return(JsonResultHelper.Error(INVALID_DATA));
            }
            List <KnowledgeAddStatus> statuses      = userKnowledgeQuery.Add(knowledgeItems, MAX_COUNT_ITEMS_PER_DAY);
            KnowledgeAddStatus        summaryStatus = EnumerableValidator.IsCountEquals(statuses, knowledgeItems)
                                                   ? GetSummaryStatus(statuses)
                                                   : KnowledgeAddStatus.Error;

            if (summaryStatus == KnowledgeAddStatus.Ok)
            {
                return(JsonResultHelper.Success(true));
            }

            if (summaryStatus == KnowledgeAddStatus.ReachMaxLimit)
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "KnowledgeController.AddMany пользователь с идентификатором {0}, достиг лимит данных за сегодня",
                    userId);
                return(JsonResultHelper.Error(
                           string.Format(
                               "Сегодня вы уже добавили максимальное количество данных на обучение. В день вы можете добавлять не более {0} порций знаний. Завтра Вы вновь сможете добавлять новые элементы, а пока, рекомендуем изучить сегодняшний материал.",
                               MAX_COUNT_ITEMS_PER_DAY)));
            }

            if (summaryStatus == KnowledgeAddStatus.AlreadyExists)
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "KnowledgeController.AddMany пользователь с идентификатором {0}, уже добавлял данные",
                    userId);
                return(JsonResultHelper.Error("Ранее вы уже добавляли эти данные на обучение."));
            }

            LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                "KnowledgeController.AddMany. Для пользователя с идентификатором {0} не удалось добавить данные, какая-то ошибка!",
                userId);
            return
                (JsonResultHelper.Error("Не удалось добавить порцию знаний! Попробуйте позже."));
        }
        public ActionResult Index(long userId, UserLanguages userLanguages)
        {
            if (WebSettingsConfig.Instance.IsSectionForbidden(SectionId.MyKnowledge))
            {
                return(RedirectToAction("Index", RouteConfig.MAIN_CONTROLLER_NAME));
            }

            if (IsInvalid(userId, userLanguages))
            {
                return(RedirectToKnowledgeWall());
            }

            IUserRepetitionIntervalQuery userRepetitionIntervalQuery = CreateUserRepetitionIntervalQuery(userId,
                                                                                                         RepetitionType.
                                                                                                         All);

            var          trainerHelper = new TrainerHelper(userRepetitionIntervalQuery, userLanguages);
            TrainerModel model         = trainerHelper.GetTrainerModel(Request);

            var pageRequiredData = new PageRequiredData(SectionId.MyKnowledge);

            pageRequiredData.Title       = WebSettingsConfig.Instance.GetTemplateText(pageRequiredData.SectionId, PageId.Cards, TemplateId.Title, PageName);
            pageRequiredData.Keywords    = WebSettingsConfig.Instance.GetTemplateText(pageRequiredData.SectionId, PageId.Cards, TemplateId.Keywords, PageName);
            pageRequiredData.Description = WebSettingsConfig.Instance.GetTemplateText(pageRequiredData.SectionId, PageId.Cards, TemplateId.Description, PageName);
            model.PageRequiredData       = pageRequiredData;
            model.SetMarkUrl             = Url.Action("SetMark", ControllerName, null, Request.Url.Scheme);
            model.BreadcrumbsItems       = new List <BreadcrumbItem> {
                new BreadcrumbItem
                {
                    Title = "Стена знаний", Action = "Index", ControllerName = RouteConfig.USER_KNOWLEDGE_CONTROLLER
                },
                new BreadcrumbItem {
                    IsActive = true, Title = PageName
                }
            };
            if (EnumerableValidator.IsNullOrEmpty(model.Items))
            {
                return(RedirectToKnowledgeWall());
            }

            ViewData[OurHtmlHelper.ViewDataFlags.SKIP_POPUP_PANEL] = true;
            return(View("../Trainer/Index", model));
        }
示例#8
0
        private bool IsFileValid(out string[] lines)
        {
            if (!File.Exists(_fileName))
            {
                Console.WriteLine("Не найден файл {0}", _fileName);
                lines = null;
                return(false);
            }

            lines = File.ReadAllLines(_fileName);
            if (EnumerableValidator.IsNullOrEmpty(lines))
            {
                Console.WriteLine("Содержимое файла {0} пустое", _fileName);
                return(false);
            }

            if (lines.Length < 2)
            {
                Console.WriteLine("Файл {0} должен содержать как минимум 2 строки", _fileName);
                return(false);
            }
            return(true);
        }
示例#9
0
        public ActionResult Download(long userId, DocumentType type)
        {
            if (IsInvalid(userId))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "KnowledgeGeneratorController.Download передан некорректный идентификатор пользователя: {0}",
                    userId);
                return(RedirectToAction("Index"));
            }
            string userKey        = GetUserKey(userId);
            var    generatedItems =
                ControllerContext.Controller.TempData[userKey] as
                Dictionary <KnowledgeDataType, List <GeneratedKnowledgeItem> >;

            if (EnumerableValidator.IsNullOrEmpty(generatedItems))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "KnowledgeGeneratorController.Download для пользователя с идентификатором {0} не удалось найти сгенерированные данные во временных данных",
                    userId);
                return(RedirectToAction("Index"));
            }

            //записать данные опять, т.к. они удаляются после считывания
            WriteItemsToTempData(userKey, generatedItems);

            string header = WebSettingsConfig.Instance.GetTemplateText(SectionId.KnowledgeGenerator, TemplateId.Header);

            var downloader = new GeneratedKnowledgeDownloader(WebSettingsConfig.Instance.DomainWithProtocol,
                                                              CommonConstants.GetFontPath(Server))
            {
                Header = header
            };
            var documentGenerator = downloader.Download(type, header, generatedItems);

            return(File(documentGenerator.Generate(), documentGenerator.ContentType, documentGenerator.FileName));
        }