Ability to give a statement

This commit is contained in:
2017-04-13 17:16:03 +02:00
parent b30bd91f3d
commit dd5e22ea48
66 changed files with 812 additions and 25 deletions
+29
View File
@@ -0,0 +1,29 @@
class PublicitiesController < ApplicationController
before_action :authenticate_supporter!
def new
@publicity = current_supporter.publicity || Publicity.new
end
def create
@publicity = Publicity.new(publicity_params.merge(supporter: current_supporter, state: :pending))
flash['success'] = t('.success') if @publicity.valid?
return redirect_to(root_path) if @publicity.save
render :new
end
def update
create
end
def destroy
current_supporter.publicity&.destroy
redirect_to(root_path)
end
private
def publicity_params
params.require(:publicity).permit(:organisation, :statement, :avatar)
end
end
+26
View File
@@ -0,0 +1,26 @@
class Publicity
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paperclip
has_mongoid_attached_file :avatar,
path: ':attachment/:id/:style.:extension',
styles: {
original: ['1920x1680>', :jpg],
small: ['100x100#', :jpg],
medium: ['250x250', :jpg],
large: ['500x500>', :jpg]
},
convert_options: { all: '-background white -flatten +matte' }
embedded_in :supporter
field :state, type: String, default: 'pending' # Possible states: pending, approved
field :organisation, type: String
field :statement, type: String
validates :state, presence: true
validates :avatar, presence: true
validates :statement, presence: true
validates_attachment_content_type :avatar, content_type: /\Aimage/
end
+8 -16
View File
@@ -1,5 +1,11 @@
class Supporter
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paranoia
include Geocoder::Model::Mongoid
COUNTER_START = 10_003
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
@@ -23,22 +29,6 @@ class Supporter
field :current_sign_in_ip, type: String
field :last_sign_in_ip, type: String
## Confirmable
# field :confirmation_token, type: String
# field :confirmed_at, type: Time
# field :confirmation_sent_at, type: Time
# field :unconfirmed_email, type: String # Only if using reconfirmable
## Lockable
# field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
# field :unlock_token, type: String # Only if unlock strategy is :email or :both
# field :locked_at, type: Time
include Mongoid::Timestamps
include Mongoid::Paranoia
include Geocoder::Model::Mongoid
COUNTER_START = 10_003
geocoded_by :address
after_validation :geocode # auto-fetch coordinates
@@ -66,6 +56,8 @@ class Supporter
validates :age_category, presence: true
validates :language, presence: true
embeds_one :publicity
def self.counter
actual = count.to_i
actual > COUNTER_START ? actual : COUNTER_START
+6
View File
@@ -0,0 +1,6 @@
h1= title t('.title')
= simple_form_for(@publicity, url: publicity_path) do |form|
= form.input :organisation, required: false, label: t('.organisation'), placeholder: t('.organisation_placeholder')
= form.input :statement, as: :text, required: false
= form.input :avatar, as: :file, label: t('.avatar'), required: false
= form.submit t('.save'), class: 'btn btn-primary'
+1
View File
@@ -0,0 +1 @@
= render 'form'
+28
View File
@@ -0,0 +1,28 @@
- if current_supporter.publicity
.panel.panel-default
.panel-heading
h2.panel-title
= t '.title'
.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')
- unless current_supporter.publicity.organisation.blank?
dt = Publicity.human_attribute_name(:organisation)
dd = current_supporter.publicity.organisation
dt = Publicity.human_attribute_name(:statement)
dd = current_supporter.publicity.statement
dt = Publicity.human_attribute_name(:avatar)
dd = image_tag current_supporter.publicity.avatar.url(:small), alt: ''
.pull-right
= link_to t(".renew"), new_publicity_path
br
= link_to t(".delete"), publicity_path, data: { confirm: t("shared.are_you_sure") }, method: :delete, class: 'text-danger'
- else
.alert.alert-notice
= link_to t('.create_publicity'), new_publicity_path
+2 -1
View File
@@ -29,7 +29,8 @@
p
= link_to t('.edit'), edit_supporter_registration_path(), class: 'pull-right'
= render 'publicity'
aside.col-md-5.col-xs-12
= render 'right_side'