チケットリストにビデオサムネイルが付く感じ?
前記事で録画チケットから視聴するためのリストビューをredmineプラグインで作ったけどオリンピックとかひたすら録画したら結構な数になった。そろそろ録画ビデオの検索機能が欲しくなった。
ということで、チケットをクエリ検索するのと同じ感覚の録画リストを作ってみた。
プロジェクトメニュー
今までのControllerやViewはそのままに、今回作ったプラグインビューはプロジェクトメニューで表示されるようにした。いろんなアプローチ方法があるって言うのが便利かなと思って。
init.rb
# Project Menu
menu :project_menu, :videos_show, { :controller => 'video', :action => 'show' },
:caption => "Videos", :param => :project_id, :after => :overview
permission :videos_show, {:video => :show}, :public => true
Redmine::MenuManager.map :project_menu do |menu|
menu.delete :activity
end
そしてパーミッションは特に指定する必要がないんでパブリックです。
ついでに、活動(activity)メニューが邪魔なので消しました。
そこにVideosメニューが代わりに入る感じ。
活動メニューは仕事では結構便利だけど、この録画システムではすごい数のチケットが毎日登録されていて、その情報が表示されるとすごい時間がかかる。間違って押してしまうと暫く動かない。目的にそぐわないんで消してしまった。
改良版コントローラ
app/controllers/video_controller.rb
# -*- coding: utf-8 -*-
class VideoController < ApplicationController
menu_item :videos_show, :only => [:show]
menu_item :videos_index, :only => [:index]
menu_item :videos_view, :only => [:list]
unloadable
helper :queries
include QueriesHelper
helper :repositories
include RepositoriesHelper
helper :sort
include SortHelper
include IssuesHelper
def index
@issues = get_video_issues
end
def list
# @issues = get_video_issues
@issue_pages, @issues = get_video_issues_paginate
end
def play
@issue = Issue.find(params[:id])
end
def podcast
@issues = get_public_issues
render :layout => false, :content_type => 'text/xml'
end
def get_public_issues
Issue.find(:all, :conditions => {:tracker_id => 3, :status_id => 6}, :order => "start_date DESC")
end
def get_video_issues
Issue.find(:all, :conditions => {:tracker_id => 3, :status_id => 4}, :order => "start_date DESC")
end
def get_video_issues_paginate
paginate(:issue, :per_page => 5,
:conditions => {:tracker_id => 3, :status_id => 4}, :order => "start_date DESC")
end
def show
@project = Project.find(params[:project_id])
retrieve_query
sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
sort_update(@query.sortable_columns)
if @query.valid?
@limit = per_page_option
@issue_count = @query.issue_count
@issue_pages = Paginator.new self, @issue_count, @limit, params['page']
@offset ||= @issue_pages.current.offset
@issues = @query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
:order => sort_clause,
:offset => @offset,
:limit => @limit)
@issue_count_by_group = @query.issue_count_by_group
end
#render :template => 'issues/index', :layout => !request.xhr?
end
end
前記事から書き加えたのは以下のような感じ。
menu_item :videos_show, :only => [:show] menu_item :videos_index, :only => [:index] menu_item :videos_view, :only => [:list]このmenu_item云々を付けておかないとメニュー押したときに選択状態にならないんだね。あとは、
helper :queries include QueriesHelper helper :repositories include RepositoriesHelper helper :sort include SortHelper include IssuesHelper と def showの部分。
この辺りは、redmine/app/controllers/issues_controller.rbのindexアクションを参考に必要な部分だけにした感じ。
クエリ機能とついでにページ機能も付いた。
app/views/show.html.erb
app/views/_list.html.erb
ここは、
redmine/app/views/issues/index.html.erb
redmine/app/views/issues/_list.html.erb
をコピペして多少のパッチを当てただけなのでソースは載せません。
パッチした部分は以下の通り。
index.html.erb
<%= form_tag({ :controller => 'issues', :action => 'index', :project_id => @project }, を <%= form_tag({ :controller => 'video', :action => 'show', :project_id => @project }, と <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query} %> を <%= render :partial => 'video/list', :locals => {:issues => @issues, :query => @query} %>あとはcsvとか別フォーマットで出力する場合のところや、atomのところとか、call_hookのところとかを削除して終わり。
最初はsidebarの追加コードを外してたんだけれど、付けてみたらすごい便利になった。
普通のチケットとして扱えて、録画ファイルが添付されているチケットはサムネイルが表示されて、クリックするとビデオ視聴できる。
_list.html.erb
テーブルヘッダのチェックボックスのところをコメントアウトして、テーブル本体を
<!--<td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>--> <td><% thumb = issue.attachments.detect {|a| a.content_type == "image/jpg"} %> <% if !thumb.nil? %> <%= link_to image_tag("/videos/"+thumb.disk_filename), {:action => 'play', :id => issue.id } %> <% end %></td>こんな感じにリプレース。
image_tagでサムネイル表示して、playアクションへのリンクにした。
なんか、初めからこうすれば良かったってくらい馴染んだ感じになった。
検索できるし、ソートできるし、ページもあるし。
最初はよくわからないまま始めたんで要領が悪かったけど、少しずつ分かってくると、こうすれば楽じゃんっていう発想が出来るようになってくるもんだよね。
0 件のコメント:
コメントを投稿