From 5875352444851255d99d99001fbd05b4ec7ccce7 Mon Sep 17 00:00:00 2001 From: elixirel Date: Thu, 7 Jul 2011 16:38:08 +0900 Subject: [PATCH] - Plugin function added. - Multi login added. --- erbtemp/login.html.erb | 5 +- erbtemp/stylesheet.css | 1 + feedgenerator.rb | 180 +++++++++++++++++++++++++----------------------- htmltemp/diary.html.erb | 6 -- htmltemp/main.html.erb | 10 --- 5 files changed, 97 insertions(+), 105 deletions(-) delete mode 100644 htmltemp/diary.html.erb delete mode 100644 htmltemp/main.html.erb diff --git a/erbtemp/login.html.erb b/erbtemp/login.html.erb index 746d539..a699e25 100644 --- a/erbtemp/login.html.erb +++ b/erbtemp/login.html.erb @@ -31,10 +31,7 @@ - <% if (cgi["loginid"] != LOGINID || cgi["password"] != PASSWORD) && (cgi["loginid"] != "" || cgi["password"] != "") %> -
- ID/PASSWORDが違います! - <% end %> +

diff --git a/erbtemp/stylesheet.css b/erbtemp/stylesheet.css index 537036f..101e819 100644 --- a/erbtemp/stylesheet.css +++ b/erbtemp/stylesheet.css @@ -11,6 +11,7 @@ body { text-align: center; margin-left: auto; margin-right: auto; + -webkit-text-size-adjust: none; } table { diff --git a/feedgenerator.rb b/feedgenerator.rb index e3fb316..837a061 100644 --- a/feedgenerator.rb +++ b/feedgenerator.rb @@ -17,10 +17,10 @@ require 'time' require "date" require "fileutils" -# ログインID -LOGINID = "login" -# ログインパスワード -PASSWORD = "password" +# ログイン情報配列 +LOGININFO = [ +{:id => "login", :password => "password", :name => "テストユーザ"} +] # インターフェースのテーブルの幅 TABLEWIDTH = 1000 # XMLファイル格納先までの相対パス @@ -45,11 +45,8 @@ REPLACEBRTAG = false 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 -
Copyright(c) 2009 Kureha.H (http://lunardial.sakura.ne.jp/) & Yui Naruse (http://airemix.com/)" @@ -71,10 +68,10 @@ class Object 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| @@ -229,20 +226,20 @@ class Feed < AbstractEntry 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" @@ -252,7 +249,7 @@ class Feed < AbstractEntry end end end - when "entry" + when "entry" # Entry要素は無視します else # 上記判定以外の全要素は配列に格納します @@ -398,11 +395,11 @@ class Entry < AbstractEntry 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 # 上記判定以外の全要素は配列に格納します @@ -625,9 +622,9 @@ class LogList 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 @@ -697,16 +694,18 @@ end # # プラグインの処理を行うクラスです 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 @@ -724,7 +723,7 @@ class Controller # + ... and more case params["mode"] # ログ選択画面 - when "logselect" + when "logselect" session["filepath"] = params["logpath"] db["loglist"] = LogList.readxml(LISTXMLPATH) # 初期状態で選択されるログは「loglist.xml」の最上に位置するログになります @@ -733,15 +732,15 @@ class Controller 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 @@ -749,10 +748,10 @@ class Controller 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 @@ -763,21 +762,21 @@ class Controller 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 @@ -785,9 +784,9 @@ class Controller 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 @@ -798,22 +797,25 @@ class Controller 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"] = "日記の編集処理に失敗しました。
該当の日記が既に存在しない可能性があります。" 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"])) @@ -825,17 +827,17 @@ class Controller 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 @@ -844,12 +846,12 @@ class Controller 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"] @@ -873,7 +875,7 @@ class Controller # 新たな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"] @@ -890,10 +892,10 @@ class Controller 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 @@ -901,7 +903,7 @@ class Controller params["action"] = "" end # 削除処理 - when "delexec" + when "delexec" if cgi["logdelindex"].to_i < 1 params["action"] = "" params["mode"] = "error" @@ -920,7 +922,7 @@ class Controller end # 編集画面 - when "edit" + when "edit" db["logeditindex"] = params["logdelindex"].to_i db["logpath"] = db["loglist"].path[db["logeditindex"]] @@ -931,7 +933,7 @@ class Controller params["action"] = "" end # 編集確認画面 - when "editconfirm" + when "editconfirm" checkflag = true db["loglist"].path.each_with_index do |val, i| if db["logeditindex"] != i @@ -951,7 +953,7 @@ class Controller 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 @@ -998,14 +1000,14 @@ class Controller 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" @@ -1013,7 +1015,7 @@ class Controller # 全ファイルの初期化を実行する # loglist.xmlの初期化 - loglist = LogList.new(["最新の記事"], ["#{FEEDXMLDIR}diary.xml"], LISTXMLPATH) + loglist = LogList.new(["最新の記事"], ["#{FEEDXMLDIR}#{INITIALXML}"], LISTXMLPATH) loglist.to_xml db["loglist"] = LogList.readxml(LISTXMLPATH) @@ -1044,7 +1046,7 @@ class Controller # 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 @@ -1072,9 +1074,9 @@ class Controller 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"]) @@ -1122,7 +1124,7 @@ class Controller 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"]) @@ -1172,9 +1174,9 @@ class Controller end # diary.xmlを入れ替える処理 - when "replace" + when "replace" case params["action"] - when "exec" + when "exec" # この段階のエラーに対しては強度のエラーを発する checkflag = true db["logpath"] = Controller.get_mpart_value(cgi["logpath"]) @@ -1198,10 +1200,10 @@ class Controller 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"] @@ -1214,7 +1216,7 @@ class Controller 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"]) @@ -1288,9 +1290,17 @@ def main # コントローラー部分 # セッション管理 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)かつ、ファイルタイプがファイルの場合 @@ -1363,27 +1373,27 @@ def main 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) @@ -1409,7 +1419,7 @@ begin 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\n" + detail end diff --git a/htmltemp/diary.html.erb b/htmltemp/diary.html.erb deleted file mode 100644 index 2f144ca..0000000 --- a/htmltemp/diary.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<tr> -<td><%= title %> / <%= date %></td> -</tr> -<tr> -<td><%= content %></td> -</tr> \ No newline at end of file diff --git a/htmltemp/main.html.erb b/htmltemp/main.html.erb deleted file mode 100644 index d9479d1..0000000 --- a/htmltemp/main.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -<html> - <head> - <title>TESTING</title> - </head> - <body> - <table> - <%= body %> - </table> - </body> -</html> \ No newline at end of file -- 2.11.0