REPLACEBRTAG = false
# ファイルの書き込み時にENTRYのIDおよびURLを、FEEDオブジェクトから自動生成した値に置換するか否か
REPLACEENTRYIDANDURL = false
+# プラグインディレクトリ
+PLUGINDIR = "./plugins/"
# EXPERIMENTAL AREA START
TO_HTML_ENTRYTEMPLATE = 'htmltemp/diary.html.erb'
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
end
end
+# = Pluginクラス
+#
+# プラグインの処理を行うクラスです
+class FeedGenPluginManager
+ def self.exec(mode, feed, entries)
+ l_feed = feed.dup.freeze
+ l_entries = entries.dup.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.exec(l_feed, l_entries)
+ end
+ end
+end
+
# = Controllerクラス
#
# コントローラ部分に相当する処理を受け持つクラスです
# + ... 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
db["error"] = "日記の新規追加に失敗しました。"
params["mode"] = "error"
+ else
+ # 成功時はプラグイン処理を実施する
+ FeedGenPluginManager.exec("newentry", db["feed"], db["entry"])
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
db["error"] = "日記の編集処理に失敗しました。<br>該当の日記が既に存在しない可能性があります。"
params["mode"] = "error"
+ else
+ # 成功時はプラグイン処理を実施する
+ FeedGenPluginManager.exec("editentry", db["feed"], db["entry"])
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", db["feed"], db["entry"])
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"
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"])
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"])
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