Description:
add tags
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r700:757ebc0ccd63 - - 7 files changed: 56 inserted, 29 deleted
@@ -209,6 +209,10 | |||||
|
209 | end |
|
209 | end |
|
210 | flash[:success] = "The following problems are added to the group #{group.name}: " + ok.join(', ') if ok.count > 0 |
|
210 | flash[:success] = "The following problems are added to the group #{group.name}: " + ok.join(', ') if ok.count > 0 |
|
211 | flash[:alert] = "The following problems are already in the group #{group.name}: " + failed.join(', ') if failed.count > 0 |
|
211 | flash[:alert] = "The following problems are already in the group #{group.name}: " + failed.join(', ') if failed.count > 0 |
|
|
212 | + elsif params.has_key? 'add_tags' | ||
|
|
213 | + get_problems_from_params.each do |p| | ||
|
|
214 | + p.tag_ids += params[:tag_ids] | ||
|
|
215 | + end | ||
|
212 | end |
|
216 | end |
|
213 |
|
217 | ||
|
214 | redirect_to :action => 'manage' |
|
218 | redirect_to :action => 'manage' |
@@ -300,7 +304,7 | |||||
|
300 | private |
|
304 | private |
|
301 |
|
305 | ||
|
302 | def problem_params |
|
306 | def problem_params |
|
303 | - params.require(:problem).permit(:name, :full_name, :full_score, :date_added, :available, :test_allowed,:output_only, :url, :description) |
|
307 | + params.require(:problem).permit(:name, :full_name, :full_score, :date_added, :available, :test_allowed,:output_only, :url, :description, tag_ids:[]) |
|
304 | end |
|
308 | end |
|
305 |
|
309 | ||
|
306 | end |
|
310 | end |
@@ -41,6 +41,8 | |||||
|
41 |
|
41 | ||
|
42 | # DELETE /tags/1 |
|
42 | # DELETE /tags/1 |
|
43 | def destroy |
|
43 | def destroy |
|
|
44 | + #remove any association | ||
|
|
45 | + ProblemTag.where(tag_id: @tag.id).destroy_all | ||
|
44 | @tag.destroy |
|
46 | @tag.destroy |
|
45 | redirect_to tags_url, notice: 'Tag was successfully destroyed.' |
|
47 | redirect_to tags_url, notice: 'Tag was successfully destroyed.' |
|
46 | end |
|
48 | end |
@@ -46,6 +46,7 | |||||
|
46 | %ul.dropdown-menu |
|
46 | %ul.dropdown-menu |
|
47 | = add_menu( 'Announcements', 'announcements', 'index') |
|
47 | = add_menu( 'Announcements', 'announcements', 'index') |
|
48 | = add_menu( 'Problems', 'problems', 'index') |
|
48 | = add_menu( 'Problems', 'problems', 'index') |
|
|
49 | + = add_menu( 'Tags', 'tags', 'index') | ||
|
49 | = add_menu( 'Users', 'user_admin', 'index') |
|
50 | = add_menu( 'Users', 'user_admin', 'index') |
|
50 | = add_menu( 'User Groups', 'groups', 'index') |
|
51 | = add_menu( 'User Groups', 'groups', 'index') |
|
51 | = add_menu( 'Graders', 'graders', 'list') |
|
52 | = add_menu( 'Graders', 'graders', 'list') |
@@ -12,6 +12,9 | |||||
|
12 | %label{:for => "problem_full_score"} Full score |
|
12 | %label{:for => "problem_full_score"} Full score |
|
13 | = text_field 'problem', 'full_score', class: 'form-control' |
|
13 | = text_field 'problem', 'full_score', class: 'form-control' |
|
14 | .form-group |
|
14 | .form-group |
|
|
15 | + %label{:for => "problem_full_score"} Tags | ||
|
|
16 | + = collection_select(:problem, :tag_ids, Tag.all, :id, :name, {}, {multiple: true, class: 'form-control select2'}) | ||
|
|
17 | + .form-group | ||
|
15 | %label{:for => "problem_date_added"} Date added |
|
18 | %label{:for => "problem_date_added"} Date added |
|
16 | = date_select 'problem', 'date_added', class: 'form-control' |
|
19 | = date_select 'problem', 'date_added', class: 'form-control' |
|
17 | - # TODO: these should be put in model Problem, but I can't think of |
|
20 | - # TODO: these should be put in model Problem, but I can't think of |
@@ -21,6 +21,7 | |||||
|
21 | %th Name |
|
21 | %th Name |
|
22 | %th Full name |
|
22 | %th Full name |
|
23 | %th.text-right Full score |
|
23 | %th.text-right Full score |
|
|
24 | + %th Tags | ||
|
24 | %th |
|
25 | %th |
|
25 | Submit |
|
26 | Submit |
|
26 | %sup{class: 'text-primary',data: {toggle: 'tooltip'}, title: 'Admin can always submit to any problem' } [?] |
|
27 | %sup{class: 'text-primary',data: {toggle: 'tooltip'}, title: 'Admin can always submit to any problem' } [?] |
@@ -44,6 +45,10 | |||||
|
44 | = problem.full_name #in_place_editor_field :problem, :full_name, {}, :rows=>1 |
|
45 | = problem.full_name #in_place_editor_field :problem, :full_name, {}, :rows=>1 |
|
45 | = link_to_description_if_any "[#{t 'main.problem_desc'}] <span class='glyphicon glyphicon-file'></span>".html_safe, problem |
|
46 | = link_to_description_if_any "[#{t 'main.problem_desc'}] <span class='glyphicon glyphicon-file'></span>".html_safe, problem |
|
46 | %td.text-right= problem.full_score #in_place_editor_field :problem, :full_score, {}, :rows=>1 |
|
47 | %td.text-right= problem.full_score #in_place_editor_field :problem, :full_score, {}, :rows=>1 |
|
|
48 | + %td | ||
|
|
49 | + - problem.tags.each do |t| | ||
|
|
50 | + - #%button.btn.btn-default.btn-xs= t.name | ||
|
|
51 | + %span.label.label-default= t.name | ||
|
47 | %td= link_to "Submit", direct_edit_problem_submissions_path(problem,@current_user.id), class: 'btn btn-xs btn-primary' |
|
52 | %td= link_to "Submit", direct_edit_problem_submissions_path(problem,@current_user.id), class: 'btn btn-xs btn-primary' |
|
48 | %td= problem.date_added |
|
53 | %td= problem.date_added |
|
49 | %td= toggle_button(@problem.available?, toggle_problem_path(@problem), "problem-avail-#{@problem.id}") |
|
54 | %td= toggle_button(@problem.available?, toggle_problem_path(@problem), "problem-avail-#{@problem.id}") |
@@ -49,7 +49,7 | |||||
|
49 | (You can shift-click to select a range of problems) |
|
49 | (You can shift-click to select a range of problems) |
|
50 | %ul.form-inline |
|
50 | %ul.form-inline |
|
51 | %li |
|
51 | %li |
|
52 |
- Change |
|
52 | + Change "Date added" to |
|
53 | .input-group.date |
|
53 | .input-group.date |
|
54 | = text_field_tag :date_added, class: 'form-control' |
|
54 | = text_field_tag :date_added, class: 'form-control' |
|
55 | %span.input-group-addon |
|
55 | %span.input-group-addon |
@@ -58,44 +58,53 | |||||
|
58 | |
|
58 | |
|
59 | = submit_tag 'Change', :name => 'change_date_added', class: 'btn btn-primary btn-sm' |
|
59 | = submit_tag 'Change', :name => 'change_date_added', class: 'btn btn-primary btn-sm' |
|
60 | %li |
|
60 | %li |
|
61 |
- Set |
|
61 | + Set "Available" to |
|
62 | = submit_tag 'True', :name => 'enable_problem', class: 'btn btn-primary btn-sm' |
|
62 | = submit_tag 'True', :name => 'enable_problem', class: 'btn btn-primary btn-sm' |
|
63 | = submit_tag 'False', :name => 'disable_problem', class: 'btn btn-primary btn-sm' |
|
63 | = submit_tag 'False', :name => 'disable_problem', class: 'btn btn-primary btn-sm' |
|
64 |
|
64 | ||
|
65 | - if GraderConfiguration.multicontests? |
|
65 | - if GraderConfiguration.multicontests? |
|
66 | %li |
|
66 | %li |
|
67 | - Add to |
|
67 | + Add selected problems to contest |
|
68 | = select("contest","id",Contest.all.collect {|c| [c.title, c.id]}) |
|
68 | = select("contest","id",Contest.all.collect {|c| [c.title, c.id]}) |
|
69 | = submit_tag 'Add', :name => 'add_to_contest', class: 'btn btn-primary btn-sm' |
|
69 | = submit_tag 'Add', :name => 'add_to_contest', class: 'btn btn-primary btn-sm' |
|
70 | %li |
|
70 | %li |
|
71 | - Add problems to group |
|
71 | + Add selected problems to user group |
|
72 | = select_tag "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), id: 'group_name',class: 'select2' |
|
72 | = select_tag "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), id: 'group_name',class: 'select2' |
|
73 |
- = submit_tag 'Add', name: 'add_group', class: 'btn btn- |
|
73 | + = submit_tag 'Add', name: 'add_group', class: 'btn btn-primary' |
|
74 | - |
|
74 | + %li |
|
|
75 | + Add the following tags to the selected problems | ||
|
|
76 | + = select_tag "tag_ids", options_from_collection_for_select( Tag.all, 'id','name'), id: 'tags_name',class: 'select2', multiple: true, data: {placeholder: 'Select tags by clicking', width: "200px"} | ||
|
|
77 | + = submit_tag 'Add', name: 'add_tags', class: 'btn btn-primary' | ||
|
75 |
|
78 | ||
|
76 | - %table.table.table-hover |
|
79 | + %table.table.table-hover.datatable |
|
77 | - %tr{style: "text-align: left;"} |
|
80 | + %thead |
|
78 | - %th= check_box_tag 'select_all' |
|
81 | + %tr{style: "text-align: left;"} |
|
79 | - %th Name |
|
82 | + %th= check_box_tag 'select_all' |
|
80 |
- %th |
|
83 | + %th Name |
|
81 |
- %th |
|
84 | + %th Full name |
|
82 |
- %th |
|
85 | + %th Tags |
|
83 | - - if GraderConfiguration.multicontests? |
|
86 | + %th Available |
|
84 |
- %th |
|
87 | + %th Date added |
|
|
88 | + - if GraderConfiguration.multicontests? | ||
|
|
89 | + %th Contests | ||
|
85 |
|
90 | ||
|
86 | - - num = 0 |
|
91 | + %tbody |
|
87 | - - for problem in @problems |
|
92 | + - num = 0 |
|
88 | - - num += 1 |
|
93 | + - for problem in @problems |
|
89 | - %tr{:id => "row-prob-#{problem.id}", :name=> "prob-#{problem.id}"} |
|
94 | + - num += 1 |
|
90 | - %td= check_box_tag "prob-#{problem.id}-#{num}" |
|
95 | + %tr{:id => "row-prob-#{problem.id}", :name=> "prob-#{problem.id}"} |
|
91 | - %td= problem.name |
|
96 | + %td= check_box_tag "prob-#{problem.id}-#{num}" |
|
92 |
- %td= problem. |
|
97 | + %td= problem.name |
|
93 |
- %td= problem. |
|
98 | + %td= problem.full_name |
|
94 | - %td= problem.date_added |
|
||
|
95 | - - if GraderConfiguration.multicontests? |
|
||
|
96 | %td |
|
99 | %td |
|
97 |
- - problem. |
|
100 | + - problem.tags.each do |t| |
|
98 | - = "(#{contest.name} [#{link_to 'x', :action => 'remove_contest', :id => problem.id, :contest_id => contest.id }])" |
|
101 | + %span.label.label-default= t.name |
|
|
102 | + %td= problem.available | ||
|
|
103 | + %td= problem.date_added | ||
|
|
104 | + - if GraderConfiguration.multicontests? | ||
|
|
105 | + %td | ||
|
|
106 | + - problem.contests.each do |contest| | ||
|
|
107 | + = "(#{contest.name} [#{link_to 'x', :action => 'remove_contest', :id => problem.id, :contest_id => contest.id }])" | ||
|
99 |
|
108 | ||
|
100 | :javascript |
|
109 | :javascript |
|
101 | $('.input-group.date').datetimepicker({ |
|
110 | $('.input-group.date').datetimepicker({ |
@@ -104,4 +113,6 | |||||
|
104 | widgetPositioning: {horizontal: 'auto', vertical: 'bottom'}, |
|
113 | widgetPositioning: {horizontal: 'auto', vertical: 'bottom'}, |
|
105 |
|
114 | ||
|
106 | }); |
|
115 | }); |
|
107 | - |
|
116 | + $('.datatable').DataTable({ |
|
|
117 | + paging: false | ||
|
|
118 | + }); |
You need to be logged in to leave comments.
Login now