daybook/daybook/mycgi/daybook/index/d_index.rb
#!/usr/local/bin/ruby
# encoding: utf-8
# d_index.rb
#
# Created by midori on 2006-09-24.
# Copyright (c) 2006. All rights reserved.
# You can distribute/modify this program under the terms of the Ruby License.
# Last change: 2006-10-27.
# 2006-10-25 view_archives changed
#______________________________________________________________ NewINDEX
class NewIndex
include MakeXML
include ReadWrite
def initialize(myhash)
@path_index_file = myhash["path_index_file"]
@path_xml_dir = myhash["dir_xml"]
@path_admin_dir = myhash["dir_admin"]
@path_archive_dir = myhash["dir_xhtml"]
@path_url = myhash["url_archives_dir"]
@path_index_xsl = myhash["f_xsl_index"]
@path_indexhtml = myhash["f_indexhtml"]
@entryview = myhash["entryview"]
@path_log_xml = myhash["f_log_xml"]
@path_archives_xsl = myhash["f_xsl_archives"]
@path_archivehtml = myhash["f_archivehtml"]
@path_xsl = myhash["f_xsl_post"]
@path_admin_xsl = myhash["f_xsl_admin"]
@path_adminhtml = myhash["f_adminhtml"]
@list_element = ["entry/meta/itemcount", "entry/meta/uri", "/entry/meta/metadate/t_i/",
"entry/item/telop","entry/item/subject", "entry/item/date", "entry/item/name", "entry/item/comment/p"]
end
def view_all
view_index
view_archives
view_admin
end
def view_index
list_targetxml = m_common_count_xmlfiles(@path_log_xml)
unless list_targetxml.empty?
list_targetxml = list_targetxml[0..@entryview]
new_index_xml = p_index_xml_make(list_targetxml)
new_index_xhtml = m_apply_xsl_path(new_index_xml, @path_index_xsl)
p_common_xhtml_save( @path_indexhtml, new_index_xhtml )
return "done"
end
end
def view_archives
archives_list_targetxml = m_common_count_xmlfiles(@path_log_xml)
unless archives_list_targetxml.empty?
return p_archives_xml_make(archives_list_targetxml)
end
end
def view_admin
archives_list_targetxml = m_common_count_xmlfiles(@path_log_xml)
unless archives_list_targetxml.empty?
str_xml = p_admin_xml_make(archives_list_targetxml)
str_xhtml = m_apply_xsl_path(str_xml, @path_admin_xsl)
p_common_xhtml_save( @path_adminhtml, str_xhtml )
end
end
private
def p_common_xhtml_save(path_html, str_xhtml)
if FileTest.exist?(path_html)
cash_trash_file = File.join(@path_admin_dir , "daybook_trash", "cash.txt")
File.rename(path_html, cash_trash_file)
end
m_write_file(path_html, str_xhtml)
end
def p_index_xml_make(list_targetxml)
indexdoc = m_make_new_xml("daybookindex")
docroot = indexdoc.root; docroot.add_text("\n")
meta = docroot.add_element("metadate")
meta.add_text(Time.now.to_s); docroot.add_text("\n")
items = docroot.add_element("items")
#---------- Add Every Entry of XML FILE
list_targetxml.each{|f|
onefiledoc = Document.new(File.new( f ))
items.add_text("\n")
item = items.add_element("item")
@list_element.each{|e| item.add_element(onefiledoc.elements[e]) unless onefiledoc.elements[e].nil?}
}
#---------- Add Every Comment of XML FILE
ele_comments = p_makexml_comment
docroot.add_element(ele_comments)
#----------
items.add_text("\n")
docroot.add_text("\n")
return indexdoc.to_s
end
def p_makexml_comment
#----------Temp Hash
h = Hash.new
list_sort = m_common_count_xmlfiles(@path_log_xml)
list_sort.each{|f|
onefiledoc = Document.new(File.new( f ))
# 20060923
urii = onefiledoc.elements["entry/meta/uri"].deep_clone
ssubject = onefiledoc.elements["entry/item/subject"].deep_clone
a = onefiledoc.get_elements("entry/item_comment")
unless a.nil?
a.each{|e|
h[e.elements["date"].text] = [urii, ssubject,
e.elements["date"], e.elements["name"],e.elements["comment/p"]]
}
end
}
#---------- Comments Element
comments = REXML::Element.new( "comments" )
h_sort = h.sort.reverse[0..4]#Recent Comment 1 to 5
h_sort.each{|aray|
item_comment = REXML::Element.new( "item_comment" )
v = aray[1]
v.each{|i| i_name = item_comment.add_element(i.name); i_name.add_text(i.text) }
comments.add_element(item_comment)
}
#----------
return comments
end
def p_admin_xml_make(archives_list_targetxml)
h = Hash.new{|h, key| h[key] = []}
archivesdoc = m_make_new_xml("archives")
docroot = archivesdoc.root
meta = docroot.add_element("metadate")
meta.add_text(Time.now.to_s)
docroot.add_text("\n")
items = docroot.add_element("items")
#----------
archives_list_targetxml.each{|f|
onefiledoc = Document.new(File.new( f ))
entry = REXML::Element.new( "entry" )
@list_element.each{|e| entry.add_element(onefiledoc.elements[e]) unless onefiledoc.elements[e].nil? }
onefiledoc.root.get_elements('item_comment').each{|com|
comments = REXML::Element.new( "comments" )
comments.add_element(com.elements["date"])
comments.add_element(com.elements["postno"])
comments.add_element(com.elements["name"])
entry.add_element(comments)
}
y = onefiledoc.root.elements['meta/metadate/d_y'].text
m = onefiledoc.root.elements['meta/metadate/d_m'].text
metadate = [y,"/",m].to_s
h["#{metadate}"] << entry
}
h_sort = h.sort.reverse
h_sort.each{|ary|
item = items.add_element("item")
year = item.add_element("year")
year.add_text(ary[0].to_s)
ary[1].each{|i| item.add_text(i) }
}
items.add_text("\n")
docroot.add_text("\n")
return archivesdoc.to_s
end
def p_archives_xml_make(archives_list_targetxml)
# 2006-10-25 Make new archives_index.html
entry_hash = Hash.new{|h, key| h[key] = []}
archives_list_targetxml.each{|f|
onefiledoc = Document.new(File.new( f )); entry = REXML::Element.new( "entry" )
@list_element.each{|e| entry.add_element(onefiledoc.elements[e]) unless onefiledoc.elements[e].nil? }
y = onefiledoc.root.elements['meta/metadate/d_y'].text
m = onefiledoc.root.elements['meta/metadate/d_m'].text
metadate = [y,"/",m].to_s
entry_hash["#{metadate}"] << entry
}
#entry_hash = {"2006/09"=>[EntryElement, EntryElement], "2006/10"=>[EntryElement, EntryElement]}
xml_archive = m_make_new_xml("archives")
a_items = m_add_my_element(xml_archive.root, "items", "")
# sort.reverse?
entry_hash.sort.reverse.each{|k, v|
#a_item = m_add_my_element(a_items, "item", "")
a_item = a_items.add_element("item")
m_add_my_element(a_item, "year", k)
#/daybook/daybook_archives/2006/09/a_index.html
path_year_html = File.join(@path_url, k, "a_index.html")
m_add_my_element(a_item, "year_uri", path_year_html)
# year html
xml_year = m_make_new_xml("archives")
items = xml_year.root.add_element("items"); item = items.add_element("item")
year = m_add_my_element(item, "year", k)
v.each{|x| item.add_element(x)}
xhtml_year = m_apply_xsl_path(xml_year.to_s, @path_archives_xsl)
require "fileutils"
path_dir_year = File.join(@path_archive_dir, k)
FileUtils.mkdir_p(path_dir_year)
path_year_html = File.join(path_dir_year, "a_index.html")
p_common_xhtml_save(path_year_html, xhtml_year)
}
str_arc_index_xhtml = m_apply_xsl_path(xml_archive.to_s, @path_archives_xsl)
p_common_xhtml_save(@path_archivehtml, str_arc_index_xhtml)
return xml_archive
end
end