summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjessib <jessib@leap.se>2012-11-16 15:43:12 -0800
committerjessib <jessib@leap.se>2012-11-16 15:43:12 -0800
commit341da14b031c3c27e687c82f479624217c1dbddd (patch)
treee97b617b0dec8c88c01f150c0cc489d6ff56196d
parent18a67ffdc21e44e21363f863b1a31d74b98ee3eb (diff)
Rough start to modeling tickets view after the issues view in github (so something like https://github.com/spree/spree/issues ), using bootstrap for display.
Still want to use pjax, and have more functionality to add: searching, sorting, pagination, etc..
-rw-r--r--help/app/controllers/tickets_controller.rb26
-rw-r--r--help/app/models/ticket.rb13
-rw-r--r--help/app/views/tickets/index.html.haml49
3 files changed, 58 insertions, 30 deletions
diff --git a/help/app/controllers/tickets_controller.rb b/help/app/controllers/tickets_controller.rb
index 2dc4c4c..2f26d24 100644
--- a/help/app/controllers/tickets_controller.rb
+++ b/help/app/controllers/tickets_controller.rb
@@ -79,31 +79,23 @@ class TicketsController < ApplicationController
end
def index
- # @tickets = Ticket.by_title #not actually what we will want
- #we'll want only tickets that this user can access
- # @tickets = Ticket.by_is_open.key(params[:status])
-
#TODO: we will need pagination
- #below is obviously too messy and not what we want, but wanted to get basic functionality there
if admin?
- # todo: for admins, might want option to see tickets they have already posted to. want to use something like tickets_by_admin
- if params[:status] == 'open'
+ if params[:admin_status] == 'mine'
+ @tickets = tickets_by_admin(current_user.id)
+ elsif params[:open_status] == 'open'
@tickets = Ticket.by_is_open.key(true)
- elsif params[:status] == 'closed'
+ elsif params[:open_status] == 'closed'
@tickets = Ticket.by_is_open.key(false)
- elsif params[:status] == 'open tickets I admin' #TODO: obviously temp hack
- @tickets = tickets_by_admin(current_user.id)
- elsif params[:status] == 'all tickets I admin' #TODO: obviously temp hack
- @tickets = tickets_by_admin(current_user.id, false)
- else
+ else
@tickets = Ticket.all
end
elsif logged_in?
#TODO---if, when logged in, user accessed unauthenticated ticket, then seems okay to list it in their list of tickets. Thus, include all tickets that the user has posted to, not just those that they created.
- if params[:status] == 'open'
+ if params[:open_status] == 'open'
@tickets = Ticket.by_is_open_and_created_by.key([true, current_user.id]).all
- elsif params[:status] == 'closed'
+ elsif params[:open_status] == 'closed'
@tickets = Ticket.by_is_open_and_created_by.key([false, current_user.id]).all
else
@tickets = Ticket.by_created_by.key(current_user.id).all
@@ -132,12 +124,12 @@ class TicketsController < ApplicationController
access_denied unless ticket_access?
end
- def tickets_by_admin(id=current_user.id, just_open=true)
+ def tickets_by_admin(id=current_user.id)
admin_tickets = []
tickets = Ticket.all
tickets.each do |ticket|
ticket.comments.each do |comment|
- if comment.posted_by == id and (!just_open or ticket.is_open)
+ if comment.posted_by == id and (params[:open_status] != 'open' or ticket.is_open) and (params[:open_status] != 'closed' or !ticket.is_open) #limit based on whether the ticket is open if open_status is set to open or closed
admin_tickets << ticket
break
end
diff --git a/help/app/models/ticket.rb b/help/app/models/ticket.rb
index dc2f51b..3b66fe4 100644
--- a/help/app/models/ticket.rb
+++ b/help/app/models/ticket.rb
@@ -83,6 +83,19 @@ class Ticket < CouchRest::Model::Base
#save
end
+ def commenters
+ commenters = []
+ self.comments.each do |comment|
+ if comment.posted_by
+ user = User.find(comment.posted_by)
+ commenters << user.login if user and !commenters.include?(user.login)
+ else
+ commenters << 'unauthenticated user' if !commenters.include?('unauthenticated user') #todo don't hardcode string 'unauthenticated user'
+ end
+ end
+ commenters.join(', ')
+ end
+
def comments_attributes=(attributes)
if attributes # could be empty as we will empty if nothing was typed in
comment = TicketComment.new(attributes.values.first) #TicketComment.new(attributes)
diff --git a/help/app/views/tickets/index.html.haml b/help/app/views/tickets/index.html.haml
index 5e35b12..95b65c0 100644
--- a/help/app/views/tickets/index.html.haml
+++ b/help/app/views/tickets/index.html.haml
@@ -1,16 +1,39 @@
%h1 tickets index (just as space)
+%h1 tickets index (just as space)
+%h1 tickets index (just as space)
+
Create a
= link_to "new ticket", new_ticket_path
-= # below shouldn't be unless logged in
-%h2 Tickets
-= form_tag(tickets_path, :method => :get) do # want to redo as ajax, and make sure it displays the selected option
- - options = ["all", "open", "closed"]
- - if admin?
- - options << "open tickets I admin" # obviously not what we will want
- - options << "all tickets I admin" # obviously not what we will want
- = select_tag :status, options_for_select(options, :selected => params[:status]|| "all")
- = submit_tag "filter"
-- @tickets.each do |ticket|
- %p
- = link_to ticket.title, ticket
-= #render(:partial => "ticket", :collection => @tickets)
+
+= #%div{"data-pjax-container" => ""} # not sure how to get this working right
+.row
+ .span2
+ - if admin?
+ %h4 whose tickets
+ %ul.nav.nav-pills
+ %li{:class => ("active" if params[:admin_status] == 'mine')}
+ = link_to 'only tickets i admin', {:admin_status => 'mine', :open_status => params[:open_status]}
+ %li{:class => ("active" if params[:admin_status] != 'mine')}
+ = link_to 'all', {:admin_status => 'all', :open_status => params[:open_status]}
+ .span10
+ %ul.nav.nav-tabs
+ %li{:class => ("active" if params[:open_status] != 'closed' and params[:open_status] != 'all')}
+ = link_to 'open issues', {:open_status => 'open', :admin_status => params[:admin_status]}
+ %li{:class => ("active" if params[:open_status] == 'closed')}
+ = link_to 'closed issues', {:open_status => 'closed', :admin_status => params[:admin_status]}
+ = #%a{:href => "#"} closed issue
+ %li{:class => ("active" if params[:open_status] == 'all')}
+ = link_to 'open & closed issues', {:open_status => 'all', :admin_status => params[:admin_status]}
+
+ - @tickets.each do |ticket|
+ %p
+ = link_to ticket.title, ticket
+ comments by:
+ = ticket.commenters
+
+
+%div{"data-pjax-container" => ""}
+ / PJAX updates will go here
+ hmmm
+
+