2016-12-11 00:55:11 +01:00
|
|
|
module PreprocessHelper
|
2018-03-01 16:33:12 +01:00
|
|
|
def required_attrs
|
|
|
|
{
|
|
|
|
event: {
|
|
|
|
time: 'An event item should include the :time attribute, which describes the begin time and date of the event.',
|
|
|
|
title: 'The event does not include a :title',
|
|
|
|
location: 'The event should include a :location, a textual description',
|
|
|
|
locationlink: 'The event does not include a :locationlink, which is a querystring which is used for Google Maps'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def check_schema(itemtype, item)
|
|
|
|
schema = required_attrs[itemtype]
|
|
|
|
|
|
|
|
(schema.keys - item.attributes.keys).each do |key|
|
|
|
|
raise "#{item.identifier}: #{schema[key]}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-04-23 12:52:25 +02:00
|
|
|
def ignore_old_content(*paths)
|
2018-07-11 20:35:06 +02:00
|
|
|
paths.each do |path|
|
|
|
|
latest_year_with_content = @items.find_all("/#{path}/**/*").map { |it| it.identifier.to_s.match(%r{/(\d\d-\d\d)/})[1] }.sort[-1]
|
|
|
|
|
|
|
|
latest_year = [latest_year_with_content, @config[:academic_year]].min
|
|
|
|
@items.delete_if do |item|
|
|
|
|
next unless item.identifier.match?(%r{^/#{path}/})
|
|
|
|
year = item.identifier.to_s.match(%r{/(\d\d-\d\d)/})[1]
|
|
|
|
year != latest_year
|
|
|
|
end
|
2016-12-11 00:55:11 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def update_blog_attributes
|
2018-03-10 11:14:36 +01:00
|
|
|
@items.find_all('/blog/**/*.md').each do |i|
|
2017-05-03 23:08:15 +02:00
|
|
|
raise "#{i.identifier} doesn't have 'created_at'" unless i[:created_at]
|
2017-02-09 02:37:43 +01:00
|
|
|
i.update_attributes(
|
2016-12-11 00:55:11 +01:00
|
|
|
# Tag all posts with article (for Blogging helper)
|
|
|
|
kind: 'article',
|
2017-02-09 02:36:29 +01:00
|
|
|
academic_year: i.identifier.to_s[/\d\d-\d\d/],
|
2017-02-09 02:31:56 +01:00
|
|
|
created_at: Date.parse(i[:created_at])
|
2017-02-09 02:37:43 +01:00
|
|
|
)
|
2016-12-11 00:55:11 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-06-07 10:23:02 +02:00
|
|
|
def create_yearly_items(type)
|
|
|
|
type = type.to_s
|
|
|
|
years = @items.find_all("/#{type.downcase}/*/*").map { |i| i.identifier.to_s[/\d\d-\d\d/] }.uniq
|
|
|
|
|
|
|
|
years.each do |year|
|
2016-12-11 00:55:11 +01:00
|
|
|
@items.create(
|
|
|
|
'',
|
2017-06-07 10:23:02 +02:00
|
|
|
{ academic_year: year, title: type },
|
|
|
|
"/#{type.downcase}/#{year}.html"
|
2016-12-11 00:55:11 +01:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2017-06-14 09:09:37 +02:00
|
|
|
cur_year_item = @items["/#{type.downcase}/#{@config[:academic_year]}.html"] || @items["/#{type.downcase}/#{years[-1]}.html"]
|
|
|
|
cur_year_item.update_attributes(
|
2016-12-11 00:55:11 +01:00
|
|
|
navigable: true,
|
|
|
|
order: 10
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def convert_event_time_to_timestamps
|
2017-10-03 14:07:39 +02:00
|
|
|
@items.find_all('/events/*/*.md').each do |event|
|
|
|
|
# HACK: Strings in a format like "2017-10-05T20:45:00+0200" automatically get converted to Time
|
|
|
|
event[:time] = event[:time].to_s
|
2016-12-11 00:55:11 +01:00
|
|
|
event[:time] = DateTime.parse(event[:time])
|
2017-10-03 14:07:39 +02:00
|
|
|
|
|
|
|
event[:end] = event[:end].to_s if event[:end]
|
2017-02-08 17:05:48 +01:00
|
|
|
event[:end] = DateTime.parse(event[:end]) if event[:end]
|
2016-12-11 00:55:11 +01:00
|
|
|
end
|
|
|
|
end
|
2018-02-25 20:29:35 +01:00
|
|
|
|
|
|
|
def add_report_metadata
|
|
|
|
@items.find_all('/about/verslagen/*/*').each do |report|
|
|
|
|
report[:academic_year] = report.identifier.to_s.split('/')[-2]
|
|
|
|
report[:date] = Date.strptime(report.identifier.without_ext.split('/').last)
|
|
|
|
end
|
|
|
|
end
|
2016-12-11 00:55:11 +01:00
|
|
|
end
|