¤¹¤¨¤Ò¤í¤¬¤ê¤Ã¤Ã¤Ã¤Ã! ¤³¤Î¥Ú¡¼¥¸¤ò¥¢¥ó¥Æ¥Ê¤ËÄɲà RSS¥Õ¥£¡¼¥É

2010-01-19

Redmine¼«ÂΤ˼ê¤òÆþ¤ì¤º¤Ë¸«¤¿ÌܤòÊѹ¹¤¹¤ëÊýË¡

Redmine ¤Ï Rails À½¤Ê¤Î¤Ç¡¢¤Á¤ç¤Ã¤È¤·¤¿µ¤¤ËÆþ¤é¤Ê¤¤Éôʬ¤ÏľÀܼê¤òÆþ¤ì¤¿¤¯¤Ê¤ë¤Î¤À¤±¤ì¤É¤â¡¢ËܲȤΥ¢¥Ã¥×¥Ç¡¼¥È¤¬Áᤤ¤Î¤Ç¤ä¤Ï¤ê¥×¥é¥°¥¤¥ó·Á¼°¤Ë¤·¤Æ¤ª¤¤¤¿Êý¤¬¤¤¤¤¡£¤Ê¤Î¤Ç¡¢³ÈÄ¥¥Ý¥¤¥ó¥È¤È¤¤¤¦¤«¡¢¤Ç¤­¤ë¤³¤È¤ò¥á¥â¤·¤Æ¤ª¤­¤Þ¤¹¡£


°Ê²¼¤Î4¤Ä¤ÎÊýË¡¤È¤½¤ì¤¾¤ì¤ÎÎã¤ò¾Ò²ð¤·¤Þ¤¹¡£


¾¤ËÊýË¡¤¬¤¢¤ì¤Ð¥³¥á¥ó¥È¤¯¤À¤µ¤¤¡£¡Ê¤½¤ì¤¬ÌÜŪ



¥Æ¡¼¥Þ¤Ç¸«¤¿ÌܤòÊѤ¨¤ë

¤³¤ì¤¬°ìÈÖ´Êñ¡£

Î㤨¤Ð¡¢¥Á¥±¥Ã¥È¤ÎÍúÎò¤Ã¤Æ¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¤³¤ó¤Ê´¶¤¸¤Ç¡¢¥Ñ¥Ã¤È¸«¤Ç¤¤¤¯¤Ä¤¢¤ë¤Î¤«Ê¬¤«¤ê¤Å¤é¤¤¡£

¶èÀÚ¤êÀ褬¥æ¡¼¥¶Ì¾¤ÈÊѹ¹ÆâÍÆ¤Î´Ö¤ËÆþ¤Ã¤Æ¤¤¤ë¤³¤È¤¬¸¶°ø¤À¤È¹Í¤¨¤é¤ì¤Þ¤¹¡£

f:id:suer:20100119205638p:image


¤½¤³¤Ç¡¢¥Æ¡¼¥Þ¤òºî¤Ã¤Æ¸«¤ä¤¹¤¯¤¹¤ë¤³¤È¤ò¹Í¤¨¤Þ¤¹¡£

1.´û¸¥Æ¡¼¥Þ¤ò¥³¥Ô¡¼

¤Þ¤º¡¢theme ¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î´û¸¤Î¥Æ¡¼¥Þ¤ò¥³¥Ô¡¼¤·¤Þ¤¹¡£

  $ cd Redmine¥¤¥ó¥¹¥È¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê/pulbic/themes/
  $ cp -R alternate newtheme

2.¥¹¥¿¥¤¥ë¥·¡¼¥È¤ÎÊÔ½¸

newtheme/stylesheets/application.css ¤Ë¤Ï¤³¤ó¤Ê´¶¤¸¤ÇÄɵ­¤·¤Þ¤¹¡£

/* history */
div#history {
  border: solid 1px #898989;
  background-color: #dedede;
}

div#history h3 {
  border-bottom: solid 1px #898989;
}

div#history .journal {
  border-bottom: solid 1px #898989;
  padding-left: 10px;
}

3.¥Æ¡¼¥Þ¤ÎÊѹ¹

´ÉÍý¼Ô¸¢¸Â¤Ç ´ÉÍý>ÀßÄê>ɽ¼¨(¥¿¥Ö) ¤è¤ê¡¢¡Ö¥Æ¡¼¥Þ¡×¤ò ¡Önewtheme¡×¤Ë¤·¤Þ¤¹

