s4

view s4-cgi.sh @ 494:6906c140431a

Fix pattern: Allow spaces for group name in group listing
author HIROSE Yuuji <yuuji@gentei.org>
date Sat, 16 Jun 2018 13:43:32 +0900
parents d320c73bf16f
children 00837fdf1120
line source
1 #
2 # cgi functions
3 #
4 cgi_form() {
5 # $1=stage
6 : ${myname:?'Sure to set $myname to this script name'}
7 cont=`cat`
8 cat<<EOF
9 <form action="$myname" method="POST" enctype="multipart/form-data">
10 $cont
11 <input type="hidden" name="stage" value="$1">
12 <input type="submit" value="送信">
13 <input type="reset" value="リセット">
14 </form>
15 EOF
16 }
17 cgi_submit() {
18 cat<<EOF
19 <input type="submit" value="$1">
20 EOF
21 }
22 cgi_reset() {
23 cat<<EOF
24 <input type="reset" value="$1">
25 EOF
26 }
27 cgi_radio() {
28 echo "<input type=\"radio\" name=\"$1\" ${2:+value=\"$2\"} $3>"
29 }
30 cgi_checkbox() {
31 echo "<input type=\"checkbox\" name=\"$1\" ${2:+value=\"$2\"} $3>"
32 }
33 cgi_hidden() {
34 echo "<input type=\"hidden\" name=\"$1\" value=\"$2\" $3>"
35 }
36 cgi_passwd() {
37 cat<<EOF
38 <table class="pswd">
39 <tr><td>現パスワード</td><td><input type="password" name="pswd"></td></tr>
40 <tr><td>新パスワード</td><td><input type="password" name="pswd1"></td></tr>
41 <tr><td>新パスワード(確認)</td><td><input type="password" name="pswd2"></td></tr>
42 </table>
43 EOF
44 }
45 cgi_text() {
46 _v=`echo "$2"|htmlescape`
47 echo "<input type=\"text\" name=\"$1\" value=\"$_v\" $3>"
48 }
49 cgi_textarea() {
50 _v=`echo "$2"|htmlescape`
51 cat<<EOF
52 <textarea name="$1" $3>$_v</textarea>
53 EOF
54 }
55 cgi_file() ( # In a subshell
56 # $1=name $2=val(as filename) $3=args(if any)
57 ## err cgi_file: \$1=$1 \$2=$2 \$3="[$3]"
58 # Using global variable $dir
59 if [ -n "$2" -a -s "$dir/$2" ]; then
60 file=$dir/$2
61 bn=${file##*/}
62 ct=`file --mime-type - < "$dir/$2" | cut -d' ' -f2`
63 data=`percenthex "$file"`
64 icon="<img src=\"data:$ct,$data\">"
65 fi
66 cat<<EOF
67 ${icon}
68 <input type="file" name="$1" value="$bn" $3>
69 EOF
70 )
71 cgi_multi() (
72 # $1=name $2=dir $3=func $4=args...
73 # `dir' should contain $name.count and $name.N where N is 1 upto N
74 i=1 name=$1 dir=$2 func=$3
75 n=`cat $dir/$name.count`
76 echo '<table class="text">'
77 while [ $i -le $n ]; do
78 file=$name.$i
79 vname=$file.`cat "$dir/$file.rowid"`
80 val="`cat $dir/$file`"
81 cat<<EOF
82 <tr><td>($i)</td><td>
83 <input class="action" type="radio" name="action.$vname" id="keep.$vname"
84 value="keep"><label for="keep.$vname">温存</label>
85 <input class="action" type="radio" name="action.$vname" id="edit.$vname"
86 value="edit"><label for="edit.$vname">修正</label>
87 <input class="action" type="radio" name="action.$vname" id="rm.$vname"
88 value="rm"><label for="rm.$vname">削除</label>
89 <label class="confirm">本当に消します<input class="confirm" type="checkbox"
90 name="confirm.$vname" value="yes">はい</label><br>
91 `$func $vname "$val" "$4"`<span>$val</span>
92 </td></tr>
93 EOF
94 i=$((i+1))
95 done
96 cat<<EOF
97 <tr><td>(新規)</td><td>`$func $name "" "$4"`</td></tr>
98 </table>
99 EOF
100 )
101 # In these functions, $2 should be quoted because it can be null
102 cgi_multi_text() {
103 cgi_multi $1 "$2" cgi_text "$3"
104 }
105 cgi_multi_textarea() {
106 cgi_multi $1 "$2" cgi_textarea "$3"
107 }
108 cgi_multi_file() {
109 # $1=name $2=val(filename)
110 cgi_multi $1 "$2" cgi_file "$3"
111 }
112 cgi_datalist_h() {
113 # $1=id $2...=hexed-args
114 echo "<datalist id=\"$1\">"
115 shift
116 for i; do
117 echo "<option value=\"`echo "$i"|unhexize|htmlescape`\"></option>"
118 done
119 echo "</datalist>"
120 }
121 cgi_select_h() {
122 # $1=name $2...=hexed-args
123 echo "<select name=\"$1\"${CGI_SELECT_MULTI:+ multiple}>"
124 shift
125 for i; do
126 echo "<option>`echo \"$i\"|unhexize|htmlescape`</option>"
127 done
128 echo "</select>"
129 }
131 html() {
132 echo "<$*>"
133 cat
134 echo "</$1>"
135 }