backlog 0.17.6 → 0.18.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 +15 -1
- data/README.txt +6 -6
- data/app/controllers/periods_controller.rb +14 -0
- data/app/helpers/application_helper.rb +5 -0
- data/app/helpers/periods_helper.rb +1 -1
- data/app/models/task.rb +9 -0
- data/app/views/tasks/_task.rhtml +10 -5
- data/app/views/tasks/_update.rjs +2 -0
- data/app/views/works/_form.rhtml +4 -4
- data/db/migrate/026_add_users_to_tasks.rb +14 -0
- data/db/schema.rb +10 -1
- data/public/images/grab.png +0 -0
- data/public/images/grab_gray.png +0 -0
- data/public/images/task.png +0 -0
- data/public/stylesheets/backlog.css +1 -1
- metadata +7 -2
data/History.txt
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
-
== 0.
|
1
|
+
== 0.18.0 2008-01-21
|
2
|
+
|
3
|
+
=== Features
|
4
|
+
|
5
|
+
* Allowed users to associate themselves with a task by pressing the monkey icon.
|
6
|
+
Only activated if the "Enable users" option on Backlog is checked.
|
7
|
+
* Added recording of last change timestamp for tasks.
|
8
|
+
* Allowed switching of tasks when registering a work record.
|
9
|
+
* Added navigation for editing and creating tasks when registering a work record.
|
10
|
+
|
11
|
+
=== Fixes
|
12
|
+
|
13
|
+
* Updated graphs in README.txt
|
14
|
+
|
15
|
+
== 0.17.6 2008-01-19
|
2
16
|
|
3
17
|
=== Features
|
4
18
|
|
data/README.txt
CHANGED
@@ -90,8 +90,8 @@ The charts are normally not protected, so you can display the in slide shows etc
|
|
90
90
|
|
91
91
|
Examples:
|
92
92
|
|
93
|
-
http://backlog.kubosch.no/periods/burn_down_chart/
|
94
|
-
http://backlog.kubosch.no/parties/burn_down_chart/
|
93
|
+
http://backlog.kubosch.no/periods/burn_down_chart/64.png
|
94
|
+
http://backlog.kubosch.no/parties/burn_down_chart/1.png
|
95
95
|
|
96
96
|
==== Chart thumbnails
|
97
97
|
|
@@ -99,8 +99,8 @@ You can get small versions of the burn down charts by appending "_thumbnail" to
|
|
99
99
|
|
100
100
|
Examples:
|
101
101
|
|
102
|
-
http://backlog.kubosch.no/periods/burn_down_chart_thumbnail/
|
103
|
-
http://backlog.kubosch.no/parties/burn_down_chart_thumbnail/
|
102
|
+
http://backlog.kubosch.no/periods/burn_down_chart_thumbnail/64.png
|
103
|
+
http://backlog.kubosch.no/parties/burn_down_chart_thumbnail/1.png
|
104
104
|
|
105
105
|
==== Large charts
|
106
106
|
|
@@ -108,5 +108,5 @@ You can get large versions (1368x768) of the burn down charts by appending "_lar
|
|
108
108
|
|
109
109
|
Examples:
|
110
110
|
|
111
|
-
http://backlog.kubosch.no/periods/burn_down_chart_large/
|
112
|
-
http://backlog.kubosch.no/parties/burn_down_chart_large/
|
111
|
+
http://backlog.kubosch.no/periods/burn_down_chart_large/64.png
|
112
|
+
http://backlog.kubosch.no/parties/burn_down_chart_large/1.png
|
@@ -147,6 +147,20 @@ class PeriodsController < ApplicationController
|
|
147
147
|
move_task_to_period
|
148
148
|
end
|
149
149
|
|
150
|
+
def grab_task
|
151
|
+
@task = Task.find(params[:id])
|
152
|
+
@task.grab
|
153
|
+
load_tasks(@task.period)
|
154
|
+
render :template => '/tasks/_update.rjs'
|
155
|
+
end
|
156
|
+
|
157
|
+
def release_task
|
158
|
+
@task = Task.find(params[:id])
|
159
|
+
@task.release
|
160
|
+
load_tasks(@task.period)
|
161
|
+
render :template => '/tasks/_update.rjs'
|
162
|
+
end
|
163
|
+
|
150
164
|
def finish_task
|
151
165
|
@task = Task.find(params[:id])
|
152
166
|
@task.finish(Task::COMPLETED, true)
|
@@ -3,6 +3,7 @@ require 'url_for_fix'
|
|
3
3
|
|
4
4
|
module ApplicationHelper
|
5
5
|
include Localization
|
6
|
+
include UserSystem
|
6
7
|
include UrlForFix
|
7
8
|
|
8
9
|
def image_button_to(image_source, title, options)
|
@@ -104,4 +105,8 @@ module ApplicationHelper
|
|
104
105
|
record(page, "new Insertion.#{position.to_s.capitalize}($$('#{selector}').first(), '#{escaped_content}')")
|
105
106
|
end
|
106
107
|
|
108
|
+
def update_task(page)
|
109
|
+
page["task_#{@task.id}"].replace render(:partial => "/tasks/task", :locals => { :task => @task, :i => 1, :active => true, :highlight_task => false, :update => :spotlight, :hidden => false })
|
110
|
+
end
|
111
|
+
|
107
112
|
end
|
@@ -18,7 +18,7 @@ module PeriodsHelper
|
|
18
18
|
page.remove "completed_period_#{@task.period_id}"
|
19
19
|
page.visual_effect :fade, :completed_tasks
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
22
22
|
|
23
23
|
def add_active_task(page)
|
24
24
|
page.insert_html(:top, "active_tasks_#{@task.period.id}", render(:partial => "/tasks/task", :locals => { :task => @task, :i => 1, :active => true, :highlight_task => false, :update => :spotlight, :hidden => true }))
|
data/app/models/task.rb
CHANGED
@@ -16,6 +16,7 @@ class Task < ActiveRecord::Base
|
|
16
16
|
has_many :estimates, :order => 'created_at', :dependent => :destroy
|
17
17
|
has_many :works, :order => 'completed_at', :dependent => :destroy
|
18
18
|
has_many :task_files, :dependent => :destroy
|
19
|
+
has_and_belongs_to_many :users
|
19
20
|
|
20
21
|
acts_as_list :scope => '#{parent_id ? "parent_id = #{parent_id}" : period_id ? "period_id = #{period_id}" : "period_id IS NULL AND parent_id IS NULL AND backlog_id = #{backlog_id}"} AND finished_at IS NULL'
|
21
22
|
acts_as_tree :order => 'position'
|
@@ -186,6 +187,14 @@ class Task < ActiveRecord::Base
|
|
186
187
|
end
|
187
188
|
end
|
188
189
|
|
190
|
+
def grab
|
191
|
+
self.users << current_user
|
192
|
+
end
|
193
|
+
|
194
|
+
def release
|
195
|
+
self.users.delete current_user
|
196
|
+
end
|
197
|
+
|
189
198
|
def finish(resolution, save_work)
|
190
199
|
unless finished_at || work_started?
|
191
200
|
self.finished_at = Time.now
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -85,16 +85,21 @@
|
|
85
85
|
<% if @task.active? -%>
|
86
86
|
<% if @task.loggable? -%>
|
87
87
|
<% unless @task.work_started? -%>
|
88
|
-
|
88
|
+
<% if @task.backlog.enable_users? %>
|
89
|
+
<% if @task.users.include?(current_user) %>
|
90
|
+
<%=image_link_to_remote('grab.png', l(:grab_task), {:action => :release_task, :id => @task}, nil, true)%>
|
91
|
+
<% else %>
|
92
|
+
<%=image_link_to_remote('grab_gray.png', l(:grab_task), {:action => :grab_task, :id => @task}, nil, true)%>
|
93
|
+
<% end %>
|
94
|
+
<% end %>
|
89
95
|
<%=image_link_to_remote('arrow_right.png', l(:move_to_next_period), {:action => :move_task_to_next_period, :id => @task}, nil, true) if @task.backlog.enable_periods? || @task.period_id%>
|
90
96
|
<%=image_link_to_remote('ernes_stop.png', l(:abort), {:action => :abort_task, :id => @task}, nil, true)%>
|
91
|
-
<%# end -%>
|
92
97
|
<% end -%>
|
93
98
|
<% end -%>
|
94
99
|
<% elsif (@task.period.nil? || (not @task.period.passed?)) && @task.leaf? -%>
|
95
|
-
|
96
|
-
|
97
|
-
|
100
|
+
<% form_tag({:controller => 'tasks', :action => 'update', :id => @task}) do -%>
|
101
|
+
<%=image_link_to_remote('eraser.png', l(:reopen), {:action => :reopen_task, :id => @task}, nil, true) %>
|
102
|
+
<% end -%>
|
98
103
|
<% end -%>
|
99
104
|
</div>
|
100
105
|
</div>
|
data/app/views/works/_form.rhtml
CHANGED
@@ -9,12 +9,12 @@
|
|
9
9
|
</p>
|
10
10
|
|
11
11
|
<p><%=l :task%>:<br/>
|
12
|
+
<%=select 'work', 'task_id', [['', '']] + @tasks.map{|task| [task.description_with_parents, task.id]}.sort %>
|
12
13
|
<% if @work.task %>
|
13
|
-
|
14
|
-
<%= hidden_field 'work', 'task_id' %>
|
15
|
-
<% else %>
|
16
|
-
<%= select 'work', 'task_id', [['', '']] + @tasks.map{|task| [task.description_with_parents, task.id]}.sort %></p>
|
14
|
+
<%=image_detour_to 'task.png', l(:edit_task), :controller => 'tasks', :action => :edit, :id => @work.task.id %>
|
17
15
|
<% end %>
|
16
|
+
<%=detour_to l(:new_task), :controller => 'tasks', :action => :new %>
|
17
|
+
</p>
|
18
18
|
|
19
19
|
<% if @work.task.nil? || @work.task.track_times?%>
|
20
20
|
<p><label for="work_started_at"><%=l :started_at%></label><br/>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class AddUsersToTasks < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :tasks, :updated_at, :timestamp
|
4
|
+
create_table :tasks_users, :id => false do |t|
|
5
|
+
t.column :task_id, :integer, :null => false
|
6
|
+
t.column :user_id, :integer, :null => false, :references => [:users, :party_id]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.down
|
11
|
+
drop_table :tasks_users
|
12
|
+
remove_column :tasks, :updated_at
|
13
|
+
end
|
14
|
+
end
|
data/db/schema.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# migrations feature of ActiveRecord to incrementally modify your database, and
|
3
3
|
# then regenerate this schema definition.
|
4
4
|
|
5
|
-
ActiveRecord::Schema.define(:version =>
|
5
|
+
ActiveRecord::Schema.define(:version => 26) do
|
6
6
|
|
7
7
|
create_table "backlogs", :force => true do |t|
|
8
8
|
t.column "name", :string, :limit => 64, :null => false
|
@@ -77,10 +77,16 @@ ActiveRecord::Schema.define(:version => 25) do
|
|
77
77
|
t.column "customer_id", :integer
|
78
78
|
t.column "created_by", :integer
|
79
79
|
t.column "updated_by", :integer
|
80
|
+
t.column "updated_at", :datetime
|
80
81
|
end
|
81
82
|
|
82
83
|
add_index "tasks", ["parent_id"], :name => "index_tasks_on_parent_id"
|
83
84
|
|
85
|
+
create_table "tasks_users", :id => false, :force => true do |t|
|
86
|
+
t.column "task_id", :integer, :null => false
|
87
|
+
t.column "user_id", :integer, :null => false
|
88
|
+
end
|
89
|
+
|
84
90
|
create_table "users", :primary_key => "party_id", :force => true do |t|
|
85
91
|
t.column "login", :string, :limit => 80, :null => false
|
86
92
|
t.column "salted_password", :string, :limit => 40, :null => false
|
@@ -139,6 +145,9 @@ ActiveRecord::Schema.define(:version => 25) do
|
|
139
145
|
add_foreign_key "tasks", ["parent_id"], "tasks", ["id"], :name => "tasks_parent_id_fkey"
|
140
146
|
add_foreign_key "tasks", ["period_id"], "periods", ["id"], :name => "tasks_period_id_fkey"
|
141
147
|
|
148
|
+
add_foreign_key "tasks_users", ["task_id"], "tasks", ["id"], :name => "tasks_users_task_id_fkey"
|
149
|
+
add_foreign_key "tasks_users", ["user_id"], "users", ["party_id"], :name => "tasks_users_user_id_fkey"
|
150
|
+
|
142
151
|
add_foreign_key "users", ["party_id"], "parties", ["id"], :name => "users_party_id_fkey"
|
143
152
|
|
144
153
|
add_foreign_key "works", ["work_account_id"], "work_accounts", ["id"], :name => "works_work_account_id_fkey"
|
Binary file
|
Binary file
|
Binary file
|
@@ -22,7 +22,7 @@ table.input td {vertical-align: top; margin: 0; border: 0; padding: 0 1px;}
|
|
22
22
|
.task_end_work {float: left; width: 2em}
|
23
23
|
.task_done {float: left; width: 3.6em; text-align: right; padding: 1px}
|
24
24
|
.task_todo {float: left; width: 4.3em; padding: 1px; text-align: center;}
|
25
|
-
.task_buttons {float: left; width:
|
25
|
+
.task_buttons {float: left; width: 7em}
|
26
26
|
.dragable-hover {background: yellow; border: 1px solid black;}
|
27
27
|
.dropzone-hover {background: yellow; border: 1px solid black;}
|
28
28
|
th.hours {text-align: right;}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backlog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-01-
|
12
|
+
date: 2008-01-22 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- app/views/tasks/list.rhtml
|
91
91
|
- app/views/tasks/start_work.rjs
|
92
92
|
- app/views/tasks/_fields_header.rhtml
|
93
|
+
- app/views/tasks/_update.rjs
|
93
94
|
- app/views/tasks/notes.rhtml
|
94
95
|
- app/views/tasks/_completed.rhtml
|
95
96
|
- app/views/tasks/_task.rhtml
|
@@ -461,6 +462,7 @@ files:
|
|
461
462
|
- public/images/eraser.png
|
462
463
|
- public/images/rails.png
|
463
464
|
- public/images/pagebak.jpg
|
465
|
+
- public/images/task.png
|
464
466
|
- public/images/period_org.png
|
465
467
|
- public/images/arrow_up.png
|
466
468
|
- public/images/rmagick_270.gif
|
@@ -468,6 +470,7 @@ files:
|
|
468
470
|
- public/images/arrow_left.png
|
469
471
|
- public/images/arrow_right.png
|
470
472
|
- public/images/arrow_down.svg
|
473
|
+
- public/images/grab_gray.png
|
471
474
|
- public/images/arrow07_4.png
|
472
475
|
- public/images/checkmark.png
|
473
476
|
- public/images/appunti_architetto_franc_01.svg
|
@@ -482,6 +485,7 @@ files:
|
|
482
485
|
- public/images/arrow_left.svg
|
483
486
|
- public/images/header.jpg
|
484
487
|
- public/images/blank.jpg
|
488
|
+
- public/images/grab.png
|
485
489
|
- public/images/question.svg
|
486
490
|
- public/images/paper3.svg
|
487
491
|
- public/images/clipboard.png
|
@@ -588,6 +592,7 @@ files:
|
|
588
592
|
- db/migrate/011_login_sugar.rb
|
589
593
|
- db/migrate/004_add_period.rb
|
590
594
|
- db/migrate/008_add_backlog_options.rb
|
595
|
+
- db/migrate/026_add_users_to_tasks.rb
|
591
596
|
- db/migrate/020_create_task_files.rb
|
592
597
|
- db/migrate/015_add_user_option.rb
|
593
598
|
- db/migrate/019_remove_unique_index_for_period_position.rb
|