f:id:suer:20100119205738p:image

4.·ë²Ì¤Î³Îǧ

¤³¤ó¤Ê´¶¤¸¤Ë¤Ê¤ê¤Þ¤¹¡£

f:id:suer:20100119205739p:image


¥×¥é¥°¥¤¥ó¤Çɽ¼¨¤òÄɲÃ(View Hooks)

Redmine ¤Ï¥×¥é¥°¥¤¥ó¤Ç³ÈÄ¥¤¹¤ë¤³¤È¤¬°Õ¼±¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

View Hook ¤Ï¤¢¤é¤«¤¸¤áÄê¤á¤é¤ì¤¿¾ì½ê¤Ë¥×¥é¥°¥¤¥ó¤«¤éɽ¼¨¹àÌܤÎÄɲäò²Äǽ¤È¤¹¤ëµ¡¹½¤Ç¤¹¡£

Hook¤Î°ìÍ÷¤Ï Redmine - Hooks - Redmine ¤Ë¤¢¤ê¤Þ¤¹¡£

¤Þ¤¿,

 $ rake redmine:plugins:hook_list

¤Ç¤â³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¤³¤³¤Ç¤Ï :view_account_left_bottom ¤ò»È¤Ã¤Æ¡¢¥¢¥«¥¦¥ó¥È¾ðÊó¤Îº¸²¼¤ËôÅö¥Á¥±¥Ã¥È¿ô¤òɽ¼¨¤·¤Æ¤ß¤Þ¤¹¡£

¥Ç¥Õ¥©¥ë¥È¤Ï¤³¤ó¤Ê´¶¤¸¤Ç¤¹¡£

f:id:suer:20100119213409p:image

1.¥×¥é¥°¥¤¥ó¤ÎºîÀ®

¥×¥é¥°¥¤¥ó¤ÎºîÀ®ÊýË¡¤Î¾ÜºÙ¤Ï Redmine ¥×¥é¥°¥¤¥ó³«È¯ÆþÌç - mallowlabs¤ÎÈ÷˺Ͽ ¤ò»²¾È¡£

$ ruby script/generate redmine_plugin AccountTichets

2.¥ê¥¹¥Ê¤ÎºîÀ®

vendor/plugins/redmine_account_tichets/lib/account_listener.rb ¤È¤·¤Æ°Ê²¼¤Î¥ê¥¹¥Ê¤òºîÀ®¤·¤Þ¤¹¡£

class AccountListener < Redmine::Hook::ViewListener
  def view_account_left_bottom(context)
    user = context[:user] 
    assigned_issues = Issue.visible.open.find(:all,
                         :conditions => {:assigned_to_id => User.current.id})
    reported_issues = Issue.visible.find(:all,
                         :conditions => {:author_id => User.current.id })
    html = ''
    html << '<h3>Tickets</h3><ul>'
    html << '<li>assigned: ' + assigned_issues.size.to_s + ' Tickets</li>'
    html << '<li>reported: ' + reported_issues.size.to_s + ' Tickets</li>'
    html << '</ul>'
    html
  end
end
  • ViewHook¤òÍøÍѤ¹¤ë¤Ë¤Ï Redmine::Hook::ViewListener ¤ò·Ñ¾µ¤·¤¿¥ê¥¹¥Ê¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£
  • :view_account_left_bottom ¤Ë¥Õ¥Ã¥¯¤¹¤ë¾ì¹ç¤Ï view_account_left_bottom ¤È¤¤¤¦¥á¥½¥Ã¥É¤Ë¤·¤Þ¤¹¡£
  • view_account_left_bottom ¤Î°ú¿ô¤Ï¥Ï¥Ã¥·¥å¤Ç¡¢Redmine - Hooks - Redmine ¤Î Context ¤ËÁêÅö¤·¤Þ¤¹¡£context[:user]¤Ç User¥ª¥Ö¥¸¥§¥¯¥È¤¬¼èÆÀ¤Ç¤­¤Þ¤¹¡£¤³¤Î¾ì¹ç¤Ï¥í¥°¥¤¥ó¥æ¡¼¥¶ËܿͤǤ¹
  • ViewListener ¤Î¥á¥½¥Ã¥É¤Ï HTML¤òÊÖ¤¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡£ÊÖ¤µ¤ì¤¿HTML¤Ï¤½¤Î¤Þ¤Þ³ºÅö²Õ½ê¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
