diff --git a/app/controllers/concerns/authentication.rb b/app/controllers/concerns/authentication.rb index 6ef0c83..cbe69f2 100644 --- a/app/controllers/concerns/authentication.rb +++ b/app/controllers/concerns/authentication.rb @@ -51,6 +51,7 @@ module Authentication end def current_user + return unless Current.session return unless Current.session[:user_id] User.find(Current.session[:user_id]) end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 27e64b1..da4a368 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -3,6 +3,7 @@ class UsersController < ApplicationController def index @title = "All users" + @users = User.all end def edit @@ -11,7 +12,7 @@ class UsersController < ApplicationController def update if @user.update(user_params) - redirect_to @user + redirect_to contests_path else render :edit, status: :unprocessable_entity end @@ -22,6 +23,18 @@ class UsersController < ApplicationController end def new + @title = "New user" + @user = User.new() + end + + def create + @user = User.new(user_params) + if @user.save + redirect_to users_path + else + @title = "New user" + render :new, status: :unprocessable_entity + end end def destroy @@ -34,6 +47,6 @@ class UsersController < ApplicationController end def user_params - params.expect(user: [ :username, :email_address ]) + params.expect(user: [ :username, :email_address, :password ]) end end diff --git a/app/views/layouts/authenticated.html.slim b/app/views/layouts/authenticated.html.slim index 78a9056..cc1619c 100644 --- a/app/views/layouts/authenticated.html.slim +++ b/app/views/layouts/authenticated.html.slim @@ -7,6 +7,9 @@ html - if @current_user .float-end style="margin-top: -8px;" nav.navbar.bg-body-primary + - if @current_user.admin + a.navbar-brand href=users_path + | Users a.navbar-brand href=contests_path | Home a.navbar-brand href=user_path(@current_user) diff --git a/app/views/users/_form.html.slim b/app/views/users/_form.html.slim index d9e149b..5da6344 100644 --- a/app/views/users/_form.html.slim +++ b/app/views/users/_form.html.slim @@ -1,4 +1,6 @@ -= form_with model: user do |form| += form_with model: user, method: method do |form| + - if method == :patch + h4 General settings .row.mb-3 .col .input-group @@ -9,7 +11,23 @@ .row.mb-3 .col .form-floating - = form.text_field :email_address, autocomplete: "off", class: "form-control", type: "email" + = form.text_field :email_address, autocomplete: "off", class: "form-control" = form.label :email_address, class: "required" - div - = form.submit "Save", class: "btn btn-primary" \ No newline at end of file + - if method == :post + .row.mb-3 + .col + .form-floating + = form.password_field :password, autocomplete: "off", class: "form-control" + = form.label :password, class: "required" + = form.submit "Save", class: "btn btn-primary" + + - if method == :patch + h4.mt-5 Change password + = form_with model: user, method: method do |form| + .row.mb-3 + .col + .form-floating + = form.password_field :password, autocomplete: "off", class: "form-control" + = form.label :password, class: "required" + | New password + = form.submit "Save new password", class: "btn btn-primary" \ No newline at end of file diff --git a/app/views/users/edit.html.slim b/app/views/users/edit.html.slim index 4562a6b..ad1f239 100644 --- a/app/views/users/edit.html.slim +++ b/app/views/users/edit.html.slim @@ -1 +1 @@ -= render "form", user: @user \ No newline at end of file += render "form", user: @user, method: :patch \ No newline at end of file diff --git a/app/views/users/index.html.slim b/app/views/users/index.html.slim index e69de29..14c2ae1 100644 --- a/app/views/users/index.html.slim +++ b/app/views/users/index.html.slim @@ -0,0 +1,27 @@ +table.table.table-striped.table-hover + thead + tr + th scope="col" + | Id + th scope="col" + | Name + th scope="col" + | Admin? + th scope="col" + | # contests + tbody + - @users.each do |user| + tr scope="row" + td + = user.id + td + = user.username + td + = user.admin ? "Yes" : "No" + td + = user.contests.length + +.row + .col + a.btn.btn-primary href=new_user_path + | New user \ No newline at end of file diff --git a/app/views/users/new.html.slim b/app/views/users/new.html.slim index 4562a6b..7210f84 100644 --- a/app/views/users/new.html.slim +++ b/app/views/users/new.html.slim @@ -1 +1 @@ -= render "form", user: @user \ No newline at end of file += render "form", user: @user, method: :post \ No newline at end of file