diff --git a/sushi.cgi b/sushi.cgi new file mode 100644 index 0000000..727ec25 --- /dev/null +++ b/sushi.cgi @@ -0,0 +1,118 @@ +#!/usr/bin/env ruby +# coding: utf-8 + +require "cgi" +require "pstore" +require "csv" + +begin + DATA_DIR = "data" + CHARACTERS = ["さる", "きつね", "たぬき", "うさぎ", "ねこ"] + LOCK_FILE = "#{DATA_DIR}/using_chars.pstore" + DB_FILE = "#{DATA_DIR}/sushi_orders.db" + SCRIPT_NAME = "sushi.cgi" + + c = CGI.new(:accept_charset => "UTF-8") + + categories = CSV.read("#{DATA_DIR}/categories.csv", headers: true, encoding: "UTF-8") + items = CSV.read("#{DATA_DIR}/items.csv", headers: true, encoding: "UTF-8") + features = CSV.read("#{DATA_DIR}/features.csv", headers: true, encoding: "UTF-8") + item_feats = CSV.read("#{DATA_DIR}/item_features.csv", headers: true, encoding: "UTF-8") + + using_store = PStore.new(LOCK_FILE) + x = PStore.new(DB_FILE) + + using_chars = {} + using_store.transaction do + using_store["chars"] ||= {} + using_chars = using_store["chars"].dup + end + + char = c["char"] + + print c.header("type" => "text/html", "charset" => "UTF-8") + puts "" + puts "かっぱ寿司 注文" + + # キャラ未選択の場合 + unless CHARACTERS.include?(char) + puts "

キャラクターを選んでください

" + puts "
" + CHARACTERS.each do |ch| + if using_chars[ch] + puts "" + else + puts "" + end + end + puts "
" + exit + end + + # キャラロック処理 + if c.request_method == "POST" && !using_chars[char] + using_store.transaction do + using_store["chars"][char] = true + end + elsif using_chars[char] + puts "

そのキャラクターは使用中です

戻る" + exit + end + + order_item_id = c["order_item_id"] + + x.transaction do + x["orders"] ||= [] + orders = x["orders"] + + if order_item_id != "" && items.any? {|i| i["item_id"] == order_item_id } + orders << {char: char, item_id: order_item_id, time: Time.now.strftime("%H:%M:%S")} + end + + puts "

かっぱ寿司 注文システム

" + puts "

キャラ:#{CGI.escapeHTML(char)}

" + + categories.each do |cat| + puts "

#{cat["category_name"]}

" + end + + puts "

全員の注文履歴

全体合計: #{all_total}円

" + + puts "

自分の注文履歴

合計金額: #{my_total}円

" + end + + puts "" + +rescue => e + puts "Content-Type: text/plain\n\n" + puts "Error: #{e.class} - #{e.message}" + puts e.backtrace.join("\n") +end