3.¥ê¥¹¥Ê¤ÎÅÐÏ¿

plugin¥Ç¥£¥ì¥¯¥È¥êľ²¼¤Îinit.rb ¤Ç require ¤¹¤ë¤À¤±¤Ç¤¹¡£

require 'redmine'
require 'account_listener'  # ¤³¤³¤òÄɲÃ

Redmine::Plugin.register :redmine_account_tichets do
  name 'Redmine Account Tichets plugin'
  author 'Author name'
  description 'This is a plugin for Redmine'
  version '0.0.1'
end
4.Redmine ¤òºÆµ¯Æ°¤·¤Æ³Îǧ

¥×¥é¥°¥¤¥ó¤ÎÈ¿±Ç¤Ë¤ÏºÆµ¯Æ°¤¬É¬ÍפǤ¹¡£

º¸²¼¤ËôÅöÃæ¤Î¥Á¥±¥Ã¥È¿ô¤ÈÊó¹ð¤·¤¿¥Á¥±¥Ã¥È¿ô¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£

f:id:suer:20100119213410p:image


¥×¥é¥°¥¤¥ó¤Ç¸À¸ì¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­

¸À¸ì¥Õ¥¡¥¤¥ë(config/locales/*.yml)¤ÎÆâÍÆ¤Ï¡¢¥×¥é¥°¥¤¥ó¤ÎÊý¤¬Í¥À褵¤ì¤Þ¤¹¡£

¤³¤ì¤òÍøÍѤ·¤ÆÊ¸¸À¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

1. ¥×¥é¥°¥¤¥óºîÀ®

¾åµ­¤ÈƱÍͤ˥³¥Þ¥ó¥É¤ÇºîÀ®¤·¤Þ¤¹¡£

  $ ruby script/generate redmine_plugin LiteralOverwrite


2. ¸À¸ì¥Õ¥¡¥¤¥ë¤ÎºîÀ®

vendor/plugins/redmine_literal_overwrite/config/locales/ja.yml ¤òºîÀ®¤·¡¢°Ê²¼¤Î¤è¤¦¤Ë config/locales/ja.yml ¤Ë¤¢¤ë¹àÌܤò¾å½ñ¤­¤·¤Þ¤¹¡£

ja:
  field_tracker: ¥Á¥±¥Ã¥È¼ïÊÌ
  field_tilte: ¥¿¥¤¥È¥ë
  field_description: ¾ÜºÙ 
  field_status: ¾õÂÖ
3. Redmine ¤òºÆµ¯Æ°¤·¤Æ³Îǧ

¤³¤ó¤Ê´¶¤¸¤Çʸ¸À¤¬ÊѤï¤ê¤Þ¤¹¡£

f:id:suer:20100120235824p:image

¥×¥é¥°¥¤¥ó¤Çrhtml¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­

¤É¤¦¤·¤è¤¦¤â¤Ê¤¤¾ì¹ç¤Ï¤â¤È¤«¤é¤¢¤ërhtml¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤·¤Æ¤·¤Þ¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£

¤¿¤À¤·¡¢¤³¤ÎÊýË¡¤ÏËÜÂΤ¬¥¢¥Ã¥×¥Ç¡¼¥È¤·¤¿¤È¤­¤Ë¡¢¤â¤È¤Î¥Õ¥¡¥¤¥ë¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤ë¤³¤È¤Ëµ¤¤Å¤«¤Ê¤«¤Ã¤¿¤ê¡¢¤â¤È¤Î¥Õ¥¡¥¤¥ë¤¬¾Ã¤µ¤ì¤Æ¡¢¤â¤¦»È¤ï¤ì¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤¿¤ê¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Çµ¤¤òÉÕ¤±¤Þ¤·¤ç¤¦¡£

¤³¤³¤Ç¤Ï¡¢¥Á¥±¥Ã¥È²èÌ̤ΠAtom ¤Î¥ê¥ó¥¯¤òºï½ü¤·¤Þ¤¹¡£

1. ¥×¥é¥°¥¤¥ó¤ÎºîÀ®

¾åµ­¤ÈƱ¤¸¤Ç¤¹¡£

 $ ruby script/generate redmine_plugin IssueViewOverwrite

2. ¤â¤È¤Î¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼¤¹¤ë

¥Á¥±¥Ã¥È²èÌÌ¤Ï app/views/issues/show.rhtml ¤Ç¤¹¡£

¤³¤ì¤ò¡¢¥×¥é¥°¥¤¥ó¥Ç¥£¥ì¥¯¥È¥ê¤Ë¡¢¤Þ¤Ã¤¿¤¯Æ±¤¸¹½Â¤¤ÇÇÛÃÖ¤·¤Þ¤¹¡£

°ì¤«¤é½ñ¤­Ä¾¤¹¤è¤ê¤Ï¤â¤È¤Î¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼¤·¤ÆÊÔ½¸¤¹¤ë¤Û¤¦¤¬³Ú¤Ç¤¹¡£¡Ê¥é¥¤¥»¥ó¥¹¤ËÃí°Õ¡Ë

 $ mkdir vendor/plugins/redmine_issue_view_overwrite/app/views/issues
 $ cp app/views/issues/show.rhtml vendor/plugins/redmine_issue_view_overwrite/app/views/issues

3. ¾å½ñ¤­¤¹¤ë¥Õ¥¡¥¤¥ë¤ÎÊÔ½¸

vendor/plugins/redmine_issue_view_overwrite/app/views/issues/show.rhtml ¤òÊÔ½¸¤·¤Þ¤¹

¤â¤È¤Î¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤¢¤¿¤ê¡£

<% other_formats_links do |f| %>
        <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
        <%= f.link_to 'PDF' %>
<% end %>
<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>

<% content_for :sidebar do %>    <%= render :partial => 'issues/sidebar' %>
<% end %>
<% content_for :header_tags do %>
    <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %>
    <%= stylesheet_link_tag 'scm' %>
<% end %>

¤³¤³¤«¤é Atom ¤Î½ÐÎÏÉôʬ¤òºï½ü¤·¤Þ¤¹¡£

<% other_formats_links do |f| %>
        <%= f.link_to 'PDF' %>
<% end %>
<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
<% content_for :sidebar do %>
    <%= render :partial => 'issues/sidebar' %>
<% end %>
<% content_for :header_tags do %>
    <%= stylesheet_link_tag 'scm' %>
<% end %>
4. Redmine¤òºÆµ¯Æ°¤·¤Æ³Îǧ

¤³¤Î¤è¤¦¤Ë±¦²¼¤¬PDF¤À¤±¤Ë¤Ê¤ê¤Þ¤¹¡£

f:id:suer:20100119222234p:image

¤Þ¤È¤á

  • ¥Æ¡¼¥Þ -> CSS¤À¤±¤ÇºÑ¤à(HTML¥¿¥°¤¬Áý¤¨¤¿¤ê¸º¤Ã¤¿¤ê¤·¤Ê¤¤)¾ì¹ç
  • ViewHook -> ¥Õ¥Ã¥¯¥Ý¥¤¥ó¥È¤¬ÍѰդµ¤ì¤Æ¤¤¤ë¾ì¹ç
  • ¸À¸ì¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­ -> ¸ÇÄê¤Îʸ¸À¤òÊѤ¨¤ë¾ì¹ç
  • rhtml¥Õ¥¡¥¤¥ë¾å½ñ¤­ -> ºÇ¸å¤Î¼êÃÊ

¤È¤¤¤¦´¶¤¸¤Ç¤¹¡£

¤â¤Ã¤È¥¨¥ì¥¬¥ó¥È¤ÊÊýË¡¤¬¤¢¤ì¤Ð¥³¥á¥ó¥È¤¯¤À¤µ¤¤¡£


ÆþÌçRedmine Linux/WindowsÂбþ
Á°ÅÄ ¹ä
½¨ÏÂ¥·¥¹¥Æ¥à
Çä¤ê¾å¤²¥é¥ó¥­¥ó¥°: 112182

¥¹¥Ñ¥àÂкö¤Î¤¿¤á¤Î¥À¥ß¡¼¤Ç¤¹¡£¤â¤·¸«¤¨¤Æ¤â²¿¤âÆþÎϤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤
¥²¥¹¥È


²èÁüǧ¾Ú