#!/usr/bin/env ruby # coding: euc-jp require "cgi" require "kconv" # euc-jpへの変換のため(toeucメソッド) require "pstore" require 'pg' myname = "eating_bulletin_board.rb" pghost = "localhost" pgport = 5432 pgoptions = nil pgtty = nil dbname = "c112124" dbuser = "c112124" passwd = nil c = CGI.new(:accept_charset => "EUC-JP") id = c.cookies["id"][0].to_s.toeuc pass = c.cookies["pass"][0] table = "group_works_id" cmt = c["comment"] com = c["com"].to_s which = c["which"] trm = c["terms"] place = c["place"] area = c["area"] mst_id = c["mst_id"] mst2_id = c["mst2_id"] index_which = c["index_which"].to_i index_area = c["index_area"].to_i index_terms = c["index_terms"].to_i original_id = c["original_id"] main_mode = c["main_mode"] mode = c["mode"] link = c["link"] del = c["del"].to_s tag = c["tag"].to_i time = Time.now # 時刻を保持するTimeクラス代入。nowは現時刻 edit_id = ARGV[0].to_s.toeuc # 修正モードの場合の修正項目名 oldcomment = "" # 修正モードの場合の既存コメント oldplace = "" oldterms = "" sql = "SELECT * FROM #{table} " conn = PGconn.connect(pghost, pgport, pgoptions, pgtty, dbname, dbuser, passwd) tuple = conn.exec(sql) value = [] id_list = [] x = 0 tuple.each{|line| value = line.values id_list[x] = [value[0].to_s, value[1].to_s] x += 1 } tuple.clear conn.close print 'Content-type: text/html; charset=EUC-JP <html> <head><title>乗せてって掲示板 -koeki network-</title> <link rel="stylesheet" type="text/css" href="../group.css"> <script src="../group_works.js" type="text/javascript"></script> </head> <body onload="initAllPakapaka()"> <div class="base"> <h1>乗せてって掲示板</h1> ' # HTTPヘッダ print' <div class="mgn_b_1ex"> [<a href="javascript:pakapakain(\'index\')">書込みを絞り込む</a>] </div> ' #検索用フォーム print' <div class="pakapakain" id="index"> ' printf('>><a href="./%s?mode=">日付順(全項目表示)</a><<', myname) print' <form method="POST" action="./eating_bulletin_board.rb"> <input name="main_mode" type="hidden" value="on"> 乗せたいor乗りたい?: <input name="index_which" type="radio" value="1" checked>指定なし <input name="index_which" type="radio" value="2">一緒に行こう! <input name="index_which" type="radio" value="3">乗せて! <br> 行き先: <select name="index_area"> <option value="1">-- 指定なし --</option> <option value="5">酒田</option> <option value="7">庄内</option> <option value="11">県内</option> <option value="13">県外</option> </select> 条件など: <select name="index_terms"> <option value="1">-- 指定なし --</option> <option value="31">なし</option> <option value="17">何かおごって下さい!</option> <option value="37">何かおごります!</option> <option value="19">ガソリン代だして下さい!</option <option value="41">ガソリン代出します!</option> <option value="23">ジュース一本で!</option> <option value="29">そのほか</option> </select> <input type="submit" value="OK"> <input type="reset" value="reset"> </form></div> ' # フォーム出力 print' <div class="index"> [<a href="javascript:pakapaka(\'form\')">書きこむ</a>] </div> ' printf('<div class="pakapaka" id="form"><hr><form name="1" method="POST" action="./%s">', myname) printf('<p> <p> ユーザー名: %s <br> </p> <p> 乗せたいor乗りたい?: <input name="which" type="radio" value="2" onclick="entryChange1();" checked="checked">一緒に行こう! <input name="which" type="radio" value="3" onclick="entryChange1();">乗せて! </p> 行き先: <select name="area"> <option value="5">酒田</option> <option value="7">庄内</option> <option value="11">県内</option> <option value="13">県外</option> </select> 施設名: <input class="mgn_2" name="place" type="text" value="' + oldplace + '" maxlength="40"><br> コメント <br> <textarea class="mgn_2" name="comment" cols="50" rows="3">' + oldcomment + ' </textarea><br> 条件など: <select name="terms"> <option value="31">なし</option> <option value="17">何かおごって下さい!</option> <option value="37">何かおごります!</option> <option value="19">ガソリン代だして下さい!</option> <option value="41">ガソリン代出します!</option> <option value="23">ジュース一本で!</option> <option value="29">そのほか</option> </select> <input type="submit" value="OK"> <input type="reset" value="reset"><br> </form></div> ', id) #見出し表示定義 def foo(area, which, z, place, time, terms) if which == "一緒に行こう!" printf(' 投稿者: <span class="user_name">%s</span> %s <br><span class="have"><em>一緒に行こう!</em></span> ', z, time) elsif which == "乗せて!" printf(' 投稿者: <span class="user_name">%s</span> %s <br><span class="want"><em>乗せて!</em></span> ', z, time) end printf(' <span class="mgn_l_2">行き先:<em>%s</em></span> <span class="mgn_l_2">施設名:<em>%s</em></span> <span class="mgn_l_2">条件など:<em>%s</em></span> </a></div> ', area, CGI.escapeHTML(place), terms) end #見出し表示定義終了 no = 0 id_list.each{|ids| if id == ids[0] && pass == ids[1] db = PStore.new("test.db") db.transaction do # PStoreは db.transaction do ... end で使う if !db["test10"] db["test10"] = Hash.new end if !db["minicmt5"] db["minicmt5"] = Hash.new([[]]) end data = db["test10"] # ここまではおきまり data2 = db["minicmt5"] #printf("%d<br>", tag) #printf("%s<br>", del) #printf("%s<br>", data2) #ミニコメントの削除 if del == "72" && id == data2[tag][2] data2 = data2.delete_if{|key, val| key == tag} del = "" end #printf("%s<br>", data2) if id >"" && cmt > "" # 名前とコメント、両方値があるなら登録 if trm == "" trm = "なし" end data[id] = [time, cmt, which, trm, place, area] # 今日の日付とコメント end parmmit = 0 for c2 in data2.keys if data2[c2][4] == original_id parmmit = 1 break end end if id > "" && com > "" && parmmit == 0 c1 = 0 for check in data2.sort{|a, b| a[0] <=> b[0]} if !(c1 == check[0]) break end c1 += 1 end #printf("%d<br>", c1) data2[c1] = [time, com, id, mst_id, original_id] end # printf("%s", data2.sort{|a, b| a[0] <=> b[0]}) if edit_id > "" && data[edit_id] oldcomment = data[edit_id][1] oldplace = data[edit_id][4] oldterms = data[edit_id][3] end #p data2 print'<hr>' # 選択のreal view which_value = {2 => "一緒に行こう!", 3 => "乗せて!"} area_value = {5 => "酒田", 7 => "庄内", 11 => "県内", 13 => "県外"} terms_value = {17 => "おごって下さい!", 19 => "ガソリン代出して下さい!", 23 => "ジュース一本で!", 29 => "そのほか", 31 => "なし", 37 => "何かおごります!", 41 => "ガソリン代出します!"} if !(link == "linked") for k in data.keys.sort{|x, y| data[y][0] <=> data[x][0] # 日付の新しい順にソート } day = data[k][0] # 第0要素が日付 msg = data[k][1] # 第1要素がコメント、それぞれ取り出す which = data[k][2].to_i trm = data[k][3].to_i place = data[k][4] area = data[k][5].to_i #printf("%s", area_value[area]) #検索エンジン if main_mode == "on" t = index_which * index_area * index_terms #printf("%d", t) if t == which || t == trm || t == area || t == (which * trm) || t == (which * area) || t == (trm * area) || t == (which * trm * area) || t == 1 printf('<div class="minibb"><a class="hover" href="./%s?link=linked&mst2_id=%s">', myname, k) foo(area_value[area], which_value[which], k, data[k][4], day.strftime("%Y年%m月%d日(%a) %H:%M:%S"), terms_value[trm]) end else printf('<div class="minibb"><a class="hover" href="./%s?link=linked&mst2_id=%s">', myname, k) foo(area_value[area], which_value[which], k, data[k][4], day.strftime("%Y年%m月%d日(%a) %H:%M:%S"), terms_value[trm]) end end #大きい掲示板表示(link = linkedであるとき) else # 既存のコメント出力(キー毎) # 定義環境開始 for i in data.keys.sort{|x, y| data[y][0] <=> data[x][0] # 日付の新しい順にソート } day = data[i][0] # 第0要素が日付 msg = data[i][1] # 第1要素がコメント、それぞれ取り出す which = data[i][2].to_i trm = data[i][3].to_i place = data[i][4] area = data[i][5].to_i if mst2_id == i print "<div class=\"white\"><dl class=\"bb\">\n" # <a href="./cc2.rb?ID">ID</a> を出力 printf(" <dt> 記載者:<span class=\"user_name\"> %s </span>\n", i) printf(" %s<br>\n", day.strftime("%Y年%m月%d日(%a) %H:%M:%S")) printf(' <dd><h3>乗せたいor乗りたい?:<em> %s</em></h3><h3>行き先: <em>%s</em> </h3> <h3>施設名:<em> %s</em></h3><h3>条件など: <em>%s</em></h3> <h3>« コメント »</h3><p class="com"><pre>%s</pre></p><hr><p> ', CGI.escapeHTML(which_value[which]), CGI.escapeHTML(area_value[area]), CGI.escapeHTML(place), CGI.escapeHTML(terms_value[trm]), CGI.escapeHTML(msg)) printf(' [<a href="javascript:pakapaka(\'%s_com\')">コメントする</a>] <div class="pakapaka" id="%s_com"> <form method="POST" name="2" action="./%s"> <input name="original_id" type="hidden" value="%d"> <input name="link" type="hidden" value="linked"> <input name="mst2_id" type="hidden" value="%s"> <textarea class="mgn_2" name="com" cols="50" rows="2"> </textarea><br> <input type="hidden" name="mst_id" value="%s"> <input type="submit" value="コメントする"> </form> </div> ', i, i, myname, Time.now.to_i, i, i) printf(' [<a href="javascript:pakapaka(\'%s\')">この記事に対するコメントを見る</a>] <div class="pakapaka" id="%s"> ', i, i) # 既存のコメント出力(キー毎) print "<dl>\n" # 定義環境開始 #k = 0 c2 = 0 for f in data2.keys.sort{|w, z| data2[z][0] <=> data2[w][0] } day1 = data2[f][0] # 第0要素が日付 msg1 = data2[f][1] # 第1要素がコメント、それぞれ取り出す id1 = data2[f][2] mst_id = data2[f][3] if mst_id == i c2 += 1 printf(" <div><dt><a id=\"topic%s\"> 記載者: <span class=\"user_name\">%s</span></a>", f, id1) printf(" %s\n", day1.strftime("%Y年%m月%d日(%a) %H:%M:%S")) if id1 == id printf('<a href="%s?tag=%d&del=72&link=linked&mst2_id=%s">削除</a></dt>', myname, f, mst_id) end printf('<p class="indent"><pre>%s</pre></p>', CGI.escapeHTML(msg1)) print"</div>" end # k += 1 end if c2 == 0 print'<div><p>この提案に対するコメントはありません。</p></div>' end print'</dl></dl></div>' end end #print"</dl>" # 定義環境終了 end end # db.transaction 終わり no = 0 break else no += 1 end } if no > 0 print' <p class="bb">IDまたはパスワードが不正です!<br>再度<a href="../login.rb">ログイン</a> して下さい!</p> ' end print" <a class=\"cont\" href=\"../login.rb\">もどる。</a> <a class=\"cont\" href=\"../login.rb?out=ok\">ろぐあうと。</a> " print " <hr> <address>c112124@h.koeki-u.ac.jp</address> </div></body>\n</html> "