Merge remote branch 'edavis/master' into master-journalized

Conflicts:
	app/controllers/application_controller.rb
	app/controllers/wiki_controller.rb
	app/helpers/issues_helper.rb
	app/models/time_entry.rb
	app/models/wiki_content.rb
	app/views/wiki/edit.rhtml
	config/locales/ja.yml
	test/functional/wiki_controller_test.rb
This commit is contained in:
Tim Felgentreff 2010-10-26 18:28:39 +02:00
commit 19c7dc0094
90 changed files with 548 additions and 282 deletions

View File

@ -154,7 +154,15 @@ class ApplicationController < ActionController::Base
# Authorize the user for the requested action # Authorize the user for the requested action
def authorize(ctrl = params[:controller], action = params[:action], global = false) def authorize(ctrl = params[:controller], action = params[:action], global = false)
allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global)
allowed ? true : deny_access if allowed
true
else
if @project && @project.archived?
render_403 :message => :notice_not_authorized_archived_project
else
deny_access
end
end
end end
# Authorize the user for the requested action outside a project # Authorize the user for the requested action outside a project
@ -265,39 +273,33 @@ class ApplicationController < ActionController::Base
redirect_to default redirect_to default
end end
def render_403 def render_403(options={})
@project = nil @project = nil
respond_to do |format| render_error({:message => :notice_not_authorized, :status => 403}.merge(options))
format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
format.atom { head 403 }
format.xml { head 403 }
format.js { head 403 }
format.json { head 403 }
end
return false return false
end end
def render_404 def render_404(options={})
respond_to do |format| render_error({:message => :notice_file_not_found, :status => 404}.merge(options))
format.html { render :template => "common/404", :layout => use_layout, :status => 404 }
format.atom { head 404 }
format.xml { head 404 }
format.js { head 404 }
format.json { head 404 }
end
return false return false
end end
def render_error(msg) # Renders an error response
def render_error(arg)
arg = {:message => arg} unless arg.is_a?(Hash)
@message = arg[:message]
@message = l(@message) if @message.is_a?(Symbol)
@status = arg[:status] || 500
respond_to do |format| respond_to do |format|
format.html { format.html {
flash.now[:error] = msg render :template => 'common/error', :layout => use_layout, :status => @status
render :text => '', :layout => use_layout, :status => 500
} }
format.atom { head 500 } format.atom { head @status }
format.xml { head 500 } format.xml { head @status }
format.js { head 500 } format.js { head @status }
format.json { head 500 } format.json { head @status }
end end
end end

View File

@ -18,6 +18,7 @@ class IssueMovesController < ApplicationController
@issues.each do |issue| @issues.each do |issue|
issue.reload issue.reload
issue.init_journal(User.current) issue.init_journal(User.current)
issue.current_journal.notes = @notes if @notes.present?
call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy }) call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)}) if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)})
moved_issues << r moved_issues << r
@ -50,11 +51,13 @@ class IssueMovesController < ApplicationController
@target_project ||= @project @target_project ||= @project
@trackers = @target_project.trackers @trackers = @target_project.trackers
@available_statuses = Workflow.available_statuses(@project) @available_statuses = Workflow.available_statuses(@project)
@notes = params[:notes]
@notes ||= ''
end end
def extract_changed_attributes_for_move(params) def extract_changed_attributes_for_move(params)
changed_attributes = {} changed_attributes = {}
[:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute| [:assigned_to_id, :status_id, :start_date, :due_date, :priority_id].each do |valid_attribute|
unless params[valid_attribute].blank? unless params[valid_attribute].blank?
changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute]) changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
end end

View File

@ -17,19 +17,38 @@
require 'diff' require 'diff'
# The WikiController follows the Rails REST controller pattern but with
# a few differences
#
# * index - shows a list of WikiPages grouped by page or date
# * new - not used
# * create - not used
# * show - will also show the form for creating a new wiki page
# * edit - used to edit an existing or new page
# * update - used to save a wiki page update to the database, including new pages
# * destroy - normal
#
# Other member and collection methods are also used
#
# TODO: still being worked on
class WikiController < ApplicationController class WikiController < ApplicationController
default_search_scope :wiki_pages default_search_scope :wiki_pages
before_filter :find_wiki, :authorize before_filter :find_wiki, :authorize
before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
verify :method => :post, :only => [:destroy, :protect], :redirect_to => { :action => :index } verify :method => :post, :only => [:protect], :redirect_to => { :action => :show }
helper :attachments helper :attachments
include AttachmentsHelper include AttachmentsHelper
helper :watchers helper :watchers
# display a page (in editing mode if it doesn't exist) # List of pages, sorted alphabetically and by parent (hierarchy)
def index def index
load_pages_grouped_by_date_without_content
end
# display a page (in editing mode if it doesn't exist)
def show
page_title = params[:page] page_title = params[:page]
@page = @wiki.find_or_new_page(page_title) @page = @wiki.find_or_new_page(page_title)
if @page.new_record? if @page.new_record?
@ -95,6 +114,50 @@ class WikiController < ApplicationController
redirect_to :action => 'index', :project_id => @project, :page => @page.title redirect_to :action => 'index', :project_id => @project, :page => @page.title
end end
end end
@content.attributes = params[:content]
@content.author = User.current
# if page is new @page.save will also save content, but not if page isn't a new record
if (@page.new_record? ? @page.save : @content.save)
attachments = Attachment.attach_files(@page, params[:attachments])
render_attachment_warning_if_needed(@page)
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
redirect_to :action => 'show', :project_id => @project, :page => @page.title
end
rescue ActiveRecord::StaleObjectError
# Optimistic locking exception
flash[:error] = l(:notice_locking_conflict)
end
verify :method => :post, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
# Creates a new page or updates an existing one
def update
@page = @wiki.find_or_new_page(params[:page])
return render_403 unless editable?
@page.content = WikiContent.new(:page => @page) if @page.new_record?
@content = @page.content_for_version(params[:version])
@content.text = initial_page_content(@page) if @content.text.blank?
# don't keep previous comment
@content.comments = nil
if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text]
attachments = Attachment.attach_files(@page, params[:attachments])
render_attachment_warning_if_needed(@page)
# don't save if text wasn't changed
redirect_to :action => 'show', :project_id => @project, :page => @page.title
return
end
@content.attributes = params[:content]
@content.author = User.current
# if page is new @page.save will also save content, but not if page isn't a new record
if (@page.new_record? ? @page.save : @content.save)
attachments = Attachment.attach_files(@page, params[:attachments])
render_attachment_warning_if_needed(@page)
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
redirect_to :action => 'show', :project_id => @project, :page => @page.title
end
rescue ActiveRecord::StaleObjectError rescue ActiveRecord::StaleObjectError
# Optimistic locking exception # Optimistic locking exception
flash[:error] = l(:notice_locking_conflict) flash[:error] = l(:notice_locking_conflict)
@ -108,13 +171,13 @@ class WikiController < ApplicationController
@original_title = @page.pretty_title @original_title = @page.pretty_title
if request.post? && @page.update_attributes(params[:wiki_page]) if request.post? && @page.update_attributes(params[:wiki_page])
flash[:notice] = l(:notice_successful_update) flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'index', :project_id => @project, :page => @page.title redirect_to :action => 'show', :project_id => @project, :page => @page.title
end end
end end
def protect def protect
@page.update_attribute :protected, params[:protected] @page.update_attribute :protected, params[:protected]
redirect_to :action => 'index', :project_id => @project, :page => @page.title redirect_to :action => 'show', :project_id => @project, :page => @page.title
end end
# show page history # show page history
@ -141,6 +204,7 @@ class WikiController < ApplicationController
render_404 unless @annotate render_404 unless @annotate
end end
verify :method => :delete, :only => [:destroy], :redirect_to => { :action => :show }
# Removes a wiki page and its history # Removes a wiki page and its history
# Children can be either set as root pages, removed or reassigned to another parent page # Children can be either set as root pages, removed or reassigned to another parent page
def destroy def destroy
@ -167,7 +231,7 @@ class WikiController < ApplicationController
end end
end end
@page.destroy @page.destroy
redirect_to :action => 'page_index', :project_id => @project redirect_to :action => 'index', :project_id => @project
end end
# Export wiki to a single html file # Export wiki to a single html file
@ -177,14 +241,10 @@ class WikiController < ApplicationController
export = render_to_string :action => 'export_multiple', :layout => false export = render_to_string :action => 'export_multiple', :layout => false
send_data(export, :type => 'text/html', :filename => "wiki.html") send_data(export, :type => 'text/html', :filename => "wiki.html")
else else
redirect_to :action => 'index', :project_id => @project, :page => nil redirect_to :action => 'show', :project_id => @project, :page => nil
end end
end end
def page_index
load_pages_grouped_by_date_without_content
end
def date_index def date_index
load_pages_grouped_by_date_without_content load_pages_grouped_by_date_without_content
end end
@ -205,7 +265,7 @@ class WikiController < ApplicationController
return render_403 unless editable? return render_403 unless editable?
attachments = Attachment.attach_files(@page, params[:attachments]) attachments = Attachment.attach_files(@page, params[:attachments])
render_attachment_warning_if_needed(@page) render_attachment_warning_if_needed(@page)
redirect_to :action => 'index', :page => @page.title redirect_to :action => 'show', :page => @page.title
end end
private private

