Exemplo n.º 1
0
 public IdeaController(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository, IFeatureRepository features)
 {
     _ideas = ideas;
     _users = users;
     _settings = settings;
     _features = features;
 }
Exemplo n.º 2
0
 public IdeaController(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository, IFeatureRepository features)
 {
     _ideas    = ideas;
     _users    = users;
     _settings = settings;
     _features = features;
 }
Exemplo n.º 3
0
 public IdeaService(IIdeaRepository ideaRepository,
                    IInviteRepository inviteRepository,
                    IChallengeRepository challengeRepository)
 {
     _ideaRepository      = ideaRepository;
     _inviteRepository    = inviteRepository;
     _challengeRepository = challengeRepository;
 }
Exemplo n.º 4
0
 public IdeationManager(IIdeaRepository ideaRepository, IIdeationRepository ideationRepository, ICommentRepository commentRepository, IFieldRepository fieldRepository, IProjectManager projectManager)
 {
     _ideaRepository     = ideaRepository;
     _ideationRepository = ideationRepository;
     _commentRepository  = commentRepository;
     _fieldRepository    = fieldRepository;
     _projectManager     = projectManager;
 }
Exemplo n.º 5
0
 public HomeModule(IIdeaRepository ideas, ISettingsRepository settings)
 {
     _ideas = ideas;
     _settings = settings;
     Get["/"] = _ => ListIdeas(_ideas.GetAll(), SelectedTab.Popular);
     Get["/top"] = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Votes.Count), SelectedTab.Hot);
     Get["/new"] = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Time), SelectedTab.New);
 }
Exemplo n.º 6
0
 public AdminController(IdeastrikeContext dbContext, ISettingsRepository settings, IUserRepository users, IIdeaRepository ideas, IActivityRepository activities)
 {
     _dbContext  = dbContext;
     _settings   = settings;
     _users      = users;
     _ideas      = ideas;
     _activities = activities;
 }
Exemplo n.º 7
0
 public AdminController(IdeastrikeContext dbContext, ISettingsRepository settings, IUserRepository users, IIdeaRepository ideas, IActivityRepository activities)
 {
     _dbContext = dbContext;
     _settings = settings;
     _users = users;
     _ideas = ideas;
     _activities = activities;
 }
Exemplo n.º 8
0
                public IdeaService(IIdeaRepository repository)  
                
        {
             
                            _repository  =  repository;  

                        
        }
Exemplo n.º 9
0
 public HomeModule(IIdeaRepository ideas, ISettingsRepository settings)
 {
     Get["/"] = _ => View["Home/Index", new
                                            {
                                                Ideas= ideas.GetAll(),
                                                Title = settings.Title,
                                                WelcomeMessage = MarkdownHelper.Markdown(settings.WelcomeMessage)
                                            }];
 }
Exemplo n.º 10
0
 public HomeModule(IIdeaRepository ideas, ISettingsRepository settings)
 {
     Get["/"] = _ => View["Home/Index", new
                          {
                              Ideas = ideas.GetAll(),
                              Title = settings.Title,
                              WelcomeMessage = MarkdownHelper.Markdown(settings.WelcomeMessage)
                          }];
 }
Exemplo n.º 11
0
 public IdeaService(
     IIdeaRepository ideaRepository,
     IIdeaGranteeRepository ideaGranteeRepository,
     IIdeaOccasionRepository ideaOccasionRepository)
 {
     _ideaRepository         = ideaRepository;
     _ideaGranteeRepository  = ideaGranteeRepository;
     _ideaOccasionRepository = ideaOccasionRepository;
 }
Exemplo n.º 12
0
        public ApiModule(IdeastrikeContext db, IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings)
            : base("/api")
        {
            Get["/ideas"] = _ => {
                return Response.AsJson(db.Ideas.Select(idea =>
                    new {
                        id = idea.Id,
                        title = idea.Title,
                        description = idea.Description,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), idea.Time),
                        author = new { id = idea.Author.Id, username = idea.Author.UserName },
                        vote_count = idea.Votes.Sum(vote => (int?)vote.Value) ?? 0,
                        status = idea.Status
                    }));
            };

            Get["/ideas/{id}"] = _ => {
                int id = _.id;
                var o = db.Ideas.Where(idea => idea.Id == id).Select(idea =>
                    new {
                        id = idea.Id,
                        title = idea.Title,
                        description = idea.Description,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), idea.Time),
                        author = new { id = idea.Author.Id, username = idea.Author.UserName },
                        vote_count = idea.Votes.Sum(vote => (int?)vote.Value) ?? 0,
                        features = idea.Features.Select(feature => new { id = feature.Id, text = feature.Text, time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), feature.Time) }),
                        votes = idea.Votes.Select(vote => new { user = new { id = vote.UserId, username = vote.User.UserName }, value = vote.Value })
                    }).FirstOrDefault();
                if (o == null)
                    return HttpStatusCode.NotFound;
                return Response.AsJson(o);
            };

            Get["/ideas/{id}/features"] = _ => {
                int id = _.id;
                if (!db.Ideas.Any(idea => idea.Id == id))
                    return HttpStatusCode.NotFound;
                return Response.AsJson(db.Features.Where(d => d.Idea.Id == id).Select(feature =>
                    new {
                        id = feature.Id,
                        text = feature.Text,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), feature.Time),
                    }));
            };

            Get["/ideas/{id}/votes"] = _ => {
                int id = _.id;
                if (!db.Ideas.Any(idea => idea.Id == id))
                    return HttpStatusCode.NotFound;
                return Response.AsJson(db.Votes.Where(d => d.IdeaId == id).Select(vote =>
                    new {
                        value = vote.Value,
                        user = new { id = vote.UserId, username = vote.User.UserName }
                    }));
            };
        }
Exemplo n.º 13
0
        public IdeaModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository)
            : base("/idea")
        {
            _ideas = ideas;
            _settings = settings;
            _users = users;

            Get["/{id}"] = parameters =>
            {
                int id = parameters.id;
                var idea = _ideas.Get(id);
                if (idea == null)
                    return View["404"];

                User user = Context.GetCurrentUser(_users);
                if (user != null)
                {
                    if (idea.Votes.Any(u => u.UserId == user.Id))
                        idea.UserHasVoted = true;

                }

                var viewModel = new IdeaViewModel(idea);
                var model = Context.Model(string.Format("{0} - {1}", idea.Title, _settings.Title));
                model.Idea = viewModel;
                return View["Idea/Index", model];
            };

            Get["/image/{id}"] = parameters =>
            {
                var id = (string)parameters.id;
                if (id.Contains("."))
                {
                    id = id.Substring(0, id.IndexOf(".")); //string .jpg in case it was send in
                }
                var image = imageRepository.Get(int.Parse(id));
                // TODO: format should be adaptive based on backing source?
                return Response.FromStream(new MemoryStream(image.ImageBits), "image/jpeg");
            };

            Get[@"/imagethumb/{id}/{width}"] = parameters =>
            {
                var image = (Image)imageRepository.Get(parameters.id);
                using (var memoryStream = new MemoryStream(image.ImageBits))
                {
                    var drawingImage = System.Drawing.Image.FromStream(memoryStream);
                    var thumb = drawingImage.ToThumbnail((int)parameters.width);
                    using (var thumbnailStream = new MemoryStream())
                    {
                        // TODO: format should be adaptive based on backing source?
                        thumb.Save(thumbnailStream, ImageFormat.Jpeg);
                        return Response.FromStream(new MemoryStream(thumbnailStream.GetBuffer()), "image/jpeg"); //massive WTF? If I just use thumnailStream, it doesn't work...
                    }
                }
            };
        }
