# HG changeset patch # User Nattee Niparnan # Date 2014-09-23 11:31:59 # Node ID 2cbe975cbc599cc091567fabef600ab65eecc970 # Parent ceb099688df799424c87e44e741e736c92a5adaf add jquery to manage problem, now we can select a range of problem diff --git a/app/assets/javascripts/new.js b/app/assets/javascripts/local_jquery.js rename from app/assets/javascripts/new.js rename to app/assets/javascripts/local_jquery.js diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -12,7 +12,7 @@ @user = User.find(session[:user_id]) @messages = Message.find_all_sent_by_user(@user) end - + def console @user = User.find(session[:user_id]) @messages = Message.find_all_system_unreplied_messages diff --git a/app/controllers/problems_controller.rb b/app/controllers/problems_controller.rb --- a/app/controllers/problems_controller.rb +++ b/app/controllers/problems_controller.rb @@ -164,8 +164,12 @@ def do_manage if params.has_key? 'change_date_added' change_date_added - else params.has_key? 'add_to_contest' + elsif params.has_key? 'add_to_contest' add_to_contest + elsif params.has_key? 'enable_problem' + set_available(true) + elsif params.has_key? 'disable_problem' + set_available(false) end redirect_to :action => 'manage' end @@ -234,11 +238,19 @@ end end + def set_available(avail) + problems = get_problems_from_params + problems.each do |p| + p.available = avail + p.save + end + end + def get_problems_from_params problems = [] params.keys.each do |k| if k.index('prob-')==0 - name, id = k.split('-') + name, id, order = k.split('-') problems << Problem.find(id) end end diff --git a/app/models/message.rb b/app/models/message.rb --- a/app/models/message.rb +++ b/app/models/message.rb @@ -21,7 +21,7 @@ Message.build_replying_message_hierarchy messages, replied_messages return messages end - + def self.find_all_system_unreplied_messages self.find(:all, :conditions => 'ISNULL(receiver_id) ' + diff --git a/app/views/problems/manage.html.haml b/app/views/problems/manage.html.haml --- a/app/views/problems/manage.html.haml +++ b/app/views/problems/manage.html.haml @@ -1,5 +1,38 @@ - content_for :head do = stylesheet_link_tag 'problems' + = javascript_include_tag 'local_jquery' + +:javascript + $(document).ready( function() { + function shiftclick(start,stop,value) { + $('tr input').each( function(id,input) { + var $input=$(input); + var iid=parseInt($input.attr('id').split('-')[2]); + if(iid>=start&&iid<=stop){ + $input.prop('checked',value) + } + }); + } + + $('tr input').click( function(e) { + if (e.shiftKey) { + stop = parseInt($(this).attr('id').split('-')[2]); + var orig_stop = stop + if (typeof start !== 'undefined') { + if (start > stop) { + var tmp = start; + start = stop; + stop = tmp; + } + shiftclick(start,stop,$(this).is(':checked') ) + } + start = orig_stop + } else { + start = parseInt($(this).attr('id').split('-')[2]); + } + }); + }); + %h1 Manage problems @@ -7,14 +40,19 @@ = form_tag :action=>'do_manage' do .submitbox - What do you want to do? + What do you want to do to the selected problem? %br/ + (You can shift-click to select a range of problems) %ul %li Change date added to = select_date Date.current, :prefix => 'date_added'     = submit_tag 'Change', :name => 'change_date_added' + %li + Set available to + = submit_tag 'True', :name => 'enable_problem' + = submit_tag 'False', :name => 'disable_problem' - if GraderConfiguration.multicontests? %li @@ -23,19 +61,23 @@ = submit_tag 'Add', :name => 'add_to_contest' %table - %tr - %th/ + %tr{style: "text-align: left;"} + %th= check_box_tag 'select_all' %th Name %th Full name + %th Available %th Date added - if GraderConfiguration.multicontests? %th Contests + - num = 0 - for problem in @problems + - num += 1 %tr{:id => "row-prob-#{problem.id}", :name=> "prob-#{problem.id}"} - %td= check_box_tag "prob-#{problem.id}" + %td= check_box_tag "prob-#{problem.id}-#{num}" %td= problem.name %td= problem.full_name + %td= problem.available %td= problem.date_added - if GraderConfiguration.multicontests? %td diff --git a/app/views/report/login_stat.html.haml b/app/views/report/login_stat.html.haml --- a/app/views/report/login_stat.html.haml +++ b/app/views/report/login_stat.html.haml @@ -1,6 +1,6 @@ - content_for :header do = stylesheet_link_tag 'tablesorter-theme.cafe' - = javascript_include_tag 'new' + = javascript_include_tag 'local_jquery' %script{:type=>"text/javascript"} $(function () { diff --git a/app/views/report/submission_stat.html.haml b/app/views/report/submission_stat.html.haml --- a/app/views/report/submission_stat.html.haml +++ b/app/views/report/submission_stat.html.haml @@ -1,5 +1,5 @@ - content_for :header do - = javascript_include_tag 'new' + = javascript_include_tag 'local_jquery' %script{:type=>"text/javascript"} $(function () { diff --git a/app/views/user_admin/user_stat.html.haml b/app/views/user_admin/user_stat.html.haml --- a/app/views/user_admin/user_stat.html.haml +++ b/app/views/user_admin/user_stat.html.haml @@ -1,5 +1,5 @@ - content_for :header do - = javascript_include_tag 'new' + = javascript_include_tag 'local_jquery' = stylesheet_link_tag 'tablesorter-theme.cafe' %script{:type=>"text/javascript"} diff --git a/app/views/user_admin/user_stat_max.html.haml b/app/views/user_admin/user_stat_max.html.haml deleted file mode 100644 --- a/app/views/user_admin/user_stat_max.html.haml +++ /dev/null @@ -1,50 +0,0 @@ -- content_for :header do - = javascript_include_tag 'new' - = stylesheet_link_tag 'tablesorter-theme.cafe' - -%script{:type=>"text/javascript"} - $(function () { - $('#since_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} ); - $('#until_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} ); - $('#my_table').tablesorter({widgets: ['zebra']}); - }); - -%h1 User grading results -%h2 Show max scores in submission range - -- if @problem and @problem.errors - =error_messages_for 'problem' - -= render partial: 'submission_range' - -%p= link_to '[Show only latest submissions]', controller: :user_admin, action: :user_stat - -%table.tablesorter-cafe#my_table{style: 'width:auto;'} - %thead - %tr - %th User - %th Name - %th Activated? - %th Logged in - %th Contest(s) - - @problems.each do |p| - %th= p.name - %th Total - %th Passed - %tbody - - @scorearray.each do |sc| - %tr{class: cycle('info-even','info-odd')} - - total,num_passed = 0,0 - - sc.each_index do |i| - - if i == 0 - %td= sc[i].login - %td= sc[i].full_name - %td= sc[i].activated - %td= sc[i].try(:contest_stat).try(:started_at)!=nil ? 'yes' : 'no' - %td= sc[i].contests.collect {|c| c.name}.join(', ') - - else - %td= sc[i][0] - - total += sc[i][0] - - num_passed += 1 if sc[i][1] - %td= total - %td= num_passed diff --git a/app/views/users/profile.html.haml b/app/views/users/profile.html.haml --- a/app/views/users/profile.html.haml +++ b/app/views/users/profile.html.haml @@ -1,5 +1,5 @@ - content_for :header do - = javascript_include_tag 'new' + = javascript_include_tag 'local_jquery' %script{:type=>"text/javascript"} $(function () { diff --git a/config/application.rb.SAMPLE b/config/application.rb.SAMPLE --- a/config/application.rb.SAMPLE +++ b/config/application.rb.SAMPLE @@ -60,6 +60,6 @@ config.assets.version = '1.0' config.assets.precompile += ['announcement_refresh.js','effects.js','site_update.js','graders.css','problems.css'] - config.assets.precompile += ['new.js','tablesorter-theme.cafe.css'] + config.assets.precompile += ['local_jquery.js','tablesorter-theme.cafe.css'] end end