View File

@ -108,11 +108,6 @@ module ApplicationHelper
link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
end end
def link_to_project(project, options={})
options[:class] ||= 'project'
link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => options[:class])
end
# Generates a link to a project if active # Generates a link to a project if active
# Examples: # Examples:
# #
@ -199,7 +194,7 @@ module ApplicationHelper
content << "<ul class=\"pages-hierarchy\">\n" content << "<ul class=\"pages-hierarchy\">\n"
pages[node].each do |page| pages[node].each do |page|
content << "<li>" content << "<li>"
content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'index', :project_id => page.project, :page => page.title}, content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :page => page.title},
:title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil)) :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id] content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id]
content << "</li>\n" content << "</li>\n"
@ -260,15 +255,10 @@ module ApplicationHelper
end end
# Yields the given block for each project with its level in the tree # Yields the given block for each project with its level in the tree
#
# Wrapper for Project#project_tree
def project_tree(projects, &block) def project_tree(projects, &block)
ancestors = [] Project.project_tree(projects, &block)
projects.sort_by(&:lft).each do |project|
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
end
yield project, ancestors.size
ancestors << project
end
end end
def project_nested_ul(projects, &block) def project_nested_ul(projects, &block)
@ -568,7 +558,7 @@ module ApplicationHelper
when :local; "#{title}.html" when :local; "#{title}.html"
when :anchor; "##{title}" # used for single-file wiki export when :anchor; "##{title}" # used for single-file wiki export
else else
url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :project_id => link_project, :page => Wiki.titleize(page), :anchor => anchor) url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :page => Wiki.titleize(page), :anchor => anchor)
end end
link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new'))) link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
else else

View File

@ -16,6 +16,31 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module GanttHelper module GanttHelper
def gantt_zoom_link(gantt, in_or_out)
case in_or_out
when :in
if gantt.zoom < 4
link_to_remote(l(:text_zoom_in),
{:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
{:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))),
:class => 'icon icon-zoom-in'})
else
content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in')
end
when :out
if gantt.zoom > 1
link_to_remote(l(:text_zoom_out),
{:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
{:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))),
:class => 'icon icon-zoom-out'})
else
content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out')
end
end
end
def number_of_issues_on_versions(gantt) def number_of_issues_on_versions(gantt)
versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact

View File

@ -170,34 +170,4 @@ module IssuesHelper
end end
export export
end end
def show_detail(journal, detail, html = true)
journal.render_detail(detail, html)
end
def gantt_zoom_link(gantt, in_or_out)
img_attributes = {:style => 'height:1.4em; width:1.4em; margin-left: 3px;'} # em for accessibility
case in_or_out
when :in
if gantt.zoom < 4
link_to_remote(l(:text_zoom_in) + image_tag('zoom_in.png', img_attributes.merge(:alt => l(:text_zoom_in))),
{:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'},
{:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1)))})
else
l(:text_zoom_in) +
image_tag('zoom_in_g.png', img_attributes.merge(:alt => l(:text_zoom_in)))
end
when :out
if gantt.zoom > 1
link_to_remote(l(:text_zoom_out) + image_tag('zoom_out.png', img_attributes.merge(:alt => l(:text_zoom_out))),
{:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'},
{:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1)))})
else
l(:text_zoom_out) +
image_tag('zoom_out_g.png', img_attributes.merge(:alt => l(:text_zoom_out)))
end
end
end
end end

View File

@ -220,6 +220,10 @@ class Project < ActiveRecord::Base
self.status == STATUS_ACTIVE self.status == STATUS_ACTIVE
end end
def archived?
self.status == STATUS_ARCHIVED
end
# Archives the project and its descendants # Archives the project and its descendants
def archive def archive
# Check that there is no issue of a non descendant project that is assigned # Check that there is no issue of a non descendant project that is assigned
@ -566,6 +570,18 @@ class Project < ActiveRecord::Base
end end
end end
# Yields the given block for each project with its level in the tree
def self.project_tree(projects, &block)
ancestors = []
projects.sort_by(&:lft).each do |project|
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
end
yield project, ancestors.size
ancestors << project
end
end
private private
# Destroys children before destroying self # Destroys children before destroying self

View File

@ -27,7 +27,7 @@ class TimeEntry < ActiveRecord::Base
acts_as_customizable acts_as_customizable
acts_as_journalized :event_title => Proc.new {|o| "#{l_hours(o.hours)} (#{(o.issue || o.project).event_title})"}, acts_as_journalized :event_title => Proc.new {|o| "#{l_hours(o.hours)} (#{(o.issue || o.project).event_title})"},
:event_url => Proc.new {|o| {:controller => 'timelog', :action => 'details', :project_id => o.project, :issue_id => o.issue}}, :event_url => Proc.new {|o| {:controller => 'timelog', :action => 'index', :project_id => o.project, :issue_id => o.issue}},
:event_author => :user, :event_author => :user,
:event_description => :comments :event_description => :comments

View File

@ -28,7 +28,7 @@ class WikiPage < ActiveRecord::Base
acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"}, acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"},
:description => :text, :description => :text,
:datetime => :created_on, :datetime => :created_on,
:url => Proc.new {|o| {:controller => 'wiki', :id => o.wiki.project, :page => o.title}} :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :page => o.title}}
acts_as_searchable :columns => ['title', 'text'], acts_as_searchable :columns => ['title', 'text'],
:include => [{:wiki => :project}, :content], :include => [{:wiki => :project}, :content],

View File

@ -19,7 +19,6 @@
<table class="list"> <table class="list">
<thead><tr> <thead><tr>
<th><%=l(:label_project)%></th> <th><%=l(:label_project)%></th>
<th><%=l(:field_description)%></th>
<th><%=l(:field_is_public)%></th> <th><%=l(:field_is_public)%></th>
<th><%=l(:field_created_on)%></th> <th><%=l(:field_created_on)%></th>
<th></th> <th></th>
@ -27,8 +26,7 @@
<tbody> <tbody>
<% project_tree(@projects) do |project, level| %> <% project_tree(@projects) do |project, level| %>
<tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>"> <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
<td class="name"><%= link_to_project(project, :action => 'settings') %></td> <td class="name"><span><%= link_to_project(project, {:action => 'settings'}, :title => project.short_description) %></span></td>
<td><%= textilizable project.short_description, :project => project %></td>
<td align="center"><%= checked_image project.is_public? %></td> <td align="center"><%= checked_image project.is_public? %></td>
<td align="center"><%= format_date(project.created_on) %></td> <td align="center"><%= format_date(project.created_on) %></td>
<td class="buttons"> <td class="buttons">

View File

@ -1,6 +0,0 @@
<h2>403</h2>
<p><%= l(:notice_not_authorized) %></p>
<p><a href="javascript:history.back()">Back</a></p>
<% html_title '403' %>

View File

@ -1,6 +0,0 @@
<h2>404</h2>
<p><%= l(:notice_file_not_found) %></p>
<p><a href="javascript:history.back()">Back</a></p>
<% html_title '404' %>

View File

@ -0,0 +1,6 @@
<h2><%=h @status %></h2>
<p id="errorExplanation"><%=h @message %></p>
<p><a href="javascript:history.back()">Back</a></p>
<% html_title @status %>