Exemplo n.º 14
0
 public ManageController(
     IMapper mapper,
     IUserRepository userRepo,
     IRepo repo,
     UserManager <AppUser> userManager,
     IIdeaRepository ideaRepo)
 {
     _mapper      = mapper;
     _userRepo    = userRepo;
     _repo        = repo;
     _userManager = userManager;
     _ideaRepo    = ideaRepo;
 }
Exemplo n.º 15
0
 public IdeaController(
     IIdeaRepository ideaRepo,
     IMapper mapper,
     IUserRepository userRepo,
     IHostingEnvironment host,
     IRepo repo)
 {
     _ideaRepo = ideaRepo;
     _mapper   = mapper;
     _userRepo = userRepo;
     _host     = host;
     _repo     = repo;
 }
Exemplo n.º 16
0
 public HomeModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings)
 {
     _ideas        = ideas;
     _users        = users;
     _settings     = settings;
     Get["/"]      = _ => ListIdeas(_ideas.GetAll(), SelectedTab.Popular, "");
     Get["/top"]   = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Votes.Sum(s => s.Value)), SelectedTab.Hot, "");
     Get["/new"]   = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Time), SelectedTab.New, "");
     Get["/login"] = _ =>
     {
         return(ListIdeas(_ideas.GetAll(), SelectedTab.Popular,
                          Strings.HomeModule_LoginRequired));
     };
 }
Exemplo n.º 17
0
 public HomeModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings)
 {
     _ideas        = ideas;
     _users        = users;
     _settings     = settings;
     Get["/"]      = _ => ListIdeas(_ideas.GetAll(), SelectedTab.Popular, "");
     Get["/top"]   = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Votes.Count), SelectedTab.Hot, "");
     Get["/new"]   = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Time), SelectedTab.New, "");
     Get["/login"] = _ =>
     {
         return(ListIdeas(_ideas.GetAll(), SelectedTab.Popular,
                          "You need to login to do that"));
     };
 }
Exemplo n.º 18
0
 public HomeModule(IIdeaRepository ideas, IUserRepository users, Settings settings)
 {
     _ideas = ideas;
     _users = users;
     _settings = settings;
     Get["/"] = _ => ListIdeas(_ideas.GetAll(), SelectedTab.Popular, "");
     Get["/top"] = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Votes.Sum(s => s.Value)), SelectedTab.Hot, "");
     Get["/new"] = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Time), SelectedTab.New, "");
     Get["/login"] = _ =>
                         {
                             return ListIdeas(_ideas.GetAll(), SelectedTab.Popular,
                                              Strings.HomeModule_LoginRequired);
                         };
 }
Exemplo n.º 19
0
 public HomeModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings)
 {
     _ideas = ideas;
     _users = users;
     _settings = settings;
     Get["/"] = _ => ListIdeas(_ideas.GetAll(), SelectedTab.Popular, "");
     Get["/top"] = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Votes.Count), SelectedTab.Hot, "");
     Get["/new"] = _ => ListIdeas(_ideas.GetAll().OrderByDescending(i => i.Time), SelectedTab.New, "");
     Get["/login"] = _ =>
                         {
                             return ListIdeas(_ideas.GetAll(), SelectedTab.Popular,
                                              "You need to login to do that");
                         };
 }
Exemplo n.º 20
0
        public void Setup()
        {
            repository = MockRepository.GenerateStub<IIdeaRepository>();
            controller = new SiteIdeasController(repository);
            httpContextMock = new HttpContextMock();

            controller.ControllerContext = new ControllerContext(httpContextMock.Context, new RouteData(), controller);

            resultIdea = new Idea() { Id = 1, Title = "test" };

            httpContextMock.Request.Stub(x => x.HttpMethod).Return("GET");
            resultIdea = new Idea() { Id = 1, Title = "test" };
            ideaVM = new IdeaInList(resultIdea);
            repository.Stub(x => x.GetById(1)).Return(resultIdea);
        }
Exemplo n.º 21
0
        public ApiSecuredModule(IIdeaRepository ideas, Settings settings) : base("/api")
        {
            _settings = settings;

            this.Before.AddItemToEndOfPipeline(ctx => {
                if (ctx.CurrentUser == null)
                {
                    return(HttpStatusCode.Unauthorized);
                }
                return(null);
            });

            Post["/ideas"] = _ => {
                var model = this.Bind <EditIdeaModel>();

                var idea = new Idea {
                    Title       = model.title,
                    Description = model.description,
                    Time        = DateTime.UtcNow,
                    Author      = (User)Context.CurrentUser,
                    Status      = _settings.IdeaStatusDefault
                };
                ideas.Add(idea);

                return(HttpStatusCode.Created);  // TODO: Should return either the generated id or the json body
            };

            Put["/ideas/{id}"] = _ => {
                var model = this.Bind <EditIdeaModel>();
                int id    = _.id;
                var idea  = ideas.Get(id);
                if (idea == null)
                {
                    return(HttpStatusCode.NotFound);
                }
                if (model.title != null)
                {
                    idea.Title = model.title;
                }
                if (model.description != null)
                {
                    idea.Description = model.description;
                }
                ideas.Edit(idea);

                return(HttpStatusCode.OK);
            };
        }
Exemplo n.º 22
0
        public IdeaModule(IIdeaRepository ideas)
            : base("/idea")
        {
            Get["/{id}"] = parameters =>
            {
                int  id   = parameters.id;
                Idea idea = ideas.Get(id);
                if (idea == null)
                {
                    return(View["Shared/404"]);
                }

                return(View["Idea/Index", idea]);
            };

            Post["/"] = _ =>
            {
                var i = new Idea
                {
                    Time        = DateTime.UtcNow,
                    Title       = Request.Form.Title,
                    Description = Request.Form.Description,
                };

                ideas.Add(i);

                return(Response.AsRedirect("/idea/" + i.Id));
            };

            Get["/{id}/vote/{userid}"] = parameters =>
            {
                Idea idea = ideas.Get(parameters.id);
                ideas.Vote(idea, parameters.userid, 1);

                return(Response.AsJson(new
                {
                    Status = "OK",
                    NewVotes = idea.Votes.Sum(v => v.Value)
                }));
            };

            Get["/{id}/delete"] = parameters =>
            {
                int id = parameters.id;
                ideas.Delete(id);
                return(string.Format("Deleted Item {0}", id));
            };
        }
Exemplo n.º 23
0
        public IdeaModule(IIdeaRepository ideas)
            : base("/idea")
        {
            Get["/{id}"] = parameters =>
                               {
                                   int id = parameters.id;
                                   Idea idea = ideas.Get(id);
                                   if (idea == null)
                                       return View["Shared/404"];

                                   return View["Idea/Index", idea];

                               };

            Post["/"] = _ =>
            {
                var i = new Idea
                            {
                                Time = DateTime.UtcNow,
                                Title = Request.Form.Title,
                                Description = Request.Form.Description,
                            };

                ideas.Add(i);

                return Response.AsRedirect("/idea/" + i.Id);
            };

            Get["/{id}/vote/{userid}"] = parameters =>
            {
                Idea idea = ideas.Get(parameters.id);
                ideas.Vote(idea, parameters.userid, 1);

                return Response.AsJson(new
                                {
                                    Status = "OK",
                                    NewVotes = idea.Votes.Sum(v => v.Value)
                                });
            };

            Get["/{id}/delete"] = parameters =>
            {
                int id = parameters.id;
                ideas.Delete(id);
                return string.Format("Deleted Item {0}", id);
            };
        }
