@@ -0,0 +1,3 | |||||
|
1 | Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %> | |||
|
2 | ---------------------------------------- | |||
|
3 | <%= @history.notes %> No newline at end of file |
@@ -0,0 +1,3 | |||||
|
1 | Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %> | |||
|
2 | ---------------------------------------- | |||
|
3 | <%= @history.notes %> No newline at end of file |
@@ -0,0 +1,3 | |||||
|
1 | Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %> | |||
|
2 | ---------------------------------------- | |||
|
3 | <%= @history.notes %> No newline at end of file |
@@ -0,0 +1,3 | |||||
|
1 | Note ajoutée à la demande #<%= @history.issue_id %> par <%= @history.author.name %> | |||
|
2 | ---------------------------------------- | |||
|
3 | <%= @history.notes %> No newline at end of file |
@@ -0,0 +1,43 | |||||
|
1 | <h2><%=l(:label_activity)%></h2> | |||
|
2 | ||||
|
3 | <div> | |||
|
4 | <div class="rightbox"> | |||
|
5 | <%= start_form_tag %> | |||
|
6 | <p>From <%= text_field_tag 'date_from', @date_from, :size => 10, :class => 'button-small' %> | |||
|
7 | and <%= text_field_tag 'days_back', @days_back, :size => 2, :class => 'button-small' %> days back</p> | |||
|
8 | <%= check_box_tag 'show_issues', 1, @show_issues %><%= hidden_field_tag 'show_issues', 0 %> <%=l(:label_issue_plural)%><br /> | |||
|
9 | <%= check_box_tag 'show_news', 1, @show_news %><%= hidden_field_tag 'show_news', 0 %> <%=l(:label_news_plural)%><br /> | |||
|
10 | <%= check_box_tag 'show_files', 1, @show_files %><%= hidden_field_tag 'show_files', 0 %> <%=l(:label_attachment_plural)%><br /> | |||
|
11 | <%= check_box_tag 'show_documents', 1, @show_documents %><%= hidden_field_tag 'show_documents', 0 %> <%=l(:label_document_plural)%><br /> | |||
|
12 | <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p> | |||
|
13 | <%= end_form_tag %> | |||
|
14 | </div> | |||
|
15 | <% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %> | |||
|
16 | <h3><%= format_date(day) %></h3> | |||
|
17 | <ul> | |||
|
18 | <% @events_by_day[day].each do |e| %> | |||
|
19 | <li><p> | |||
|
20 | <% if e.is_a? Issue %> | |||
|
21 | <%= e.created_on.strftime("%H:%M") %> <%= e.tracker.name %> <%= link_to e.long_id, :controller => 'issues', :action => 'show', :id => e %> (<%= e.status.name %>): <%= e.subject %><br /> | |||
|
22 | <i><%= e.author.name %></i> | |||
|
23 | <% elsif e.is_a? News %> | |||
|
24 | <%= e.created_on.strftime("%H:%M") %> <%=l(:label_news)%>: <%= link_to e.title, :controller => 'news', :action => 'show', :id => e %><br /> | |||
|
25 | <% unless e.summary.empty? %><%= e.summary %><br /><% end %> | |||
|
26 | <i><%= e.author.name %></i> | |||
|
27 | <% elsif (e.is_a? Attachment) and (e.container.is_a? Version) %> | |||
|
28 | <%= e.created_on.strftime("%H:%M") %> <%=l(:label_attachment)%> (Version <%= e.container.name %>): <%= link_to e.filename, :controller => 'projects', :action => 'list_files', :id => @project %><br /> | |||
|
29 | <i><%= e.author.name %></i> | |||
|
30 | <% elsif (e.is_a? Attachment) and (e.container.is_a? Document) %> | |||
|
31 | <%= e.created_on.strftime("%H:%M") %> <%=l(:label_document)%>: <%= link_to e.container.title, :controller => 'documents', :action => 'show', :id => e %><br /> | |||
|
32 | <i><%= e.author.name %></i> | |||
|
33 | <% end %> | |||
|
34 | </p></li> | |||
|
35 | ||||
|
36 | <% end %> | |||
|
37 | </ul> | |||
|
38 | <% end %> | |||
|
39 | <br /> | |||
|
40 | ||||
|
41 | ||||
|
42 | ||||
|
43 | </div> No newline at end of file |
@@ -63,6 +63,7 class IssuesController < ApplicationController | |||||
63 | @history.status = @issue.status |
|
63 | @history.status = @issue.status | |
64 | if @history.save |
|
64 | if @history.save | |
65 | flash[:notice] = l(:notice_successful_update) |
|
65 | flash[:notice] = l(:notice_successful_update) | |
|
66 | Mailer.deliver_issue_add_note(@history) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled? | |||
66 | redirect_to :action => 'show', :id => @issue |
|
67 | redirect_to :action => 'show', :id => @issue | |
67 | return |
|
68 | return | |
68 | end |
|
69 | end |
@@ -356,6 +356,48 class ProjectsController < ApplicationController | |||||
356 | @fixed_issues ||= [] |
|
356 | @fixed_issues ||= [] | |
357 | end |
|
357 | end | |
358 |
|
358 | |||
|
359 | def activity | |||
|
360 | @date_from = begin | |||
|
361 | params[:date_from].to_date | |||
|
362 | rescue | |||
|
363 | end || Date.today | |||
|
364 | @days_back = params[:days_back] ? params[:days_back].to_i : 15 | |||
|
365 | @date_to = @date_from - @days_back | |||
|
366 | @events_by_day = {} | |||
|
367 | ||||
|
368 | unless params[:show_issues] == "0" | |||
|
369 | @project.issues.find(:all, :include => [:author, :status], :conditions => ["issues.created_on<=? and issues.created_on>=?", @date_from+1, @date_to], :order => "issues.created_on asc" ).each { |i| | |||
|
370 | @events_by_day[i.created_on.to_date] ||= [] | |||
|
371 | @events_by_day[i.created_on.to_date] << i | |||
|
372 | } | |||
|
373 | @show_issues = 1 | |||
|
374 | end | |||
|
375 | ||||
|
376 | unless params[:show_news] == "0" | |||
|
377 | @project.news.find(:all, :conditions => ["news.created_on<=? and news.created_on>=?", @date_from+1, @date_to], :order => "news.created_on asc" ).each { |i| | |||
|
378 | @events_by_day[i.created_on.to_date] ||= [] | |||
|
379 | @events_by_day[i.created_on.to_date] << i | |||
|
380 | } | |||
|
381 | @show_news = 1 | |||
|
382 | end | |||
|
383 | ||||
|
384 | unless params[:show_files] == "0" | |||
|
385 | Attachment.find(:all, :joins => "LEFT JOIN versions ON versions.id = attachments.container_id", :conditions => ["attachments.container_type='Version' and versions.project_id=? and attachments.created_on<=? and attachments.created_on>=?", @project.id, @date_from+1, @date_to], :order => "attachments.created_on asc" ).each { |i| | |||
|
386 | @events_by_day[i.created_on.to_date] ||= [] | |||
|
387 | @events_by_day[i.created_on.to_date] << i | |||
|
388 | } | |||
|
389 | @show_files = 1 | |||
|
390 | end | |||
|
391 | ||||
|
392 | unless params[:show_documentss] == "0" | |||
|
393 | Attachment.find(:all, :joins => "LEFT JOIN documents ON documents.id = attachments.container_id", :conditions => ["attachments.container_type='Document' and documents.project_id=? and attachments.created_on<=? and attachments.created_on>=?", @project.id, @date_from+1, @date_to], :order => "attachments.created_on asc" ).each { |i| | |||
|
394 | @events_by_day[i.created_on.to_date] ||= [] | |||
|
395 | @events_by_day[i.created_on.to_date] << i | |||
|
396 | } | |||
|
397 | @show_documents = 1 | |||
|
398 | end | |||
|
399 | ||||
|
400 | end | |||
359 | private |
|
401 | private | |
360 | # Find project of id params[:id] |
|
402 | # Find project of id params[:id] | |
361 | # if not found, redirect to project list |
|
403 | # if not found, redirect to project list |
@@ -57,7 +57,7 module CustomFieldsHelper | |||||
57 |
|
57 | |||
58 | case custom_value.custom_field.field_format |
|
58 | case custom_value.custom_field.field_format | |
59 | when "date" |
|
59 | when "date" | |
60 | l_date(custom_value.value.to_date) if custom_value.value |
|
60 | custom_value.value.empty? ? "" : l_date(custom_value.value.to_date) | |
61 | when "bool" |
|
61 | when "bool" | |
62 | l_YesNo(custom_value.value == "1") |
|
62 | l_YesNo(custom_value.value == "1") | |
63 | else |
|
63 | else |
@@ -32,7 +32,7 class Issue < ActiveRecord::Base | |||||
32 | has_many :custom_values, :dependent => true, :as => :customized |
|
32 | has_many :custom_values, :dependent => true, :as => :customized | |
33 | has_many :custom_fields, :through => :custom_values |
|
33 | has_many :custom_fields, :through => :custom_values | |
34 |
|
34 | |||
35 | validates_presence_of :subject, :description, :priority, :tracker, :author |
|
35 | validates_presence_of :subject, :description, :priority, :tracker, :author, :status | |
36 | validates_associated :custom_values, :on => :update |
|
36 | validates_associated :custom_values, :on => :update | |
37 |
|
37 | |||
38 | # set default status for new issues |
|
38 | # set default status for new issues | |
@@ -49,7 +49,7 class Issue < ActiveRecord::Base | |||||
49 | def before_create |
|
49 | def before_create | |
50 | build_history |
|
50 | build_history | |
51 | end |
|
51 | end | |
52 |
|
52 | |||
53 | def long_id |
|
53 | def long_id | |
54 | "%05d" % self.id |
|
54 | "%05d" % self.id | |
55 | end |
|
55 | end |
@@ -18,6 +18,7 | |||||
18 | class IssueHistory < ActiveRecord::Base |
|
18 | class IssueHistory < ActiveRecord::Base | |
19 | belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id' |
|
19 | belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id' | |
20 | belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' |
|
20 | belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' | |
|
21 | belongs_to :issue | |||
21 |
|
22 | |||
22 | validates_presence_of :status |
|
23 | validates_presence_of :status | |
23 | end |
|
24 | end |
@@ -21,9 +21,13 class IssueStatus < ActiveRecord::Base | |||||
21 |
|
21 | |||
22 | validates_presence_of :name |
|
22 | validates_presence_of :name | |
23 | validates_uniqueness_of :name |
|
23 | validates_uniqueness_of :name | |
24 | validates_length_of :html_color, :is=>6 |
|
24 | validates_length_of :html_color, :is => 6 | |
25 | validates_format_of :html_color, :with => /^[a-f0-9]*$/i |
|
25 | validates_format_of :html_color, :with => /^[a-f0-9]*$/i | |
26 |
|
26 | |||
|
27 | def before_save | |||
|
28 | IssueStatus.update_all "is_default=false" if self.is_default? | |||
|
29 | end | |||
|
30 | ||||
27 | # Returns the default status for new issues |
|
31 | # Returns the default status for new issues | |
28 | def self.default |
|
32 | def self.default | |
29 | find(:first, :conditions =>["is_default=?", true]) |
|
33 | find(:first, :conditions =>["is_default=?", true]) |
@@ -20,30 +20,38 class Mailer < ActionMailer::Base | |||||
20 | def issue_change_status(issue) |
|
20 | def issue_change_status(issue) | |
21 | # Sends to all project members |
|
21 | # Sends to all project members | |
22 | @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification } |
|
22 | @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification } | |
23 | @from = 'redmine@somenet.foo' |
|
23 | @from = $RDM_MAIL_FROM | |
24 | @subject = "Issue ##{issue.id} has been updated" |
|
24 | @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}" | |
25 | @body['issue'] = issue |
|
25 | @body['issue'] = issue | |
26 | end |
|
26 | end | |
27 |
|
27 | |||
28 | def issue_add(issue) |
|
28 | def issue_add(issue) | |
29 | # Sends to all project members |
|
29 | # Sends to all project members | |
30 | @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification } |
|
30 | @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification } | |
31 | @from = 'redmine@somenet.foo' |
|
31 | @from = $RDM_MAIL_FROM | |
32 | @subject = "Issue ##{issue.id} has been reported" |
|
32 | @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}" | |
33 | @body['issue'] = issue |
|
33 | @body['issue'] = issue | |
34 | end |
|
34 | end | |
35 |
|
35 | |||
|
36 | def issue_add_note(history) | |||
|
37 | # Sends to all project members | |||
|
38 | @recipients = history.issue.project.members.collect { |m| m.user.mail if m.user.mail_notification } | |||
|
39 | @from = $RDM_MAIL_FROM | |||
|
40 | @subject = "[#{history.issue.project.name} - #{history.issue.tracker.name} ##{history.issue.id}] #{history.issue.status.name} - #{history.issue.subject}" | |||
|
41 | @body['history'] = history | |||
|
42 | end | |||
|
43 | ||||
36 | def lost_password(token) |
|
44 | def lost_password(token) | |
37 | @recipients = token.user.mail |
|
45 | @recipients = token.user.mail | |
38 | @from = 'redmine@somenet.foo' |
|
46 | @from = $RDM_MAIL_FROM | |
39 |
@subject = |
|
47 | @subject = l(:mail_subject_lost_password) | |
40 | @body['token'] = token |
|
48 | @body['token'] = token | |
41 | end |
|
49 | end | |
42 |
|
50 | |||
43 | def register(token) |
|
51 | def register(token) | |
44 | @recipients = token.user.mail |
|
52 | @recipients = token.user.mail | |
45 | @from = 'redmine@somenet.foo' |
|
53 | @from = $RDM_MAIL_FROM | |
46 | @subject = "redMine account activation" |
|
54 | @subject = l(:mail_subject_register) | |
47 | @body['token'] = token |
|
55 | @body['token'] = token | |
48 | end |
|
56 | end | |
49 | end |
|
57 | end |
@@ -23,4 +23,32 | |||||
23 | </div> |
|
23 | </div> | |
24 | <%= f.hidden_field :lock_version %> |
|
24 | <%= f.hidden_field :lock_version %> | |
25 | <%= submit_tag l(:button_save) %> |
|
25 | <%= submit_tag l(:button_save) %> | |
26 | <% end %> No newline at end of file |
|
26 | <% end %> | |
|
27 | ||||
|
28 | <%= javascript_include_tag 'jstoolbar' %> | |||
|
29 | <script type="text/javascript"> | |||
|
30 | //<![CDATA[ | |||
|
31 | jsToolBar.prototype.base_url = 'http://callmepep.org'; | |||
|
32 | jsToolBar.prototype.legend_msg = 'You can use the following shortcuts to format your text.'; | |||
|
33 | jsToolBar.prototype.elements.strong.title = 'Strong emphasis'; | |||
|
34 | jsToolBar.prototype.elements.em.title = 'Emphasis'; | |||
|
35 | jsToolBar.prototype.elements.ins.title = 'Inserted'; | |||
|
36 | jsToolBar.prototype.elements.del.title = 'Deleted'; | |||
|
37 | jsToolBar.prototype.elements.quote.title = 'Inline quote'; | |||
|
38 | jsToolBar.prototype.elements.code.title = 'Code'; | |||
|
39 | jsToolBar.prototype.elements.br.title = 'Line break'; | |||
|
40 | jsToolBar.prototype.elements.ul.title = 'Unordered list'; | |||
|
41 | jsToolBar.prototype.elements.ol.title = 'Ordered list'; | |||
|
42 | jsToolBar.prototype.elements.link.title = 'Link'; | |||
|
43 | jsToolBar.prototype.elements.link.href_prompt = 'URL?'; | |||
|
44 | jsToolBar.prototype.elements.link.hreflang_prompt = 'Language?'; | |||
|
45 | ||||
|
46 | if (document.getElementById) { | |||
|
47 | if (document.getElementById('issue_description')) { | |||
|
48 | var commentTb = new jsToolBar(document.getElementById('issue_description')); | |||
|
49 | commentTb.draw(); | |||
|
50 | } | |||
|
51 | } | |||
|
52 | ||||
|
53 | //]]> | |||
|
54 | </script> No newline at end of file |
@@ -6,25 +6,42 | |||||
6 | </div> |
|
6 | </div> | |
7 |
|
7 | |||
8 | <div class="box"> |
|
8 | <div class="box"> | |
9 | <p> |
|
9 | <table width="100%"> | |
10 | <b><%=l(:field_status)%> :</b> <%= @issue.status.name %>     |
|
10 | <tr> | |
11 | <b><%=l(:field_priority)%> :</b> <%= @issue.priority.name %>     |
|
11 | <td width="15%"><b><%=l(:field_status)%> :</b></td><td width="35%"><%= @issue.status.name %></td> | |
12 | <b><%=l(:field_assigned_to)%> :</b> <%= @issue.assigned_to ? @issue.assigned_to.display_name : "-" %>     |
|
12 | <td width="15%"><b><%=l(:field_priority)%> :</b></td><td width="35%"><%= @issue.priority.name %></td> | |
13 | <b><%=l(:field_category)%> :</b> <%= @issue.category ? @issue.category.name : "-" %> |
|
13 | </tr> | |
14 | </p> |
|
14 | <tr> | |
15 | <div class="tabular"> |
|
15 | <td><b><%=l(:field_author)%> :</b></td><td><%= link_to_user @issue.author %></td> | |
16 | <p><label><%=l(:field_author)%> :</label> <%= link_to_user @issue.author %> </p> |
|
16 | <td><b><%=l(:field_category)%> :</b></td><td><%= @issue.category ? @issue.category.name : "-" %></td> | |
17 | <p><label><%=l(:field_created_on)%> :</label> <%= format_date(@issue.created_on) %> </p> |
|
17 | </tr> | |
18 | <p><label><%=l(:field_subject)%> :</label> <%= @issue.subject %> </p> |
|
18 | <tr> | |
19 | <%= simple_format ("<label>" + l(:field_description) + ": </label>" + auto_link(@issue.description)) %> |
|
19 | <td><b><%=l(:field_created_on)%> :</b></td><td><%= format_date(@issue.created_on) %></td> | |
20 | <p><label><%=l(:field_due_date)%> :</label> <%= format_date(@issue.due_date) %> </p> |
|
20 | <td><b><%=l(:field_assigned_to)%> :</b></td><td><%= @issue.assigned_to ? @issue.assigned_to.name : "-" %></td> | |
|
21 | </tr> | |||
|
22 | <tr> | |||
|
23 | <td><b><%=l(:field_updated_on)%> :</b></td><td><%= format_date(@issue.updated_on) %></td> | |||
|
24 | <td><b><%=l(:field_due_date)%> :</b></td><td><%= format_date(@issue.due_date) %></td> | |||
|
25 | </tr> | |||
|
26 | <tr> | |||
|
27 | <% n = 0 | |||
|
28 | for custom_value in @custom_values %> | |||
|
29 | <td><b><%= custom_value.custom_field.name %> :</b></td><td><%= show_value custom_value %></td> | |||
|
30 | <% n = n + 1 | |||
|
31 | if (n > 1) | |||
|
32 | n = 0 %> | |||
|
33 | </tr><tr> | |||
|
34 | <%end | |||
|
35 | end %> | |||
|
36 | </tr> | |||
|
37 | </table> | |||
|
38 | <hr /> | |||
|
39 | <br /> | |||
21 |
|
40 | |||
22 | <% for custom_value in @custom_values %> |
|
41 | <b><%=l(:field_description)%> :</b><br /><br /> | |
23 | <p><label><%= custom_value.custom_field.name %> :</label> <%= show_value custom_value %></p> |
|
42 | <%= textilize @issue.description %> | |
24 | <% end %> |
|
|||
25 | |
|
|||
26 | </div> |
|
|||
27 |
|
43 | |||
|
44 | <p> | |||
28 | <% if authorize_for('issues', 'edit') %> |
|
45 | <% if authorize_for('issues', 'edit') %> | |
29 | <%= start_form_tag ({:controller => 'issues', :action => 'edit', :id => @issue}, :method => "get" ) %> |
|
46 | <%= start_form_tag ({:controller => 'issues', :action => 'edit', :id => @issue}, :method => "get" ) %> | |
30 | <%= submit_tag l(:button_edit) %> |
|
47 | <%= submit_tag l(:button_edit) %> | |
@@ -57,6 +74,7 | |||||
57 | <%= end_form_tag %> |
|
74 | <%= end_form_tag %> | |
58 | |
|
75 | | |
59 | <% end %> |
|
76 | <% end %> | |
|
77 | </p> | |||
60 | </div> |
|
78 | </div> | |
61 |
|
79 | |||
62 | <% if authorize_for('issues', 'add_note') %> |
|
80 | <% if authorize_for('issues', 'add_note') %> |
@@ -14,6 +14,7 | |||||
14 | <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %> |
|
14 | <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %> | |
15 | <%= javascript_include_tag 'calendar/calendar-setup' %> |
|
15 | <%= javascript_include_tag 'calendar/calendar-setup' %> | |
16 | <%= stylesheet_link_tag 'calendar' %> |
|
16 | <%= stylesheet_link_tag 'calendar' %> | |
|
17 | <%= stylesheet_link_tag 'jstoolbar' %> | |||
17 | <script type='text/javascript'> |
|
18 | <script type='text/javascript'> | |
18 | var menu_contenu=' \ |
|
19 | var menu_contenu=' \ | |
19 | <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \ |
|
20 | <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \ | |
@@ -38,6 +39,7 var menu_contenu=' \ | |||||
38 | <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \ |
|
39 | <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \ | |
39 | <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \ |
|
40 | <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \ | |
40 | <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \ |
|
41 | <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \ | |
|
42 | <%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \ | |||
41 | <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \ |
|
43 | <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \ | |
42 | <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \ |
|
44 | <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \ | |
43 | <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \ |
|
45 | <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \ | |
@@ -101,6 +103,7 var menu_contenu=' \ | |||||
101 | <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li> |
|
103 | <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li> | |
102 | <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li> |
|
104 | <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li> | |
103 | <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li> |
|
105 | <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li> | |
|
106 | <li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li> | |||
104 | <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li> |
|
107 | <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li> | |
105 | <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li> |
|
108 | <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li> | |
106 | <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li> |
|
109 | <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li> |
@@ -1,15 +1,18 | |||||
1 | <h2><%=l(:label_change_log)%></h2> |
|
1 | <h2><%=l(:label_change_log)%></h2> | |
2 |
|
2 | |||
|
3 | <div> | |||
|
4 | ||||
|
5 | <div class="rightbox" style="width:140px;"> | |||
3 | <%= start_form_tag %> |
|
6 | <%= start_form_tag %> | |
|
7 | <strong><%=l(:label_tracker_plural)%></strong><br /> | |||
4 | <% @trackers.each do |tracker| %> |
|
8 | <% @trackers.each do |tracker| %> | |
5 | <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> |
|
9 | <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> | |
6 | <%= tracker.name %> |
|
10 | <%= tracker.name %><br /> | |
7 | <% end %> |
|
11 | <% end %> | |
8 |
|
|
12 | <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p> | |
9 |
<%= end_form_tag %> |
|
13 | <%= end_form_tag %> | |
10 | |
|
14 | </div> | |
11 |
|
15 | |||
12 | <div class="box"> |
|
|||
13 | <% ver_id = nil |
|
16 | <% ver_id = nil | |
14 | @fixed_issues.each do |issue| %> |
|
17 | @fixed_issues.each do |issue| %> | |
15 | <% unless ver_id == issue.fixed_version_id %> |
|
18 | <% unless ver_id == issue.fixed_version_id %> | |
@@ -21,5 +24,4 | |||||
21 | end %> |
|
24 | end %> | |
22 | <li><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %> [<%= issue.tracker.name %>]: <%= issue.subject %></li> |
|
25 | <li><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %> [<%= issue.tracker.name %>]: <%= issue.subject %></li> | |
23 | <% end %> |
|
26 | <% end %> | |
24 |
|
||||
25 | </div> No newline at end of file |
|
27 | </div> |
@@ -40,6 +40,9 | |||||
40 | # Default langage ('en', 'es', 'fr' are available) |
|
40 | # Default langage ('en', 'es', 'fr' are available) | |
41 | # $RDM_DEFAULT_LANG = 'en' |
|
41 | # $RDM_DEFAULT_LANG = 'en' | |
42 |
|
42 | |||
|
43 | # Email adress used to send mail notifications | |||
|
44 | # $RDM_MAIL_FROM = "redmine@somenet.foo" | |||
|
45 | ||||
43 | # Page title |
|
46 | # Page title | |
44 | # $RDM_HEADER_TITLE = "Title" |
|
47 | # $RDM_HEADER_TITLE = "Title" | |
45 |
|
48 |
@@ -95,6 +95,8 $RDM_STORAGE_PATH ||= "#{RAILS_ROOT}/files" | |||||
95 | $RDM_LOGIN_REQUIRED ||= false |
|
95 | $RDM_LOGIN_REQUIRED ||= false | |
96 | # default langage |
|
96 | # default langage | |
97 | $RDM_DEFAULT_LANG ||= 'en' |
|
97 | $RDM_DEFAULT_LANG ||= 'en' | |
|
98 | # email sender adress | |||
|
99 | $RDM_MAIL_FROM ||= "redmine@somenet.foo" | |||
98 |
|
100 | |||
99 | # page title |
|
101 | # page title | |
100 | $RDM_HEADER_TITLE ||= "redMine" |
|
102 | $RDM_HEADER_TITLE ||= "redMine" |
@@ -1,6 +1,6 | |||||
1 | class IssueMove < ActiveRecord::Migration |
|
1 | class IssueMove < ActiveRecord::Migration | |
2 | def self.up |
|
2 | def self.up | |
3 |
Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => |
|
3 | Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => 0, :mail_enabled => 0 | |
4 | end |
|
4 | end | |
5 |
|
5 | |||
6 | def self.down |
|
6 | def self.down |
@@ -62,6 +62,9 notice_successful_connection: Erfolgreicher Anschluß. | |||||
62 | notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden. |
|
62 | notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden. | |
63 | notice_locking_conflict: Data have been updated by another user. |
|
63 | notice_locking_conflict: Data have been updated by another user. | |
64 |
|
64 | |||
|
65 | #mail_subject_lost_password: Your redMine password | |||
|
66 | #mail_subject_register: redMine account activation | |||
|
67 | ||||
65 | gui_validation_error: 1 Störung |
|
68 | gui_validation_error: 1 Störung | |
66 | gui_validation_error_plural: %d Störungen |
|
69 | gui_validation_error_plural: %d Störungen | |
67 |
|
70 |
@@ -62,6 +62,9 notice_successful_connection: Successful connection. | |||||
62 | notice_file_not_found: Requested file doesn't exist or has been deleted. |
|
62 | notice_file_not_found: Requested file doesn't exist or has been deleted. | |
63 | notice_locking_conflict: Data have been updated by another user. |
|
63 | notice_locking_conflict: Data have been updated by another user. | |
64 |
|
64 | |||
|
65 | mail_subject_lost_password: Your redMine password | |||
|
66 | mail_subject_register: redMine account activation | |||
|
67 | ||||
65 | gui_validation_error: 1 error |
|
68 | gui_validation_error: 1 error | |
66 | gui_validation_error_plural: %d errors |
|
69 | gui_validation_error_plural: %d errors | |
67 |
|
70 |
@@ -62,6 +62,9 notice_successful_connection: Successful connection. | |||||
62 | notice_file_not_found: Requested file doesn't exist or has been deleted. |
|
62 | notice_file_not_found: Requested file doesn't exist or has been deleted. | |
63 | notice_locking_conflict: Data have been updated by another user. |
|
63 | notice_locking_conflict: Data have been updated by another user. | |
64 |
|
64 | |||
|
65 | #mail_subject_lost_password: Your redMine password | |||
|
66 | #mail_subject_register: redMine account activation | |||
|
67 | ||||
65 | gui_validation_error: 1 error |
|
68 | gui_validation_error: 1 error | |
66 | gui_validation_error_plural: %d errores |
|
69 | gui_validation_error_plural: %d errores | |
67 |
|
70 |
@@ -62,6 +62,9 notice_successful_connection: Connection réussie. | |||||
62 | notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé. |
|
62 | notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé. | |
63 | notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible. |
|
63 | notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible. | |
64 |
|
64 | |||
|
65 | mail_subject_lost_password: Votre mot de passe redMine | |||
|
66 | mail_subject_register: Activation de votre compte redMine | |||
|
67 | ||||
65 | gui_validation_error: 1 erreur |
|
68 | gui_validation_error: 1 erreur | |
66 | gui_validation_error_plural: %d erreurs |
|
69 | gui_validation_error_plural: %d erreurs | |
67 |
|
70 |
@@ -370,6 +370,15 color:#505050; | |||||
370 | line-height:1.5em; |
|
370 | line-height:1.5em; | |
371 | } |
|
371 | } | |
372 |
|
372 | |||
|
373 | .rightbox{ | |||
|
374 | background: #fafbfc; | |||
|
375 | border: 1px solid #c0c0c0; | |||
|
376 | float: right; | |||
|
377 | padding: 8px; | |||
|
378 | position: relative; | |||
|
379 | margin: 0 5px 5px; | |||
|
380 | } | |||
|
381 | ||||
373 | .topright{ |
|
382 | .topright{ | |
374 | position: absolute; |
|
383 | position: absolute; | |
375 | right: 25px; |
|
384 | right: 25px; |
General Comments 0
You need to be logged in to leave comments.
Login now