diff --git a/Gemfile b/Gemfile --- a/Gemfile +++ b/Gemfile @@ -59,15 +59,15 @@ #syntax highlighter gem 'rouge' -#add bootstrap +#bootstrap add-ons gem 'bootstrap-sass', '~> 3.2.0' gem 'bootstrap-switch-rails' gem 'bootstrap-toggle-rails' gem 'autoprefixer-rails' - -#bootstrap sortable gem 'momentjs-rails' gem 'rails_bootstrap_sortable' +gem 'bootstrap3-datetimepicker-rails', '~> 4.17.47' +gem 'jquery-datatables-rails' #----------- user interface ----------------- #select 2 diff --git a/Gemfile.lock b/Gemfile.lock --- a/Gemfile.lock +++ b/Gemfile.lock @@ -65,6 +65,8 @@ sass (~> 3.2) bootstrap-switch-rails (3.3.3) bootstrap-toggle-rails (2.2.1.0) + bootstrap3-datetimepicker-rails (4.17.47) + momentjs-rails (>= 2.8.1) builder (3.2.2) coffee-rails (4.2.1) coffee-script (>= 2.2.0) @@ -97,6 +99,11 @@ i18n (0.7.0) in_place_editing (1.2.0) jquery-countdown-rails (2.0.2) + jquery-datatables-rails (3.4.0) + actionpack (>= 3.1) + jquery-rails + railties (>= 3.1) + sass-rails jquery-rails (4.2.1) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) @@ -204,6 +211,7 @@ bootstrap-sass (~> 3.2.0) bootstrap-switch-rails bootstrap-toggle-rails + bootstrap3-datetimepicker-rails (~> 4.17.47) coffee-rails dynamic_form fuzzy-string-match @@ -211,6 +219,7 @@ haml-rails in_place_editing jquery-countdown-rails + jquery-datatables-rails jquery-rails jquery-tablesorter jquery-timepicker-addon-rails @@ -232,4 +241,4 @@ yaml_db BUNDLED WITH - 1.13.6 + 1.15.4 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -12,10 +12,14 @@ // //= require jquery //= require jquery_ujs +//= require dataTables/jquery.dataTables +//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap //= require jquery-ui //= require bootstrap-sprockets //= require moment +//= require moment/th //= require bootstrap-sortable +//= require bootstrap-datetimepicker //= require select2 //= require ace-rails-ap //= require ace/mode-c_cpp diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -33,6 +33,8 @@ //@import bootstrap3-switch @import "bootstrap-toggle"; @import "bootstrap-sortable"; +@import "bootstrap-datetimepicker"; +@import "dataTables/bootstrap/3/jquery.dataTables.bootstrap"; //bootstrap navbar color (from) $bgDefault: #19197b; diff --git a/app/controllers/login_controller.rb b/app/controllers/login_controller.rb --- a/app/controllers/login_controller.rb +++ b/app/controllers/login_controller.rb @@ -7,32 +7,38 @@ end def login - if (!GraderConfiguration['right.bypass_agreement']) and (!params[:accept_agree]) + user = User.authenticate(params[:login], params[:password]) + unless user + flash[:notice] = 'Wrong password' + redirect_to :controller => 'main', :action => 'login' + return + end + + if (!GraderConfiguration['right.bypass_agreement']) and (!params[:accept_agree]) and !user.admin? flash[:notice] = 'You must accept the agreement before logging in' redirect_to :controller => 'main', :action => 'login' - elsif user = User.authenticate(params[:login], params[:password]) - session[:user_id] = user.id - session[:admin] = user.admin? + return + end + + #process logging in + session[:user_id] = user.id + session[:admin] = user.admin? - # clear forced logout flag for multicontests contest change - if GraderConfiguration.multicontests? - contest_stat = user.contest_stat - if contest_stat.respond_to? :forced_logout - if contest_stat.forced_logout - contest_stat.forced_logout = false - contest_stat.save - end + # clear forced logout flag for multicontests contest change + if GraderConfiguration.multicontests? + contest_stat = user.contest_stat + if contest_stat.respond_to? :forced_logout + if contest_stat.forced_logout + contest_stat.forced_logout = false + contest_stat.save end end - - #save login information - Login.create(user_id: user.id, ip_address: request.remote_ip) + end - redirect_to :controller => 'main', :action => 'list' - else - flash[:notice] = 'Wrong password' - redirect_to :controller => 'main', :action => 'login' - end + #save login information + Login.create(user_id: user.id, ip_address: request.remote_ip) + + redirect_to :controller => 'main', :action => 'list' end def site_login diff --git a/app/controllers/user_admin_controller.rb b/app/controllers/user_admin_controller.rb --- a/app/controllers/user_admin_controller.rb +++ b/app/controllers/user_admin_controller.rb @@ -24,6 +24,7 @@ @users = User.paginate :page => params[:page] @paginated = true end + @users = User.all @hidden_columns = ['hashed_password', 'salt', 'created_at', 'updated_at'] @contests = Contest.enabled end diff --git a/app/views/user_admin/index.html.haml b/app/views/user_admin/index.html.haml --- a/app/views/user_admin/index.html.haml +++ b/app/views/user_admin/index.html.haml @@ -56,17 +56,17 @@ = link_to "[#{contest.name}]", :action => 'contests', :id => contest.id = link_to "[no contest]", :action => 'contests', :id => 'none' -Total #{@user_count} users | -- if !@paginated - Display all users. - \#{link_to '[show in pages]', :action => 'index', :page => '1'} -- else - Display in pages. - \#{link_to '[display all]', :action => 'index', :page => 'all'} | - \#{will_paginate @users, :container => false} +-# Total #{@user_count} users | +-# - if !@paginated +-# Display all users. +-# \#{link_to '[show in pages]', :action => 'index', :page => '1'} +-# - else +-# Display in pages. +-# \#{link_to '[display all]', :action => 'index', :page => 'all'} | +-# \#{will_paginate @users, :container => false} -%table.table.table-hover.table-condense +%table.table.table-hover.table-condense.datatable %thead %th Login %th Full name @@ -99,3 +99,8 @@ %br/ = link_to '+ New user', { :action => 'new' }, { class: 'btn btn-success '} = link_to '+ New list of users', { :action => 'new_list' }, { class: 'btn btn-success '} + +:javascript + $('.datatable').DataTable({ + 'pageLength': 50 + });