Exemplo n.º 24
0
        public CommentModule(IIdeaRepository ideas, IActivityRepository activities)
            : base("/idea")
        {
            _ideas      = ideas;
            _activities = activities;

            Post["/{idea}/comment"] = _ =>
            {
                int id      = _.Idea;
                var comment = new Comment
                {
                    Time = DateTime.UtcNow,
                    Text = Request.Form.comment
                };
                _activities.Add(id, comment);

                return(Response.AsRedirect(string.Format("/idea/{0}#{1}", id, comment.Id)));
            };

            /*
             * Get["/{idea}/comment/{id}"] = parameters =>
             * {
             *  using (var db = new IdeastrikeContext())
             *  {
             *      int id = parameters.id;
             *      int idea = parameters.idea;
             *      var comment = db.Comments.FirstOrDefault(i => i.Id == id && i.IdeaId == idea);
             *      return string.Format("Comment Id:{0}", comment.Id);
             *  }
             * };
             *
             * Get["/{idea}/comment/{id}/delete"] = parameters =>
             * {
             *  using (var db = new IdeastrikeContext())
             *  {
             *      int id = parameters.id;
             *      int idea = parameters.idea;
             *
             *      var comment = db.Comments.FirstOrDefault(i => i.Id == id && i.IdeaId == idea);
             *      db.Comments.Remove(comment);
             *      db.SaveChanges();
             *      return string.Format("Deleted Comment {0} for Idea {1}", id, idea);
             *  }
             * };*/
        }
Exemplo n.º 25
0
        public CommentModule(IIdeaRepository ideas, IActivityRepository activities)
            : base("/idea")
        {
            _ideas = ideas;
            _activities = activities;

            Post["/{idea}/comment"] = _ =>
            {
                int id = _.Idea;
                var comment = new Comment
                                {
                                    Time = DateTime.UtcNow,
                                    Text = Request.Form.comment
                                };
                _activities.Add(id, comment);

                return Response.AsRedirect(string.Format("/idea/{0}#{1}", id, comment.Id));
            };

            /*
            Get["/{idea}/comment/{id}"] = parameters =>
            {
                using (var db = new IdeastrikeContext())
                {
                    int id = parameters.id;
                    int idea = parameters.idea;
                    var comment = db.Comments.FirstOrDefault(i => i.Id == id && i.IdeaId == idea);
                    return string.Format("Comment Id:{0}", comment.Id);
                }
            };

            Get["/{idea}/comment/{id}/delete"] = parameters =>
            {
                using (var db = new IdeastrikeContext())
                {
                    int id = parameters.id;
                    int idea = parameters.idea;

                    var comment = db.Comments.FirstOrDefault(i => i.Id == id && i.IdeaId == idea);
                    db.Comments.Remove(comment);
                    db.SaveChanges();
                    return string.Format("Deleted Comment {0} for Idea {1}", id, idea);
                }
            };*/
        }
Exemplo n.º 26
0
        public CommentModule(IIdeaRepository ideas, IActivityRepository activities, IUserRepository users)
            : base("/comment")
        {
            this.RequiresAuthentication();

            _ideas      = ideas;
            _activities = activities;
            _users      = users;

            Post["/{idea}/add"] = parameters =>
            {
                int id = parameters.Idea;

                var user = _users.FindBy(u => u.UserName == Context.CurrentUser.UserName).FirstOrDefault();

                if (user == null)
                {
                    return(Response.AsRedirect(string.Format("/idea/{0}", id)));              //TODO: Problem looking up the user? Return an error
                }
                var text = Request.Form.comment;
                if (string.IsNullOrEmpty(text)) // additional validation required
                {
                    return(Response.AsJson(new { result = "Error" }));
                }

                var comment = new Comment
                {
                    User = user,
                    Time = DateTime.UtcNow,
                    Text = Request.Form.comment
                };

                _activities.Add(id, comment);

                // why not return JSON here and leave it up to client to render inline?
                return(Response.AsRedirect(string.Format("/idea/{0}#{1}", id, comment.Id)));
            };

            // TODO: shouldn't these actually sit under the Comment root
            // TODO: user should be able to edit their own comment
            Post["/{id}/edit"] = parameters => Response.AsJson(new { result = "Error" });

            // TODO: user should be able to remove their own comment
            Post["/{id}/delete"] = parameters => Response.AsJson(new { result = "Error" });
        }
Exemplo n.º 27
0
        public FeatureModule(IIdeaRepository ideas, IFeatureRepository features)
            : base("/idea")
        {
            _ideas    = ideas;
            _features = features;

            Post["/{idea}/feature"] = _ =>
            {
                int id      = _.Idea;
                var feature = new Feature
                {
                    Time = DateTime.UtcNow,
                    Text = Request.Form.feature
                };
                _features.Add(id, feature);

                return(Response.AsRedirect(string.Format("/idea/{0}#{1}", id, feature.Id)));
            };
        }
Exemplo n.º 28
0
        public FeatureModule(IIdeaRepository ideas, IFeatureRepository features)
            : base("/idea")
        {
            _ideas = ideas;
            _features = features;

            Post["/{idea}/feature"] = _ =>
            {
                int id = _.Idea;
                var feature = new Feature
                                {
                                    Time = DateTime.UtcNow,
                                    Text = Request.Form.feature
                                };
                _features.Add(id, feature);

                return Response.AsRedirect(string.Format("/idea/{0}#{1}", id, feature.Id));
            };
        }
Exemplo n.º 29
0
        public ApiSecuredModule(IIdeaRepository ideas, Settings settings)
            : base("/api")
        {
            _settings = settings;

            this.Before.AddItemToEndOfPipeline(ctx => {
                if (ctx.CurrentUser == null)
                    return HttpStatusCode.Unauthorized;
                return null;
            });

            Post["/ideas"] = _ => {
                var model = this.Bind<EditIdeaModel>();

                var idea = new Idea {
                    Title = model.title,
                    Description = model.description,
                    Time = DateTime.UtcNow,
                    Author = (User)Context.CurrentUser,
                    Status = _settings.IdeaStatusDefault
                };
                ideas.Add(idea);

                return HttpStatusCode.Created;  // TODO: Should return either the generated id or the json body
            };

            Put["/ideas/{id}"] = _ => {
                var model = this.Bind<EditIdeaModel>();
                int id = _.id;
                var idea = ideas.Get(id);
                if (idea == null)
                    return HttpStatusCode.NotFound;
                if (model.title != null)
                    idea.Title = model.title;
                if (model.description != null)
                    idea.Description = model.description;
                ideas.Edit(idea);

                return HttpStatusCode.OK;
            };
        }
Exemplo n.º 30
0
        public FeatureModule(IIdeaRepository ideas, IFeatureRepository features, IUserRepository users)
            : base("/idea")
        {
            _ideas    = ideas;
            _features = features;

            this.RequiresAuthentication();

            Post["/{idea}/feature"] = _ =>
            {
                int id      = _.Idea;
                var feature = new Feature
                {
                    Time = DateTime.UtcNow,
                    Text = Request.Form.feature,
                    User = Context.GetCurrentUser(users)
                };
                _features.Add(id, feature);

                return(Response.AsRedirect(string.Format("/idea/{0}#{1}", id, feature.Id)));
            };
        }
Exemplo n.º 31
0
        public CommentModule(IIdeaRepository ideas, IActivityRepository activities)
            : base("/comment")
        {
            _ideas = ideas;
            _activities = activities;

            Post["/{idea}/add"] = parameters =>
            {
                int id = parameters.Idea;
                int userId = Request.Form.userId; // addtional validation required

                var text = Request.Form.comment;
                if (string.IsNullOrEmpty(text)) // additional validation required
                {
                    return Response.AsJson(new { result = "Error" });
                }

                var comment = new Comment
                                {
                                    UserId = userId,
                                    Time = DateTime.UtcNow,
                                    Text = Request.Form.comment
                                };
                _activities.Add(id, comment);

                // why not return JSON here and leave it up to client to render inline?
                return Response.AsRedirect(string.Format("/idea/{0}#{1}", id, comment.Id));
            };

            // TODO: shouldn't these actually sit under the Comment root
            // TODO: user should be able to edit their own comment
            Post["/{id}/edit"] = parameters => Response.AsJson(new { result = "Error" });

            // TODO: user should be able to remove their own comment
            Post["/{id}/delete"] = parameters => Response.AsJson(new { result = "Error" });
        }
