Feature #31518 » 0001-Add-default-due-date-for-new-issues-with-configurabl.patch
| app/controllers/issues_controller.rb | ||
|---|---|---|
| 618 | 618 |
end |
| 619 | 619 |
@issue.author ||= User.current |
| 620 | 620 |
@issue.start_date ||= User.current.today if Setting.default_issue_start_date_to_creation_date? |
| 621 |
offset = Setting.default_issue_due_date_offset_in_days |
|
| 622 |
@issue.due_date ||= User.current.today + offset if offset |
|
| 621 | 623 | |
| 622 | 624 |
attrs = (params[:issue] || {}).deep_dup
|
| 623 | 625 |
if action_name == 'new' && params[:was_default_status] == attrs[:status_id] |
| app/controllers/settings_controller.rb | ||
|---|---|---|
| 36 | 36 |
def edit |
| 37 | 37 |
@notifiables = Redmine::Notifiable.all |
| 38 | 38 |
if request.post? |
| 39 |
errors = Setting.set_all_from_params(params[:settings].to_unsafe_hash) |
|
| 39 |
settings = params[:settings].to_unsafe_hash |
|
| 40 |
if settings['default_issue_due_date_offset_enabled'] == '0' |
|
| 41 |
settings['default_issue_due_date_offset'] = '' |
|
| 42 |
end |
|
| 43 |
errors = Setting.set_all_from_params(settings) |
|
| 40 | 44 |
if errors.blank? |
| 41 | 45 |
flash[:notice] = l(:notice_successful_update) |
| 42 | 46 |
redirect_to settings_path(:tab => params[:tab]) |
| app/models/mail_handler.rb | ||
|---|---|---|
| 214 | 214 |
end |
| 215 | 215 |
issue.description = cleaned_up_text_body |
| 216 | 216 |
issue.start_date ||= User.current.today if Setting.default_issue_start_date_to_creation_date? |
| 217 |
offset = Setting.default_issue_due_date_offset_in_days |
|
| 218 |
issue.due_date ||= User.current.today + offset if offset |
|
| 217 | 219 |
if handler_options[:issue][:is_private] == '1' |
| 218 | 220 |
issue.is_private = true |
| 219 | 221 |
end |
| app/models/setting.rb | ||
|---|---|---|
| 192 | 192 |
messages << [:mail_from, l('activerecord.errors.messages.invalid')]
|
| 193 | 193 |
end |
| 194 | 194 |
end |
| 195 |
if settings.key?(:default_issue_due_date_offset) |
|
| 196 |
value = settings[:default_issue_due_date_offset].to_s.strip |
|
| 197 |
unless value.blank? |
|
| 198 |
begin |
|
| 199 |
offset = Integer(value, 10) |
|
| 200 |
if offset < 0 |
|
| 201 |
messages << [ |
|
| 202 |
:default_issue_due_date_offset, |
|
| 203 |
l('activerecord.errors.messages.greater_than_or_equal_to', :count => 0)
|
|
| 204 |
] |
|
| 205 |
end |
|
| 206 |
rescue ArgumentError |
|
| 207 |
messages << [:default_issue_due_date_offset, l('activerecord.errors.messages.not_a_number')]
|
|
| 208 |
end |
|
| 209 |
end |
|
| 210 |
end |
|
| 195 | 211 |
messages |
| 196 | 212 |
end |
| 197 | 213 | |
| ... | ... | |
| 238 | 254 |
params |
| 239 | 255 |
end |
| 240 | 256 | |
| 257 |
def self.default_issue_due_date_offset_from_params(params) |
|
| 258 |
params.to_s.strip |
|
| 259 |
end |
|
| 260 | ||
| 261 |
def self.default_issue_due_date_offset_in_days |
|
| 262 |
value = default_issue_due_date_offset.to_s.strip |
|
| 263 |
return nil if value.blank? || !value.match?(/\A\d+\z/) |
|
| 264 | ||
| 265 |
value.to_i |
|
| 266 |
end |
|
| 267 | ||
| 241 | 268 |
def self.twofa_required? |
| 242 | 269 |
twofa == '2' |
| 243 | 270 |
end |
| app/views/settings/_issues.html.erb | ||
|---|---|---|
| 15 | 15 | |
| 16 | 16 |
<p><%= setting_check_box :default_issue_start_date_to_creation_date %></p> |
| 17 | 17 | |
| 18 |
<% |
|
| 19 |
default_due_date_offset_enabled = |
|
| 20 |
if params[:settings] |
|
| 21 |
params[:settings][:default_issue_due_date_offset_enabled].to_s != '0' |
|
| 22 |
else |
|
| 23 |
Setting.default_issue_due_date_offset.present? |
|
| 24 |
end |
|
| 25 |
%> |
|
| 26 |
<p> |
|
| 27 |
<label for="settings_default_issue_due_date_offset_enabled"> |
|
| 28 |
<%= l(:text_enable_default_issue_due_date_offset) %> |
|
| 29 |
</label> |
|
| 30 |
<%= hidden_field_tag 'settings[default_issue_due_date_offset_enabled]', 0, :id => nil %> |
|
| 31 |
<%= check_box_tag 'settings[default_issue_due_date_offset_enabled]', 1, |
|
| 32 |
default_due_date_offset_enabled, |
|
| 33 |
:id => 'settings_default_issue_due_date_offset_enabled', |
|
| 34 |
:data => {:enables => '#settings_default_issue_due_date_offset'} %>
|
|
| 35 |
</p> |
|
| 36 |
<p> |
|
| 37 |
<label> </label> |
|
| 38 |
<%= setting_text_field :default_issue_due_date_offset, |
|
| 39 |
:label => false, |
|
| 40 |
:size => 6, |
|
| 41 |
:disabled => !default_due_date_offset_enabled %> |
|
| 42 |
<%= l(:text_default_issue_due_date_offset_from_today) %> |
|
| 43 |
</p> |
|
| 44 | ||
| 18 | 45 |
<p><%= setting_check_box :display_subprojects_issues %></p> |
| 19 | 46 | |
| 20 | 47 |
<p><%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %></p>
|
| config/locales/en.yml | ||
|---|---|---|
| 498 | 498 |
setting_gantt_months_limit: Maximum number of months displayed on the gantt chart |
| 499 | 499 |
setting_issue_group_assignment: Allow issue assignment to groups |
| 500 | 500 |
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues |
| 501 |
text_enable_default_issue_due_date_offset: Enable default due date for new issues |
|
| 502 |
text_default_issue_due_date_offset_from_today: days from today |
|
| 501 | 503 |
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed |
| 502 | 504 |
setting_unsubscribe: Allow users to delete their own account |
| 503 | 505 |
setting_session_lifetime: Session maximum lifetime |
| config/settings.yml | ||
|---|---|---|
| 198 | 198 |
default: 0 |
| 199 | 199 |
default_issue_start_date_to_creation_date: |
| 200 | 200 |
default: 0 |
| 201 |
default_issue_due_date_offset: |
|
| 202 |
default: '' |
|
| 201 | 203 |
notified_events: |
| 202 | 204 |
serialized: true |
| 203 | 205 |
default: |
| test/functional/issues_controller_test.rb | ||
|---|---|---|
| 3860 | 3860 |
end |
| 3861 | 3861 |
end |
| 3862 | 3862 | |
| 3863 |
def test_get_new_with_default_due_date_offset |
|
| 3864 |
with_settings :default_issue_due_date_offset => '7' do |
|
| 3865 |
@request.session[:user_id] = 2 |
|
| 3866 |
get( |
|
| 3867 |
:new, |
|
| 3868 |
:params => {
|
|
| 3869 |
:project_id => 1, |
|
| 3870 |
:tracker_id => 1 |
|
| 3871 |
} |
|
| 3872 |
) |
|
| 3873 |
assert_response :success |
|
| 3874 |
assert_select 'input[name=?][value=?]', 'issue[due_date]', (Date.today + 7.days).to_s |
|
| 3875 |
end |
|
| 3876 |
end |
|
| 3877 | ||
| 3863 | 3878 |
def test_get_new_form_should_allow_attachment_upload |
| 3864 | 3879 |
@request.session[:user_id] = 2 |
| 3865 | 3880 |
get( |
| ... | ... | |
| 4392 | 4407 |
end |
| 4393 | 4408 |
end |
| 4394 | 4409 | |
| 4410 |
def test_post_create_without_due_date_and_default_due_date_offset |
|
| 4411 |
with_settings :default_issue_due_date_offset => '5' do |
|
| 4412 |
@request.session[:user_id] = 2 |
|
| 4413 |
assert_difference 'Issue.count' do |
|
| 4414 |
post( |
|
| 4415 |
:create, |
|
| 4416 |
:params => {
|
|
| 4417 |
:project_id => 1, |
|
| 4418 |
:issue => {
|
|
| 4419 |
:tracker_id => 3, |
|
| 4420 |
:status_id => 2, |
|
| 4421 |
:subject => 'This is the test_new issue with default due date', |
|
| 4422 |
:description => 'This is the description', |
|
| 4423 |
:priority_id => 5, |
|
| 4424 |
:estimated_hours => '', |
|
| 4425 |
:custom_field_values => {
|
|
| 4426 |
'2' => 'Value for field 2' |
|
| 4427 |
} |
|
| 4428 |
} |
|
| 4429 |
} |
|
| 4430 |
) |
|
| 4431 |
end |
|
| 4432 |
issue = Issue.find_by_subject('This is the test_new issue with default due date')
|
|
| 4433 |
assert_not_nil issue |
|
| 4434 |
assert_equal Date.today + 5, issue.due_date |
|
| 4435 |
end |
|
| 4436 |
end |
|
| 4437 | ||
| 4395 | 4438 |
def test_post_create_and_continue |
| 4396 | 4439 |
@request.session[:user_id] = 2 |
| 4397 | 4440 |
assert_difference 'Issue.count' do |
| test/functional/settings_controller_test.rb | ||
|---|---|---|
| 141 | 141 |
) |
| 142 | 142 |
end |
| 143 | 143 | |
| 144 |
def test_post_edit_should_clear_default_due_date_offset_when_disabled |
|
| 145 |
with_settings :default_issue_due_date_offset => '5' do |
|
| 146 |
post :edit, :params => {
|
|
| 147 |
:tab => 'issues', |
|
| 148 |
:settings => {
|
|
| 149 |
:default_issue_due_date_offset_enabled => '0', |
|
| 150 |
:default_issue_due_date_offset => '7' |
|
| 151 |
} |
|
| 152 |
} |
|
| 153 |
assert_redirected_to '/settings?tab=issues' |
|
| 154 |
assert_equal '', Setting.default_issue_due_date_offset |
|
| 155 |
end |
|
| 156 |
end |
|
| 157 | ||
| 144 | 158 |
def test_post_edit_with_invalid_setting_should_not_error |
| 145 | 159 |
post :edit, :params => {
|
| 146 | 160 |
:settings => {
|
| test/unit/mail_handler_test.rb | ||
|---|---|---|
| 291 | 291 |
end |
| 292 | 292 |
end |
| 293 | 293 | |
| 294 |
def test_add_issue_should_set_default_due_date |
|
| 295 |
with_settings :default_issue_due_date_offset => '5' do |
|
| 296 |
issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'})
|
|
| 297 |
assert issue.is_a?(Issue) |
|
| 298 |
assert_equal Date.today + 5, issue.due_date |
|
| 299 |
end |
|
| 300 |
end |
|
| 301 | ||
| 294 | 302 |
def test_add_issue_should_add_cc_as_watchers |
| 295 | 303 |
user = User.find_by_mail('dlopper@somenet.foo')
|
| 296 | 304 |
issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'})
|
| test/unit/setting_test.rb | ||
|---|---|---|
| 135 | 135 |
end |
| 136 | 136 |
end |
| 137 | 137 | |
| 138 |
def test_default_issue_due_date_offset_should_validate_values |
|
| 139 |
with_locale 'en' do |
|
| 140 |
assert_nil Setting.set_all_from_params(:default_issue_due_date_offset => '') |
|
| 141 |
assert_nil Setting.set_all_from_params(:default_issue_due_date_offset => '0') |
|
| 142 |
assert_nil Setting.set_all_from_params(:default_issue_due_date_offset => '5') |
|
| 143 | ||
| 144 |
errors = Setting.set_all_from_params(:default_issue_due_date_offset => 'foo') |
|
| 145 |
assert_includes errors, [:default_issue_due_date_offset, 'is not a number'] |
|
| 146 | ||
| 147 |
errors = Setting.set_all_from_params(:default_issue_due_date_offset => '-1') |
|
| 148 |
assert_includes errors, [:default_issue_due_date_offset, 'must be greater than or equal to 0'] |
|
| 149 |
end |
|
| 150 |
end |
|
| 151 | ||
| 138 | 152 |
def test_default_text_formatting_for_new_installations_is_common_mark |
| 139 | 153 |
assert_equal 'common_mark', Setting.text_formatting |
| 140 | 154 |
end |
- « Previous
- 1
- 2
- Next »