Skip to content
Merged

v1.2 #15

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
46f53be
fixed routes to allow for new and create
nutso Dec 28, 2013
a0b9b0b
setting recurrable issues based on project
nutso Dec 28, 2013
0a646ff
removed todo as it was no longer relevant
nutso Dec 28, 2013
e674575
#7 starting to display link to add recurrence on issue
nutso Dec 29, 2013
fb994ed
#7 starting to display link to add recurrence on issue
nutso Dec 29, 2013
202bf45
#7 typo
nutso Dec 29, 2013
de311f8
#7 typo
nutso Dec 29, 2013
0e63695
#7 allowing for multiple recurrences
nutso Dec 29, 2013
fa1f8f9
#7 typo
nutso Dec 29, 2013
b12fec5
#7 typo
nutso Dec 29, 2013
a8c532f
#7 passing by id instead of object
nutso Dec 29, 2013
ebd06ad
#7 passing with new issue
nutso Dec 29, 2013
085c229
#7 named route
nutso Dec 29, 2013
0e06d55
#7 named route
nutso Dec 29, 2013
95f33cd
#7 missing parameter
nutso Dec 29, 2013
71a0a53
#7 checking for permissions and added caption
nutso Dec 29, 2013
2b7e7df
#7 correct controller and class
nutso Dec 29, 2013
38241a7
passing all parameters
nutso Dec 29, 2013
5f599c7
option to add more than one recurrence
nutso Dec 29, 2013
975c9b9
better label
nutso Dec 29, 2013
6121c82
better separation
nutso Dec 29, 2013
af3ab87
list of recurrence
nutso Dec 29, 2013
13dfd25
link only if allowed
nutso Dec 29, 2013
7d9943e
better link position maybe
nutso Dec 29, 2013
5b838b5
better display of no recurrence
nutso Dec 30, 2013
e44133b
better display of recurrence title
nutso Dec 30, 2013
32971eb
better display of recurrence link
nutso Dec 30, 2013
d3e2f52
added missing parameters
nutso Dec 30, 2013
d3e4412
displaying project on overview page
nutso Dec 30, 2013
0bd6617
displaying project instead of link
nutso Dec 30, 2013
1b0a001
td instead of th
nutso Dec 30, 2013
21a2b7e
incremented version
nutso Dec 30, 2013
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions app/controllers/recurring_tasks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ class RecurringTasksController < ApplicationController
before_filter :find_optional_project # this also checks permissions
before_filter :find_recurring_task, :except => [:index, :new, :create]
before_filter :set_interval_units, :except => [:index, :show]
before_filter :set_recurrable_issues, :except => [:index, :show]

def index
# TODO authorize

@recurring_tasks = RecurringTask.all_for_project(@project)
end

Expand All @@ -19,6 +18,10 @@ def show

def new
@recurring_task = RecurringTask.new

if params[:issue_id]
@recurring_task.issue = Issue.find(params[:issue_id])
end
end

# creates a new recurring task
Expand Down Expand Up @@ -63,16 +66,13 @@ def destroy
end

private
# def find_project
# @project = nil
# if params[:project_id]
# begin
# @project = Project.find(params[:project_id])
# rescue ActiveRecord::RecordNotFound
# show_error "#{l(:error_project_not_found)} #{params[:project_id]}" # TODO localize
## end
# end
# end
def set_recurrable_issues
if @project
@recurrable_issues = @project.issues
else
@recurrable_issues = Issue.all
end
end

def find_recurring_task
begin
Expand Down
4 changes: 2 additions & 2 deletions app/helpers/recurring_tasks_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ def show_error msg

def delete_button recurring_task
if User.current.allowed_to?(:delete_issue_recurrence, recurring_task.project)
button_to(l(:button_delete), {:action => 'destroy', :id => recurring_task}, :method => :delete, :class => 'icon icon-del', :confirm => l(:text_are_you_sure))
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))
end
end

def edit_button recurring_task
if User.current.allowed_to?(:edit_issue_recurrence, recurring_task.project)
link_to(l(:button_edit), {:action => 'edit', :id => recurring_task}, :class => 'icon icon-edit')
link_to(l(:button_edit), {:action => 'edit', :id => recurring_task, :project_id => recurring_task.project.id}, :class => 'icon icon-edit')
end
end
end
5 changes: 5 additions & 0 deletions app/models/recurring_task.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ def recurrence_pattern
end
end

def self.find_by_issue issue
# it's possible there is more than one recurrence associated with an issue
RecurringTask.where(current_issue_id: issue.id)
end

# retrieve all recurring tasks given a project
def self.all_for_project project
if project.nil? then all else RecurringTask.includes(:issue).where("issues.project_id" => project.id) end
Expand Down
18 changes: 18 additions & 0 deletions app/views/issues/_show_recurrence.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<hr />
<tr>
<td class="recurrence" colspan="2"></th>
<% if User.current.allowed_to?(:add_issue_recurrence, project) %>
<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>
<% end %>
<p><strong><%= l(:field_recurrence)%></strong></p>
<% if issue.recurs? %>
<ul>
<% issue.recurring_tasks.each do |rt| %>
<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>
<% end %>
</ul>
<% else %>
<p><%= l(:label_no_recurrence)%></p>
<% end %>
</td>
</tr>
2 changes: 1 addition & 1 deletion app/views/recurring_tasks/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<%= labelled_form_for rt, :url => { :action => next_step, :id=>rt } do |f| %>
<p><%= error_messages_for 'recurring_task' %></p>
<p><%= f.hidden_field :id %></p>
<p><%= label(:recurring_task, :current_issue_id, l(:field_issue)) %><%= collection_select('recurring_task', 'current_issue_id', Issue.all, :id, :subj_date) %></p>
<p><%= label(:recurring_task, :current_issue_id, l(:field_issue)) %><%= collection_select('recurring_task', 'current_issue_id', @recurrable_issues, :id, :subj_date) %></p>
<p><%= f.number_field :interval_number %></p>
<p><%= label(:recurring_task, :interval_unit, l(:field_interval_unit)) %><%= select 'recurring_task', 'interval_unit', @interval_units %></p>
<p><%= f.check_box :fixed_schedule %> </p>
Expand Down
8 changes: 3 additions & 5 deletions app/views/recurring_tasks/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
<h2><%= l(:label_recurring_tasks) %></h2>