View File

@ -1,5 +1,5 @@
<div class="contextual"> <div class="contextual">
<%= link_to_if_authorized l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add' %> <%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %>
</div> </div>
<h2><%=l(:label_attachment_plural)%></h2> <h2><%=l(:label_attachment_plural)%></h2>

View File

@ -10,7 +10,7 @@
</div> </div>
</fieldset> </fieldset>
<p style="float:right;"> <p class="contextual">
<%= gantt_zoom_link(@gantt, :in) %> <%= gantt_zoom_link(@gantt, :in) %>
<%= gantt_zoom_link(@gantt, :out) %> <%= gantt_zoom_link(@gantt, :out) %>
</p> </p>

View File

@ -33,6 +33,11 @@
<%= select_tag('status_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@available_statuses, :id, :name)) %> <%= select_tag('status_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@available_statuses, :id, :name)) %>
</p> </p>
<p>
<label><%= l(:field_priority) %></label>
<%= select_tag('priority_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(IssuePriority.all, :id, :name)) %>
</p>
<p> <p>
<label><%= l(:field_start_date) %></label> <label><%= l(:field_start_date) %></label>
<%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %> <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %>
@ -43,6 +48,11 @@
<%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %> <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %>
</p> </p>
<fieldset><legend><%= l(:field_notes) %></legend>
<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %>
<%= wikitoolbar_for 'notes' %>
</fieldset>
<%= call_hook(:view_issues_move_bottom, :issues => @issues, :target_project => @target_project, :copy => !!@copy) %> <%= call_hook(:view_issues_move_bottom, :issues => @issues, :target_project => @target_project, :copy => !!@copy) %>
</div> </div>

View File

@ -26,11 +26,11 @@
</div> </div>
<% if @issue.new_record? %> <% if @issue.new_record? %>
<p><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p> <p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p>
<% end %> <% end %>
<% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%> <% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%>
<p><label><%= l(:label_issue_watchers) %></label> <p id="watchers_form"><label><%= l(:label_issue_watchers) %></label>
<% @issue.project.users.sort.each do |user| -%> <% @issue.project.users.sort.each do |user| -%>
<label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watched_by?(user) %> <%=h user %></label> <label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watched_by?(user) %> <%=h user %></label>
<% end -%> <% end -%>

View File

@ -1,8 +1,8 @@
<div class="contextual"> <div class="contextual">
<%= link_to_if_authorized(l(:label_news_new), <%= link_to(l(:label_news_new),
new_project_news_path(@project), new_project_news_path(@project),
:class => 'icon icon-add', :class => 'icon icon-add',
:onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %> :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %>
</div> </div>
<div id="add-news" style="display:none;"> <div id="add-news" style="display:none;">

View File

@ -4,6 +4,6 @@
<h3><%= l(:label_wiki) %></h3> <h3><%= l(:label_wiki) %></h3>
<%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br /> <%= link_to l(:field_start_page), {:action => 'show', :page => nil} %><br />
<%= link_to l(:label_index_by_title), {:action => 'page_index'} %><br /> <%= link_to l(:label_index_by_title), {:action => 'index'} %><br />
<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br /> <%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />

View File

@ -6,7 +6,7 @@
<h2><%= @page.pretty_title %></h2> <h2><%= @page.pretty_title %></h2>
<p> <p>
<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'index', :page => @page.title, :version => @annotate.content.version %> <%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :page => @page.title, :version => @annotate.content.version %>
<em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em> <em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em>
</p> </p>
@ -18,7 +18,7 @@
<% @annotate.lines.each do |line| -%> <% @annotate.lines.each do |line| -%>
<tr class="bloc-<%= colors[line[0]] %>"> <tr class="bloc-<%= colors[line[0]] %>">
<th class="line-num"><%= line_num %></th> <th class="line-num"><%= line_num %></th>
<td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :project_id => @project, :page => @page.title, :version => line[0] %></td> <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'show', :project_id => @project, :page => @page.title, :version => line[0] %></td>
<td class="author"><%= h(line[1]) %></td> <td class="author"><%= h(line[1]) %></td>
<td class="line-code"><pre><%=h line[2] %></pre></td> <td class="line-code"><pre><%=h line[2] %></pre></td>
</tr> </tr>

View File

@ -12,7 +12,7 @@
<h3><%= format_date(date) %></h3> <h3><%= format_date(date) %></h3>
<ul> <ul>
<% @pages_by_date[date].each do |page| %> <% @pages_by_date[date].each do |page| %>
<li><%= link_to page.pretty_title, :action => 'index', :page => page.title %></li> <li><%= link_to page.pretty_title, :action => 'show', :page => page.title %></li>
<% end %> <% end %>
</ul> </ul>
<% end %> <% end %>
@ -23,11 +23,11 @@
<% unless @pages.empty? %> <% unless @pages.empty? %>
<% other_formats_links do |f| %> <% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
<% end %> <% end %>
<% end %> <% end %>
<% content_for :header_tags do %> <% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> <%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
<% end %> <% end %>

View File

@ -1,6 +1,6 @@
<h2><%=h @page.pretty_title %></h2> <h2><%=h @page.pretty_title %></h2>
<% form_tag({}) do %> <% form_tag({}, :method => :delete) do %>
<div class="box"> <div class="box">
<p><strong><%= l(:text_wiki_page_destroy_question, :descendants => @descendants_count) %></strong></p> <p><strong><%= l(:text_wiki_page_destroy_question, :descendants => @descendants_count) %></strong></p>
<p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_wiki_page_nullify_children) %></label><br /> <p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_wiki_page_nullify_children) %></label><br />
@ -15,5 +15,5 @@
</div> </div>
<%= submit_tag l(:button_apply) %> <%= submit_tag l(:button_apply) %>
<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'index', :project_id => @project, :page => @page.title %> <%= link_to l(:button_cancel), :controller => 'wiki', :action => 'show', :project_id => @project, :page => @page.title %>
<% end %> <% end %>

View File

@ -5,10 +5,10 @@
<h2><%= @page.pretty_title %></h2> <h2><%= @page.pretty_title %></h2>
<p> <p>
<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'index', :page => @page.title, :version => @diff.content_from.version %> <%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :page => @page.title, :version => @diff.content_from.version %>
<em>(<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>)</em> <em>(<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>)</em>
&#8594; &#8594;
<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'index', :page => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> <%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :page => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %>
<em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em> <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
</p> </p>

View File

@ -1,7 +1,7 @@
<h2><%=h @page.pretty_title %></h2> <h2><%=h @page.pretty_title %></h2>
<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %> <% form_for :content, @content, :url => {:action => 'update', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %>
<%= f.hidden_field :lock_version %> <%= f.hidden_field :version %>
<%= error_messages_for 'content' %> <%= error_messages_for 'content' %>
<p><%= f.text_area :text, :cols => 100, :rows => 25, :class => 'wiki-edit', :accesskey => accesskey(:edit) %></p> <p><%= f.text_area :text, :cols => 100, :rows => 25, :class => 'wiki-edit', :accesskey => accesskey(:edit) %></p>

View File

@ -19,7 +19,7 @@
<% line_num = 1 %> <% line_num = 1 %>
<% @versions.each do |ver| %> <% @versions.each do |ver| %>
<tr class="<%= cycle("odd", "even") %>"> <tr class="<%= cycle("odd", "even") %>">
<td class="id"><%= link_to ver.version, :action => 'index', :page => @page.title, :version => ver.version %></td> <td class="id"><%= link_to ver.version, :action => 'show', :page => @page.title, :version => ver.version %></td>
<td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td> <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td>
<td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td> <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
<td align="center"><%= format_time(ver.created_at) %></td> <td align="center"><%= format_time(ver.created_at) %></td>

View File

@ -16,11 +16,11 @@
<% unless @pages.empty? %> <% unless @pages.empty? %>
<% other_formats_links do |f| %> <% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
<%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
<% end %> <% end %>
<% end %> <% end %>
<% content_for :header_tags do %> <% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> <%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
<% end %> <% end %>

View File

@ -5,7 +5,7 @@
<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> <%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> <%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %> <%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> <%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> <%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
<% end %> <% end %>
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> <%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
@ -15,11 +15,11 @@
<% if @content.version != @page.content.version %> <% if @content.version != @page.content.version %>
<p> <p>
<%= link_to(('&#171; ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %> <%= link_to(('&#171; ' + l(:label_previous)), :action => 'show', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
<%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %> <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %>
<%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> - <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> -
<%= link_to((l(:label_next) + ' &#187;'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %> <%= link_to((l(:label_next) + ' &#187;'), :action => 'show', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
<%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %> <%= link_to(l(:label_current_version), :action => 'show', :page => @page.title) %>
<br /> <br />
<em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br /> <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br />
<%=h @content.comments %> <%=h @content.comments %>
@ -35,7 +35,7 @@
<div id="wiki_add_attachment"> <div id="wiki_add_attachment">
<p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;", <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;",
:id => 'attach_files_link' %></p> :id => 'attach_files_link' %></p>
<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> <% form_tag({ :controller => 'wiki', :action => 'add_attachment', :project_id => @project, :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
<div class="box"> <div class="box">
<p><%= render :partial => 'attachments/form' %></p> <p><%= render :partial => 'attachments/form' %></p>
</div> </div>

View File

@ -906,8 +906,6 @@ bg:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -915,3 +913,7 @@ bg:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -926,8 +926,6 @@ bs:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -935,3 +933,7 @@ bs:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -915,8 +915,6 @@ ca:
enumeration_activities: Activitats (seguidor de temps) enumeration_activities: Activitats (seguidor de temps)
enumeration_system_activity: Activitat del sistema enumeration_system_activity: Activitat del sistema
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -924,3 +922,7 @@ ca:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -912,8 +912,6 @@ cs:
field_time_entries: Zaznamenaný čas field_time_entries: Zaznamenaný čas
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Kalendář project_module_calendar: Kalendář
field_member_of_group: Člen skupiny
field_assigned_to_role: Člen role
button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: {{page_title}}" button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: {{page_title}}"
text_are_you_sure_with_children: Smazat úkol včetně všech podúkolů? text_are_you_sure_with_children: Smazat úkol včetně všech podúkolů?
field_text: Textové pole field_text: Textové pole
@ -921,3 +919,7 @@ cs:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -928,8 +928,6 @@ da:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -937,3 +935,7 @@ da:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -931,11 +931,13 @@ de:
enumeration_activities: Aktivitäten (Zeiterfassung) enumeration_activities: Aktivitäten (Zeiterfassung)
enumeration_system_activity: System-Aktivität enumeration_system_activity: System-Aktivität
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
label_user_mail_option_only_owner: Only for things I am the owner of label_user_mail_option_only_owner: Only for things I am the owner of
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -912,8 +912,6 @@ el:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -921,3 +919,7 @@ el:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -926,3 +926,4 @@ en-GB:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -150,6 +150,7 @@ en:
notice_file_not_found: The page you were trying to access doesn't exist or has been removed. notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
notice_locking_conflict: Data has been updated by another user. notice_locking_conflict: Data has been updated by another user.
notice_not_authorized: You are not authorized to access this page. notice_not_authorized: You are not authorized to access this page.
notice_not_authorized_archived_project: The project you're trying to access has been archived.
notice_email_sent: "An email was sent to {{value}}" notice_email_sent: "An email was sent to {{value}}"
notice_email_error: "An error occurred while sending mail ({{value}})" notice_email_error: "An error occurred while sending mail ({{value}})"
notice_feeds_access_key_reseted: Your RSS access key was reset. notice_feeds_access_key_reseted: Your RSS access key was reset.
@ -293,8 +294,8 @@ en:
field_group_by: Group results by field_group_by: Group results by
field_sharing: Sharing field_sharing: Sharing
field_parent_issue: Parent task field_parent_issue: Parent task
field_member_of_group: Member of Group field_member_of_group: "Assignee's group"
field_assigned_to_role: Member of Role field_assigned_to_role: "Assignee's role"
field_text: Text field field_text: Text field
setting_app_title: Application title setting_app_title: Application title

View File

@ -952,8 +952,6 @@ es:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -961,3 +959,7 @@ es:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -916,8 +916,6 @@ eu:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -925,3 +923,7 @@ eu:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -937,8 +937,6 @@ fi:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -946,3 +944,7 @@ fi:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -169,6 +169,7 @@ fr:
notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée." notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible. notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page." notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé.
notice_email_sent: "Un email a été envoyé à {{value}}" notice_email_sent: "Un email a été envoyé à {{value}}"
notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})" notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})"
notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée." notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée."
@ -929,13 +930,14 @@ fr:
label_overall_spent_time: Temps passé global label_overall_spent_time: Temps passé global
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendrier
field_member_of_group: Member of Group button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}"
field_assigned_to_role: Member of Role text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ?
button_edit_associated_wikipage: "Modifier la page de Wiki associée: {{page_title}}" field_text: Champ texte
text_are_you_sure_with_children: Delete issue and all child issues? label_user_mail_option_only_owner: Seulement pour ce que j'ai créé
field_text: Text field setting_default_notification_option: Option de notification par défaut
label_user_mail_option_only_owner: Only for things I am the owner of label_user_mail_option_only_my_events: Seulement pour ce que je surveille
setting_default_notification_option: Default notification option label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_none: Aucune notification
label_user_mail_option_only_assigned: Only for things I am assigned to field_member_of_group: Groupe de l'assigné
field_assigned_to_role: Rôle de l'assigné

View File

@ -928,8 +928,6 @@ gl:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -937,3 +935,7 @@ gl:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -297,8 +297,6 @@ he:
field_group_by: קבץ את התוצאות לפי field_group_by: קבץ את התוצאות לפי
field_sharing: שיתוף field_sharing: שיתוף
field_parent_issue: משימת אב field_parent_issue: משימת אב
field_member_of_group: חבר בקבוצה
field_assigned_to_role: בעל תפקיד
field_text: שדה טקסט field_text: שדה טקסט
setting_app_title: כותרת ישום setting_app_title: כותרת ישום
@ -926,3 +924,7 @@ he:
enumeration_doc_categories: קטגוריות מסמכים enumeration_doc_categories: קטגוריות מסמכים
enumeration_activities: פעילויות (מעקב אחר זמנים) enumeration_activities: פעילויות (מעקב אחר זמנים)
enumeration_system_activity: פעילות מערכת enumeration_system_activity: פעילות מערכת
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -919,8 +919,6 @@ hr:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -928,3 +926,7 @@ hr:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -935,8 +935,6 @@
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -944,3 +942,7 @@
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -920,8 +920,6 @@ id:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -929,3 +927,7 @@ id:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -916,8 +916,6 @@ it:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -925,3 +923,7 @@ it:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -319,8 +319,6 @@ ja:
field_group_by: グループ条件 field_group_by: グループ条件
field_sharing: 共有 field_sharing: 共有
field_parent_issue: 親チケット field_parent_issue: 親チケット
field_member_of_group: 担当者のグループ
field_assigned_to_role: 担当者のロール
field_text: テキスト field_text: テキスト
setting_app_title: アプリケーションのタイトル setting_app_title: アプリケーションのタイトル
@ -946,4 +944,7 @@ ja:
enumeration_doc_categories: 文書カテゴリ enumeration_doc_categories: 文書カテゴリ
enumeration_activities: 作業分類 (時間トラッキング) enumeration_activities: 作業分類 (時間トラッキング)
enumeration_system_activity: システム作業分類 enumeration_system_activity: システム作業分類
field_time_entries: Log time label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -968,8 +968,6 @@ ko:
field_time_entries: 기록된 시간 field_time_entries: 기록된 시간
project_module_gantt: Gantt 챠트 project_module_gantt: Gantt 챠트
project_module_calendar: 달력 project_module_calendar: 달력
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -977,3 +975,7 @@ ko:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -976,8 +976,6 @@ lt:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -985,3 +983,7 @@ lt:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -907,8 +907,6 @@ lv:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -916,3 +914,7 @@ lv:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -912,8 +912,6 @@ mk:
enumeration_activities: Активности (следење на време) enumeration_activities: Активности (следење на време)
enumeration_system_activity: Системска активност enumeration_system_activity: Системска активност
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -921,3 +919,7 @@ mk:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -913,8 +913,6 @@ mn:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -922,3 +920,7 @@ mn:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -894,8 +894,6 @@ nl:
field_time_entries: Log tijd field_time_entries: Log tijd
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Kalender project_module_calendar: Kalender
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -903,3 +901,7 @@ nl:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -903,8 +903,6 @@
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -912,3 +910,7 @@
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -933,8 +933,6 @@ pl:
field_time_entries: Dziennik field_time_entries: Dziennik
project_module_gantt: Diagram Gantta project_module_gantt: Diagram Gantta
project_module_calendar: Kalendarz project_module_calendar: Kalendarz
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -942,3 +940,7 @@ pl:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -936,8 +936,6 @@ pt-BR:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendário project_module_calendar: Calendário
field_member_of_group: Membro do grupo
field_assigned_to_role: Membro com o papel
button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}" button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}"
text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas? text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas?
field_text: Campo de texto field_text: Campo de texto
@ -945,3 +943,7 @@ pt-BR:
setting_default_notification_option: Opção padrão de notificação setting_default_notification_option: Opção padrão de notificação
label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido
label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuídas a mim
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -920,8 +920,6 @@ pt:
field_time_entries: Tempo registado field_time_entries: Tempo registado
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendário project_module_calendar: Calendário
field_member_of_group: Membro do Grupo
field_assigned_to_role: Membro do Perfil
button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}" button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}"
text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas? text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas?
field_text: Text field field_text: Text field
@ -929,3 +927,7 @@ pt:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -905,8 +905,6 @@ ro:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -914,3 +912,7 @@ ro:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -295,7 +295,6 @@ ru:
field_admin: Администратор field_admin: Администратор
field_assignable: Задача может быть назначена этой роли field_assignable: Задача может быть назначена этой роли
field_assigned_to: Назначена field_assigned_to: Назначена
field_assigned_to_role: Роль участника
field_attr_firstname: Имя field_attr_firstname: Имя
field_attr_lastname: Фамилия field_attr_lastname: Фамилия
field_attr_login: Атрибут Регистрация field_attr_login: Атрибут Регистрация
@ -345,7 +344,6 @@ ru:
field_mail: Email field_mail: Email
field_mail_notification: Уведомления по email field_mail_notification: Уведомления по email
field_max_length: Максимальная длина field_max_length: Максимальная длина
field_member_of_group: Группа участника
field_min_length: Минимальная длина field_min_length: Минимальная длина
field_name: Имя field_name: Имя
field_new_password: Новый пароль field_new_password: Новый пароль
@ -1038,3 +1036,7 @@ ru:
notice_unable_delete_time_entry: Невозможно удалить запись журнала. notice_unable_delete_time_entry: Невозможно удалить запись журнала.
label_overall_spent_time: Всего затрачено времени label_overall_spent_time: Всего затрачено времени
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -907,8 +907,6 @@ sk:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -916,3 +914,7 @@ sk:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -908,8 +908,6 @@ sl:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -917,3 +915,7 @@ sl:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -912,8 +912,6 @@ sr-YU:
field_time_entries: Vreme evidencije field_time_entries: Vreme evidencije
project_module_gantt: Gantov dijagram project_module_gantt: Gantov dijagram
project_module_calendar: Kalendar project_module_calendar: Kalendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -921,3 +919,7 @@ sr-YU:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -912,8 +912,6 @@ sr:
field_time_entries: Време евиденције field_time_entries: Време евиденције
project_module_gantt: Гантов дијаграм project_module_gantt: Гантов дијаграм
project_module_calendar: Календар project_module_calendar: Календар
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
@ -922,3 +920,7 @@ sr:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -957,8 +957,6 @@ sv:
enumeration_doc_categories: Dokumentkategorier enumeration_doc_categories: Dokumentkategorier
enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_activities: Aktiviteter (tidsuppföljning)
enumeration_system_activity: Systemaktivitet enumeration_system_activity: Systemaktivitet
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -966,3 +964,7 @@ sv:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -909,8 +909,6 @@ th:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -918,3 +916,7 @@ th:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -935,8 +935,6 @@ tr:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -944,3 +942,7 @@ tr:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -908,8 +908,6 @@ uk:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -917,3 +915,7 @@ uk:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -967,8 +967,6 @@ vi:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -976,3 +974,7 @@ vi:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -379,8 +379,6 @@
field_group_by: 結果分組方式 field_group_by: 結果分組方式
field_sharing: 共用 field_sharing: 共用
field_parent_issue: 父工作項目 field_parent_issue: 父工作項目
field_member_of_group: 所屬群組
field_assigned_to_role: 所屬角色
field_text: 內容文字 field_text: 內容文字
setting_app_title: 標題 setting_app_title: 標題
@ -1007,3 +1005,7 @@
enumeration_activities: 活動 (時間追蹤) enumeration_activities: 活動 (時間追蹤)
enumeration_system_activity: 系統活動 enumeration_system_activity: 系統活動
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -930,8 +930,6 @@ zh:
field_time_entries: Log time field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Calendar project_module_calendar: Calendar
field_member_of_group: Member of Group
field_assigned_to_role: Member of Role
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
text_are_you_sure_with_children: Delete issue and all child issues? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Text field field_text: Text field
@ -939,3 +937,7 @@ zh:
setting_default_notification_option: Default notification option setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: No events
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: The project you're trying to access has been archived.

View File

@ -30,9 +30,9 @@ ActionController::Routing::Routes.draw do |map|
map.with_options :controller => 'wiki' do |wiki_routes| map.with_options :controller => 'wiki' do |wiki_routes|
wiki_routes.with_options :conditions => {:method => :get} do |wiki_views| wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
wiki_views.connect 'projects/:project_id/wiki/export', :action => 'export' wiki_views.connect 'projects/:project_id/wiki/export', :action => 'export'
wiki_views.connect 'projects/:project_id/wiki/page_index', :action => 'page_index' wiki_views.connect 'projects/:project_id/wiki/index', :action => 'index'
wiki_views.connect 'projects/:project_id/wiki/date_index', :action => 'date_index' wiki_views.connect 'projects/:project_id/wiki/date_index', :action => 'date_index'
wiki_views.connect 'projects/:project_id/wiki/:page', :action => 'index', :page => nil wiki_views.connect 'projects/:project_id/wiki/:page', :action => 'show', :page => nil
wiki_views.connect 'projects/:project_id/wiki/:page/edit', :action => 'edit' wiki_views.connect 'projects/:project_id/wiki/:page/edit', :action => 'edit'
wiki_views.connect 'projects/:project_id/wiki/:page/rename', :action => 'rename' wiki_views.connect 'projects/:project_id/wiki/:page/rename', :action => 'rename'
wiki_views.connect 'projects/:project_id/wiki/:page/history', :action => 'history' wiki_views.connect 'projects/:project_id/wiki/:page/history', :action => 'history'
@ -41,8 +41,12 @@ ActionController::Routing::Routes.draw do |map|
end end
wiki_routes.connect 'projects/:project_id/wiki/:page/:action', wiki_routes.connect 'projects/:project_id/wiki/:page/:action',
:action => /edit|rename|destroy|preview|protect/, :action => /rename|preview|protect|add_attachment/,
:conditions => {:method => :post} :conditions => {:method => :post}
wiki_routes.connect 'projects/:project_id/wiki/:page/edit', :action => 'update', :conditions => {:method => :post}
wiki_routes.connect 'projects/:project_id/wiki/:page', :action => 'destroy', :conditions => {:method => :delete}
end end
map.with_options :controller => 'messages' do |messages_routes| map.with_options :controller => 'messages' do |messages_routes|

40
doc/git.rdoc Normal file
View File

@ -0,0 +1,40 @@
= Contributing to Redmine with git and github
(This is a beta document. If you can improve it, fork it and send a patch/pull request.)
The official repository is at http://github.com/edavis10/redmine
Official branches:
* master - is automatically mirrored to svn trunk. DO NOT COMMIT OR MERGE INTO THIS BRANCH
* [0.6, 0.7, 0.8, 0.9, 1.0,...]-stable - is automatically mirrored to svn release branches. DO NOT COMMIT OR MERGE INTO THIS BRANCH
* integration-to-svn-trunk - this branch is a git-only branch that will track master (trunk). Any code in here will be eventually merged into master but it may be rebased as any time (git-svn needs to rebase to commit to svn)
* integration-to-svn-stable-1.0 - this branch is a git-only branch that will track the 1.0-stable branch in svn. Any code in here will be eventually merged into master and 1.0-stable but it may be rebased as any time (git-svn needs to rebase to commit to svn)
I (edavis10) might have some other branches on the repository for work in progress.
== Branch naming standards
Redmine has two kinds of development:
* bug fixes
* new feature development
Both bug fixes and new feature development should be done in a branch named after the issue number on Redmine.org. So if you are fixing Issue #6244 your branch should be named:
* 6244
* 6244-sort-people-by-display-name (optional description)
* issue/6244 (optional "issue" prefix)
* issue/6244-sort-people-by-display-name (optional prefix and description)
That way when the branch is merged into the Redmine core, the correct issue can be updated.
Longer term feature development might require multiple branches. Just your best judgment and try to keep the issue id in the name.
If you don't have an issue for your patch, create an issue on redmine.org and say it's a placeholder issue for your work. Better yet, add a brief overview of what you are working on to the issue and you might get some help with it.
== Coding Standards
Follow the coding standards on the Redmine wiki: http://www.redmine.org/wiki/redmine/Coding_Standards#Commits. Make sure you commit logs conform to the standards, otherwise someone else will have to rewrite them for you and you might lose attribution during the conversion to svn.

View File

@ -180,7 +180,9 @@ rescue LoadError
log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true) log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true)
end end
class Project < ActiveResource::Base; end class Project < ActiveResource::Base
self.headers["User-agent"] = "Redmine repository manager/#{Version}"
end
log("querying Redmine for projects...", :level => 1); log("querying Redmine for projects...", :level => 1);

View File

@ -111,10 +111,10 @@ Redmine::AccessControl.map do |map|
map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
map.permission :view_wiki_pages, :wiki => [:index, :special, :page_index, :date_index] map.permission :view_wiki_pages, :wiki => [:index, :show, :special, :date_index]
map.permission :export_wiki_pages, :wiki => [:export] map.permission :export_wiki_pages, :wiki => [:export]
map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate] map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment] map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment]
map.permission :delete_wiki_pages_attachments, {} map.permission :delete_wiki_pages_attachments, {}
map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
end end
@ -195,7 +195,7 @@ Redmine::MenuManager.map :project_menu do |menu|
menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil }, :param => :project_id, menu.push :wiki, { :controller => 'wiki', :action => 'show', :page => nil }, :param => :project_id,
:if => Proc.new { |p| p.wiki && !p.wiki.new_record? } :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
:if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural

View File

@ -283,8 +283,8 @@ module Redmine
end end
def line_for_project(project, options) def line_for_project(project, options)
# Skip versions that don't have a start_date # Skip versions that don't have a start_date or due date
if project.is_a?(Project) && project.start_date if project.is_a?(Project) && project.start_date && project.due_date
options[:zoom] ||= 1 options[:zoom] ||= 1
options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
@ -419,7 +419,7 @@ module Redmine
def line_for_version(version, options) def line_for_version(version, options)
# Skip versions that don't have a start_date # Skip versions that don't have a start_date
if version.is_a?(Version) && version.start_date if version.is_a?(Version) && version.start_date && version.due_date
options[:zoom] ||= 1 options[:zoom] ||= 1
options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]

View File

@ -90,6 +90,13 @@ module Redmine #:nodoc:
@registered_plugins = {} @registered_plugins = {}
end end
# Checks if a plugin is installed
#
# @param [String] id name of the plugin
def self.installed?(id)
registered_plugins[id.to_sym].present?
end
def initialize(id) def initialize(id)
@id = id.to_sym @id = id.to_sym
end end

View File

@ -121,7 +121,7 @@ module Redmine
(\S+?) # url (\S+?) # url
(\/)? # slash (\/)? # slash
) )
([^\w\=\/;\(\)]*?) # post ((?:&gt;)?|[^\w\=\/;\(\)]*?) # post
(?=<|\s|$) (?=<|\s|$)
}x unless const_defined?(:AUTO_LINK_RE) }x unless const_defined?(:AUTO_LINK_RE)

