Browse Source

Development (#250)

* Fixed fonts

* Fixed assets

* Fixed logo in emails

* Switched to immediate email delivery

* Fixed prod emails and added deployment tasks

* Fixed deployments

* Updated README

* Added Bike Collectives Core to README

* Fixed issue with map loading

* Fixed issue with map loading

* Added map JSON data to assets precompilation

* Fixed error sending to conference administrators

* Let error report signature wrap

* Fixed backtrace in error reports

* Fixed backtrace in error reports

* Moved pronoun heading to make it more obvoius

I moved the "Pronoun" heading directly above the input field. It turned out that a lot of users were entering "He
 or "She" in the name field, I believe that was because of the placement of the "Pronoun" heading. I also needed to remove the optional warning but I'm hoping that won't cause problems.

* Added an error message when no email address is used on login

* Fixed select guest table

* Added house rules to housing admin and review

* Edit workshop locale warning
development
Godwin 7 years ago
committed by GitHub
parent
commit
f54c09f248
  1. 12
      app/assets/stylesheets/_admin.scss
  2. 41
      app/assets/stylesheets/_application.scss
  3. 2
      app/controllers/conference_administration_controller.rb
  4. 4
      app/controllers/workshops_controller.rb
  5. 2
      app/helpers/admin_helper.rb
  6. 3
      app/helpers/form_helper.rb
  7. 10
      app/helpers/geocoder_helper.rb
  8. 27
      app/helpers/widgets_helper.rb
  9. 31
      app/views/conference_administration/_hosts_table.html.haml
  10. 10
      app/views/registration_steps/_review.html.haml
  11. 2
      app/views/shared/_navbar.html.haml
  12. 16
      app/views/workshops/_show.html.haml
  13. 2
      app/views/workshops/new.html.haml
  14. 5
      config/locales/en.yml
  15. 2
      config/locales/fr.yml

12
app/assets/stylesheets/_admin.scss

@ -123,6 +123,7 @@ table, .table {
td, .table-td { td, .table-td {
&.inner-table { &.inner-table {
padding: 0.5em; padding: 0.5em;
vertical-align: top;
table { table {
margin: 0; margin: 0;
@ -133,6 +134,10 @@ table, .table {
&.bold { &.bold {
@include font-family(secondary); @include font-family(secondary);
} }
.rules {
font-size: 0.75em;
}
} }
tbody th { tbody th {
@ -859,7 +864,7 @@ nav.sub-menu {
min-width: 15em; min-width: 15em;
} }
.host-notes { .host-notes, .house-rules {
@include font-family(primary); @include font-family(primary);
font-size: 0.85em; font-size: 0.85em;
border: 0.1em solid $light-gray; border: 0.1em solid $light-gray;
@ -876,6 +881,11 @@ nav.sub-menu {
} }
} }
.house-rules {
max-height: 30em;
overflow: auto;
}
.guest-notes { .guest-notes {
position: relative; position: relative;
float: left; float: left;

41
app/assets/stylesheets/_application.scss

@ -153,43 +153,6 @@ table, .table {
} }
} }
// td, .table-td {
// &.inner-table {
// padding: 0;
// table {
// margin: 0;
// width: 100%;
// }
// tr:first-child {
// td, th {
// border-top: 0;
// }
// }
// tr:last-child {
// td, th {
// border-bottom: 0;
// }
// }
// td, th {
// &:first-child {
// border-left: 0
// }
// &:last-child {
// border-right: 0
// }
// }
// }
// &.bold {
// @include font-family(secondary);
// }
// }
tbody th { tbody th {
width: 0.1rem; width: 0.1rem;
} }
@ -1760,6 +1723,10 @@ ul.warnings {
.text-field & { .text-field & {
margin: 0 0 1em 0; margin: 0 0 1em 0;
} }
&.top-message {
margin-top: 2em;
}
} }
.success-info { .success-info {

2
app/controllers/conference_administration_controller.rb

@ -479,8 +479,10 @@ class ConferenceAdministrationController < ApplicationController
end end
end end
@excel_data[:data] << host_data @excel_data[:data] << host_data
end end
return respond_to do |format| return respond_to do |format|
format.xlsx { render xlsx: '../conferences/stats', filename: "housing" } format.xlsx { render xlsx: '../conferences/stats', filename: "housing" }
end end

4
app/controllers/workshops_controller.rb

@ -67,8 +67,8 @@ class WorkshopsController < ApplicationController
else else
return do_403 unless @can_edit return do_403 unless @can_edit
@title = @workshop.title @title = @workshop.title!
@info = @workshop.info @info = @workshop.info!
end end
@needs = JSON.parse(@workshop.needs || '[]').map &:to_sym @needs = JSON.parse(@workshop.needs || '[]').map &:to_sym

2
app/helpers/admin_helper.rb

@ -112,7 +112,7 @@ module AdminHelper
end end
def get_housing_match(host, guest, space) def get_housing_match(host, guest, space)
housing_data = guest.housing_data || [] housing_data = guest.housing_data || {}
if housing_data['host'].present? if housing_data['host'].present?
if housing_data['host'] == host.id if housing_data['host'] == host.id

3
app/helpers/form_helper.rb

@ -137,7 +137,8 @@ module FormHelper
if options[:warning].present? if options[:warning].present?
description_id ||= "#{id}-desc" description_id ||= "#{id}-desc"
html += content_tag(:div, _(options[:warning], :s, 2), id: description_id, class: 'warning-info') # html += content_tag(:div, _(options[:warning], :s, 2), id: description_id, class: 'warning-info')
html += status_bubble(_(options[:warning], :s, 2), :warning, id: description_id)
end end
aria = {} aria = {}

10
app/helpers/geocoder_helper.rb

@ -85,8 +85,14 @@ module GeocoderHelper
end end
def location_link(location) def location_link(location)
return '' unless location.present? && location.address.present? return '' unless location.present?
content_tag(:a, (_!location.address), href: "http://www.google.com/maps/place/#{location.latitude},#{location.longitude}") address = if location.is_a?(Location)
location.street
else
location.address
end
return '' unless address.present?
content_tag(:a, (_!address), href: "http://www.google.com/maps/place/#{location.latitude},#{location.longitude}")
end end
def same_city?(location1, location2) def same_city?(location1, location2)

27
app/helpers/widgets_helper.rb

@ -112,20 +112,20 @@ module WidgetsHelper
@housing_data[id][:guest_data][guest_id][:errors].each do |error, value| @housing_data[id][:guest_data][guest_id][:errors].each do |error, value|
if value.is_a?(Array) if value.is_a?(Array)
value.each do |v| value.each do |v|
status_html += content_tag(:li, _("errors.messages.housing.space.#{error.to_s}", vars: v)) status_html += content_tag(:li, _("errors.messages.housing.space.#{error.to_s}", vars: v).html_safe)
end end
else else
status_html += content_tag(:li, _("errors.messages.housing.space.#{error.to_s}", vars: value)) status_html += content_tag(:li, _("errors.messages.housing.space.#{error.to_s}", vars: value).html_safe)
end end
end end
@housing_data[id][:guest_data][guest_id][:warnings].each do |error, value| @housing_data[id][:guest_data][guest_id][:warnings].each do |error, value|
if value.is_a?(Array) if value.is_a?(Array)
value.each do |v| value.each do |v|
status_html += content_tag(:li, _("warnings.messages.housing.space.#{error.to_s}", v)) status_html += content_tag(:li, _("warnings.messages.housing.space.#{error.to_s}", v).html_safe)
end end
else else
status_html += content_tag(:li, _("warnings.messages.housing.space.#{error.to_s}", vars: value)) status_html += content_tag(:li, _("warnings.messages.housing.space.#{error.to_s}", vars: value).html_safe)
end end
end end
@ -326,4 +326,23 @@ module WidgetsHelper
end end
end end
end end
def strong(text)
content_tag(:strong, text)
end
def phone_link(number)
content_tag(:a, number, href: "tel:#{number}")
end
def email_link(email)
content_tag(:a, email, href: "mailto:#{email}")
end
def status_bubble(text, status, attributes = {})
attributes[:class] ||= []
attributes[:class] = [attributes[:class]] unless attributes[:class].is_a?(Array)
attributes[:class] << "#{status}-info"
content_tag(:div, text.html_safe, attributes)
end
end end

31
app/views/conference_administration/_hosts_table.html.haml

@ -8,15 +8,22 @@
- first_row = true - first_row = true
%table.hosts.admin-edit %table.hosts.admin-edit
- @hosts.each do |id, registration| - @hosts.sort_by{ |id, registration| registration.user.name }.each do |id, registration|
- unless first_row - if @housing_data[id][:space].map { |k,v| v }.sum > 0
%tr.spacer - unless first_row
%td %tr.spacer
%tr.host %td
%th %tr.host
.name=registration.user.name %th
.address=registration.housing_data['address'] .name=registration.user.name
- if registration.housing_data['notes'].present? .address=location_link(Location.find_location(registration.housing_data['address'], @this_conference.city))
.host-notes=paragraph(registration.housing_data['notes']) - if registration.housing_data['notes'].present?
%td.inner-table{colspan: 2}=host_guests_table(registration) .host-notes=paragraph(registration.housing_data['notes'])
- first_row = false - if registration.housing_data['info'].present?
%div=_'articles.conference_registration.headings.housing.Rules', :t
.house-rules
=richtext(registration.housing_data['info'], 4)
%td.inner-table{colspan: 2}
=host_guests_table(registration)
- first_row = false

10
app/views/registration_steps/_review.html.haml

@ -39,6 +39,16 @@
- if @allow_reopen_attendance - if @allow_reopen_attendance
.actions.centered .actions.centered
= button :reopen_registration, value: :reopen_registration = button :reopen_registration, value: :reopen_registration
- if @host
= row do
= columns(medium: 12) do
%h3=_'articles.conferences.headings.housing_info', :t
%p=(_'articles.conference_registration.paragraphs.Housing', :p, vars: { name: strong(@host.user.name), address: location_link(Location.find_location(@host.housing_data['address'], @this_conference.city)), phone: phone_link(@host.housing_data['phone']), email: email_link(@host.user.email) }).html_safe
= row do
= columns(medium: 12) do
%h4=_'articles.conference_registration.headings.hosting_info', :t
= richtext @host.housing_data['info']
= row do = row do
= columns(medium: 12) do = columns(medium: 12) do
%h3=_'articles.workshops.headings.Workshops', :t %h3=_'articles.workshops.headings.Workshops', :t

2
app/views/shared/_navbar.html.haml

@ -20,6 +20,6 @@
- locale_translation = language_name(locale, true) - locale_translation = language_name(locale, true)
- translation_text = (_'translate.content.change_locale', "Read in #{locale_translation}", vars: {language: locale_translation}, locale: locale) - translation_text = (_'translate.content.change_locale', "Read in #{locale_translation}", vars: {language: locale_translation}, locale: locale)
%a{href: url, lang: locale, title: translation_text} %a{href: url, lang: locale, title: translation_text}
%span{aria: {hidden: true}}=_!locale %span{aria: {hidden: :true}}=_!locale
= off_screen translation_text = off_screen translation_text

16
app/views/workshops/_show.html.haml

@ -13,7 +13,7 @@
- if preview.blank? && translations_available_for_editing - if preview.blank? && translations_available_for_editing
.actions.center .actions.center
- translations_available_for_editing.each do |locale| - translations_available_for_editing.each do |locale|
= link_to (_'actions.workshops.Translate', "Translate into #{language_name(locale)}", :vars => {:language => language_name(locale)}), translate_workshop_url(workshop.conference.slug, workshop.id, locale), :class => [:button, :translate] = link_to (_'actions.workshops.Translate', "Translate into #{language_name(locale)}", vars: {language: language_name(locale)}), translate_workshop_url(workshop.conference.slug, workshop.id, locale), class: [:button, :translate]
- if logged_in? - if logged_in?
= columns(medium: 6) do = columns(medium: 6) do
%h3=_'articles.workshops.headings.facilitators' %h3=_'articles.workshops.headings.facilitators'
@ -30,19 +30,19 @@
.details .details
.email=_!u.email .email=_!u.email
- if f.role.to_sym == :requested - 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.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]) =(link_to (_'actions.workshops.Deny'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'deny'), class: [:button, :delete])
- elsif workshop.can_remove?(current_user, u) - elsif workshop.can_remove?(current_user, u)
=(link_with_confirmation (_'actions.workshops.Make_Owner'), (_'modals.workshops.facilitators.confirm_transfer_ownership', vars: { user_name: u.name}),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_with_confirmation (_'actions.workshops.Make_Owner'), (_'modals.workshops.facilitators.confirm_transfer_ownership', vars: { user_name: u.name}),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_with_confirmation (_"actions.workshops.#{is_this_user ? 'Leave' : 'Remove'}"), (_"modals.workshops.facilitators.confirm_remove#{is_this_user ? '_self' : ''}", vars: { user_name: u.name}), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), :class => [:button, :delete]) =(link_with_confirmation (_"actions.workshops.#{is_this_user ? 'Leave' : 'Remove'}"), (_"modals.workshops.facilitators.confirm_remove#{is_this_user ? '_self' : ''}", vars: { user_name: u.name}), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), class: [:button, :delete])
- if is_this_user && workshop.requested_collaborator?(current_user) - if is_this_user && workshop.requested_collaborator?(current_user)
.details .details
=(link_with_confirmation (_'actions.workshops.Cancel_Request'), (_'modals.workshops.facilitators.confirm_cancel_request'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), :class => [:button, :delete]) =(link_with_confirmation (_'actions.workshops.Cancel_Request'), (_'modals.workshops.facilitators.confirm_cancel_request'), approve_facilitate_workshop_request_path(workshop.conference.slug, workshop.id, f.user_id, 'remove'), class: [:button, :delete])
- unless preview.present? - 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) =(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 is_facilitator - if is_facilitator
%h4=_'articles.workshops.headings.add_facilitator','Add a 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 = form_tag workshop_add_facilitator_path(workshop.conference.slug, workshop.id), class: 'add-facilitator mini-flex-form' do
.email-field.input-field .email-field.input-field
= email_field_tag :email, nil, required: true = email_field_tag :email, nil, required: true
= label_tag :email = label_tag :email

2
app/views/workshops/new.html.haml

@ -11,6 +11,8 @@
= hidden_field_tag :translation, @translation = hidden_field_tag :translation, @translation
- else - else
%h2=_@page_title, :t %h2=_@page_title, :t
- unless @is_translating || @workshop.locale.to_s == I18n.locale.to_s
= status_bubble(_('articles.workshops.paragraphs.not_original_locale', vars: { original_locale: language_name(@workshop.locale), this_locale: language_name(I18n.locale), link: translate_workshop_url(@workshop.conference.slug, @workshop.id, I18n.locale) }), :warning, class: 'top-message')
- else - else
%h2=_@page_title, :t %h2=_@page_title, :t

5
config/locales/en.yml

@ -1833,7 +1833,11 @@ en:
volunteering_info: Volunteering info volunteering_info: Volunteering info
additional_details: Additional details additional_details: Additional details
companion: Companion companion: Companion
Housing: Housing
housing:
Rules: House Rules
paragraphs: paragraphs:
Housing: You are staying at %{address}, your host's name is %{name}. You can contact them by email %{email} or by phone at %{phone}. Please take some time to read their house rules below.
pronoun: It is important that communications with you and about you are as pronoun: It is important that communications with you and about you are as
respectful as possible. If you do not provide a pronoun organizers may assume respectful as possible. If you do not provide a pronoun organizers may assume
he, she, or they based on your name or visual identity. he, she, or they based on your name or visual identity.
@ -2242,6 +2246,7 @@ en:
we want to hear about everyone’s experience within the many configurations we want to hear about everyone’s experience within the many configurations
of community shops we’re coming from. of community shops we’re coming from.
notes: Notes are only viewable by conference hosts and workshop facilitators notes: Notes are only viewable by conference hosts and workshop facilitators
not_original_locale: You are editing a %{original_locale} workshop, <a href="%{link}">edit the %{this_locale} translation instead</a>
facilitate_request: Please tell the current workshop facilitators who you facilitate_request: Please tell the current workshop facilitators who you
are, why you want to help facilitate the workshop, and how you think you are, why you want to help facilitate the workshop, and how you think you
will help make the workshop better. All of the current facilitators will will help make the workshop better. All of the current facilitators will

2
config/locales/fr.yml

@ -1333,6 +1333,7 @@ fr:
d’avis à nouveau,veuillez cliquer sur le boutonci-dessous,maissouvenez-vousquesi d’avis à nouveau,veuillez cliquer sur le boutonci-dessous,maissouvenez-vousquesi
vous attendez trop longtemps,votre hébergement et votre bicyclette pourraient vous attendez trop longtemps,votre hébergement et votre bicyclette pourraient
être attribués à quelqu’un d’autre. être attribués à quelqu’un d’autre.
Housing: Vous restez à %{address}, le nom de votre hôte est %{name}. Vous pouvez les contacter par email %{email} ou par téléphone à %{phone}. Prenez le temps de lire les règles de leur maison ci-dessous.
pronoun_optional: Il n’y a aucune obligation de choisir un pronom. pronoun_optional: Il n’y a aucune obligation de choisir un pronom.
pronoun: Il importe que lorsqu'on communique avec vous ou au sujet de vous, pronoun: Il importe que lorsqu'on communique avec vous ou au sujet de vous,
ce soit avec respect. Si vous ne précisez pas votre pronom, les organisateurs ce soit avec respect. Si vous ne précisez pas votre pronom, les organisateurs
@ -1617,6 +1618,7 @@ fr:
facilitate_request_sent: Votre demande a été envoyée. Vous recevrez un courriel facilitate_request_sent: Votre demande a été envoyée. Vous recevrez un courriel
une fois qu’elle aura été approuvée ou rejetée, ou si l’un des animateurs une fois qu’elle aura été approuvée ou rejetée, ou si l’un des animateurs
ou l’une des animatrices a des questions. ou l’une des animatrices a des questions.
not_original_locale: Vous éditez un atelier %{original_locale}, <a href="%{link}">éditez la traduction %{this_locale} à la place</a>
notes: Les remarques ne peuvent être vues que par organisateurs et les organisatrices notes: Les remarques ne peuvent être vues que par organisateurs et les organisatrices
ainsi que par les personnes qui animent les présentations. ainsi que par les personnes qui animent les présentations.
needs: Si vous avez besoin du matériel qui suit, les organisateurs et les needs: Si vous avez besoin du matériel qui suit, les organisateurs et les

Loading…
Cancel
Save