Exemplo n.º 32
0
        public IdeaModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository)
            : base("/idea")
        {
            _ideas    = ideas;
            _settings = settings;
            _users    = users;

            Get["/{id}"] = parameters =>
            {
                int id   = parameters.id;
                var idea = _ideas.Get(id);
                if (idea == null)
                {
                    return(View["404"]);
                }

                User user = Context.GetCurrentUser(_users);
                if (user != null)
                {
                    if (idea.Votes.Any(u => u.UserId == user.Id))
                    {
                        idea.UserHasVoted = true;
                    }
                }

                var viewModel = new IdeaViewModel(idea);
                var model     = Context.Model(string.Format("{0} - {1}", idea.Title, _settings.Title));
                model.Idea = viewModel;
                return(View["Idea/Index", model]);
            };

            Get["/{id}/activity"] = parameters =>
            {
                int id   = parameters.id;
                var idea = _ideas.Get(id);
                if (idea == null)
                {
                    return(Response.AsJson(new { Status = "error" }));
                }

                var results = idea.Activities.Select(MapToViewModel);

                return(Response.AsJson(new
                {
                    Status = "success",
                    Items = results
                }));
            };

            Get["/image/{id}"] = parameters =>
            {
                var id = (string)parameters.id;
                if (id.Contains("."))
                {
                    id = id.Substring(0, id.IndexOf(".")); //string .jpg in case it was send in
                }
                var image = imageRepository.Get(int.Parse(id));
                // TODO: format should be adaptive based on backing source?
                return(Response.FromStream(new MemoryStream(image.ImageBits), "image/jpeg"));
            };

            Get[@"/imagethumb/{id}/{width}"] = parameters =>
            {
                var image = (Image)imageRepository.Get(parameters.id);
                using (var memoryStream = new MemoryStream(image.ImageBits))
                {
                    var drawingImage = System.Drawing.Image.FromStream(memoryStream);
                    var thumb        = drawingImage.ToThumbnail((int)parameters.width);
                    using (var thumbnailStream = new MemoryStream())
                    {
                        // TODO: format should be adaptive based on backing source?
                        thumb.Save(thumbnailStream, ImageFormat.Jpeg);
                        return(Response.FromStream(new MemoryStream(thumbnailStream.GetBuffer()), "image/jpeg")); //massive WTF? If I just use thumnailStream, it doesn't work...
                    }
                }
            };

            Get["/imagesforidea/{id}"] = parameters =>
            {
                Idea idea = _ideas.Get((int)parameters.id);
                return(Response.AsJson(idea.Images.Select(i => new ImageFileStatus(i.Id, i.ImageBits.Length, i.Name))
                                       .ToArray()
                                       ).WithHeader("Vary", "Accept"));
            };
        }
Exemplo n.º 33
0
 public CommentController(IIdeaRepository ideas, IActivityRepository activities, IUserRepository users)
 {
     _ideas = ideas;
     _activities = activities;
     _users = users;
 }
Exemplo n.º 34
0
 public void DeleteIdea(Idea idea)
 {
     using (IDataProvider provider = base.CreateDataProvider())
         using (IIdeaRepository repository = provider.CreateIdeaRepository())
             repository.Delete(idea);
 }
Exemplo n.º 35
0
        public ApiModule(IdeastrikeContext db, IIdeaRepository ideas, IUserRepository users, Settings settings)
            : base("/api")
        {
            _settings = settings;

            Get["/ideas"] = _ => {
                return Response.AsJson(db.Ideas.Select(idea =>
                    new {
                        id = idea.Id,
                        title = idea.Title,
                        description = idea.Description,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), idea.Time),
                        author = new { id = idea.Author.Id, username = idea.Author.UserName },
                        vote_count = idea.Votes.Sum(vote => (int?)vote.Value) ?? 0,
                        status = idea.Status
                    }));
            };

            Get["/ideas/{id}"] = _ => {
                int id = _.id;
                var o = db.Ideas.Where(idea => idea.Id == id).Select(idea =>
                    new {
                        id = idea.Id,
                        title = idea.Title,
                        description = idea.Description,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), idea.Time),
                        author = new { id = idea.Author.Id, username = idea.Author.UserName },
                        vote_count = idea.Votes.Sum(vote => (int?)vote.Value) ?? 0,
                        features = idea.Features.Select(feature => new { id = feature.Id, text = feature.Text, time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), feature.Time) }),
                        votes = idea.Votes.Select(vote => new { user = new { id = vote.UserId, username = vote.User.UserName }, value = vote.Value })
                    }).FirstOrDefault();
                if (o == null)
                    return HttpStatusCode.NotFound;
                return Response.AsJson(o);
            };

            Get["/ideas/{id}/features"] = _ => {
                int id = _.id;
                if (!db.Ideas.Any(idea => idea.Id == id))
                    return HttpStatusCode.NotFound;
                return Response.AsJson(db.Features.Where(d => d.Idea.Id == id).Select(feature =>
                    new {
                        id = feature.Id,
                        text = feature.Text,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), feature.Time),
                    }));
            };

            Get["/ideas/{id}/votes"] = _ => {
                int id = _.id;
                if (!db.Ideas.Any(idea => idea.Id == id))
                    return HttpStatusCode.NotFound;
                return Response.AsJson(db.Votes.Where(d => d.IdeaId == id).Select(vote =>
                    new {
                        value = vote.Value,
                        user = new { id = vote.UserId, username = vote.User.UserName }
                    }));
            };

            Post["/activity"] = _ =>
            {
                string content;
                using (var reader = new StreamReader(Context.Request.Body))
                {
                    content = reader.ReadToEnd();
                }
                var j = JsonConvert.DeserializeObject<dynamic>(content);
                string repourl = j.repository.url.ToString();
                string reponame = j.repository.name.ToString();
                var idea = ideas
                            .Include("Activities")
                            .Where(i => i.GithubUrl == repourl || i.GithubName == reponame)
                            .FirstOrDefault();

                if (idea == null)
                    return HttpStatusCode.NotFound;

                foreach (var c in j.commits)
                {
                    string date = c.timestamp;
                    var activity = new GitHubActivity
                    {
                        Time = DateTime.Parse(date),
                        Message = c.message,
                        CommitUrl = c.url,
                        AuthorName = c.author.name,
                        GravatarUrl = GravatarExtensions.ToGravatarUrl(c.author.email.ToString(), 40),
                        Sha = c.id
                    };

                    if (!idea.Activities.OfType<GitHubActivity>().Any(a => a.Sha == activity.Sha))
                        idea.Activities.Add(activity);
                }

                ideas.Save();
                return HttpStatusCode.Accepted;
            };
        }
Exemplo n.º 36
0
 public IdeaController(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository)
 {
     _ideas = ideas;
     _users = users;
     _settings = settings;
 }
