Manage publicities

This commit is contained in:
2017-04-14 11:34:01 +02:00
parent dd5e22ea48
commit 281caaf0fd
20 changed files with 176 additions and 19 deletions
+4 -1
View File
@@ -35,12 +35,15 @@ $font-size-h3: floor($font-size-base * 1.2)
.alert-notice
@extend .alert-info
body.admin
background: repeating-linear-gradient(45deg, yellow, yellow 50px, black 50px, black 100px)
body
> .container
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
padding: 20px
margin-top: 10px
background: #FFF
header
h1
font-size: 20px
@@ -1,5 +1,15 @@
module Admin
class ApplicationController < ::ApplicationController
http_basic_authenticate_with name: 'admin', password: ENV['ADMIN_PASSWORD'] unless Rails.env.development?
before_action :authenticate_supporter!
before_action :authenticate_admin!
def authenticate_admin!
return true if current_supporter.admin?
head(:forbidden)
end
def admin_area
true
end
end
end
@@ -0,0 +1,29 @@
module Admin
class PublicitiesController < Admin::ApplicationController
def index
@pending = Supporter.where('publicity.state' => :pending).asc(:created_at)
@active = Supporter.where('publicity.state' => :approved).asc(:created_at)
end
def edit
@publicity = Supporter.find(params[:id]).publicity
end
def update
@publicity = Supporter.find(params[:id]).publicity
return redirect_to(admin_publicities_path) if @publicity.update_attributes(publicity_params)
render :edit
end
def destroy
current_supporter.publicity&.destroy
redirect_to(admin_publicities_path)
end
private
def publicity_params
params.require(:publicity).permit(:organisation, :statement, :avatar, :state)
end
end
end
@@ -29,6 +29,10 @@ class ApplicationController < ActionController::Base
options.merge locale: I18n.locale
end
def admin_area
false
end
protected
def configure_permitted_parameters
+1
View File
@@ -14,6 +14,7 @@ class Supporter
## Database authenticatable
field :email, type: String, default: ''
field :encrypted_password, type: String, default: ''
field :admin, type: Boolean, default: false
## Recoverable
field :reset_password_token, type: String
+14
View File
@@ -0,0 +1,14 @@
h1= title "#{t('.title')} #{@publicity.supporter.first_name} #{@publicity.supporter.last_name}, #{@publicity.supporter.city}"
= simple_form_for(@publicity, url: admin_publicity_path(@publicity.supporter)) do |form|
.form-group
= "#{@publicity.supporter.first_name} #{@publicity.supporter.last_name}, #{@publicity.supporter.city}"
= form.input :organisation, required: false
= form.input :statement, as: :text, required: false
= form.input :avatar, as: :file, required: false
- if @publicity.avatar
.form-group
= image_tag(@publicity.avatar.url(:medium))
= form.input :state, as: :radio_buttons, collection: t('publicity_states').map{ |x| [x.first, raw(x.last)]}, label_method: :last, value_method: :first, required: false
= form.submit t('shared.save'), class: 'btn btn-primary'
+1
View File
@@ -0,0 +1 @@
= render 'form'
+19
View File
@@ -0,0 +1,19 @@
h1 = title t('.title')
table.table
tbody
- @pending.each do | supporter |
tr
td
= "#{supporter.first_name} #{supporter.last_name}"
br
= supporter.city
br
= mail_to supporter.email, supporter.email
br
= supporter.publicity.organisation
td width="50%" = supporter.publicity.statement
td = image_tag(supporter.publicity.avatar.url(:small))
td = link_to t('shared.edit'), edit_admin_publicity_path(supporter)
+1 -1
View File
@@ -26,7 +26,7 @@ html lang="#{I18n.locale}"
meta content="/ms-icon-144x144.png" name="msapplication-TileImage" /
meta content="#ffffff" name="theme-color" /
body
body class="#{'admin' if controller.admin_area}"
javascript:
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+3
View File
@@ -11,3 +11,6 @@
= navbar_item t('.sponsoring'), sponsoring_path
= navbar_item t('.sign_in'), new_supporter_session_path unless supporter_signed_in?
= navbar_item t('.sign_out'), destroy_supporter_session_path, nil, 'data-method' => :delete if supporter_signed_in?
- if supporter_signed_in? && current_supporter.admin?
= navbar_dropdown t('admin.title') do
= navbar_item t('admin.publicities.index.title'), admin_publicities_path
+1 -4
View File
@@ -6,10 +6,7 @@
.panel-body
dl.dl-horizontal
dt = Publicity.human_attribute_name(:status)
- if current_supporter.publicity.state == 'pending'
dd.text-danger = t('.pending')
- if current_supporter.publicity.state == 'approved'
dd.text-success = t('.pending')
dd= t("publicity_states.#{current_supporter.publicity.state}")
- unless current_supporter.publicity.organisation.blank?
dt = Publicity.human_attribute_name(:organisation)
dd = current_supporter.publicity.organisation