Skip to content

Commit faacc45

Browse files
committed
Merge pull request #15 from nutso/develop
v1.2
2 parents a2801ec + 21a2b7e commit faacc45

File tree

11 files changed

+71
-27
lines changed

11 files changed

+71
-27
lines changed

app/controllers/recurring_tasks_controller.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ class RecurringTasksController < ApplicationController
66
before_filter :find_optional_project # this also checks permissions
77
before_filter :find_recurring_task, :except => [:index, :new, :create]
88
before_filter :set_interval_units, :except => [:index, :show]
9+
before_filter :set_recurrable_issues, :except => [:index, :show]
910

1011
def index
11-
# TODO authorize
12-
1312
@recurring_tasks = RecurringTask.all_for_project(@project)
1413
end
1514

@@ -19,6 +18,10 @@ def show
1918

2019
def new
2120
@recurring_task = RecurringTask.new
21+
22+
if params[:issue_id]
23+
@recurring_task.issue = Issue.find(params[:issue_id])
24+
end
2225
end
2326

2427
# creates a new recurring task
@@ -63,16 +66,13 @@ def destroy
6366
end
6467

6568
private
66-
# def find_project
67-
# @project = nil
68-
# if params[:project_id]
69-
# begin
70-
# @project = Project.find(params[:project_id])
71-
# rescue ActiveRecord::RecordNotFound
72-
# show_error "#{l(:error_project_not_found)} #{params[:project_id]}" # TODO localize
73-
## end
74-
# end
75-
# end
69+
def set_recurrable_issues
70+
if @project
71+
@recurrable_issues = @project.issues
72+
else
73+
@recurrable_issues = Issue.all
74+
end
75+
end
7676

7777
def find_recurring_task
7878
begin

app/helpers/recurring_tasks_helper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ def show_error msg
66

77
def delete_button recurring_task
88
if User.current.allowed_to?(:delete_issue_recurrence, recurring_task.project)
9-
button_to(l(:button_delete), {:action => 'destroy', :id => recurring_task}, :method => :delete, :class => 'icon icon-del', :confirm => l(:text_are_you_sure))
9+
button_to(l(:button_delete), {:action => 'destroy', :id => recurring_task, :project_id => recurring_task.project.id}, :method => :delete, :class => 'icon icon-del', :confirm => l(:text_are_you_sure))
1010
end
1111
end
1212

1313
def edit_button recurring_task
1414
if User.current.allowed_to?(:edit_issue_recurrence, recurring_task.project)
15-
link_to(l(:button_edit), {:action => 'edit', :id => recurring_task}, :class => 'icon icon-edit')
15+
link_to(l(:button_edit), {:action => 'edit', :id => recurring_task, :project_id => recurring_task.project.id}, :class => 'icon icon-edit')
1616
end
1717
end
1818
end

app/models/recurring_task.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ def recurrence_pattern
3131
end
3232
end
3333

34+
def self.find_by_issue issue
35+
# it's possible there is more than one recurrence associated with an issue
36+
RecurringTask.where(current_issue_id: issue.id)
37+
end
38+
3439
# retrieve all recurring tasks given a project
3540
def self.all_for_project project
3641
if project.nil? then all else RecurringTask.includes(:issue).where("issues.project_id" => project.id) end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<hr />
2+
<tr>
3+
<td class="recurrence" colspan="2"></th>
4+
<% if User.current.allowed_to?(:add_issue_recurrence, project) %>
5+
<div class="contextual"><%= link_to(l(:label_add_recurring_task), new_recurring_task_path(:issue_id => issue.id, :project_id => project.id), :class => 'icon icon-add') %></div>
6+
<% end %>
7+
<p><strong><%= l(:field_recurrence)%></strong></p>
8+
<% if issue.recurs? %>
9+
<ul>
10+
<% issue.recurring_tasks.each do |rt| %>
11+
<li><%= if User.current.allowed_to?(:view_issue_recurrence, project) then link_to(rt.to_s, recurring_task_path(:id => rt.id, :project_id => project.id)) else rt.to_s end %></li>
12+
<% end %>
13+
</ul>
14+
<% else %>
15+
<p><%= l(:label_no_recurrence)%></p>
16+
<% end %>
17+
</td>
18+
</tr>

app/views/recurring_tasks/_form.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<%= labelled_form_for rt, :url => { :action => next_step, :id=>rt } do |f| %>
33
<p><%= error_messages_for 'recurring_task' %></p>
44
<p><%= f.hidden_field :id %></p>
5-
<p><%= label(:recurring_task, :current_issue_id, l(:field_issue)) %><%= collection_select('recurring_task', 'current_issue_id', Issue.all, :id, :subj_date) %></p>
5+
<p><%= label(:recurring_task, :current_issue_id, l(:field_issue)) %><%= collection_select('recurring_task', 'current_issue_id', @recurrable_issues, :id, :subj_date) %></p>
66
<p><%= f.number_field :interval_number %></p>
77
<p><%= label(:recurring_task, :interval_unit, l(:field_interval_unit)) %><%= select 'recurring_task', 'interval_unit', @interval_units %></p>
88
<p><%= f.check_box :fixed_schedule %> </p>

app/views/recurring_tasks/index.html.erb

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
<h2><%= l(:label_recurring_tasks) %></h2>
22

3-
<div class="contextual">
4-
<%= link_to(l(:label_add_recurring_task), {:action => 'new'}, :class => 'icon icon-add') %>
5-
</div>
6-
73
<% if @recurring_tasks.nil? or @recurring_tasks.empty? %>
84
<p><%= l(:label_no_recurring_tasks)%></p>
95