View File

@ -113,7 +113,7 @@ table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
tr.project td.name a { white-space:nowrap; } tr.project td.name a { white-space:nowrap; }
tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
tr.project.idnt-1 td.name {padding-left: 0.5em;} tr.project.idnt-1 td.name {padding-left: 0.5em;}
tr.project.idnt-2 td.name {padding-left: 2em;} tr.project.idnt-2 td.name {padding-left: 2em;}
tr.project.idnt-3 td.name {padding-left: 3.5em;} tr.project.idnt-3 td.name {padding-left: 3.5em;}
@ -854,6 +854,8 @@ padding-bottom: 3px;
.icon-summary { background-image: url(../images/lightning.png); } .icon-summary { background-image: url(../images/lightning.png); }
.icon-server-authentication { background-image: url(../images/server_key.png); } .icon-server-authentication { background-image: url(../images/server_key.png); }
.icon-issue { background-image: url(../images/ticket.png); } .icon-issue { background-image: url(../images/ticket.png); }
.icon-zoom-in { background-image: url(../images/zoom_in.png); }
.icon-zoom-out { background-image: url(../images/zoom_out.png); }
.icon-file { background-image: url(../images/files/default.png); } .icon-file { background-image: url(../images/files/default.png); }
.icon-file.text-plain { background-image: url(../images/files/text.png); } .icon-file.text-plain { background-image: url(../images/files/text.png); }

