effective_events 0.4.2 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 236b7276f8f6220d407e2886387d8523a674ced409518d5155b049aecdf316d9
4
- data.tar.gz: 9e5e268aa3a262695f760cab5b824e4340ca56c500cec01e85976bcb59556b71
3
+ metadata.gz: b4f1c6fdc854ef73a51955a8d6384e5c4b92e1351ea77fe452038d9aaf0ea36c
4
+ data.tar.gz: 8f7a424f52aa2c056969dba54947385e0374b66af5f41a7317dc2b682634e460
5
5
  SHA512:
6
- metadata.gz: 54f63bd4dc7e3de2074669298164c84301592e5c7fc8bfe19d36960a61d670d5a50c1ce118560e5fd85e19ce65c22877821569bbbac9c7145563e06547dc716a
7
- data.tar.gz: 97f4c5213a4454509b52212681444d67b2fce6b2c9abcdf81422c8f0700eccda5a5ab75782196eadc418a60c9ef45a2c98f09ae640a582a1ba42c94188bab9e6
6
+ metadata.gz: bb906912c0f4bcc169da25ee13b19c1f4403c30fb3019cee51b6a93e161941d48528d8c472e84d37a0eb8873e10151a128a9bd72c9c17ec325efef6baf0ce878
7
+ data.tar.gz: d10878d80afeb41932d7e79d390d52226c172505bfa031d6a709b22fd564888f33681ff465f644abe2f0ccf5e23f0fe5b91a18c8d29ad207bff1e41769434004
@@ -7,6 +7,20 @@ module Effective
7
7
  Effective::Event.events(user: current_user, unpublished: unpublished)
8
8
  }
9
9
 
10
+ def index
11
+ @page_title ||= 'Events'
12
+ EffectiveResources.authorize!(self, :index, Effective::Event)
13
+
14
+ # Sometimes we just display a Datatable for the events
15
+ @datatable = EffectiveResources.best('EffectiveEventsDatatable').new
16
+
17
+ # But more often we do a full paginated index with search screen
18
+ @event_search = build_event_search
19
+ @event_search.search!
20
+
21
+ @events = @event_search.results(page: params[:page])
22
+ end
23
+
10
24
  def show
11
25
  @event = resource_scope.find(params[:id])
12
26
 
@@ -28,5 +42,28 @@ module Effective
28
42
  @page_title ||= @event.to_s
29
43
  end
30
44
 
45
+ def build_event_search
46
+ search = EventSearch.new(search_params)
47
+ search.current_user = current_user
48
+ search.unpublished = EffectiveResources.authorized?(self, :admin, :effective_events)
49
+ search.category ||= event_category
50
+ search
51
+ end
52
+
53
+ def event_category
54
+ return nil unless params[:category].present?
55
+ EffectiveEvents.categories.find { |category| category.parameterize == params[:category] }
56
+ end
57
+
58
+ def search_params
59
+ return {} unless params[:q].present?
60
+
61
+ if params[:q].respond_to?(:to_h) # From the search form
62
+ params.require(:q).permit!
63
+ else
64
+ { term: params.permit(:q).fetch(:q) } # From the url /events?q=asdf
65
+ end
66
+ end
67
+
31
68
  end
32
69
  end
@@ -3,7 +3,8 @@ module Admin
3
3
  filters do
4
4
  scope :all
5
5
  scope :registerable
6
- scope :drafts
6
+ scope :published
7
+ scope :unpublished
7
8
  scope :upcoming
8
9
  scope :past
9
10
  end
@@ -2,6 +2,7 @@
2
2
  class EffectiveEventsDatatable < Effective::Datatable
3
3
  filters do
4
4
  # Upcoming should be first here, so when displayed as a simple datatable on the dashboard they only see upcoming events
5
+ scope :upcoming
5
6
  scope :registerable
6
7
  scope :all
7
8
  end
@@ -32,7 +33,8 @@ class EffectiveEventsDatatable < Effective::Datatable
32
33
 