@@ -12,6 +8,7 @@
128
<table class="list">
139
<thead>
1410
<tr>
11+
<% if !@project %><th><%= l(:field_project)%></th><% end %>
1512
<th><%= l(:label_current_issue)%></th>
1613
<th><%= l(:label_recurrence_pattern)%></th>
1714
<th><%= l(:field_fixed_schedule)%></th>
@@ -22,7 +19,8 @@
2219
<tbody>
2320
<% @recurring_tasks.each do |rt| %>
2421
<tr class="<%= cycle('odd', 'even') %>">
25-
<td><%= rt.issue.nil? ? l(:label_recurring_task_issue_empty) : link_to(rt.issue.subj_date, {:action => 'show', :id => rt.id}) %></td>
22+
<% if !@project %><td><%= link_to(rt.project, project_path(rt.project)) %></td><% end %>
23+
<td><%= rt.issue.nil? ? l(:label_recurring_task_issue_empty) : link_to(rt.issue.subj_date, {:action => 'show', :id => rt.id, :project_id => rt.project.id}) %></td>
2624
<td><%= pluralize(rt.interval_number, rt.interval_unit) %></td>
2725
<td><%= rt.fixed_schedule %></td>
2826
<td><%= format_date(rt.next_scheduled_recurrence) %></td>

config/locales/en.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ en:
33
label_recurring_tasks: "Recurring Tasks"
44
label_current_issue: "Current Issue for Recurrence"
55
label_recurrence_pattern: "Recurs every"
6-
label_add_recurring_task: "Add Recurring Task"
6+
label_add_recurring_task: "Add Recurrence"
77
label_no_recurring_tasks: "No recurring tasks found on the system."
88
label_next_scheduled_run: "Next scheduled run"
9+
label_no_recurrence: "No recurrence."
910

1011
label_recurs_fixed: "on a fixed schedule"
1112
label_recurs_dependent: "after previous task completion"
@@ -22,6 +23,7 @@ en:
2223
field_interval_number: "Interval number"
2324
field_interval_unit: "Interval Unit(s)"
2425
field_fixed_schedule: "Fixed Schedule?"
26+
field_recurrence: "Recurrence"
2527

2628
interval_day: "day"
2729
interval_week: "week"

config/routes.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
match 'recurring_tasks', :to => 'recurring_tasks#index'
55

66
# project view
7-
match 'projects/:project_id/recurring_tasks', :to => 'recurring_tasks#index'
8-
match 'projects/:project_id/recurring_tasks/:id', :to => 'recurring_tasks#show'
9-
match 'projects/:project_id/recurring_tasks/new', :to => 'recurring_tasks#new'
7+
match 'projects/:project_id/recurring_tasks', :to => 'recurring_tasks#index', :as => :recurring_tasks
8+
match 'projects/:project_id/recurring_tasks/new(/:issue_id)', :to => 'recurring_tasks#new', :as => :new_recurring_task
109
match 'projects/:project_id/recurring_tasks/create', :to => 'recurring_tasks#create'
11-
match 'projects/:project_id/recurring_tasks/:id/edit', :to => 'recurring_tasks#edit'
10+
match 'projects/:project_id/recurring_tasks/:id', :to => 'recurring_tasks#show', :as => :recurring_task
11+
match 'projects/:project_id/recurring_tasks/:id/edit', :to => 'recurring_tasks#edit', :as => :edit_recurring_task
1212
match 'projects/:project_id/recurring_tasks/:id/update', :to => 'recurring_tasks#update'
13-
match 'projects/:project_id/recurring_tasks/:id/destroy', :to => 'recurring_tasks#destroy'
13+
match 'projects/:project_id/recurring_tasks/:id/destroy', :to => 'recurring_tasks#destroy', :as => :destroy_recurring_task

init.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
require 'redmine'
12
require 'issues_patch'
23

4+
# view hooks
5+
require_dependency 'recurring_tasks/hooks'
6+
37
Redmine::Plugin.register :recurring_tasks do
48
name 'Recurring Tasks (Issues)'
59
author 'Teresa N.'
610
author_url 'https://github.com/nutso/'
711
url 'https://github.com/nutso/redmine-plugin-recurring-tasks'
812
description 'Allows you to set a task to recur on a regular schedule, or when marked complete, regenerate a new task due in the future. Plugin is based -- very loosely -- on the periodic tasks plugin published by Tanguy de Courson'
9-
version '1.1.0'
13+
version '1.2'
1014

1115
Redmine::MenuManager.map :top_menu do |menu|
1216
menu.push :recurring_tasks, { :controller => 'recurring_tasks', :action => 'index' }, :caption => 'Recurring Issues', :if => Proc.new { User.current.admin? } # TODO localize string

lib/issues_patch.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ def self.included(base)
66
def subj_date
77
"#{self.subject} (#{format_date self.due_date})"
88
end #subj_date
9+
10+
# whether this issue recurs
11+
def recurs?
12+
!(recurring_tasks.nil? || recurring_tasks.length <= 0)
13+
# TODO determine if it was a historically recurring task
14+
end
15+
16+
def recurring_tasks
17+
RecurringTask.find_by_issue(self)
18+
end
919
end # base.class_eval
1020
end # self.included
1121
end # issues patch

lib/recurring_tasks/hooks.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module RecurringTasks
2+
class Hooks < Redmine::Hook::ViewListener
3+
# view issue
4+
render_on :view_issues_show_description_bottom,
5+
:partial => 'issues/show_recurrence'
6+
end
7+
end

0 commit comments

Comments
 (0)