View File

@ -21,6 +21,25 @@ class GanttsControllerTest < ActionController::TestCase
assert_select "div a.issue", /##{i.id}/ assert_select "div a.issue", /##{i.id}/
end end
should "work without issue due dates" do
Issue.update_all("due_date = NULL")
get :show, :project_id => 1
assert_response :success
assert_template 'show.html.erb'
assert_not_nil assigns(:gantt)
end
should "work without issue and version due dates" do
Issue.update_all("due_date = NULL")
Version.update_all("effective_date = NULL")
get :show, :project_id => 1
assert_response :success
assert_template 'show.html.erb'
assert_not_nil assigns(:gantt)
end
should "work cross project" do should "work cross project" do
get :show get :show
assert_response :success assert_response :success

View File

@ -40,6 +40,31 @@ class IssueMovesControllerTest < ActionController::TestCase
assert_equal 2, Issue.find(2).tracker_id assert_equal 2, Issue.find(2).tracker_id
end end
context "#create via bulk move" do
setup do
@request.session[:user_id] = 2
end
should "allow changing the issue priority" do
post :create, :ids => [1, 2], :priority_id => 6
assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
assert_equal 6, Issue.find(1).priority_id
assert_equal 6, Issue.find(2).priority_id
end
should "allow adding a note when moving" do
post :create, :ids => [1, 2], :notes => 'Moving two issues'
assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
assert_equal 'Moving two issues', Issue.find(1).journals.last.notes
assert_equal 'Moving two issues', Issue.find(2).journals.last.notes
end
end
def test_bulk_copy_to_another_project def test_bulk_copy_to_another_project
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference 'Issue.count', 2 do assert_difference 'Issue.count', 2 do

View File

@ -339,9 +339,7 @@ class IssuesControllerTest < ActionController::TestCase
get :new, :project_id => 1 get :new, :project_id => 1
assert_response 500 assert_response 500
assert_not_nil flash[:error] assert_error_tag :content => /No default issue/
assert_tag :tag => 'div', :attributes => { :class => /error/ },
:content => /No default issue/
end end
def test_get_new_with_no_tracker_should_display_an_error def test_get_new_with_no_tracker_should_display_an_error
@ -350,9 +348,7 @@ class IssuesControllerTest < ActionController::TestCase
get :new, :project_id => 1 get :new, :project_id => 1
assert_response 500 assert_response 500
assert_not_nil flash[:error] assert_error_tag :content => /No tracker/
assert_tag :tag => 'div', :attributes => { :class => /error/ },
:content => /No tracker/
end end
def test_update_new_form def test_update_new_form

View File

@ -296,6 +296,16 @@ class ProjectsControllerTest < ActionController::TestCase
assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
end end
def show_archived_project_should_be_denied
project = Project.find_by_identifier('ecookbook')
project.archive!
get :show, :id => 'ecookbook'
assert_response 403
assert_nil assigns(:project)
assert_tag :tag => 'p', :content => /archived/
end
def test_private_subprojects_hidden def test_private_subprojects_hidden
get :show, :id => 'ecookbook' get :show, :id => 'ecookbook'
assert_response :success assert_response :success