Exemplo n.º 37
0
        public AdminModule(IdeastrikeContext dbContext, Settings settings, IUserRepository users, IIdeaRepository ideas, IActivityRepository activities)
            : base("/admin")
        {
            this.RequiresAuthentication();
            this.RequiresValidatedClaims(c => c.Contains("admin"));

            _settings = settings;
            _users = users;
            _ideas = ideas;
            _activities = activities;

            Get["/"] = _ =>
            {
                var m = Context.Model(string.Format("Admin - {0}", (string)_settings.SiteTitle));
                m.Name = _settings.Name;
                m.WelcomeMessage = _settings.WelcomeMessage;
                m.HomePage = _settings.HomePage;
                m.GAnalyticsKey = _settings.GAnalyticsKey;
                return View["Admin/Index", m];
            };

            Get["/users"] = _ =>
            {
                var m = Context.Model(string.Format("Admin - {0}", (string)_settings.SiteTitle));
                m.Name = _settings.Name;
                m.WelcomeMessage = _settings.WelcomeMessage;
                m.HomePage = _settings.HomePage;
                m.GAnalyticsKey = _settings.GAnalyticsKey;
                m.Users = users.GetAll();
                return View["Admin/Users", m];
            };

            Get["/moderation"] = _ =>
            {
                var m = Context.Model(string.Format("Admin - {0}", (string)_settings.SiteTitle));
                m.Name = _settings.Name;
                m.WelcomeMessage = _settings.WelcomeMessage;
                m.HomePage = _settings.HomePage;
                m.GAnalyticsKey = _settings.GAnalyticsKey;
                return View["Admin/Moderation", m];
            };

            Get["/settings"] = _ =>
            {
                var m = Context.Model(string.Format("Admin - {0}", (string)_settings.SiteTitle));
                m.Name = _settings.Name;
                m.SiteTitle = _settings.SiteTitle;
                m.WelcomeMessage = _settings.WelcomeMessage;
                m.HomePage = _settings.HomePage;
                m.GAnalyticsKey = _settings.GAnalyticsKey;
                m.MaxThumbnailWidth = _settings.MaxThumbnailWidth;

                return View["Admin/Settings", m];
            };

            Post["/settings"] = _ =>
            {
                _settings.WelcomeMessage = Request.Form.welcomemessage;
                _settings.SiteTitle = Request.Form.sitetitle;
                _settings.Name = Request.Form.yourname;
                _settings.HomePage = Request.Form.homepage;
                _settings.GAnalyticsKey = Request.Form.analyticskey;
                _settings.MaxThumbnailWidth = Request.Form.maxthumbnailwidth;

                return Response.AsRedirect("/admin/settings");
            };

            Get["/search"] = _ => "";
            Get["/forums"] = _ => "";
            Get["/forum/{forumId}"] = _ => "";

            Get["/uservoice"] = _ => View["Admin/Uservoice", Context.Model("Admin")];
            Post["/uservoice"] = _ =>
            {
                var client = new WebClient();
                var suggestions = GetSuggestions(client, Request.Form.channel, Request.Form.forumid, Request.Form.apikey, Request.Form.trusted);

                foreach (var s in suggestions)
                {
                    string title = s.title;

                    //If the idea exists, skip it
                    if (ideas.FindBy(i => i.Title == title).Any())
                        continue;

                    string date = s.created_at;
                    var idea = new Idea
                    {
                        Title = title,
                        Description = s.text,
                        Time = DateTime.Parse(date.Substring(0, date.Length - 5)),
                    };

                    string status = string.Empty;
                    switch ((string)s.state)
                    {
                        case "approved":
                            status = "Active";
                            break;
                        case "closed" :
                            if (s.status.key == "completed")
                                status = "Completed";
                            else
                                status = "Declined";
                            break;
                        default:
                            status = "New";
                            break;
                    }
                    idea.Status = status;

                    //Get the author, or create
                    string name = s.creator.name;
                    var existing = users.FindBy(u => u.UserName == name).FirstOrDefault();
                    if (existing != null)
                        idea.Author = existing;
                    else
                    {
                        idea.Author = NewUser(s.creator);
                        users.Add(idea.Author);
                    }

                    ideas.Add(idea);

                    //Process all comments
                    var comments = GetComments(client, (string)s.id, Request.Form.channel, Request.Form.forumid, Request.Form.apikey, Request.Form.trusted);
                    List<Activity> ideaComments = new List<Activity>();
                    foreach (var c in comments)
                    {
                        string commentdate = c.created_at;
                        var comment = new Comment
                        {
                            Time = DateTime.Parse(commentdate),
                            Text = c.text
                        };

                        string commentname = c.creator.name;
                        existing = users.FindBy(u => u.UserName == commentname).FirstOrDefault();
                        if (existing != null)
                            comment.User = existing;
                        else
                        {
                            comment.User = NewUser(c.creator);
                            users.Add(comment.User);
                        }

                        activities.Add(idea.Id, comment);
                    }

                    //Process all votes
                    var votes = GetVotes(client, (string)s.id, Request.Form.channel, Request.Form.forumid, Request.Form.apikey, Request.Form.trusted);
                    foreach (var v in votes)
                    {
                        string votername = v.user.name;
                        string votesfor = v.votes_for;
                        int vote;
                        if (Int32.TryParse(votesfor, out vote))
                        {
                            existing = users.FindBy(u => u.UserName == votername).FirstOrDefault();
                            if (existing != null)
                                ideas.Vote(idea.Id, existing.Id, vote);
                            else
                            {
                                var author = NewUser(v.user);
                                users.Add(author);
                                ideas.Vote(idea.Id, author.Id, vote);
                            }
                        }
                    }
                }

                return Response.AsRedirect("/admin");
            };
        }
Exemplo n.º 38
0
        public IdeaModule(IIdeaRepository ideas, ISettingsRepository settings)
            : base("/idea")
        {
            _ideas = ideas;
            _settings = settings;

            Get["/new"] = _ => View["Idea/New", new
            {
                Title = string.Format("New Idea - {0}", _settings.Title),
                Ideas = _ideas.GetAll()
            }];

            Get["/{id}/edit"] = parameters =>
            {
                int id = parameters.id;
                var idea = _ideas.Get(id);

                if (idea == null)
                    return View["404"];

                return View["Idea/Edit", new
                {
                    Title = string.Format("Edit Idea: '{0}' - {1}", idea.Title, _settings.Title),
                    PopularIdeas = _ideas.GetAll(),
                    Idea = idea
                }];
            };

            Get["/{id}"] = parameters =>
                               {
                                   int id = parameters.id;
                                   var idea = _ideas.Get(id);
                                   if (idea == null)
                                       return View["404"];

                                   var viewModel = new IdeaViewModel(idea) { UserHasVoted = false };

                                   return View["Idea/Index",
                                       new
                                       {
                                           Title = string.Format("{0} - {1}", idea.Title, _settings.Title),
                                           Idea = viewModel,
                                           UserId = 2 // TODO: not hard-code these
                                       }];
                               };

            // save result of edit to database
            Post["/{id}/edit"] = parameters =>
            {
                int id = parameters.id;
                var idea = _ideas.Get(id);
                if (idea == null)
                    return View["404"];

                idea.Title = Request.Form.Title;
                idea.Description = Request.Form.Description;

                _ideas.Save();

                return Response.AsRedirect(string.Format("/idea/{0}", idea.Id));
            };

            // save result of create to database
            Post["/new"] = _ =>
            {
                var i = new Idea
                            {
                                Time = DateTime.UtcNow,
                                Title = Request.Form.Title,
                                Description = Request.Form.Description,
                            };

                ideas.Add(i);

                return Response.AsRedirect("/idea/" + i.Id);
            };

            // someone else votes for the idea
            Post["/{id}/vote/{userid}"] = parameters =>
            {
                int votes = ideas.Vote(parameters.id, parameters.userid, 1);

                return Response.AsJson(new
                                {
                                    Status = "OK",
                                    NewVotes = votes
                                });
            };

            // the user decides to repeal his vote
            Post["/{id}/unvote/{userid}"] = parameters =>
            {
                int votes = ideas.Unvote(parameters.id, parameters.userid);

                return Response.AsJson(new
                {
                    Status = "OK",
                    NewVotes = votes
                });
            };

            Post["/{id}/delete"] = parameters =>
            {
                int id = parameters.id;
                ideas.Delete(id);
                ideas.Save();

                // TODO: test
                return Response.AsJson(new
                {
                    Status = "Error"
                });
            };
        }
