diff --git a/app/models/event.rb b/app/models/event.rb index aaf28db..f1548a4 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -141,6 +141,10 @@ class Event < Article result end + def duration + ((self.end_date || self.start_date) - self.start_date).to_i + end + def lead content_tag('div', show_period(start_date, end_date), diff --git a/plugins/event/lib/event_plugin.rb b/plugins/event/lib/event_plugin.rb new file mode 100644 index 0000000..49106f7 --- /dev/null +++ b/plugins/event/lib/event_plugin.rb @@ -0,0 +1,23 @@ +class EventPlugin < Noosfero::Plugin + + def self.plugin_name + _("Event Extras") + end + + def self.plugin_description + _("Include a new block to show the environment's or profiles' events information") + end + + def self.extra_blocks + { EventPlugin::EventBlock => { :type => [Community, Person, Enterprise, Environment] } } + end + + def stylesheet? + true + end + + def js_files + 'event.js' + end + +end diff --git a/plugins/event/lib/event_plugin/event_block.rb b/plugins/event/lib/event_plugin/event_block.rb new file mode 100644 index 0000000..bc943d8 --- /dev/null +++ b/plugins/event/lib/event_plugin/event_block.rb @@ -0,0 +1,87 @@ +class EventPlugin::EventBlock < Block + include DatesHelper + + attr_accessible :all_env_events, :limit, :future_only, :date_distance_limit + + settings_items :all_env_events, :type => :boolean, :default => false + settings_items :limit, :type => :integer, :default => 4 + settings_items :future_only, :type => :boolean, :default => false + settings_items :date_distance_limit, :type => :integer, :default => 0 + + def self.description + _('Events') + end + + def help + _('Show the profile events or all environment events.') + end + + def events_source + unless all_env_events + if self.owner.kind_of? Environment + return self.owner + elsif environment.portal_community + return environment.portal_community + end + end + + environment + end + + def events(user = nil) + events = events_source.events + events = events.published.order('start_date') + + if future_only + events = events.where('start_date >= ?', Date.today) + end + + if date_distance_limit > 0 + events = events.by_range([ + Date.today - date_distance_limit, + Date.today + date_distance_limit + ]) + end + + event_list = [] + events.each do |event| + event_list << event if event.display_to? user + break if event_list.length >= limit + end + + event_list + end + + def content(args={}) + block = self + proc do + render( + :file => 'blocks/event', + :locals => { :block => block } + ) + end + end + + def human_time_left(days_left) + months_left = (days_left/30.0).round + if days_left <= -60 + n_('Started one month ago.', 'Started %d months ago.', -months_left) % -months_left + elsif days_left < 0 + n_('Started one day ago.', 'Started %d days ago.', -days_left) % -days_left + elsif days_left == 0 + _("I happens today.") + elsif days_left < 60 + n_('One day left to start.', '%d days left to start.', days_left) % days_left + else + n_('One month left to start.', '%d months left to start.', months_left) % months_left + end + end + + def date_to_html(date) + content_tag(:span, show_day_of_week(date, true), :class => 'week-day') + + content_tag(:span, month_name(date.month, true), :class => 'month') + + content_tag(:span, date.day.to_s, :class => 'day') + + content_tag(:span, date.year.to_s, :class => 'year') + end + +end diff --git a/plugins/event/po/pt/event.po b/plugins/event/po/pt/event.po new file mode 100644 index 0000000..3eda1f5 --- /dev/null +++ b/plugins/event/po/pt/event.po @@ -0,0 +1,110 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"POT-Creation-Date: 2015-01-30 11:52-0000\n" +"PO-Revision-Date: 2015-01-30 00:18-0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: plugins/event/lib/event_plugin/event_block.rb:12 +msgid "Events" +msgstr "Eventos" + +#: plugins/event/lib/event_plugin/event_block.rb:16 +msgid "Show the profile events or all environment events." +msgstr "Mostrar todos os eventos." + +#: plugins/event/lib/event_plugin/event_block.rb:68 +msgid "Started one month ago." +msgid_plural "Started %d months ago." +msgstr[0] "Iniciou a um mês atrás." +msgstr[1] "Iniciou a %d meses atrás." + +#: plugins/event/lib/event_plugin/event_block.rb:70 +msgid "Started one day ago." +msgid_plural "Started %d days ago." +msgstr[0] "Iniciou a Um dia atrás." +msgstr[1] "Iniciou a %d dias atrás." + +#: plugins/event/lib/event_plugin/event_block.rb:72 +msgid "I happens today." +msgstr "Acontece hoje." + +#: plugins/event/lib/event_plugin/event_block.rb:74 +msgid "One day left to start." +msgid_plural "%d days left to start." +msgstr[0] "Um dia para iniciar." +msgstr[1] "%d dias para iniciar." + +#: plugins/event/lib/event_plugin/event_block.rb:76 +msgid "One month left to start." +msgid_plural "%d months left to start." +msgstr[0] "Um mês para iniciar" +msgstr[1] "% meses para iniciar" + +#: plugins/event/lib/event_plugin.rb:4 +msgid "Event Extras" +msgstr "Eventos" + +#: plugins/event/lib/event_plugin.rb:8 +msgid "" +"Include a new block to show the environment's or profiles' events information" +msgstr "" +"Adiciona um novo bloco para apresentar as informações de eventos do ambiente " +"ou de perfis" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:1 +msgid "Limit of items" +msgstr "Limite de itens" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:3 +msgid "Show all environment events" +msgstr "Apresentar todos os eventos do ambiente" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:8 +msgid "(Don't check to show only your events)" +msgstr "(Não marque para apresentar somente seus eventos)" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:10 +msgid "(Don't check to show only %s events)" +msgstr "(Não marque para apresentar somente os eventos de %s)" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:13 +msgid "(Don't check to show only the environment events)" +msgstr "(Não marque para apresentar somente os eventos do ambiente)" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:18 +msgid "Limit of days to display" +msgstr "Limite de dias de distância para mostrar eventos" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:20 +msgid "Only show events on this limit of days." +msgstr "Mostar somente eventos que acontecem dentro do limite de dias" + +#: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:23 +msgid "Only show future events" +msgstr "Mostrar apenas eventos futuros" + +#: plugins/event/views/event_plugin/event_block_item.html.erb:6 +msgid "Duration: 1 day" +msgid_plural "Duration: %s days" +msgstr[0] "" +msgstr[1] "" + +#~ msgid "1 day" +#~ msgid_plural "%s days" +#~ msgstr[0] "1 dia" +#~ msgstr[1] "%s dias" + +#~ msgid "Event Block Plugin" +#~ msgstr "Plugin de Bloco de Eventos" diff --git a/plugins/event/public/event.js b/plugins/event/public/event.js new file mode 100644 index 0000000..0912a43 --- /dev/null +++ b/plugins/event/public/event.js @@ -0,0 +1,16 @@ +(function(){ + function change_title_size(){ + jQuery(".event-plugin_event-block .event .title").each(function(num, el){ + var title = jQuery(el); + console.log(title.height(), title.css("line-height")); + if (title.height() > parseInt(title.css("line-height")) * 2) { + title.addClass("toobig") + } + }); + } + + + jQuery(document).ready(function(){ + change_title_size(); + }); +})(); \ No newline at end of file diff --git a/plugins/event/public/style.css b/plugins/event/public/style.css new file mode 100644 index 0000000..f73beef --- /dev/null +++ b/plugins/event/public/style.css @@ -0,0 +1,186 @@ +.event-plugin_event-block { + font-size: 12px; +} + +.event-plugin_event-block .events { + margin: 0; + padding: 0; + border-bottom: 1px solid #DDD; +} + +.event-plugin_event-block .events li { + margin: 0; + padding: 1px 0; + list-style: none; + border-top: 1px solid #DDD; +} + +.event-plugin_event-block .event a { + display: block; + min-height: 60px; + overflow: hidden; + padding: 3px 0; + text-decoration: none; + color: inherit; +} + +.event-plugin_event-block .event a:hover { + background-color: #EEE; + text-decoration: none; + color: inherit; +} + +.event-plugin_event-block .event a:visited { + color: inherit; +} + +.event-plugin_event-block .event .date { + display: block; + width: 60px; + height: auto; + background-size: cover; + background-position: 50% 40%; + font-weight: bold; + text-align: center; + float: left; + margin-right: 10px; +} + +.event-plugin_event-block .event .date.no-img { + background-color: #AAA; +} + +.event-plugin_event-block .event:hover .date.no-img { + background-color: #79B; +} + +.event-plugin_event-block .event:hover .date.no-img * { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.event-plugin_event-block .event .month { + display: block; + background: rgba(90,90,90,0.6); + color: #FFF; + text-shadow: 0 0 2px #000; + font-size: 20px; + line-height: 22px; +} + +.msie8 .event-plugin_event-block .event .month{ + background: #797979; + width: 60px; + float: left; + text-align: center; +} + +.event-plugin_event-block .event:hover .has-img .month { + opacity: 0.9; + background: rgba(90,90,90,0.4); +} + +.msie8 .event-plugin_event-block .event:hover .has-img .month { + background: #D8D8D8; +} + +.event-plugin_event-block .event .day { + display: block; + background: rgba(255,255,255,0.5); + border: 2px solid rgba(90,90,90,0.6); + border-top: none; + color: #000; + font-size: 36px; + line-height: 36px; +} + +.msie8 .event-plugin_event-block .event .day { + display: block; + background: #D4D4D4; + border: 2px solid #797979; + width: 56px; + text-align: center; +} + +.event-plugin_event-block .event .has-img .day { + text-shadow: 0 0 5px #FFF, 0 0 5px #FFF; +} + +.event-plugin_event-block .event:hover .has-img .day { + opacity: 0.8; + background: rgba(255,255,255,0.3); +} + +.event-plugin_event-block .event:hover .has-img .day { + filter: alpha(opacity=80); +} + +.msie8 .event-plugin_event-block .event:hover .has-img .day{ + background: #D4D4D4; +} + +.event-plugin_event-block .event .duration { + display: block; +} + +.event-plugin_event-block .event .duration span { + font-weight: bold; +} + +#content .event-plugin_event-block .event .title { + position: relative; + display: block; + font-size: 14px; + line-height: 16px; + margin: 0; + overflow: hidden; + max-height: 33px; +} + +.event-plugin_event-block .event .title.toobig:after { + content: "..."; + position: absolute; + bottom: 0; + right: 0; + width: 5em; + padding-right: 4px; + text-align: right; + color: rgba(0, 0, 0, 0.5); + background: -webkit-gradient(linear, left top, right top, + from(rgba(255, 255, 255, 0)), to(#FFF), color-stop(80%, #FFF)); + background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0), #FFF 80%, #FFF); + background: -ms-linear-gradient(to right, rgba(255, 255, 255, 0), #FFF 80%, #FFF); + background: -o-linear-gradient(to right, rgba(255, 255, 255, 0), #FFF 80%, #FFF); + background: linear-gradient(to right, rgba(255, 255, 255, 0), #FFF 80%, #FFF); +} + +.event-plugin_event-block .event:hover .title.toobig:after { + background: -webkit-gradient(linear, left top, right top, + from(rgba(238, 238, 238, 0)), to(#EEE), color-stop(80%, #EEE)); + background: -moz-linear-gradient(to right, rgba(238, 238, 238, 0), #EEE 80%, #EEE); + background: -ms-linear-gradient(to right, rgba(238, 238, 238, 0), #EEE 80%, #EEE); + background: -o-linear-gradient(to right, rgba(238, 238, 238, 0), #EEE 80%, #EEE); + background: linear-gradient(to right, rgba(238, 238, 238, 0), #EEE 80%, #EEE); +} + +.event-plugin_event-block .event .address i { + display: block; + font-style: normal; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.event-plugin_event-block .event .days-left { + display: block; +} + +.event-plugin_event-block .event .days-left.past { + filter: alpha(opacity=50); +} + +.msie8 #content .event-plugin_event-block .event .title, +.msie8 #content .event-plugin_event-block .event .adress i, +.msie8 #content .event-plugin_event-block .event .days-left { + float: left; +} diff --git a/plugins/event/test/functional/event_block_test.rb b/plugins/event/test/functional/event_block_test.rb new file mode 100644 index 0000000..c5eb512 --- /dev/null +++ b/plugins/event/test/functional/event_block_test.rb @@ -0,0 +1,70 @@ +require File.dirname(__FILE__) + '/../../../../test/test_helper' + +# Re-raise errors caught by the controller. +class HomeController + #append_view_path File.join(File.dirname(__FILE__) + '/../../views') + def rescue_action(e) + raise e + end +end + +class HomeControllerTest < ActionController::TestCase + + def setup + @env = Environment.default + @env.enable_plugin('EventPlugin') + + @p1 = fast_create(Person, :environment_id => @env.id) + @e1a = fast_create(Event, :name=>'Event p1 A', :profile_id=>@p1.id) + + box = Box.create!(:owner => @env) + @block = EventPlugin::EventBlock.create!(:box => box) + end + + # Event item CSS selector + ev = '.event-plugin_event-block ul.events li.event[itemscope]' + + '[itemtype="http://data-vocabulary.org/Event"] ' + + should 'see events microdata sturcture' do + get :index + assert_select '.event-plugin_event-block ul.events' + assert_select ev + assert_select ev + 'a[itemprop="url"]' + assert_select ev + 'time.date[itemprop="startDate"][datetime]' + assert_select ev + 'time.date .day' + assert_select ev + 'time.date .month' + assert_select ev + 'time.date .year' + assert_select ev + '.title[itemprop="summary"]' + assert_select ev + '.address[itemprop="location"] *[itemprop="name"]' + assert_select ev + '.days-left' + end + + should 'see event duration' do + @e1a.slug = 'event1a' + @e1a.start_date = Date.today + @e1a.end_date = Date.tomorrow + @e1a.save! + get :index + assert_select ev + 'time.duration[itemprop="endDate"]', '+1 day' + + @e1a.slug = 'event1a' + @e1a.start_date = Date.today + @e1a.end_date = Date.tomorrow+1 + @e1a.save! + get :index + assert_select ev + 'time.duration[itemprop="endDate"]', '+2 days' + end + + should 'not see event duration for one day events' do + get :index + assert_select ev + 'time.duration[itemprop="endDate"]', false + + @e1a.slug = 'event1a' + @e1a.start_date = Date.today + @e1a.end_date = Date.today + @e1a.save! + get :index + assert_select ev + 'time.duration[itemprop="endDate"]', false + end + +end diff --git a/plugins/event/test/unit/event_block_test.rb b/plugins/event/test/unit/event_block_test.rb new file mode 100644 index 0000000..13d3165 --- /dev/null +++ b/plugins/event/test/unit/event_block_test.rb @@ -0,0 +1,189 @@ +require File.dirname(__FILE__) + '/../../../../test/test_helper' + +class EventPlugin::EventBlockTest < ActiveSupport::TestCase + + def setup + @env = Environment.default + @env.enable_plugin('EventPlugin') + + @p1 = fast_create(Person, :environment_id => @env.id) + @event = fast_create(Event, :name => 'Event p1 A', :profile_id => @p1.id, + :start_date => Date.today+30) + fast_create(Event, :name => 'Event p1 B', :profile_id => @p1.id, + :start_date => Date.today+10) + + @p2 = fast_create(Community, :environment_id => @env.id) + fast_create(Event, :name => 'Event p2 A', :profile_id => @p2.id, + :start_date => Date.today-10) + fast_create(Event, :name => 'Event p2 B', :profile_id => @p2.id, + :start_date => Date.today-30) + + box = fast_create(Box, :owner_id => @p1) + @block = EventPlugin::EventBlock.new(:limit => 99, :box => box) + end + + def set_portal(env, portal) + env.portal_community = portal + env.enable('use_portal_community') + env.save! + end + + should 'select source as env, while visiting the profile' do + @block.box.owner = @p1 + @block.all_env_events = true + + assert_equal @env, @block.events_source + assert_equal 4, @block.events.length + + set_portal(@env, @p2) + + assert_equal @env, @block.events_source + assert_equal 4, @block.events.length + end + + should 'select source as env, while visiting an env page' do + @block.box.owner = @env + @block.all_env_events = true + + assert_equal @env, @block.events_source + assert_equal 4, @block.events.length + + set_portal @env, @p2 + + assert_equal @env, @block.events_source + assert_equal 4, @block.events.length + end + + should 'select source as portal_community, while visiting an env page' do + set_portal @env, @p2 + + @block.box.owner = @env.portal_community + @block.all_env_events = false + + assert_equal @p2, @block.events_source + assert_equal 2, @block.events.length + end + + should 'select source as profile, while visiting its page' do + @block.stubs(:owner).returns(@p1) + @block.all_env_events = false + + assert_equal @p1, @block.events_source + assert_equal 2, @block.events.length + + set_portal @env, @p2 + + assert_equal @p1, @block.events_source + assert_equal 2, @block.events.length + end + + should 'say human left time for an event' do + one_day = @block.human_time_left(Date.tomorrow - Date.today) + + assert_match /One day left/, one_day + assert_match /5 days left/, @block.human_time_left(5) + assert_match /30 days left/, @block.human_time_left(30) + assert_match /2 months left/, @block.human_time_left(60) + assert_match /3 months left/, @block.human_time_left(85) + end + + should 'say human past time for an event' do + one_day = @block.human_time_left(Date.yesterday - Date.today) + + assert_match /One day past/, one_day + assert_match /5 days past/, @block.human_time_left(-5) + assert_match /30 days past/, @block.human_time_left(-30) + assert_match /2 months past/, @block.human_time_left(-60) + assert_match /3 months past/, @block.human_time_left(-85) + end + + should 'write formatable data in html' do + html = 'Tue'+ + 'Sep'+ + '27'+ + '1983' + + assert_equal html, @block.date_to_html(Date.new 1983, 9, 27) + end + + should 'show unlimited time distance events' do + @block.box.owner = @env + @block.all_env_events = true + @block.date_distance_limit = 0 + + assert_equal 4, @block.events.length + end + + should 'only show 20 days distant events' do + @block.box.owner = @env + @block.all_env_events = true + @block.date_distance_limit = 20 + + assert_equal 2, @block.events.length + end + + should 'show future and past events' do + @block.box.owner = @env + @block.all_env_events = true + @block.future_only = false + + assert_equal 4, @block.events.length + end + + should 'show only future events' do + @block.box.owner = @env + @block.all_env_events = true + @block.future_only = true + + assert_equal 2, @block.events.length + end + + should 'show only published events' do + @block.box.owner = @env + @block.all_env_events = true + @event.published = false + @event.save! + + assert_equal 3, @block.events.length + end + + should 'filter events from non public profiles' do + person = create_user('testuser', :environment_id => @env.id).person + person.public_profile = false + person.save! + + visibility_content_test_from_a_profile person + end + + should 'filter events from non visible profiles' do + person = create_user('testuser', :environment_id=>@env.id).person + person.visible = false + person.save! + + visibility_content_test_from_a_profile person + end + + def visibility_content_test_from_a_profile(profile) + @block.box.owner = @env + ev = fast_create Event, :name => '2 de Julho', :profile_id => profile.id + @block.all_env_events = true + + # Do not list event from private profile for non logged visitor + assert ! @block.events.include?(ev) + assert_equal 4, @block.events.length + + # Do not list event from private profile for non unprivileged user + assert ! @block.events.include?(ev) + assert_equal 4, @block.events(@p1).length + + # Must to list event from private profile for a friend + AddFriend.create!(:requestor => @p1, :target => profile).finish + + assert @block.events(@p1).include?(ev) + assert_equal 5, @block.events(@p1).length + + # Must to list event from private profile for itself + assert @block.events(profile).include?(ev) + assert_equal 5, @block.events(profile).length + end +end diff --git a/plugins/event/test/unit/event_plugin_test.rb b/plugins/event/test/unit/event_plugin_test.rb new file mode 100644 index 0000000..41f7554 --- /dev/null +++ b/plugins/event/test/unit/event_plugin_test.rb @@ -0,0 +1,9 @@ +require File.dirname(__FILE__) + '/../../../../test/test_helper' + +class EventPluginTest < ActiveSupport::TestCase + + should 'not crash' do + EventPlugin.new + end + +end diff --git a/plugins/event/views/blocks/event.html.erb b/plugins/event/views/blocks/event.html.erb new file mode 100644 index 0000000..09ebb0e --- /dev/null +++ b/plugins/event/views/blocks/event.html.erb @@ -0,0 +1,19 @@ +<%= block_title(block.title) %> + +
    + <% block.events(@user).map do |event| %> + <% days_left = ( event.start_date - Date.today ).round %> +
  • + <%= render( + :file => 'event_plugin/event_block_item', + :locals => { + :event => event, + :block => block, + :time_class => days_left < 0 ? 'future' : 'past', + :time_left_str => block.human_time_left(days_left) + } + ) + %> +
  • + <% end %> +
diff --git a/plugins/event/views/environment_design b/plugins/event/views/environment_design new file mode 120000 index 0000000..d584088 --- /dev/null +++ b/plugins/event/views/environment_design @@ -0,0 +1 @@ +profile_design \ No newline at end of file diff --git a/plugins/event/views/event_plugin/event_block_item.html.erb b/plugins/event/views/event_plugin/event_block_item.html.erb new file mode 100644 index 0000000..f55a246 --- /dev/null +++ b/plugins/event/views/event_plugin/event_block_item.html.erb @@ -0,0 +1,41 @@ +<% + # compute layout values + ev_days_tag = '' + if event.duration > 0 + ev_days_tag = content_tag('time', + n_('Duration: 1 day', 'Duration: %s days', event.duration) % "#{event.duration}", + :itemprop => 'endDate', + :datetime => show_date(event.end_date) + 'T00:00', + :class => 'duration', + :title => show_date(event.start_date) + ' — ' + time_left_str + ) + end + + img = event.image.nil? ? event.first_image : event.image.public_filename + bg = "background-image: url(#{img})" if not img.blank? + img_class = img.blank? ? 'no-img' : 'has-img' +%> +<%= + link_to([ + content_tag('time', + block.date_to_html(event.start_date), + :itemprop => 'startDate', + :datetime => show_date(event.start_date), + :class => 'date ' + img_class, :style => bg, + :title => show_date(event.start_date) + ' — ' + time_left_str + ), + ev_days_tag, + content_tag('strong', h(event.name), :class => 'title', + :title => event.name, :itemprop => 'summary'), + content_tag('span', content_tag('i', event.address, :itemprop=>:name), + :title => h(event.address), + :class => 'address', :itemscope => :itemscope, + :itemtype => 'http://schema.org/Place', + :itemprop => :location), + content_tag('span', time_left_str, :class => 'days-left ' + time_class) + ].join("\n"), + (event.link.blank? ? event.url : event.link), + :class => 'ev-days-' + event.duration.to_s, + :itemprop => :url + ) +%> diff --git a/plugins/event/views/profile_design/event_plugin/_event_block.html.erb b/plugins/event/views/profile_design/event_plugin/_event_block.html.erb new file mode 100644 index 0000000..71e8712 --- /dev/null +++ b/plugins/event/views/profile_design/event_plugin/_event_block.html.erb @@ -0,0 +1,23 @@ +<%= labelled_form_field _('Limit of items'), text_field(:block, :limit, :size => 4) %> + +<%= labelled_check_box(_('Show all environment events'), "block[all_env_events]", "1", @block.all_env_events) %> +
+<%= + if @profile + if @profile.person? + _("(Don't check to show only your events)") + else + _("(Don't check to show only %s events)") % @profile.name + end + elsif environment.portal_community + _("(Don't check to show only the environment events)") + end +%> +
+ +<%= labelled_form_field _('Limit of days to display'), + text_field(:block, :date_distance_limit, :size => 4) %> +(<%=_('Only show events on this limit of days.')%>) +

+ +<%= labelled_check_box(_('Only show future events'), "block[future_only]", "1", @block.future_only) %> diff --git a/test/factories.rb b/test/factories.rb index af9e920..de0f8a3 100644 --- a/test/factories.rb +++ b/test/factories.rb @@ -247,7 +247,13 @@ module Noosfero::Factory ############################################### def defaults_for_event - { :name => 'My event ' + factory_num_seq.to_s, :start_date => Date.today } + num = factory_num_seq.to_s + { + :name => 'My event ' + num, + :slug => 'my-event-' + num, + :path => '/my-event-' + num, + :start_date => Date.today + } end ############################################### -- libgit2 0.21.2