change plugins
[opensuse:myopensuse.git] / vendor / plugins / bugzilla / app / controllers / widgets / bugzilla_controller.rb
1 class Widgets::BugzillaController < WidgetController
2
3   before_filter :load_widget
4   LIMIT = 10
5
6   def index
7     @items = get_bugs( @widget.get_config_value( :url ) )
8     render :partial => "widget/default", :locals =>  {:item_partial => 'widget/default_item',  :widget => @widget }
9   end
10   
11   def self.default_options
12     options = Array.new
13     options << {:name => 'URL', :default_value => 'https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&product=openSUSE+11.1&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&bug_status=NEW&bug_status=ASSIGNED&bug_status=NEEDINFO&bug_status=REOPENED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=-7d&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=&ctype=csv',
14       :type => 'string', :info => 'Query url (copy from bugzilla result page and add \'&ctype=csv\')'}
15     options << {:name => 'Title', :default_value => 'Bugzilla', :type => 'string', :info => 'headline'}
16     options << {:name => 'Subtitle', :default_value => 'Latest Bugs for 11.1', :type => 'string', :info => 'sub headline'}
17     options
18   end
19
20
21 private
22
23   def get_bugs url
24     cache_key = 'bugzilla-' + Digest::MD5.hexdigest(url)
25     items = Rails.cache.read(cache_key)
26     if (items.nil?)
27       logger.debug "Cache miss for Bugzilla at #{url[0..160]}"
28       response = RedirectFollower.new(url).resolve
29       #logger.debug response.body
30       items = Array.new
31       response.body.lines.entries[1..(LIMIT)].each do |line|
32           csvitems = line.split( ',' )
33           items << {:link => "https://bugzilla.novell.com/show_bug.cgi?id=#{csvitems[0]}", :prefix => csvitems[0], 
34             :summary => csvitems[6] + " (#{csvitems[4]})"}
35       end
36       Rails.cache.write(cache_key, items, :expires_in => 5.minutes)
37     end
38     items
39   end
40
41
42 end