#!/usr/bin/ruby
require 'erb'
require 'rss'
require '../../bin/rss_cdata.rb'
require '../../bin/newsparser.rb'

# Layout class
class Layout
  extend ERB::DefMethod
  def_erb_method('layout', '../../template/layout-errata.html.erb')
end

# 
urlhead="http://vinelinux.org/"
erratadir="./"
tmpdir = '../../template/'

header=File.open("../../template/header.tmpl")
footer=File.open("../../template/footer.tmpl")

curdir = File.basename(Dir.pwd)

# Create rss object
rss = RSS::Maker.make("1.0") do |maker|
  maker.channel.about = "http://vinelinux.org/errata/#{curdir}/rss"
  maker.channel.title = "エラッタ情報(#{curdir})"
  maker.channel.description = "Vine Linux #{curdir} のセキュリティ及びバグ更新情報です"
  maker.channel.link = "http://vinelinux.org/errata/#{curdir}/"
  maker.items.do_sort = true

# create errata indexhtml contents
errataindex = <<EOF
<h1>Vine Linux #{curdir} のエラッタ情報</h1>
<div class="errata">
<table>
  <tr>
   <th>日付</th>
   <th>内容</th>
   <th>対象</th>
  </tr>
EOF

# create all errata page
Dir.open(erratadir) { |dir|
 for filename in dir.grep(/.dat$/).sort.reverse

  errata = NewsParser.new IO.read(erratadir+filename)
  titletext = errata.item['title'].gsub("\n","").gsub(/<[^>]+>/,"").strip
  $header_title = 'Vine Linux Errata - '+titletext

  # index content
  errataindex += <<-EOF
  <tr>
   <td>[#{errata.item['date']}]</td>
   <td><a href="/errata/#{curdir}/#{filename.gsub(/.dat/,".html")}">
       #{errata.item['title']}</a></td>
   <td>#{errata.item['target']}</td>
  </tr>
  EOF

  # rss
  rssitem = maker.items.new_item
  rssitem.link = urlhead+"errata/#{curdir}/#{filename.gsub(/.dat/,".html")}"
  rssitem.title = errata.item['title']
  rssitem.date = Time.parse(errata.item['date'].gsub(/\,/,"/"))
  rssitem.dc_date = Time.parse(errata.item['date'].gsub(/\,/,"/"))
  rssitem.content_encoded = errata.item['info']

  # errata page content
  erratahtml = <<-EOF
  <h1>#{errata.item['title']}</h1>
  <div class="ads-middle-linkunit">
<script type="text/javascript"><!--
google_ad_client = "pub-0334540465096658";
/* vinelinux link-unit */
google_ad_slot = "4566651758";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
  </div>
  <div align="right">発行日:#{errata.item['date']}</div>
  <div class="errata">
  <dl>
    <dt>対象 (Vine Linuxバージョン):</dt>
    <dd><p>#{errata.item['target']}</p></dd>
    <dt>内容:</dt>
    <dd>#{errata.item['info']}</dd>
    <dt>修正済パッケージ/ファイル:</dt>
    <dd><pre>
#{errata.item['update']}
    </pre></dd>
    <dt>入手先:</dt>
    <dd>#{'update-watch, ' if curdir != "4x"}synaptic または apt-get でアップグレードすることができます。
    <pre>
# apt-get update
# apt-get upgrade
    </pre>
    該当するパッケージをインストールしていない場合は、
    更新の必要はありません。<br />
    また、各ミラーサイトの
    <pre>
#{errata.item['directory']}
    </pre>
    からも個別に入手することができます。
    </dd>
    <dt>関連URL:</dt>
    <dd><ul>
  EOF

  errata.item['url'].each do |line|
    erratahtml += "    <li><a href=\"#{line}\">#{line}</a></li>\n"
  end

  erratahtml += <<-EOF
    </ul></dd>
  </dl>
  </div>
  EOF

  # wrtite errata page
  template = ERB.new(erratahtml)
  newfile = open(filename.gsub(/.dat/,".html"), "w")
  newfile.puts Layout.new.layout { template.result }
  newfile.close
 end
}

errataindex += <<EOF
</table>
</div>
EOF

# write errata indexhtml
template = ERB.new(errataindex)
errataindexhtml = open("index.html", "w")
errataindexhtml.puts Layout.new.layout { template.result }
errataindexhtml.close

end

# write errata rss
File.open("errata#{curdir}.rdf", "w") do |file|
  file.puts rss.to_s
end
