Class: JournalsController

Inherits:
ApplicationController show all
Includes:
QueriesHelper, SortHelper
Defined in:
app/controllers/journals_controller.rb

Instance Method Summary collapse

Methods included from SortHelper

#sort_clause, #sort_clear, #sort_header_tag, #sort_init, #sort_link, #sort_name, #sort_update

Methods included from QueriesHelper

#column_content, #column_header, #operators_for_select, #retrieve_query

Methods included from Redmine::MenuManager::MenuController

#current_menu_item, included, #menu_items, #redirect_to_project_menu_item

Methods included from Redmine::Search::Controller

#default_search_scope, #default_search_scopes, included

Methods included from Redmine::I18n

#current_language, #day_name, #find_language, #format_date, #format_time, included, #l, #l_hours, #l_or_humanize, #ll, #month_name, #set_language_if_valid, #valid_languages

Instance Method Details

#diffObject



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'app/controllers/journals_controller.rb', line 89

def diff
  if valid_field?(params[:field])
    from = @journal.changes[params[:field]][0]
    to = @journal.changes[params[:field]][1]

    @diff = Redmine::Helpers::Diff.new(to, from)
    @issue = @journal.journaled
    respond_to do |format|
      format.html { }
      format.js { render :layout => false }
    end
  else
    render_404
  end
end

#editObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'app/controllers/journals_controller.rb', line 67

def edit
  (render_403; return false) unless @journal.editable_by?(User.current)
  if request.post?
    @journal.update_attribute(:notes, params[:notes]) if params[:notes]
    @journal.destroy if @journal.details.empty? && @journal.notes.blank?
    call_hook(:controller_journals_edit_post, { :journal => @journal, :params => params})
    respond_to do |format|
      format.html { redirect_to :controller => @journal.journaled.class.name.pluralize.downcase,
        :action => 'show', :id => @journal.journaled_id }
      format.js { render :action => 'update' }
    end
  else
    respond_to do |format|
      format.html {
        # TODO: implement non-JS journal update
        render :nothing => true
      }
      format.js
    end
  end
end

#indexObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/controllers/journals_controller.rb', line 28

def index
  retrieve_query
  sort_init 'id', 'desc'
  sort_update(@query.sortable_columns)

  if @query.valid?
    @journals = @query.issue_journals(:order => "#{Journal.table_name}.created_at 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

#newObject

Used when replying to an issue or journal



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/controllers/journals_controller.rb', line 44

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