<div class="contextual">
<%= link_to(l(:label_add_recurring_task), {:action => 'new'}, :class => 'icon icon-add') %>
</div>

<% if @recurring_tasks.nil? or @recurring_tasks.empty? %>
<p><%= l(:label_no_recurring_tasks)%></p>

Expand All @@ -12,6 +8,7 @@
<table class="list">
<thead>
<tr>
<% if !@project %><th><%= l(:field_project)%></th><% end %>
<th><%= l(:label_current_issue)%></th>
<th><%= l(:label_recurrence_pattern)%></th>
<th><%= l(:field_fixed_schedule)%></th>
Expand All @@ -22,7 +19,8 @@
<tbody>
<% @recurring_tasks.each do |rt| %>
<tr class="<%= cycle('odd', 'even') %>">
<td><%= rt.issue.nil? ? l(:label_recurring_task_issue_empty) : link_to(rt.issue.subj_date, {:action => 'show', :id => rt.id}) %></td>
<% if !@project %><td><%= link_to(rt.project, project_path(rt.project)) %></td><% end %>
<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>
<td><%= pluralize(rt.interval_number, rt.interval_unit) %></td>
<td><%= rt.fixed_schedule %></td>
<td><%= format_date(rt.next_scheduled_recurrence) %></td>
Expand Down
4 changes: 3 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ en:
label_recurring_tasks: "Recurring Tasks"
label_current_issue: "Current Issue for Recurrence"
label_recurrence_pattern: "Recurs every"
label_add_recurring_task: "Add Recurring Task"
label_add_recurring_task: "Add Recurrence"
label_no_recurring_tasks: "No recurring tasks found on the system."
label_next_scheduled_run: "Next scheduled run"
label_no_recurrence: "No recurrence."

label_recurs_fixed: "on a fixed schedule"
label_recurs_dependent: "after previous task completion"
Expand All @@ -22,6 +23,7 @@ en:
field_interval_number: "Interval number"
field_interval_unit: "Interval Unit(s)"
field_fixed_schedule: "Fixed Schedule?"
field_recurrence: "Recurrence"

interval_day: "day"
interval_week: "week"
Expand Down
10 changes: 5 additions & 5 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
match 'recurring_tasks', :to => 'recurring_tasks#index'

# project view
match 'projects/:project_id/recurring_tasks', :to => 'recurring_tasks#index'
match 'projects/:project_id/recurring_tasks/:id', :to => 'recurring_tasks#show'
match 'projects/:project_id/recurring_tasks/new', :to => 'recurring_tasks#new'
match 'projects/:project_id/recurring_tasks', :to => 'recurring_tasks#index', :as => :recurring_tasks
match 'projects/:project_id/recurring_tasks/new(/:issue_id)', :to => 'recurring_tasks#new', :as => :new_recurring_task
match 'projects/:project_id/recurring_tasks/create', :to => 'recurring_tasks#create'
match 'projects/:project_id/recurring_tasks/:id/edit', :to => 'recurring_tasks#edit'
match 'projects/:project_id/recurring_tasks/:id', :to => 'recurring_tasks#show', :as => :recurring_task
match 'projects/:project_id/recurring_tasks/:id/edit', :to => 'recurring_tasks#edit', :as => :edit_recurring_task
match 'projects/:project_id/recurring_tasks/:id/update', :to => 'recurring_tasks#update'
match 'projects/:project_id/recurring_tasks/:id/destroy', :to => 'recurring_tasks#destroy'
match 'projects/:project_id/recurring_tasks/:id/destroy', :to => 'recurring_tasks#destroy', :as => :destroy_recurring_task
6 changes: 5 additions & 1 deletion init.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
require 'redmine'
require 'issues_patch'

# view hooks
require_dependency 'recurring_tasks/hooks'

Redmine::Plugin.register :recurring_tasks do
name 'Recurring Tasks (Issues)'
author 'Teresa N.'
author_url 'https://github.com/nutso/'
url 'https://github.com/nutso/redmine-plugin-recurring-tasks'
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'
version '1.1.0'
version '1.2'

Redmine::MenuManager.map :top_menu do |menu|
menu.push :recurring_tasks, { :controller => 'recurring_tasks', :action => 'index' }, :caption => 'Recurring Issues', :if => Proc.new { User.current.admin? } # TODO localize string
Expand Down
10 changes: 10 additions & 0 deletions lib/issues_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ def self.included(base)
def subj_date
"#{self.subject} (#{format_date self.due_date})"
end #subj_date

# whether this issue recurs
def recurs?
!(recurring_tasks.nil? || recurring_tasks.length <= 0)
# TODO determine if it was a historically recurring task
end

def recurring_tasks
RecurringTask.find_by_issue(self)
end
end # base.class_eval
end # self.included
end # issues patch
Expand Down
7 changes: 7 additions & 0 deletions lib/recurring_tasks/hooks.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module RecurringTasks
class Hooks < Redmine::Hook::ViewListener
# view issue
render_on :view_issues_show_description_bottom,
:partial => 'issues/show_recurrence'
end
end