trusty-festivity-extension 2.1.1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/javascripts/admin/sites/site_bindings.js +90 -0
- data/app/assets/stylesheets/admin/modules/_form_styles.scss +1 -1
- data/app/controllers/admin/festivity_performances_controller.rb +1 -1
- data/app/controllers/festivity_events_controller.rb +6 -4
- data/app/models/festivity_event_list.rb +13 -7
- data/app/models/festivity_performance.rb +2 -2
- data/app/presenters/festivity_date_presenter.rb +7 -0
- data/app/presenters/festivity_datetime_filter_presenter.rb +14 -0
- data/app/presenters/festivity_datetime_presenter.rb +36 -0
- data/app/presenters/festivity_time_presenter.rb +7 -0
- data/app/presenters/social/feed_presenter.rb +9 -0
- data/app/presenters/social/instagram_post_presenter.rb +44 -0
- data/app/services/instagram_feed_service.rb +13 -0
- data/app/services/social_feed_service.rb +18 -0
- data/app/views/admin/pages/partials/_performances.html.haml +1 -1
- data/app/views/admin/sites/_festivity_site_fields.html.haml +12 -4
- data/app/views/festivity_events/_event_filters.html.haml +12 -4
- data/app/views/festivity_events/_event_list.html.haml +1 -1
- data/app/views/festivity_events/show.html.haml +1 -1
- data/app/views/social/_instagram_posts.html.haml +4 -0
- data/db/migrate/20151018190155_update_site_for_hourly_filters.rb +14 -0
- data/db/migrate/20151105155407_add_buy_ticket_text_to_site.rb +5 -0
- data/festivity_extension.rb +2 -0
- data/lib/festivity/extensions/site_extensions.rb +19 -6
- data/lib/tags/social_feed_tags.rb +16 -0
- data/lib/trusty-festivity-extension.rb +1 -1
- data/trusty-festivity-extension.gemspec +3 -0
- metadata +56 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDAxODFiOTU5ZTc5NzMwOGNiNjhlYWFlMmRlZTQ4ZWMzMmFiZTY0YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODRhMjdkZWZiMzg1Mzk3ZjBiNjBmYWYwNjc3ODJmNWNmYjcxOTkxZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTk1YjNlOTQzY2QzZjIzYzQ4ZTFlNTBiMDAzODliMGMyMzZmNzZlMzUyNTc0
|
10
|
+
NjY5NjdjN2IwOGJkNjkwNGJiODMxNGFlODc4OWJkZTY5ZjY3Y2U0MTI1ZTI1
|
11
|
+
OThjN2VlMzAwYTAyNGZlYTQyM2NmNWVmODYyYjg0YTZkZGJlM2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzIyNWRhMWUxYWMwMjkxZWQ2NjYwOTdhZjM2MGIwNDAwZTZiNTAwNTAyNGNl
|
14
|
+
ZmQ2MTEzYjRhYThjYTYyMWVjNjk1YzA2OGZjMmUwZDhlMjk0ODNjNDcwMzlk
|
15
|
+
ZjZhNmI2OWI3M2MyZDEzODMyNGVhNzVjOWIyNDM5NWVmZjQ5ZTY=
|
@@ -1,4 +1,94 @@
|
|
1
1
|
$(function () {
|
2
|
+
$.extend($.inputmask.defaults.aliases, {
|
3
|
+
festivitydatetime12: {
|
4
|
+
mask: "1/2/y h:s t\\m",
|
5
|
+
placeholder: "mm/dd/yyyy hh:mm xm",
|
6
|
+
alias: "mm/dd/yyyy",
|
7
|
+
hourFormat: "12",
|
8
|
+
regex: {
|
9
|
+
hrspre: new RegExp("[012]"),
|
10
|
+
hrs24: new RegExp("2[0-4]|1[3-9]"),
|
11
|
+
hrs: new RegExp("[01][0-9]|2[0-4]"),
|
12
|
+
ampm: new RegExp("^[a|p|A|P][m|M]"),
|
13
|
+
mspre: new RegExp("[0-5]"),
|
14
|
+
ms: new RegExp("[0-5][0-9]")
|
15
|
+
},
|
16
|
+
timeseparator: ":",
|
17
|
+
definitions: {
|
18
|
+
h: {
|
19
|
+
validator: function(chrs, maskset, pos, strict, opts) {
|
20
|
+
if ("24" == opts.hourFormat && 24 == parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0",
|
21
|
+
maskset.buffer[pos] = "0", {
|
22
|
+
refreshFromBuffer: {
|
23
|
+
start: pos - 1,
|
24
|
+
end: pos
|
25
|
+
},
|
26
|
+
c: "0"
|
27
|
+
};
|
28
|
+
var isValid = opts.regex.hrs.test(chrs);
|
29
|
+
if (!strict && !isValid && (chrs.charAt(1) == opts.timeseparator || -1 != "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
|
30
|
+
maskset.buffer[pos] = chrs.charAt(0), pos++, {
|
31
|
+
refreshFromBuffer: {
|
32
|
+
start: pos - 2,
|
33
|
+
end: pos
|
34
|
+
},
|
35
|
+
pos: pos,
|
36
|
+
c: opts.timeseparator
|
37
|
+
};
|
38
|
+
if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
|
39
|
+
var tmp = parseInt(chrs, 10);
|
40
|
+
return 24 == tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p",
|
41
|
+
maskset.buffer[pos + 6] = "m"), tmp -= 12, 10 > tmp ? (maskset.buffer[pos] = tmp.toString(),
|
42
|
+
maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1),
|
43
|
+
maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
|
44
|
+
refreshFromBuffer: {
|
45
|
+
start: pos - 1,
|
46
|
+
end: pos + 6
|
47
|
+
},
|
48
|
+
c: maskset.buffer[pos]
|
49
|
+
};
|
50
|
+
}
|
51
|
+
return isValid;
|
52
|
+
},
|
53
|
+
cardinality: 2,
|
54
|
+
prevalidator: [ {
|
55
|
+
validator: function(chrs, maskset, pos, strict, opts) {
|
56
|
+
var isValid = opts.regex.hrspre.test(chrs);
|
57
|
+
return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
|
58
|
+
pos++, {
|
59
|
+
pos: pos
|
60
|
+
});
|
61
|
+
},
|
62
|
+
cardinality: 1
|
63
|
+
} ]
|
64
|
+
},
|
65
|
+
s: {
|
66
|
+
validator: "[0-5][0-9]",
|
67
|
+
cardinality: 2,
|
68
|
+
prevalidator: [ {
|
69
|
+
validator: function(chrs, maskset, pos, strict, opts) {
|
70
|
+
var isValid = opts.regex.mspre.test(chrs);
|
71
|
+
return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
|
72
|
+
pos++, {
|
73
|
+
pos: pos
|
74
|
+
});
|
75
|
+
},
|
76
|
+
cardinality: 1
|
77
|
+
} ]
|
78
|
+
},
|
79
|
+
t: {
|
80
|
+
validator: function(chrs, maskset, pos, strict, opts) {
|
81
|
+
return opts.regex.ampm.test(chrs + "m");
|
82
|
+
},
|
83
|
+
casing: "lower",
|
84
|
+
cardinality: 1
|
85
|
+
}
|
86
|
+
},
|
87
|
+
insertMode: !1,
|
88
|
+
autoUnmask: !1
|
89
|
+
}
|
90
|
+
});
|
2
91
|
Festivity.CategoryTypes.bindEvents();
|
3
92
|
Festivity.Categories.bindEvents(null);
|
93
|
+
$(".date_field").inputmask("festivitydatetime12");
|
4
94
|
});
|
@@ -3,7 +3,7 @@ class Admin::FestivityPerformancesController < Admin::ResourceController
|
|
3
3
|
event = FestivityEventPage.find(params[:event_page_id])
|
4
4
|
performance = event.festivity_performances.new
|
5
5
|
if performance.save
|
6
|
-
render partial: 'admin/pages/partials/performance', :locals => {
|
6
|
+
render partial: 'admin/pages/partials/performance', :locals => {:performance => performance, :locations => FestivityLocationPage.where(site_id: event.site.id) }
|
7
7
|
else
|
8
8
|
render status: :bad_request
|
9
9
|
end
|
@@ -9,10 +9,12 @@ class FestivityEventsController < ApplicationController
|
|
9
9
|
def index
|
10
10
|
order_by = params[:sort] ? params[:sort] : "start_date"
|
11
11
|
@title = "#{current_site.festivity_festival_name}: Events"
|
12
|
+
@filter_type = current_site.festivity_filter_type
|
12
13
|
@events = Rails.cache.fetch("#{cache_key}", expires_in: 2.hours) do
|
13
14
|
FestivityEventList.search(
|
14
15
|
{dates: search_dates.join(","),
|
15
|
-
categories: params[:categories]
|
16
|
+
categories: params[:categories],
|
17
|
+
filter_type: current_site.festivity_filter_type},
|
16
18
|
order_by).events
|
17
19
|
end
|
18
20
|
|
@@ -59,9 +61,9 @@ class FestivityEventsController < ApplicationController
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def collect_festival_dates
|
62
|
-
festival_dates = current_site.
|
63
|
-
if current_site.date_during_festival?(
|
64
|
-
festival_dates = festival_dates.select{ |date| date ==
|
64
|
+
festival_dates = current_site.festival_datetimes
|
65
|
+
if current_site.date_during_festival?(DateTime.now)
|
66
|
+
festival_dates = festival_dates.select{ |date| date == DateTime.now }
|
65
67
|
end
|
66
68
|
|
67
69
|
festival_dates.map{ |date| date.to_s }
|
@@ -51,16 +51,16 @@ class FestivityEventList
|
|
51
51
|
private
|
52
52
|
|
53
53
|
# Return a list of unique event ids that match the provided dates
|
54
|
-
def self.
|
55
|
-
FestivityEventList::FestivityEventPerformance.where(
|
54
|
+
def self.event_ids_for_datetimes(datetimes, filter_type)
|
55
|
+
FestivityEventList::FestivityEventPerformance.where(datetime_criteria(datetimes, filter_type)).map {|e| e.event_id}.uniq
|
56
56
|
end
|
57
57
|
|
58
58
|
# Create a condition for start and end date between midnight and 11:59pm
|
59
59
|
# for each date passed in and return the SQL condition
|
60
|
-
def self.
|
61
|
-
date_queries =
|
62
|
-
start_date = DateTime.parse(date_string)
|
63
|
-
end_date = start_date.advance(
|
60
|
+
def self.datetime_criteria(datetimes_string, filter_type)
|
61
|
+
date_queries = datetimes_string.split(',').map do |date_string|
|
62
|
+
start_date = DateTime.parse(URI.decode(date_string))
|
63
|
+
end_date = start_date.advance(advance_by(filter_type))
|
64
64
|
<<-SQL
|
65
65
|
(
|
66
66
|
(start_date >= '#{start_date}' AND start_date <= '#{end_date}')
|
@@ -72,13 +72,19 @@ class FestivityEventList
|
|
72
72
|
date_queries.join(" OR ")
|
73
73
|
end
|
74
74
|
|
75
|
+
def self.advance_by(filter_type)
|
76
|
+
advance_by_hash = {minutes: 59}
|
77
|
+
advance_by_hash[:hours] = 23 if filter_type == "date"
|
78
|
+
advance_by_hash
|
79
|
+
end
|
80
|
+
|
75
81
|
# The order of querying, depending on what is passed:
|
76
82
|
# - If dates are passed, we search both start and end date between midnight and 11:59pm of that date.
|
77
83
|
# That query returns any matching event ids.
|
78
84
|
# - The event ids returned, if any, are added to the where clause for the next query
|
79
85
|
# - Any category ids passed are added to the where clause as well.
|
80
86
|
def self.parse_criteria(criteria)
|
81
|
-
event_ids =
|
87
|
+
event_ids = event_ids_for_datetimes(criteria[:dates], criteria[:filter_type]) if criteria[:dates]
|
82
88
|
where_clause = "site_id = #{ Page.current_site.id}"
|
83
89
|
where_clause += " AND event_id IN (#{event_ids.join(",")})" if event_ids.present?
|
84
90
|
where_clause += " AND #{parse_categories(criteria[:categories].split(","))}" if criteria[:categories]
|
@@ -2,6 +2,7 @@ class FestivityPerformance < ActiveRecord::Base
|
|
2
2
|
validates_presence_of :event_page_id
|
3
3
|
belongs_to :festivity_event_page, foreign_key: :event_page_id
|
4
4
|
belongs_to :festivity_location_page, foreign_key: :location_page_id
|
5
|
+
default_scope {order :start_date}
|
5
6
|
|
6
7
|
attr_accessible :start_date, :end_date, :festivity_location_page, :notes
|
7
8
|
|
@@ -20,8 +21,7 @@ class FestivityPerformance < ActiveRecord::Base
|
|
20
21
|
private
|
21
22
|
|
22
23
|
def parse_date(date)
|
23
|
-
|
24
|
-
Time.zone.local(time.year, time.month, time.day, time.hour, time.min, time.sec)
|
24
|
+
Time.parse(Time.strptime(date, "%m/%d/%Y %l:%M %P").to_s)
|
25
25
|
rescue
|
26
26
|
nil
|
27
27
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class FestivityDatetimeFilterPresenter
|
2
|
+
|
3
|
+
def self.new(datetimes, datetime_type)
|
4
|
+
datetimes.map { |datetime| datetime_type_class(datetime_type).new(datetime) }
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def self.datetime_type_class(datetime_type)
|
11
|
+
datetime_type == "date" ? FestivityDatePresenter : FestivityTimePresenter
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class FestivityDatetimePresenter
|
2
|
+
attr_reader :datetime
|
3
|
+
|
4
|
+
def initialize(datetime)
|
5
|
+
@datetime = datetime
|
6
|
+
end
|
7
|
+
|
8
|
+
def display_as_date
|
9
|
+
@datetime.strftime("%a, %B %-d")
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
@datetime.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_date
|
17
|
+
@datetime.to_date
|
18
|
+
end
|
19
|
+
|
20
|
+
def display_as_time_range
|
21
|
+
"#{display_start_time} - #{display_end_time}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def display_start_time
|
25
|
+
@datetime.strftime(display_time_format)
|
26
|
+
end
|
27
|
+
|
28
|
+
def display_end_time
|
29
|
+
(@datetime + 1.hour).strftime(display_time_format)
|
30
|
+
end
|
31
|
+
|
32
|
+
def display_time_format
|
33
|
+
"%l:%M %P"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
Social::InstagramPostPresenter = ImmutableStruct.new(
|
2
|
+
:user_full_name,
|
3
|
+
:user_id,
|
4
|
+
:user_profile_picture_url,
|
5
|
+
:user_username,
|
6
|
+
:id,
|
7
|
+
:text,
|
8
|
+
:filter,
|
9
|
+
:id,
|
10
|
+
:low_res_image_url,
|
11
|
+
:low_res_image_height,
|
12
|
+
:low_res_image_width,
|
13
|
+
:standard_res_image_url,
|
14
|
+
:standard_res_image_height,
|
15
|
+
:standard_res_image_width,
|
16
|
+
:thumbnail_image_url,
|
17
|
+
:thumbnail_res_image_height,
|
18
|
+
:thumbnail_res_image_width,
|
19
|
+
:url,
|
20
|
+
:created_time
|
21
|
+
) do
|
22
|
+
|
23
|
+
def self.from_instagram_post(post)
|
24
|
+
self.new(user_profile_picture_url: post.user.profile_picture,
|
25
|
+
user_full_name: post.user.full_name,
|
26
|
+
user_id: post.user.id,
|
27
|
+
user_username: post.user.username,
|
28
|
+
id: post.id,
|
29
|
+
created_time: Time.at(post.created_time.to_i),
|
30
|
+
text: post.caption.text,
|
31
|
+
filter: post.filter,
|
32
|
+
low_res_image_url: post.images.low_resolution.url,
|
33
|
+
low_res_image_height: post.images.low_resolution.height,
|
34
|
+
low_res_image_width: post.images.low_resolution.width,
|
35
|
+
standard_res_image_url: post.images.standard_resolution.url,
|
36
|
+
standard_res_image_height: post.images.standard_resolution.height,
|
37
|
+
standard_res_image_width: post.images.standard_resolution.width,
|
38
|
+
thumbnail_image_url: post.images.thumbnail.url,
|
39
|
+
thumbnail_image_height: post.images.thumbnail.height,
|
40
|
+
thumbnail_image_width: post.images.thumbnail.width,
|
41
|
+
url: post.link)
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
- locations = FestivityLocationPage.
|
1
|
+
- locations = FestivityLocationPage.where(site_id: @page.site.id)
|
2
2
|
.festivity-full.festivity-list.festivity-div
|
3
3
|
= render partial: 'admin/pages/partials/performances_table', locals: {performances: performances, locations: locations, page_id: page_id}
|
4
4
|
.right
|
@@ -12,12 +12,20 @@
|
|
12
12
|
= self.text_field( :site, :festivity_festival_name, class: "textbox festivity-control")
|
13
13
|
%p.festivity-third
|
14
14
|
%label{for: "site_festivity_start_date"}
|
15
|
-
Start
|
16
|
-
= self.text_field :site, :festivity_start_date, :class=> "textbox date festivity-control", :
|
15
|
+
Festival Start
|
16
|
+
= self.text_field :site, :festivity_start_date, :class=> "date_field textbox date festivity-control", :value => (@site.festivity_start_date ? format_date(@site.festivity_start_date) : nil)
|
17
17
|
%p.festivity-third
|
18
18
|
%label{for: "site_festivity_end_date"}
|
19
|
-
End
|
20
|
-
= self.text_field :site, :festivity_end_date, :class=> "textbox date festivity-control", :
|
19
|
+
Festival End
|
20
|
+
= self.text_field :site, :festivity_end_date, :class=> "date_field textbox date festivity-control", :value => (@site.festivity_end_date ? format_date(@site.festivity_end_date) : nil)
|
21
|
+
%p.festivity-third
|
22
|
+
%label{for: "site_festivity_end_date"}
|
23
|
+
Festival Filter Type
|
24
|
+
= self.select :site, :festivity_filter_type, [['Date', 'date'], ['Time', 'time']], :class=> "textbox festivity-control"
|
25
|
+
%p.festivity-third
|
26
|
+
%label{for: "site_festivity_end_date"}
|
27
|
+
Buy Tickets Button Text
|
28
|
+
= self.text_field :site, :festivity_buy_ticket_text, :class=> "textbox festivity-control"
|
21
29
|
%p.festivity-third
|
22
30
|
%label{for: "site_festivity_google_api_key"}
|
23
31
|
Google Search API Key
|
@@ -1,3 +1,4 @@
|
|
1
|
+
- current_date = FestivityDatetimePresenter.new current_site.festival_datetimes.first.datetime - 1.day
|
1
2
|
.events-filter-bar__wrapper
|
2
3
|
|
3
4
|
%p.event-filter-bar__header
|
@@ -8,17 +9,24 @@
|
|
8
9
|
Done
|
9
10
|
|
10
11
|
%form
|
12
|
+
-
|
11
13
|
%div#collapse-wrapper{data: {collapse: true}}
|
12
14
|
%h3.open
|
13
15
|
Dates
|
14
16
|
%ul.filter-bar_filters.date-filters
|
15
|
-
- current_site.
|
17
|
+
- current_site.festival_datetimes.each do |datetime|
|
18
|
+
- unless current_site.date_filter?
|
19
|
+
- unless current_date.to_date == datetime.to_date
|
20
|
+
- current_date = datetime
|
21
|
+
%li
|
22
|
+
%h4
|
23
|
+
= current_date.display_as_date
|
16
24
|
%li
|
17
25
|
.checkbox
|
18
26
|
%label
|
19
|
-
- checked = @selected_dates.include?
|
20
|
-
%input{type: "checkbox", value:
|
21
|
-
=
|
27
|
+
- checked = @selected_dates.include? datetime
|
28
|
+
%input{type: "checkbox", value: datetime.to_s, checked: checked, data: {filter: "Date", sort: datetime.to_s}}
|
29
|
+
= datetime.display
|
22
30
|
- current_site.festivity_active_category_types.each do |type|
|
23
31
|
%h3
|
24
32
|
= type.name
|
@@ -56,7 +56,7 @@
|
|
56
56
|
.event-list-item__button-group
|
57
57
|
= link_to "Details", event_path(event.id), class: 'btn event-list-item__btn'
|
58
58
|
- unless event.buy_url.blank?
|
59
|
-
= link_to
|
59
|
+
= link_to current_site.festivity_buy_ticket_text, "#{event.buy_url}", class: 'btn event-list-item__btn', target: '_blank'
|
60
60
|
-#%button.btn.event-list-item__btn{href: "", data: {toggle:"modal", target:"#share-modal"}, type: "button"}
|
61
61
|
Share
|
62
62
|
- unless event.locations.first.directions_url.blank?
|
@@ -18,7 +18,7 @@
|
|
18
18
|
- if @event.can_buy?
|
19
19
|
.tickets.sidebar-item
|
20
20
|
%a.tickets-button.btn.btn-primary.btn-lg.btn-block{href: "#{@event.buy_url}", target: "_blank"}
|
21
|
-
|
21
|
+
= current_site.festivity_buy_ticket_text
|
22
22
|
.event-sidebar__location.sidebar-item
|
23
23
|
%ul.list-group
|
24
24
|
%li.list-group-item.list-group-title
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class UpdateSiteForHourlyFilters < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
change_column :sites, :festivity_start_date, :datetime
|
4
|
+
change_column :sites, :festivity_end_date, :datetime
|
5
|
+
add_column :sites, :festivity_filter_type, :string
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
def down
|
10
|
+
change_column :sites, :festivity_start_date, :date
|
11
|
+
change_column :sites, :festivity_end_date, :date
|
12
|
+
remove_column :sites, :festivity_filter_type, :string
|
13
|
+
end
|
14
|
+
end
|
data/festivity_extension.rb
CHANGED
@@ -19,8 +19,10 @@ class FestivityExtension < TrustyCms::Extension
|
|
19
19
|
Site.send :include, Festivity::Extensions::SiteExtensions
|
20
20
|
Page.send :include, Festivity::Extensions::PageExtensions
|
21
21
|
Admin::PagesHelper.send :include, Festivity::Extensions::PagesHelperExtensions
|
22
|
+
Admin::SitesHelper.send :include, Festivity::Extensions::PagesHelperExtensions
|
22
23
|
Page.send :include, Tags::NavigationTags
|
23
24
|
Page.send :include, Tags::HeaderTags
|
25
|
+
Page.send :include, Tags::SocialFeedTags
|
24
26
|
end
|
25
27
|
|
26
28
|
end
|
@@ -11,28 +11,41 @@ module Festivity
|
|
11
11
|
|
12
12
|
module SiteMethods
|
13
13
|
|
14
|
+
def festivity_start_date=(value)
|
15
|
+
super(Time.strptime(value, "%m/%d/%Y %l:%M %P"))
|
16
|
+
end
|
17
|
+
|
18
|
+
def festivity_end_date=(value)
|
19
|
+
super(Time.strptime(value, "%m/%d/%Y %l:%M %P"))
|
20
|
+
end
|
21
|
+
|
14
22
|
def festivity_active_category_types
|
15
23
|
self.festivity_category_types.where(["inactive = false"])
|
16
24
|
end
|
17
25
|
|
18
26
|
def date_during_festival?(date)
|
19
|
-
self.
|
27
|
+
self.festival_datetimes.include?(date)
|
20
28
|
end
|
21
29
|
|
22
|
-
def
|
23
|
-
@
|
30
|
+
def festival_datetimes
|
31
|
+
@festival_datetimes ||= calculate_festival_datetimes
|
24
32
|
end
|
25
33
|
|
26
|
-
def
|
34
|
+
def calculate_festival_datetimes
|
27
35
|
dates = [self.festivity_start_date]
|
36
|
+
advance_by = date_filter? ? {days: 1} : {hours: 1}
|
28
37
|
until dates.last >= self.festivity_end_date do
|
29
|
-
dates << dates.last.advance(
|
38
|
+
dates << dates.last.advance(advance_by)
|
30
39
|
end
|
31
|
-
dates
|
40
|
+
FestivityDatetimeFilterPresenter.new(dates, self.festivity_filter_type)
|
32
41
|
rescue
|
33
42
|
[]
|
34
43
|
end
|
35
44
|
|
45
|
+
def date_filter?
|
46
|
+
self.festivity_filter_type == "date"
|
47
|
+
end
|
48
|
+
|
36
49
|
end
|
37
50
|
|
38
51
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Tags::SocialFeedTags
|
2
|
+
include TrustyCms::Taggable
|
3
|
+
|
4
|
+
desc %{Instagram posts feed
|
5
|
+
|
6
|
+
*Usage:*
|
7
|
+
<pre><code><r:instagram_posts tag="culturaltrust">/code></pre>}
|
8
|
+
tag "instagram_posts" do |tag|
|
9
|
+
|
10
|
+
posts = InstagramFeedService.new.get_feed_for_tag(tag.attr['tag'])
|
11
|
+
request.env["action_controller.instance"].render_to_string :partial => "social/instagram_posts",
|
12
|
+
:locals => {:posts => posts}
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -31,6 +31,9 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_dependency "trusty-multi-site-extension" , "~> 2.0"
|
32
32
|
s.add_dependency 'actionpack-action_caching' , '~> 1.1.1'
|
33
33
|
s.add_dependency 'dalli-elasticache' ,'~> 0.1.2'
|
34
|
+
s.add_dependency 'instagram' , '~> 1.1'
|
35
|
+
s.add_dependency 'twitter' , '~> 5.15'
|
36
|
+
s.add_dependency 'immutable-struct' , '~> 2.1'
|
34
37
|
|
35
38
|
s.add_dependency 'trusty_google_custom_search'
|
36
39
|
s.add_dependency 'fog' , "~> 1.26"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trusty-festivity-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Sipple
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trusty-cms
|
@@ -136,6 +136,48 @@ dependencies:
|
|
136
136
|
- - ~>
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: 0.1.2
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: instagram
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '1.1'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ~>
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1.1'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: twitter
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ~>
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '5.15'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ~>
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '5.15'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: immutable-struct
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '2.1'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ~>
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '2.1'
|
139
181
|
- !ruby/object:Gem::Dependency
|
140
182
|
name: trusty_google_custom_search
|
141
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -358,6 +400,14 @@ files:
|
|
358
400
|
- app/models/festivity_market_page.rb
|
359
401
|
- app/models/festivity_page_category.rb
|
360
402
|
- app/models/festivity_performance.rb
|
403
|
+
- app/presenters/festivity_date_presenter.rb
|
404
|
+
- app/presenters/festivity_datetime_filter_presenter.rb
|
405
|
+
- app/presenters/festivity_datetime_presenter.rb
|
406
|
+
- app/presenters/festivity_time_presenter.rb
|
407
|
+
- app/presenters/social/feed_presenter.rb
|
408
|
+
- app/presenters/social/instagram_post_presenter.rb
|
409
|
+
- app/services/instagram_feed_service.rb
|
410
|
+
- app/services/social_feed_service.rb
|
361
411
|
- app/views/admin/pages/_festivity_base_fields.html.haml
|
362
412
|
- app/views/admin/pages/_festivity_featured_image_fields.html.haml
|
363
413
|
- app/views/admin/pages/_festivity_includes.html.haml
|
@@ -392,6 +442,7 @@ files:
|
|
392
442
|
- app/views/search/_pagination_links.html.haml
|
393
443
|
- app/views/search/_result_item.html.haml
|
394
444
|
- app/views/search/show.html.haml
|
445
|
+
- app/views/social/_instagram_posts.html.haml
|
395
446
|
- config/initializers/pluralizations.rb
|
396
447
|
- config/initializers/radiant_config.rb
|
397
448
|
- config/locales/en.yml
|
@@ -415,6 +466,8 @@ files:
|
|
415
466
|
- db/migrate/20150226131727777_add_location_page_fields.rb
|
416
467
|
- db/migrate/20150302135485569_add_performances_table.rb
|
417
468
|
- db/migrate/20150324135487799_add_indexes.rb
|
469
|
+
- db/migrate/20151018190155_update_site_for_hourly_filters.rb
|
470
|
+
- db/migrate/20151105155407_add_buy_ticket_text_to_site.rb
|
418
471
|
- festivity_extension.rb
|
419
472
|
- lib/festivity/admin/assets_helper.rb
|
420
473
|
- lib/festivity/engine.rb
|
@@ -425,6 +478,7 @@ files:
|
|
425
478
|
- lib/festivity/mixins/not_found.rb
|
426
479
|
- lib/tags/header_tags.rb
|
427
480
|
- lib/tags/navigation_tags.rb
|
481
|
+
- lib/tags/social_feed_tags.rb
|
428
482
|
- lib/tasks/active_record_utils.rb
|
429
483
|
- lib/tasks/festivity_extension_tasks.rake
|
430
484
|
- lib/tasks/setup.rake
|