예제 #1
0
        public DevIssue CreateNewIssue(Citizen citizen, CreateIssueArgs args)
        {
            var issue = new DevIssue()
            {
                Content            = args.Content,
                Day                = GameHelper.CurrentDay,
                Name               = args.Name,
                VisibilityOptionID = (int)VisibilityOptionEnum.Author,
                Time               = DateTime.Now,
                CreatedByID        = citizen.ID
            };

            foreach (var file in args.UploadedFiles)
            {
                if (file == null)
                {
                    continue;
                }
                var extension   = Path.GetExtension(file.FileName).Replace(".", "");
                var newFilename = GenerateFilenameForNewUpload(extension);
                var path        = GetPathToUploadedFile(newFilename);
                Directory.CreateDirectory(Path.GetDirectoryName(path));
                file.SaveAs(path);
                issue.DevIssueUploadedFiles.Add(new DevIssueUploadedFile()
                {
                    Filename         = newFilename,
                    OriginalFilename = file.FileName
                });
            }

            devIssueRepository.Add(issue);
            devIssueRepository.SaveChanges();

            return(issue);
        }
예제 #2
0
        public void Unvote(DevIssue issue, Citizen citizen)
        {
            var vote = issue.DevIssueVotes.First(v => v.CitizenID == citizen.ID);

            devIssueRepository.RemoveSpecific(vote);
            devIssueRepository.SaveChanges();
        }
예제 #3
0
        public void SetLabels(DevIssue issue, params DevIssueLabelTypeEnum[] labelTypes)
        {
            var labels = devIssueRepository.GetLabels(labelTypes);

            issue.DevIssueLabelTypes.Clear();
            issue.DevIssueLabelTypes = labels;
            ConditionalSaveChanges(devIssueRepository);
        }
예제 #4
0
 public static MvcHtmlString Create(DevIssue issue, string @class = null)
 {
     return(LinkCreator.Create(
                name: issue.Name,
                action: "ViewIssue",
                controller: "DevIssue",
                routeValues: new { issueID = issue.ID }));
 }
예제 #5
0
        public MethodResult CanRemoveIssue(DevIssue issue, Citizen citizen)
        {
            if (citizen.HaveRightsOfAtLeast(PlayerTypeEnum.Admin) == false)
            {
                return(new MethodResult("You cannot do that!"));
            }

            return(MethodResult.Success);
        }
예제 #6
0
        public DevIssueViewModel(DevIssue issue)
        {
            ID      = issue.ID;
            Name    = issue.Name;
            Content = issue.Content;

            PlayerType       = SessionHelper.LoggedCitizen.GetPlayerType();
            Day              = issue.Day;
            Time             = issue.Time.ToShortTimeString();
            Avatar           = new SmallEntityAvatarViewModel(issue.Citizen.Entity);
            Avatar.Classname = "avatar";

            Files = issue.DevIssueUploadedFiles.ToList()
                    .Select(f => new DevIssueUploadedFileViewModel(f)).ToList();



            var actualLabels = issue.DevIssueLabelTypes.ToList();


            foreach (var label in Enum.GetValues(typeof(DevIssueLabelTypeEnum)).Cast <DevIssueLabelTypeEnum>())
            {
                var item = new SelectListItem()
                {
                    Text     = label.ToString(),
                    Value    = ((int)label).ToString(),
                    Selected = actualLabels.Any(l => l.ID == (int)label)
                };

                LabelTypes.Add(item);
            }

            foreach (var visibility in Enum.GetValues(typeof(VisibilityOptionEnum)).Cast <VisibilityOptionEnum>())
            {
                var item = new SelectListItem()
                {
                    Text     = visibility.ToString(),
                    Value    = ((int)visibility).ToString(),
                    Selected = issue.VisibilityOptionID == (int)visibility
                };

                VisiblityOptions.Add(item);
            }

            foreach (var label in actualLabels)
            {
                labelIDs.Add(label.ID);
                Labels.Add(new DevIssueLabelViewModel(label));
            }

            Score     = ScoreHelper.ToString(issue.DevIssueVotes.Sum(v => v.Score));
            CanVote   = issue.DevIssueVotes.Any(v => v.CitizenID == SessionHelper.LoggedCitizen.ID) == false;
            CanUnvote = !CanVote;

            loadComments(issue);
        }
예제 #7
0
 public void Vote(DevIssue issue, Citizen citizen, int score)
 {
     issue.DevIssueVotes.Add(new DevIssueVote()
     {
         CitizenID  = citizen.ID,
         DevIssueID = issue.ID,
         Score      = score
     });
     devIssueRepository.SaveChanges();
 }