Exemplo n.º 39
0
 public SiteIdeasController(IIdeaRepository repo)
 {
     _repo = repo;
 }
Exemplo n.º 40
0
 public CommentController(IIdeaRepository ideas, IActivityRepository activities, IUserRepository users)
 {
     _ideas      = ideas;
     _activities = activities;
     _users      = users;
 }
Exemplo n.º 41
0
 public ImageController(IImageRepository imageRepository, ISettingsRepository settingsRepository, IIdeaRepository ideaRepository)
 {
     _images   = imageRepository;
     _settings = settingsRepository;
     _ideas    = ideaRepository;
 }
Exemplo n.º 42
0
 public AdminIdeasController(IIdeaRepository repo)
 {
     _repo = repo;
 }
Exemplo n.º 43
0
        public IdeaModule(IIdeaRepository ideas, IUserRepository users, Settings settings, IImageRepository imageRepository)
            : base("/idea")
        {
            _ideas = ideas;
            _settings = settings;
            _users = users;

            Get["/{id}"] = parameters =>
            {
                int id = parameters.id;
                var idea = _ideas.Get(id);
                if (idea == null)
                    return View["404"];

                User user = Context.GetCurrentUser(_users);
                if (user != null)
                {
                    if (idea.Votes.Any(u => u.UserId == user.Id))
                        idea.UserHasVoted = true;

                }

                var viewModel = new IdeaViewModel(idea);
                var model = Context.Model(string.Format("{0} - {1}", idea.Title, (string)_settings.SiteTitle));
                model.Idea = viewModel;
                return View["Idea/Index", model];
            };

            Get["/{id}/activity"] = parameters =>
            {
                int id = parameters.id;
                var idea = _ideas.Get(id);
                if (idea == null)
                    return Response.AsJson(new { Status = "error" });

                var results = idea.Activities.OrderBy(a => a.Time).Select(MapToViewModel);

                return Response.AsJson(new
                {
                    Status = "success",
                    Items = results
                });
            };

            Get["/image/{id}"] = parameters =>
            {
                var id = (string)parameters.id;
                if (id.Contains("."))
                {
                    id = id.Substring(0, id.IndexOf(".")); //string .jpg in case it was send in
                }
                var image = imageRepository.Get(int.Parse(id));
                // TODO: format should be adaptive based on backing source?
                return Response.FromStream(new MemoryStream(image.ImageBits), "image/jpeg");
            };

            Get[@"/imagethumb/{id}/{width}"] = parameters =>
            {
                var image = (Image)imageRepository.Get(parameters.id);
                using (var memoryStream = new MemoryStream(image.ImageBits))
                {
                    var drawingImage = System.Drawing.Image.FromStream(memoryStream);
                    int thumbWidth = (int)parameters.width;
                    if (thumbWidth > int.Parse(_settings.MaxThumbnailWidth))
                    {
                        thumbWidth = int.Parse(_settings.MaxThumbnailWidth);
                    }
                    var thumb = drawingImage.ToThumbnail(thumbWidth);
                    using (var thumbnailStream = new MemoryStream())
                    {
                        // TODO: format should be adaptive based on backing source?
                        thumb.Save(thumbnailStream, ImageFormat.Jpeg);
                        return Response.FromStream(new MemoryStream(thumbnailStream.GetBuffer()), "image/jpeg"); //massive WTF? If I just use thumnailStream, it doesn't work...
                    }
                }
            };

            Get["/imagesforidea/{id}"] = parameters =>
                                             {
                                                 Idea idea = _ideas.Get((int)parameters.id);
                                                 return Response.AsJson(idea.Images.Select(i => new ImageFileStatus(i.Id, i.ImageBits.Length, i.Name))
                                                                                            .ToArray()
                                                                            ).WithHeader("Vary", "Accept");
                                             };
        }
Exemplo n.º 44
0
 public IdeasController([Import] IIdeaRepository ideaRepository)
 {
     _ideaRepository = ideaRepository;
 }
Exemplo n.º 45
0
 public IdeasServiceController(IIdeaRepository repo)
 {
     _repo = repo;
 }
Exemplo n.º 46
0
 public HomeController(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings)
 {
     _ideas    = ideas;
     _users    = users;
     _settings = settings;
 }
Exemplo n.º 47
0
        public ApiModule(IdeastrikeContext db, IIdeaRepository ideas)
            : base("/api")
        {
            Get["/ideas"] = _ => {
                return Response.AsJson(db.Ideas.Select(idea =>
                    new {
                        id = idea.Id,
                        title = idea.Title,
                        description = idea.Description,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), idea.Time),
                        Author = new { idea.Author.Id, idea.Author.UserName },
                        vote_count = idea.Votes.Sum(vote => (int?)vote.Value) ?? 0
                    }));
            };

            Post["/ideas"] = _ => {
                var model = this.Bind<EditIdeaModel>();
                var idea = new Idea {
                    Title= model.title,
                    Description= model.description,
                    Time = DateTime.UtcNow
                };
                ideas.Add(idea);

                return HttpStatusCode.Created;  // TODO: Should return either the generated id or the json body
            };

            Put["/ideas/{id}"] = _ => {
                var model = this.Bind<EditIdeaModel>();
                int id = _.id;
                var idea = ideas.Get(id);
                if (idea == null)
                    return HttpStatusCode.NotFound;
                if (model.title != null)
                    idea.Title = model.title;
                if (model.description != null)
                    idea.Description = model.description;
                ideas.Edit(idea);

                return HttpStatusCode.OK;
            };

            Get["/ideas/{id}"] = _ => {
                int id = _.id;
                var o = db.Ideas.Where(idea => idea.Id == id).Select(idea =>
                    new {
                        id = idea.Id,
                        title = idea.Title,
                        description = idea.Description,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), idea.Time),
                        author = new { id = idea.Author.Id, username = idea.Author.UserName },
                        vote_count = idea.Votes.Sum(vote => (int?)vote.Value) ?? 0,
                        features = idea.Features.Select(feature => new { id = feature.Id, text = feature.Text, time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), feature.Time) }),
                        votes = idea.Votes.Select(vote => new { user = new { id = vote.UserId, username = vote.User.UserName }, value = vote.Value })
                    }).FirstOrDefault();
                if (o == null)
                    return HttpStatusCode.NotFound;
                return Response.AsJson(o);
            };

            Get["/ideas/{id}/features"] = _ => {
                int id = _.id;
                if (!db.Ideas.Any(idea => idea.Id == id))
                    return HttpStatusCode.NotFound;
                return Response.AsJson(db.Features.Where(d => d.Idea.Id == id).Select(feature =>
                    new {
                        id = feature.Id,
                        text = feature.Text,
                        time = SqlFunctions.DateDiff("s", new DateTime(1970, 1, 1), feature.Time),
                    }));
            };

            Get["/ideas/{id}/votes"] = _ => {
                int id = _.id;
                if (!db.Ideas.Any(idea => idea.Id == id))
                    return HttpStatusCode.NotFound;
                return Response.AsJson(db.Votes.Where(d => d.IdeaId == id).Select(vote =>
                    new {
                        value = vote.Value,
                        user = new { id = vote.UserId, username = vote.User.UserName }
                    }));
            };
        }
Exemplo n.º 48
0
 public HomeController(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings)
 {
     _ideas = ideas;
     _users = users;
     _settings = settings;
 }
Exemplo n.º 49
0
 public IdeasController(IIdeaRepository ideaRepository)
 {
     _ideaRepository = ideaRepository;
 }
