diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 82fc778cc7f93a5f6e5916f7fe5def2da9ec3e15..5971b9647fe308e95d3dde1d7547b620fb20f1cc 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -31,8 +31,10 @@ } .error_message { + margin-top: 0.5rem; font-size: 1rem; font-weight: 300; + background-color: #f8d7da !important; } .content, .notice, .alert { background-color: rgb(54, 56, 54); @@ -43,6 +45,9 @@ .footer { background-color: blue; } +.nav-masthead { + margin-bottom: 0.5rem; +} .nav-masthead .nav-link { padding: .25rem 0; @@ -58,14 +63,21 @@ } .nav-masthead .nav-link + .nav-link { - margin-left: 1rem; + margin-left: 0.5rem; + margin-right: 0.5rem; } .nav-masthead .active { color: #fff; border-bottom-color: #fff; + margin-left: 0.5rem; + margin-right: 0.5rem; } .white-text { color:#fff; } + +.alert { + margin-bottom: 0.5rem; +} diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 281b342195ce47e7ff3b4d2da1c19fd796e97de9..abc2868e495e58a778987dd27c4f026480b0ddb5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,5 @@ class ApplicationController < ActionController::Base - + add_flash_types :success, :warning, :danger, :info protected def login_http(loginParams) @@ -92,6 +92,23 @@ class ApplicationController < ActionController::Base end return emails end + + def get_ids(emails) + ids = [] + email_request = HTTParty.post('http://172.17.0.1:3001/auth/id', :headers => { + 'Content-Type' => 'application/json', 'Authorization' => session[:jwt_token] + }, + :body => { + :emails => emails + }.to_json) + + if email_request.code == 404 + ids = nil + else + ids = email_request["ids"] + end + return ids + end def send_reset_email(email) reset_token_request = HTTParty.post('http://172.17.0.1:3001/reset_password_token', :body => { @@ -234,7 +251,8 @@ class ApplicationController < ActionController::Base if session[:logged_in] event = update_event_request(event_validation) if event.code == 404 - puts event.code, event["error"] + @update_event_error = "Event not found" + else creator = get_emails(event["creator"]) email_addresses = get_emails(event["invitees"]) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 68ac8df0e2c0aef16e007ca83a1b3261eab5c8af..0073f76ded3b12f4f59a8752372a279cf559536a 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -12,30 +12,44 @@ class EventsController < ApplicationController def generate_event @new_event_validation = EventValidation.new(params["new_event_validation"].permit(:title, :description, :active, :scheduledAtTime, :scheduledAtDate, :creator, :invitees)) - invitees_string = params["new_event_validation"]["invitees"].split(",") - invitees = [] - invitees_string.each do |i| - invitees.push(i.to_i) - end - puts [invitees] - @new_event_validation.invitees = invitees - @new_event_validation.scheduledAt = "#{@new_event_validation.scheduledAtDate} #{@new_event_validation.scheduledAtTime}".to_datetime - if @new_event_validation.valid? - create_event(@new_event_validation) - redirect_to root_path - else - puts @new_event_validation.errors.full_messages - render 'new', status: :unprocessable_entity - end + invitees_string = params["new_event_validation"]["invitees"].split(", ") + invitees = get_ids(invitees_string) + if invitees.nil? + @new_event_error = "One or more of the users were not found" + @new_event_validation = EventValidation.new() + render 'new', status: :unprocessable_entity + else + + @new_event_validation.invitees = invitees + @new_event_validation.scheduledAt = "#{@new_event_validation.scheduledAtDate} #{@new_event_validation.scheduledAtTime}".to_datetime + if @new_event_validation.valid? + create_event(@new_event_validation) + redirect_to root_path + else + puts @new_event_validation.errors.full_messages + render 'new', status: :unprocessable_entity + end + end end def update_generated_event - @update_event_validation = EventValidation.new(params["update_event_validation"].permit(:id, :title, :description, :active, :scheduledAt, :creator, :invitees)) - if @update_event_validation.valid? - update_event(@update_event_validation) - else - puts @update_event_validation.errors.full_messages - render 'new', status: :unprocessable_entity + @update_event_validation = EventValidation.new(params["update_event_validation"].permit(:id, :title, :description, :active, :scheduledAtTime, :scheduledAtDate, :creator, :invitees)) + invitees_string = params["update_event_validation"]["invitees"].split(", ") + invitees = get_ids(invitees_string) + if invitees.nil? + @update_event_error = "One or more of the users were not found" + + redirect_to root_path, danger: @update_event_error + else + @update_event_validation.invitees = invitees + @update_event_validation.scheduledAt = "#{@update_event_validation.scheduledAtDate} #{@update_event_validation.scheduledAtTime}".to_datetime + if @update_event_validation.valid? + update_event(@update_event_validation) + redirect_to root_path + else + puts @update_event_validation.errors.full_messages + render 'edit', status: :unprocessable_entity + end end end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 2e6997da680719a92fe60052e20e69752664668c..bdf33d3413f41e882a38f6383023342fecf4efeb 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -8,79 +8,8 @@ class HomeController < ApplicationController @created_events = get_my_created_events(session[:user_id]) end - def test - login_params = {"email" => "test@surrey.ac.uk", "password" => "123456"} - login(login_params) - end - - def test_sign_up - sign_up_params = {"email" => "test3@surrey.ac.uk", "password" => "1234567"} - sign_up_test(sign_up_params) - end - - def test_log_out + def log_out_button log_out end - def test_auth - auth - redirect_to root_path - end - - def reminder_email_test - email_request = [session[:user_id]] - email = get_emails(email_request) - if email == nil - else - reminder = {"title" => "this is a test", "description" => "this is a test description", "date_time" => Time.now + 4.hours} - reminder_email(email, reminder) - end - - redirect_to root_path - - end - - def reset_email_test - email = "ross@alantreadway.net" - - send_reset_email(email) - end - - def event_test - create_event(generate_event) - redirect_to root_path - end - - def created_event_test - id = "2" - get_my_created_events(id) - redirect_to root_path - end - - def generate_event - event = EventValidation.new(:id => "2", :title => "this is a test title", :description => "this is a test description", :active => true, :scheduledAt => (Time.now + 1.hours), :creator => session[:user_id], :invitees => [session[:user_id], 3]) - end - - def events_test - id = "2" - get_my_events(id) - redirect_to root_path - end - - def update_event_test - update_event(generate_event) - redirect_to root_path - end - - def delete_event_setup - event = EventValidation.new(:id => params["id"], :title => params["title"], :description => params["description"], :active => params["active"], :scheduledAt => params["scheduledAt"], :creator => params["creator"], :invitees => params["invitees"]) - delete_event(event) - redirect_to root_path - end - - - - - - end \ No newline at end of file diff --git a/app/views/events/edit.html.erb b/app/views/events/edit.html.erb index cb7a382d99bb77307dcfa624fc85775caef2c075..c653b7a3b0ba89f99c9d304cbe65257c691e5d64 100644 --- a/app/views/events/edit.html.erb +++ b/app/views/events/edit.html.erb @@ -1,21 +1,7 @@ <body> - <header class="mb-auto"> - <div> - <a href = "/"><%= image_tag("Logo.png", width: '50px')%></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/home/reminder_email_test">Reminder</a> - <a class="nav-link" href="/home/test_auth">Auth</a> - <a class="nav-link" href="/home/invite_test">Invite</a> - <a class="nav-link" href="/create_event">Create Event</a> - <a class="nav-link" href="/home/events_test">Get My Events</a> - <a style="padding-right:10px;" class="nav-link" href="/home/test_log_out">Log out</a> - </nav> - </div> - </header> <div class="row pt-5"> <div class="col-md-6 offset-md-3 text-box"> - <h3 class="text-center", style="color: White;">Create Event</h3> + <h3 class="text-center", style="color: White;">Edit Event</h3> <%= form_for @update_event_validation, as: :update_event_validation, url: update_event_send_path do |f| %> <%= f.hidden_field :id, value: params["id"] %> @@ -31,25 +17,31 @@ <%= f.text_field :description, class:"col-sm-7", required: true %> </div> - <div class="field row", style="margin-top: 10px;"> - <%= f.label :active, "Active:", class: "form-label col-sm-4 text-sm-end" %> - <%= f.text_field :active, class:"col-sm-7", required: true %> - </div> + <%= f.hidden_field :active, value: true %> <div class="field row", style="margin-top: 10px;"> - <%= f.label :scheduledAt, "Scheduled at:", class: "form-label col-sm-4 text-sm-end" %> - <%= f.text_field :scheduledAt, class:"col-sm-7", required: true %> + <%= f.label :scheduledAtTime, "Time", class: "form-label col-sm-4 text-sm-end" %> + <%= f.time_field :scheduledAtTime, class:"col-sm-7", required: true %> </div> <div class="field row", style="margin-top: 10px;"> - <%= f.label :creator, "Creator:", class: "form-label col-sm-4 text-sm-end" %> - <%= f.text_field :creator, class:"col-sm-7", required: true %> + <%= f.label :scheduledAtDate, "Date", class: "form-label col-sm-4 text-sm-end" %> + <%= f.date_field :scheduledAtDate, class:"col-sm-7", required: true %> </div> + <%= f.hidden_field :creator, value: session[:user_id] %> + <div class="field row", style="margin-top: 10px;"> <%= f.label :invitees, "Invites:", class: "form-label col-sm-4 text-sm-end" %> <%= f.text_field :invitees, class:"col-sm-7", required: true %> </div> + <% if @update_event_error != "" %> + <div class="row field"> + <div class="alert alert-danger error_message offset-sm-4 col-sm-7" role="alert"> + <%= @update_event_error %> + </div> + </div> + <% end %> <div class="actions text-center"> diff --git a/app/views/events/new.html.erb b/app/views/events/new.html.erb index f1e4e549501c8ebd682efca7030fc4a07d58b3a4..025a502cee1774850e23455f74a0638de7ed7155 100644 --- a/app/views/events/new.html.erb +++ b/app/views/events/new.html.erb @@ -1,18 +1,4 @@ <body> - <header class="mb-auto"> - <div style="padding-left:20px;"> - <a href = "/"><%= image_tag("Logo.png", width: '50px')%></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/home/reminder_email_test">Reminder</a> - <a class="nav-link" href="/home/test_auth">Auth</a> - <a class="nav-link" href="/home/invite_test">Invite</a> - <a class="nav-link" href="/create_event">Create Event</a> - <a class="nav-link" href="/home/events_test">Get My Events</a> - <a style="padding-right:10px;" class="nav-link" href="/home/test_log_out">Log out</a> - </nav> - </div> - </header> <div class="row pt-5"> <div class="col-md-6 offset-md-3 text-box"> <h3 class="text-center", style="color: White;">Create Event</h3> @@ -46,7 +32,14 @@ <div class="field row", style="margin-top: 10px;"> <%= f.label :invitees, "Invites:", class: "form-label col-sm-4 text-sm-end" %> <%= f.text_field :invitees, class:"col-sm-7", required: true %> - </div> + </div> + <% if @new_event_error != "" %> + <div class="row field"> + <div class="alert alert-danger error_message offset-sm-4 col-sm-7" role="alert"> + <%= @new_event_error %> + </div> + </div> + <% end %> <div class="actions text-center"> <%= submit_tag "Create Event", class: "btn btn-success text-center margin_top" %> diff --git a/app/views/home/home.html.erb b/app/views/home/home.html.erb index e84595b615aa424ea9d6e60d4fdffd9ba57b431e..60a9f1f57fa9dd6095a438fa7edfd86937080927 100644 --- a/app/views/home/home.html.erb +++ b/app/views/home/home.html.erb @@ -10,33 +10,14 @@ </head> <section class="content"> <body> - <%# <header class="mb-auto"> - <div> - <h3 style = "color: White;" class="float-md-start mb-0">Calendar</h3> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="#">Home</a> - <a class="nav-link" href="#">Login</a> - <a class="nav-link" href="#">Sign up</a> - </nav> - </div> - </header> %> <%= yield %> + <% flash.each do |message_type, message| %> + <div class="alert col-sm-10 offset-sm-1 error_message alert-<%= message_type %>"> + <%= message %> + </div> + <% end %> <% if session[:logged_in] %> - <header class="mb-auto"> - <div style="padding-left:20px;"> - <a href="/"><%= image_tag("Logo.png", width: '50px')%></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/home/reminder_email_test">Reminder</a> - <a class="nav-link" href="/home/test_auth">Auth</a> - <a class="nav-link" href="/home/invite_test">Invite</a> - <a class="nav-link" href="/create_event">Create Event</a> - <a class="nav-link" href="/home/events_test">Get My Events</a> - <a style="padding-right:10px;" class="nav-link" href="/home/test_log_out">Log out</a> - </nav> - </div> - </header> <div class="row"> <% if @invited_events != nil %> <div class="col-sm-10 offset-sm-1 text-box white-text"> @@ -120,17 +101,6 @@ <% end %> </div> - <% else %> - <header class="mb-auto"> - <div style="padding-left:20px;"> - <a href = "/"><%= image_tag("Logo.png", width: '50px') %></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/login">Login</a> - <a style="padding-right:10px;" class="nav-link" href="/sign_up">Sign up</a> - </nav> - </div> - </header> <% end %> </body> </section> diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..8bb86149334d271daaf84e87928748bef6e24478 --- /dev/null +++ b/app/views/layouts/_header.html.erb @@ -0,0 +1,10 @@ +<div class="nav nav-masthead justify-content-end"> + <%= link_to "Home", root_path, class: 'nav-link active' %> + <% if session[:logged_in] %> + <%= link_to "Create Event", create_event_path, class: 'nav-link' %> + <%= link_to "Log out", log_out_path, class: 'nav-link' %> + <% else %> + <%= link_to "Login", login_path, class: 'nav-link' %> + <%= link_to "Sign up", sign_up_path, class: 'nav-link' %> + <% end %> +</div> \ No newline at end of file diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 03876a74c17269ab42a2fec9a199a7477008b541..066b52995f121f91f9aa33d429e10b2911b32160 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -11,6 +11,7 @@ <section class="content"> <body> + <%= render "layouts/header" %> <%= yield %> <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></pw w> diff --git a/app/views/passwords/new.html.erb b/app/views/passwords/new.html.erb index 7c9d48c84bd22d67e2dfe988bda9e9e3aeae76d6..f116c424d88b37e81f8f17d6e4a16e1f42f73824 100644 --- a/app/views/passwords/new.html.erb +++ b/app/views/passwords/new.html.erb @@ -1,13 +1,3 @@ - <header class="mb-auto"> - <div style="padding-left:20px;"> - <a href = "/"><%= image_tag("Logo.png", width: '50px') %></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/login">Login</a> - <a style="padding-right:10px;" class="nav-link" href="/sign_up">Sign up</a> - </nav> - </div> - </header> <div class="row pt-5"> <div class="col-md-6 offset-md-3 text-box white-text"> diff --git a/app/views/registrations/edit.html.erb b/app/views/registrations/edit.html.erb index a71267097bf9348c18f5a031edba9d97cd47446f..5d42e8265e36d722eaeb6f958df5aaa99d15fa5e 100644 --- a/app/views/registrations/edit.html.erb +++ b/app/views/registrations/edit.html.erb @@ -1,16 +1,4 @@ <body> - <header class="mb-auto"> - <div> - <h3 style="color: White;" class="float-md-start mb-0" >Calendar</h3> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/login">Login</a> - <a style="padding-right:10px;" class="nav-link" href="/sign_up">Sign up</a> - </nav> - </div> - </header> - - <%= link_to "Back", :back, class: "btn btn-success" %> <div class="row"> <div class="col-md-4 offset-md-2 text-box"> diff --git a/app/views/registrations/new.html.erb b/app/views/registrations/new.html.erb index aaa3ecb2df228a05cc119fdbf39608a2be4c1df9..f4798a83e64cbc6895ffa562c261dc75e694cac7 100644 --- a/app/views/registrations/new.html.erb +++ b/app/views/registrations/new.html.erb @@ -1,14 +1,4 @@ <body> - <header class="mb-auto"> - <div style="padding-left:20px;"> - <a href = "/"><%= image_tag("Logo.png", width: '50px')%></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/login">Login</a> - <a style="padding-right:10px;" class="nav-link" href="/sign_up">Sign up</a> - </nav> - </div> - </header> <div class="row pt-5"> <div class="col-md-6 offset-md-3 text-box"> <h3 class="text-center", style="color: White;">Sign up</h3> diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb index 2a97ef92374d139663b70564d023f1177468299c..0dfa16fe518c84ceda91e37c730313d7a8ca7af0 100644 --- a/app/views/sessions/new.html.erb +++ b/app/views/sessions/new.html.erb @@ -1,14 +1,4 @@ <body> - <header class="mb-auto"> - <div style="padding-left:20px;"> - <a href = "/"><%= image_tag("Logo.png", width: '50px')%></a> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link active" aria-current="page" href="/">Home</a> - <a class="nav-link" href="/login">Login</a> - <a style="padding-right:10px;" class="nav-link" href="/sign_up">Sign up</a> - </nav> - </div> - </header> <div class="row pt-5 main-row"> <div class="col-md-4 offset-md-4 text-box default_form"> <h3 class="text-center white-text">Log in</h3> @@ -43,7 +33,6 @@ <div class="row", style="margin-top: 10px;"> <div class="actions col-md-7 col-sm-6 offset-md-4 offset-sm-4" style="padding-left:0px;"> <%= link_to "Forgot Password?", reset_password_email_path, class: 'btn btn-danger' %> - <%= link_to "Create Account", sign_up_path, class: "btn btn-info" %> <%= f.submit "Log in", class: "btn btn-success" %> </div> </div> diff --git a/config/routes.rb b/config/routes.rb index dcb685cef1f356efe008e043e034bc4993028208..e9c5c1125481634a650c7005dcf255fb48912d5c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,23 +9,15 @@ Rails.application.routes.draw do get 'user', to: 'user#show' get 'users/password/new', to: 'devise/passwords#new', as: 'password_reset' - get 'home/test', to: 'home#test' - get 'home/test_log_out', to: 'home#test_log_out' - get 'home/test_auth', to: 'home#test_auth' + get 'log_out', to: 'home#log_out_button' get 'sign_up', to: 'registrations#new' post 'sign_up/send', to: 'registrations#sign_up' get 'login', to: 'sessions#new' post 'login/send', to: 'sessions#login' - get 'home/reminder_email_test', to: 'home#reminder_email_test' - get 'home/reset_email_test', to: 'home#reset_email_test' get 'reset_password_email', to: 'passwords#new' post 'reset_password_email_setup', to: 'passwords#reset_password_email_setup' get 'reset_password', to: 'passwords#edit' post 'reset_password_setup', to: 'passwords#reset_password_setup' - get 'home/event_test', to: 'home#event_test' - get 'home/created_event_test', to: 'home#created_event_test' - get 'home/events_test', to: 'home#events_test' - get 'home/update_event_test', to: 'home#update_event_test' get 'create_event', to: 'events#new' post 'create_event/send', to: 'events#generate_event' get 'update_event', to: 'events#edit' diff --git a/docker-compose.yaml b/docker-compose.yaml index 7926eb8c40d8d1bd55f07fa06a117e5cac0acd7a..11748225d0b8ec79e0a38459a1a34a9cd3ab1140 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -64,7 +64,7 @@ services: links: - db_primary auth: - image: driftydirt/group24auth:0.0.8 + image: driftydirt/group24auth:0.0.9 ports: - "3001:3000" depends_on: