require "date"
require "fileutils"
-# ログインID
-LOGINID = "login"
-# ログインパスワード
-PASSWORD = "password"
+# ログイン情報配列
+LOGININFO = [
+{:id => "login", :password => "password", :name => "テストユーザ"}
+]
# インターフェースのテーブルの幅
TABLEWIDTH = 1000
# XMLファイル格納先までの相対パス
REPLACEENTRYIDANDURL = false
# プラグインディレクトリ
PLUGINDIR = "./plugins/"
-
-# EXPERIMENTAL AREA START
-TO_HTML_ENTRYTEMPLATE = 'htmltemp/diary.html.erb'
-TO_HTML_MAINTEMPLATE = 'htmltemp/main.html.erb'
-# EXPERIMENTAL AREA END
+# 記事用初期ファイル名
+INITIALXML = "diary.xml"
# バージョン情報を示す文字列です
APPVERSION = "- FeedGenerator for Ruby version 2.0.0.0 -<br>Copyright(c) 2009 Kureha.H (<a href=\"http://lunardial.sakura.ne.jp/\" target=\"_blank\">http://lunardial.sakura.ne.jp/</a>) & Yui Naruse (<a href=\"http://airemix.com/\" target=\"_blank\">http://airemix.com/</a>)"
mode = arg[1]
rdonly_p = true
case mode
- when String
+ when String
arg[1] = mode[/[^:]+/] if RUBY_VERSION < "1.8.7" && mode.include?(':')
rdonly_p = /\A[^:]*[wa+]/ !~ mode
- when Numeric
+ when Numeric
rdonly_p = !(mode & (IO::WRONY | IO::RDWR))
end
open(*arg) do |f|
elm.elements.each { |child|
begin
case child.name
- when "id"
+ when "id"
xml[:feedid] = child.text
- when "title", "subtitle", "updated", "rights"
+ when "title", "subtitle", "updated", "rights"
xml[child.name.to_sym] = child.text
- when "author"
+ when "author"
child.elements.each do |gchild|
case gchild.name
- when "name"
+ when "name"
xml[:aname] = gchild.text
- when "email"
+ when "email"
xml[:amail] = gchild.text
end
end
- when "link"
+ when "link"
child.attributes.each do |k, v|
if k == "rel"
if v == "self"
end
end
end
- when "entry"
+ when "entry"
# Entry要素は無視します
else
# 上記判定以外の全要素は配列に格納します
elm.elements.each do |child|
begin
case child.name
- when "id"
+ when "id"
xml[:entryid] = child.text
- when "link"
+ when "link"
xml[:url] = child.attributes["href"]
- when "title", "summary", "summary", "published", "updated", "content"
+ when "title", "summary", "summary", "published", "updated", "content"
xml[child.name.to_sym] = child.text
else
# 上記判定以外の全要素は配列に格納します
doc.elements.each("list/file") { |elm|
elm.elements.each {|child|
case child.name
- when "display"
+ when "display"
@display.push(child.text)
- when "path"
+ when "path"
@path.push(child.text)
else
# With no action
#
# プラグインの処理を行うクラスです
class FeedGenPluginManager
- def self.exec(mode, feed, entry)
- l_feed = feed.dup.freeze
- l_entry = entry.dup.freeze
+ def self.exec(mode, filepath)
+ feed = Feed.readxml(XMLPATH + filepath)
+ entries = Entry.readxml(XMLPATH + filepath)
+ feed.freeze
+ entries.freeze
Dir.foreach(PLUGINDIR) do |fn|
next unless File.extname(fn) == '.rb'
require File.join(PLUGINDIR, fn)
plugin_name = "FeedGenPlugins::"
plugin_name << File.basename(fn).gsub(/\.rb\Z/, "")
plugin_ins = plugin_name.split(/::/).inject(Object) { |c,name| c.const_get(name) }
- plugin_ins.new.exec(mode, l_feed, l_entry)
+ plugin_ins.new.exec(mode, feed, entries)
end
end
end
# + ... and more
case params["mode"]
# ログ選択画面
- when "logselect"
+ when "logselect"
session["filepath"] = params["logpath"]
db["loglist"] = LogList.readxml(LISTXMLPATH)
# 初期状態で選択されるログは「loglist.xml」の最上に位置するログになります
db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"]))
# 新規記事追加部分
- when "newentry"
+ when "newentry"
case params["action"]
# 確認画面
- when "confirm"
+ when "confirm"
session["target_filepath"] = params["target_filepath"]
db["newentry"] = Entry.new(params)
db["newentry"].content = db["newentry"].content_for_blog
# 記事の追記を実際にファイルに反映
- when "exec"
+ when "exec"
session["target_filepath"] = params["target_filepath"]
successed = Entry.insert(XMLPATH + File.basename(params["target_filepath"]), Entry.new(params))
unless successed
params["mode"] = "error"
else
# 成功時はプラグイン処理を実施する
- FeedGenPluginManager.exec("newentry", db["feed"], Entry.new(params))
+ FeedGenPluginManager.exec("newentry", File.basename(session["filepath"]))
end
# 画面を戻った際の処理
- when "back"
+ when "back"
session["target_filepath"] = params["target_filepath"]
db["newentry"] = Entry.new(params)
else
end
# 記事編集部分
- when "editentry"
+ when "editentry"
case params["action"]
# 編集画面
- when "edit"
+ when "edit"
session["target_filepath"] = params["target_filepath"]
session["editid"] = cgi["editid"].to_s
db["editentry"] = Entry.select(XMLPATH + File.basename(session["target_filepath"]), session["editid"])
# 確認画面
- when "confirm"
+ when "confirm"
session["target_filepath"] = params["target_filepath"]
session["editid"] = cgi["editid"].to_s
db["editentry"] = Entry.new(params)
db["editentry"].content = db["editentry"].content_for_blog
# 記事の変更を実際にファイルに反映
- when "exec"
+ when "exec"
session["target_filepath"] = params["target_filepath"]
successed = Entry.update(XMLPATH + File.basename(params["target_filepath"]), Entry.new(params))
unless successed
params["mode"] = "error"
else
# 成功時はプラグイン処理を実施する
- FeedGenPluginManager.exec("editentry", db["feed"], Entry.new(params))
+ FeedGenPluginManager.exec("editentry", File.basename(session["filepath"]))
end
- when "back"
+ when "back"
session["target_filepath"] = params["target_filepath"]
db["editentry"] = Entry.new(params)
else
end
# 記事削除部分
- when "delentry"
+ when "delentry"
case params["action"]
# 確認画面
- when "confirm"
+ when "confirm"
session["target_filepath"] = params["target_filepath"]
session["delid"] = cgi["delid"].to_s
db["delentry"] = Entry.select(XMLPATH + File.basename(session["target_filepath"]), session["delid"])
# 記事の削除を実際にファイルに反映
- when "exec"
+ when "exec"
session["target_filepath"] = params["target_filepath"]
successed = Entry.delete(XMLPATH + File.basename(params["target_filepath"]), cgi["delid"].to_s)
unless successed
db["error"] = "日記の編集処理に失敗しました。<br>該当の日記が既に存在しない可能性があります。"
params["mode"] = "error"
+ else
+ # 成功時はプラグイン処理を実施する
+ FeedGenPluginManager.exec("delentry", File.basename(session["filepath"]))
end
- when "back"
+ when "back"
session["target_filepath"] = params["target_filepath"]
db["feed"] = Feed.readxml(XMLPATH + File.basename(session["target_filepath"]))
db["entry"] = Entry.readxml(XMLPATH + File.basename(session["target_filepath"]))
end
# Feed情報変更部分
- when "editfeed"
+ when "editfeed"
case params["action"]
# 確認画面
- when "confirm"
+ when "confirm"
session["target_filepath"] = params["target_filepath"]
db["feed"] = Feed.new(params)
# 実際にFeed情報の変更をファイルに反映
- when "back"
+ when "back"
session["target_filepath"] = params["target_filepath"]
db["feed"] = Feed.new(params)
- when "exec"
+ when "exec"
session["target_filepath"] = params["target_filepath"]
Feed.update(XMLPATH + File.basename(params["target_filepath"]), Feed.new(params))
else
end
# ログ編集モード
- when "log"
+ when "log"
# 必ず内部データをリフレッシュする
db["loglist"] = LogList.readxml(LISTXMLPATH)
case params["action"]
# ログファイルの編集を実際にファイルに反映
- when "addexec"
+ when "addexec"
# エラーチェック。この段階のエラーは強度のエラーを発する。
db["loglist"].path.each do |val|
if val == cgi["logpath"]
# 新たなdiary.xmlを生成。この際保持する情報は同一のFeedオブジェクトnew()
Feed.to_xml(XMLPATH + File.basename(db["loglist"].path[0]), db["feed"], [])
# 確認画面
- when "addconfirm"
+ when "addconfirm"
# 入力されたログが既に存在するかを確認
db["loglist"].path.each do |val|
if val == cgi["logpath"]
if db["logpath"].blank? || db["logdisplay"].blank?
params["action"] = ""
end
- when "back"
+ when "back"
# 削除確認画面
- when "delconfirm"
+ when "delconfirm"
db["logdelindex"] = params["logdelindex"].to_i
if db["logdelindex"] < 1
params["action"] = ""
end
# 削除処理
- when "delexec"
+ when "delexec"
if cgi["logdelindex"].to_i < 1
params["action"] = ""
params["mode"] = "error"
end
# 編集画面
- when "edit"
+ when "edit"
db["logeditindex"] = params["logdelindex"].to_i
db["logpath"] = db["loglist"].path[db["logeditindex"]]
params["action"] = ""
end
# 編集確認画面
- when "editconfirm"
+ when "editconfirm"
checkflag = true
db["loglist"].path.each_with_index do |val, i|
if db["logeditindex"] != i
db["logdisplay"] = params["logdisplay"].to_s
end
# 編集実行
- when "editexec"
+ when "editexec"
checkflag = true
db["loglist"].path.each_with_index do |val, i|
if db["logeditindex"] != i
end
# インポートモードの場合の処理
- when "import"
+ when "import"
db["loglist"] = LogList.readxml(LISTXMLPATH)
# リセットモードの場合の処理
- when "reset"
+ when "reset"
case params["action"]
# リセット実行時の処理
- when "exec"
+ when "exec"
file = FileUploader.new
file.filelist().each { |fname|
file.delete(fname) if File.ftype(XMLPATH + fname) == "file"
# 全ファイルの初期化を実行する
# loglist.xmlの初期化
- loglist = LogList.new(["最新の記事"], ["#{FEEDXMLDIR}diary.xml"], LISTXMLPATH)
+ loglist = LogList.new(["最新の記事"], ["#{FEEDXMLDIR}#{INITIALXML}"], LISTXMLPATH)
loglist.to_xml
db["loglist"] = LogList.readxml(LISTXMLPATH)
# loglist.xmlが存在するかチェック
if File.exist?(LISTXMLPATH) == false
# なかった場合はloglist.xmlを自動生成
- loglist = LogList.new(["最新の記事"], ["#{FEEDXMLDIR}diary.xml"], LISTXMLPATH)
+ loglist = LogList.new(["最新の記事"], ["#{FEEDXMLDIR}#{INITIALXML}"], LISTXMLPATH)
loglist.to_xml
Feed.to_xml(XMLPATH + File.basename(loglist.path[0]), Feed.new({}), [])
end
db["loglist"] = LogList.readxml(LISTXMLPATH)
case params["mode"]
# 特定位置に挿入する場合の処理
- when "insert"
+ when "insert"
case params["action"]
- when "exec"
+ when "exec"
# この段階のエラーに対しては強度のエラーを発する
checkflag = true
db["logpath"] = Controller.get_mpart_value(cgi["logpath"])
db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"]))
db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"]))
- when "confirm"
+ when "confirm"
# 入力されたログファイルパスが既に存在するかを確認
checkflag = true
db["logpath"] = Controller.get_mpart_value(cgi["logpath"])
end
# diary.xmlを入れ替える処理
- when "replace"
+ when "replace"
case params["action"]
- when "exec"
+ when "exec"
# この段階のエラーに対しては強度のエラーを発する
checkflag = true
db["logpath"] = Controller.get_mpart_value(cgi["logpath"])
end
# diary.xmlを移動します
- FileUtils.move(XMLPATH + "diary.xml", XMLPATH + File.basename(db["logpath"]))
+ FileUtils.move(XMLPATH + INITIALXML, XMLPATH + File.basename(db["logpath"]))
# ファイルをアップロードします
file = FileUploader.new
- file.upload("diary.xml", db["importxml"])
+ file.upload(INITIALXML, db["importxml"])
# loglist.xmlを更新します
db["loglist"].path[1, 0] = db["logpath"]
db["feed"] = Feed.readxml(XMLPATH + File.basename(session["filepath"]))
db["entry"] = Entry.readxml(XMLPATH + File.basename(session["filepath"]))
- when "confirm"
+ when "confirm"
# 入力されたログファイルパスが既に存在するかを確認
checkflag = true
db["logpath"] = Controller.get_mpart_value(cgi["logpath"])
# コントローラー部分
# セッション管理
if session["login"] != "true"
- if (cgi["loginid"] == LOGINID && cgi["password"] == PASSWORD)
- session["login"] = "true"
-
+
+ # ログイン情報を確認
+ LOGININFO.each {|h|
+ if (cgi["loginid"] == h[:id] && cgi["password"] == h[:password])
+ session["login"] = "true"
+ session["name"] = h[:name]
+ break
+ end
+ }
+
+ if (session["login"] == "true")
# ワークフォルダの中をクリーンアップします
filelist = Dir::entries("./work")
# 削除条件 : 最終変更日時から1日(60*60*24sec)かつ、ファイルタイプがファイルの場合
htmlwriter = HtmlWriter.new("./erbtemp/login.html.erb", binding)
else
case params["mode"]
- when "selectlog"
+ when "selectlog"
htmlwriter = HtmlWriter.new("./erbtemp/select.html.erb", binding)
- when "newentry"
+ when "newentry"
htmlwriter = HtmlWriter.new("./erbtemp/newentry.html.erb", binding)
- when "editentry"
+ when "editentry"
htmlwriter = HtmlWriter.new("./erbtemp/editentry.html.erb", binding)
- when "delentry"
+ when "delentry"
htmlwriter = HtmlWriter.new("./erbtemp/delentry.html.erb", binding)
- when "editfeed"
+ when "editfeed"
htmlwriter = HtmlWriter.new("./erbtemp/editfeed.html.erb", binding)
- when "log"
+ when "log"
htmlwriter = HtmlWriter.new("./erbtemp/log.html.erb", binding)
- when "insert"
+ when "insert"
htmlwriter = HtmlWriter.new("./erbtemp/insertfeed.html.erb", binding)
- when "replace"
+ when "replace"
htmlwriter = HtmlWriter.new("./erbtemp/replacefeed.html.erb", binding)
- when "import"
+ when "import"
htmlwriter = HtmlWriter.new("./erbtemp/indeximport.html.erb", binding)
- when "reset"
+ when "reset"
htmlwriter = HtmlWriter.new("./erbtemp/reset.html.erb", binding)
- when "error"
+ when "error"
htmlwriter = HtmlWriter.new("./erbtemp/error.html.erb", binding)
else
htmlwriter = HtmlWriter.new("./erbtemp/index.html.erb", binding)
rescue => evar
# エラーが発生した場合、それを画面に表示します
detail = ("%s: %s (%s)\n" %
- [evar.backtrace[0], evar.message, evar.send('class')]) +
- evar.backtrace[1..-1].join("\n")
+ [evar.backtrace[0], evar.message, evar.send('class')]) +
+ evar.backtrace[1..-1].join("\n")
puts "content-type: text/html\n\n<plaintext>\n" + detail
end