Exemplo n.º 50
0
 public ProfileController(IUserRepository users, IIdeaRepository ideas, IFeatureRepository features)
 {
     _users = users;
     _ideas = ideas;
     _features = features;
 }
Exemplo n.º 51
0
        public IdeaSecuredModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository)
            : base("/idea")
        {
            _ideas = ideas;
            _settings = settings;
            _imageRepository = imageRepository;
            _users = users;

            this.RequiresAuthentication();

            Get["/new"] = _ =>
            {
                var m = Context.Model(string.Format("New Idea - {0}", _settings.Title));
                m.Ideas = _ideas.GetAll();
                m.Errors = false;

                if (Request.Query["validation"] == "failed")
                {
                    m.Errors = true;
                }

                return View["Idea/New", m];
            };

            Get["/{id}/edit"] = parameters =>
            {
                int id = parameters.id;
                var idea = _ideas.Get(id);

                if (idea == null)
                    return View["404"];

                if (idea.Author.UserName != Context.CurrentUser.UserName)
                    return View["404"];

                var m = Context.Model(string.Format(Strings.IdeaSecuredModule_EditIdea, idea.Title, _settings.Title));
                m.PopularIdeas = _ideas.GetAll();
                m.Idea = idea;
                m.StatusChoices = _settings.IdeaStatusChoices.Split(',');
                m.Errors = false;

                if (Request.Query["validation"] == "failed")
                {
                    m.Errors = true;
                }

                return View["Idea/Edit", m];
            };

            // save result of edit to database
            Post["/{id}/edit"] = parameters =>
            {
                int id = parameters.id;

                if (string.IsNullOrEmpty(Request.Form.Title) || string.IsNullOrEmpty(Request.Form.Description))
                {
                    return Response.AsRedirect(string.Format("/idea/{0}/edit?validation=failed", id));
                }

                var idea = _ideas.Get(id);
                if (idea == null)
                    return View["404"];

                idea.Title = Request.Form.Title;
                idea.Description = Request.Form.Description;
                idea.Status = Request.Form.Status;

                //Add any images
                IEnumerable<string> keys = Context.Request.Form;
                var x = keys.Where(c => c.StartsWith("imageId"));
                var ids = x.Select(c => Context.Request.Form[c].ToString()).Cast<string>();
                var images = ids.Select(y => _imageRepository.Get(Convert.ToInt32(y)));
                foreach (var i in images)
                {
                    if (!idea.Images.Contains(i, i))
                    {
                        idea.Images.Add(i);
                    }
                }

                _ideas.Save();

                return Response.AsRedirect(string.Format("/idea/{0}", idea.Id));
            };

            // save result of create to database
            Post["/new"] = _ =>
            {
                if (string.IsNullOrEmpty(Request.Form.Title) || string.IsNullOrEmpty(Request.Form.Description))
                {
                    return Response.AsRedirect("/idea/new?validation=failed");
                }

                var user = _users.FindBy(u => u.UserName == Context.CurrentUser.UserName).FirstOrDefault();

                if (user == null)
                    return Response.AsRedirect("/login");

                var idea = new Idea
                            {
                                Author = user,
                                Time = DateTime.UtcNow,
                                Title = Request.Form.Title,
                                Description = Request.Form.Description,
                                Status = settings.IdeaStatusDefault
                            };

                IEnumerable<string> keys = Context.Request.Form;

                var parameters = keys.Where(c => c.StartsWith("imageId"));
                var ids = parameters.Select(c => Context.Request.Form[c].ToString()).Cast<string>();
                var images = ids.Select(id => _imageRepository.Get(Convert.ToInt32(id)));
                idea.Images = images.ToList();

                //i.Images = form.Cast<string>()
                //    .Where(k => k.StartsWith("imageId"))
                //    .Select(k => _imageRepository.Get(Convert.ToInt32(form[k])))
                //    .ToList(); //is there a way to do this using Nancy?
                if (idea.Votes.Any(u => u.UserId == user.Id))
                    idea.UserHasVoted = true;

                ideas.Add(idea);

                return Response.AsRedirect("/idea/" + idea.Id);
            };

            // someone else votes for the idea
            Post["/{id}/vote"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);

                if (user == null)
                    return Response.AsRedirect("/login");

                int ideaId = parameters.id;
                int votes = ideas.Vote(ideaId, user.Id, 1);

                return Response.AsJson(new { Status = "OK", NewVotes = votes });
            };

            // the user decides to repeal his vote
            Post["/{id}/unvote"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);
                int votes = ideas.Unvote(parameters.id, user.Id);

                return Response.AsJson(new { Status = "OK", NewVotes = votes });
            };

            Post["/{id}/delete"] = parameters =>
            {
                int id = parameters.id;
                ideas.Delete(id);
                ideas.Save();

                // TODO: test
                return Response.AsJson(new { Status = "Error" });
            };

            // TODO: do we want unauthenticated users to be allowed to upload posts?
            Post["/uploadimage"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);
                if (user == null)
                    return Response.AsJson(new { status = "Error" });

                var imageFile = Request.Files.FirstOrDefault();
                if (imageFile == null)
                {
                    return null; //TODO: handle error case
                }

                var image = new Image { Name = imageFile.Name };
                var bytes = new byte[imageFile.Value.Length];
                imageFile.Value.Read(bytes, 0, bytes.Length);
                image.ImageBits = bytes;
                imageRepository.Add(image);
                var status = new ImageFileStatus(image.Id, bytes.Length, image.Name);
                return Response.AsJson(new[] { status }).WithHeader("Vary", "Accept");
            };

            Delete["/deleteimage/{id}"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);
                if (user == null)
                    return Response.AsJson(new { status = "Error" });

                imageRepository.Delete(parameters.id);
                return null;
            };
        }
Exemplo n.º 52
0
 public IdeaController(IIdeaRepository ideaRepository)
 {
     this.repository = ideaRepository;
 }
