Redmineカスタマイズその8 Wiki雛型プルダウン追加

カスタマイズその8。*1
PukiWikiからのパクリですが、
Wikiページのひな形を読みこめる機能がありましたので
結構使えそうだーという事で似たようなパッチを当ててみました。

$RAILS_ROOT/app/views/wiki/edit.rhtml

--- redmine-0.8.0_RC1-org/app/views/wiki/edit.rhtml     2008-12-07 20:10:25.000000000 +0900
+++ redmine-0.8.0_RC1/app/views/wiki/edit.rhtml 2009-03-01 01:05:55.000000000 +0900
@@ -4,6 +4,14 @@
 <%= f.hidden_field :version %>
 <%= error_messages_for 'content' %>

+<select onchange="if (this.value != '') { window.location = this.value; }">
+<option selected="selected">-- Wiki Page Reading --</option>
+  <% @pages.each do |page| %>
+    <%= content_tag('option', h(page.title), :value => url_for(:action => 'edit', :page => page.title, :params => params.merge('selpage' => page.title)) ) %>
+  <% end %>
+</select>
+
+
 <p><%= f.text_area :text, :cols => 100, :rows => 25, :class => 'wiki-edit', :accesskey => accesskey(:edit) %></p>
 <p><label><%= l(:field_comments) %></label><br /><%= f.text_field :comments, :size => 120 %></p>
 <p><%= submit_tag l(:button_save) %>

ページの配列を受けとって、selectタグにする処理を追加しています。

$RAILS_ROOT/app/controllers/wiki_controller.rb

--- redmine-0.8.0_RC1-org/app/controllers/wiki_controller.rb    2009-03-01 01:18:12.000000000 +0900
+++ redmine-0.8.0_RC1/app/controllers/wiki_controller.rb        2009-03-01 01:27:07.000000000 +0900
@@ -27,6 +27,7 @@

   # display a page (in editing mode if it doesn't exist)
   def index
+    @sidebar_wiki= @wiki.find_page("sidebar")
     page_title = params[:page]
     @page = @wiki.find_or_new_page(page_title)
     if @page.new_record?
@@ -58,12 +59,22 @@

   # edit an existing page or a new one
   def edit
+    @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on",
+                                    :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id",
+                                    :order => 'title'
     @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?
+
+    if params[:selpage]
+      @selpage = @wiki.find_or_new_page(params[:selpage])
+      @content.text = @selpage.text
+    else
+      @content.text = initial_page_content(@page) if @content.text.blank?
+    end
+
     # don't keep previous comment
     @content.comments = nil
     if request.get?

@sidebar_wikiの部分は前回のパッチなので気にしないでくださいw
editファンクションでページ一覧の配列を作る処理と、
パラメータでselpage(雛型wikiページ)が渡された場合に
テキストを置き換える処理が追加されています。


イメージはこんな感じ。
wikiページの「新規時 or 編集時」に
既に作成されているwikiページの一覧プルダウンが追加されます。

雛型ページを選択すると、そのページのテキストを読み込んで表示します。
既に編集済みであった場合、内容は上書きされてしまいますのでご注意を。

*1:バージョンは0.8.0_RC1を使用しています