backlog 0.3.9 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +8 -0
- data/README.txt +3 -1
- data/app/controllers/application.rb +1 -22
- data/app/controllers/backlogs_controller.rb +14 -3
- data/app/controllers/periods_controller.rb +1 -1
- data/app/controllers/tasks_controller.rb +9 -4
- data/app/helpers/application_helper.rb +7 -1
- data/app/models/task.rb +2 -2
- data/app/views/backlogs/_form.rhtml +0 -2
- data/app/views/backlogs/_tasks.rhtml +13 -0
- data/app/views/backlogs/edit.rhtml +8 -21
- data/app/views/periods/_show_active.rhtml +2 -2
- data/app/views/tasks/_backlog_header.rhtml +1 -1
- data/app/views/tasks/_task.rhtml +15 -13
- data/app/views/tasks/edit.rhtml +1 -1
- data/lang/en.yaml +1 -0
- data/lang/no.yaml +1 -0
- data/public/stylesheets/backlog.css +5 -2
- metadata +5 -3
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.4.0 2007-08-06
|
2
|
+
|
3
|
+
* Added tasks to backlog edit view
|
4
|
+
* Started simplifying task ordering. Now ordering simply has period_id as scope.
|
5
|
+
* Improved and fixed bugs in workflow
|
6
|
+
* Fixed typos in stylesheet
|
7
|
+
* KNOWN BUG: Ordering for tasks in backlog does not work properly
|
8
|
+
|
1
9
|
== 0.3.9 2007-08-03
|
2
10
|
|
3
11
|
* Fixed bug in moving task between periods
|
data/README.txt
CHANGED
@@ -28,8 +28,10 @@ A timekeeping module is also included to track time spent on the different tasks
|
|
28
28
|
|
29
29
|
=== Configuration
|
30
30
|
|
31
|
-
You can set configuration parameters for
|
31
|
+
You can set configuration parameters for backlog using the /etc/backlog.conf file.
|
32
32
|
The format is YAML.
|
33
33
|
Currently only port number is settable.
|
34
34
|
|
35
|
+
Example:
|
36
|
+
|
35
37
|
port: 3000
|
@@ -122,8 +122,7 @@ class ApplicationController < ActionController::Base
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def populate_layout
|
125
|
-
|
126
|
-
# @owner = @period.party if @period
|
125
|
+
return true if request.path_parameters[:action] =~ /_no_layout$/
|
127
126
|
populate_shortcuts
|
128
127
|
|
129
128
|
# TODO (uwe): This does not scale!
|
@@ -161,26 +160,6 @@ class ApplicationController < ActionController::Base
|
|
161
160
|
end
|
162
161
|
end
|
163
162
|
|
164
|
-
# def populate_layout
|
165
|
-
# populate_shortcuts
|
166
|
-
# @groups = Group.find(:all, :order => 'name')
|
167
|
-
# @backlogs = Backlog.find(:all, :order => 'name')
|
168
|
-
# @sidebars = @backlogs.map do |backlog|
|
169
|
-
# content = '<ul>'
|
170
|
-
# periods = backlog.tasks.map {|task| task.period}.uniq
|
171
|
-
# periods.select {|period| period.in_list? }[0...5].map do |period|
|
172
|
-
# "<li><a href=\"#{url_for(:controller => 'periods', :action => :show, :id => period)}\">#{period.name}</a></li>"
|
173
|
-
# end.each do |period_link|
|
174
|
-
# content << "#{period_link}"
|
175
|
-
# end
|
176
|
-
# content << '</ul>'
|
177
|
-
# { :title => "#{backlog.name}",
|
178
|
-
# :options => {:controller => 'backlogs', :action => :show, :id => backlog},
|
179
|
-
# :content => content
|
180
|
-
# }
|
181
|
-
# end
|
182
|
-
# end
|
183
|
-
|
184
163
|
private
|
185
164
|
|
186
165
|
def user_id
|
@@ -48,10 +48,21 @@ class BacklogsController < ApplicationController
|
|
48
48
|
|
49
49
|
def edit
|
50
50
|
@backlog = Backlog.find(params[:id])
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
unplanned_tasks = @backlog.tasks.select {|t| t.period.nil? && t.finished_at.nil?}.sort_by {|t| t.position}
|
52
|
+
planned_tasks = @backlog.tasks.select {|t| t.period && t.finished_at.nil?}.sort do |t1, t2|
|
53
|
+
if (cmp_period = t1.period.end_on <=> t2.period.end_on) != 0
|
54
|
+
cmp_period
|
55
|
+
else
|
56
|
+
t1.position <=> t2.position
|
57
|
+
end
|
54
58
|
end
|
59
|
+
@tasks = planned_tasks + unplanned_tasks
|
60
|
+
@completed_tasks = @backlog.tasks.select {|t| t.finished_at}.sort {|t1, t2| t1.finished_at <=> t2.finished_at}
|
61
|
+
end
|
62
|
+
|
63
|
+
def edit_no_layout
|
64
|
+
edit
|
65
|
+
render :partial => 'tasks'
|
55
66
|
end
|
56
67
|
|
57
68
|
def update
|
@@ -42,6 +42,7 @@ class TasksController < ApplicationController
|
|
42
42
|
|
43
43
|
def edit
|
44
44
|
@task = Task.find(params[:id])
|
45
|
+
@task.period_id = params[:task][:period_id] if params[:task] && params[:task][:period_id]
|
45
46
|
@periods = Period.find_active_or_future
|
46
47
|
@backlogs = Backlog.find(:all, :order => 'name')
|
47
48
|
end
|
@@ -117,9 +118,9 @@ class TasksController < ApplicationController
|
|
117
118
|
end
|
118
119
|
|
119
120
|
def move_to
|
120
|
-
task = Task.find(params[:id])
|
121
|
+
task = Task.find(params[:id][5..-1])
|
121
122
|
task.insert_at params[:position]
|
122
|
-
|
123
|
+
back_or_redirect_to :controller => 'periods', :action => :show_nolayout, :id => task.period, :task => task.id
|
123
124
|
end
|
124
125
|
|
125
126
|
def move_to_period(with_layout = false)
|
@@ -144,8 +145,12 @@ class TasksController < ApplicationController
|
|
144
145
|
|
145
146
|
def move_to_next_period
|
146
147
|
task = Task.find(params[:id])
|
147
|
-
|
148
|
-
|
148
|
+
if task.period
|
149
|
+
params[:period_id] = task.period.lower_item && task.period.lower_item.id
|
150
|
+
move_to_period(true)
|
151
|
+
else
|
152
|
+
detour_to :action => :edit, :id => task
|
153
|
+
end
|
149
154
|
end
|
150
155
|
|
151
156
|
def finish
|
@@ -12,7 +12,13 @@ module ApplicationHelper
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def detour_to(title, options, html_options = nil)
|
15
|
-
link_to title, options
|
15
|
+
link_to title, options_for_detour(options), html_options
|
16
|
+
end
|
17
|
+
|
18
|
+
def options_for_detour(options)
|
19
|
+
detour_options = {:detour => params.reject {|k, v| [:detour, :return_from_detour].include? k.to_sym}}.update(options)
|
20
|
+
detour_options[:detour].update({:action => params[:action] + '_no_layout'}) if (not options[:layout].nil?) && params[:action] !~ /_no_layout$/
|
21
|
+
detour_options
|
16
22
|
end
|
17
23
|
|
18
24
|
def image_detour_to(image_source, title, url_options, image_options = nil, post = false)
|
data/app/models/task.rb
CHANGED
@@ -8,7 +8,7 @@ class Task < ActiveRecord::Base
|
|
8
8
|
|
9
9
|
belongs_to :backlog
|
10
10
|
belongs_to :period
|
11
|
-
acts_as_list :scope =>
|
11
|
+
acts_as_list :scope => :period_id
|
12
12
|
has_many :estimates, :order => 'created_at', :dependent => :destroy
|
13
13
|
has_many :works, :order => 'completed_at', :dependent => :destroy
|
14
14
|
acts_as_tree :order => 'position'
|
@@ -18,7 +18,7 @@ class Task < ActiveRecord::Base
|
|
18
18
|
#validates_absence_of :position, :if => :finished_at
|
19
19
|
#validates_absence_of :finished_at, :if => :position
|
20
20
|
validates_presence_of :resolution, :if => :finished_at
|
21
|
-
validates_presence_of :description
|
21
|
+
validates_presence_of :description, :if => :backlog_id
|
22
22
|
|
23
23
|
validates_size_of :description, :maximum => 80, :if => :description
|
24
24
|
validates_size_of :customer, :maximum => 64, :if => :customer
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class="mainblock">
|
2
|
+
<div class="btitle">
|
3
|
+
<h4><%=l :tasks%></h4>
|
4
|
+
</div>
|
5
|
+
|
6
|
+
<table>
|
7
|
+
<%= render :partial => '/tasks/backlog_header', :locals => {:backlog => @backlog, :track_times => tasks.find {|t|t.period && t.period.active?}} %>
|
8
|
+
<% i = 0 %>
|
9
|
+
<% for @task in tasks %>
|
10
|
+
<%= render :partial => '/tasks/task/', :locals => {:task => @task, :i => i += 1, :active => true, :highlight => false, :update => :maincontent} %>
|
11
|
+
<% end %>
|
12
|
+
</table>
|
13
|
+
</div>
|
@@ -1,26 +1,13 @@
|
|
1
1
|
<% @page_title = "#{l(:editing)} #{l(:backlog)}" %>
|
2
2
|
|
3
3
|
<div id="spotlight">
|
4
|
-
<% form_tag :action => 'update', :id => @backlog do %>
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<% end %>
|
4
|
+
<% form_tag :action => 'update', :id => @backlog do %>
|
5
|
+
<%= render :partial => 'form' %>
|
6
|
+
<%= submit_tag l(:save) %>
|
7
|
+
<%= back_or_link_to l(:back), :action => 'show', :id => @backlog %>
|
8
|
+
<% end %>
|
9
9
|
</div>
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
<h4><%=l :tasks%></h4>
|
15
|
-
</div>
|
16
|
-
|
17
|
-
<table>
|
18
|
-
<%= render :partial => '/tasks/backlog_header', :locals => {:backlog => @backlog} %>
|
19
|
-
<% i = 0 %>
|
20
|
-
<% for @task in @tasks %>
|
21
|
-
<%= render :partial => '/tasks/task/', :locals => {:task => @task, :i => i += 1, :active => true, :highlight => false} %>
|
22
|
-
<% end %>
|
23
|
-
</table>
|
24
|
-
</div>
|
25
|
-
|
26
|
-
</div>
|
11
|
+
<div id="maincontent">
|
12
|
+
<%=render :partial => 'tasks', :locals => {:tasks => @tasks}%>
|
13
|
+
</div>
|
@@ -37,10 +37,10 @@ function handleEvent(field, event, id) {
|
|
37
37
|
<% for task in @tasks %>
|
38
38
|
<% if task.backlog != current_backlog %>
|
39
39
|
<%= '<tr><td> </td></tr>' if current_backlog %>
|
40
|
-
<%=render :partial => '/tasks/backlog_header', :locals => { :backlog => task.backlog } %>
|
40
|
+
<%=render :partial => '/tasks/backlog_header', :locals => { :backlog => task.backlog, :track_times => @tasks.find {|t|t.period && t.period.active?} } %>
|
41
41
|
<% current_backlog = task.backlog %>
|
42
42
|
<% end %>
|
43
|
-
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true, :highlight => task == @selected_task } %>
|
43
|
+
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true, :highlight => task == @selected_task, :update => :spotlight } %>
|
44
44
|
<% i += 1 %>
|
45
45
|
<% end %>
|
46
46
|
</table>
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<th/>
|
16
16
|
<th align="center">#</th>
|
17
17
|
<th><%=l :task %></th>
|
18
|
-
<th><%=l :start if @backlog.track_times? &&
|
18
|
+
<th><%=l :start if @backlog.track_times? && track_times %></th>
|
19
19
|
<th><%=l :done if @backlog.track_done? %></th>
|
20
20
|
<th width="*"><% l :todo if @backlog.track_todo? %></th>
|
21
21
|
</tr>
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
<% @task = task %>
|
2
|
-
<tr valign="top" <%=
|
2
|
+
<tr valign="top" <%='class="highlight"' if highlight %>>
|
3
3
|
<td width="1">
|
4
|
-
<% if @task.enable_subtasks? && @task.period
|
4
|
+
<% if @task.enable_subtasks? && active && (@task.period.nil? || @task.period.active_or_future?) %>
|
5
5
|
<% form_tag({:controller => 'tasks', :action => :specify, :id => @task}) do %>
|
6
6
|
<%= image_button_to('add.png', l(:specify), :controller => 'tasks', :action => :specify, :id => @task.id)%>
|
7
7
|
<% end %>
|
@@ -13,12 +13,14 @@
|
|
13
13
|
<%= l(@task.resolution.downcase) if @task.finished_at %>
|
14
14
|
<%= "-" if @task.children.size > 0 %>
|
15
15
|
</td>
|
16
|
-
<td
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
<td>
|
17
|
+
<div id="task_<%=@task.id%>"<%=' class="tasks" onmouseover="this.style.border=\'1px solid black\'" onmouseout="this.style.border=\'1px solid transparent\'"' if active && (@task.period.nil? || @task.period.active_or_future?)%>>
|
18
|
+
<% if @task.active? -%>
|
19
|
+
<%= in_place_editor_field(:task, :description, {:id => "#{@task.id}_description", :tabindex => i}, :url => url_for(:controller => 'tasks', :action => "set_task_description", :id => @task)) %>
|
20
|
+
<% else -%>
|
21
|
+
<%= @task.description -%>
|
22
|
+
<% end -%>
|
23
|
+
</div>
|
22
24
|
</td>
|
23
25
|
<td align="right" nowrap="true" width="1">
|
24
26
|
<% if active && @task.loggable? -%>
|
@@ -83,14 +85,14 @@
|
|
83
85
|
</td>
|
84
86
|
</tr>
|
85
87
|
|
86
|
-
<% if active && @task.period
|
87
|
-
<%= draggable_element "#{@task.id}", :revert => true, :constraint => "'vertical'" %>
|
88
|
-
<%= drop_receiving_element "#{@task.id}",
|
89
|
-
:update =>
|
88
|
+
<% if active && (@task.period.nil? || @task.period.active_or_future?) %>
|
89
|
+
<%= draggable_element "task_#{@task.id}", :revert => true, :constraint => "'vertical'" %>
|
90
|
+
<%= drop_receiving_element "task_#{@task.id}",
|
91
|
+
:update => update, :url => options_for_detour({:controller => 'tasks', :action => "move_to", :position => @task.position, :layout => false}),
|
90
92
|
:accept => "tasks",
|
91
93
|
:loading => "",
|
92
94
|
:complete => "",
|
93
|
-
:hoverclass => '
|
95
|
+
:hoverclass => 'dropzone-hover'
|
94
96
|
%>
|
95
97
|
<% end %>
|
96
98
|
|
data/app/views/tasks/edit.rhtml
CHANGED
data/lang/en.yaml
CHANGED
data/lang/no.yaml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
.task_description { width: 300px; }
|
2
2
|
.task_hours { width: 32px; }
|
3
|
-
.task_time { width: 40px; border:
|
3
|
+
.task_time { width: 40px; border: 1px solid black }
|
4
4
|
.image-submit {height: 22px; border: 0; margin-bottom: 1px; padding: 0; vertical-align: bottom; float: none;}
|
5
5
|
table.input {border-collapse: collapse}
|
6
6
|
table.input td {vertical-align: top; margin: 0; border: 0; padding: 0 1px;}
|
@@ -8,6 +8,9 @@ table.input td {vertical-align: top; margin: 0; border: 0; padding: 0 1px;}
|
|
8
8
|
#spotlight div.btitle img.image-submit {float: right;}
|
9
9
|
#spotlight div.btitle h4 {margin-top: 6px;}
|
10
10
|
.highlight {background: yellow;}
|
11
|
+
.tasks {cursor: move;}
|
12
|
+
.dragable-hover {background: yellow; border: 1px solid black;}
|
13
|
+
.dropzone-hover {background: yellow; border: 1px solid black;}
|
11
14
|
th.hours {text-align: right;}
|
12
15
|
|
13
16
|
.fieldWithErrors {
|
@@ -56,7 +59,7 @@ div.progressBar {
|
|
56
59
|
|
57
60
|
div.progressBar div.border {
|
58
61
|
background-color: #fff;
|
59
|
-
border: 1px solid
|
62
|
+
border: 1px solid gray;
|
60
63
|
width: 100%;
|
61
64
|
}
|
62
65
|
|
metadata
CHANGED
@@ -3,15 +3,15 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: backlog
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-08-
|
6
|
+
version: 0.4.0
|
7
|
+
date: 2007-08-06 00:00:00 +02:00
|
8
8
|
summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: ryand-ruby@zenspider.com
|
12
12
|
homepage: http://www.zenspider.com/ZSS/Products/backlog/
|
13
13
|
rubyforge_project: backlog
|
14
|
-
description: "== Backlog Welcome to Backlog! Backlog is a tool to help you collect and organize all your tasks, wether you are a single persion or a small or large group. A timekeeping module is also included to track time spent on the different tasks. === Backlog is not meant to be * an issue tracker with customer communication. === Installation * Install ruby * Install RubyGems * Install PostgreSQL * run <tt>sudo gem install backlog -y</tt> * run <tt>sudo backlog setup_linux</tt> * run <tt>sudo backlog start</tt> === Updates * run <tt>sudo backlog stop</tt> * run <tt>sudo gem update -y</tt> * run <tt>sudo backlog start</tt> === Configuration You can set configuration parameters for
|
14
|
+
description: "== Backlog Welcome to Backlog! Backlog is a tool to help you collect and organize all your tasks, wether you are a single persion or a small or large group. A timekeeping module is also included to track time spent on the different tasks. === Backlog is not meant to be * an issue tracker with customer communication. === Installation * Install ruby * Install RubyGems * Install PostgreSQL * run <tt>sudo gem install backlog -y</tt> * run <tt>sudo backlog setup_linux</tt> * run <tt>sudo backlog start</tt> === Updates * run <tt>sudo backlog stop</tt> * run <tt>sudo gem update -y</tt> * run <tt>sudo backlog start</tt> === Configuration You can set configuration parameters for backlog using the /etc/backlog.conf file. The format is YAML. Currently only port number is settable. Example: port: 3000"
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
@@ -223,6 +223,7 @@ files:
|
|
223
223
|
- config/environments/datek_production.rb
|
224
224
|
- LICENSE_LOCALIZATION
|
225
225
|
- README.txt
|
226
|
+
- doc
|
226
227
|
- Manifest.txt
|
227
228
|
- vendor
|
228
229
|
- vendor/plugins
|
@@ -1710,6 +1711,7 @@ files:
|
|
1710
1711
|
- app/views/backlogs/_form.rhtml
|
1711
1712
|
- app/views/backlogs/new.rhtml
|
1712
1713
|
- app/views/backlogs/edit.rhtml
|
1714
|
+
- app/views/backlogs/_tasks.rhtml
|
1713
1715
|
- app/views/estimates
|
1714
1716
|
- app/views/groups
|
1715
1717
|
- app/views/groups/list.rhtml
|