예제 #8
0
        public MethodResult CanUnvote(DevIssue issue, Citizen citizen)
        {
            var result = CanSeeIssue(issue, citizen);

            if (result.IsError)
            {
                return(result);
            }

            if (issue.DevIssueVotes.Any(v => v.CitizenID == citizen.ID) == false)
            {
                return(new MethodResult("You did not voted!"));
            }

            return(MethodResult.Success);
        }
예제 #9
0
        public void RemoveIssue(DevIssue issue)
        {
            var files = issue.DevIssueUploadedFiles.ToList();

            foreach (var file in files)
            {
                var path = GetPathToUploadedFile(file);
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
                devIssueRepository.RemoveSpecific(file);
            }

            devIssueRepository.Remove(issue);
            ConditionalSaveChanges(devIssueRepository);
        }
예제 #10
0
        public MethodResult CanSeeIssue(DevIssue issue, Citizen citizen)
        {
            if (issue == null)
            {
                return(new MethodResult("Issue does not exist!"));
            }
            if (citizen.HaveRightsOfAtLeast(issue.GetVisibilityOption().GetMinimumPlayerTypeToView()) == false)
            {
                return(new MethodResult("You cannot do that!"));
            }

            if (citizen.GetPlayerType() == PlayerTypeEnum.Player && issue.GetVisibilityOption() == VisibilityOptionEnum.Author && citizen.ID != issue.CreatedByID)
            {
                return(new MethodResult("You cannot do that!"));
            }

            return(MethodResult.Success);
        }
예제 #11
0
        public MethodResult CanVote(DevIssue issue, Citizen citizen, int score)
        {
            var result = CanSeeIssue(issue, citizen);

            if (result.IsError)
            {
                return(result);
            }

            if (citizen.GetPlayerType() == PlayerTypeEnum.Player && score != 1)
            {
                return(new MethodResult("You cannot do that!"));
            }

            if (issue.DevIssueVotes.Any(v => v.CitizenID == citizen.ID))
            {
                return(new MethodResult("You already voted!"));
            }

            return(MethodResult.Success);
        }
예제 #12
0
        public void WriteComment(DevIssue issue, Citizen citizen, string content, VisibilityOptionEnum visibility)
        {
            var comment = new DevIssueComment()
            {
                CitizenID          = citizen.ID,
                Day                = GameHelper.CurrentDay,
                Time               = DateTime.Now,
                VisibilityOptionID = (int)visibility,
                DevIssueID         = issue.ID,
                Content            = content
            };

            var entityLink = EntityLinkCreator.Create(citizen.Entity);
            var issueLink  = DevIssueLinkCreator.Create(issue);
            var msg        = $"{entityLink} commented your issue - {issueLink}";

            warningService.AddWarning(issue.CreatedByID, msg);

            devIssueCommentRepository.Add(comment);
            devIssueCommentRepository.SaveChanges();
        }
예제 #13
0
        private void loadComments(DevIssue issue)
        {
            VisibilityOptionEnum playerVisiblity = VisibilityOptionEnum.Everyone;
            var citizen = SessionHelper.LoggedCitizen;

            if (citizen.ID == issue.CreatedByID)
            {
                playerVisiblity = VisibilityOptionEnum.Author;
            }
            if (citizen.GetPlayerType() == PlayerTypeEnum.Moderator)
            {
                playerVisiblity = VisibilityOptionEnum.Moderators;
            }
            if (citizen.GetPlayerType() >= PlayerTypeEnum.Admin)
            {
                playerVisiblity = VisibilityOptionEnum.Admins;
            }

            Comments = issue.DevIssueComments.Where(c => c.VisibilityOptionID <= (int)playerVisiblity).ToList()
                       .Select(c => new DevIssueCommentViewModel(c)).ToList();
        }
예제 #14
0
 public static VisibilityOptionEnum GetVisibilityOption(this DevIssue issue)
 {
     return((VisibilityOptionEnum)issue.VisibilityOptionID);
 }
예제 #15
0
 public MethodResult CanWriteComment(DevIssue issue, Citizen citizen)
 {
     return(CanSeeIssue(issue, citizen));
 }
예제 #16
0
 public void SetVisibility(DevIssue issue, VisibilityOptionEnum option)
 {
     issue.VisibilityOptionID = (int)option;
     ConditionalSaveChanges(devIssueRepository);
 }