radesk 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/radesk/radesk.js.coffee +4 -0
- data/app/assets/stylesheets/radesk/radesk.css.scss +41 -19
- data/app/controllers/radesk/admin/activities_controller.rb +11 -0
- data/app/controllers/radesk/admin/admin_controller.rb +9 -0
- data/app/controllers/radesk/admin/categories_controller.rb +2 -3
- data/app/controllers/radesk/admin/users_controller.rb +18 -0
- data/app/controllers/radesk/answers_controller.rb +9 -11
- data/app/controllers/radesk/application_controller.rb +5 -1
- data/app/controllers/radesk/tickets_controller.rb +23 -13
- data/app/controllers/radesk/uploads_controller.rb +18 -0
- data/app/helpers/radesk/activities_helper.rb +11 -0
- data/app/helpers/radesk/application_helper.rb +9 -0
- data/app/mailers/radesk/user_mailer.rb +5 -4
- data/app/models/radesk/activity.rb +6 -0
- data/app/models/radesk/answer.rb +7 -3
- data/app/models/radesk/concerns/access.rb +9 -0
- data/app/models/radesk/ticket.rb +8 -5
- data/app/models/radesk/upload.rb +9 -0
- data/app/views/layouts/radesk/application.html.haml +6 -5
- data/app/views/radesk/admin/activities/_answer.html.haml +1 -0
- data/app/views/radesk/admin/activities/_ticket.html.haml +1 -0
- data/app/views/radesk/admin/activities/index.html.haml +16 -0
- data/app/views/radesk/admin/categories/_form.html.haml +3 -1
- data/app/views/radesk/admin/categories/edit.html.haml +1 -2
- data/app/views/radesk/admin/categories/index.html.haml +11 -9
- data/app/views/radesk/admin/categories/new.html.haml +1 -2
- data/app/views/radesk/admin/users/show.html.haml +3 -0
- data/app/views/radesk/answers/_form.html.haml +24 -0
- data/app/views/radesk/answers/_list.html.haml +29 -13
- data/app/views/radesk/answers/_upload_fields.html.haml +2 -0
- data/app/views/radesk/answers/edit.html.haml +1 -6
- data/app/views/radesk/tickets/_form.html.haml +5 -4
- data/app/views/radesk/tickets/_list.html.haml +23 -0
- data/app/views/radesk/tickets/index.html.haml +13 -24
- data/app/views/radesk/tickets/new.html.haml +1 -2
- data/app/views/radesk/tickets/show.html.haml +4 -35
- data/app/views/radesk/uploads/destroy.js.erb +1 -0
- data/config/locales/en.yml +51 -0
- data/config/locales/zh-CN.yml +37 -0
- data/config/routes.rb +9 -0
- data/db/migrate/20150112111134_remove_message_from_radesk_tickets.rb +5 -0
- data/db/migrate/20150112182604_create_radesk_uploads.rb +11 -0
- data/db/migrate/20150114194722_create_radesk_activities.rb +11 -0
- data/lib/generators/radesk/dummy/templates/Rakefile +6 -0
- data/lib/generators/radesk/dummy/templates/app/assets/javascripts/application.js +13 -0
- data/lib/generators/radesk/dummy/templates/app/assets/stylesheets/application.css +15 -0
- data/lib/generators/radesk/dummy/templates/app/controllers/application_controller.rb +5 -0
- data/lib/generators/radesk/dummy/templates/app/helpers/application_helper.rb +2 -0
- data/lib/generators/radesk/dummy/templates/app/models/user.rb +10 -0
- data/lib/generators/radesk/dummy/templates/app/views/layouts/application.html.erb +14 -0
- data/lib/generators/radesk/dummy/templates/bin/bundle +3 -0
- data/lib/generators/radesk/dummy/templates/bin/rails +4 -0
- data/lib/generators/radesk/dummy/templates/bin/rake +4 -0
- data/lib/generators/radesk/dummy/templates/bin/setup +29 -0
- data/lib/generators/radesk/dummy/templates/config.ru +4 -0
- data/lib/generators/radesk/dummy/templates/config/application.rb +31 -0
- data/lib/generators/radesk/dummy/templates/config/boot.rb +5 -0
- data/lib/generators/radesk/dummy/templates/config/database.yml +25 -0
- data/lib/generators/radesk/dummy/templates/config/environment.rb +5 -0
- data/lib/generators/radesk/dummy/templates/config/environments/development.rb +44 -0
- data/lib/generators/radesk/dummy/templates/config/environments/production.rb +79 -0
- data/lib/generators/radesk/dummy/templates/config/environments/test.rb +42 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/assets.rb +11 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/cookies_serializer.rb +3 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/devise.rb +259 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/filter_parameter_logging.rb +4 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/inflections.rb +16 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/mime_types.rb +4 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/session_store.rb +3 -0
- data/lib/generators/radesk/dummy/templates/config/initializers/wrap_parameters.rb +14 -0
- data/lib/generators/radesk/dummy/templates/config/locales/devise.en.yml +60 -0
- data/lib/generators/radesk/dummy/templates/config/locales/en.yml +23 -0
- data/lib/generators/radesk/dummy/templates/config/routes.rb +3 -0
- data/lib/generators/radesk/dummy/templates/config/secrets.yml +22 -0
- data/lib/generators/radesk/dummy/templates/db/migrate/20150108203658_devise_create_users.rb +42 -0
- data/lib/generators/radesk/dummy/templates/public/404.html +67 -0
- data/lib/generators/radesk/dummy/templates/public/422.html +67 -0
- data/lib/generators/radesk/dummy/templates/public/500.html +66 -0
- data/lib/generators/radesk/dummy/templates/public/favicon.ico +0 -0
- data/lib/generators/radesk/dummy_generator.rb +13 -0
- data/lib/generators/radesk/install/templates/initializer.rb +2 -0
- data/lib/radesk.rb +8 -0
- data/lib/radesk/version.rb +1 -1
- metadata +176 -46
@@ -14,11 +14,12 @@
|
|
14
14
|
= flash[:notice]
|
15
15
|
.nav
|
16
16
|
.wrap
|
17
|
-
= link_to '
|
18
|
-
= link_to '
|
17
|
+
= link_to t('radesk.ui.home'), Radesk.home_path
|
18
|
+
= link_to t('radesk.ui.tickets.index'), tickets_path
|
19
19
|
- if radesk_current_user.try(:radesk_admin?)
|
20
|
-
= link_to '
|
20
|
+
= link_to t('radesk.ui.categories.index'), admin_categories_path
|
21
|
+
= link_to t('radesk.ui.activities.index'), admin_activities_path
|
21
22
|
%span.pull-right
|
22
|
-
|
23
|
+
= t('radesk.ui.logged_as_admin')
|
23
24
|
.wrap
|
24
|
-
= yield
|
25
|
+
= yield
|
@@ -0,0 +1 @@
|
|
1
|
+
= link_to object.ticket.title, ticket_path(object.ticket)
|
@@ -0,0 +1 @@
|
|
1
|
+
= link_to object.title, ticket_path(object)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
%h1
|
2
|
+
= t('radesk.ui.activities.index')
|
3
|
+
%table.table
|
4
|
+
- @activities.each do |activity|
|
5
|
+
%tr
|
6
|
+
%td
|
7
|
+
%strong
|
8
|
+
= link_to activity.trackable.user.email, admin_user_path(activity.trackable.user)
|
9
|
+
= t("radesk.ui.activities.#{activity.trackable.class.name.split('::').last.downcase}.#{activity.action}")
|
10
|
+
%strong
|
11
|
+
= render "radesk/admin/activities/#{activity.trackable.class.name.split('::').last.downcase}", :object => activity.trackable
|
12
|
+
= time_ago_in_words(activity.created_at)
|
13
|
+
= t('radesk.ui.ago')
|
14
|
+
|
15
|
+
|
16
|
+
= paginate @activities
|
@@ -4,4 +4,6 @@
|
|
4
4
|
= f.label :title
|
5
5
|
= f.text_field :title, :class => 'form-control', :required => true
|
6
6
|
.form-group.text-right
|
7
|
-
|
7
|
+
- if params[:action] == :edit
|
8
|
+
= link_to t('radesk.ui.delete'), admin_category_path(@category), :class => 'btn btn-clear', :method => :delete
|
9
|
+
= f.submit t('radesk.ui.categories.save'), :class => 'btn'
|
@@ -1,14 +1,16 @@
|
|
1
|
-
%h1
|
2
|
-
Categories
|
3
|
-
= link_to "New Category", new_admin_category_path, :class => 'btn pull-right'
|
4
1
|
- if @categories.any?
|
2
|
+
%h1
|
3
|
+
= t('radesk.ui.categories.index')
|
4
|
+
= link_to t('radesk.ui.categories.new'), new_admin_category_path, :class => 'btn pull-right'
|
5
5
|
%table.table
|
6
6
|
- @categories.each do |category|
|
7
7
|
%tr
|
8
8
|
%td
|
9
|
-
= category.title
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
= link_to category.title, edit_admin_category_path(category)
|
10
|
+
- else
|
11
|
+
.add-something.text-center
|
12
|
+
.title
|
13
|
+
= t('radesk.ui.categories.not_found')
|
14
|
+
.description
|
15
|
+
= t('radesk.ui.but_you_can_create')
|
16
|
+
= link_to t('radesk.ui.categories.new'), new_admin_category_path, :class => 'btn'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
= form_for [ticket, answer] do |f|
|
2
|
+
.form-group
|
3
|
+
= f.text_area :message, :class => 'form-control textarea', :rows => 5, :required => true
|
4
|
+
- if answer.uploads.size > 0
|
5
|
+
.form-group
|
6
|
+
.uploads
|
7
|
+
- answer.uploads.each do |upload|
|
8
|
+
.file{ :class => "upload-#{upload.id}" }
|
9
|
+
%i.fa.fa-file-o
|
10
|
+
= link_to upload.file_file_name, upload.file.url, :target => "_blank"
|
11
|
+
= link_to upload_path(upload.id), :method => :delete, :remote => true do
|
12
|
+
%i.fa.fa-close
|
13
|
+
= f.fields_for :uploads, answer.uploads.build do |upload|
|
14
|
+
= render 'radesk/answers/upload_fields', :f => upload
|
15
|
+
.form-group
|
16
|
+
= link_to_add_fields f, :uploads, 'answers/upload_fields' do
|
17
|
+
%i.fa.fa-plus
|
18
|
+
Add file
|
19
|
+
.form-group
|
20
|
+
= f.submit t('radesk.ui.answers.post'), :class => 'btn'
|
21
|
+
- if radesk_current_user.radesk_admin?
|
22
|
+
= f.label :private, :class => 'beside' do
|
23
|
+
= f.check_box :private, :class => 'form-control'
|
24
|
+
= t('radesk.ui.answers.mark_as_private')
|
@@ -1,19 +1,35 @@
|
|
1
1
|
- answers.each do |answer|
|
2
|
-
.answer
|
2
|
+
.answer
|
3
3
|
.info
|
4
4
|
- if answer.private?
|
5
|
-
%strong
|
6
|
-
|
7
|
-
|
5
|
+
%strong.private
|
6
|
+
%i.fa.fa-lock
|
7
|
+
= t('radesk.ui.answers.private')
|
8
|
+
= time_ago_in_words(answer.created_at)
|
9
|
+
= t('radesk.ui.ago')
|
8
10
|
= answer.created_at.strftime("(%-d %b %k:%M)")
|
9
|
-
by
|
10
|
-
= answer.user.email
|
11
|
+
= t('radesk.ui.by')
|
12
|
+
= link_to_if radesk_current_user.try(:radesk_admin?), answer.user.email, admin_user_path(answer.user)
|
11
13
|
- if answer.has_access?(radesk_current_user)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
- if answers.first == answer
|
15
|
+
%span
|
16
|
+
= link_to edit_ticket_path(answer.ticket) do
|
17
|
+
%i.fa.fa-pencil.light
|
18
|
+
%span
|
19
|
+
= link_to ticket_path(answer.ticket), :method => :delete do
|
20
|
+
%i.fa.fa-close.light
|
21
|
+
- else
|
22
|
+
%span
|
23
|
+
= link_to edit_ticket_answer_path(answer.ticket, answer) do
|
24
|
+
%i.fa.fa-pencil.light
|
25
|
+
%span
|
26
|
+
= link_to ticket_answer_path(answer.ticket, answer), :method => :delete do
|
27
|
+
%i.fa.fa-close.light
|
18
28
|
.message
|
19
|
-
= answer.message
|
29
|
+
= answer.message
|
30
|
+
- if answer.uploads.size > 0
|
31
|
+
.uploads
|
32
|
+
- answer.uploads.each do |upload|
|
33
|
+
.file
|
34
|
+
%i.fa.fa-file-o
|
35
|
+
= link_to upload.file_file_name, upload.file.url, :target => "_blank"
|
@@ -1,7 +1,2 @@
|
|
1
1
|
.form
|
2
|
-
=
|
3
|
-
.form-group
|
4
|
-
= f.label :message
|
5
|
-
= f.text_area :message, :class => 'form-control', :rows => 10, :required => true
|
6
|
-
.form-group.text-right
|
7
|
-
= f.submit 'Save Answer', :class => 'btn'
|
2
|
+
= render 'form', :ticket => @answer.ticket, :answer => @answer
|
@@ -4,10 +4,11 @@
|
|
4
4
|
= f.label :title
|
5
5
|
= f.text_field :title, :class => 'form-control', :required => true
|
6
6
|
.form-group
|
7
|
-
= f.
|
8
|
-
|
7
|
+
= f.fields_for :answers, @ticket.answers.first do |answer_fields|
|
8
|
+
= answer_fields.label :message
|
9
|
+
= answer_fields.text_area :message, :class => 'form-control textarea', :rows => 10, :required => true
|
9
10
|
.form-group
|
10
11
|
= f.label :category_id
|
11
|
-
= f.select :category_id, Radesk::Category.all.map{ |c| [c.title, c.id] }, {}, :class => 'form-control select'
|
12
|
+
= f.select :category_id, Radesk::Category.all.map{ |c| [c.title, c.id] }, { :prompt => 'No category' }, :class => 'form-control select'
|
12
13
|
.form-group.text-right
|
13
|
-
= f.submit '
|
14
|
+
= f.submit t('radesk.ui.tickets.save'), :class => 'btn'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
%table.table
|
2
|
+
%tbody
|
3
|
+
- tickets.each do |ticket|
|
4
|
+
%tr
|
5
|
+
%td.status
|
6
|
+
%span{ :class => "ticket-status-#{ticket.id}"}
|
7
|
+
= render 'radesk/tickets/status', :ticket => ticket
|
8
|
+
%td
|
9
|
+
.title
|
10
|
+
= link_to ticket do
|
11
|
+
%strong
|
12
|
+
= ticket.title.truncate(100)
|
13
|
+
- if ticket.answers.first
|
14
|
+
%span.message
|
15
|
+
= ticket.answers.first.message.truncate(100)
|
16
|
+
%td
|
17
|
+
- if ticket.category
|
18
|
+
= link_to ticket.category.title, category_tickets_path(ticket.category), :class => 'ticket-category'
|
19
|
+
%td.created_at.text-right
|
20
|
+
= time_ago_in_words(ticket.created_at)
|
21
|
+
= t('radesk.ui.ago')
|
22
|
+
= ticket.created_at.strftime("(%-d %b %k:%M)")
|
23
|
+
= paginate tickets
|
@@ -1,26 +1,15 @@
|
|
1
1
|
- if @tickets.any?
|
2
2
|
%h1
|
3
|
-
|
4
|
-
= link_to
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
= ticket.title.truncate(100)
|
17
|
-
%span.message
|
18
|
-
= ticket.message.truncate(100)
|
19
|
-
%td
|
20
|
-
- if ticket.category
|
21
|
-
%span.ticket-category
|
22
|
-
= ticket.category.title
|
23
|
-
%td.created_at.text-right
|
24
|
-
= "#{time_ago_in_words(ticket.created_at)} ago"
|
25
|
-
= ticket.created_at.strftime("(%-d %b %k:%M)")
|
26
|
-
= paginate @tickets
|
3
|
+
= t('radesk.ui.tickets.index')
|
4
|
+
= link_to t('radesk.ui.tickets.new'), new_ticket_path, :class => 'btn pull-right'
|
5
|
+
- if params[:action] == 'category'
|
6
|
+
= t('radesk.ui.tickets.within')
|
7
|
+
= @category.title
|
8
|
+
= render 'list', :tickets => @tickets
|
9
|
+
- else
|
10
|
+
.add-something.text-center
|
11
|
+
.title
|
12
|
+
= t('radesk.ui.tickets.not_found')
|
13
|
+
.description
|
14
|
+
= t('radesk.ui.but_you_can_create')
|
15
|
+
= link_to t('radesk.ui.tickets.new'), new_ticket_path, :class => 'btn'
|
@@ -2,41 +2,10 @@
|
|
2
2
|
%span{ :class => "ticket-status-#{@ticket.id}"}
|
3
3
|
= render 'status', :ticket => @ticket
|
4
4
|
= @ticket.title
|
5
|
-
.
|
6
|
-
|
7
|
-
= "#{time_ago_in_words(@ticket.created_at)} ago"
|
8
|
-
= @ticket.created_at.strftime("(%-d %b %k:%M)")
|
9
|
-
by
|
10
|
-
= @ticket.user.email
|
11
|
-
- if radesk_current_user.try(:radesk_admin?)
|
12
|
-
%span
|
13
|
-
= link_to edit_ticket_path(@ticket) do
|
14
|
-
%i.fa.fa-pencil.light
|
15
|
-
%span
|
16
|
-
= link_to ticket_path(@ticket), :method => :delete do
|
17
|
-
%i.fa.fa-close.light
|
18
|
-
- if @ticket.category
|
19
|
-
%span.ticket-category
|
20
|
-
= @ticket.category.title
|
21
|
-
.message
|
22
|
-
= @ticket.message
|
23
|
-
|
24
|
-
- if @ticket.answers.any?
|
25
|
-
%h2
|
26
|
-
= pluralize(@answers.count, 'answer')
|
27
|
-
.answers
|
28
|
-
= render 'radesk/answers/list', :answers => @answers
|
5
|
+
.answers
|
6
|
+
= render 'radesk/answers/list', :answers => @answers
|
29
7
|
%h2
|
30
|
-
|
8
|
+
= t('radesk.ui.answers.your')
|
31
9
|
.create_answer
|
32
10
|
.form
|
33
|
-
=
|
34
|
-
.form-group
|
35
|
-
= f.text_area :message, :class => 'form-control textarea', :rows => 5, :required => true
|
36
|
-
- if radesk_current_user.radesk_admin?
|
37
|
-
.form-group.text-right
|
38
|
-
= f.label :private do
|
39
|
-
= f.check_box :private, :class => 'form-control'
|
40
|
-
Mark as private
|
41
|
-
.form-group.text-right
|
42
|
-
= f.submit 'Post Answer', :class => 'btn'
|
11
|
+
= render 'radesk/answers/form', :ticket => @ticket, :answer => @ticket.answers.build
|
@@ -0,0 +1 @@
|
|
1
|
+
$(".upload-<%= @upload.id %>").hide();
|
@@ -0,0 +1,51 @@
|
|
1
|
+
en:
|
2
|
+
radesk:
|
3
|
+
ui:
|
4
|
+
home: Home
|
5
|
+
delete: Delete
|
6
|
+
by: by
|
7
|
+
ago: ago
|
8
|
+
logged_as_admin: Logged as administrator
|
9
|
+
but_you_can_create: But you can create a new one
|
10
|
+
tickets:
|
11
|
+
index: Tickets
|
12
|
+
save: Save Ticket
|
13
|
+
new: New Ticket
|
14
|
+
not_found: No tickets found
|
15
|
+
within: within
|
16
|
+
answers:
|
17
|
+
index: Answer
|
18
|
+
private: Private
|
19
|
+
your: Your Answer
|
20
|
+
mark_as_private: Mark as private
|
21
|
+
post: Post Answer
|
22
|
+
save: Save Answer
|
23
|
+
categories:
|
24
|
+
index: Categories
|
25
|
+
edit: Edit Category
|
26
|
+
save: Save Category
|
27
|
+
new: New Category
|
28
|
+
not_found: No categories found
|
29
|
+
activities:
|
30
|
+
index: Activity Feed
|
31
|
+
ticket:
|
32
|
+
create: created ticket
|
33
|
+
update: updated ticket
|
34
|
+
destroy: destroyed ticket
|
35
|
+
open: opened ticket
|
36
|
+
close: closed ticket
|
37
|
+
answer:
|
38
|
+
create: added answer to ticket
|
39
|
+
update: updated answer to ticket
|
40
|
+
destroy: destroyed answer from ticket
|
41
|
+
activerecord:
|
42
|
+
attributes:
|
43
|
+
ticket:
|
44
|
+
title: Your Question
|
45
|
+
message: Description
|
46
|
+
category_id: Category
|
47
|
+
answer:
|
48
|
+
message: Your Answer
|
49
|
+
private: Private
|
50
|
+
category:
|
51
|
+
title: Title
|
@@ -0,0 +1,37 @@
|
|
1
|
+
zh-CN:
|
2
|
+
radesk:
|
3
|
+
ui:
|
4
|
+
home: 主页
|
5
|
+
by: 属于
|
6
|
+
ago: 前制造
|
7
|
+
logged_as_admin: 登录为管理员
|
8
|
+
but_you_can_create: 但是你可以创建新的
|
9
|
+
tickets:
|
10
|
+
index: 票
|
11
|
+
save: 保存票
|
12
|
+
new: 新票
|
13
|
+
not_found: 找不到票
|
14
|
+
answers:
|
15
|
+
index: 答案
|
16
|
+
private: 私有答案
|
17
|
+
your: 您的答案
|
18
|
+
mark_as_private: 标记为私有
|
19
|
+
post: 发表答案
|
20
|
+
save: 保存答案
|
21
|
+
categories:
|
22
|
+
index: 类别
|
23
|
+
edit: 编辑类别
|
24
|
+
save: 保存类别
|
25
|
+
new: 新类别
|
26
|
+
not_found: 未找到类别
|
27
|
+
activerecord:
|
28
|
+
attributes:
|
29
|
+
ticket:
|
30
|
+
title: 您的问题
|
31
|
+
message: 说面
|
32
|
+
category_id: 类别
|
33
|
+
answer:
|
34
|
+
message: 您的答案
|
35
|
+
private: 私有
|
36
|
+
category:
|
37
|
+
title: 标题
|
data/config/routes.rb
CHANGED
@@ -1,14 +1,23 @@
|
|
1
1
|
Radesk::Engine.routes.draw do
|
2
|
+
|
2
3
|
resources :tickets do
|
3
4
|
member do
|
4
5
|
get 'open'
|
5
6
|
get 'close'
|
6
7
|
end
|
8
|
+
collection do
|
9
|
+
get 'category/:id' => 'tickets#category', :as => :category
|
10
|
+
end
|
7
11
|
resources :answers, :except => [:index, :show, :new]
|
8
12
|
end
|
9
13
|
|
14
|
+
resources :uploads, :only => [:destroy]
|
15
|
+
|
16
|
+
|
10
17
|
namespace :admin do
|
11
18
|
resources :categories, :except => [:show]
|
19
|
+
resources :users, :only => [:show]
|
20
|
+
resources :activities, :only => :index
|
12
21
|
end
|
13
22
|
|
14
23
|
root 'tickets#index'
|