journals_controller.rb
105 lines
| 3.5 KiB
| text/x-ruby
|
RubyLexer
|
r4834 | # Redmine - project management software | ||
|
r9453 | # Copyright (C) 2006-2012 Jean-Philippe Lang | ||
|
r1091 | # | ||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
|
r6763 | # | ||
|
r1091 | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
|
r6763 | # | ||
|
r1091 | # You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class JournalsController < ApplicationController | ||||
|
r4834 | before_filter :find_journal, :only => [:edit, :diff] | ||
|
r3827 | before_filter :find_issue, :only => [:new] | ||
|
r3920 | before_filter :find_optional_project, :only => [:index] | ||
|
r4834 | before_filter :authorize, :only => [:new, :edit, :diff] | ||
|
r6077 | accept_rss_auth :index | ||
|
r4834 | menu_item :issues | ||
|
r6763 | |||
|
r3920 | helper :issues | ||
|
r4901 | helper :custom_fields | ||
|
r3920 | helper :queries | ||
include QueriesHelper | ||||
helper :sort | ||||
include SortHelper | ||||
def index | ||||
retrieve_query | ||||
sort_init 'id', 'desc' | ||||
sort_update(@query.sortable_columns) | ||||
|
r6763 | |||
|
r3920 | if @query.valid? | ||
|
r6763 | @journals = @query.journals(:order => "#{Journal.table_name}.created_on DESC", | ||
|
r3920 | :limit => 25) | ||
end | ||||
@title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name) | ||||
render :layout => false, :content_type => 'application/atom+xml' | ||||
rescue ActiveRecord::RecordNotFound | ||||
render_404 | ||||
end | ||||
|
r6763 | |||
|
r4834 | def diff | ||
@issue = @journal.issue | ||||
if params[:detail_id].present? | ||||
@detail = @journal.details.find_by_id(params[:detail_id]) | ||||
else | ||||
@detail = @journal.details.detect {|d| d.prop_key == 'description'} | ||||
end | ||||
(render_404; return false) unless @issue && @detail | ||||
@diff = Redmine::Helpers::Diff.new(@detail.value, @detail.old_value) | ||||
end | ||||
|
r6763 | |||
|
r3827 | def new | ||
|
r10336 | @journal = Journal.visible.find(params[:journal_id]) if params[:journal_id] | ||
if @journal | ||||
user = @journal.user | ||||
text = @journal.notes | ||||
|
r3827 | else | ||
user = @issue.author | ||||
text = @issue.description | ||||
end | ||||
# Replaces pre blocks with [...] | ||||
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]') | ||||
|
r9871 | @content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> " | ||
@content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" | ||||
|
r10336 | rescue ActiveRecord::RecordNotFound | ||
render_404 | ||||
|
r3827 | end | ||
|
r6763 | |||
|
r1091 | def edit | ||
|
r4834 | (render_403; return false) unless @journal.editable_by?(User.current) | ||
|
r1091 | if request.post? | ||
@journal.update_attributes(:notes => params[:notes]) if params[:notes] | ||||
|
r1138 | @journal.destroy if @journal.details.empty? && @journal.notes.blank? | ||
|
r2119 | call_hook(:controller_journals_edit_post, { :journal => @journal, :params => params}) | ||
|
r1091 | respond_to do |format| | ||
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id } | ||||
format.js { render :action => 'update' } | ||||
end | ||||
|
r4826 | else | ||
respond_to do |format| | ||||
format.html { | ||||
# TODO: implement non-JS journal update | ||||
|
r6763 | render :nothing => true | ||
|
r4826 | } | ||
format.js | ||||
end | ||||
|
r1091 | end | ||
end | ||||
|
r6763 | |||
|
r4834 | private | ||
|
r6763 | |||
|
r1091 | def find_journal | ||
|
r10336 | @journal = Journal.visible.find(params[:id]) | ||
|
r1124 | @project = @journal.journalized.project | ||
|
r1091 | rescue ActiveRecord::RecordNotFound | ||
render_404 | ||||
end | ||||
end | ||||