journals_controller.rb
97 lines
| 3.4 KiB
| text/x-ruby
|
RubyLexer
|
r1091 | # redMine - project management software | ||
# Copyright (C) 2006-2008 Jean-Philippe Lang | ||||
# | ||||
# 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. | ||||
# | ||||
# 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. | ||||
# | ||||
# 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 | ||||
|
r3827 | before_filter :find_journal, :only => [:edit] | ||
before_filter :find_issue, :only => [:new] | ||||
|
r3920 | before_filter :find_optional_project, :only => [:index] | ||
|
r4421 | before_filter :authorize, :only => [:new, :edit] | ||
|
r3920 | accept_key_auth :index | ||
helper :issues | ||||
helper :queries | ||||
include QueriesHelper | ||||
helper :sort | ||||
include SortHelper | ||||
def index | ||||
retrieve_query | ||||
sort_init 'id', 'desc' | ||||
sort_update(@query.sortable_columns) | ||||
if @query.valid? | ||||
@journals = @query.journals(:order => "#{Journal.table_name}.created_on DESC", | ||||
: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 | ||||
|
r3827 | |||
def new | ||||
journal = Journal.find(params[:journal_id]) if params[:journal_id] | ||||
if journal | ||||
user = journal.user | ||||
text = journal.notes | ||||
else | ||||
user = @issue.author | ||||
text = @issue.description | ||||
end | ||||
# Replaces pre blocks with [...] | ||||
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]') | ||||
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> " | ||||
content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" | ||||
render(:update) { |page| | ||||
page.<< "$('notes').value = \"#{escape_javascript content}\";" | ||||
page.show 'update' | ||||
page << "Form.Element.focus('notes');" | ||||
page << "Element.scrollTo('update');" | ||||
page << "$('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight;" | ||||
} | ||||
end | ||||
|
r1091 | |||
def edit | ||||
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 | ||||
end | ||||
end | ||||
private | ||||
def find_journal | ||||
@journal = Journal.find(params[:id]) | ||||
|
r3071 | (render_403; return false) unless @journal.editable_by?(User.current) | ||
|
r1124 | @project = @journal.journalized.project | ||
|
r1091 | rescue ActiveRecord::RecordNotFound | ||
render_404 | ||||
end | ||||
|
r3827 | |||
# TODO: duplicated in IssuesController | ||||
def find_issue | ||||
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category]) | ||||
@project = @issue.project | ||||
rescue ActiveRecord::RecordNotFound | ||||
render_404 | ||||
end | ||||
|
r1091 | end | ||