33
34
  actions_col show: false do |event|
34
35
  if event.registerable?
35
- dropdown_link_to('Register', effective_events.new_event_event_registration_path(event))
36
+ url = event.external_registration_url.presence || effective_events.new_event_event_registration_path(event)
37
+ dropdown_link_to('Register', url)
36
38
  end
37
39
  end
38
40
  end
@@ -1,4 +1,11 @@
1
1
  module EffectiveEventsHelper
2
+ def effective_events_event_schedule(event)
3
+ if event.start_at.beginning_of_day == event.end_at.beginning_of_day
4
+ "#{event.start_at.strftime("%b %d, %Y %I:%M%P")} - #{event.end_at.strftime("%I:%M%P")}"
5
+ else
6
+ "#{event.start_at.strftime("%b %d, %Y")} - #{event.end_at.strftime("%b %d, %Y")}"
7
+ end
8
+ end
2
9
 
3
10
  def effective_events_event_tickets_collection(event, namespace = nil)
4
11
  raise('expected an Effective::Event') unless event.kind_of?(Effective::Event)
@@ -37,5 +44,4 @@ module EffectiveEventsHelper
37
44
  [label, product.to_param, disabled].compact
38
45
  end
39
46
  end
40
-
41
47
  end
@@ -82,6 +82,11 @@ module EffectiveEventsEventRegistration
82
82
  validates :owner, presence: true
83
83
  validates :event, presence: true
84
84
 
85
+ # All Steps
86
+ validate(if: -> { event.present? }) do
87
+ self.errors.add(:base, "cannot register for an external registration event") if event.external_registration?
88
+ end
89
+
85
90
  # Tickets Step
86
91
  validate(if: -> { current_step == :tickets }) do
87
92
  self.errors.add(:event_registrants, "can't be blank") unless present_event_registrants.present?
@@ -28,6 +28,8 @@ module Effective
28
28
  # rich_text_select_content
29
29
  # rich_text_select_content
30
30
 
31
+ has_one_attached :file
32
+
31
33
  acts_as_slugged
32
34
  log_changes if respond_to?(:log_changes)
33
35
  acts_as_role_restricted if respond_to?(:acts_as_role_restricted)
@@ -37,8 +39,11 @@ module Effective
37
39
  effective_resource do
38
40
  title :string
39
41
 
42
+ category :string
40
43
  slug :string
44
+
41
45
  draft :boolean
46
+ published_at :datetime
42
47
 
43
48
  start_at :datetime
44
49
  end_at :datetime
@@ -48,6 +53,9 @@ module Effective
48
53
 
49
54
  early_bird_end_at :datetime # Optional
50
55
 
56
+ external_registration :boolean
57
+ external_registration_url :string
58
+
51
59
  # Access
52
60
  roles_mask :integer
53
61
  authenticate_user :boolean
@@ -55,11 +63,11 @@ module Effective
55
63
  timestamps
56
64
  end
57
65
 
58
- scope :sorted, -> { order(:end_at) }
66
+ scope :sorted, -> { order(published_at: :desc).order(:id) }
59
67
  scope :deep, -> { includes(:event_registrants, :event_tickets) }
60
68
 
61
- scope :drafts, -> { where(draft: true) }
62
- scope :published, -> { where(draft: false) }
69
+ scope :published, -> { where(draft: false).where(arel_table[:published_at].lt(Time.zone.now)) }
70
+ scope :unpublished, -> { where(draft: true).where(arel_table[:published_at].gteq(Time.zone.now)) }
63
71
 
64
72
  scope :upcoming, -> { where(arel_table[:end_at].gt(Time.zone.now)) }
65
73
  scope :past, -> { where(arel_table[:end_at].lteq(Time.zone.now)) }
@@ -79,7 +87,7 @@ module Effective
79
87
  limit(per_page).offset(offset)
80
88
  }
81
89
 
82
- scope :events, -> (user: nil, unpublished: false) {
90
+ scope :events, -> (user: nil, category: nil, unpublished: false) {
83
91
  scope = all.deep.sorted
84
92
 
85
93
  if defined?(EffectiveRoles) && EffectiveEvents.use_effective_roles
@@ -90,6 +98,10 @@ module Effective
90
98
  scope = scope.where(authenticate_user: false)
91
99
  end
92
100
 
101
+ if category.present?
102
+ scope = scope.where(category: category)
103
+ end
104
+
93
105
  unless unpublished
94
106
  scope = scope.published
95
107
  end
@@ -98,11 +110,12 @@ module Effective
98
110
  }
99
111
 
100
112
  validates :title, presence: true, length: { maximum: 255 }
101
-
113
+ validates :published_at, presence: true, unless: -> { draft? }
102
114
  validates :start_at, presence: true
103
115
  validates :end_at, presence: true
104
116
  validates :registration_start_at, presence: true
105
117
  validates :registration_end_at, presence: true
118
+ validates :external_registration_url, presence: true, if: -> { external_registration? }
106
119
 
107
120
  validate(if: -> { start_at && end_at }) do
108
121
  self.errors.add(:end_at, 'must be after start date') unless start_at < end_at
@@ -120,6 +133,14 @@ module Effective
120
133
  self.errors.add(:early_bird_end_at, 'must be before start date') unless early_bird_end_at < start_at
121
134
  end
122
135
 
136
+ validate(if: -> { file.attached? }) do
137
+ self.errors.add(:file, 'must be an image') unless file.image?
138
+ end
139
+
140
+ validate(if: -> { category.present? }) do
141
+ self.errors.add(:category, 'is not included in the list') unless EffectiveEvents.categories.include?(category)
142
+ end
143
+
123
144
  def to_s
124
145
  title.presence || 'New Event'
125
146
  end
@@ -132,13 +153,19 @@ module Effective
132
153
  rich_text_excerpt
133
154
  end
134
155
 
135
- def registerable?
156
+ def published?
136
157
  return false if draft?
158
+ return false if published_at.blank?
159
+
160
+ published_at < Time.zone.now
161
+ end
162
+
163
+ def registerable?
164
+ return false unless published?
137
165
  return false if closed?
138
166
  return false if sold_out?
139
- return false if event_tickets.blank?
140
167
 
141
- true
168
+ external_registration? || event_tickets.present?
142
169
  end
143
170
 
144
171
  def closed?
@@ -0,0 +1,82 @@
1
+ module Effective
2
+ class EventSearch
3
+ include ActiveModel::Model
4
+
5
+ ORDERS = ['Sort by Published Date', 'Sort by Event Date']
6
+
7
+ attr_accessor :current_user
8
+ attr_accessor :unpublished
9
+
10
+ attr_accessor :term
11
+ attr_accessor :category
12
+ attr_accessor :order
13
+
14
+ validates :term, length: { minimum: 2, allow_blank: true }
15
+ validates :order, inclusion: { in: ORDERS, allow_blank: true }
16
+
17
+ # Base collection to search.
18
+ def collection
19
+ Event.events(user: current_user, unpublished: unpublished)
20
+ end
21
+
22
+ def per_page
23
+ (EffectiveEvents.per_page || 24).to_i
24
+ end
25
+
26
+ def present?
27
+ term.present? || category.present? || order.present?
28
+ end
29
+
30
+ # Search and assigns the collection
31
+ # Assigns the entire collection() if there are no search terms
32
+ # Otherwise validate the search terms
33
+ def search!
34
+ @events = build_collection()
35
+ @events = @events.none if present? && !valid?
36
+ @events
37
+ end
38
+
39
+ # The unpaginated results of the search
40
+ def events
41
+ @events || collection
42
+ end
43
+
44
+ # The paginated results
45
+ def results(page: nil)
46
+ page = (page || 1).to_i
47
+ offset = [(page - 1), 0].max * per_page
48
+
49
+ events.limit(per_page).offset(offset)
50
+ end
51
+
52
+ protected
53
+
54
+ def build_collection
55
+ events = collection()
56
+ raise('expected an ActiveRecord collection') unless events.kind_of?(ActiveRecord::Relation)
57
+
58
+ # Filter by term
59
+ if term.present?
60
+ events = Effective::Resource.new(events).search_any(term)
61
+ end
62
+
63
+ # Filter by category
64
+ if category.present?
65
+ events = events.where(category: category)
66
+ end
67
+
68
+ # Apply Sorting
69
+ events = case order.to_s
70
+ when 'Sort by Published Date'
71
+ events.reorder(published_at: :desc)
72
+ when 'Sort by Event Date'
73
+ events.reorder(start_at: :desc)
74
+ else
75
+ events.reorder(published_at: :desc) # Default Sort by Published Date
76
+ end
77
+
78
+ events
79
+ end
80
+ end
81
+
82
+ end
@@ -6,6 +6,7 @@
6
6
  = tab 'Content' do
7
7
  = render '/admin/events/form_content', event: event
8
8
 
9
+ - if event.persisted? && !event.external_registration?
9
10
  = tab 'Tickets' do
10
11
  %h2 Tickets
11
12
  - datatable = Admin::EffectiveEventTicketsDatatable.new(event_id: event.id)
@@ -40,6 +41,7 @@
40
41
  = tab 'Wizard' do
41
42
  = render '/admin/events/form_event_registration_content', event: event
42
43
 
44
+ - if event.persisted?
43
45
  = tab 'Access' do
44
46
  = render '/admin/events/form_access', event: event
45
47
 
@@ -1,9 +1,11 @@
1
1
  = effective_form_with(model: [:admin, event], engine: true) do |f|
2
+ = f.file_field :file, label: 'Image attachment', hint: EffectiveEvents.events_hint_text
3
+
2
4
  - if defined?(EffectiveArticleEditor)
3
- = f.article_editor :rich_text_excerpt, hint: 'Will be used for the events excerpt on index pages.'
4
- = f.article_editor :rich_text_body, hint: 'The main body of your event'
5
+ = f.article_editor :rich_text_excerpt, label: 'Excerpt', hint: 'Will be used for the events excerpt on index pages.'
6
+ = f.article_editor :rich_text_body, label: 'Body', hint: 'The main body of your event'
5
7
  - else
6
- = f.rich_text_area :rich_text_excerpt, hint: 'Will be used for the events excerpt on index pages.'
7
- = f.rich_text_area :rich_text_body, hint: 'The main body of your event'
8
+ = f.rich_text_area :rich_text_excerpt, label: 'Excerpt', hint: 'Will be used for the events excerpt on index pages.'
9
+ = f.rich_text_area :rich_text_body, label: 'Body', hint: 'The main body of your event'
8
10
 
9
11
  = f.submit
@@ -1,5 +1,11 @@
1
1
  = effective_form_with(model: [:admin, event], engine: true) do |f|
2
2
  = f.text_field :title, label: "Title"
3
+
4
+ - categories = EffectiveEvents.categories
5
+ - if categories.present?
6
+ = f.select :category, categories, hint: 'optional category'
7
+
8
+ = f.datetime_field :published_at, label: 'Publish date', hint: 'When should this be displayed on the website.'
3
9
  = f.check_box :draft, hint: 'Save this event as a draft. It will not be accessible on the website.'
4
10
 
5
11
  - if f.object.persisted? || f.object.errors.include?(:slug)
@@ -13,10 +19,14 @@
13
19
  %p The online registration and purchase for this event will be available between:
14
20
  = f.datetime_field :registration_start_at, label: "Registration Start"
15
21
  = f.datetime_field :registration_end_at, label: "Registration End"
16
-
17
22
  = f.datetime_field :early_bird_end_at, label: "Early Bird End",
18
23
  hint: 'Event tickets can be purchased for early bird pricing before this date. Afterwards regular pricing applies.'
19
24
 
25
+ = f.check_box :external_registration, label: "Yes, the registration for this event is handled by another website"
26
+
27
+ = f.show_if(:external_registration, true) do
28
+ = f.url_field :external_registration_url, hint: "The url for external event registration. Must start with http(s)://"
29
+
20
30
  = f.submit do
21
31
  = f.save 'Save'
22
32
  = f.save 'Save and View', class: 'btn btn-secondary'
@@ -0,0 +1,6 @@
1
+ .effective-event-categories
2
+ %ul.nav.nav-pills{role: 'navigation'}
3
+ = nav_link_to('All Events', effective_events.events_path, class: "nav-pill-effective-event effective-event-all")
4
+
5
+ - EffectiveEvents.categories.each do |category|
6
+ = nav_link_to(category, effective_events.events_path + '/' + category.parameterize, class: "nav-pill-effective-event effective-event-#{category.parameterize}")
@@ -1,41 +1,7 @@
1
- .card
1
+ .card{class: "effective-events-#{event.category.parameterize}"}
2
2
  .card-body
3
- %table.table.effective-events-table
4
- %tbody
5
- %tr
6
- %th Dates
7
- %td
8
- Starts: #{event.start_at&.strftime('%F %R')}
9
- %br
10
- Ends: #{event.end_at&.strftime('%F %R')}
11
-
12
- %tr
13
- %th Registration Closes
14
- %td= event.registration_end_at.strftime('%F %R')
15
-
16
- %tr
17
- %th Early Bird
18
- %td
19
- Status: #{event.early_bird_status}
20
- %br
21
- Ends: #{event.early_bird_end_at&.strftime('%F %R')}
22
-
23
- %tr
24
- %th Tickets
25
- %td
26
- %ul.pl-3
27
- - event.event_tickets.each do |ticket|
28
- %li= "#{ticket} (#{price_to_currency(ticket.price)})"
29
-
30
- - if event.event_products.present?
31
- %tr
32
- %th Add-ons
33
- %td
34
- %ul.pl-0
35
- - event.event_products.each do |product|
36
- %li= "#{product} (#{price_to_currency(product.price)})"
37
-
38
- - if event.body.present?
39
- %tr
40
- %th Description
41
- %td= event.body
3
+ = link_to(event.category, effective_events.events_path + '/' + event.category.parameterize, class: "badge badge-event mb-2 effective-events-#{event.category.parameterize}")
4
+ %h2.mt-1= link_to event.title, effective_events.event_path(event)
5
+ .effective-events-schedule= effective_events_event_schedule(event)
6
+ .effective-events-excerpt= event.excerpt.to_s
7
+ = link_to "View Event", effective_events.event_path(event), class: 'btn btn-primary'
@@ -0,0 +1,11 @@
1
+ = effective_form_with(scope: :q, model: event_search, method: :get, url: request.path) do |f|
2
+ - if f.object.term.present?
3
+ = f.search_field :term, label: 'Term'
4
+
5
+ /= f.radios :category, EffectiveEvents.categories, buttons: true
6
+
7
+ - f.object.order ||= Effective::EventSearch::ORDERS.first
8
+ = f.radios :order, Effective::EventSearch::ORDERS, buttons: true
9
+
10
+ = f.save('Search', class: 'btn btn-primary btn-search mr-3', name: nil)
11
+ = link_to 'Reset filters', request.path
@@ -0,0 +1,2 @@
1
+ .effective-events
2
+ = yield
@@ -1,5 +1,16 @@
1
- = card do
2
- - if @datatable.present?(self)
3
- = render_datatable(@datatable, simple: true)
4
- - else
5
- %p There are no events open for registration. When there are, we'll show them here.
1
+ = render 'layout' do
2
+ -# render_datatable(@datatable)
3
+
4
+ .mb-4= render('effective/events/categories')
5
+ .mb-4= render('effective/events/form', event_search: @event_search)
6
+
7
+ - results = @event_search.results(page: params[:page])
8
+
9
+ - if @event_search.present? && results.length == 0
10
+ .alert.alert-info There are no results for your search. Please try again.
11
+
12
+ -# This renders effective/events/event
13
+ = render(results)
14
+
15
+ %nav.d-flex.justify-content-center
16
+ = bootstrap_paginate(results, per_page: @event_search.per_page)
@@ -1,12 +1,58 @@
1
- .effective-event
2
- - if @event.sold_out?
3
- .alert.alert-warning This event is sold out.
1
+ = render 'layout' do
2
+ .effective-event
3
+ - if @event.sold_out?
4
+ .alert.alert-warning.mb-3 This event is sold out.
4
5
 
5
- - if @event.closed?
6
- .alert.alert-warning This event is no longer available.
6
+ - if @event.closed?
7
+ .alert.alert-warning.mb-3 This event is no longer available.
7
8
 
8
- - if @event.registerable?
9
- .resource-buttons
10
- = link_to 'Register', effective_events.new_event_event_registration_path(@event), class: 'btn btn-primary'
9
+ - if @event.registerable?
10
+ .resource-buttons
11
+ - url = @event.external_registration_url.presence || effective_events.new_event_event_registration_path(@event)
12
+ = link_to 'Register', url, class: 'btn btn-primary'
11
13
 
12
- = render 'effective/events/event', event: @event
14
+ - if @event.file.attached?
15
+ = image_tag(@event.file)
16
+
17
+ - if @event.file.attached?
18
+ = image_tag(@event.file)
19
+
20
+ %ul.list-unstyled
21
+ -# Not shown
22
+ %li
23
+ %strong Published:
24
+ = @event.published_at.strftime("%b %d, %Y %I:%M%P")
25
+
26
+ %li
27
+ %strong Event Date:
28
+ = effective_events_event_schedule(@event)
29
+
30
+ %li
31
+ %strong Registration Opens:
32
+ = @event.registration_start_at.strftime("%b %d, %Y %I:%M%P")
33
+
34
+ - if @event.early_bird_end_at.present?
35
+ %li
36
+ %strong Early Bird Rate Ends:
37
+ = @event.early_bird_end_at.strftime("%b %d, %Y %I:%M%P")
38
+
39
+ %li
40
+ %strong Registration Closes:
41
+ = @event.registration_end_at.strftime('%F %R')
42
+
43
+ - if @event.event_tickets.present?
44
+ %li
45
+ %strong Tickets
46
+ %ul
47
+ - @event.event_tickets.each do |ticket|
48
+ %li= "#{ticket} (#{price_to_currency(ticket.price)})"
49
+
50
+ - if @event.event_products.present?
51
+ %li
52
+ %strong Add-ons
53
+ %ul
54
+ - @event.event_products.each do |product|
55
+ %li= "#{product} (#{price_to_currency(product.price)})"
56
+
57
+ - if @event.body.present?
58
+ = @event.body.to_s
@@ -19,6 +19,12 @@ EffectiveEvents.setup do |config|
19
19
  # Events can be restricted by role
20
20
  config.use_effective_roles = true
21
21
 
22
+ # Categories
23
+ config.categories = ['Events']
24
+
25
+ # Hint text for event images attachments
26
+ config.events_hint_text = 'Hint text that includes required image dimensions'
27
+
22
28
  # Mailer Settings
23
29
  # Please see config/initializers/effective_resources.rb for default effective_* gem mailer settings
24
30
  #
data/config/routes.rb CHANGED
@@ -7,6 +7,16 @@ end
7
7
  EffectiveEvents::Engine.routes.draw do
8
8
  # Public routes
9
9
  scope module: 'effective' do
10
+
11
+ # Event Category routes
12
+ match 'events/:category', to: 'events#index', via: :get, constraints: lambda { |req|
13
+ EffectiveEvents.categories.map(&:parameterize).include?(req.params['category'])
14
+ }
15
+
16
+ match "events/:category/:id", to: 'events#show', via: :get, constraints: lambda { |req|
17
+ EffectiveEvents.categories.map(&:parameterize).include?(req.params['category'])
18
+ }
19
+
10
20
  resources :events, only: [:index, :show] do
11
21
  resources :event_registrations, only: [:new, :show, :destroy] do
12
22
  resources :build, controller: :event_registrations, only: [:show, :update]
@@ -3,8 +3,11 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
3
3
  create_table <%= @events_table_name %> do |t|
4
4
  t.string :title
5
5
 
6
+ t.string :category
6
7
  t.string :slug
8
+
7
9
  t.boolean :draft, default: false
10
+ t.datetime :published_at
8
11
 
9
12
  t.datetime :start_at
10
13
  t.datetime :end_at
@@ -16,6 +19,9 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
16
19
  t.integer :event_registrants_count, default: 0
17
20
  t.integer :event_addons_count, default: 0
18
21
 
22
+ t.boolean :external_registration, default: false
23
+ t.string :external_registration_url
24
+
19
25
  t.integer :roles_mask
20
26
  t.boolean :authenticate_user, default: false
21
27
 
data/db/seeds.rb CHANGED
@@ -13,6 +13,7 @@ event = Effective::Event.create!(
13
13
  rich_text_excerpt: '<p>This is a great event</p>',
14
14
  rich_text_body: '<p>This is a really great event!</p>',
15
15
 
16
+ published_at: Time.zone.now,
16
17
  start_at: (now + 1.week),
17
18
  end_at: (now + 1.week + 1.hour),
18
19
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveEvents
2
- VERSION = '0.4.2'.freeze
2
+ VERSION = '0.5.1'.freeze
3
3
  end
@@ -9,8 +9,8 @@ module EffectiveEvents
9
9
  :events_table_name, :event_registrants_table_name, :event_tickets_table_name,
10
10
  :event_registrations_table_name, :event_products_table_name, :event_addons_table_name,
11
11
  :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject, :use_effective_email_templates,
12
- :layout, :per_page, :use_effective_roles,
13
- :event_registration_class_name,
12
+ :layout, :per_page, :use_effective_roles, :categories, :events_hint_text,
13
+ :event_registration_class_name
14
14
  ]
15
15
  end
16
16
 
@@ -24,4 +24,8 @@ module EffectiveEvents
24
24
  mailer&.constantize || Effective::EventsMailer
25
25
  end
26
26
 
27
+ def categories
28
+ Array(config[:categories]) - [nil, false, '']
29
+ end
30
+
27
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_events
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-14 00:00:00.000000000 Z
11
+ date: 2022-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -222,6 +222,7 @@ files:
222
222
  - app/models/effective/event_product.rb
223
223
  - app/models/effective/event_registrant.rb
224
224
  - app/models/effective/event_registration.rb
225
+ - app/models/effective/event_search.rb
225
226
  - app/models/effective/event_ticket.rb
226
227
  - app/views/admin/event_addons/_form.html.haml
227
228
  - app/views/admin/event_notifications/_form.html.haml
@@ -251,8 +252,11 @@ files:
251
252
  - app/views/effective/event_registrations/submitted.html.haml
252
253
  - app/views/effective/event_registrations/summary.html.haml
253
254
  - app/views/effective/event_registrations/tickets.html.haml
255
+ - app/views/effective/events/_categories.html.haml
254
256
  - app/views/effective/events/_dashboard.html.haml
255
257
  - app/views/effective/events/_event.html.haml
258
+ - app/views/effective/events/_form.html.haml
259
+ - app/views/effective/events/_layout.html.haml
256
260
  - app/views/effective/events/index.html.haml
257
261
  - app/views/effective/events/show.html.haml
258
262
  - app/views/effective/events_mailer/event_registrant_purchased.liquid