Exemplo n.º 53
0
        public IdeaSecuredModule(IIdeaRepository ideas, IUserRepository users, ISettingsRepository settings, IImageRepository imageRepository)
            : base("/idea")
        {
            _ideas           = ideas;
            _settings        = settings;
            _imageRepository = imageRepository;
            _users           = users;

            this.RequiresAuthentication();

            Get["/new"] = _ =>
            {
                var m = Context.Model(string.Format("New Idea - {0}", _settings.Title));
                m.Ideas  = _ideas.GetAll();
                m.Errors = false;

                if (Request.Query["validation"] == "failed")
                {
                    m.Errors = true;
                }

                return(View["Idea/New", m]);
            };

            Get["/{id}/edit"] = parameters =>
            {
                int id   = parameters.id;
                var idea = _ideas.Get(id);

                var m = Context.Model(string.Format(Strings.IdeaSecuredModule_EditIdea, idea.Title, _settings.Title));
                m.PopularIdeas  = _ideas.GetAll();
                m.Idea          = idea;
                m.StatusChoices = _settings.IdeaStatusChoices.Split(',');
                m.Errors        = false;

                if (Request.Query["validation"] == "failed")
                {
                    m.Errors = true;
                }

                return(View["Idea/Edit", m]);
            };


            // save result of edit to database
            Post["/{id}/edit"] = parameters =>
            {
                int id = parameters.id;

                if (string.IsNullOrEmpty(Request.Form.Title) || string.IsNullOrEmpty(Request.Form.Description))
                {
                    return(Response.AsRedirect(string.Format("/idea/{0}/edit?validation=failed", id)));
                }

                var idea = _ideas.Get(id);
                if (idea == null)
                {
                    return(View["404"]);
                }

                idea.Title       = Request.Form.Title;
                idea.Description = Request.Form.Description;
                idea.Status      = Request.Form.Status;

                //Add any images
                IEnumerable <string> keys = Context.Request.Form;
                var x      = keys.Where(c => c.StartsWith("imageId"));
                var ids    = x.Select(c => Context.Request.Form[c].ToString()).Cast <string>();
                var images = ids.Select(y => _imageRepository.Get(Convert.ToInt32(y)));
                foreach (var i in images)
                {
                    if (!idea.Images.Contains(i, i))
                    {
                        idea.Images.Add(i);
                    }
                }

                _ideas.Save();

                return(Response.AsRedirect(string.Format("/idea/{0}", idea.Id)));
            };

            // save result of create to database
            Post["/new"] = _ =>
            {
                if (string.IsNullOrEmpty(Request.Form.Title) || string.IsNullOrEmpty(Request.Form.Description))
                {
                    return(Response.AsRedirect("/idea/new?validation=failed"));
                }

                var user = _users.FindBy(u => u.UserName == Context.CurrentUser.UserName).FirstOrDefault();

                if (user == null)
                {
                    return(Response.AsRedirect("/login"));
                }

                var idea = new Idea
                {
                    Author      = user,
                    Time        = DateTime.UtcNow,
                    Title       = Request.Form.Title,
                    Description = Request.Form.Description,
                    Status      = settings.IdeaStatusDefault
                };

                IEnumerable <string> keys = Context.Request.Form;

                var parameters = keys.Where(c => c.StartsWith("imageId"));
                var ids        = parameters.Select(c => Context.Request.Form[c].ToString()).Cast <string>();
                var images     = ids.Select(id => _imageRepository.Get(Convert.ToInt32(id)));
                idea.Images = images.ToList();

                //i.Images = form.Cast<string>()
                //    .Where(k => k.StartsWith("imageId"))
                //    .Select(k => _imageRepository.Get(Convert.ToInt32(form[k])))
                //    .ToList(); //is there a way to do this using Nancy?
                if (idea.Votes.Any(u => u.UserId == user.Id))
                {
                    idea.UserHasVoted = true;
                }

                ideas.Add(idea);

                return(Response.AsRedirect("/idea/" + idea.Id));
            };

            // someone else votes for the idea
            Post["/{id}/vote"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);

                if (user == null)
                {
                    return(Response.AsRedirect("/login"));
                }

                int ideaId = parameters.id;
                int votes  = ideas.Vote(ideaId, user.Id, 1);

                return(Response.AsJson(new { Status = "OK", NewVotes = votes }));
            };

            // the user decides to repeal his vote
            Post["/{id}/unvote"] = parameters =>
            {
                var user  = Context.GetCurrentUser(_users);
                int votes = ideas.Unvote(parameters.id, user.Id);

                return(Response.AsJson(new { Status = "OK", NewVotes = votes }));
            };

            Post["/{id}/delete"] = parameters =>
            {
                int id = parameters.id;
                ideas.Delete(id);
                ideas.Save();

                // TODO: test
                return(Response.AsJson(new { Status = "Error" }));
            };

            // TODO: do we want unauthenticated users to be allowed to upload posts?
            Post["/uploadimage"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);
                if (user == null)
                {
                    return(Response.AsJson(new { status = "Error" }));
                }

                var imageFile = Request.Files.FirstOrDefault();
                if (imageFile == null)
                {
                    return(null); //TODO: handle error case
                }

                var image = new Image {
                    Name = imageFile.Name
                };
                var bytes = new byte[imageFile.Value.Length];
                imageFile.Value.Read(bytes, 0, bytes.Length);
                image.ImageBits = bytes;
                imageRepository.Add(image);
                var status = new ImageFileStatus(image.Id, bytes.Length, image.Name);
                return(Response.AsJson(new[] { status }).WithHeader("Vary", "Accept"));
            };

            Delete["/deleteimage/{id}"] = parameters =>
            {
                var user = Context.GetCurrentUser(_users);
                if (user == null)
                {
                    return(Response.AsJson(new { status = "Error" }));
                }

                imageRepository.Delete(parameters.id);
                return(null);
            };
        }
Exemplo n.º 54
0
 public IdeaServiceController(IIdeaRepository repository)
 {
     _repository = repository;
 }
Exemplo n.º 55
0
 public IdeaService(IIdeaRepository repository)
 {
     _repository = repository;
 }
Exemplo n.º 56
0
        public UserModule(IUserRepository users, IIdeaRepository ideas, IFeatureRepository features)
        {
            _users = users;
            _ideas = ideas;
            _features = features;

            this.RequiresAuthentication();

            Get["/profile"] = _ =>
                                  {
                                      User user = Context.GetCurrentUser(_users);
                                      if (user == null) return Response.AsRedirect("/");

                                      var i = _ideas.GetAll().Where(u => u.Author.Id == user.Id).ToList();
                                      var f = _features.GetAll().Where(u => u.User.Id == user.Id).ToList();
                                      var v = _users.GetVotes(user.Id).ToList();

                                      return View["Profile/Index",
                                          new
                                          {
                                              Title = "Profile",
                                              Id = user.Id,
                                              UserName = user.UserName,
                                              Email = user.Email,
                                              Github = user.Github,
                                              Ideas = i,
                                              Features = f,
                                              Votes = v,
                                              Claims = user.Claims.ToList(),
                                              IsLoggedIn = Context.IsLoggedIn()
                                          }];
                                  };

            Get["/profile/edit"] = _ =>
                                       {
                                           User user = Context.GetCurrentUser(_users);
                                           if (user == null) return Response.AsRedirect("/");

                                           return View["Profile/Edit", new
                                                                           {
                                                                               Title = "Profile",
                                                                               Id = user.Id,
                                                                               UserName = user.UserName,
                                                                               Email = user.Email,
                                                                               Github = user.Github,
                                                                               Claims = user.Claims.ToList(),
                                                                               IsLoggedIn = Context.IsLoggedIn(),
                                                                           }];
                                       };

            Post["/profile/checkuser"] = _ =>
                                             {
                                                 string username = Request.Form.username;

                                                 var userExists = _users.FindBy(u => u.UserName == username).Any();

                                                 string msg = "";

                                                 if (username == Context.CurrentUser.UserName)
                                                     msg = "";
                                                 else if (string.IsNullOrWhiteSpace(username))
                                                     msg = Strings.UserModule_UsernameNotValid;
                                                 else if (userExists)
                                                     msg = Strings.UserModule_UsernameTaken;
                                                 else msg = Strings.UserModule_UsernameAvailable;

                                                 return Response.AsJson(new
                                                                            {
                                                                                Status = "OK",
                                                                                msg = msg
                                                                            });
                                             };

            Post["/profile/save"] = _ =>
                                        {
                                            var user = Context.GetCurrentUser(_users);
                                            user.UserName = Request.Form.username;
                                            user.Email = Request.Form.email;
                                            user.AvatarUrl = user.Email.ToGravatarUrl(40);
                                            user.Github = Request.Form.github;

                                            _users.Edit(user);

                                            return Response.AsRedirect("/profile");
                                        };
        }
Exemplo n.º 57
0
 public IdeaController(IIdeaRepository repository)
 {
     _repository = repository;
 }
Exemplo n.º 58
0
 public ImageController(IImageRepository imageRepository, ISettingsRepository settingsRepository, IIdeaRepository ideaRepository)
 {
     _images = imageRepository;
     _settings = settingsRepository;
     _ideas = ideaRepository;
 }
Exemplo n.º 59
0
 public IdeasController(IIdeaRepository repository, IUserRepository userRepository)
 {
     _repository     = repository;
     _userRepository = userRepository;
 }
Exemplo n.º 60
0
 public List <Idea> GetIdeas(IdeaFilter ideaFilter = null)
 {
     using (IDataProvider provider = base.CreateDataProvider())
         using (IIdeaRepository repository = provider.CreateIdeaRepository())
             return(repository.GetIdeas(ideaFilter));
 }