Newer
Older
skip-web / program / GiveMeALiftInYourCar / db / eating_bulletin_board.rb
@MURAKAMI Masaki MURAKAMI Masaki on 21 May 2014 11 KB Updated
#!/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>&laquo; コメント &raquo;</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&#x40;h.koeki-u.ac.jp</address>
</div></body>\n</html>
"