alts, admin page, login
This commit is contained in:
@ -105,11 +105,33 @@ body {
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #fe8019;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 1em;
|
||||
color: #fe8019;
|
||||
}
|
||||
|
||||
.left-just {
|
||||
text-align: left;
|
||||
margin: 0 auto;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #fabd2f;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #689d6a;
|
||||
}
|
||||
|
||||
p, label {
|
||||
color: #ebdbb2;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a {
|
||||
@ -190,4 +212,13 @@ a:visited {
|
||||
100% {
|
||||
transform: translateY(0) rotate(-5deg);
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
margin-bottom: 20px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
#set-alt-button {
|
||||
margin-bottom: 20px;
|
||||
}
|
55
app/controllers/admin_controller.rb
Normal file
55
app/controllers/admin_controller.rb
Normal file
@ -0,0 +1,55 @@
|
||||
class AdminController < ApplicationController
|
||||
PASSWORD = "butts"
|
||||
before_action :authenticate_admin, only: [:index, :set_alt, :clear_alt ]
|
||||
|
||||
def index
|
||||
@mains = Player.joins(:alternate_players).distinct
|
||||
@player_names = Player.all.map(&:name)
|
||||
end
|
||||
|
||||
def set_alt
|
||||
main = Player.find_by(name: params[:main_selected])
|
||||
alt = Player.find_by(name: params[:alt_selected])
|
||||
|
||||
if main && alt && main.id != alt.id
|
||||
main.alternate_players << alt
|
||||
alt.main_player_id = main.id
|
||||
|
||||
main.save
|
||||
alt.save
|
||||
end
|
||||
|
||||
refresh_or_redirect_to admin_path
|
||||
end
|
||||
|
||||
def clear_alt
|
||||
main = Player.find_by(id: params[:main_id])
|
||||
alt = Player.find_by(id: params[:alt_id])
|
||||
|
||||
if main && alt && main.alternate_players.include?(alt)
|
||||
main.alternate_players.delete(alt)
|
||||
main.save
|
||||
end
|
||||
|
||||
refresh_or_redirect_to admin_path
|
||||
end
|
||||
|
||||
def login
|
||||
|
||||
end
|
||||
|
||||
def login_submit
|
||||
pw = params[:password]
|
||||
if pw == PASSWORD
|
||||
session[:user_id] = 1
|
||||
redirect_to admin_path, notice: "Logged in!"
|
||||
else
|
||||
refresh_or_redirect_to admin_login_path, notice: "Login failed!"
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
session.delete(:user_id)
|
||||
redirect_to root_path, notice: "Logged out!"
|
||||
end
|
||||
end
|
@ -20,4 +20,10 @@ class ApplicationController < ActionController::Base
|
||||
def unauthorized_response
|
||||
render json: { error: "API key is missing or empty" }, status: :unauthorized
|
||||
end
|
||||
|
||||
def authenticate_admin
|
||||
unless session[:user_id]
|
||||
redirect_to admin_login_path, alert: "Login first"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
2
app/helpers/admin_helper.rb
Normal file
2
app/helpers/admin_helper.rb
Normal file
@ -0,0 +1,2 @@
|
||||
module AdminHelper
|
||||
end
|
@ -35,6 +35,10 @@ class Player < ApplicationRecord
|
||||
self.main_player
|
||||
end
|
||||
|
||||
def alts_concat
|
||||
self.alternate_players.map(&:name).join(", ")
|
||||
end
|
||||
|
||||
def no_circular_references
|
||||
if main_player_id.present? && (main_player.main_player== self)
|
||||
errors.add(:main_account, "circular reference")
|
||||
|
45
app/views/admin/index.html.erb
Normal file
45
app/views/admin/index.html.erb
Normal file
@ -0,0 +1,45 @@
|
||||
<h1>Admin</h1>
|
||||
|
||||
<h2 class="left-just">Alt List</h2>
|
||||
<div class="wrapper">
|
||||
<div class="table">
|
||||
<div class="row header">
|
||||
<div class="cell">Main</div>
|
||||
<div class="cell">Alts</div>
|
||||
<div class="cell">Remove</div>
|
||||
</div>
|
||||
<% @mains.each do |main| %>
|
||||
<% main.alternate_players.each do |alt| %>
|
||||
<div class="row">
|
||||
<div class="cell" data-title="Main"><%= main.name %></div>
|
||||
<div class="cell" data-title="Alts"><%= alt.name %></div>
|
||||
<div class="cell" data-title="Remove"><%= button_to "Clear Alt",
|
||||
"/admin/clear_alt",
|
||||
method: :post,
|
||||
params: { main_id: main.id, alt_id: alt.id } %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= form_with(url: "/admin/set_alt", method: :post, local: true) do %>
|
||||
<h2>Set Alt</h2>
|
||||
<label for="main-selector">Main: </label>
|
||||
<select id="main-selector" name="main_selected">
|
||||
<% @player_names.each do |name| %>
|
||||
<option value="<%= name %>"><%= name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<label for="alt-selector">Alt: </label>
|
||||
<select id="alt-selector" name="alt_selected">
|
||||
<% @player_names.each do |name| %>
|
||||
<option value="<%= name %>"><%= name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
|
||||
<%= submit_tag "Set Alt", id: "set-alt-button" %>
|
||||
<% end %>
|
||||
<a href="/">Leaderboard</a>
|
||||
<a href="/admin/destroy">Logout</a>
|
||||
</div>
|
8
app/views/admin/login.html.erb
Normal file
8
app/views/admin/login.html.erb
Normal file
@ -0,0 +1,8 @@
|
||||
<h1>Admin Login</h1>
|
||||
<div style="text-align: center;">
|
||||
<%= form_with(url: "/admin/login_submit", method: :post, local: true) do %>
|
||||
<label for="password">Password: </label>
|
||||
<input id="password" type="text" name="password">
|
||||
<input type="submit" value="password">
|
||||
<% end %>
|
||||
</div>
|
Reference in New Issue
Block a user