diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -14,7 +14,6 @@ :register, :forget, :retrieve_password] - before_action :check_valid_login, :profile_authorization, only: [:profile] before_action :admin_authorization, only: [:stat, :toggle_activate, :toggle_enable] @@ -30,16 +29,25 @@ end end + # edit logged in user profile + def profile + if !GraderConfiguration['system.user_setting_enabled'] + redirect_to :controller => 'main', :action => 'list' + else + @user = current_user; + end + end + def chg_passwd user = User.find(session[:user_id]) - user.password = params[:passwd] - user.password_confirmation = params[:passwd_verify] + user.password = params[:password] + user.password_confirmation = params[:password_confirmation] if user.save flash[:notice] = 'password changed' else flash[:notice] = 'Error: password changing failed' end - redirect_to :action => 'index' + redirect_to :action => 'profile' end def new @@ -215,5 +223,4 @@ def user_params params.require(:user).permit(:login, :full_name, :email) end - end diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -74,7 +74,7 @@ = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-question-sign')}".html_safe, 'main', 'help') = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-comment')}".html_safe, 'messages', 'index', {title: I18n.t('menu.messages'), data: {toggle: 'tooltip'}}) - if GraderConfiguration['system.user_setting_enabled'] - = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-cog')}".html_safe, 'users', 'index', {title: I18n.t('menu.settings'), data: {toggle: 'tooltip'}}) + = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-cog', id: 'user_profile')}".html_safe, 'users', 'profile', {title: I18n.t('menu.settings'), data: {toggle: 'tooltip'}}) = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-log-out')} #{@current_user.full_name}".html_safe, 'main', 'login', {title: I18n.t('menu.log_out'), data: {toggle: 'tooltip'}}) / 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,14 +1,12 @@ = simple_form_for(@user) do |f| = f.error_notification - .row - .col-md-6.col-md-offset-2 - = 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-success' - = link_to 'Cancel', :back, class: 'btn btn-default' + = 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' diff --git a/app/views/user_admin/edit.html.haml b/app/views/user_admin/edit.html.haml --- a/app/views/user_admin/edit.html.haml +++ b/app/views/user_admin/edit.html.haml @@ -1,4 +1,9 @@ -%h1 Editing user -= simple_form_for @user, url: user_admin_path(@user) do |f| - = render partial: 'form', local: f +.container-fluid + .row + .col-md-6 + %h1 Editing user + .row + .col-md-6 + = simple_form_for @user, url: user_admin_path(@user) do |f| + = render partial: 'form', local: f diff --git a/app/views/users/index.html.haml b/app/views/users/profile.html.haml rename from app/views/users/index.html.haml rename to app/views/users/profile.html.haml --- a/app/views/users/index.html.haml +++ b/app/views/users/profile.html.haml @@ -1,36 +1,24 @@ -= user_title_bar(@user) - -%h1 Your account settings - --#%p - -#You can edit your alias and e-mails. Just click on the text and edit it. -%table.table.table-bordered{:style => "width:30%"} - %tr - %th Login - %td= @user.login - %tr - %th Full name - %td= @user.full_name - -#%tr - -#%th.uinfo Alias - -#%td.uinfo= in_place_editor_field :user, 'alias_for_editing', {}, :rows => 1 - -#%tr - -#%th.uinfo E-mail - -#%td.uinfo= in_place_editor_field :user, 'email_for_editing', {}, :rows => 1 - %tr - %th Password - %td - = form_tag :action => 'chg_passwd', :method => 'post' do - %table - %tr - %td - %input{:type => "password", :class => "form-control", :name => "passwd", :id => "passwd"} - %td (new) - %tr - %td - %input{:type => "password", :class => "form-control", :name => "passwd_verify", :id => "passwd_verify"} - %td (verify) - %tr - %td{:colspan => "2"} - %input{:type => "button", :class => "btn btn-default", :name => "commit", :value => "Change Password"} +.container-fluid + = form_tag :action => 'chg_passwd', :method => 'post' do + .row + .col-md-6 + %h1 Your account settings + .form-group + %label{:for => "login"} Login + =@user.login + .form-group + %label{:for => "full_name"} Full name + =@user.full_name + .form-group + %label{:for => "password"} Password + =password_field_tag :password, nil, class: 'form-control' + .form-group + %label{:for => "password_confirmation"} Password confirmation + =password_field_tag :password_confirmation, nil, class: 'form-control' + .row + .col-md-6 + =submit_tag 'Edit', class: 'btn btn-primary' + + + diff --git a/config/routes.rb b/config/routes.rb --- a/config/routes.rb +++ b/config/routes.rb @@ -72,6 +72,10 @@ get 'toggle_activate', 'toggle_enable' get 'stat' end + collection do + get 'profile' + post 'chg_passwd' + end end resources :submissions do diff --git a/test/system/users_test.rb b/test/system/users_test.rb --- a/test/system/users_test.rb +++ b/test/system/users_test.rb @@ -93,6 +93,25 @@ assert_current_path login_main_path end + test "login then change password" do + newpassword = '1234asdf' + login 'john', 'hello' + visit profile_users_path + + fill_in 'password', with: newpassword + fill_in 'password_confirmation', with: newpassword + + click_on 'Edit' + + visit logout_main_path + login 'john', 'hello' + assert_text 'Wrong password' + + login 'john', newpassword + assert_text "MAIN" + assert_text "Submission" + end + def login(username,password) visit root_path fill_in "Login", with: username