26525-my-page-calendar.patch

Yuichi HARADA, 2018-11-06 09:18

Download (4.57 KB)

View differences:

app/helpers/my_helper.rb
76 76
  end
77 77

  
78 78
  def render_calendar_block(block, settings)
79
    calendar = Redmine::Helpers::Calendar.new(User.current.today, current_language, :week)
79
    calendar = Redmine::Helpers::Calendar.new(User.current.today, current_language, :"week#{settings[:weeks]}")
80 80
    calendar.events = Issue.visible.
81 81
      where(:project_id => User.current.projects.pluck(:id)).
82 82
      where("(start_date>=? and start_date<=?) or (due_date>=? and due_date<=?)", calendar.startdt, calendar.enddt, calendar.startdt, calendar.enddt).
......
84 84
      references(:project, :tracker, :priority, :assigned_to).
85 85
      to_a
86 86

  
87
    render :partial => 'my/blocks/calendar', :locals => {:calendar => calendar, :block => block}
87
    render :partial => 'my/blocks/calendar', :locals => {:calendar => calendar, :block => block, :settings => settings}
88 88
  end
89 89

  
90 90
  def render_documents_block(block, settings)
app/views/my/blocks/_calendar.html.erb
1
<div class="contextual">
2
  <%= link_to_function l(:label_options), "$('##{block}-settings').toggle();", :class => 'icon-only icon-settings', :title => l(:label_options) %>
3
</div>
4

  
1 5
<h3><%= l(:label_calendar) %></h3>
2 6

  
7
<%
8
tag_name = "settings[#{block}][weeks]"
9
tag_id = sanitize_to_id(tag_name)
10
-%>
11
<div id="<%= block %>-settings" style="display:none;">
12
  <%= form_tag(my_page_path, :remote => true) do %>
13
    <div class="box">
14
      <%= label_tag tag_id, l(:label_date_range) %>
15
      <%= select_tag tag_name,
16
              options_for_select(
17
                (1..5).collect{|ii| [l('datetime.distance_in_words.x_weeks', ii), ii] },
18
                settings[:weeks]
19
              ),
20
              :id => tag_id, :size => 1 %>
21
    </div>
22
    <p>
23
      <%= submit_tag l(:button_save) %>
24
      <%= link_to_function l(:button_cancel), "$('##{block}-settings').toggle();" %>
25
    </p>
26
  <% end %>
27
</div>
28

  
3 29
<%= render :partial => 'common/calendar', :locals => {:calendar => calendar } %>
config/locales/en.yml
55 55
      x_days:
56 56
        one:   "1 day"
57 57
        other: "%{count} days"
58
      x_weeks:
59
        one:   "1 week"
60
        other: "%{count} weeks"
58 61
      about_x_months:
59 62
        one:   "about 1 month"
60 63
        other: "about %{count} months"
lib/redmine/helpers/calendar.rb
37 37
          @startdt = @startdt - (@startdt.cwday - first_wday)%7
38 38
          # ends on the last day of the week
39 39
          @enddt = @enddt + (last_wday - @enddt.cwday)%7
40
        when :week
41
          @startdt = date - (date.cwday - first_wday)%7
42
          @enddt = date + (last_wday - date.cwday)%7
43 40
        else
44
          raise 'Invalid period'
41
          if "#{period}" =~ /^week(\d*)$/
42
            week = ($1.presence || '1').to_i
43
            week = 1  if week < 1
44
            week = 5  if week > 5
45
            @startdt = date - (date.cwday - first_wday)%7
46
            @enddt = (date + 7 * (week - 1)) + (last_wday - date.cwday)%7
47
          else
48
            raise 'Invalid period'
49
          end
45 50
        end
46 51
      end
47 52

  
test/functional/my_controller_test.rb
315 315
    end
316 316
  end
317 317

  
318
  def test_page_with_calendar_block_should_show_period_of_selected_week
319
    preference = User.find(2).pref
320
    preference.my_page_layout = {'top' => ['calendar']}
321
    preference.my_page_settings = {}
322
    preference.save!
323

  
324
    post :update_page,
325
      :params => {
326
        :settings => {
327
          :calendar => {:weeks => '3'},
328
        },
329
      },
330
      :xhr => true
331
    assert_response :success
332
    assert_include '$("#block-calendar").replaceWith(', response.body
333
    assert_equal({:weeks => '3'}, preference.reload.my_page_settings('calendar'))
334
  end
335

  
318 336
  def test_my_account_should_show_editable_custom_fields
319 337
    get :account
320 338
    assert_response :success