public async Task <Badge> ReplaceBadgeFileAsync(Badge badge,
                                                        byte[] imageFile,
                                                        string uploadFilename)
        {
            var existingBadge = await _badgeRepository.GetByIdAsync(badge.Id);

            if (File.Exists(existingBadge.Filename))
            {
                File.Delete(existingBadge.Filename);
            }

            var imageType = ImageType.Png;

            if (!string.IsNullOrEmpty(uploadFilename))
            {
                var uploadExtension = Path
                                      .GetExtension(uploadFilename)
                                      .ToLowerInvariant();

                if (uploadExtension.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
                    uploadExtension.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase))
                {
                    imageType = ImageType.Jpg;
                }
            }

            badge.Filename = await WriteBadgeFileAsync(existingBadge, imageFile, imageType);

            return(await _badgeRepository.UpdateSaveAsync(GetClaimId(ClaimType.UserId),
                                                          badge));
        }
Exemple #2
0
        public async Task <Badge> ReplaceBadgeFileAsync(Badge badge, byte[] imageFile)
        {
            var existingBadge = await _badgeRepository.GetByIdAsync(badge.Id);

            if (System.IO.File.Exists(existingBadge.Filename))
            {
                System.IO.File.Delete(existingBadge.Filename);
            }
            badge.Filename = WriteBadgeFile(existingBadge, imageFile);
            return(await _badgeRepository.UpdateSaveAsync(GetClaimId(ClaimType.UserId),
                                                          badge));
        }
Exemple #3
0
        private async Task JoinedProgramNotificationBadge(User registeredUser)
        {
            var program = await _programRepository.GetByIdAsync(registeredUser.ProgramId);

            var site = await _siteRepository.GetByIdAsync(registeredUser.SiteId);

            var notification = new Notification
            {
                PointsEarned = 0,
                Text         = $"<span class=\"fa fa-thumbs-o-up\"></span> You've successfully joined <strong>{site.Name}</strong>!",
                UserId       = registeredUser.Id,
                IsJoining    = true
            };

            if (program.JoinBadgeId != null)
            {
                var badge = await _badgeRepository.GetByIdAsync((int)program.JoinBadgeId);

                await _badgeRepository.AddUserBadge(registeredUser.Id, badge.Id);

                await _userLogRepository.AddAsync(registeredUser.Id, new UserLog
                {
                    UserId       = registeredUser.Id,
                    PointsEarned = 0,
                    IsDeleted    = false,
                    BadgeId      = badge.Id,
                    Description  = $"Joined {site.Name}!"
                });

                notification.BadgeId       = badge.Id;
                notification.BadgeFilename = badge.Filename;
            }
            await _notificationRepository.AddSaveAsync(registeredUser.Id, notification);
        }
        public async Task SubmitQuestionnaire(int questionnaireId, int userId, int?userAge,
                                              IList <Question> questions)
        {
            var requiredQuestionnaires = await _requiredQuestionnaireRepository.
                                         GetForUser(GetCurrentSiteId(), userId, userAge);

            if (!requiredQuestionnaires.Contains(questionnaireId))
            {
                _logger.LogError($"User {userId} is not eligible to answer questionnaire {questionnaireId}.");
                throw new GraException("Not eligible to answer that questionnaire.");
            }

            var questionnaire = await _questionnaireRepository.GetByIdAsync(questionnaireId, true);

            var questionnaireQuestions = questionnaire.Questions.Where(_ => _.Answers.Count > 0);

            if (questions.Select(_ => _.Id).Except(questionnaireQuestions.Select(_ => _.Id)).Any() ||
                questionnaireQuestions.Count() != questions.Count)
            {
                _logger.LogError($"User {userId} submitted invalid questions for questionnaire {questionnaireId}.");
                throw new GraException("Invalid questions answered.");
            }

            foreach (var question in questionnaireQuestions)
            {
                if (!question.Answers.Select(_ => _.Id).Contains(questions
                                                                 .Where(_ => _.Id == question.Id)
                                                                 .Select(_ => _.ParticipantAnswer)
                                                                 .SingleOrDefault()))
                {
                    _logger.LogError($"User {userId} submitted invalid answers for question {question.Id}.");
                    throw new GraException("Invalid answer selected.");
                }
            }

            await _requiredQuestionnaireRepository.SubmitQuestionnaire(questionnaireId, userId,
                                                                       questions);

            if (questionnaire.BadgeId.HasValue)
            {
                await QuestionnaireNotificationBadge(questionnaire, userId);

                var badge = await _badgeRepository.GetByIdAsync(questionnaire.BadgeId.Value);

                await _badgeRepository.AddUserBadge(userId, questionnaire.BadgeId.Value);
            }
        }
Exemple #5
0
        private async Task AddBadgeFilename(Challenge challenge)
        {
            if (challenge.BadgeId != null)
            {
                var badge = await _badgeRepository.GetByIdAsync((int)challenge.BadgeId);

                if (badge != null)
                {
                    challenge.BadgeFilename = badge.Filename;
                }
            }
        }
Exemple #6
0
        private async Task <Badge> AwardBadgeAsync(int userId, int?badgeId)
        {
            Badge badge = null;

            if (badgeId != null)
            {
                badge = await _badgeRepository.GetByIdAsync((int)badgeId);

                await _badgeRepository.AddUserBadge(userId, (int)badgeId);
            }
            return(badge);
        }
 public async Task <Badge> GetByIdAsync(int badgeId)
 {
     return(await _badgeRepository.GetByIdAsync(badgeId));
 }