Actualiza a Redmine 3.4.13
This commit is contained in:
parent
807ff3308d
commit
ecddcaf1d3
224 changed files with 2222 additions and 1000 deletions
|
@ -87,7 +87,7 @@ class AccountController < ApplicationController
|
|||
@user.must_change_passwd = false
|
||||
if @user.save
|
||||
@token.destroy
|
||||
Mailer.password_updated(@user)
|
||||
Mailer.password_updated(@user, { remote_ip: request.remote_ip })
|
||||
flash[:notice] = l(:notice_account_password_updated)
|
||||
redirect_to signin_path
|
||||
return
|
||||
|
|
|
@ -60,7 +60,7 @@ class AttachmentsController < ApplicationController
|
|||
@attachment.increment_download
|
||||
end
|
||||
|
||||
if stale?(:etag => @attachment.digest)
|
||||
if stale?(:etag => @attachment.digest, :template => false)
|
||||
# images are sent inline
|
||||
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
|
||||
:type => detect_content_type(@attachment),
|
||||
|
@ -70,7 +70,7 @@ class AttachmentsController < ApplicationController
|
|||
|
||||
def thumbnail
|
||||
if @attachment.thumbnailable? && tbnail = @attachment.thumbnail(:size => params[:size])
|
||||
if stale?(:etag => tbnail)
|
||||
if stale?(:etag => tbnail, :template => false)
|
||||
send_file tbnail,
|
||||
:filename => filename_for_content_disposition(@attachment.filename),
|
||||
:type => detect_content_type(@attachment),
|
||||
|
|
|
@ -19,7 +19,7 @@ class AutoCompletesController < ApplicationController
|
|||
before_action :find_project
|
||||
|
||||
def issues
|
||||
@issues = []
|
||||
issues = []
|
||||
q = (params[:q] || params[:term]).to_s.strip
|
||||
status = params[:status].to_s
|
||||
issue_id = params[:issue_id].to_s
|
||||
|
@ -32,13 +32,14 @@ class AutoCompletesController < ApplicationController
|
|||
scope = scope.where.not(:id => issue_id.to_i)
|
||||
end
|
||||
if q.match(/\A#?(\d+)\z/)
|
||||
@issues << scope.find_by_id($1.to_i)
|
||||
issues << scope.find_by_id($1.to_i)
|
||||
end
|
||||
|
||||
@issues += scope.like(q).order(:id => :desc).limit(10).to_a
|
||||
@issues.compact!
|
||||
issues += scope.like(q).order(:id => :desc).limit(10).to_a
|
||||
issues.compact!
|
||||
end
|
||||
render :layout => false
|
||||
|
||||
render :json => format_issues_json(issues)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -50,4 +51,13 @@ class AutoCompletesController < ApplicationController
|
|||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def format_issues_json(issues)
|
||||
issues.map {|issue| {
|
||||
'id' => issue.id,
|
||||
'label' => "#{issue.tracker} ##{issue.id}: #{issue.subject.to_s.truncate(60)}",
|
||||
'value' => issue.id
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -91,8 +91,10 @@ class EnumerationsController < ApplicationController
|
|||
|
||||
def build_new_enumeration
|
||||
class_name = params[:enumeration] && params[:enumeration][:type] || params[:type]
|
||||
@enumeration = Enumeration.new_subclass_instance(class_name, enumeration_params)
|
||||
if @enumeration.nil?
|
||||
@enumeration = Enumeration.new_subclass_instance(class_name)
|
||||
if @enumeration
|
||||
@enumeration.attributes = enumeration_params || {}
|
||||
else
|
||||
render_404
|
||||
end
|
||||
end
|
||||
|
@ -105,6 +107,7 @@ class EnumerationsController < ApplicationController
|
|||
|
||||
def enumeration_params
|
||||
# can't require enumeration on #new action
|
||||
params.permit(:enumeration => [:name, :active, :is_default, :position])[:enumeration]
|
||||
cf_ids = @enumeration.available_custom_fields.map{|c| c.id.to_s}
|
||||
params.permit(:enumeration => [:name, :active, :is_default, :position, :custom_field_values => cf_ids])[:enumeration]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,7 +40,8 @@ class IssuesController < ApplicationController
|
|||
helper :timelog
|
||||
|
||||
def index
|
||||
retrieve_query
|
||||
use_session = !request.format.csv?
|
||||
retrieve_query(IssueQuery, use_session)
|
||||
|
||||
if @query.valid?
|
||||
respond_to do |format|
|
||||
|
@ -367,7 +368,12 @@ class IssuesController < ApplicationController
|
|||
when 'destroy'
|
||||
# nothing to do
|
||||
when 'nullify'
|
||||
if Setting.timelog_required_fields.include?('issue_id')
|
||||
flash.now[:error] = l(:field_issue) + " " + ::I18n.t('activerecord.errors.messages.blank')
|
||||
return
|
||||
else
|
||||
time_entries.update_all(:issue_id => nil)
|
||||
end
|
||||
when 'reassign'
|
||||
reassign_to = @project && @project.issues.find_by_id(params[:reassign_to_id])
|
||||
if reassign_to.nil?
|
||||
|
|
|
@ -37,7 +37,7 @@ class SearchController < ApplicationController
|
|||
end
|
||||
|
||||
# quick jump to an issue
|
||||
if (m = @question.match(/^#?(\d+)$/)) && (issue = Issue.visible.find_by_id(m[1].to_i))
|
||||
if !api_request? && (m = @question.match(/^#?(\d+)$/)) && (issue = Issue.visible.find_by_id(m[1].to_i))
|
||||
redirect_to issue_path(issue)
|
||||
return
|
||||
end
|
||||
|
@ -49,7 +49,7 @@ class SearchController < ApplicationController
|
|||
when 'my_projects'
|
||||
User.current.projects
|
||||
when 'subprojects'
|
||||
@project ? (@project.self_and_descendants.active.to_a) : nil
|
||||
@project ? (@project.self_and_descendants.to_a) : nil
|
||||
else
|
||||
@project
|
||||
end
|
||||
|
|
|
@ -114,6 +114,7 @@ class TimelogController < ApplicationController
|
|||
:time_entry => {
|
||||
:project_id => params[:time_entry][:project_id],
|
||||
:issue_id => @time_entry.issue_id,
|
||||
:spent_on => @time_entry.spent_on,
|
||||
:activity_id => @time_entry.activity_id
|
||||
},
|
||||
:back_url => params[:back_url]
|
||||
|
|
|
@ -106,6 +106,6 @@ class TrackersController < ApplicationController
|
|||
return
|
||||
end
|
||||
@trackers = Tracker.sorted.to_a
|
||||
@custom_fields = IssueCustomField.all.sort
|
||||
@custom_fields = IssueCustomField.sorted
|
||||
end
|
||||
end
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
class WikiController < ApplicationController
|
||||
default_search_scope :wiki_pages
|
||||
before_action :find_wiki, :authorize
|
||||
before_action :find_existing_or_new_page, :only => [:show, :edit, :update]
|
||||
before_action :find_existing_or_new_page, :only => [:show, :edit]
|
||||
before_action :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy, :destroy_version]
|
||||
before_action :find_attachments, :only => [:preview]
|
||||
accept_api_auth :index, :show, :update, :destroy
|
||||
|
@ -42,8 +42,6 @@ class WikiController < ApplicationController
|
|||
helper :watchers
|
||||
include Redmine::Export::PDF
|
||||
|
||||
include ActionView::Helpers::SanitizeHelper
|
||||
|
||||
# List of pages, sorted alphabetically and by parent (hierarchy)
|
||||
def index
|
||||
load_pages_for_index
|
||||
|
@ -109,7 +107,7 @@ class WikiController < ApplicationController
|
|||
send_data(export, :type => 'text/html', :filename => filename_for_content_disposition("#{@page.title}.html"))
|
||||
return
|
||||
elsif params[:format] == 'txt'
|
||||
send_data(strip_tags(@content.text), :type => 'text/plain', :filename => filename_for_content_disposition("#{@page.title}.txt"))
|
||||
send_data(@content.text, :type => 'text/plain', :filename => filename_for_content_disposition("#{@page.title}.txt"))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
@ -152,6 +150,8 @@ class WikiController < ApplicationController
|
|||
|
||||
# Creates a new page or updates an existing one
|
||||
def update
|
||||
@page = @wiki.find_or_new_page(params[:id])
|
||||
|
||||
return render_403 unless editable?
|
||||
was_new_page = @page.new_record?
|
||||
@page.safe_attributes = params[:wiki_page]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue