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 @@ -11,6 +11,7 @@ @users = User.all @hidden_columns = ['hashed_password', 'salt', 'created_at', 'updated_at'] @contests = Contest.enabled + @user = User.new end def active diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -209,14 +209,4 @@ BOOTSTRAP_FLASH_MSG.fetch(flash_type.to_sym, flash_type.to_s) end - def flash_messages - flash.each do |msg_type, message| - concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} fade in") do - concat content_tag(:button, 'x', class: "close", data: { dismiss: 'alert' }) - concat message - end) - end - nil - end - end diff --git a/app/javascript/application.js b/app/javascript/application.js --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -49,5 +49,8 @@ import 'custom' +//trigger import map ready console.log('application.js ready') - +window.importmapScriptsLoaded = true +const import_map_loaded = new CustomEvent('import-map-loaded', { }); +document.dispatchEvent(import_map_loaded); diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -30,5 +30,8 @@ /= content_tag(:p,flash[:notice],class: 'alert alert-success') if flash[:notice]!=nil .container-fluid - = flash_messages + - flash.each do |msg_type, message| + .alert.alert-dismissible.fade.show{class: bootstrap_class_for(msg_type)} + = message + %button.btn-close{type: 'button', 'data-bs-dismiss': :alert} = yield diff --git a/app/views/user_admin/_form.html.haml b/app/views/user_admin/_form.html.haml --- a/app/views/user_admin/_form.html.haml +++ b/app/views/user_admin/_form.html.haml @@ -1,12 +1,20 @@ = simple_form_for(@user) do |f| = f.error_notification - = f.input :login, label: 'Login' - = f.input :full_name, label: 'Full name' - = f.input :password - = f.input :password_confirmation - = f.input :email - = f.input :alias - = f.input :remark - = f.button :submit, class: 'btn btn-primary' - = link_to 'Cancel', :back, class: 'btn btn-default' + .mb-2 + = f.input :login, label: 'Login' + .mb-2 + = f.input :full_name, label: 'Full name' + .mb-2 + = f.input :password + .mb-2 + = f.input :password_confirmation + .mb-2 + = f.input :email + .mb-2 + = f.input :alias + .mb-2 + = f.input :remark + .mb-2 + = f.button :submit, class: 'btn btn-primary' + = link_to 'Cancel', :back, class: 'btn btn-secondary' 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 @@ -1,51 +1,44 @@ %h1 Users -.card.border-primary - .card-header.text-bg-primary.border-primary +.card.border-success.mb-3 + .card-header.text-bg-success.border-success Quick Add .card-body - = form_with url: 'asd', class: 'row row-cols-lg-auto g-3 align-items-center' do |f| + = form_with url: user_admin_index_path, scope: :user, class: 'row row-cols-lg-auto g-3 align-items-center' do |f| .col-12 - = f.label 'user_login', 'Login' - = f.text_field 'login', :size => 10,class: 'form-control' + = f.text_field 'login', :size => 10,class: 'form-control', placeholder: 'login' .form-group - = f.label 'user_full_name', 'Full Name' - = f.text_field 'full_name', :size => 10,class: 'form-control' + = f.text_field 'full_name', :size => 10,class: 'form-control', placeholder: 'full name' .form-group - = f.label 'user_password', 'Password' - = f.text_field 'password', :size => 10,class: 'form-control' + = f.password_field 'password', :size => 10,class: 'form-control', placeholder: 'password' .form-group - = f.label 'user_password_confirmation', 'Confirm' - = f.text_field 'password_confirmation', :size => 10,class: 'form-control' + = f.password_field 'password_confirmation', :size => 10,class: 'form-control', placeholder: 'password confirmation' .form-group - = f.label 'user_email', 'email' - = f.text_field 'email', :size => 10,class: 'form-control' - =submit_tag "Create", class: 'btn btn-primary align-items-bottom' + = f.text_field 'email', :size => 10,class: 'form-control', placeholder: 'email' + =submit_tag "Create", class: 'btn btn-success align-items-bottom' -.panel.panel-primary - .panel-title.panel-heading +.card.border-success.mb-3 + .card-header.text-bg-success.border-success Import from site management - .panel-body - = form_tag({:action => 'import'}, :multipart => true,class: 'form form-inline') do - .form-group - = label_tag :file, 'File:' - .input-group - %span.input-group-btn - %span.btn.btn-default.btn-file - Browse - = file_field_tag 'file' - = text_field_tag '' , nil, {readonly: true, class: 'form-control'} - = submit_tag 'Submit', class: 'btn btn-default' + .card-body + = form_with url: import_user_admin_index_path, :multipart => true do |f| + .row + .col-auto + = f.label :file, 'File:', class: 'col-form-label' + .col-auto + = f.file_field :file, class: 'form-control' + .col-auto + = f.submit 'Submit', class: 'btn btn-secondary' %p = link_to '+ New user', { :action => 'new' }, { class: 'btn btn-success '} = link_to '+ New list of users', { :action => 'new_list' }, { class: 'btn btn-success '} - = link_to 'Bulk Manage', { action: :bulk_manage} , { class: 'btn btn-default btn-info'} - = link_to 'View administrators',{ :action => 'admin'}, { class: 'btn btn-default '} - = link_to 'Random passwords',{ :action => 'random_all_passwords'}, { class: 'btn btn-default '} - = link_to 'View active users',{ :action => 'active'}, { class: 'btn btn-default '} - = link_to 'Mass mailing',{ :action => 'mass_mailing'}, { class: 'btn btn-default '} + = link_to 'Bulk Manage', { action: :bulk_manage} , { class: 'btn btn-secondary btn-info'} + = link_to 'View administrators',{ :action => 'admin'}, { class: 'btn btn-secondary '} + = link_to 'Random passwords',{ :action => 'random_all_passwords'}, { class: 'btn btn-secondary '} + = link_to 'View active users',{ :action => 'active'}, { class: 'btn btn-secondary '} + = link_to 'Mass mailing',{ :action => 'mass_mailing'}, { class: 'btn btn-secondary '} - if GraderConfiguration.multicontests? %br/ @@ -101,6 +94,8 @@ = link_to '+ New list of users', { :action => 'new_list' }, { class: 'btn btn-success '} :javascript - $('.datatable').DataTable({ - 'pageLength': 50 - }); + $(document).on('import-map-loaded',(e) => { + $('.datatable').DataTable({ + 'pageLength': 50 + }); + }) diff --git a/app/views/user_admin/new_list.html.haml b/app/views/user_admin/new_list.html.haml --- a/app/views/user_admin/new_list.html.haml +++ b/app/views/user_admin/new_list.html.haml @@ -2,12 +2,26 @@ .row .col-md-6 %h1 Adding list of users - .row + .row.my-3 .col-md-6 - .panel.panel-default - .panel-heading - .panel-title Info - .panel-body + = form_with url: create_from_list_user_admin_index_path do |f| + .row.align-items-center.mb-3 + .col-auto + = f.submit 'Create following users',class: 'btn btn-success' + .col-auto + .form-check + = f.check_box :add_to_group, class: 'form-check-input' + = f.label :add_to_group, 'Also add these users to the following group', class: 'form-check-label' + .col-4 + = f.select "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), {}, class: 'select2 form-control' + .row.mb-3 + .col-12 + = f.text_area :user_list, value: nil, class: 'form-control', style: 'height: 30rem' + .col-md-6 + .card.card-default + .card-header + .card-title Info + .card-body %ul %li List of user information in this format: @@ -35,20 +49,8 @@ %pre user1,Somchai Jaidee, will create (or update) a user with login "user1" and and setting the fullname "Somchai Jaidee". No change is made to the password unless this is a new user. If this is a new user, a random password will be generated. +:javascript + $(document).on('import-map-loaded',(e) => { + $('.select2').select2() + }); - .row - .col-md-6 - = form_tag :action => 'create_from_list' do - .form-group - = submit_tag 'Create following users',class: 'btn btn-success' - .form-group - .div.checkbox - %label - = check_box_tag :add_to_group - Also add these users to the following group - = select_tag "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), id: 'group_name',class: 'select2' - .form-group - = text_area_tag 'user_list', nil, :rows => 50, :cols => 80 - .col-md-6 - - diff --git a/config/initializers/new_framework_defaults_5_2.rb b/config/initializers/new_framework_defaults_5_2.rb --- a/config/initializers/new_framework_defaults_5_2.rb +++ b/config/initializers/new_framework_defaults_5_2.rb @@ -35,4 +35,4 @@ # Rails.application.config.active_support.use_sha1_digests = true # Make `form_with` generate id attributes for any generated HTML tags. -# Rails.application.config.action_view.form_with_generates_ids = true +Rails.application.config.action_view.form_with_generates_ids = true