View File

@ -106,7 +106,7 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
def test_entry_not_found def test_entry_not_found
get :entry, :id => 1, :path => ['sources', 'zzz.c'] get :entry, :id => 1, :path => ['sources', 'zzz.c']
assert_tag :tag => 'div', :attributes => { :class => /error/ }, assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
:content => /The entry or revision was not found in the repository/ :content => /The entry or revision was not found in the repository/
end end

View File

@ -154,7 +154,7 @@ class RepositoriesGitControllerTest < ActionController::TestCase
def test_annotate_binary_file def test_annotate_binary_file
get :annotate, :id => 3, :path => ['images', 'edit.png'] get :annotate, :id => 3, :path => ['images', 'edit.png']
assert_response 500 assert_response 500
assert_tag :tag => 'div', :attributes => { :class => /error/ }, assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
:content => /can not be annotated/ :content => /can not be annotated/
end end
else else

View File

@ -129,7 +129,7 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
def test_entry_not_found def test_entry_not_found
get :entry, :id => 1, :path => ['subversion_test', 'zzz.c'] get :entry, :id => 1, :path => ['subversion_test', 'zzz.c']
assert_tag :tag => 'div', :attributes => { :class => /error/ }, assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
:content => /The entry or revision was not found in the repository/ :content => /The entry or revision was not found in the repository/
end end

View File

