Resoved issues for managing workshop facilitators
This commit is contained in:
parent
ac915f3577
commit
7a7bb7b579
@ -649,7 +649,7 @@ fieldset {
|
||||
margin: 0 1em;
|
||||
|
||||
button, .button {
|
||||
margin: 0 0.25em;
|
||||
margin: 0 0.25em 1em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
@ -1583,24 +1583,27 @@ body.policy .policy-agreement ul {
|
||||
display: inline-block;
|
||||
|
||||
.facilitator {
|
||||
margin: 0 0 0.5em 1.25em;
|
||||
margin: 0 0 0.5em 0.5em;
|
||||
padding: 1.5em 0.5em 0.5em;
|
||||
border-top: 0.1em solid #CCC;
|
||||
|
||||
&:first-child {
|
||||
border: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.name {
|
||||
position: relative;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@include before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 0.3em;
|
||||
height: 0.3em;
|
||||
background-color: #333;
|
||||
border-radius: 50%;
|
||||
left: -0.75em;
|
||||
top: 0.5em;
|
||||
@include _(opacity, 0.5);
|
||||
}
|
||||
.details {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
.email {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.name, .role {
|
||||
@ -1616,7 +1619,7 @@ body.policy .policy-agreement ul {
|
||||
}
|
||||
|
||||
@include after {
|
||||
content: '), ';
|
||||
content: ')';
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
|
@ -1083,8 +1083,11 @@ class ConferencesController < ApplicationController
|
||||
# creat the new interest row if we weren't interested before
|
||||
WorkshopInterest.create(:workshop_id => workshop.id, :user_id => current_user.id) unless interested
|
||||
|
||||
# go back to the workshop
|
||||
redirect_to view_workshop_url(@this_conference.slug, workshop.id)
|
||||
if request.xhr?
|
||||
else
|
||||
# go back to the workshop
|
||||
redirect_to view_workshop_url(@this_conference.slug, workshop.id)
|
||||
end
|
||||
end
|
||||
|
||||
def facilitate_workshop
|
||||
@ -1127,16 +1130,18 @@ class ConferencesController < ApplicationController
|
||||
end
|
||||
|
||||
def approve_facilitate_request
|
||||
return do_403 unless logged_in?
|
||||
set_conference
|
||||
set_conference_registration
|
||||
workshop = Workshop.find_by_id_and_conference_id(params[:workshop_id], @this_conference.id)
|
||||
return do_404 unless workshop && current_user
|
||||
return do_404 unless workshop.present?
|
||||
|
||||
user_id = params[:user_id].to_i
|
||||
action = params[:approve_or_deny].to_sym
|
||||
user = User.find(user_id)
|
||||
if action == :approve
|
||||
if current_user && workshop.active_facilitator?(current_user) && workshop.requested_collaborator?(User.find(user_id))
|
||||
case action
|
||||
when :approve
|
||||
if workshop.active_facilitator?(current_user) && workshop.requested_collaborator?(User.find(user_id))
|
||||
f = WorkshopFacilitator.find_by_workshop_id_and_user_id(
|
||||
workshop.id, user_id)
|
||||
f.role = :collaborator
|
||||
@ -1148,8 +1153,8 @@ class ConferencesController < ApplicationController
|
||||
end
|
||||
return redirect_to view_workshop_url(@this_conference.slug, workshop.id)
|
||||
end
|
||||
elsif action == :deny
|
||||
if current_user && workshop.active_facilitator?(current_user) && workshop.requested_collaborator?(User.find(user_id))
|
||||
when :deny
|
||||
if workshop.active_facilitator?(current_user) && workshop.requested_collaborator?(User.find(user_id))
|
||||
WorkshopFacilitator.delete_all(
|
||||
:workshop_id => workshop.id,
|
||||
:user_id => user_id)
|
||||
@ -1160,13 +1165,23 @@ class ConferencesController < ApplicationController
|
||||
end
|
||||
return redirect_to view_workshop_url(@this_conference.slug, workshop.id)
|
||||
end
|
||||
elsif action == :remove
|
||||
if current_user && current_user.id == user_id
|
||||
unless workshop.creator?(user)
|
||||
WorkshopFacilitator.delete_all(
|
||||
:workshop_id => workshop.id,
|
||||
:user_id => user_id)
|
||||
end
|
||||
when :remove
|
||||
if workshop.can_remove?(current_user, user)
|
||||
WorkshopFacilitator.delete_all(
|
||||
:workshop_id => workshop.id,
|
||||
:user_id => user_id)
|
||||
return redirect_to view_workshop_url(@this_conference.slug, workshop.id)
|
||||
end
|
||||
when :switch_ownership
|
||||
if workshop.creator?(current_user)
|
||||
f = WorkshopFacilitator.find_by_workshop_id_and_user_id(
|
||||
workshop.id, current_user.id)
|
||||
f.role = :collaborator
|
||||
f.save
|
||||
f = WorkshopFacilitator.find_by_workshop_id_and_user_id(
|
||||
workshop.id, user_id)
|
||||
f.role = :creator
|
||||
f.save
|
||||
return redirect_to view_workshop_url(@this_conference.slug, workshop.id)
|
||||
end
|
||||
end
|
||||
|
@ -62,6 +62,14 @@ class Workshop < ActiveRecord::Base
|
||||
creator?(user) || collaborator?(user) || conference.host?(user)
|
||||
end
|
||||
|
||||
def can_remove?(owner, facilitator)
|
||||
# creators cannot be removed
|
||||
return false if creator?(facilitator)
|
||||
|
||||
# creator can remove anyone, facilitators can remove themselves
|
||||
return creator?(owner) || owner.id == facilitator.id
|
||||
end
|
||||
|
||||
def can_delete?(user)
|
||||
creator?(user) || conference.host?(user)
|
||||
end
|
||||
|
@ -17,7 +17,7 @@
|
||||
= fieldset :hosting_dates, heading: 'articles.conference_registration.headings.host.availability', help: 'articles.conference_registration.paragraphs.host.availability' do
|
||||
= selectfield :first_day, @hosting_data['availability'][0] || @this_conference.start_date, conference_housing_options_list(:before)
|
||||
= selectfield :last_day, @hosting_data['availability'][1] || @this_conference.start_date, conference_housing_options_list(:after)
|
||||
= checkboxes :considerations, [:vegan, :smoking, :quiet], @hosting_data['considerations'], 'articles.conference_registration.host.considerations', heading: 'articles.conference_registration.headings.host.considerations', help: 'articles.conference_registration.paragraphs.host.considerations', vertical: true
|
||||
= checkboxes :considerations, [:vegan, :smoking, :pets, :quiet], @hosting_data['considerations'], 'articles.conference_registration.host.considerations', heading: 'articles.conference_registration.headings.host.considerations', help: 'articles.conference_registration.paragraphs.host.considerations', vertical: true
|
||||
= textarea :notes, @hosting_data['notes'], heading: 'articles.conference_registration.headings.host.notes', help: 'articles.conference_registration.paragraphs.host.notes'
|
||||
.actions.next-prev
|
||||
= button_tag (params[:step] == :save ? :save : :next), value: :hosting
|
||||
|
@ -1,3 +1,4 @@
|
||||
- is_facilitator = workshop.active_facilitator?(current_user)
|
||||
= row class: 'view-object' do
|
||||
= columns(medium: 12) do
|
||||
%h2=_!workshop.title
|
||||
@ -19,19 +20,26 @@
|
||||
.facilitators
|
||||
- workshop.workshop_facilitators.each do |f|
|
||||
- u = User.find(f.user_id)
|
||||
- if logged_in? && (workshop.public_facilitator?(u) || f.user_id == current_user.id || workshop.active_facilitator?(current_user))
|
||||
- if logged_in? && (workshop.public_facilitator?(u) || f.user_id == current_user.id || is_facilitator)
|
||||
.facilitator
|
||||
.name=_!u.name
|
||||
.role
|
||||
=_"roles.workshops.facilitator.#{workshop.role(u).to_s}"
|
||||
- if preview.blank? && f.role.to_sym == :requested && workshop.active_facilitator?(current_user)
|
||||
- if is_facilitator && preview.blank?
|
||||
.details
|
||||
.email=u.email
|
||||
- if f.role.to_sym == :requested
|
||||
=(link_to (_'actions.workshops.Approve'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'approve'), :class => [:button, :modify])
|
||||
=(link_to (_'actions.workshops.Deny'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'deny'), :class => [:button, :delete])
|
||||
- elsif preview.blank? && (f.user_id == current_user.id && f.role.to_sym != :creator) || (!workshop.conference.registered?(u) && workshop.active_facilitator?(current_user))
|
||||
- elsif workshop.can_remove?(current_user, u)
|
||||
=(link_to (_'actions.workshops.Make_Owner'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'switch_ownership'), :class => [:button, :modify]) unless f.role.to_sym == :creator || !workshop.creator?(current_user)
|
||||
=(link_to (_'actions.workshops.Remove'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), :class => [:button, :delete])
|
||||
- if f.user_id == current_user.id && workshop.requested_collaborator?(current_user)
|
||||
.details
|
||||
=(link_to (_'actions.workshops.Remove'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), :class => [:button, :delete])
|
||||
- unless preview.present?
|
||||
=(link_to (_'actions.workshops.Facilitate'), facilitate_workshop_path(workshop.conference.slug, workshop.id), :class => [:button, workshop.needs_facilitators ? :accented : :subdued]) unless workshop.facilitator?(current_user)
|
||||
- if workshop.active_facilitator?(current_user)
|
||||
- if is_facilitator
|
||||
%h4=_'articles.workshops.headings.add_facilitator','Add a facilitator'
|
||||
= form_tag workshop_add_facilitator_path(workshop.conference.slug, workshop.id), :class => 'add-facilitator mini-flex-form' do
|
||||
.email-field.input-field
|
||||
@ -47,7 +55,7 @@
|
||||
= columns(medium: 6) do
|
||||
%h3=_'articles.workshops.headings.theme','Theme'
|
||||
%p= Workshop.all_themes.include?((workshop.theme || '').to_sym) ? (_"workshop.options.theme.#{workshop.theme}") : workshop.theme
|
||||
- if workshop.active_facilitator?(current_user) || workshop.conference.host?(current_user)
|
||||
- if is_facilitator || workshop.conference.host?(current_user)
|
||||
- needs = JSON.parse(workshop.needs || '[]')
|
||||
- if needs.present?
|
||||
= columns(medium: 6) do
|
||||
|
@ -5398,6 +5398,7 @@ en:
|
||||
vegan: Vegan or vegetarian only
|
||||
smoking: Smoking is permitted
|
||||
quiet: Quiet household
|
||||
pets: House has dogs or cats
|
||||
can_provide_housing: I can provide housing
|
||||
questions:
|
||||
bike:
|
||||
@ -5674,10 +5675,11 @@ en:
|
||||
roles:
|
||||
workshops:
|
||||
facilitator:
|
||||
creator: creator
|
||||
creator: Owner
|
||||
collaborator: Collaborator
|
||||
requested: Requested
|
||||
unregistered: Unregistered
|
||||
facilitator: Facilitator
|
||||
workshop:
|
||||
options:
|
||||
needs:
|
||||
|
Loading…
x
Reference in New Issue
Block a user