@ -32,7 +32,7 @@ class WikiControllerTest < ActionController::TestCase
end end
def test_show_start_page def test_show_start_page
get :index, :project_id => 'ecookbook' get :show, :project_id => 'ecookbook'
assert_response :success assert_response :success
assert_template 'show' assert_template 'show'
assert_tag :tag => 'h1', :content => /CookBook documentation/ assert_tag :tag => 'h1', :content => /CookBook documentation/
@ -45,7 +45,7 @@ class WikiControllerTest < ActionController::TestCase
end end
def test_show_page_with_name def test_show_page_with_name
get :index, :project_id => 1, :page => 'Another_page' get :show, :project_id => 1, :page => 'Another_page'
assert_response :success assert_response :success
assert_template 'show' assert_template 'show'
assert_tag :tag => 'h1', :content => /Another page/ assert_tag :tag => 'h1', :content => /Another page/
@ -60,32 +60,32 @@ class WikiControllerTest < ActionController::TestCase
page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar') page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
page.save! page.save!
get :index, :project_id => 1, :page => 'Another_page' get :show, :project_id => 1, :page => 'Another_page'
assert_response :success assert_response :success
assert_tag :tag => 'div', :attributes => {:id => 'sidebar'}, assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
:content => /Side bar content for test_show_with_sidebar/ :content => /Side bar content for test_show_with_sidebar/
end end
def test_show_unexistent_page_without_edit_right def test_show_unexistent_page_without_edit_right
get :index, :project_id => 1, :page => 'Unexistent page' get :show, :project_id => 1, :page => 'Unexistent page'
assert_response 404 assert_response 404
end end
def test_show_unexistent_page_with_edit_right def test_show_unexistent_page_with_edit_right
@request.session[:user_id] = 2 @request.session[:user_id] = 2
get :index, :project_id => 1, :page => 'Unexistent page' get :show, :project_id => 1, :page => 'Unexistent page'
assert_response :success assert_response :success
assert_template 'edit' assert_template 'edit'
end end
def test_create_page def test_create_page
@request.session[:user_id] = 2 @request.session[:user_id] = 2
post :edit, :project_id => 1, post :update, :project_id => 1,
:page => 'New page', :page => 'New page',
:content => {:comments => 'Created the page', :content => {:comments => 'Created the page',
:text => "h1. New page\n\nThis is a new page", :text => "h1. New page\n\nThis is a new page",
:version => 0} :version => 0}
assert_redirected_to :action => 'index', :project_id => 'ecookbook', :page => 'New_page' assert_redirected_to :action => 'show', :project_id => 'ecookbook', :page => 'New_page'
page = Project.find(1).wiki.find_page('New page') page = Project.find(1).wiki.find_page('New page')
assert !page.new_record? assert !page.new_record?
assert_not_nil page.content assert_not_nil page.content
@ -96,7 +96,7 @@ class WikiControllerTest < ActionController::TestCase
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference 'WikiPage.count' do assert_difference 'WikiPage.count' do
assert_difference 'Attachment.count' do assert_difference 'Attachment.count' do
post :edit, :project_id => 1, post :update, :project_id => 1,
:page => 'New page', :page => 'New page',
:content => {:comments => 'Created the page', :content => {:comments => 'Created the page',
:text => "h1. New page\n\nThis is a new page", :text => "h1. New page\n\nThis is a new page",
@ -176,7 +176,7 @@ class WikiControllerTest < ActionController::TestCase
post :rename, :project_id => 1, :page => 'Another_page', post :rename, :project_id => 1, :page => 'Another_page',
:wiki_page => { :title => 'Another renamed page', :wiki_page => { :title => 'Another renamed page',
:redirect_existing_links => 1 } :redirect_existing_links => 1 }
assert_redirected_to :action => 'index', :project_id => 'ecookbook', :page => 'Another_renamed_page' assert_redirected_to :action => 'show', :project_id => 'ecookbook', :page => 'Another_renamed_page'
wiki = Project.find(1).wiki wiki = Project.find(1).wiki
# Check redirects # Check redirects
assert_not_nil wiki.find_page('Another page') assert_not_nil wiki.find_page('Another page')
@ -188,7 +188,7 @@ class WikiControllerTest < ActionController::TestCase
post :rename, :project_id => 1, :page => 'Another_page', post :rename, :project_id => 1, :page => 'Another_page',
:wiki_page => { :title => 'Another renamed page', :wiki_page => { :title => 'Another renamed page',
:redirect_existing_links => "0" } :redirect_existing_links => "0" }
assert_redirected_to :action => 'index', :project_id => 'ecookbook', :page => 'Another_renamed_page' assert_redirected_to :action => 'show', :project_id => 'ecookbook', :page => 'Another_renamed_page'
wiki = Project.find(1).wiki wiki = Project.find(1).wiki
# Check that there's no redirects # Check that there's no redirects
assert_nil wiki.find_page('Another page') assert_nil wiki.find_page('Another page')
@ -196,14 +196,14 @@ class WikiControllerTest < ActionController::TestCase
def test_destroy_child def test_destroy_child
@request.session[:user_id] = 2 @request.session[:user_id] = 2
post :destroy, :project_id => 1, :page => 'Child_1' delete :destroy, :project_id => 1, :page => 'Child_1'
assert_redirected_to :action => 'page_index', :project_id => 'ecookbook' assert_redirected_to :action => 'index', :project_id => 'ecookbook'
end end
def test_destroy_parent def test_destroy_parent
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_no_difference('WikiPage.count') do assert_no_difference('WikiPage.count') do
post :destroy, :project_id => 1, :page => 'Another_page' delete :destroy, :project_id => 1, :page => 'Another_page'
end end
assert_response :success assert_response :success
assert_template 'destroy' assert_template 'destroy'
@ -212,18 +212,18 @@ class WikiControllerTest < ActionController::TestCase
def test_destroy_parent_with_nullify def test_destroy_parent_with_nullify
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference('WikiPage.count', -1) do assert_difference('WikiPage.count', -1) do
post :destroy, :project_id => 1, :page => 'Another_page', :todo => 'nullify' delete :destroy, :project_id => 1, :page => 'Another_page', :todo => 'nullify'
end end
assert_redirected_to :action => 'page_index', :project_id => 'ecookbook' assert_redirected_to :action => 'index', :project_id => 'ecookbook'
assert_nil WikiPage.find_by_id(2) assert_nil WikiPage.find_by_id(2)
end end
def test_destroy_parent_with_cascade def test_destroy_parent_with_cascade
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference('WikiPage.count', -3) do assert_difference('WikiPage.count', -3) do
post :destroy, :project_id => 1, :page => 'Another_page', :todo => 'destroy' delete :destroy, :project_id => 1, :page => 'Another_page', :todo => 'destroy'
end end
assert_redirected_to :action => 'page_index', :project_id => 'ecookbook' assert_redirected_to :action => 'index', :project_id => 'ecookbook'
assert_nil WikiPage.find_by_id(2) assert_nil WikiPage.find_by_id(2)
assert_nil WikiPage.find_by_id(5) assert_nil WikiPage.find_by_id(5)
end end
@ -231,17 +231,17 @@ class WikiControllerTest < ActionController::TestCase
def test_destroy_parent_with_reassign def test_destroy_parent_with_reassign
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference('WikiPage.count', -1) do assert_difference('WikiPage.count', -1) do
post :destroy, :project_id => 1, :page => 'Another_page', :todo => 'reassign', :reassign_to_id => 1 delete :destroy, :project_id => 1, :page => 'Another_page', :todo => 'reassign', :reassign_to_id => 1
end end
assert_redirected_to :action => 'page_index', :project_id => 'ecookbook' assert_redirected_to :action => 'index', :project_id => 'ecookbook'
assert_nil WikiPage.find_by_id(2) assert_nil WikiPage.find_by_id(2)
assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent
end end
def test_page_index def test_index
get :page_index, :project_id => 'ecookbook' get :index, :project_id => 'ecookbook'
assert_response :success assert_response :success
assert_template 'page_index' assert_template 'index'
pages = assigns(:pages) pages = assigns(:pages)
assert_not_nil pages assert_not_nil pages
assert_equal Project.find(1).wiki.pages.size, pages.size assert_equal Project.find(1).wiki.pages.size, pages.size
@ -280,7 +280,7 @@ class WikiControllerTest < ActionController::TestCase
get :export, :project_id => 'ecookbook' get :export, :project_id => 'ecookbook'
should_respond_with :redirect should_respond_with :redirect
should_redirect_to('wiki index') { {:action => 'index', :project_id => @project, :page => nil} } should_redirect_to('wiki index') { {:action => 'show', :project_id => @project, :page => nil} }
end end
end end
end end
@ -298,7 +298,7 @@ class WikiControllerTest < ActionController::TestCase
end end
def test_not_found def test_not_found
get :index, :project_id => 999 get :show, :project_id => 999
assert_response 404 assert_response 404
end end
@ -307,7 +307,7 @@ class WikiControllerTest < ActionController::TestCase
assert !page.protected? assert !page.protected?
@request.session[:user_id] = 2 @request.session[:user_id] = 2
post :protect, :project_id => 1, :page => page.title, :protected => '1' post :protect, :project_id => 1, :page => page.title, :protected => '1'
assert_redirected_to :action => 'index', :project_id => 'ecookbook', :page => 'Another_page' assert_redirected_to :action => 'show', :project_id => 'ecookbook', :page => 'Another_page'
assert page.reload.protected? assert page.reload.protected?
end end
@ -316,13 +316,13 @@ class WikiControllerTest < ActionController::TestCase
assert page.protected? assert page.protected?
@request.session[:user_id] = 2 @request.session[:user_id] = 2
post :protect, :project_id => 1, :page => page.title, :protected => '0' post :protect, :project_id => 1, :page => page.title, :protected => '0'
assert_redirected_to :action => 'index', :project_id => 'ecookbook', :page => 'CookBook_documentation' assert_redirected_to :action => 'show', :project_id => 'ecookbook', :page => 'CookBook_documentation'
assert !page.reload.protected? assert !page.reload.protected?
end end
def test_show_page_with_edit_link def test_show_page_with_edit_link
@request.session[:user_id] = 2 @request.session[:user_id] = 2
get :index, :project_id => 1 get :show, :project_id => 1
assert_response :success assert_response :success
assert_template 'show' assert_template 'show'
assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' } assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }
@ -330,7 +330,7 @@ class WikiControllerTest < ActionController::TestCase
def test_show_page_without_edit_link def test_show_page_without_edit_link
@request.session[:user_id] = 4 @request.session[:user_id] = 4
get :index, :project_id => 1 get :show, :project_id => 1
assert_response :success assert_response :success
assert_template 'show' assert_template 'show'
assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' } assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' }

View File

@ -311,22 +311,24 @@ class RoutingTest < ActionController::IntegrationTest
end end
context "wiki (singular, project's pages)" do context "wiki (singular, project's pages)" do
should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :project_id => '567' should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'show', :project_id => '567'
should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :project_id => '567', :page => 'lalala' should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'show', :project_id => '567', :page => 'lalala'
should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :page => 'my_page' should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :page => 'my_page'
should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :project_id => '1', :page => 'CookBook_documentation' should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :project_id => '1', :page => 'CookBook_documentation'
should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :project_id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1' should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :project_id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1'
should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :project_id => '1', :page => 'CookBook_documentation', :version => '2' should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :project_id => '1', :page => 'CookBook_documentation', :version => '2'
should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :page => 'ladida' should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :page => 'ladida'
should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'page_index', :project_id => '567' should_route :get, "/projects/567/wiki/index", :controller => 'wiki', :action => 'index', :project_id => '567'
should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567' should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567'
should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567' should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567'
should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :page => 'my_page' should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'update', :project_id => '567', :page => 'my_page'
should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :page => 'CookBook_documentation' should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :page => 'CookBook_documentation'
should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :page => 'ladida' should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :page => 'ladida'
should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :project_id => '22', :page => 'ladida'
should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :page => 'ladida' should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :page => 'ladida'
should_route :post, "/projects/22/wiki/ladida/add_attachment", :controller => 'wiki', :action => 'add_attachment', :project_id => '22', :page => 'ladida'
should_route :delete, "/projects/22/wiki/ladida", :controller => 'wiki', :action => 'destroy', :project_id => '22', :page => 'ladida'
end end
context "wikis (plural, admin setup)" do context "wikis (plural, admin setup)" do

View File

@ -114,10 +114,14 @@ class ActiveSupport::TestCase
File.directory?(repository_path(vendor)) File.directory?(repository_path(vendor))
end end
def assert_error_tag(options={})
assert_tag({:tag => 'p', :attributes => { :id => 'errorExplanation' }}.merge(options))
end
# Shoulda macros # Shoulda macros
def self.should_render_404 def self.should_render_404
should_respond_with :not_found should_respond_with :not_found
should_render_template 'common/404' should_render_template 'common/error'
end end
def self.should_have_before_filter(expected_method, options = {}) def self.should_have_before_filter(expected_method, options = {})

View File

@ -79,6 +79,8 @@ class ApplicationHelperTest < ActionView::TestCase
'http://example.net/path!602815048C7B5C20!302.html' => '<a class="external" href="http://example.net/path!602815048C7B5C20!302.html">http://example.net/path!602815048C7B5C20!302.html</a>', 'http://example.net/path!602815048C7B5C20!302.html' => '<a class="external" href="http://example.net/path!602815048C7B5C20!302.html">http://example.net/path!602815048C7B5C20!302.html</a>',
# escaping # escaping
'http://foo"bar' => '<a class="external" href="http://foo&quot;bar">http://foo"bar</a>', 'http://foo"bar' => '<a class="external" href="http://foo&quot;bar">http://foo"bar</a>',
# wrap in angle brackets
'<http://foo.bar>' => '&lt;<a class="external" href="http://foo.bar">http://foo.bar</a>&gt;'
} }
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end end

View File

@ -102,6 +102,7 @@ class ProjectTest < ActiveSupport::TestCase
@ecookbook.reload @ecookbook.reload
assert !@ecookbook.active? assert !@ecookbook.active?
assert @ecookbook.archived?
assert !user.projects.include?(@ecookbook) assert !user.projects.include?(@ecookbook)
# Subproject are also archived # Subproject are also archived
assert !@ecookbook.children.empty? assert !@ecookbook.children.empty?
@ -129,6 +130,7 @@ class ProjectTest < ActiveSupport::TestCase
assert @ecookbook.unarchive assert @ecookbook.unarchive
@ecookbook.reload @ecookbook.reload
assert @ecookbook.active? assert @ecookbook.active?
assert !@ecookbook.archived?
assert user.projects.include?(@ecookbook) assert user.projects.include?(@ecookbook)
# Subproject can now be unarchived # Subproject can now be unarchived
@ecookbook_sub1.reload @ecookbook_sub1.reload