annotate after5.rb @ 89:00d203e72f8f draft

Put original received headers aside to reduce hop count
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 19 Dec 2013 12:09:58 +0900
parents c4ea79816b2d
children 48afc00ef5df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1 #!/usr/local/bin/ruby19
16
1ff30d4c58ce RCS-revision 1.17
HIROSE Yuuji <yuuji@gentei.org>
parents: 15
diff changeset
2 # -*- coding: euc-jp -*-
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4 # Associative Scheduling Table - after5
80
5381d9b4adb5 Correct date format for SMTP.
HIROSE Yuuji <yuuji@gentei.org>
parents: 79
diff changeset
5 # (C)2003, 2004, 2006, 2008, 2012, 2013 by HIROSE Yuuji [yuuji<at>gentei.org]
76
53e747495502 Bug-fix: Regexp matching should be done in euc-jp.
HIROSE Yuuji <yuuji@gentei.org>
parents: 75
diff changeset
6 # $Id: after5.rb,v 1.20 2012/12/03 15:54:20 yuuji Exp $
89
00d203e72f8f Put original received headers aside to reduce hop count
HIROSE Yuuji <yuuji@gentei.org>
parents: 88
diff changeset
7 # Last modified Thu Dec 19 12:09:19 2013 on firestorm
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
8 # See http://www.gentei.org/~yuuji/software/after5/
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
9 # このスクリプトはEUCで保存してください。
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
10 $hgid = <<_HGID_.split[1..-2].join(" ")
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
11 $HGid$
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
12 _HGID_
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
13 $myurl = "http://www.gentei.org/~yuuji/software/after5/"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
14
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
15 require 'kconv'
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
16 require 'nkf'
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
17
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
18 $charset = 'EUC-JP'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
19
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
20 class HTMLout
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
21 def contenttype(type = "text/html", charset = $charset)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
22 sprintf "Content-type: %s; charset=%s\n\n", type, charset
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
23 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
24 def initialize(title = "Document")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
25 @title = title
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
26 @eltstack = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
27 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
28 def resetstack()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
29 @eltstack = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
30 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
31 def head(title = @title, css = "style.css")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
32 sprintf <<__EOS__, title, css
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
33 <html>
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
34 <head>
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
35 <title>%s</title>
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
36 <link rel="stylesheet" type="text/css" href="%s">
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
37 </head>
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
38 __EOS__
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
39 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
40
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
41 def startelement(elt, attrs = {}, nl = true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
42 attr = ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
43 if attrs.is_a?(Hash)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
44 for k in attrs.keys
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
45 attr += " %s=\"%s\"" % [k, attrs[k]]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
46 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
47 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
48 @eltstack.push(elt)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
49 sprintf "<%s%s>%s", elt, attr, nl ? "\n" : ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
50 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
51 def endelement(elt = nil, nl = true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
52 if elt
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
53 x = elt
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
54 @eltstack.pop
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
55 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
56 x = @eltstack.pop
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
57 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
58 sprintf "</%s>%s", x, nl ? "\n" : ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
59 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
60 def element(elt, attrs = nil, nl = nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
61 attr = ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
62 lf = nl ? "\n" : ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
63 if attrs.is_a?(Hash)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
64 for k in attrs.keys
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
65 attr += " %s=\"%s\"" % [k, attrs[k]]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
66 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
67 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
68 body = yield
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
69 sprintf "<%s%s>%s%s%s</%s>%s", elt, attr, lf, body, lf, elt, lf
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
70 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
71 def elementln(elt, attr=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
72 body = yield
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
73 element(elt, attr, true){body}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
74 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
75 def a(href, anchor = nil, attrs = {})
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
76 attr = attrs
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
77 attr['href'] = href
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
78 element("a", attr){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
79 anchor or href
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
80 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
81 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
82 def p(msg, attrs=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
83 element("p", attrs){msg}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
84 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
85 def text(name, value='', size=nil, maxlength=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
86 sprintf "<input type=\"text\" name=\"%s\" value=\"%s\"%s%s>",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
87 name, value,
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
88 size ? " size=\"%s\""%size.to_s : '',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
89 maxlength ? " maxlength=\"%s\""%maxlength.to_s : ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
90 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
91 def hidden(name, value='')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
92 sprintf "<input type=\"hidden\" name=\"%s\" value=\"%s\">", name, value
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
93 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
94 def radio(name, value, text='', checked=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
95 sprintf "<input type=\"radio\" name=\"%s\" value=\"%s\"%s>%s",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
96 name, value, checked ? " checked" : "", text
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
97 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
98 def checkbox(name, value, text='', checked=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
99 sprintf "<input type=\"checkbox\" name=\"%s\" value=\"%s\"%s>%s",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
100 name, value, checked ? " checked" : "", text
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
101 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
102 def submit(name, value, text='')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
103 sprintf "<input type=\"submit\" name=\"%s\" value=\"%s\">%s\n",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
104 name, value, text
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
105 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
106 def reset(name, value, text='')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
107 sprintf "<input type=\"reset\" name=\"%s\" value=\"%s\">\n",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
108 name, value, text
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
109 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
110 def submit_reset(name)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
111 submit(name, "GO")+reset(name, "Reset")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
112 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
113
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
114 def select(name, range, selected=nil)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
115 #start = (b<e ? b : e)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
116 #last = (b>e ? b : e)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
117 c=0
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
118 "<select name=\"#{name}\">\n" + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
119 range.collect{|i|
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
120 value = (i.is_a?(Array) ? i[1] : i).to_s
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
121 sprintf "<option%s%s>%s%s</option>",
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
122 (selected.to_s==value.to_s) ? " selected" : "",
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
123 i.is_a?(Array) ? " value=\"%s\"" % value : '',
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
124 i.is_a?(Array) ? i[0] : i.to_s,
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
125 (c+=1)%6==0 ? "\n" : ''
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
126 }.join + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
127 "\n</select>\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
128 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
129 end
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
130 class TEXTout
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
131 def isBlock(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
132 /\b(tr|[udo]l|p|div)\b/i =~ elt
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
133 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
134 def isEOC(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
135 /\bt[dh]\b/i =~ elt
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
136 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
137 def eoelem(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
138 r = ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
139 r << "\n" if isBlock(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
140 r << " " if isEOC(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
141 r
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
142 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
143 def contenttype(type = "text/plain", charset = $charset)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
144 ### sprintf "Content-type: %s; charset=%s\n\n", type, charset
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
145 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
146 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
147 def initialize(title = "Document")
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
148 @title = title
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
149 @eltstack = []
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
150 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
151 def resetstack()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
152 @eltstack = []
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
153 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
154 def head(title = @title, css = "style.css")
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
155 sprintf <<__EOS__, title, css
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
156 ===== [[[ %s ]]] =====
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
157 __EOS__
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
158 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
159
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
160 def startelement(elt, attrs = {}, nl = true)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
161 attr = ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
162 x = sprintf "%s", " "*@eltstack.length
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
163 @eltstack.push(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
164 x
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
165 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
166 def endelement(elt = nil, nl = true)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
167 if elt
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
168 x = elt
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
169 @eltstack.pop
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
170 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
171 x = @eltstack.pop
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
172 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
173 eoelem(x)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
174 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
175 def element(elt, attrs = nil, nl = nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
176 attr = ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
177 lf = nl ? "\n" : ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
178 body = yield
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
179 #sprintf "<%s%s>%s%s%s</%s>%s", elt, attr, lf, body, lf, elt, lf
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
180 sprintf "%s%s", body, eoelem(elt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
181 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
182 def elementln(elt, attr=nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
183 body = yield
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
184 sprintf "%s\n", body
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
185 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
186 def a(href, anchor = nil, attrs = {})
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
187 attr = attrs
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
188 attr['href'] = href
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
189 # sprintf "%s\n", href
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
190 anchor
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
191 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
192 def p(msg, attrs=nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
193 element("p", attrs){msg}
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
194 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
195 def text(name, value='', size=nil, maxlength=nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
196 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
197 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
198 def hidden(name, value='')
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
199 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
200 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
201 def radio(name, value, text='', checked=nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
202 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
203 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
204 def checkbox(name, value, text='', checked=nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
205 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
206 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
207 def submit(name, value, text='')
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
208 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
209 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
210 def reset(name, value, text='')
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
211 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
212 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
213 def submit_reset(name)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
214 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
215 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
216 def select(name, range, selected=nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
217 ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
218 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
219 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
220
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
221 class PasswdMgr
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
222 def initialize(name, mode=0640)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
223 require 'dbm'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
224 @pdb = DBM.open(name, mode)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
225 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
226 def checkpasswd(user, passwd)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
227 if @pdb[user] then
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
228 @pdb[user] == passwd.crypt(@pdb[user])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
229 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
230 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
231 def setpasswd(user, passwd)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
232 salt = [rand(64),rand(64)].pack("C*").tr("\x00-\x3f","A-Za-z0-9./")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
233 @pdb[user] = passwd.crypt(salt)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
234 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
235 def userexist?(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
236 @pdb[user] ? true : false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
237 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
238 def getpasswd(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
239 @pdb[user]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
240 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
241 def delete(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
242 @pdb.delete(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
243 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
244 def close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
245 @pdb.close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
246 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
247 def newpasswd(length)
61
502103680ea2 Call srand() without parameter.
HIROSE Yuuji <yuuji@gentei.org>
parents: 60
diff changeset
248 srand()
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
249 left = "qazxswedcvfrtgb12345"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
250 right = "yhnmjuik.lop;/67890-"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
251 array = [left, right]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
252 (1..length).collect{|i|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
253 a = array[i%array.length]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
254 a[rand(a.length), 1]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
255 }.join('')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
256 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
257 def users()
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
258 @pdb.keys.collect{|u| u.toeuc} # toeuc is for 1.9 :(
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
259 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
260 private :newpasswd
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
261 def setnewpasswd(user, length=8)
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
262 length = length.to_i
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
263 length = 4 if length < 4
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
264 newp = newpasswd(length)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
265 setpasswd(user, newp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
266 newp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
267 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
268 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
269
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
270 class ScheduleDir
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
271 def initialize(dir = "s")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
272 @dir = dir
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
273 @schedulefile = "sched"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
274 @usermapdir = File.join(@dir, "usermap")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
275 @usermap = mkusermap()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
276 @groupmapdir = File.join(@dir, "groupmap")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
277 @groupmap = mkgroupmap()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
278 @crondir = File.join(@dir, "crondir")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
279
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
280 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
281 def mkusermap()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
282 map = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
283 unless test(?d, @usermapdir)
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
284 mkdir_p(@usermapdir, 0750)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
285 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
286 Dir.foreach(@usermapdir){|u|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
287 next if /^\./ =~ u
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
288 newu = ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
289 u.split('').each{|c| # for security wrapping
12
d7c978950000 RCS-revision 1.13
HIROSE Yuuji <yuuji@gentei.org>
parents: 11
diff changeset
290 newu << c[0].chr if %r,[-A-Z0-9/+_.@],i =~ c
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
291 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
292 u = newu
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
293 map[u] = {}
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
294 d = File.join(@usermapdir, u).untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
295 next unless test(?d, d)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
296 Dir.foreach(d){|attr|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
297 next if /^\./ =~ attr
12
d7c978950000 RCS-revision 1.13
HIROSE Yuuji <yuuji@gentei.org>
parents: 11
diff changeset
298 attr.untaint if /^[A-Z_][-A-Z_0-9]*$/i =~ attr
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
299 file = File.join(@usermapdir, u, attr).untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
300 next unless test(?s, file) && test(?r, file)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
301 map[u][attr] = IO.readlines(file).join.toeuc.strip
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
302 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
303 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
304 map
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
305 end
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
306 def ismembersemail(email, grp = nil)
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
307 @usermap.keys.each {|u|
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
308 return u if u==email
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
309 return u if mailaddress(u, grp).split(/,\s*|\s+/).collect{|m|
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
310 m.sub(/^(skip|off):/i, "")
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
311 }.grep(email)[0]
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
312 }
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
313 nil
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
314 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
315 def putuserattr(user, attr, text)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
316 # if text==nil, remove it
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
317 d = File.join(@usermapdir, user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
318 Dir.mkdir(d) unless test(?d, d)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
319 file = File.join(d, attr)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
320 begin
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
321 unless @usermap[user]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
322 @usermap[user] = {}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
323 mkdir_p(d) unless test(?d, d)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
324 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
325 @usermap[user][attr] = text
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
326 if text==nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
327 File.unlink(file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
328 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
329 open(file, "w"){|w| w.puts @usermap[user][attr]}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
330 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
331 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
332 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
333 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
334 return {attr => text}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
335 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
336 def getuserattr(user, attr)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
337 # Should we distinguish between attribute is nil and "" ?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
338 if @usermap.has_key?(user) && @usermap[user][attr].is_a?(String) &&
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
339 @usermap[user][attr] > ''
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
340 return @usermap[user][attr].untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
341 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
342 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
343 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
344 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
345
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
346 def nickname(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
347 if @usermap.has_key?(user) && @usermap[user]['name'].is_a?(String) &&
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
348 @usermap[user]['name'] > ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
349 return @usermap[user]['name']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
350 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
351 return user.sub(/@.*/, '')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
352 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
353 end
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
354 def mailaddress(user, grp = nil)
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
355 grp ? \
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
356 mail4grp(user, grp) : \
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
357 (getuserattr(user, 'email') || user)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
358 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
359 def setnickname(user, nickname)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
360 putuserattr(user, 'name', nickname)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
361 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
362
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
363 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
364 # make group map
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
365 def collectmembers(gname)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
366 @visitedgroup=[] unless @visitedgroup
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
367 return [] unless @visitedgroup.grep(gname).empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
368 @visitedgroup.push(gname)
36
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
369 mdir = File.join(@groupmapdir, gname, 'members').untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
370 return [] unless test(?d, mdir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
371 members = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
372 Dir.foreach(mdir){|item|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
373 next if /^\./ =~ item
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
374 item.untaint
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
375 next unless test(?f, File.join(mdir, item))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
376 if /.+@.+/ =~ item
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
377 members << item
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
378 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
379 members += collectmembers(item)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
380 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
381 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
382 @visitedgroup.pop
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
383 members.uniq
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
384 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
385 def mkgroupmap()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
386 map = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
387 return map unless test(?d, @groupmapdir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
388 @visitedgroup = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
389 Dir.foreach(@groupmapdir){|g|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
390 next if /^\./ =~ g
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
391 newg = ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
392 next unless /^[-a-z0-9_.]+$/i =~ g
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
393 #g.untaint ## untaintじゃだめだ。map{g} のkeyがtaintedになっちゃうよ
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
394 gg = '' # for security wrapping
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
395 g.split('').each{|c| gg << c[0].chr if c != '`'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
396 g = gg
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
397 map[gg] = {}
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
398 d = File.join(@groupmapdir, g).untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
399 next unless test(?d, d)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
400 # get group name
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
401 gnf = File.join(d, 'name').untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
402 if test(?r, gnf) && test(?s, gnf)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
403 n = IO.readlines(gnf)[0].to_s.toeuc.strip
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
404 map[g]['name'] = if n > '' then n else g end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
405 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
406 map[g]['name'] = g
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
407 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
408 # get administrators
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
409 #
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
410 gad = File.join(d, 'admin').untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
411 map[g]['admin'] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
412 if test(?d, gad)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
413 Dir.foreach(gad){|a|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
414 # administrator should be a person (not group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
415 next unless /@/ =~ a
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
416 map[g]['admin'] << a
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
417 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
418 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
419 # collect members
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
420 #map[g]['members'] = collectmembers(g)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
421 memd = File.join(d, 'members').untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
422 map[g]['members'] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
423 if test(?d, memd)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
424 Dir.foreach(memd){|a|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
425 next if /^\./ =~ a
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
426 map[g]['members'] << a.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
427 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
428 end
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
429 # get other attributes
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
430 Dir.foreach(d) {|attr|
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
431 next if /^\./ =~ attr
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
432 next unless /^[-_a-z]+$/i =~ attr
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
433 next if attr == "name" # already collected
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
434 attr.untaint
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
435 file = File.join(d, attr) #.untaint
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
436 next if test(?d, file)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
437 next unless test(?s, file) && test(?r, file)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
438 map[g][attr] = IO.readlines(file).join.toeuc.strip
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
439 }
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
440 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
441 map
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
442 end
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
443 def putgroupattr(group, attr, value)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
444 d = File.join(@groupmapdir, group).untaint
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
445 Dir.mkdir(d) unless test(?d, d)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
446 file = File.join(d, attr)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
447 begin
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
448 unless @groupmap[group]
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
449 @groupmap[group] = {}
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
450 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
451 @groupmap[group][attr] = value
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
452 if value == nil
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
453 File.unlink(file)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
454 else
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
455 open(file, "w"){|w| w.puts @groupmap[group][attr]}
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
456 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
457 rescue
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
458 return nil
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
459 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
460 return {attr => value}
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
461 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
462 def getgroupattr(group, attr)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
463 if @groupmap.has_key?(group) && @groupmap[group][attr].is_a?(String) &&
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
464 @groupmap[group][attr] > ''
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
465 return @groupmap[group][attr].untaint
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
466 else
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
467 return nil
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
468 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
469 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
470 def groupmap()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
471 @groupmap
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
472 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
473 def groups()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
474 @groupmap.keys
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
475 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
476 def addgroup(group, users, remove=nil, role='members')
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
477 grp = groups.grep(group)[0] # group may be tainted, using kept name
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
478 return nil unless grp
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
479 for u in users
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
480 m = nil
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
481 u, m = u if u.is_a?(Array) # ["user", "mailto"]
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
482 m = nil if mailaddress(u)==m || /@/ !~ m
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
483 next unless account_exists(u)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
484 mdir = File.join(@groupmapdir, grp, role).untaint
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
485 file = File.join(mdir, u).untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
486 if remove
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
487 @groupmap[grp][role].delete(u)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
488 File.unlink(file) if test(?e, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
489 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
490 @groupmap[grp][role] << u
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
491 @groupmap[grp][role].uniq
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
492 Dir.mkdir(file) unless test(?d, mdir)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
493 open(file, "w"){|x|x.puts m if m}
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
494 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
495 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
496 grp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
497 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
498 def setgroupname(grp, name)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
499 return nil unless @groupmap[grp]
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
500 mdir = File.join(@groupmapdir, grp).untaint
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
501 nfile = File.join(mdir, 'name').untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
502 @groupmap[grp]['name'] = name
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
503 if grp == name
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
504 # remove the name file because it is default name
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
505 File.unlink(nfile) if test(?e, nfile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
506 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
507 Dir.mkdir(mdir) unless test(?d, mdir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
508 open(nfile, "w"){|n| n.puts name.to_s.strip}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
509 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
510 name
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
511 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
512 def creategroup(grp, grpname="", admin=[])
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
513 grpptnOK = /^[-A-Z0-9._:!$%,]+$/i
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
514 return nil unless grpptnOK =~ grp
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
515 gg = ''
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
516 grp.split('').each{|c| gg << c[0].chr if c =~ grpptnOK}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
517 grp = gg
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
518 gdir = File.join(@groupmapdir, grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
519 mkdir_p(gdir) # Should not care errors here
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
520 Dir.mkdir(File.join(gdir, "admin"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
521 Dir.mkdir(File.join(gdir, "members"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
522 @groupmap[grp] = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
523 if grpname == ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
524 @groupmap[grp]['name'] = grp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
525 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
526 setgroupname(grp, grpname)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
527 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
528 @groupmap[grp]['members'] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
529 @groupmap[grp]['admin'] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
530 addgroup(grp, admin)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
531 addgroup(grp, admin, nil, 'admin')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
532 return @groupmap[grp]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
533 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
534 def createuser(user, email = nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
535 return nil unless /@/ =~ user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
536 return nil if %r@[\/()\;|,$\%^!\#&\'\"]@ =~ user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
537 email = email || user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
538 @usermap[user] = {}
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
539 dir = File.join(@usermapdir, user).untaint
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
540 test(?d, dir) || Dir.mkdir(dir)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
541 putuserattr(user, 'email', email)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
542 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
543 def deleteuser(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
544 return nil unless @usermap[user]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
545 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
546 @usermap[user] # return value
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
547 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
548 @usermap.delete(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
549 rm_rf(File.join(@usermapdir, user))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
550 rm_rf(File.join(@groupmapdir, "*/members/#{user}"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
551 rm_rf(File.join(@crondir, "[1-9]*-*-*/#{user}"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
552 rm_rf(File.join(@dir, "[1-9]*/[0-9][0-9]/[0-9][0-9]/[0-9]???/#{user}"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
553 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
554 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
555 def destroygroup(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
556 return nil unless @groupmap[grp]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
557 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
558 @groupmap[grp] # return value
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
559 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
560 @groupmap.delete(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
561 rm_rf(File.join(@groupmapdir, grp))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
562 rm_rf(File.join(@groupmapdir, "*/members/#{grp}"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
563 rm_rf(File.join(@crondir, "[1-9]*-*-*/#{grp}"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
564 rm_rf(File.join(@dir, "[1-9]*/[0-9][0-9]/[0-9][0-9]/[0-9]???/#{grp}"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
565 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
566 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
567 def rm_rf(path)
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
568 path.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
569 if (list = Dir.glob(path))[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
570 for p in list
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
571 p.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
572 system "/bin/rm -rf \"#{p}\""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
573 end
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
574 cleanup_files(list)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
575 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
576 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
577 def account_exists(instance)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
578 if /@/ =~ instance
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
579 true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
580 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
581 ! @groupmap.select{|k, v| k==instance}.empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
582 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
583 end
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
584 def mail4grp(usr, group)
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
585 # If members/user file contains only "skip:" keyword,
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
586 # return "skip:email@add.re.ss"
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
587 default = mailaddress(usr)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
588 file = File.expand_path((group+"/members/"+usr).untaint, @groupmapdir)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
589 if test(?s, file.untaint)
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
590 rcpt = open(file, "r"){|f|f.gets.chomp}.untaint
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
591 if /^(off|skip):/ =~ rcpt && /@/ !~ rcpt
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
592 rcpt = "skip:"+default
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
593 end
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
594 return rcpt
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
595 end
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
596 default
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
597 end
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
598 def delivergrpmail(user, grp)
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
599
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
600 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
601 def ismember(user, grouporuser)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
602 return user if user==grouporuser
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
603 if @groupmap[grouporuser]
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
604 @groupmap[grouporuser]['members'].grep(user)[0] &&
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
605 mail4grp(user, grouporuser)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
606 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
607 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
608 def isuser(user)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
609 @usermap[user] && @usermap.keys.grep(user)[0]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
610 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
611 def isgroup(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
612 @groupmap[grp]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
613 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
614 def isadmin(user, group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
615 @groupmap[group] and @groupmap[group]['admin'].grep(user)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
616 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
617 def members(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
618 @groupmap[grp] and ####################@groupmap[grp]['members']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
619 collectmembers(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
620 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
621 def membernames(grp)
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
622 if isgroup(grp)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
623 members(grp).collect{|u| nickname(u)}
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
624 else
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
625 [nickname(grp)]
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
626 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
627 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
628 def admins(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
629 @groupmap[grp] and @groupmap[grp]['admin']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
630 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
631 def groupname(grp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
632 @groupmap[grp] && @groupmap[grp]['name']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
633 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
634 def name2group(name)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
635 @groupmap.find{|g, v| v.is_a?(Hash) && v['name']==name}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
636 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
637 def day_all(d, user=nil, personalonly = nil)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
638 y, m, d = d.scan(%r,(\d\d\d\d+)/(\d+)/(\d+),)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
639 #daydir = File.join(@dir, "%04d"%y.to_i, "%02d"%m.to_i, "%02d"%d.to_i)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
640 daydir = File.join("s", "%04d"%y.to_i, "%02d"%m.to_i, "%02d"%d.to_i)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
641 sched = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
642 return sched unless test(?d, daydir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
643 Dir.foreach(daydir) {|time|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
644 next if /^\./ =~ time
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
645 next unless /^\d\d\d\d$/ =~ time
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
646 time.untaint
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
647 t = File.join(daydir, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
648 next unless test(?d, t)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
649 sched[time] = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
650 Dir.foreach(t){|who|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
651 next if /^\./ =~ who
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
652
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
653 visible = false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
654 #next unless /@/ =~ who # user must be as user@do.ma.in
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
655 next unless account_exists(who)
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
656 ## next if personalonly && who != user #2004/1/16
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
657 who.untaint
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
658 dir = File.join(t, who)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
659 next unless test(?d, dir) && test(?x, dir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
660 pub = File.join(dir, 'pub')
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
661 if test(?f, pub) && test(?r, pub) && test(?s, pub) &&
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
662 !personalonly # unneccessary if personal mode
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
663 if IO.readlines(pub)[0].to_i > 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
664 visible = true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
665 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
666 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
667
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
668
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
669 if ismember(user, who) || visible
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
670 sched[time][who] = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
671 file = File.join(dir, @schedulefile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
672 if test(?s, file) && test(?r, file) && test(?s, file)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
673 sched[time][who]['sched'] = IO.readlines(file).join.toeuc.chomp!
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
674 sched[time][who]['regtime'] = File.stat(file).mtime
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
675 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
676 sched[time][who]['pub'] = visible
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
677 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
678 } #|who|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
679 sched.delete(time) if sched[time].empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
680 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
681 sched
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
682 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
683
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
684 def scheduledir(user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
685 sprintf("%s/%04d/%02d/%02d/%04d/%s",
44
1c0505ce5d6a untaint scheduledir()
HIROSE Yuuji <yuuji@gentei.org>
parents: 43
diff changeset
686 @dir, y.to_i, m.to_i, d.to_i, time.to_i, user).untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
687 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
688 def schedulefile(user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
689 File.join(scheduledir(user, y, m, d, time), @schedulefile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
690 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
691 def mkdir_p(path, mode=0777)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
692 # Do not mkdir `path' for
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
693 # absolute paths
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
694 # those paths which contains `../'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
695 # for the sake of security reason
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
696 return false if %r,\.\./|^/, =~ path
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
697 path = path.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
698 p = 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
699 i=0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
700 while p=path.index("/", p)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
701 dir = path[0..p].chop
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
702 p += 1
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
703 break if i > 10 # overprotecting
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
704 next if test(?d, dir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
705 Dir.mkdir(dir, mode)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
706 i += 1
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
707 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
708 Dir.mkdir(path, mode) unless test(?d, path)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
709 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
710
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
711 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
712 # register schedule for user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
713 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
714 def register(user, year, month, day, time, text, replace=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
715 # return code: 0 = succesfull new registration
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
716 # 1 = succesfull appending registration
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
717 dir = scheduledir(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
718 file = schedulefile(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
719 ret = 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
720 um = File.umask(027)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
721 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
722 if !replace && test(?s, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
723 ret = 1
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
724 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
725 mkdir_p(dir, 0777)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
726 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
727 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
728 File.umask(um)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
729 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
730 open(file, replace ? "w" : "a"){|out|out.print text}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
731 return ret
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
732 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
733 def getschedule(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
734 file = schedulefile(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
735 if test(?r, file) && test(?s, file)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
736 return IO.readlines(file).join.toeuc
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
737 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
738 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
739 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
740 def remove(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
741 file = schedulefile(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
742 dir = File.dirname(file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
743 if test(?r, file) && test(?s, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
744 File.unlink(file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
745 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
746 for f in Dir.glob(File.join(dir, "*"))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
747 f.untaint
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
748 File.unlink(f)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
749 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
750 Dir.rmdir(dir) if test(?d, dir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
751 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
752 Dir.rmdir(File.dirname(dir))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
753 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
754 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
755 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
756 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
757 # register file
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
758 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
759 def putfile(user, year, month, day, time, file, contents)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
760 scback = @schedulefile
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
761 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
762 @schedulefile = File.basename(file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
763 register(user, year, month, day, time, contents, true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
764 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
765 @schedulefile = scback
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
766 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
767 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
768 def getfile(user, year, month, day, time, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
769 scback = @schedulefile
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
770 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
771 @schedulefile = File.basename(file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
772 getschedule(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
773 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
774 @schedulefile = scback
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
775 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
776 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
777 def removefile(user, year, month, day, time, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
778 dir = scheduledir(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
779 file = File.join(dir, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
780 if test(?e, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
781 File.unlink(file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
782 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
783 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
784 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
785 # registration to crondir
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
786 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
787 def cronlink_file(nt_time, user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
788 subdir = nt_time.strftime("%Y-%m-%d-%H%M/#{user}")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
789 cdir = File.join(@crondir, subdir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
790 File.join(cdir, sprintf("%04d-%02d-%02d-%04d", y, m, d, time))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
791 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
792 def register_crondir(nt_time, user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
793 linkfile = cronlink_file(nt_time, user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
794 mkdir_p(File.dirname(linkfile))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
795 scfile = schedulefile(user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
796 if test(?s, scfile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
797 sclink = File.join("../../..", scfile.sub!(Regexp.quote(@dir+'/'), ''))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
798 File.symlink(sclink, linkfile) unless test(?e, linkfile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
799 return linkfile
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
800 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
801 return false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
802 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
803 def remove_crondir(nt_time, user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
804 linkfile = cronlink_file(nt_time, user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
805 scfile = schedulefile(user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
806 if test(?e, linkfile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
807 File.unlink(linkfile)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
808 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
809 dir = linkfile
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
810 2.times {|x|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
811 dir = File.dirname(dir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
812 if Dir.open(dir).collect.length <= 2 # is empty dir
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
813 Dir.rmdir(dir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
814 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
815 break
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
816 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
817 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
818 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
819 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
820 return linkfile
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
821 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
822 return false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
823 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
824
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
825 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
826 # return the Hash of crondir {user => files}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
827 def notify_list(asof)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
828 slack = 5*60
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
829 gomifiles = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
830 ntl = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
831 return ntl unless test(?d, @crondir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
832 Dir.foreach(@crondir){|datedir|
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
833 next unless /(\d\d\d\d+)-(\d+)-(\d+)-(\d\d\d\d)/ =~ datedir
10
b2f1a9482975 RCS-revision 1.11
HIROSE Yuuji <yuuji@gentei.org>
parents: 9
diff changeset
834 ##datedir = sprintf("%04d-%02d-%02d-%04d",
b2f1a9482975 RCS-revision 1.11
HIROSE Yuuji <yuuji@gentei.org>
parents: 9
diff changeset
835 ## $1.to_i, $2.to_i, $3.to_i, $4.to_i)
b2f1a9482975 RCS-revision 1.11
HIROSE Yuuji <yuuji@gentei.org>
parents: 9
diff changeset
836 datedir.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
837 dd = File.join(@crondir, datedir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
838 next unless test(?d, dd)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
839 y, m, d, hm = $1.to_i, $2.to_i, $3.to_i, $4.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
840 hh = hm/100 % 60
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
841 mm = (hm%100) % 60
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
842 t = Time.mktime(y, m, d, hh, mm)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
843 next if t-slack > asof
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
844 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
845 # collect them
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
846 Dir.foreach(dd){|user|
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
847 # next unless /@/ =~ user || isgroup(user)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
848 next if /^\./ =~ user
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
849 if isgroup(user)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
850 user = @groupmap.keys.grep(user)[0]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
851 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
852 user = @usermap.keys.grep(user)[0]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
853 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
854 next unless user
72
6a0c2f85faa3 Canonicalize arguments for isHoliday(), which will be sent to Time.mktime().
HIROSE Yuuji <yuuji@gentei.org>
parents: 71
diff changeset
855 ud = File.join(dd, user).untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
856 next unless test(?d, ud)
78
ec7d483d381d Fix missing notification
HIROSE Yuuji <yuuji@gentei.org>
parents: 76
diff changeset
857 ntl[user] = {} unless ntl.has_key?(user)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
858 Dir.foreach(ud){|date|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
859 next if /^\./ =~ date
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
860 unless /(\d\d\d\d+)-(\d+)-(\d+)-(\d\d\d\d)/ =~ date
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
861 gomifiles << File.join(ud, date)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
862 next
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
863 end
13
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
864 #date = sprintf("%04d-%02d-%02d-%04d",
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
865 # $1.to_i, $2.to_i, $3.to_i, $4.to_i)
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
866 date.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
867 f = File.join(ud, date)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
868 if test(?s, f)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
869 ntl[user][date] = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
870 ntl[user][date]['file'] = f
33
844e2f9a037f encoding encoding encoding!
HIROSE Yuuji <yuuji@gentei.org>
parents: 32
diff changeset
871 ntl[user][date]['text'] =
844e2f9a037f encoding encoding encoding!
HIROSE Yuuji <yuuji@gentei.org>
parents: 32
diff changeset
872 IO.readlines(f).collect{|l| l.toeuc} # ...why? :-(
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
873 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
874 File.unlink(f) # symlink points to nonexistent file
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
875 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
876 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
877 if ntl[user].empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
878 # if ud does not contain valid cron symlinks,
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
879 # ud had been left badly. Remove it.
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
880 ntl.delete(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
881 cleanup_files(gomifiles)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
882 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
883 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
884 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
885 ntl
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
886 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
887 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
888 # cleanup file and directories
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
889 def cleanup_crondir(time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
890 Dir.foreach(@crnondir){|datedir|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
891 dd = File.join(@crondir, datedir)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
892 next unless test(?d, dd)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
893 next unless /(\d\d\d\d+)-(\d+)-(\d+)-(\d\d\d\d)/ =~ dd
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
894 y, m, d, hm = $1.to_i, $2.to_i, $3.to_i, $4.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
895 hh = hm/100 % 60
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
896 mm = (hm%100) % 60
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
897 t = Time.mktime(y, m, d, hh, mm)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
898 if t < time
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
899 system "rm -rf #{dd}"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
900 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
901 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
902 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
903 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
904 # remove files in FILES, and remove parent directory if possible
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
905 def cleanup_files(files)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
906 sentinel = File.stat(@dir).ino
16
1ff30d4c58ce RCS-revision 1.17
HIROSE Yuuji <yuuji@gentei.org>
parents: 15
diff changeset
907 me = $0.dup.untaint
1ff30d4c58ce RCS-revision 1.17
HIROSE Yuuji <yuuji@gentei.org>
parents: 15
diff changeset
908 scriptsuid = File.stat(me).uid
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
909 for f in files
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
910 if $SAFE > 0
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
911 f.untaint
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
912 if test(?e, f) && File.stat(f).uid != scriptsuid
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
913 f.taint
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
914 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
915 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
916 printf "Removing %s\n", f if $DEBUG
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
917 File.unlink(f) if test(?e, f)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
918 d = f
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
919 loop {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
920 d = File.dirname(d)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
921 break if d.length < 2
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
922 break if File.stat(d).ino == sentinel
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
923 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
924 puts "rmdir #{d}" if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
925 Dir.rmdir(d)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
926 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
927 break
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
928 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
929 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
930 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
931 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
932 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
933
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
934 class StringIO<IO
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
935 def initialize()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
936 @str=""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
937 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
938 def foo=(str)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
939 @str = str
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
940 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
941 def append(str)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
942 @str = str+@str
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
943 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
944 def print(str)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
945 @str << str
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
946 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
947 def puts(str)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
948 @str << str+"\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
949 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
950 def printf(*args)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
951 @str << sprintf(*args)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
952 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
953 def write(bytes)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
954 print(bytes)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
955 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
956 def gets()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
957 return nil if @str == ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
958 p = @str.index(?\n)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
959 if p
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
960 r = @str[0..p]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
961 @str=@str[p+1..-1]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
962 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
963 r = @str
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
964 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
965 return r
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
966 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
967 def readline()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
968 this.gets()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
969 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
970 def readlines()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
971 r = @str
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
972 @str=''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
973 r
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
974 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
975
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
976 def p(*obj)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
977 STDOUT.p(*obj)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
978 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
979 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
980
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
981 class CMDTimeout < Exception
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
982 def initialize()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
983 @pw = IO.pipe
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
984 @pr = IO.pipe
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
985 @pe = IO.pipe
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
986 @timeout = false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
987 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
988 def start(cmd, timeout, mixstderr=false)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
989 if @pid=fork
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
990 @pw[0].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
991 @pr[1].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
992 @pe[1].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
993 # puts "parent!"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
994 if @tk=fork
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
995 # main
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
996 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
997 @pw[1].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
998 @pr[0].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
999 @pe[0].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1000 trap(:INT){exit 0}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1001 sleep timeout
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1002 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1003 @timeout = true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1004 STDERR.puts "TIMEOUT"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1005 Process.kill :INT, @pid
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1006 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1007 #puts "Already done"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1008 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1009 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1010 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1011 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1012 # Running this block with pid=@pid
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1013 trap(:INT){@timeout = true; exit 0}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1014 @pw[1].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1015 STDIN.reopen(@pw[0])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1016 @pw[0].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1017
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1018 @pr[0].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1019 STDOUT.reopen(@pr[1])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1020 if mixstderr
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1021 STDERR.reopen(@pr[1])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1022 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1023 STDERR.reopen(@pe[1])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1024 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1025 @pr[1].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1026 @pe[0].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1027 @pe[1].close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1028
15
580c1b0fa27e RCS-revision 1.16
HIROSE Yuuji <yuuji@gentei.org>
parents: 14
diff changeset
1029 exec(*cmd)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1030 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1031 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1032 return [@pw[1], @pr[0], @pe[0]]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1033 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1034 def wait()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1035 Process.waitpid(@pid, nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1036 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1037 def close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1038 @pr.each{|p| p.close unless p.closed?}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1039 @pw.each{|p| p.close unless p.closed?}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1040 @pe.each{|p| p.close unless p.closed?}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1041 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1042 Process.kill :INT, @tk
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1043 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1044 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1045 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1046 def timeout()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1047 @timeout
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1048 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1049 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1050
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1051 class Holiday
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1052 def initialize(dir = ".")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1053 @@dir = dir
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1054 defined?(@@holiday) || setupHoliday
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1055 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1056 def setupHoliday(file = "holiday")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1057 @@holiday = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1058 return unless test(?f, file) && test(?s, file)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1059 IO.foreach(file){|line|
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1060 line = line.toeuc.strip
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1061 next if /^#/ =~ line
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1062 date, what = line.scan(/(\S+)\s+(.*)/)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1063 if %r,(\d+)/(\d+)/(\d+), =~ date
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1064 cdate = sprintf("%d/%d/%d", $1.to_i, $2.to_i, $3.to_i)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1065 @@holiday[cdate] || @@holiday[cdate] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1066 @@holiday[cdate] << what
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1067 elsif %r,(\d+)/(\d+), =~ date
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1068 cdate = sprintf("%d/%d", $1.to_i, $2.to_i)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1069 @@holiday[cdate] || @@holiday[cdate] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1070 @@holiday[cdate] << what
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1071 elsif %r,(\d+)/(\w+), =~ date
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1072 cdate = sprintf("%d/%s", $1.to_i, $2.downcase)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1073 @@holiday[cdate] || @@holiday[cdate] = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1074 @@holiday[cdate] << what
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1075 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1076 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1077 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1078 def isHoliday(y, m, d, wday=nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1079 y, m, d = y.to_i, m.to_i, d.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1080 wname = %w[sun mon tue wed thu fri sat]
35
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1081 wday = wname[wday || Time.mktime(y, m, d).wday]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1082 holiday = @@holiday[sprintf("%d/%d/%d", y, m, d)] ||
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1083 @@holiday[sprintf("%d/%d", m, d)]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1084 unless holiday
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1085 nthweek = (d-1)/7+1
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1086 holiday = @@holiday[sprintf("%d/w%d%s", m, nthweek, wday)]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1087 end
35
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1088 if !holiday && wday == "mon" && d > 0 # d<1 when column is before 1th
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1089 # holiday in lieu
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1090 yesterday = Time.mktime(y, m, d)-3600*24
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1091 holiday = ["振替休日"] if
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1092 isHoliday(yesterday.year, yesterday.mon, yesterday.day)
f5cff2e25520 Consider holiday in lieu.
HIROSE Yuuji <yuuji@gentei.org>
parents: 33
diff changeset
1093 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1094 holiday
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1095 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1096 def holidays()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1097 @@holiday
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1098 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1099 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1100
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1101 class After5
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1102 def initialize()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1103 @me = File.expand_path($0)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1104 @mydir, @myname = File.dirname(@me), File.basename(@me)
1
8145b15d3d6f RCS-revision 1.2
HIROSE Yuuji <yuuji@gentei.org>
parents: 0
diff changeset
1105 @mybase = @myname.sub(/\.\w+$/, '')
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1106 @mydir.untaint
1
8145b15d3d6f RCS-revision 1.2
HIROSE Yuuji <yuuji@gentei.org>
parents: 0
diff changeset
1107 @mybase.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1108 Dir.chdir @mydir
1
8145b15d3d6f RCS-revision 1.2
HIROSE Yuuji <yuuji@gentei.org>
parents: 0
diff changeset
1109 @myname='a5.cgi' if test(?f, "a5.cgi")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1110 @conf = nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1111 @schedulearea = {'rows'=>'4', 'cols'=>'60', 'name'=>'schedule'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1112 @oldagent = (%r,Mozilla/4, =~ ENV['HTTP_USER_AGENT'])
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1113 @lang = 0
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1114 @mlbasedir = "ml"
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1115 @attachmentdir = "a"
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1116 @attachmentmax = 8*1024**2
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1117 @mailmode = nil
57
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
1118 @mailadmdelimiter = "/"
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
1119 @mailadmsuffix = @mailadmdelimiter + "adm"
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1120 @saveprefsregexp = /^(display(mode|days)$|nt|headline)/
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1121 @opt = {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1122 'conf' => @mybase+".cf",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1123 'css' => @mybase+".css",
13
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
1124 'logfile' => 's/'+@mybase+".log",
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1125 "sendmail" => "/usr/sbin/sendmail",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1126 'hostcmd' => '/usr/bin/host',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1127 'nslookup' => '/usr/sbin/nsookup',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1128 'bg' => 'ivory',
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1129 'name' => nil,
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1130 'at_bsd' => '%H:%M %b %d %Y',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1131 'at_solaris' => '%H:%M %b %d,%Y',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1132 'schedir' => 's',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1133 'tdskip' => '<br>',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1134 'forgot' => 'wasureta',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1135 'size' => @oldagent ? '15' : '40',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1136 'morning' => '6',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1137 'night' => '22',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1138 'alldaydir' => '3000',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1139 'pswdlen' => 4,
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1140 'pswddb' => 's/a5pswd',
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1141 'lang' => 'j',
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1142 'notifymail' => true,
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1143 'mailbracket' => '[%n-ML]',
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1144 }
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1145 @subjtags = [['[GroupID:#]', "[%i:%c]"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1146 ['[GroupID:#####]', "[%i:%5c]"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1147 ['[GroupName:#]', "[%n:%c]"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1148 ['[GroupName:#####]', "[%n:%5c]"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1149 ['(GroupID:#)', "(%i:%c)"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1150 ['(GroupID:#####)', "(%i:%5c)"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1151 ['(GroupName:#)', "(%n:%c)"],
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
1152 ['(GroupName:#####)', "(%n:%5c)"],
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
1153 ['NONE', "NONE"]]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1154 ##@job = "today"
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1155 @wnames = %w[sun mon tue wed thu fri sat]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1156 @job = "login"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1157 @sc = ScheduleDir.new
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1158 @O = StringIO.new
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1159 @H = HTMLout.new()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1160 @umback = File.umask
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1161 @author = 'yuuji@gentei.org'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1162 @after5url = 'http://www.gentei.org/~yuuji/software/after5/'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1163 File.umask(007)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1164 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1165 def doit()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1166 @params = getarg()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1167 @cookie = getcookie()
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1168 importcookie()
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1169 @lang = (/^j/i =~ @opt['lang'] ? 0 : 1)
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1170 @ntlist = [ # this shoud be set after @lang
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1171 ['nt10m', "10"+msg('minutes', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1172 ['nt30m', "30"+msg('minutes', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1173 ['nt60m', "60"+msg('minutes', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1174 ['nttoday', msg('theday')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1175 ['nt1d', "1"+msg('days', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1176 ['nt2d', "2"+msg('days', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1177 ['nt3d', "3"+msg('days', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1178 ['nt7d', "7"+msg('days', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1179 ['nt30d', "30"+msg('days', 'before')],
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1180 ]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1181 p @cookie if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1182 p @params if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1183
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1184 ### @params['displaymode'] = @params['displaymode'] || @cookie['displaymode']
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1185 personal = /personal/i =~ @params['displaymode']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1186 bodyclass = if personal then {'class'=>'personal'} end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1187
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1188 ## x = {"align"=>'center'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1189 ## @H.element("p", x, "hoge", nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1190 ## @H.element("p", nil, "buha", nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1191
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1192 if nil
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1193 if !@params['passwd'] && @cookie['passwd']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1194 @params['passwd'] = @cookie['passwd']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1195 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1196 if !@params['user'] && @cookie['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1197 @params['user'] = @cookie['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1198 end
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1199 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1200 @params['user'] = safecopy(@params['user'])
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1201
15
580c1b0fa27e RCS-revision 1.16
HIROSE Yuuji <yuuji@gentei.org>
parents: 14
diff changeset
1202 ######eval @job
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1203 a5name = if @opt['name'] && @opt['name'] > ''
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1204 sprintf("(%s)", @opt['name'])
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1205 else
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1206 ""
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1207 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1208 @O.append(@H.contenttype() +
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1209 @H.head(a5name+"After 5"+@job.sub(/\s*/, ' '), @opt['css']))
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1210 @O.print @H.startelement("body", bodyclass, true)
15
580c1b0fa27e RCS-revision 1.16
HIROSE Yuuji <yuuji@gentei.org>
parents: 14
diff changeset
1211 # @job should be here because its output shoud go after <body>.
580c1b0fa27e RCS-revision 1.16
HIROSE Yuuji <yuuji@gentei.org>
parents: 14
diff changeset
1212 eval @job
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1213 @O.print @H.endelement(nil, true) # body
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1214 @O.print @H.endelement("html", true) # html
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1215 setcookie()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1216
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1217 print @O.readlines
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1218 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1219 def msg(*keyword)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1220 unless defined?(@msg)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1221 @msg = {
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1222 'title' => ['みんなの予定表 <img src="after5.png" alt="「アフター5」">', 'Schedule table for us all <img src="after5.png" alt="After 5">'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1223 'login' => ['ログイン', 'Login'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1224 'loginfirst' => ['最初にログインすべし', 'Login first'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1225 'autherror' => ['認証エラーがあったと管理者に伝えてくれっす',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1226 'Unexpected authentication error. Please tell this to the administrator'],
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1227 'yourmail' => ['あなたのメイルアドレス', 'Your email address'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1228 'passwd' => ['パスワード<br>(初回時は空欄)',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1229 'Passowrd<br>Left blank, first time'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1230 'error' => ['エラー:', 'Error: '],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1231 'mailerror' => ['メイルアドレスが違います', 'Invalid email address'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1232 'pswderror' => ['パスワードが違います', 'Password incorrect'],
22
8803e5d52611 Show guidance when wrong password entered.
HIROSE Yuuji <yuuji@gentei.org>
parents: 18
diff changeset
1233 'forgotguide' => ['忘れた場合は %s と入力するよろし',
8803e5d52611 Show guidance when wrong password entered.
HIROSE Yuuji <yuuji@gentei.org>
parents: 18
diff changeset
1234 "Put \`%s' when you forgot password."],
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1235 'fmtdaysschedule'=> ['%s〜の予定', 'Schedule from %s'],
18
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents: 17
diff changeset
1236 'schedtable' => ['予定表', 'Schedule Table'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1237 'noplan' => ['登録されている予定はありません', 'No plans'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1238 'allday' => ['全日', 'whole day'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1239 'addsched' => ['新規予定項目の登録', 'Register new schedule'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1240 'defthisday' => ['デフォルトの日付はこの日になってま', ''],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1241 '24hour' => ['24時間制4桁でね<br>(0000〜2359)<br>%sは時刻指定なし', 'in 24-hour<br>(0000-2359)<br>%s for whole day'],
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1242 '24hourtxt' => ['24時間制4桁でね(0000〜2359), %sは時刻指定なし', 'in 24-hour(0000-2359), %s for whole day'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1243 'reqnotify' => ['通知メイルいるけ?', 'Previous notification'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1244 'rightnow' => ['登録時にすぐ', 'Right now on registration'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1245 'immediatenote' => ['に以下の予定を登録しました',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1246 ", Your schedule has been registered as follows;"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1247 'registerer_is' => ['登録名義: ', 'Register as '],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1248 'registerer' => ['登録者: ', 'registerer: '],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1249 'about' => ['約', 'about'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1250 'minutes' => ['分', 'minutes'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1251 'hours' => ['時間', 'hour(s)'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1252 'days' => ['日', 'day(s)'],
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1253 'daystodisplay' => ['日分表示', 'days to display'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1254 'before' => ['前', 'before'],
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1255 'precedingday' => ['前日', 'Preceding day'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1256 'theday' => ['当日朝', "the day's morning"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1257 'night' => ['(夜)', '(night)'],
63
e2aa6180c2c6 Show the number of group member in groupman().
HIROSE Yuuji <yuuji@gentei.org>
parents: 62
diff changeset
1258 'publicok' => ['アカウント保持者全員<br>に見せてもええね?',
e2aa6180c2c6 Show the number of group member in groupman().
HIROSE Yuuji <yuuji@gentei.org>
parents: 62
diff changeset
1259 'visible to anyone who has account of this board?'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1260 'public' => ['公', 'pub'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1261 'nonpublic' => ['非', 'sec'],
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1262 'through' => ['〜', '=&gt;'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1263 'yes' => ['はいな', 'yes'],
29
e7a01e561e28 Message 'no' should contain only 'no'.
HIROSE Yuuji <yuuji@gentei.org>
parents: 28
diff changeset
1264 'no' => ['やだ', 'nope'],
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1265 'wnames' => [%w[日 月 火 水 木 金 土],
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1266 %w[sun mon tue wed thu fri sat]],
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1267 'whichday' => ['<small>(まとめ登録の場合)</small><br>期間中のどの日に?',
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1268 '<small>(On multiple registration)</small><br>Which days in the term?'],
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1269 'singleday' => ['一日分だけ登録', '1day regist'],
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1270 'everyday' => ['毎日', 'everyday'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1271 'invaliddate' => ['日付指定が変みたい', 'Invalid time string'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1272 'past' => ['それはもう過去の話ね', 'It had Pasted'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1273 'putsomething' => ['何か書こうや', 'Write some message please'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1274 'appended' => ['既存の予定に追加しました', 'Appended'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1275 'append' => ['追加', 'append'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1276 'join' => ['参加', 'join'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1277 'regist' => ['登録', 'register'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1278 'remove' => ['削除', 'remove'],
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1279 'move' => ['移動', 'move'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1280 'newdate' => ['移動先時刻', 'New date'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1281 'deletion' => ['完全消去', 'deletion'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1282 'deletionwarn' => ['OK押したら即消去。確認とらないぞ',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1283 'Hitting OK immediately delets this group, be carefully!'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1284 'deluser' => ['%s ユーザ消してええかの?', "Delete the user `%s'"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1285 'delgroup' => ['%s グループ消してええかの?', "Delete the group `%s'"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1286 'really?' => ['ほんまにええけ?', 'Really?'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1287 'chicken' => ['ふっ、腰抜けめ', 'Hey, chicken boy'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1288 'modify' => ['修正', 'modify'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1289 'done' => ['完了', 'done'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1290 'success' => ['成功', 'success'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1291 'failure' => ['失敗', 'failure'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1292 'tomonthlist' => ['%s の一覧', 'all %s table'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1293 'notifysubj' => @mybase+"'s reminder for your plan",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1294 'introduce' => ['はいこんにちは、'+@mybase+'ですよ〜。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1295 "Hi, this is #{@mybase}'s notification."],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1296 'notifymail' => ['こんな予定がありまっせ。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1297 "You have some eschedule below;"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1298 'notification' => ['の通知', 'notification'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1299 'newaccount' => ["新しいアカウントを作りました。\n"+
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1300 "パスワードは %s さん宛に送信しておきました。\n",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1301 "You got new account for #{@mybase}\n" +
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1302 "Password was sent to %s.\nThank you.\n"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1303 'accessfrom' => ["%s からのアクセスによる送信\n",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1304 "This mail was sent by the access from %s\n"],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1305 'newpassword' => ["%s さんのパスワードは %s です。\n",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1306 "The password of %s is %s\n"],
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1307 'mischief' => ["身に覚えのない場合はMLへの代理登録の可能性があります。
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1308 上記URLが見慣れたものならばアクセスしてみるか、
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1309 このURLの管理人(%s さん)に問い合わせてみて下さい。
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1310 それらも心当たりのない場合はいたずらです。対処しますので管理人まで御連絡下さい。",
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1311 'If you have no idea of the reason for getting this message, '+
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1312 'it may be a invitation of mailing list from your friend.
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1313 Please try to access URL above if it is familiar one or
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1314 contact to the administrator of the site(is %s).
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1315 If you have completely no clue for this invitation,
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1316 it might be a mischief by someone else. Please notice the fact
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1317 to the administrator. Thank you.'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1318 'user' => ['ユーザ', 'user'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1319 'group' => ['グループ', 'group'],
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1320 'mladdress' => ['公開MLアドレス(%s以外にしたい場合設定する)',
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1321 "Public ML address(if you set to diffrent address than `%s')"],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1322 'fromhack' => ['ML配送時のFrom:を常にMLのアドレスにする
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1323 (From:にしか返さないケータイ参加者が多いときにオススメ)',
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1324 'Set From: address of all ML messages to ML address, which is convenient
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1325 to keep responses from cellular phones surely to ML address. Most cellular
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1326 phones tend to return only from: address.'],
66
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
1327 'inviteonly' => ['管理者のみ加入操作可能',
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
1328 'Only administrators can add new members.'],
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
1329 'invite-error' => ['%s への加入はグループ管理者のみが操作できます。',
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
1330 "Only administrator of this group(`%s') can add you."],
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
1331 'limitsender' => ['アカウント保持者のみ送信可能',
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
1332 'Allow only account holders to post to ML'],
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
1333 'xmlname' => ['X-ML-Nameヘッダの値("%s" 以外にしたい場合設定する)',
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
1334 'Value of X-ML-Name header ("%s" for default)'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1335 'personal' => ['個人で', 'personal'],
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1336 'registas' => ['グループ予定として登録?', 'Register as group?'],
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1337 'headsched' => ['下の枠内に予定を記入: 1行以内で短めに。
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1338 長くなるときは2行目以降に詳細を。',
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1339 'Put shortest sentence as possible within 1 line.
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1340 Or, put short subject in the first line, details in latter lines.'],
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1341 'joinquit' => ['入退会', 'joining/quiting'],
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1342 'operation' => ['操作', 'operation'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1343 'of' => ['の', "'s"],
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
1344 'id' => ['ID(英単語かローマ字の分かりやすい1単語半角空白なしで)', 'ID(without spaces)'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1345 'name' => ['名前', 'name'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1346 'anystring' => ['(日本語OK)', '(any length, any characters)'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1347 'setto' => ['を設定 → ', 'set to '],
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1348 'dupname' => ['あー、%sってグループ名は既にあるん素。別のにして.',
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1349 "Group name `%s' already exists, choose another name."],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1350 'management' => ['管理', 'management'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1351 'administrator' => ['管理者', 'Administrator'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1352 'newgroup' => ['新規グループ作成', 'Create new group'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1353 'adminop' => ['管理<br>操作', "Administrative<br>operation"],
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1354 'sendall' => ['一斉送信', "write to members"],
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1355 'sendall_err' => ["%s ファイルで mailprefix と maildomain を定義しとかないと送れまへん。
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1356 例: mailprefix=yuuji-after5
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1357 maildomain=gentei.org
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1358
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1359 さらに、.qmail-$mailprefix-default も以下のように用意しておこね。
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1360 | ./#{@myname} -list",
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1361 "You should define `mailprefix' and `maildomain' in %s file before
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1362 sending message to all.
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1363 (ex.) mailprefix=yuuji-after5
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1364 maildomain=gentei.org
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1365
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1366 And then prepare .qmail-$mailprefix-default file as below.
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1367 | ./#{@myname} -list"],
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1368 'sendall_head' => ['「%s」宛のメイル送信', "Send message to `%s'"],
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
1369 'sendmem_head' => ['「%s」さん宛のメイル送信', "Send message to `%s'"],
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1370 'sendall_note' => ['メンバーへの連絡だけでなく、グループ非加入者がこれから加入する旨の通知などにも有用。',
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1371 "Send this message to all of group."],
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1372 'sendall_done' => ['送信完了', "sending message done"],
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1373 'body' => ['本文', 'Body'],
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1374 'rcptto' => ['宛先', 'Recipients'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1375 'member' => ['メンバー', 'Member'],
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1376 'personalmode' => ['自分のだけ表示モード', 'Display Personal Only'],
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1377 'normalmode' => ['全員分表示モード', "Display Everyone's"],
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1378 'display' => ['予定表示行: ', 'Display schedule of: '],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1379 'nameonly' => ['名前のみ', 'Name Only'],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1380 'head5char' => ['先頭5文字', 'Head 5 chars'],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1381 'headline' => ['先頭1行', 'Headline only'],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1382 'whole' => ['長くても全部', 'Whole text'],
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1383 'hldays' => ['最新X日分強調', 'Hilight Recent X-days'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1384 'addedtogroup' => ['をグループに追加 →', 'added to the group:'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1385 'removedfromgp' => ['をグループから削除:', 'removed from the group:'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1386 'soleadmin' => ['%s は %s の唯一の管理者なのでやめられないのだ',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1387 "%s is sole administrator of %s. Cannot retire."],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1388 'recursewarn' => ['個人では加入してないが、別の加入グループがこのグループに入っているので実質参加していることになっている。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1389 'Though this member does not join to this group, it is assumed to be joining this group because other group where one joins is joined to this group.'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1390 'regaddress' => ['登録アカウント名', 'Account id'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1391 'existent' => ['既にあるんすよ → ', 'Already exists: '],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1392 'mailaddress' => ['通知送付先アドレス', 'Notification email address'],
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1393 'multipleok' => ['<br>(スペースで区切って複数指定可)',
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1394 '<br>(Two or more addresses are OK by delimiting with space.)'],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1395 'weburl' => ['ゲストブックとかURL<br><small>(予定への反応を書いて欲しい場所)</small>', 'Your guest book URL'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1396 'usermodwarn' => ['いちいち yes/no とか確認取らないから押したら最後、気いつけて。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1397 'This is the final decision. Make sure and sure.'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1398 'joinmyself' => ['自分自身が既存のグループに対して入る(IN)か出る(OUT)かを決めるのがここ。自分管理のグループに誰かを足すなら「管理操作」、新たにグループを作るなら',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1399 'In this page, you can decide put yourself IN or OUT of the existing groups. If you want to manage the member of your own group, go to'],
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1400 'aboutgroup' => ['グループ %s の操作', "Operations on group `%s'"],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1401 'groupwarn' => ['自分が参加してないグループAに、自分が参加しているグループBが含まれている場合、グループAにも加入していると見なされるので気をつけよう。管理者はグループのニックネームを変えられるよ。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1402 'Though you are not member of group A, you are treated as a member of A, if you join to the group B, which is a member of A. Think the nesting of groups carefully, please. Group administrator can change the group nickname.'],
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1403 'address2send' => ['自分が参加しているグループのメンバーリストの先頭が自分。その直後にある入力欄には、そのML宛メッセージをどの宛先に配送するかを入れられる。そう、MLごとに自分への配送先を変えられるよ。',
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1404 'The first entry of member list of a group to which you belongs, is you. Entry box just after your name is for address list you want to deliver messages to that ML. Thus, you can define different addresses for each ML.'],
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
1405 'skip:' => ['MLへの送信専用メイルアドレスは、アドレスの前に空白入れずに skip: を付けて登録できるよ(例: skip:hoge@example.com。ML登録メンバーのみの投稿を許すMLに書いてエラーを食らったときには、投稿アドレスを skip: つきで登録しとくとええよ。', "You can prefix `skip:' without any blanks to email address to register POST-ONLY address for the ML(eg. skip:you@example.com). When you get rejecting message from ML which allows only members to post, try to add POST-ONLY address to your email addresses entry of that group."],
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1406 'wholemembers' => ['グループ内グループを考慮した上で、現在グループ %s への通知は以下のメンバーに送られる。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1407 "Consiering the groups registered in another group, notification to the group `%s' is send to members as follows."],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1408 'noadmingroup' => ['管理できるグループはないっす',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1409 "'There's no groups under your administration."],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1410 'nickname' => ['ニックネーム', 'nickname'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1411 'shortnameplz' => ['表が崩れるほど長すぎるニックネームは嫌われるよ。短めにね。',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1412 'Because nickname is displayed many times in table, shorter name is prefered.'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1413 'nicknamenote' => ['ニックネームを消去するとデフォルト名になりんす.',
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1414 'Default name is displayed if you remove nickname.'],
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1415 'nothingtodo' => ['って何もやることあらへんかったで',
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1416 'Nothing to do for this transaction.'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1417 'schedlist' => [' and %d days Schedule list',
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1418 'から%d日間の予定一覧'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1419 'nothing' => ['なんもないす', 'Nothing'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1420 'sessionpswd' => ['セッションパスワード(これはいじらないでね)',
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1421 'Session Password(Do not modify this)'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1422 'date' => ['日付', 'Date'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1423 'time' => ['時刻指定', 'Time'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1424 'publicp' => ['公開=yes、非公開=no', 'Public?'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1425 'neednotify' => ['通知メイル(要らないのは消してね)',
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1426 'Leave lines for notification timing'],
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1427 'schedulehere' => ['以下登録内容', 'Your Schedule below']
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1428 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1429 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1430 keyword.collect{|k|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1431 if @msg[k].is_a?(Array)
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1432 @msg[k][@lang]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1433 elsif @msg[k].is_a?(String)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1434 @msg[k]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1435 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1436 ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1437 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1438 }.join(['', ' '][@lang])
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1439 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1440
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1441 def importcookie()
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1442 @cookie.keys.grep(@saveprefsregexp){|v|
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1443 @params[v] = @params[v] || @cookie[v]
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1444 }
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1445 for v in %w[user passwd]
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1446 @params[v] = @params[v] || @cookie[v]
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1447 end
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1448 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1449 def setcookie()
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1450 a = {}
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1451 a['user'] = @params['user'] if @params['user']
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1452 a['passwd'] = @params['passwd'] if @params['passwd']
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1453 ac = gencookie("value", a, 3600*6*1)
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1454 printf "Set-Cookie: %s\n", ac if ac
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1455 p = {}
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1456 @params.keys.grep(@saveprefsregexp){|v|
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1457 p[v] = @params[v].to_s.strip if @params[v] && @params[v] > ''
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1458 }
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1459 c = gencookie("prefs", p, 3600*24*7)
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1460 str = [ac, c].select{|x|x}.join("; ")
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1461 # printf "Set-Cookie: %s\n", str if str>''
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1462 printf "Set-Cookie: %s\n", c if c
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1463 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1464
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1465 def encode(string) # borrowed from cgi.rb
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1466 string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1467 '%' + $1.unpack('H2' * $1.size).join('%').upcase
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1468 end.tr(' ', '+')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1469 end
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1470 def purify(string)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1471 string.gsub(/[\040-\177]/) {encode($&)}
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1472 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1473 def decode!(string)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1474 string.gsub!(/\+/, ' ')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1475 string.gsub!(/%(..)/){[$1.hex].pack("c")}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1476 end
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1477 def decode(string)
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1478 string.gsub(/\+/, ' ').gsub(/%(..)/){[$1.hex].pack("c")}
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1479 end
32
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
1480 def escape(string)
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
1481 string.gsub(/&/n, '&amp;').gsub(/\"/n, '&quot;').
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
1482 gsub(/>/n, '&gt;').gsub(/</n, '&lt;')
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
1483 end
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1484 def quoted(string)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1485 NKF.nkf('-eMQ', string)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1486 end
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1487 def unquoted(string)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1488 NKF.nkf('-emQ', string)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
1489 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1490
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1491 def gencookie(name, a, expire)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1492 x = a.collect{|k, v|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1493 sprintf("%s=%s", k, encode(v)) if v
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1494 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1495 x.delete(nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1496 return nil if x.empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1497 str = x.join('&')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1498 ex = (Time.new+expire).to_s
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1499 sprintf "%s=%s; expires=%s", name, encode(str), ex
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1500 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1501
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1502 def login(altaction = nil)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1503 @O.print @H.elementln("h1", nil){msg('title')}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1504 @O.print @H.elementln("h2", nil){msg('login')}
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1505 format = {'method'=>'POST',
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1506 'action'=> @myname+"?" +(altaction || "-today")}
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1507 @O.print @H.elementln("form", format){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1508 @H.elementln("table", nil){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1509 @H.elementln("tr", nil){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1510 @H.element("td", nil){msg('yourmail')} + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1511 @H.element("td", nil){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1512 sprintf '<input type="text" size="%s" name="user">', @opt['size']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1513 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1514 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1515 @H.elementln("tr", nil){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1516 @H.element("td", nil){msg('passwd')} + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1517 @H.element("td", nil){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1518 sprintf '<input type="password" size="%s" name="passwd">', @opt['size']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1519 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1520 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1521 } + '<input type="submit" value="LOGIN">'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1522 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1523 @O.print footer2()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1524 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1525 def open_pm()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1526 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1527 PasswdMgr.new(@opt['pswddb'])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1528 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1529 STDERR.printf "Cannot open pswd file [%s]\n", @opt['pswddb']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1530 STDERR.printf "euid=#{Process.euid}, uid=#{Process.uid}\n", @opt['pswddb']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1531 nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1532 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1533 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1534 def outputError(*msg)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1535 @O.print @H.p(msg('error')+sprintf(*msg))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1536 end
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1537 def mailaddress(user, grp=nil)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1538 @sc.mailaddress(user, grp)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1539 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1540 def webpage(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1541 @sc.getuserattr(user, "webpage")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1542 end
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1543 def checkauth_mail()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1544 return true # temporary
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1545 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1546 def checkauth()
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1547 if @mailmode && @params['sessionpw']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1548 return checkauth_mail
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1549 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
1550 auth = catch(:auth) {
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1551 unless @params['user']
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1552 #outputError(@H.a(@myname, msg('loginfirst')))
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
1553 login(@oldargv.join('+'))
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1554 throw :auth, nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1555 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1556 unless pm=open_pm()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1557 outputError(msg('autherror'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1558 throw :auth, nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1559 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1560 user, passwd = @params['user'], @params['passwd']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1561 email = mailaddress(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1562 if !checkmail(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1563 outputError(msg('mailerror'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1564 throw :auth, nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1565 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1566 if pm.userexist?(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1567 if pm.checkpasswd(user, passwd)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1568 throw :auth, true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1569 elsif passwd == @opt['forgot']
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
1570 newp = pm.setnewpasswd(user, @opt['pswdlen'].to_i)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1571 sendMail(email, "#{@mybase} password",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1572 "(#{ENV['REMOTE_ADDR']} からのアクセスによる送信)\n" +
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1573 @opt['url'] + "\n" +
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1574 "#{@mybase} 用の #{user} さんのパスワードは\n" +
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1575 (newp || "未定義") + "\nです。\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1576 @O.print @H.p("#{email} 宛に送信しておきました")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1577 throw :auth, nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1578 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1579 outputError(msg('pswderror'))
22
8803e5d52611 Show guidance when wrong password entered.
HIROSE Yuuji <yuuji@gentei.org>
parents: 18
diff changeset
1580 @O.print @H.p(sprintf(msg('forgotguide'), @opt['forgot']))
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1581 throw :auth, nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1582 end
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1583 elsif passwd == ''
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1584 # Create new user from Web-UI
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1585 newp = pm.setnewpasswd(user, @opt['pswdlen'])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1586 @sc.createuser(user, user)
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1587 putLog("New user [#{user}] created\n")
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1588 sendMail(@opt['maintainer'], "After5 New User",
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1589 sprintf("URL=%s\nREMOTE_ADDR=%s\nuser=%s",
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1590 @opt['url'], ENV['REMOTE_ADDR'], user))
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1591 sendMail(email, "#{@mybase} new account",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1592 sprintf(msg('accessfrom'), ENV['REMOTE_ADDR']) +
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1593 sprintf(@opt['url']) + "\n" +
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1594 sprintf(msg('newpassword'), user, newp) +
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1595 sprintf(msg('mischief')))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1596 @O.print @H.p(sprintf(msg('newaccount'), user))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1597 @O.print @H.p(@H.a(@myname, msg('login')))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1598 throw :auth, nil
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1599 else
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1600 outputError(msg('pswderror'))
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1601 throw :auth, nil
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1602 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1603 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1604 if auth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1605 return true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1606 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1607 return false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1608 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1609 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1610 def safecopy(string)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1611 return nil unless string
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1612 if $SAFE > 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1613 cpy=''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1614 string.split('').each{|c|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1615 cpy << c[0].chr if c[0] != ?` # `
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1616 }
28
ff684484b12a Fix untainting target.
HIROSE Yuuji <yuuji@gentei.org>
parents: 27
diff changeset
1617 cpy.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1618 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1619 string
28
ff684484b12a Fix untainting target.
HIROSE Yuuji <yuuji@gentei.org>
parents: 27
diff changeset
1620 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1621 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1622 def checkmail(mail)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1623 account, domain = mail.scan(/(.*)@(.*)/)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1624 return false unless account != nil && domain != nil
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1625 return false unless /^[-0-9a-z_.]+$/oi =~ domain.toeuc
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1626 domain = safecopy(domain)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1627 require 'socket'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1628 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1629 TCPSocket.gethostbyname(domain)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1630 return true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1631 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1632 if test(?x, @opt["hostcmd"])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1633 open("| #{@opt['hostcmd']} -t mx #{domain}.", "r") {|ns|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1634 #p ns.readlines.grep(/\d,\s*mail exchanger/)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1635 return ! ns.readlines.grep(/is handled .*(by |=)\d+/).empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1636 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1637 elsif test(?x, @opt["nslookup"])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1638 open("| #{@opt['nslookup']} -type=mx #{domain}.", "r") {|ns|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1639 #p ns.readlines.grep(/\d,\s*mail exchanger/)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1640 return ! ns.readlines.grep(/\d,\s*mail exchanger/).empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1641 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1642 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1643 return false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1644 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1645 end # checkmail
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1646
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1647 # Logging
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1648 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1649 def putLog(msg)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1650 msg += "\n" unless /\n/ =~ msg
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1651 open(@opt["logfile"], "a+") {|lp|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1652 lp.print Time.now.to_s + " " + msg
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1653 }
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1654 msg
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1655 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1656
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1657 def sendnotify(whom, subj, body)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1658 users = users()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1659 if grepgroup(whom)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1660 recipients = @sc.members(whom)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1661 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1662 recipients=[whom]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1663 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1664 for u in recipients
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1665 if users.grep(u)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1666 sendMail(mailaddress(u), subj, body)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1667 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1668 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1669 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1670
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1671 def dospool(dir, outhandle)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1672 seq=1
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1673 seqfile=File.expand_path("seq", dir).untaint
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1674 spooldir=File.expand_path("spool", dir).untaint
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1675 test(?d, spooldir) or Dir.mkdir(spooldir)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1676 if test(?s, seqfile)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1677 seq=open(seqfile, "r"){|s|s.gets.to_i}
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1678 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1679 seq+=1 while test(?s, (newfile=sprintf("%s/%d", spooldir, seq)))
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1680 open(newfile, "w") do |spoolfile|
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1681 countdone = nil
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1682 while line=STDIN.gets
76
53e747495502 Bug-fix: Regexp matching should be done in euc-jp.
HIROSE Yuuji <yuuji@gentei.org>
parents: 75
diff changeset
1683 if !countdone && /^X-ML-Name: / =~ line.toeuc
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1684 line += sprintf("X-Mail-Count: %d\n", seq)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1685 coutndone=true
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1686 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1687 spoolfile.print line
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1688 outhandle.print line
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1689 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1690 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1691 open(seqfile, "w"){|s| s.puts seq.to_s} # update `seq' file
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1692 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1693 def mlseq(dir)
65
3e91dd66deb6 Return 1 if /seq file is not there.
HIROSE Yuuji <yuuji@gentei.org>
parents: 64
diff changeset
1694 test(?s, (seqfile = dir+"/seq")) ?
3e91dd66deb6 Return 1 if /seq file is not there.
HIROSE Yuuji <yuuji@gentei.org>
parents: 64
diff changeset
1695 open(seqfile, "r"){|s|s.gets.to_i+1}
3e91dd66deb6 Return 1 if /seq file is not there.
HIROSE Yuuji <yuuji@gentei.org>
parents: 64
diff changeset
1696 : 1
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1697 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1698 def sendMail(to, subject, body, from=nil, rcptto=nil, header={},
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1699 thru=nil, spoolto=false)
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
1700 # rcptto should be an Array or nil
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1701 body = NKF.nkf("-j", body) unless thru
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1702 subject = NKF.nkf("-jM", (subject||"No subject").strip)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1703 to = safecopy(to) # cleanup tainted address
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1704 subject.gsub!(/\n/, '')
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
1705 rcptto.reject!{|i| /^(skip|off):/i =~ i} if rcptto.is_a?(Array)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1706 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1707 if (m=open("|-", "w"))
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1708 header.each do |h, v|
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1709 m.printf("%s: %s\n", h.strip, v.strip)
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1710 end
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1711 unless thru
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1712 m.print "To: #{to}\n"
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1713 from and m.print "From: #{from}\n"
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1714 m.print "Subject: #{subject}\n"
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1715 m.puts "Mime-Version: 1.0
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1716 Content-Transfer-Encoding: 7bit
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1717 Content-Type: Text/Plain; charset=iso-2022-jp"
82
0ca2c48f8387 Refrain from putting Date: header at mail injection(with sendmail command).
HIROSE Yuuji <yuuji@gentei.org>
parents: 81
diff changeset
1718 # m.puts "Date: #{Time.now.strftime("%a, %d %b %Y %T %z")}"
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1719 m.print "\n"
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1720 end
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1721 m.write body
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1722 m.close
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1723 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1724 # exec(@attr['mail'], "-s", subject, to)
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
1725 recipient = rcptto || to.split(/,\s*|\s+/)
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1726 #p recipient
56
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
1727 File.umask(027)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1728 if spoolto && spoolto.is_a?(String) &&
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1729 proc {
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1730 require 'fileutils'
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1731 begin
67
a421c2fefc32 Fix the argument for FileUtils.mkdir_p()
HIROSE Yuuji <yuuji@gentei.org>
parents: 66
diff changeset
1732 test(?d, spoolto) or FileUtils.mkdir_p(spoolto, :mode => 0750)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1733 test(?w, spoolto)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1734 rescue
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1735 nil
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1736 end}.call &&
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1737 (tee=open("|-", "w")) # popen should be done in if-condition
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1738 dospool(spoolto, tee)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1739 else
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1740 if ENV['MAILCMD']
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1741 #exec("qmail-inject", "yuuji@gentei.org", "yuuji@koeki-u.ac.jp")
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1742 open("/tmp/body", "w") {|w| w.print STDIN.readlines.join
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1743 w.puts "---"
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1744 w.puts recipient.join(",\n")
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1745 w.puts header.inspect
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1746 w.puts "ENV: #{ENV.inspect}"
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1747 }
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1748 exit 0
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1749 elsif header['Return-path'] && /-@/ =~ header['Return-path']
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1750 # if VERP is requested
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1751 mailcmd = ENV['MAILCMD'] || @opt['sendmail']
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1752 contents = STDIN.readlines
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1753 recipient.uniq.each {|r|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1754 local, domain = header['Return-path'].split("@")
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1755 newlocal = local+r.sub("@", "=")
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1756 verp = newlocal+"@"+domain
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1757 verp = safecopy(verp)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1758 open("| #{mailcmd} -f#{verp} -- #{r}", "w") {|m|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1759 m.write contents.join
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1760 }
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1761 }
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1762 else
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
1763 recipient.unshift "-f"+header['Return-path'] if header['Return-path']
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1764 exec(ENV['MAILCMD'] || @opt['sendmail'], *recipient)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
1765 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
1766 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1767 exit 0;
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1768 end
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
1769 putLog("Sent '#{subject.toeuc}' to #{to}\n")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1770 return true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1771 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1772 putLog("FAILED! - Sent '#{subject}' to #{to}\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1773 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1774 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1775 end # sendMail
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1776
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1777 def today()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1778 today = Time.now
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1779 showtable(today)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1780 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1781 def isleap?(y)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1782 if y%400 == 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1783 true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1784 elsif y%100 == 0 || y%4 != 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1785 false
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1786 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1787 true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1788 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1789 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1790 def daysofmonth(year, month)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1791 dl = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1792 if month != 2 || !isleap?(year)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1793 dl[month-1]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1794 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1795 29
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1796 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1797 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1798 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1799 # Return the Time object at the last day of last month
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1800 def lastmonth(today)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1801 Time.at(Time.mktime(today.year, today.month)-3600*24)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1802 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1803 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1804 # Return the Time object at the first day of next month
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1805 def nextmonth(today)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1806 y, m = today.year, today.month
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1807 Time.at(Time.mktime(y, m, daysofmonth(y, m))+3600*24)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1808 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1809
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1810 def month(month)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1811 y, m = month.scan(%r,(\d\d\d\d+)/(\d+),)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1812 if y && m
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1813 showtable(Time.mktime(y, m, 1))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1814 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1815 outputError "%s %s", msg('invaliddate'), month
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1816 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1817 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1818 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1819 def footer1()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1820 "<br>" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1821 @H.element("p"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1822 me = @myname+"?-"; delim = " / "
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1823 @H.a(me+'userman', msg('user', 'management')) + delim + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1824 @H.a(me+'groupman', msg('group', 'management')) + delim + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1825 if /personal/i =~ @params['displaymode']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1826 @H.a(me+'today_n', msg('normalmode'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1827 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1828 @H.a(me+'today_p', msg('personalmode'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1829 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1830 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1831 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1832
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1833 def footer2()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1834 "<hr>" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1835 @H.element("code") {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1836 "This " + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1837 @H.a(@after5url, "After5") + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1838 " board is maintained by " + \
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
1839 @opt['maintainer'].gsub(".", "<span>.</span>").
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
1840 sub('@', "&#x40;") + \
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
1841 '<span style="display: none;">.cut.here</span>' + \
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
1842 "."
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1843 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1844 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1845 def footer()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1846 footer1+footer2
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1847 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1848 def nickname(userORgroup)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1849 if grepgroup(userORgroup)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1850 @sc.groupname(userORgroup)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1851 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1852 @sc.nickname(userORgroup)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1853 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1854 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1855 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1856 # show specified month's calendar
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1857 def showtable(day)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1858 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1859 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1860 end
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
1861
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1862 month = day.month.to_s
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1863 first = Time.mktime(day.year, day.month, 1)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1864 last = daysofmonth(day.year, day.month)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1865 wday1 = first.wday
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1866 start = 1-wday1
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1867 wname = @wnames
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1868 today = Time.now
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1869 todayy = today.year
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1870 todaym = today.month
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1871 todayd = today.day
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1872 tdclass = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1873 tdclass["width"] = "64px" if @oldagent # workaround for NN4
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1874 personal = /personal/ =~ @params['displaymode']
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1875 headline = @params['headline']
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1876 headlinehl = @params['headlinehl']
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1877 hldays = headlinehl.to_i * 3600*24
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1878 recent = {'class'=>'recent'}
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1879 monthstr = sprintf "%d/%d", day.year, day.month
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1880
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1881 holiday = Holiday.new
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1882 # create dayofweek header
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1883 @O.print @H.elementln("h1", nil){monthstr}
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1884 # which mode?
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1885 @O.print @H.p(msg(personal ? 'personalmode' : 'normalmode'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1886 #
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1887 # display table
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1888 @O.print @H.startelement("table", {'border'=>"1", 'class'=>'main'})
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1889
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1890 # day of week
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1891 @O.print @H.startelement("tr")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1892 for w in wname
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1893 @O.print @H.element("th", {'class'=>w}){w.capitalize}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1894 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1895 @O.print "\n"+@H.endelement(nil, true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1896
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1897 # create day table
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1898 column = start
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1899 ## p day, last
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1900 while column <= last
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1901 @O.print @H.elementln("tr", nil){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1902 (column..column+6).collect{|d|
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
1903 todayp = (day.year==todayy && day.month==todaym && d==todayd)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1904 wd=d-column
75
360d7144ab8d Simplify.
HIROSE Yuuji <yuuji@gentei.org>
parents: 74
diff changeset
1905 thisday = first+(d-1)*3600*24
72
6a0c2f85faa3 Canonicalize arguments for isHoliday(), which will be sent to Time.mktime().
HIROSE Yuuji <yuuji@gentei.org>
parents: 71
diff changeset
1906 hd = holiday.isHoliday(thisday.year, thisday.month, thisday.day, wd)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1907 tdclass['class'] = (hd ? 'holiday' : wname[wd])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1908 @H.element("td", tdclass){
13
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
1909 if d>0
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
1910 #date = "%d/%d/%d"%[day.year, day.month, d]
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
1911 date = "%d/%d/%d"%[thisday.year, thisday.month, thisday.day]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1912 @H.element("p", {'class'=>todayp ? 'todayline' : 'dayline'}){
13
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
1913 ##@H.a(@myname+"?-show+"+date, "%4d"%d)
d2c36cb4206a RCS-revision 1.14
HIROSE Yuuji <yuuji@gentei.org>
parents: 12
diff changeset
1914 @H.a(@myname+"?-show+"+date, "%4d"%thisday.day)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1915 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1916 # isHoliday?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1917 if hd
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1918 @H.element("small"){hd.join("<br>")}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1919 end.to_s + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1920 @H.element("p", {'class'=>'topic'}){
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1921 s = @sc.day_all(date, @params['user'], personal)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1922 if !s.empty?
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1923 s.keys.sort.collect{|time|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1924 s[time].keys.sort.collect{|who|
32
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
1925 text = escape(s[time][who]['sched'])
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1926 topic = sprintf "%s%s",
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1927 time == @opt['alldaydir'] ? '' : time+":",
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1928 if personal
9
fbe1de450bd7 RCS-revision 1.10
HIROSE Yuuji <yuuji@gentei.org>
parents: 8
diff changeset
1929 (@params['user'] == who ? "" : nickname(who)+"=") +
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
1930 text ## .split("\n") ##[0]
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1931 else
5
e26bc5d3563b RCS-revision 1.6
HIROSE Yuuji <yuuji@gentei.org>
parents: 4
diff changeset
1932 nickname(who) + \
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1933 if headline == 'whole'
5
e26bc5d3563b RCS-revision 1.6
HIROSE Yuuji <yuuji@gentei.org>
parents: 4
diff changeset
1934 '=' + text
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1935 elsif headline == 'head5char'
5
e26bc5d3563b RCS-revision 1.6
HIROSE Yuuji <yuuji@gentei.org>
parents: 4
diff changeset
1936 '=' + text.gsub(/\n/, '').sub(/(.{5}).*/, '\1')
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1937 elsif headline == 'headline'
5
e26bc5d3563b RCS-revision 1.6
HIROSE Yuuji <yuuji@gentei.org>
parents: 4
diff changeset
1938 '=' + text.split("\n")[0]
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1939 end.to_s
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
1940 end
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1941 if hldays > 0 &&
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1942 (today - s[time][who]['regtime']) < hldays
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1943 topic = @H.element("span", recent){topic}
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1944 end
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1945 topic
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1946 }.join("<br>")
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1947 }.join("<br>\n")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1948 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1949 @opt['tdskip']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1950 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1951 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1952 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1953 @opt['tdskip']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1954 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1955 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1956 }.join
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1957 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1958 column += 7
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1959 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1960
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1961 # month-link
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1962 @O.print @H.elementln("tr", {'class'=>'monthlink'}){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1963 lm1 = lastmonth(day)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1964 lm2 = lastmonth(lm1)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1965 lm3 = lastmonth(lm2)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1966 nm1 = nextmonth(day)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1967 nm2 = nextmonth(nm1)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1968 nm3 = nextmonth(nm2)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1969 [lm3, lm2, lm1, nil, nm1, nm2, nm3].collect{|t|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1970 @H.element("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1971 if t.is_a?(Time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1972 ym = sprintf("%d/%d", t.year, t.month)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1973 @H.a(sprintf("%s?-month+%s", @myname, ym), ym)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1974 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1975 sprintf "%d/%d", day.year, day.month
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1976 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1977 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1978 }.join("\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1979 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1980 @O.print "\n"+@H.endelement(nil, true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1981
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1982 @O.print "showtable" if @params['user'] == @author
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1983 @O.print @H.elementln("form", {'action'=>@myname+"?-month+#{monthstr}", 'method'=>'POST'}){
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1984 choice = [
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1985 [msg('nameonly'), 'name'],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1986 [msg('head5char'), 'head5char'],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1987 [msg('headline'), 'headline'],
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1988 [msg('whole'), 'whole']]
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1989 msg('display') + \
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1990 @H.select('headline', choice, headline) + "/" + \
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1991 msg('hldays') + \
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
1992 @H.select('headlinehl', 0..30, headlinehl) + \
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1993 @H.submit("GO", "GO")
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
1994 }
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1995 @O.print footer
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1996 ##schedule.day_all("2003/12/22")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1997 # @O.print @H.endelement()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1998 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
1999
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2000 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2001 # Put carrying values
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2002 def hiddenvalues()
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2003 h = %w[user displaymode].collect{|v|
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2004 if @params[v]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2005 sprintf "<input type=\"hidden\" name=\"%s\" value=\"%s\">\n",
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2006 v, @params[v]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2007 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2008 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2009 h.delete(nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2010 h.join
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2011 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2012 def date2ymd(date)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2013 %r,(\d\d\d\d+)/(\d\d?)/(\d\d?), =~ date and
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2014 [$1.to_i, $2.to_i, $3.to_i]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2015 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2016 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2017 # Return the string of table
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2018 def dayTableString(user, datestr, range, personal = nil)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2019 #s = @sc.day_all(date, user, personal)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2020 #return '' if s.empty?
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2021 r = ''
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2022 header = @H.startelement("table", {'border'=>'1'}, true)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2023
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2024 day = Time.mktime(*date2ymd(datestr))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2025 i = -1
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2026 while (i+=1) < range
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2027 d = Time.at(day+i*3600*24)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2028 date = sprintf("%04d/%02d/%02d", d.year, d.month, d.day)
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2029 datewn = @H.element("span", {'class'=>@wnames[d.wday]}){
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2030 sprintf("%s(%s)", date, @msg['wnames'][@lang][d.wday])
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2031 }
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2032 s = @sc.day_all(date, user, personal)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2033 next if s.empty?
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2034
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2035 r << @H.element("tr", nil){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2036 @H.element("th", {'class'=>'time'}){'TIME'} + \
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2037 @H.element("th", nil){'Who - '+datewn+' - What'}
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2038 }
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
2039 for time in s.keys.sort
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2040 tstr = case time
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2041 when @opt['alldaydir']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2042 msg('allday')
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2043 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2044 sprintf "%02d:%02d", time.to_i/100, time.to_i%100
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2045 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2046 r << @H.startelement("tr", nil, true)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2047 r << @H.element("th", {'class'=>'time'}){tstr}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2048 r << @H.element("td"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2049 @H.elementln("table"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2050 s[time].keys.collect{|who|
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2051 editable = (user==who || @sc.ismember(user, who))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2052 groupp = grepgroup(who)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2053 @H.element("tr"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2054 @H.element("td", {'class'=>groupp ? 'group' : 'who'}){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2055 if !groupp && webpage(who)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2056 @H.a(webpage(who), nickname(who))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2057 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2058 nickname(who)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2059 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2060 } + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2061 @H.element("td"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2062 if editable
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2063 s[time][who]['pub'] ? msg('public') :
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2064 msg('nonpublic')
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2065 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2066 @opt['tdskip']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2067 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2068 } + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2069 @H.element("td"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2070 if editable
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2071 @H.a(@myname+"?-modify+#{date}/#{time}/#{who}",
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2072 msg('modify'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2073 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2074 @opt['tdskip']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2075 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2076 } + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2077 @H.element("td"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2078 if editable
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2079 @H.a(@myname+"?-remove+#{date}/#{time}/#{who}",
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2080 msg('remove'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2081 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2082 @opt['tdskip']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2083 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2084 } + \
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2085 @H.element("td"){
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2086 if editable
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2087 @H.a(@myname+"?-move+#{date}/#{time}/#{who}",
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2088 msg('move'))
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2089 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2090 @opt['tdskip']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2091 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2092 } + \
32
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2093 @H.element("td"){escape(s[time][who]['sched'])}
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2094 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2095 }.join("\n")
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2096 }
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2097 }
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2098 r << @H.endelement()
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2099 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2100 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2101 footer = @H.endelement()
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2102 if r > ''
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2103 header + r + footer
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2104 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2105 ''
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2106 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2107 end
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2108 def dayTextString(user, datestr, range, personal = nil)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2109 r = ''
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2110 cols = 20
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2111 header = "-" * cols + "\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2112
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2113 day = Time.mktime(*date2ymd(datestr))
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2114 i = -1
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2115 while (i+=1) < range
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2116 d = Time.at(day+i*3600*24)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2117 date = sprintf("%04d/%02d/%02d", d.year, d.month, d.day)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2118 datewn = sprintf("%s(%s)", date, @msg['wnames'][@lang][d.wday])
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2119 s = @sc.day_all(date, user, personal)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2120 next if s.empty?
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2121
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2122 r << sprintf("TIME Who %s - What\n", datewn)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2123
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2124 for time in s.keys.sort
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2125 tstr = case time
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2126 when @opt['alldaydir']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2127 msg('allday')
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2128 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2129 sprintf "%02d:%02d", time.to_i/100, time.to_i%100
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2130 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2131 r << s[time].keys.collect{|who|
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2132 editable = (user==who || @sc.ismember(user, who))
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2133 groupp = grepgroup(who)
32
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2134 sprintf("%-5s %-10s %s",
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2135 tstr, nickname(who), escape(s[time][who]['sched']))
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2136 }.join("\n") + "\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2137 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2138 r << "-" * cols + "\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2139 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2140 footer = "That's all\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2141 if r > ''
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2142 header + r + footer
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2143 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2144 ''
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2145 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2146
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2147 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2148 #
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2149 # new form
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2150 def displayRegistForm(date, multiple = true)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2151 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2152 # Link button to add new plan
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2153 #now = Time.now+3600*24
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2154 thisyear, thismonth, thisday = date.scan(%r,(\d\d\d\d+)/(\d+)/(\d+),)[0]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2155 user = @params['user']
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2156 now = Time.mktime(thisyear, thismonth, thisday.to_i, Time.now.hour)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2157 y, m, d, h, min = now.year, now.month, now.day, now.hour, now.min
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2158 nextweek = Time.at(now+3600*24*7)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2159 ey, em, ed = nextweek.year, nextweek.month, nextweek.day
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2160 rcsp = (multiple ? {'colspan'=>'2'} : nil)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2161 wnames = @msg['wnames'][@lang]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2162 wnames << @msg['everyday'][@lang]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2163
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2164 @O.print @H.element('h2', nil, true){msg('addsched')}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2165 @O.print @H.element('p', nil){msg('defthisday')}
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2166
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2167 @O.print @H.element("form", {'action'=>@myname+"?-addsched", 'method'=>'POST'}){
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2168 border1 = {'border'=>'1'}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2169 border1c = {'border'=>'1', 'class'=>'c'}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2170 mygroup = @sc.groups().select{|g|@sc.ismember(user, g)}
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2171 @H.elementln('table', border1){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2172 @H.elementln('tr'){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2173 @H.element('th'){'Name'} + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2174 @H.element('td', rcsp){
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2175 hiddenvalues() + @sc.nickname(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2176 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2177 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2178 @H.elementln('tr'){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2179 @H.element('th'){'Year'} + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2180 @H.element('td'){@H.select("year", y..y+5, y)} + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2181 if multiple
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2182 @H.element('td'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2183 d1 = msg('singleday')
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2184 msg('through')+@H.select("endyear", [d1]+(y..y+5).to_a, d1)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2185 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2186 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2187 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2188 @H.elementln('tr'){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2189 @H.element('th'){'Month'} + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2190 @H.element('td'){@H.select("month", 1..12, m)} + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2191 if multiple
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2192 @H.element('td'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2193 msg('through')+@H.select("endmonth", 1..12, em)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2194 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2195 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2196 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2197 @H.elementln('tr'){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2198 @H.element('th'){'Day'} + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2199 @H.element('td'){@H.select("day", 1..31, d)} + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2200 if multiple
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2201 @H.element('td'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2202 msg('through')+@H.select("endday", 1..31, ed)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2203 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2204 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2205 } + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2206 if multiple
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2207 @H.elementln('tr'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2208 @H.element('th'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2209 msg('whichday')
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2210 } + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2211 @H.element('td', rcsp){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2212 @H.elementln('table', border1c){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2213 @H.element('tr'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2214 i=-1
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2215 wnames.collect{|w|
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2216 @H.element('td'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2217 i+=1
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2218 @H.radio('whichday', i.to_s, '', i==wnames.length-1)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2219 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2220 }.join("\n")
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2221 } + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2222 @H.element('tr'){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2223 i=-1
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2224 wnames.collect{|w|
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2225 @H.element('td'){w}
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2226 }.join
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2227 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2228 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2229 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2230 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2231 end + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2232 @H.elementln('tr'){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2233 @H.element('th'){'Time<br>'+ \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2234 sprintf(msg('24hour'), @opt['alldaydir'])} + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2235 @H.element('td', rcsp){
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2236 '<input type=text name="time" value="3000" size=8 maxlength="4">'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2237 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2238 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2239 @H.elementln('tr'){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2240 @H.element('th'){msg('publicok')} + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2241 @H.element('td', rcsp){
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2242 @H.radio('pub', 'yes', msg('yes')+'<br>', true) + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2243 @H.radio('pub', 'no', msg('no'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2244 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2245 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2246 ## table
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2247 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2248 @H.elementln("p"){ # put notify mail checkbox
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2249 msg('reqnotify') + '<br>' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2250 @ntlist.collect{|n, v|
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
2251 # Actual variables of notifylist for submitting is "sub_"+n
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
2252 @H.checkbox("sub_"+n, 'yes', v, @params[n])
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2253 }.join("\n") + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2254 " " + @H.checkbox('rightnow', 'yes', msg('rightnow'), true) + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2255 "\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2256 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2257 if mygroup[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2258 @H.elementln("p"){ # put "register as"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2259 msg('registas') + "<br>\n" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2260 mygroup.collect{|g|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2261 @H.radio('registas', g, @sc.groupname(g))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2262 }.join(' ') + "\n/ " + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2263 @H.radio('registas', 'no', msg('personal'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2264 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2265 end.to_s + "\n" + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2266 @H.radio('editmode', 'remove', 'Delete?') + " / " + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2267 @H.radio('editmode', 'modify', 'Overwrite?') + " / " + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2268 @H.radio('editmode', 'append', 'Append?', true) + "<br>\n" + \
36
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
2269 @H.element("p"){msg('headsched') + "<br>\n" + \
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
2270 @H.element("textarea", @schedulearea){}} + # textarea
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2271 @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2272 } #form
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2273 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2274 #
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2275 # show the schedule list of specified date
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2276 #
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2277 def show(date)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2278 if !checkauth
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2279 return nil
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2280 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2281 user = safecopy(@params['user'])
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2282 personal = (/personal/i =~ @params['displaymode'])
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2283 @params['displaydays'] = @params['displaydays'] || @cookie['displaydays']
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2284 days = @params['displaydays'].to_i
18
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents: 17
diff changeset
2285 days = (days > 0 ? days : 3)
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2286
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2287 # str = @sc.day_all(date, user, personal)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2288 outstr = dayTableString(user, date, days, personal)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2289
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2290 @O.print @H.element("h1", nil){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2291 sprintf msg('fmtdaysschedule'), date
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2292 }
18
399f24a71eb9 Add required files.
HIROSE Yuuji <yuuji@gentei.org>
parents: 17
diff changeset
2293 @O.print @H.element("h2"){msg('schedtable')}
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2294 ## @O.print @H.p()
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2295 @O.print @H.elementln("form", {'action'=>@myname+"?-show+#{date}", 'method'=>'POST'}){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2296 @H.elementln("p"){
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
2297 msg(personal ? 'personalmode' : 'normalmode') + "<br>" + \
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2298 @H.select("displaydays", 1..30, days) + msg('daystodisplay') + \
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2299 @H.submit("GO", "GO")
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2300 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2301 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2302 if outstr > ''
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2303 @O.print outstr
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2304 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2305 @O.print @H.p(msg('noplan'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2306 end #is_empty?
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2307 thisyear, thismonth, thisday = date.scan(%r,(\d\d\d\d+)/(\d+)/(\d+),)[0]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2308 mstr = sprintf "%04d/%02d", thisyear.to_i, thismonth.to_i
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2309 @O.print @H.a(@myname+"?-month+"+mstr,
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2310 sprintf(msg('tomonthlist'), mstr))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2311
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2312
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2313 #
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2314 # Display registration form
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2315 displayRegistForm(date)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2316 @O.print "show" if user == @author
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2317 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2318
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2319 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2320 # call process
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2321 def call_process(cmd, input=nil, timeout=10)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2322 prc = CMDTimeout.new
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2323 fds = prc.start(cmd, timeout, true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2324 if input
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2325 Thread.start {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2326 fds[0].sync = true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2327 fds[0].print.input
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2328 fds[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2329 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2330 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2331 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2332 fds[1].readlines
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2333 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2334 prc.close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2335 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2336 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2337 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2338 # notification registerer
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2339 def notify_time(year, month, day, time, symbol)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2340 if (t = time.to_i) > 2359
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2341 hh = mm = 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2342 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2343 hh, mm = t/100, t%100
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2344 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2345 base = Time.mktime(year.to_i, month.to_i, day.to_i, hh, mm)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2346 if /nt(\d+)([mh])$/ =~ symbol
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2347 return nil if t > 2359
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2348 num, unit = $1.to_i, $2.downcase
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2349 rate = {'h'=>3600, 'm'=>60}[unit] || 3600
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2350 return Time.at(base-rate*num)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2351 elsif /nt(\d+)d/ =~ symbol
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2352 seconds = $1.to_i*3600*24
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2353 tday= Time.at(base-seconds)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2354 target = [tday.year, tday.month, tday.day, @opt['night'].to_i]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2355 targetnight = Time.mktime(*target)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2356 elsif "nttoday" == symbol
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2357 Time.mktime(year.to_i, month.to_i, day.to_i, @opt['morning'])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2358 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2359 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2360 def reg_notify(user, year, month, day, time, text, cancelall = nil)
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
2361 return nil unless @opt['notifymail']
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2362 threshold = 5*60 # Omit notifycation within 30min future
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2363
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2364 y, m, d, t, = year.to_i, month.to_i, day.to_i, time.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2365 if t > 2359
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2366 hh = mm = 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2367 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2368 hh = t/100
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2369 mm = t%100
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2370 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2371 now = Time.now
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2372
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2373 filearg = [user, year, month, day, t]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2374 @ntlist.each{|k, v|
8
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
2375 # @params[k]s are always defined in cookies, so we use @params["sub_"+k]
55548317a101 RCS-revision 1.9
HIROSE Yuuji <yuuji@gentei.org>
parents: 7
diff changeset
2376 @params[k] = @params["sub_"+k]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2377 nt_time = notify_time(year, month, day, t, k)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2378 if !nt_time
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2379 # do nothing for allday schedule's notification before some minutes
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2380 elsif cancelall || nt_time < now+threshold ||
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2381 /yes|on|true|1/ !~ @params[k] || !@params[k]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2382 # cancel
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2383 uf = @sc.remove_crondir(nt_time, user, year, month, day, t)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2384 @sc.removefile(*(filearg+[k]))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2385 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2386 # register
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2387 lf = @sc.register_crondir(nt_time, user, year, month, day, t)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2388 @sc.putfile(*(filearg+[k, lf]))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2389 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2390 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2391 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2392 def cancel_notify(user, year, month, day, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2393 reg_notify(user, year, month, day, time, 'dummy', true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2394 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2395
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2396 def commit_schedule(who, y, m, d, timedir, text, repl, pub)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2397
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2398 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2399
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2400 def regulate_time(y, m, d, tm)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2401 if tm > 2399
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2402 sh, smin = 23, 59
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2403 timedir=@opt['alldaydir']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2404 tmstr = msg('allday')
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2405 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2406 sh = (tm/100).to_i
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2407 smin = (tm%100).to_i
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2408 timedir = sprintf("%04d", tm)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2409 tmstr = sprintf("%d:%02d", sh, smin)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2410 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2411 time = nil
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2412 begin
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2413 time = Time.mktime(y, m, d, sh, smin)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2414 rescue
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2415 outputError "%s<br>\nyear=%s<br>month=%s<br>day=%s<br>time=%s\n",
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2416 msg('invaliddate'),
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2417 @params['year'], @params['month'], @params['day'], @params['time']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2418 return nil
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2419 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2420 [time, timedir, tmstr]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2421 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2422
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2423 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2424 # add or remove a schedule
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2425 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2426 def add_remove(remove = nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2427 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2428 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2429 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2430 user = registerer = @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2431 as = @params['registas']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2432 if as && as > '' && /^no$/ !~ as && @sc.ismember(user, as)
3
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2433 if (gr=grepgroup(as))
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2434 registerer = gr
354e09bb8ce1 RCS-revision 1.4
HIROSE Yuuji <yuuji@gentei.org>
parents: 2
diff changeset
2435 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2436 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2437 now = Time.now
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2438 #y, m, d, h, min = now.year, now.month, now.day, now.hour, now.min
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2439
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2440 $KCODE='e' if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2441 @O.print @params.inspect if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2442 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2443 # Check the validity of specified time
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2444 sy = @params['year'].to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2445 sm = @params['month'].to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2446 sd = @params['day'].to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2447 tm = @params['time'].to_i
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2448
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2449 time, timedir, tmstr = regulate_time(sy, sm, sd, tm)
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2450
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2451 #
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2452 # Check continuous schedule registration
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2453 wwday = @params['whichday'].to_i
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2454 if @params['endyear'] && @params['endmonth'] && @params['endday'] &&
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2455 (ey=@params['endyear'].to_i) > 0 &&
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2456 (em=@params['endmonth'].to_i) > 0 &&
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2457 (ed=@params['endday'].to_i) > 0
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2458 daylist = []
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2459 endtime = Time.mktime(ey, em, ed, 23, 59)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2460 ti = time
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2461 begin
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2462 if wwday==7 || wwday==ti.wday
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2463 daylist << [ti.year, ti.month, ti.day]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2464 end
9
fbe1de450bd7 RCS-revision 1.10
HIROSE Yuuji <yuuji@gentei.org>
parents: 8
diff changeset
2465 end while (ti=Time.at(ti+3600*24)) <= endtime
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2466 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2467 daylist = [[sy, sm, sd]]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2468 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2469
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2470 if !remove && !(@params['schedule'] && @params['schedule'].strip > '')
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2471 outputError msg('putsomething')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2472 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2473 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2474
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2475
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2476 for y, m, d in daylist
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2477 # do remove or addition
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2478 if remove
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2479 cancel_notify(registerer, y, m, d, timedir)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2480 begin
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2481 @sc.remove(registerer, y, m, d, timedir)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2482 #########@O.print @H.p(msg('remove')+msg('done'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2483 rescue
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2484 outputError("Failed"+$!)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2485 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2486 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2487 if time < now
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2488 outputError(msg('past'))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2489 return nil
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2490 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2491 begin
32
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2492
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2493 (text = @params['schedule'].toeuc.strip.gsub(/\r+\n/, $/)) << "\n"
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2494 # text = purify(text)
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2495 STDERR.print text
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2496 replace = (/modify/i =~ @params['editmode'])
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2497 rc = @sc.register(registerer, y, m, d, timedir, text, replace)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2498 if @params['pub'] && /yes/ =~ @params['pub']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2499 @sc.putfile(registerer, y, m, d, timedir, 'pub', "1\n")
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2500 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2501 @sc.removefile(registerer, y, m, d, timedir, 'pub')
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2502 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2503 ######## @O.print @H.p(msg('appended')) if rc == 1
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2504 rescue
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2505 outputError("Failed"+$!)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2506 end
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
2507 text = @sc.getschedule(registerer, y, m, d, timedir)
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2508 reg_notify(registerer, y, m, d, timedir, text)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2509
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2510 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2511
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2512 end
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2513
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2514 if !remove && @params['rightnow'] && /yes/i =~ @params['rightnow']
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2515 header = sprintf("%s\n%s/%s/%s%s %s %s\n%s%s%s\n%s\n",
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2516 @opt['url'],
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2517 sy, sm, sd,
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2518 if daylist.length > 1
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2519 "-%s/%s/%s" % daylist[-1]
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2520 end,
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2521 tmstr, msg('immediatenote'),
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2522 msg('registerer_is'), nickname(registerer),
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2523 if user!=registerer
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2524 sprintf(" (%s%s)",
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2525 msg('registerer'), nickname(user))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2526 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2527 ""
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2528 end,
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2529 "-"*70)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2530 sendnotify(registerer, "Registration completed", header+text)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2531 end
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2532 unless @mailmode
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2533 show(sprintf("%04d/%02d/%02d", sy, sm, sd))
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2534 @O.print "add_remove" if user == @author
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2535 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2536 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2537
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2538 # add
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2539 def addsched()
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2540 if "move" == @params['editmode']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2541 add_remove(:remove)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2542 for p in %w(year month day time) do
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2543 @params[p] = @params["new"+p]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2544 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2545 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2546 add_remove(/^remove/i =~ @params['editmode'])
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2547 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2548
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2549 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2550 # Display remove or modify screen
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2551 def remove_modify(datetime, editmode)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2552 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2553 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2554 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2555
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2556 user = @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2557 y, m, d, time, dummy, as =
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2558 datetime.scan(%r,(\d\d\d\d+)/(\d+)/(\d+)/(\d+)(/(.+))?,)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2559 # datetime always contains trailing slash generated by parsedate
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2560 # but if the trailing part is a user(not a group), it is removed
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2561 # because it filtered out by grepgroup() function
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2562 if ! (y && m && d && time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2563 outputError "Invalid time specification"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2564 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2565 elsif as && as > ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2566 unless @sc.ismember(user, as)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2567 outputError "You have no permission to edit group %s's schedule", as
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2568 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2569 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2570 user = as
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2571 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2572 unless text=@sc.getschedule(user, y, m, d, time)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2573 outputError "%s %s", datetime, msg('noplan')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2574 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2575 end
32
d23a2b3c456b Save schedule text `as is' in a file and escape them for browser.
HIROSE Yuuji <yuuji@gentei.org>
parents: 31
diff changeset
2576 ## text = decode(text)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2577 @O.print @H.elementln("h1"){
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2578 sprintf "%s %s", datetime, msg(editmode)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2579 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2580 @O.print @H.elementln("form", {'action'=>@myname+"?-addsched", 'method'=>'POST'}){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2581 pubp=(@sc.getfile(user, y, m, d, time, 'pub').to_i > 0)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2582 if as
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2583 @H.hidden("registas", as)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2584 end.to_s + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2585 "<input type=\"hidden\" name=\"year\" value=\"%04d\">\n" % y.to_i + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2586 "<input type=\"hidden\" name=\"month\" value=\"%02d\">\n" % m.to_i + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2587 "<input type=\"hidden\" name=\"day\" value=\"%02d\">\n" % d.to_i + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2588 "<input type=\"hidden\" name=\"time\" value=\"%04d\">\n" % time.to_i + \
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2589 if editmode=="move"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2590 @H.elementln("table") {
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2591 @H.elementln("tr", {"colspan" => "2"}) {msg('newdate')} + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2592 @H.elementln("tr") {
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2593 @H.element("th"){"Year"} + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2594 @H.element("td"){@H.select("newyear", y.to_i..y.to_i+5, y)}
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2595 } + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2596 @H.elementln("tr") {
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2597 @H.element("th"){"Month"} + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2598 @H.element("td"){@H.select("newmonth", 1..12, m)}
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2599 } + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2600 @H.elementln("tr") {
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2601 @H.element("th"){"Day"} + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2602 @H.element("td"){@H.select("newday", 1..31, d)}
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2603 } + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2604 @H.elementln("tr") {
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2605 @H.element("th"){"Time"} + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2606 @H.element("td"){
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2607 "<input type=text name=\"newtime\" value=\"#{time}\" " + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2608 "size=\"8\" maxlength=\"4\">"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2609 }
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2610 }
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2611 }
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2612 end.to_s + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2613 @H.elementln("div", {"style" =>
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2614 "visibility: " +
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2615 (editmode=="move" ? "hidden" : "show") + "\""}) {
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2616 msg('reqnotify') + "<br>\n" + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2617 @ntlist.collect{|nt, v|
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2618 cronp = @sc.getfile(user, y, m, d, time, nt)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2619 sprintf "<input type=\"checkbox\" name=\"%s\"%s>%s \n",
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2620 nt, (cronp ? " checked" : ""), v
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2621 }.join + "<br>"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2622 } + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2623 @H.element("textarea", @schedulearea) {text} + "<br>" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2624 @H.radio("editmode", "append", msg('append')) + ' / ' + \
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2625 @H.radio("editmode", "modify", msg('modify'), editmode=="modify")+' / '+\
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2626 @H.radio("editmode", "remove", msg('remove'), editmode=="remove")+' / '+\
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2627 @H.radio("editmode", "move", msg('move'), editmode=="move") + ' / ' + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2628 "<br>\n" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2629 msg('publicok') + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2630 @H.radio("pub", "yes", msg('yes'), pubp) + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2631 @H.radio("pub", "no", msg('no'), !pubp) + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2632 '<br>' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2633 @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2634 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2635 @O.print "remove_modify" if user == @author
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2636 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2637 def remove(datetime)
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2638 remove_modify(datetime, "remove")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2639 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2640 def modify(datetime)
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2641 remove_modify(datetime, "modify")
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2642 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2643 def move(datetime)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
2644 remove_modify(datetime, "move")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2645 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2646
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2647 def prohibitviahttp()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2648 %w[REMOTE_ADDR REMOTE_HOST SERVER_NAME].each{|v|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2649 if ENV[v]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2650 print "Content-type: text/plain\n\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2651 print "Do not call this via CGI"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2652 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2653 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2654 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2655 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2656 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2657 # notify: call via cron
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2658 def notify()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2659 prohibitviahttp()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2660 unless @opt['maintainer']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2661 STDERR.printf "Set maintainer(email-address) in %s\n", @opt['conf']
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2662 STDERR.print "(ex.) maintainer=yuuji@gentei.org\n"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2663 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2664 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2665 Dir.chdir @mydir
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2666 line = "-"*25
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2667 indent = " "
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2668 now = Time.now
78
ec7d483d381d Fix missing notification
HIROSE Yuuji <yuuji@gentei.org>
parents: 76
diff changeset
2669 ntlist = @sc.notify_list(now)
ec7d483d381d Fix missing notification
HIROSE Yuuji <yuuji@gentei.org>
parents: 76
diff changeset
2670 p "notifylist", ntlist if $DEBUG
ec7d483d381d Fix missing notification
HIROSE Yuuji <yuuji@gentei.org>
parents: 76
diff changeset
2671 ntlist.each{|u, datehash|
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2672 dellist = []
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2673 content = datehash.sort.collect{|date, filehash|
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2674 next unless /(\d\d\d\d+)-(\d+)-(\d+)-(\d\d\d\d)/ =~ date
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2675 y, m, d, t = $1.to_i, $2.to_i, $3.to_i, $4.to_i
11
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2676 ddiff=(Time.mktime(y, m, d) \
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2677 - Time.mktime(now.year, now.month, now.day))/3600/24
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2678 if t > 2359
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2679 hhmm = msg('allday')
11
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2680 if ddiff > 1
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2681 comment = "%d%s" % [ddiff, msg('days', 'before')]
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2682 else
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2683 comment = msg(now.hour > 18 ? 'precedingday' : 'theday')
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2684 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2685 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2686 hhmm = sprintf "%02d:%02d", t/100, t%100
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
2687 diff = Time.mktime(y, m, d, t/100, t%100) - now
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2688 if diff < 7200
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2689 comment = "%d%s" % [diff/60, msg('minutes', 'before')]
11
84d3608bb529 RCS-revision 1.12
HIROSE Yuuji <yuuji@gentei.org>
parents: 10
diff changeset
2690 elsif (ddiff == 0)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2691 comment = "%s%d%s" %
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2692 [msg('about'), diff/3600, msg('hours', 'before')]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2693 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2694 comment = "%d%s" % [ddiff, msg('days', 'before')]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2695 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2696 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2697 dellist << filehash['file']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2698 sprintf("%s[[[%d/%d/%d %s]]]%s\n", line, y, m, d, hhmm, line) + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2699 sprintf("(%s %s)\n", comment, msg('notification')) + \
31
aceb533dfa32 Schedule file is already decoded. No need to decode again.
HIROSE Yuuji <yuuji@gentei.org>
parents: 30
diff changeset
2700 indent+filehash['text'].join(indent) + "\n\n"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2701 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2702 # content.delete(nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2703 if content
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2704 if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2705 print content
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2706 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2707 content.unshift(msg('introduce')+"\n"+msg('notifymail')+"\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2708 content.unshift(@opt['url'].to_s+"\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2709 if sendnotify(u, msg('notifysubj'), content.join)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2710 # send mail completed
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2711 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2712 @sc.cleanup_files(dellist)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2713 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2714 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2715 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2716 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2717 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2718 }
79
1acd9c926bd6 Empty check, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 78
diff changeset
2719 if !(list = @sc.notify_list(now)).empty?
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2720 subj = @mybase+": Undeleted old cron files detected"
79
1acd9c926bd6 Empty check, fixed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 78
diff changeset
2721 files = list.collect{|who, whash|
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2722 whash.sort.collect{|date, fhash| fhash['file']}.join("\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2723 }.join("\n")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2724 sendMail(@opt['maintainer'], subj,
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2725 "This is `#{@mybase}' in #{@mydir}\n" +
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2726 "You'd better check and remove these files.\n\n"+files)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2727 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2728
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2729 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
2730 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2731 # ML functions
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2732 def parseaddress(spec) # from catchup.rb
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2733 # Return [email, comment]
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2734 # nil if comment does not exitst.
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2735 if /(.*)\s*<(.*)>/ =~ spec then
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2736 [$2, $1.strip]
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2737 elsif /(.*)\s*\((.*)\)/ =~ spec then
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2738 [$1.strip, $2]
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2739 else
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2740 [spec.strip, nil]
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2741 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2742 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2743 def rewritefrom(email, comment, newseed) # from catchup.rb
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2744 # no need to setcomment here because if comment set, it's enough
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2745 comment.sub!(/(\"?)(.*)\1/, '\2')
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2746 comment += "/" if comment>""
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2747 return comment.gsub(/([^\x00-\x7f]+)/){NKF.nkf('-jM', $1)} +
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2748 email.sub("@", "=")+" <"+newseed+">"
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2749 # end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2750 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2751
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
2752 def tagify_subj(body, tag, removeregexp, fromhack = nil)
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2753 # This method should be generic for other headers than `Subject'?
40
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2754 hold = []
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2755 ret = []
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2756 skip = false
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2757 while line = body.shift
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2758 case line.toeuc
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2759 # #Below does not work correctly when (from|subject): is final line
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2760 # when /^$/
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2761 # hold << "\n"
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2762 # break
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2763 # ## when /^(subject|from): /i
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2764 when /^(\S+): /i, /^$/ # if new header comes or header ends
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2765 if /^subject:/i =~ hold[0] # check previous header in hold space
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2766 sj = hold.join.toeuc.sub("Subject: ", "").gsub(tag, "").strip
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2767 removeregexp && sj && sj.gsub!(removeregexp, "")
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2768 sj = sj.sub(/^(re: *)+/i, "Re: ").gsub("\n", "")
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2769 hold = ["Subject: "+NKF.nkf('-jM', tag+" "+sj).strip+"\n"]
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2770 elsif /^from/i =~ hold[0] && fromhack.is_a?(String)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2771 from = hold.join.toeuc.sub(/From: */i, "").strip
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2772 email, comment = parseaddress(from)
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2773 if (!comment || comment=="") && comment = @sc.ismembersemail(email)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2774 # Reverse conversion of uname<->email
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2775 comment = @sc.nickname(comment) || "whoareyou"
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2776 end
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2777 hold = ["From: "+rewritefrom(email, comment, fromhack)+"\n"]
89
00d203e72f8f Put original received headers aside to reduce hop count
HIROSE Yuuji <yuuji@gentei.org>
parents: 88
diff changeset
2778 elsif /^received:/i =~ line
00d203e72f8f Put original received headers aside to reduce hop count
HIROSE Yuuji <yuuji@gentei.org>
parents: 88
diff changeset
2779 # Put original received headers aside to reduce hop count
00d203e72f8f Put original received headers aside to reduce hop count
HIROSE Yuuji <yuuji@gentei.org>
parents: 88
diff changeset
2780 line = "X-pre"+line
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2781 end
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2782 if /^$/ =~ line.toeuc
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2783 hold << line
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2784 break
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2785 end
40
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2786 ret += hold
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2787 hold = [line]
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2788 when /^\s/ # continued line
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2789 hold << line
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2790 end
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2791 end
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2792 ret + hold + body
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2793 end
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2794 def extract_attachment(attachment)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2795 # Must return [text, href] strings to attached files
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2796 href = ""; text = ""
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2797 dir = @attachmentdir + Time.now.strftime("/%Y%m")
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2798 if %r,(https?://[^/]+), =~ @opt['url']
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2799 server = $1
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2800 else
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2801 msg = "`url' not set in after5.cf"
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2802 return [msg, msg]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2803 end
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2804 kakasi = @opt['kakasi'] && @opt['kakasi']+" -Ha -Ka -Ja -Ea -ka"
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2805 urlbase = sprintf("%s%s/%s",
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2806 server, File.dirname(ENV['SCRIPT_NAME']), dir)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2807 count=0
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2808 attachment.each {|a|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2809 basename = safecopy(File.basename(a['filename']))
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2810 encname = (kakasi ?
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2811 IO.popen(kakasi, "r+") do |k|
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2812 k.puts basename
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2813 k.close_write # force flush
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2814 k.gets.chomp.downcase
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2815 end
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2816 :
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2817 basename
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2818 ).gsub(/([^-_0-9a-z=,.@])/){"~"+$1.unpack("H*")[0].to_s}
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2819 filename = safecopy(dir+"/"+encname)
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2820 umask = File.umask(022)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2821 sz = a['value'].bytesize
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2822 next if sz == 0
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2823 count += 1
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2824 if sz > @attachmentmax
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2825 msg = sprintf("%d: %s is too large(%dMB), skipped\n",
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2826 count, basename, sz/1024**2)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2827 text += msg; href += msg
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2828 next
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2829 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2830 begin
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2831 require 'fileutils'
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2832 (test(?d, dir) && test(?w, dir)) or FileUtils.mkdir_p(dir)
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2833 open(filename, "w") {|x| x.write a['value']}
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2834 File.chmod(0664, filename)
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2835 text += sprintf("%d: %s/%s\n", count, urlbase, encname)
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2836 href += sprintf("%d: <a href=\"%s\">%s/%s</a>\n",
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2837 count, filename, urlbase, encname)
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2838 rescue
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2839 ensure
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2840 File.umask(umask)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2841 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2842 }
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2843 if count>0
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2844 text="\n\n[[Attached files below]]\n"+text
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2845 href="[[Attached files]]\n"+href
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2846 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2847 [text.chomp, href.chomp]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2848 end
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2849 def defaultmladdress(name)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2850 prefix = (@opt['mailprefix'] || "")
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2851 dash = prefix > '' ? "-" : ""
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2852 sprintf("%s%s%s@%s", prefix, dash, name, @opt['maildomain'])
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
2853 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2854 def list()
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2855 # For debug:
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2856 # LOCAL=1 DEFAULT=name ./after5.rb -list
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2857 # $DEFAULT is ML name
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2858 viamail = ENV['LOCAL'] && ENV['DEFAULT'] # called via mail
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2859 from = toadmin = groupmode = fromhack = extract_report = nil
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2860 unless @opt['mailprefix'] && @opt['maildomain']
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2861 if viamail
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2862 STDERR.print msg('sendall_err') % [@opt['conf']]
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2863 exit 0
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2864 else
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2865 @O.print @H.elementln("pre"){msg('sendall_err') % [@opt['conf']]}
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2866 return true
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
2867 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2868 end
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2869 if viamail then
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2870 prohibitviahttp()
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2871 name = unquoted(ENV['DEFAULT'])
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2872 user = @sc.ismembersemail(ENV['SENDER']) # should here be (,name)??
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
2873 if Regexp.new("(.*)("+Regexp.quote(@mailadmsuffix)+")") =~ name
58
d5650f7361d9 Abolish errors-to header.
HIROSE Yuuji <yuuji@gentei.org>
parents: 57
diff changeset
2874 # To: GROUP/adm*@domain
57
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
2875 # -> Forward to group administrator(s)
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
2876 name, toadmin = $1, $2
58
d5650f7361d9 Abolish errors-to header.
HIROSE Yuuji <yuuji@gentei.org>
parents: 57
diff changeset
2877 sendMail("dummy", 'dummy', # Original To: and Subject: go through
57
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
2878 STDIN.readlines.join, nil, @sc.admins(name),
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
2879 {"Return-path" => @opt['maintainer']}, :thru)
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
2880 exit 0
d089cb42619d ML's return-path changed from maintainer to group owners.
HIROSE Yuuji <yuuji@gentei.org>
parents: 56
diff changeset
2881 end
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2882 if @sc.isuser(name) # groupmode = nil
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2883 # First, compare with username
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2884 # groupmode = nil
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2885 # Then, check group name
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2886 elsif grepgroup(name)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2887 groupmode = true
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2888 else # not found
56
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2889 sendMail(@opt['maintainer'], "no group",
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2890 sprintf("Invalid group address: %s(%s@%s)\nSent by %s\n" +
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2891 "URL: %s\n------------\n",
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2892 name, ENV['LOCAL'], ENV['HOST'], ENV['SENDER'],
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2893 @opt['url']) +
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2894 "> "+STDIN.readlines.join("> "))
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2895 exit 0 # should exit 0 in mail mode
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2896 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2897 else # via http
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2898 return nil unless checkauth
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2899 # HERE CGI Params name, subject, attachment and body
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2900 # comes with enctype=multipart/form-data,
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2901 # So we get them via Array
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2902 name = unquoted(@params['name'][0]['value'].untaint)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2903 user = @params['user']
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2904 if @sc.isuser(name)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2905 # groupmode = nil
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2906 elsif grepgroup(name)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2907 groupmode = true
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2908 else
56
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2909 @O.print @H.p("No such group: #{name}")
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2910 return true
ba64f43f07f7 umask of ML/spool changed.
HIROSE Yuuji <yuuji@gentei.org>
parents: 55
diff changeset
2911 end
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2912 nick = @sc.nickname(user)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2913 from = sprintf("%s <%s>", nick, user)
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
2914 subj = @params['subject'][0]['value'].toeuc || "Message from "+@myname
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2915 body = @params['body'][0]['value'].gsub("\r", "").untaint
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2916 # Extract attachment file
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2917 if @params['attachment'].is_a?(Array)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2918 body += (extract_report = extract_attachment(@params['attachment']))[0]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2919 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2920 end
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2921 # Variables here
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2922 # name: Destination group/user name
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2923 # user: Member account or nil(not member)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2924
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2925 # Set values for header rewriting
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2926 # We have to setup these variables:
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2927 # to: Header To:
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2928 # subj: Header Subject:
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2929 # from: Header From:
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2930 # rcpts: Array of recipients addresses
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2931 # header: Hash of additional header values
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2932 # body: String of mail body
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2933 # spooling: Flag if spool ML files nor not
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2934 # mldir: spooling directory name
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2935 if groupmode # Run as ML
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2936 # To: should be ML address
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2937 # Return-path: should be verp of PREFIX-RCPT@DOMAIN
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2938 bracket = @sc.getgroupattr(name, 'subjtag') || @opt['mailbracket']
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2939 xmlname = @sc.getgroupattr(name, 'xmlname') || name
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2940 mldir = @mlbasedir+"/"+name
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2941 to = @sc.getgroupattr(name, 'mladdress') || defaultmladdress(name)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2942 if @sc.getgroupattr(name, 'fromhack')
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2943 fromhack = to
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2944 end
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2945 spooling = @opt['mlspooling']
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2946 returnpath = to.sub("@", @mailadmsuffix+"-@")
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2947 else # Run as p2p mail
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2948 # To: should be Destination user name
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2949 # Return-path: should be PREFIX-USER@DOMAIN or $SENDER(not member)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2950 bracket = "NONE" # Through Subject
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2951 if user
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2952 returnpath = defaultmladdress(quoted(user))
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2953 else
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2954 returnpath = ENV['SENDER']
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2955 end
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2956 ###fromhack = sprintf("%s <%s>", nick, sender)
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2957 fromhack = returnpath
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2958
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2959 xmlname = name
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2960 to = name
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2961 spooling = mldir = nil
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2962 end
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
2963 adminaddr = to.sub("@", @mailadmsuffix+"@")
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2964 if bracket == "NONE"
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2965 sjtag = ""
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2966 tagre = nil
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2967 else
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2968 sjtag = bracket.gsub("%n", nickname(name)).
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2969 gsub("%i", name).
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2970 gsub(/%(\d*)c/){("%0"+$1+"d") % [mlseq(mldir)]}
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2971 tagpt = Regexp.quote(bracket). # compute bracket pattern
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2972 gsub("%n", Regexp.quote(nickname(name))).
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2973 gsub("%i", Regexp.quote(name)).
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2974 gsub(/%(\d*)c/, '\d+')
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2975 tagre = Regexp.new(tagpt)
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2976 if !viamail
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2977 subj = sjtag.strip+" "+subj.gsub(Regexp.new(tagpt), "")
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2978 end
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
2979 end
40
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2980 if viamail then
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2981 body = tagify_subj(STDIN.readlines, sjtag, tagre, fromhack).join
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2982 elsif fromhack # via http
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2983 from = rewritefrom(user, nick, groupmode ? to : returnpath)
40
ca416d5020fe Hack subject tag.
HIROSE Yuuji <yuuji@gentei.org>
parents: 39
diff changeset
2984 end
38
39da23b2edb9 Prepend bracket tag to subject.
HIROSE Yuuji <yuuji@gentei.org>
parents: 37
diff changeset
2985 header = {
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
2986 "X-ML-Driver" => ($hgid || @myname),
38
39da23b2edb9 Prepend bracket tag to subject.
HIROSE Yuuji <yuuji@gentei.org>
parents: 37
diff changeset
2987 "X-ML-Driver-URI" => $myurl,
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2988 "Return-path" => returnpath
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2989 }
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2990 if groupmode
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2991 header["Reply-to"] = to
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2992 header["X-ML-Name"] = xmlname
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2993 header["X-ML-URI"] = sprintf("%s?-groupman+%s", @opt['url'], name)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2994 end
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
2995 Dir.chdir @mydir
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2996 if groupmode # (#includeself)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
2997 rcpts = if viamail
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2998 @sc.members(name)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
2999 else
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3000 @sc.members(name) + [user]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3001 end.collect {|u|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3002 mailaddress(u, name).split(/,\s*|\s+/)}.flatten.uniq
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3003 else
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3004 rcpts = @sc.mailaddress(name).split(/,\s*|\s+/).flatten
86
26c81703a80c Do not send to $SENDER when viamail mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 85
diff changeset
3005 if user && !viamail # HTTP mode
26c81703a80c Do not send to $SENDER when viamail mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 85
diff changeset
3006 rcpts += @sc.mailaddress(user).split(/,\s*|\s+/).flatten # +sender
26c81703a80c Do not send to $SENDER when viamail mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 85
diff changeset
3007 end
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3008 end
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3009 # ENV["QMAILINJECT"] = "r" # for ML mode, use verp
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3010 # For vodafone, QMAILINJECT=r doesn't work correctly
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3011 # On mail mode, check if sender can send message to list.
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3012 if viamail && @sc.getgroupattr(name, 'limitsender')
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3013 s = ENV['SENDER']
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3014 if !catch(:senderok) {
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3015 throw :senderok, true if rcpts.grep(s)[0]
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
3016 throw :senderok, true if @sc.ismembersemail(s, name)
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3017 }
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3018 # sender is not allowed to send to ML
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3019 sendMail(s, "You are not allowed to send to this ML",
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3020 ("Before posting to this list(%s),\n"+
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3021 "subscribe to %s") % [to, @opt['url']],
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3022 adminaddr, nil, {"Return-path" => returnpath})
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3023 exit 0
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3024 end
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3025 end
70
2e293d4d8db4 Not using proc.call for the sake of displaying document title.
HIROSE Yuuji <yuuji@gentei.org>
parents: 69
diff changeset
3026 #
2e293d4d8db4 Not using proc.call for the sake of displaying document title.
HIROSE Yuuji <yuuji@gentei.org>
parents: 69
diff changeset
3027 # OK to send, go ahead
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3028 sendMail(to, subj, body, from, rcpts,
38
39da23b2edb9 Prepend bracket tag to subject.
HIROSE Yuuji <yuuji@gentei.org>
parents: 37
diff changeset
3029 header,
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3030 ENV['SENDER'],
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3031 spooling ? mldir : nil)
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3032 if !viamail then
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3033 @O.print @H.elementln("h1"){msg('sendall_done')}
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
3034 @O.print @H.p(sprintf(msg(groupmode ? 'sendall_head' : 'sendmem_head'),
38
39da23b2edb9 Prepend bracket tag to subject.
HIROSE Yuuji <yuuji@gentei.org>
parents: 37
diff changeset
3035 nickname(name))+" "+msg('done'))
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
3036 @O.print @H.elementln("pre"){extract_report[1].toeuc}
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3037 link2home()
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3038 @O.print footer()
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3039 return true
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3040 end
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3041 exit 0
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3042 end
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3043 def listdraft(name)
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3044 return nil unless checkauth
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3045 return nil unless name
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3046 unless @opt['mailprefix'] && @opt['maildomain']
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3047 @O.print @H.elementln("pre"){msg('sendall_err') % [@opt['conf']]}
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3048 return true
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3049 end
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3050
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3051 user=@params['user']
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3052 nickname = @sc.nickname(user)
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3053 groupmode = @sc.isgroup(name)
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3054 @O.print @H.elementln("h1") {
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3055 @mybase+' '+msg('sendall').sub("<br>", " ")
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3056 }
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3057 @O.print @H.elementln("h2") {
88
c4ea79816b2d Alter messege according to mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 87
diff changeset
3058 sprintf(msg(groupmode ? 'sendall_head' : 'sendmem_head'), nickname(name))
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3059 }
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3060 if groupmode # (#includeself)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3061 list = @sc.members(name) # +user
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3062 else
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3063 list = [name, user]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3064 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3065 @O.print @H.p(sprintf("%s: %s", msg('rcptto'),
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3066 list.collect {|u|
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3067 @H.element("abbr", "title"=>u){
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3068 @sc.nickname(u)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3069 }
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3070 }.join(",\n")))
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3071 @O.print @H.p(sprintf("(total %d)", list.length))+"\n"
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3072 @O.print \
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3073 @H.elementln("form", {
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3074 'action' => @myname+'?-list', 'method'=>"POST",
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3075 'enctype' => "multipart/form-data"}) {
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3076 @H.elementln("table"){
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3077 @H.elementln("tr"){
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3078 @H.element("td"){"To"} + \
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3079 @H.element("td"){
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3080 @H.element("code"){
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3081 groupmode ? defaultmladdress(quoted(name)) : @sc.nickname(name)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3082 }
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3083 }
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3084 } + \
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3085 @H.elementln("tr"){
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3086 @H.element("td"){"Subject"} + \
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3087 @H.element("td"){
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3088 @H.text("subject", "", 40, 128)
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3089 }
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3090 } + \
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3091 @H.elementln("tr"){
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3092 @H.element("td"){"Attachment"} + \
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3093 @H.element("td"){
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3094 @H.element("input", "name"=>"attachment", "type"=>"file", 'multiple'=>true){}
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3095 }
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3096 } + \
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
3097 @H.elementln("tr"){
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3098 @H.element("td"){
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3099 msg('body')
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3100 } + \
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3101 @H.element("td"){
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3102 @H.element("textarea", @schedulearea.merge({"name"=>"body"})){}
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3103 }
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3104 }
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3105 } + # </table>
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3106 @H.hidden("name", name) +
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3107 @H.submit("send", "SEND") +
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3108 @H.reset("clear", "Clear")
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3109 }
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3110 @O.print @H.p(msg('sendall_note'))
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3111 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3112
36
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3113 # put Link to home
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3114 def link2home()
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3115 @O.print @H.p("-&gt; " + @H.a(@myname+"?-today", "Home"))
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3116 end
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3117
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3118 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3119 # user management
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3120 def userman()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3121 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3122 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3123 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3124 user=@params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3125 nickname = @sc.nickname(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3126 tdclass = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3127 tdclass["width"] = "80px" if @oldagent # workaround for NN4
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3128
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3129 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3130 @mybase+' '+msg('user', 'management')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3131 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3132 @O.print @H.p(@sc.mkusermap.inspect) if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3133 @O.print @H.p(msg('usermodwarn'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3134 @O.print \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3135 @H.elementln("form", {'action'=>@myname+"?-usermod", 'method'=>'POST'}){
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
3136 @H.elementln("table", {"class" => "border"}){
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3137 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3138 @H.element("td", tdclass) {msg('regaddress')} + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3139 @H.element("td") {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3140 @H.element("code"){user}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3141 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3142 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3143 @H.elementln("tr"){
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
3144 @H.element("td", tdclass) {msg('mailaddress', 'multipleok')} + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3145 @H.element("td") {
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3146 @H.text("newmail", mailaddress(user), @opt['size'], 180)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3147 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3148 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3149 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3150 @H.element("td", tdclass) {msg('weburl')} + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3151 @H.element("td") {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3152 @H.text("webpage", webpage(user), @opt['size'], 80)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3153 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3154 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3155 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3156 @H.element("td") {msg('nickname')} + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3157 @H.element("td") {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3158 @H.text("nickname", nickname, @opt['size'], 10)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3159 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3160 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3161 } + \
50
0b104c49457a Multiple email addresses can be acceptable
HIROSE Yuuji <yuuji@gentei.org>
parents: 48
diff changeset
3162 @H.elementln("p"){msg('shortnameplz')} + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3163 '<br>' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3164 @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3165 } # form
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3166
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3167 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3168 # Next section, REMOVE USER!
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3169 @O.print @H.elementln("h2"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3170 sprintf "%s %s %s", msg('user'), user, msg('deletion')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3171 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3172 @O.print @H.p(msg('deletionwarn'))+"\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3173 @O.print @H.elementln("form", {'action'=>@myname+"?-delusersub+#{user}", 'method'=>'POST'}){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3174 @H.hidden("user", user) + "\n" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3175 @H.elementln("table"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3176 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3177 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3178 sprintf msg('deluser'), user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3179 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3180 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3181 @H.radio("delete", "yes", msg('yes')) + ' ' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3182 @H.radio("delete", "no", msg('no'), true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3183 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3184 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3185 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3186 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3187 sprintf msg('really?'), user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3188 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3189 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3190 @H.radio("delete2", "yes", msg('yes')) + ' ' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3191 @H.radio("delete2", "no", msg('no'), true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3192 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3193 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3194 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3195 "<br>\n" + @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3196 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3197
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3198
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3199 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3200 def usermod()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3201 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3202 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3203 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3204 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3205 msg('user', 'management')+" "+msg('done')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3206 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3207 user=@params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3208 email = mailaddress(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3209 newmail = @params['newmail']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3210 nickname = @sc.nickname(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3211 newnn = @params['nickname'].to_s.strip
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3212 webpage = webpage(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3213 newweb = @params['webpage']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3214 if email != newmail
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3215 # change user's address
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3216 if newmail == user
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3217 newvalue = nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3218 elsif checkmail(newmail)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3219 newvalue = newmail
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3220 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3221 @O.print @H.elementln("pre"){"Invalid mail address"}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3222 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3223 @O.print @H.elementln("pre"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3224 if @sc.putuserattr(user, 'email', newvalue)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3225 sprintf "new mail address=\"%s\"", mailaddress(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3226 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3227 sprintf "Setting new mail address to \"%s\" failed", newvalue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3228 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3229 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3230 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3231 if nickname != newnn
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3232 if @sc.setnickname(user, newnn)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3233 @O.print @H.p(msg('success'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3234 @O.print @H.elementln("pre"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3235 sprintf "user=\"%s\"\nnickname=\"%s\"", user, @sc.nickname(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3236 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3237 @O.print @H.p(msg('nicknamenote')) if newnn == ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3238 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3239 @O.print @H.p(msg('failure'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3240 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3241 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3242 if newweb > '' && webpage != newweb
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3243 if @sc.putuserattr(user, "webpage", newweb)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3244 @O.print @H.p(msg('success'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3245 @O.print @H.elementln("pre"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3246 sprintf "user=\"%s\"\nwebpage=\"%s\"", user, webpage(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3247 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3248 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3249 @O.print @H.p("Update webpage"+msg('failure'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3250 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3251 end
36
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3252 link2home
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3253 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3254 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3255 # Display form of group management
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3256 def groupman(grp = nil)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3257 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3258 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3259 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3260 user=@params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3261 nickname = @sc.nickname(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3262 tdclass = {}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3263 tdclass["width"] = "80px" if @oldagent # workaround for NN4
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3264 admclass = {'class'=>'admin'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3265 grmap = @sc.groupmap
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3266
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3267 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3268 @mybase+' '+msg('group', 'management')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3269 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3270 $KCODE='e' if $DEBUG
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3271 if grp && group = grepgroup(grp)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3272 @O.print @H.elementln("h2"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3273 sprintf(msg('aboutgroup'), group)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3274 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3275 grmap = {group => grmap[group]}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3276 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3277 @O.print grmap.inspect if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3278 @O.print @H.p(msg('joinmyself')+
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3279 @H.a(@myname+"?-newgroup", msg('newgroup')))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3280 @O.print @H.p(msg('usermodwarn'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3281 @O.print \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3282 @H.elementln("form", {'action'=>@myname+"?-groupmod", 'method'=>'POST'}){
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3283 @H.elementln("table", {'class'=>'border'}){
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3284 grmap.sort.collect{|g, ghash|
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3285 memberp = @sc.ismember(user, g)
68
db1502243712 Do not hover mail addresses of users for non-administrator list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 67
diff changeset
3286 adminp = @sc.isadmin(user, g)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3287 @H.elementln("tr"){
68
db1502243712 Do not hover mail addresses of users for non-administrator list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 67
diff changeset
3288 @H.element("td", adminp ? admclass : nil){
63
e2aa6180c2c6 Show the number of group member in groupman().
HIROSE Yuuji <yuuji@gentei.org>
parents: 62
diff changeset
3289 g + "<br>("+@sc.members(g).length.to_s+")"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3290 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3291 @H.element("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3292 @H.element("div", {'class'=>'c'}) {
68
db1502243712 Do not hover mail addresses of users for non-administrator list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 67
diff changeset
3293 if adminp
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3294 @H.a(@myname+"?-admgroup+#{g}", msg('adminop'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3295 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3296 '--'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3297 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3298 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3299 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3300 @H.element("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3301 if ghash['admin'].grep(user)[0]
67
a421c2fefc32 Fix the argument for FileUtils.mkdir_p()
HIROSE Yuuji <yuuji@gentei.org>
parents: 66
diff changeset
3302 @H.text("groupname-#{g}", ghash['name'], nil, 12)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3303 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3304 ghash['name']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3305 end + '<br>' + \
66
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
3306 # If this group is inviteonly and the user is not a member,
67
a421c2fefc32 Fix the argument for FileUtils.mkdir_p()
HIROSE Yuuji <yuuji@gentei.org>
parents: 66
diff changeset
3307 # one cannot join.
68
db1502243712 Do not hover mail addresses of users for non-administrator list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 67
diff changeset
3308 if memberp && adminp || !@sc.getgroupattr(g, 'inviteonly')
66
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
3309 @H.radio("groupadd-#{g}", "yes", "IN", memberp) + " / " + \
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
3310 @H.radio("groupadd-#{g}", "no", "OUT", !memberp)
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
3311 else
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
3312 @H.element("small"){"("+msg('inviteonly')+")"}
0ae73ca14d99 Display invite-only group.
HIROSE Yuuji <yuuji@gentei.org>
parents: 65
diff changeset
3313 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3314 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3315 @H.element("td"){
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3316 @H.element("div", {'class'=>'memlist5'}){
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3317 memlist = ghash['members']
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3318 if memberp # move this user to the beginning of list
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3319 memlist.delete(user)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3320 memlist.unshift(user)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3321 end
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3322 memlist.collect{|u|
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3323 if u == user
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3324 @sc.nickname(u) + \
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3325 "("+@H.text("mail4-#{g}", memberp, 30, 180)+")"
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3326 else
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3327 @H.a(@myname+"?-listdraft+#{u}",
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3328 @H.element("abbr", "title"=>u) {
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3329 @sc.nickname(u)
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3330 })
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3331 end
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3332 }.join(", ")
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3333 }
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3334 } + \
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3335 @H.element("td"){
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3336 @H.a(@myname+"?-listdraft+#{g}", msg('sendall'))
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
3337 }
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3338 }
27
96eb1aea0517 Expand Array to string.
HIROSE Yuuji <yuuji@gentei.org>
parents: 26
diff changeset
3339 }.join("\n")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3340 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3341 '' + \
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3342 @H.p(msg('address2send')) + \
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
3343 @H.p(msg('skip:')) + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3344 @H.p(msg('groupwarn', 'shortnameplz')) + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3345 @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3346 } # form
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
3347 link2home()
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
3348 @O.print footer()
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3349 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3350 def groupnamesString()
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3351 @H.elementln("p", {'class'=>'listup'}){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3352 @sc.groups().collect{|g|@sc.groupname(g)}.join(", ")
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3353 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3354 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3355 def groupmod()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3356 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3357 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3358 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3359 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3360 msg('group', 'management')+" "+msg('done')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3361 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3362 user=@params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3363 @O.print @params.inspect if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3364
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3365 for grp in @sc.groups()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3366 #
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3367 # As a member, participate or retire
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3368
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3369 key = "groupadd-#{grp}"
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3370 memberp = @sc.ismember(user, grp)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3371 removep = (/no/i =~ @params[key])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3372 if @params[key]
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3373 #
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3374 # Check the group is invitation-only mode.
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3375 if !removep && !memberp && !@sc.isadmin(user, grp)
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3376 @O.print @H.elementln("p") {
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3377 sprintf(msg('invite-error'), grp) + "<br>\n" + \
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3378 @sc.admins(grp).join(", ")
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3379 }
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3380 sendMail(defaultmladdress(grp).sub("@", @mailadmsuffix+"@"),
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3381 "Group paticipation attempt to #{grp}",
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3382 putLog("User `%s' tried to join `%s' from %s" %
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3383 [user, grp, ENV['REMOTE_ADDR']]),
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3384 nil,
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3385 @sc.admins(grp))
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3386 next
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3387 end
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3388 #
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3389 # OK to join/retire
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3390 if (!removep) ^ memberp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3391 @sc.addgroup(grp, [user], removep)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3392 @O.print @H.elementln("p"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3393 sprintf "%s [%s] %s %s", msg('user'), user,
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3394 removep ? msg('removedfromgp') : msg('addedtogroup'), grp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3395 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3396 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3397 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3398 #
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3399 # As a member, change group-specific mailto address.
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3400 key = "mail4-#{grp}"
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3401 if memberp && @params[key] && memberp != @params[key]
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3402 @sc.addgroup(grp, [[user, @params[key]]])
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3403 newmemp = @sc.ismember(user, grp)
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3404 @O.print @H.elementln("p") {
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3405 sprintf("%s `%s' %s =&gt; %s%s",
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3406 msg('group'), grp, msg('mailaddress'), @params[key],
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3407 @params[key]==mailaddress(user) ? "(same)" : "")
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3408 }
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3409 end
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
3410 #
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3411 # as an owner, change the name of group
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3412 if @sc.isadmin(user, grp) &&
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3413 (newname = @params["groupname-#{grp}"]) &&
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3414 @sc.groupname(grp) != newname
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3415 @O.printf "@sc.name2group=%s<br>\n", @sc.name2group(newname)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3416 if dupl=@sc.name2group(newname)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3417 @O.print @H.p(sprintf(msg('dupname'), newname))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3418 @O.print groupnamesString()
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3419
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3420 else
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3421 @sc.setgroupname(grp, newname)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3422 @O.print @H.elementln("p"){
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3423 sprintf "%s %s%s %s",
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3424 msg('group'), grp, msg('of', 'name', 'setto'), newname
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3425 }
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3426 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3427 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3428 end
36
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3429 link2home
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3430 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3431 def users()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3432 unless pm=open_pm()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3433 outputError(msg('autherror'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3434 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3435 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3436 pm.users
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3437 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3438 def grepgroup(gname)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3439 gr = @sc.groups.grep(gname)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3440 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3441 def admgroup(group = nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3442 # if group==nil, create new
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3443 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3444 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3445 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3446 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3447 msg('group', 'management')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3448 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3449 user=@params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3450
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3451 # Check the existent group's validity
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3452 if group
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3453 unless (gr=grepgroup(group))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3454 @O.print @H.p("No such group #{group}")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3455 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3456 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3457 group = gr
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3458 unless @sc.isadmin(user, group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3459 @O.print @H.p("You are not administrator of #{group}.")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3460 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3461 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3462 @O.print @H.elementln("h2"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3463 msg('group')+" #{group}" +
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3464 if group != @sc.groupname(group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3465 " (#{@sc.groupname(group)})"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3466 end.to_s
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3467 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3468 actionmethod={'action'=>@myname+"?-admgroupsub", 'method'=>'POST'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3469 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3470 # New group creation
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3471 @O.print @H.elementln("h2"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3472 msg('newgroup')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3473 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3474 actionmethod={'action'=>@myname+"?-newgroupsub", 'method'=>'POST'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3475 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3476
43
7874392b872d Sort user list for view.
HIROSE Yuuji <yuuji@gentei.org>
parents: 42
diff changeset
3477 userlist = ([user] + users()).uniq.sort
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3478 myselfclass = {'class'=>'admin'}
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3479 yesclass = {'class' => 'yes'}
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3480 colspan2 = {'colspan'=>'2'}
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3481 colspan3 = {'colspan'=>'3'}
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3482 warnclass = {'class'=>'warn'}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3483 warnp = nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3484
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3485 @O.print @H.elementln("form", actionmethod){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3486 @H.hidden('group', group) + "\n" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3487 if group
64
2445a87742d0 Gather the current group-member at the beginning of the user list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 63
diff changeset
3488 # Non symmetric job: Move the current users above.
2445a87742d0 Gather the current group-member at the beginning of the user list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 63
diff changeset
3489 gmemlist = userlist.select{|u| @sc.ismember(u, group)}
2445a87742d0 Gather the current group-member at the beginning of the user list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 63
diff changeset
3490 userlist = (gmemlist + userlist).uniq
2445a87742d0 Gather the current group-member at the beginning of the user list.
HIROSE Yuuji <yuuji@gentei.org>
parents: 63
diff changeset
3491 # In this context, should return simply "".
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3492 ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3493 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3494 # new group creation
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3495 grps = @sc.groups()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3496 i=1
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3497 defname = "group%03d"%i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3498 while grps.grep(defname)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3499 defname = "group%03d"%(i+=1)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3500 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3501 @H.element("pre"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3502 msg('group', 'of', 'id')+"\n"+@H.text("group", defname) + "\n" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3503 msg('group', 'of', 'name', 'anystring')+"\n"+ \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3504 @H.text("gname", '') + "\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3505 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3506 end + \
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3507 @H.elementln("div", {'class'=>'memlist'}){
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3508 @H.elementln("table", {'border'=>'1'}){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3509 @H.elementln("tr") {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3510 @H.elementln("th", colspan3) {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3511 msg('member', 'of', 'joinquit', 'operation')}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3512 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3513 @H.elementln("tr"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3514 @H.element("th"){msg('join')} + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3515 @H.element("th"){msg('administrator')} + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3516 @H.element("th"){msg('member')}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3517 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3518 userlist.collect{|u|
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3519 recursememp = nil
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3520 if group
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3521 memberp = (@sc.ismember(u, group) && true)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3522 adminp = (@sc.isadmin(u, group) && true)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3523 if !memberp && @sc.members(group).grep(u)[0]
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3524 recursememp = true
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3525 end
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3526 else
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3527 memberp = adminp = (u == user)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3528 end
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3529 @H.elementln("tr", (u==user ? myselfclass : nil)){
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3530 @H.element("td", memberp && yesclass){
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3531 yes = memberp ? 'YES' : 'yes'
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3532 @H.radio('mem-'+u, 'yes', yes+' / ', memberp) + \
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3533 @H.radio('mem-'+u, 'no', 'no', !memberp)
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3534 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3535 @H.element("td"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3536 @H.radio('adm-'+u, 'yes', 'Admin / ', adminp) + \
55
9a82edb295ca Adjust umask. Max width of email entry, enlarged.
HIROSE Yuuji <yuuji@gentei.org>
parents: 50
diff changeset
3537 @H.radio('adm-'+u, 'no', 'no', !adminp)
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3538 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3539 @H.element("td"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3540 @H.element("abbr", "title"=>mailaddress(u)) {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3541 @sc.nickname(u)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3542 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3543 if recursememp
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3544 warnp = true
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3545 @H.element("span", warnclass){"(*)"}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3546 end.to_s
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3547 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3548 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3549 }.join + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3550 # group names
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3551 @H.elementln("tr") {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3552 @H.elementln("th", colspan3) {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3553 msg('group', 'of', 'joinquit', 'operation')}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3554 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3555 @H.elementln("tr"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3556 @H.element("th", colspan2){msg('join')} + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3557 @H.element("th"){msg('group')}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3558 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3559 @sc.groups().sort.collect{|g|
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3560 next if group == g
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3561 memberp = @sc.ismember(g, group)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3562 @H.element("tr"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3563 @H.element("td", colspan2){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3564 @H.radio('mem-'+g, 'yes', 'YES / ', memberp) + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3565 @H.radio('mem-'+g, 'no', 'NO', !memberp)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3566 } + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3567 @H.element("td"){
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3568 if @sc.isadmin(user, g)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3569 @H.a(@myname+"?-admgroup+#{g}", @sc.groupname(g))
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3570 else
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3571 @sc.groupname(g)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3572 end
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3573 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3574 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3575 }.join
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3576 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3577 } + \
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3578 ["fromhack", "inviteonly", "limitsender"].collect do |param|
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3579 @H.checkbox(param, "yes", msg(param),
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3580 @sc.getgroupattr(group, param)) + "<br>\n"
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3581 end.join + \
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3582 (group ? @H.elementln("p") {
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3583 sprintf(msg('mladdress'), defaultmladdress(group)) + \
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3584 @H.text("mladdress", @sc.getgroupattr(group, 'mladdress'),
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3585 @opt['size'], 80)
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3586 } + \
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3587 @H.elementln('p') {
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3588 sprintf(msg('xmlname'), group) + \
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3589 @H.text("xmlname", @sc.getgroupattr(group, 'xmlname'),
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
3590 @opt['size'], 80)
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3591 } : "") + \
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3592 @H.elementln('p') {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3593 n = -1
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3594 curtag = @sc.getgroupattr(group, 'subjtag')
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3595 values = @subjtags.collect {|x|
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3596 sprintf(' <option value="%d"%s>%s</option>', n+=1,
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3597 curtag==@subjtags[n][1] ? ' selected' : "",
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3598 x[0])
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3599 }.join("\n")
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3600 "Subject tag: " + \
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3601 <<-_EOF_
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3602 <select name="subjtag">
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3603 <option value="">DEFAULT</option>
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3604 #{values}
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3605 </select>
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3606 _EOF_
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3607 } + \
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3608 @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3609 } # form
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3610 @O.print @H.p(@H.element("span", warnclass){"(*)"}+
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3611 msg('recursewarn')) if warnp
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3612 if group && (members = @sc.members(group))[0]
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3613 @O.print @H.p(sprintf(msg('wholemembers'), group))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3614 @O.print @H.elementln("p", {'class'=>'listup'}){
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3615 members.collect{|u|@sc.nickname(u)}.join(", ")}
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3616 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3617
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3618 #
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3619 # Next section, REMOVE GROUP!
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3620 return nil unless group
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3621 @O.print @H.elementln("h2"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3622 sprintf "%s %s %s", msg('group'), group, msg('deletion')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3623 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3624 @O.print @H.p(msg('deletionwarn'))+"\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3625 @O.print @H.elementln("form", {'action'=>@myname+"?-delgroupsub+#{group}", 'method'=>'POST'}){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3626 @H.hidden("group", group) + "\n" + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3627 @H.elementln("table"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3628 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3629 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3630 sprintf msg('delgroup'), group
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3631 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3632 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3633 @H.radio("delete", "yes", msg('yes')) + ' ' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3634 @H.radio("delete", "no", msg('no'), true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3635 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3636 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3637 @H.elementln("tr"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3638 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3639 sprintf msg('really?'), group
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3640 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3641 @H.elementln("td"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3642 @H.radio("delete2", "yes", msg('yes')) + ' ' + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3643 @H.radio("delete2", "no", msg('no'), true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3644 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3645 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3646 } + \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3647 "<br>\n" + @H.submit_reset("GO")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3648 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3649
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3650 @O.print footer()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3651 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3652 def newgroup()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3653 admgroup(nil)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3654 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3655
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3656 def delgroupsub(group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3657 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3658 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3659 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3660 user = @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3661 if group != @params['group']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3662 @O.print @H.p("Group mismatch")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3663 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3664 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3665 unless (gr=grepgroup(group))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3666 @O.print @H.p("No such group #{group}")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3667 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3668 end
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3669 group = safecopy(gr)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3670 unless @sc.isadmin(user, group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3671 @O.print @H.p("You are not administrator of #{group}.")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3672 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3673 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3674 unless @params['delete'] && /yes/i =~ @params['delete'] \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3675 && @params['delete2'] && /yes/i =~ @params['delete2']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3676 @O.print @H.p(msg('chicken'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3677 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3678 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3679 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3680 msg('group')+" #{group} "+msg('deletion')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3681 }
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3682 if @sc.destroygroup(group)
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3683 system(sprintf("rm -r ml/%s", group))
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3684 resmsg = msg("done")
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3685 else
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3686 resmsg = Omsg("failure")
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3687 end
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3688 @O.print @H.p(resmsg)
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3689 putLog("Delete group '#{group}' #{resmsg}\n")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3690
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3691 @O.print footer()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3692 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3693
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3694 def deleteuser(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3695 @sc.deleteuser(user) &&
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3696 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3697 pm = open_pm
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3698 pm.delete(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3699 pm.close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3700 true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3701 rescue
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3702 nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3703 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3704 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3705 def delusersub(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3706 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3707 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3708 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3709 user = @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3710 if user != @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3711 @O.print @H.p("User mismatch")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3712 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3713 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3714 unless (us=users().grep(user)[0])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3715 @O.print @H.p("No such user #{user}")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3716 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3717 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3718 user = us
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3719 unless @params['delete'] && /yes/i =~ @params['delete'] \
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3720 && @params['delete2'] && /yes/i =~ @params['delete2']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3721 @O.print @H.p(msg('chicken'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3722 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3723 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3724 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3725 msg('user')+" #{user} "+msg('deletion')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3726 }
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3727 resmsg = deleteuser(user) ? msg("done") : msg("failure")
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3728 @O.print @H.p(resmsg)
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3729 putLog("Delete user '#{user}' #{resmsg}\n")
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3730
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
3731 @O.print @H.p(@H.a(@myname, msg('login')))
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3732 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3733
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3734 def admgroupsub()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3735 if !checkauth
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3736 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3737 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3738 user = @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3739 group = @params['group']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3740 unless (gr=grepgroup(group))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3741 @O.print @H.element("pre"){"No such group #{group.inspect}"}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3742 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3743 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3744 unless @sc.isadmin(user, group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3745 @O.print @H.p("You are not administrator of #{group}.")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3746 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3747 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3748 gorup = gr
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3749 @O.print @H.elementln("h1"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3750 msg('group', 'management', 'done')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3751 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3752 @O.print @H.elementln("h2"){
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3753 msg('group')+" #{group}" +
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3754 if group != @sc.groupname(group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3755 " (#{@sc.groupname(group)})"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3756 end.to_s
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3757 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3758 somethingdone = nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3759 for u in users()
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3760 u = @sc.isuser(u) # users() value is considered tainted.
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3761 next unless u # Use registered value in @sc.
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3762 for var, kind in {
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3763 "mem"=>['members', 'member'], 'adm'=>['admin', 'administrator']}
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3764 memv = "#{var}-#{u}"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3765 if @params[memv]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3766 joinp = ((/^yes/i =~ @params[memv]) && true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3767 membp = if var=='mem'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3768 @sc.ismember(u, group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3769 else # admin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3770 @sc.isadmin(u, group)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3771 end && true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3772 if var=='adm' && @sc.admins(group).length == 1 && membp && !joinp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3773 @O.print @H.p(sprintf(msg('soleadmin'), u, group))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3774 elsif joinp ^ membp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3775 somethingdone = true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3776 @sc.addgroup(group, [u], !joinp, kind[0])
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3777 @O.print @H.elementln("p"){
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3778 putLog(sprintf "%s [%s](%s) %s %s", msg('user'), u,
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3779 msg(kind[1]),
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3780 joinp ? msg('addedtogroup'): msg('removedfromgp'), group)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3781 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3782 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3783 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3784 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3785 end # users()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3786
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3787 # add or remove for group in groups
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3788 for g in @sc.groups()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3789 next if g == group
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3790 memv = "mem-#{g}"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3791 if @params[memv]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3792 joinp = ((/^yes/i =~ @params[memv]) && true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3793 membp = (@sc.ismember(g, group) && true)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3794 if joinp ^ membp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3795 somethingdone = true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3796 @sc.addgroup(group, [g], !joinp)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3797 @O.print @H.elementln("p"){
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3798 putLog(sprintf("%s [%s] %s %s",
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3799 msg('group'), g,
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3800 joinp ?
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3801 msg('addedtogroup')
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3802 : msg('removedfromgp'), group))
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3803 }
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3804 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3805 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3806 end # groups
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3807 # Change parameter(s)
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3808 # To be more generic...
69
bdb7e40c2d4f `limitsender' option to prohibit anonymous user to send to ML
HIROSE Yuuji <yuuji@gentei.org>
parents: 68
diff changeset
3809 ["fromhack", "inviteonly", "limitsender"].each {|param|
62
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3810 parsetp = (@params[param] && /^yes/i =~ @params[param])
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3811 cursetp = (@sc.getgroupattr(group, param)!=nil)
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3812 if cursetp ^ parsetp
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3813 @sc.putgroupattr(group, param, @params[param])
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3814 @O.print @H.elementln("p") {
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3815 putLog(sprintf("group: %s[%s] -&gt; %s",
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3816 group, param, @params[param].inspect))
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3817 }
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3818 somethingdone = true
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3819 end
2d33f85c3d9f Introduce invitation-only mode for groups.
HIROSE Yuuji <yuuji@gentei.org>
parents: 61
diff changeset
3820 }
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3821 # mladdress
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3822 newmladdress = @params['mladdress']
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3823 newmladdress = nil if newmladdress == ""
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3824 curmladdress = @sc.getgroupattr(group, 'mladdress')
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3825 if newmladdress != curmladdress
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3826 defmladdress = defaultmladdress(group)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3827 @sc.putgroupattr(group, 'mladdress', newmladdress)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3828 @O.print @H.elementln("p") {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3829 putLog(sprintf("group: %s[mladdress] &lt;%s&gt; -> &lt;%s&gt;",
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3830 group,
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3831 curmladdress || defmladdress,
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3832 newmladdress || defmladdress))
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3833 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3834 somethingdone = true
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3835 end
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3836 # Subject tag bracket
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3837 newtag = @params['subjtag']
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3838 if newtag == ''
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3839 newtag = nil
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3840 else
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3841 newtag = @subjtags[newtag.to_i % @subjtags.length][1]
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3842 end
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3843 @sc.putgroupattr(group, 'subjtag', newtag)
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3844 if newtag && newtag > ""
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3845 @O.print @H.elementln("p") {
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3846 putLog(sprintf("group: %s[subjtag] set to '%s'", group, newtag))
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3847 }
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3848 somethingdone = true
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
3849 end
83
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3850 # X-ML-Name: Header value
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3851 xmlname = @params['xmlname']
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3852 xmlname = nil if xmlname == ""
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3853 curxmlname = @sc.getgroupattr(group, 'xmlname')
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3854 if xmlname != curxmlname && /^[-A-Z_a-z\/0-9+@(),.<>]+$/ =~ xmlname
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3855 @sc.putgroupattr(group, 'xmlname', xmlname)
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3856 @O.print @H.elementln("p") {
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3857 putLog(sprintf("X-ML-Name: Set to %s", xmlname))
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3858 }
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3859 somethingdone = true
54d85f7d5676 - The parameter pswdlen surely works
HIROSE Yuuji <yuuji@gentei.org>
parents: 82
diff changeset
3860 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3861 unless somethingdone
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3862 # @O.print @H.p(msg('nothingtodo'))
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3863 end
36
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3864 # @O.print footer()
e67737e49a5d add a5userman.html multiplenotify.html
HIROSE Yuuji <yuuji@gentei.org>
parents: 35
diff changeset
3865 link2home
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3866 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3867 def newgroupsub()
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3868 return nil unless checkauth
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3869 user = @params['user']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3870 newgroup = @params['group']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3871 newgname = @params['gname']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3872
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3873
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3874 if @sc.groups.grep(newgroup)[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3875 @O.print @H.p(msg('existent')+newgroup)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3876 return nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3877 end
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3878 if dupl=@sc.name2group(newgname)
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3879 @O.print @H.p(sprintf(msg('dupname'), newgname))
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3880 @O.print groupnamesString()
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3881 return nil
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
3882 end
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3883 @sc.creategroup(newgroup, newgname, [user]) &&
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
3884 putLog("New group '#{newgroup}'(#{newgname}) created\n")
47
d65174b867aa Add fromhack mode
HIROSE Yuuji <yuuji@gentei.org>
parents: 45
diff changeset
3885 admgroupsub()
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3886 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
3887
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3888 #
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3889 # Methods Related to viaMail functions
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3890 def gen_sessionpswd()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3891
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3892 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3893 def viamail_registform()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3894 c = "# "
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3895 nl = "\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3896 user = @params['user']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3897 msg('addsched') + "-" * 20 + nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3898 c + msg('user') + nl + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3899 "user=" + user + nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3900 c + msg('sessionpswd') + nl + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3901 "sp=hoge" + nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3902 c + msg('date') + nl + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3903 "date="+Time.now.strftime("%Y/%m/%d") + nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3904 c + msg('time') + sprintf(msg('24hourtxt'), @opt['alldaydir']) + nl + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3905 "time=3000"+nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3906 c + msg('publicp') + nl + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3907 "public=yes" + nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3908 c + msg('neednotify') + nl + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3909 "nt10m=yes (%s)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3910 nttoday=yes (%s)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3911 nt1d=yes (%s)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3912 nt7d=yes (%s)" % ["10"+msg('minutes')+msg('before'),
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3913 msg('theday'), msg('precedingday'),
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3914 "7"+msg('days')+msg('before')] + nl*2 + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3915
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3916 c + msg('schedulehere')
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3917 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3918 def viamail_footer()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3919 viamail_registform()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3920 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3921 def show_by_text(date, days)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3922 user = @params['user']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3923 personal = true
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3924 sched = dayTextString(user, date, days, personal)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3925 # @O.print outstr
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3926
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3927 sendMail(mailaddress(user),
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3928 "After5 Schedule",
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3929 @opt['url'] + "\n" + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3930 Time.now.strftime("%Y/%m/%d") + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3931 sprintf(msg('schedlist'), days) + "\n\n" + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3932 if sched > ''
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3933 sched
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3934 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3935 msg('noplan')+"\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3936 end + \
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3937 viamail_footer
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3938 )
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3939
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3940 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3941 def parseHeader
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3942 contline=nil
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3943 header=Hash.new
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3944 text=Array.new
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3945
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3946 field=nil
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3947 # header
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3948 while line=STDIN.gets
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3949 text << line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3950 break if /^$/ =~ line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3951
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3952 if /^\s+/ =~ line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3953 if field
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3954 header[field][-1] << line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3955 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3956 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3957 if /^([^:]+):\s*(.*)/ =~ line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3958 field=$1.downcase
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3959 header[field] or header[field] = []
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3960 header[field] << $2
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3961 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3962 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3963 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3964 header
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3965 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3966 def mail_regsched()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3967 @params = Hash.new # Reset
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3968
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3969 reqparams = %w[user sp date time public]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3970 otherparams = %w[nt10m nttoday nt1d nt7d]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3971 setall = lambda{
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3972 reqparams.each{|key| return false unless @params.has_key?(key)}
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3973 return true
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3974 }
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3975 stack = ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3976 while line=gets # !setall.call && line=gets
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3977 if /^(\S+)=(.*)/ =~ line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3978 next unless reqparams.index($1) || otherparams.index($1)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3979 @params[$1] = $2
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3980 #if reqparams.index($1)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3981 STDERR.print "Set #{$1} to #{$2}\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3982 #end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3983 buf = ""
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3984 elsif /^\s*\#|^$/ =~ line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3985 # skip comments
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3986 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3987 buf += line
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3988 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3989 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3990 unless setall.call
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3991 STDERR.print "Insufficient variables\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3992 exit 1
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3993 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3994 p buf
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3995
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3996 y, m, d = date2ymd(@params["date"])
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3997 @params["year"] = y
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3998 @params["month"] = m
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
3999 @params["day"] = d
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4000 @params["schedule"] = buf
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4001 @params["editmode"] = "modify"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4002 @params["sessionpw"] = @params["sp"]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4003 p @params
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4004 add_remove()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4005 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4006 def mail_getsched()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4007 user = nil
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4008 while bline=gets
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4009 if /(\S+@\S+)/ =~ bline
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4010 break if user=@sc.isuser($1)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4011 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4012 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4013 unless user
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4014 sendMail(@opt['maintainer'], "viaMail Request Error",
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4015 "This is `#{@mybase}' in #{@mydir}\n" +
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4016 "Invalid schedule request from #{ENV['SENDER']}.\n\n")
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4017 exit 1
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4018 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4019 today = Time.now.strftime("%Y/%m/%d")
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4020 days = 7
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4021 if bline=gets
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4022 if /\d+/ =~ bline
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4023 days = bline.to_i
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4024 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4025 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4026 # Send user to schedules of today and near future
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4027 @params['user'] = user
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4028 show_by_text(today, days)
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4029 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4030 def doMail()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4031 days = 7
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4032 # Confirm `via Mail'
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4033 prohibitviahttp()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4034 @H = TEXTout.new
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4035 unless ENV['RECIPIENT'] && ENV['SENDER']
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4036 STDERR.print "Call me via qmail\n"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4037 exit 1
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4038 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4039 @mailmode = true
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4040 header = parseHeader # is this necessary?
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4041 if /regist/ =~ ENV["EXT"]
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4042 mail_regsched()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4043 else
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4044 mail_getsched()
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4045 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4046 end
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4047
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4048 #
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4049 # Password related Methos
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4050 def setpasswd(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4051 prohibitviahttp()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4052 pm = open_pm()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4053 exit 1 unless pm
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4054 if pm.userexist?(user) then
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4055 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4056 system "stty -echo"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4057 STDERR.print "New passwd: "
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4058 p1 = STDIN.gets
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4059 STDERR.print "\nAgain: "
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4060 p2 = STDIN.gets
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4061 ensure
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4062 system "stty echo"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4063 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4064 if (p1 == p2) then
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4065 pm.setpasswd(user, p1.chop!)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4066 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4067 STDERR.print "New password for #{user} set successfully\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4068 else
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4069 STDERR.print "User #{user} not found\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4070 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4071 pm.close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4072 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4073 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4074 def adduser(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4075 prohibitviahttp()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4076 pm = open_pm()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4077 exit 1 unless pm
60
592d958cab58 PWRESET resets password.
HIROSE Yuuji <yuuji@gentei.org>
parents: 59
diff changeset
4078 if pm.userexist?(user) && !ENV['PWRESET']
59
595ff0134cd9 Skip creation of user which is already registered.
HIROSE Yuuji <yuuji@gentei.org>
parents: 58
diff changeset
4079 printf("User %s already exists. Skip.\n", user)
60
592d958cab58 PWRESET resets password.
HIROSE Yuuji <yuuji@gentei.org>
parents: 59
diff changeset
4080 printf("If you reset passwd to new one, PWRESET=1 #{$0} ...\n")
59
595ff0134cd9 Skip creation of user which is already registered.
HIROSE Yuuji <yuuji@gentei.org>
parents: 58
diff changeset
4081 exit 1
595ff0134cd9 Skip creation of user which is already registered.
HIROSE Yuuji <yuuji@gentei.org>
parents: 58
diff changeset
4082 end
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4083 email = nil
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4084 if /(.*@.*)=(.*@.*)/ =~ user
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4085 user, email = $1, $2
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4086 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4087 newpwd = pm.setnewpasswd(user, 4)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4088 @sc.createuser(user, email)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4089 print "#{user}'s password is #{newpwd}\n"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4090 pm.close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4091 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4092 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4093 def deluser(user)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4094 prohibitviahttp()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4095 pm = open_pm()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4096 exit 1 unless pm
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4097 pm.delete(user)
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4098 @sc.deleteuser(user)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4099 pm.close()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4100 exit 0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4101 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4102
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4103 # read configuratoin file
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4104 def readconf(conf)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4105 cf = "after5.cf" #conf # || @opt['conf']
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4106 cf = File.join(@mydir, cf) unless test(?s, cf)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4107 cf = File.join(ENV["HOME"], cf) unless test(?s, cf)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4108 return unless test(?s, cf)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4109 begin
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4110 IO.foreach(cf){|line|
26
a3719c56696b Ruby19 hack...
HIROSE Yuuji <yuuji@gentei.org>
parents: 22
diff changeset
4111 line = line.toeuc
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4112 next if /^\s *#/ =~ line
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4113 line.chop!
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4114 line.sub!(/^\s*#.*/, '')
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4115 next if /^$/ =~ line
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4116 case line
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4117 # title, type = line.split(/\t+/)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4118 when /^([a-z]+)=(.*)/oi
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4119 key, value = $1, $2
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4120 case value
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
4121 when /^(no|none|null|nil|false|0|off)$/io
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4122 @opt[key] = nil
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4123 else
45
1b16890d61d6 ML: digited subject, ML-specific email addresses, spooling
HIROSE Yuuji <yuuji@gentei.org>
parents: 44
diff changeset
4124 @opt[key] = value.untaint
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4125 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4126 print "#{key} set to #{value}\n" if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4127 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4128 }
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4129 rescue
26
a3719c56696b Ruby19 hack...
HIROSE Yuuji <yuuji@gentei.org>
parents: 22
diff changeset
4130 STDERR.printf("Configuration file %s not readable\n", cf)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4131 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4132 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4133
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4134 def parsedate(string)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4135 if %r,^(\d\d\d\d+)/(\d+)/(\d+)/(\d+)/([^/]+)$, =~ string
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4136 sprintf "%04d/%02d/%02d/%04d/%s", $1.to_i, $2.to_i, $3.to_i, $4.to_i,
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4137 grepgroup($5)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4138 elsif %r,^(\d\d\d\d+)/(\d+)/(\d+)/(\d+), =~ string
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4139 sprintf "%04d/%02d/%02d/%04d", $1.to_i, $2.to_i, $3.to_i, $4.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4140 elsif %r,^(\d\d\d\d+)/(\d+)/(\d+), =~ string
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4141 sprintf "%04d/%02d/%02d", $1.to_i, $2.to_i, $3.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4142 elsif %r,^(\d\d\d\d+)/(\d+), =~ string
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4143 sprintf "%04d/%02d", $1.to_i, $2.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4144 elsif %r,^(\d\d\d\d+)/(\d+), =~ string
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4145 sprintf "%04d", $1.to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4146 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4147 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4148
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4149 def getarg()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4150 argument = {}
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
4151 @oldargv = ARGV.dup
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4152
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4153 while /^-/ =~ ARGV[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4154 case ARGV[0]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4155 when '-f'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4156 conf = ARGV[1]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4157 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4158 when "-d"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4159 $DEBUG = true
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4160 when "-install"
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4161 when "-stream"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4162 # ARGV.shift
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4163 # @job = 'show_by_text "2005/1/18"'
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4164 @job = 'doMail'
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4165 when "-addsched"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4166 @job = "addsched"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4167 when "-today"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4168 @job = "today"
2
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
4169 when "-today_p"
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
4170 argument['displaymode'] = 'personal'
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
4171 @job = "today"
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
4172 when "-today_n"
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
4173 argument['displaymode'] = 'normal'
1110baebe9a9 RCS-revision 1.3
HIROSE Yuuji <yuuji@gentei.org>
parents: 1
diff changeset
4174 @job = "today"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4175 when "-remove"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4176 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4177 @job = 'remove "'+parsedate(ARGV[0])+'"'
14
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4178 when "-move"
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4179 ARGV.shift
9aa45b698d56 RCS-revision 1.15
HIROSE Yuuji <yuuji@gentei.org>
parents: 13
diff changeset
4180 @job = 'move "'+parsedate(ARGV[0])+'"'
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4181 when "-modify"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4182 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4183 @job = 'modify "'+parsedate(ARGV[0])+'"'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4184 when "-month"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4185 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4186 @job = 'month "'+parsedate(ARGV[0])+'"'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4187 when "-show"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4188 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4189 # @job = "show '"+ARGV[0]+"'"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4190 @job = "show '"+parsedate(ARGV[0])+"'"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4191 when "-login"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4192 @job = "login"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4193 when "-userman"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4194 @job = "userman"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4195 when "-usermod"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4196 @job = "usermod"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4197 when "-groupinout"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4198 @job = "groupinout"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4199 when "-groupsubmit"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4200 @job = "groupsubmit"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4201 when "-groupman"
48
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
4202 ARGV.shift
05de5274c110 Another ml-address can be set.
HIROSE Yuuji <yuuji@gentei.org>
parents: 47
diff changeset
4203 x=ARGV[0]
70
2e293d4d8db4 Not using proc.call for the sake of displaying document title.
HIROSE Yuuji <yuuji@gentei.org>
parents: 69
diff changeset
4204 @job = "groupman("+(x ? "'#{x.dup.untaint}'" : "") + ")"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4205 when "-groupmod"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4206 @job = "groupmod"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4207 when "-notify"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4208 @job = 'notify' # + exit
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
4209 when "-list"
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
4210 @job = 'list' # + exit
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4211 when "-newgroup"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4212 @job = 'newgroup'
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
4213 when /^-(admgroup|listdraft)$/
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4214 ARGV.shift
84
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
4215 #gr = safecopy(grepgroup(ARGV[0]))
f67f5304baac Add feature of sending message to a user
HIROSE Yuuji <yuuji@gentei.org>
parents: 83
diff changeset
4216 gr = safecopy(ARGV[0]) # -listdraft can be called with user 2013/12/12
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4217 ##gr.untaint
37
1515ea889ea1 First implementation of ML feature.
HIROSE Yuuji <yuuji@gentei.org>
parents: 36
diff changeset
4218 @job = safecopy($1)+' "'+gr+'"'
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4219 when "-admgroupsub"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4220 @job = 'admgroupsub'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4221 when "-newgroupsub"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4222 @job = 'newgroupsub'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4223 when "-delusersub"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4224 ARGV.shift
6
f4b10ab5479f RCS-revision 1.7
HIROSE Yuuji <yuuji@gentei.org>
parents: 5
diff changeset
4225 usr = safecopy(users().grep(ARGV[0])[0])
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4226 @job = 'delusersub "'+usr+'"'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4227 when "-delgroupsub"
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4228 ARGV.shift
42
07ef43ac4f15 Some ruby-1.9 workarounds and enhancement to logging and messaging.
HIROSE Yuuji <yuuji@gentei.org>
parents: 41
diff changeset
4229 gr = safecopy(grepgroup(ARGV[0]))
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4230 @job = 'delgroupsub "'+gr+'"'
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4231 when /-(setpasswd|deluser|adduser)$/
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4232 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4233 @job = $1+ " '#{ARGV[0]}'" # + exit
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4234 when ""
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4235 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4236 ARGV.shift
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4237 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4238
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4239 readconf(@conf)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4240
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4241 query = ''
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4242 method = ENV["REQUEST_METHOD"]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4243 if /POST/i =~ method then
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4244 length = ENV["CONTENT_LENGTH"].to_i
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4245 query = STDIN.read(length)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4246 elsif /GET/i =~ method then
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4247 query = ENV["QUERY_STRING"]
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4248 else # executed from command line
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4249 query = ARGV.join("&")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4250 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4251
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4252 if ENV['CONTENT_TYPE'] &&
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4253 %r,multipart/form-data.*boundary=(.*),i =~ ENV['CONTENT_TYPE']
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4254 boundary = $1
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4255 query.split("\r\n--"+boundary).each {|unit|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4256 if /Content-Disposition.*\bname=([\'\"])?(\S*)\1/i =~ unit
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4257 argument.has_key?(key=$2) or argument[key]=[]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4258 newvalue = Hash.new
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4259 if /^Content.*filename=([\'\"])?(\S*)\1/i =~ unit
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4260 newvalue['filename'] = $2
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4261 end
87
1f99367752fb Link to home in groupman()
HIROSE Yuuji <yuuji@gentei.org>
parents: 86
diff changeset
4262 newvalue['value'] = unit.sub(/.*?\r\n\r\n/m, "") # Shortest match
85
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4263 if /^Content-type:\s*(\S*)/i =~ unit
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4264 newvalue['content-type'] = $1
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4265 else
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4266 newvalue['value'].gsub!("\r\n", "\n")
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4267 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4268 argument[key] << newvalue
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4269 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4270 }
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4271 if $DEBUG
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4272 open("/tmp/body", "w"){|x|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4273 x.write query.split("\r\n--"+boundary+"\r\n")[-1]
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4274 argument.each{|k,v|
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4275 x.printf(" %s => %s\n", k.inspect, v.inspect)}
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4276 x.printf("boundary=\n%s\n",boundary)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4277 x.printf("ENV=%s\n",ENV.inspect)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4278 x.write query}
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4279 end
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4280 else
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4281 for unit in query.split(/\&/)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4282 if /^([a-z][-_0-9@%a-z.]*)=(.*)/i =~ unit
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4283 key, value = $1, $2
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4284 #value.gsub!(/%(..)/){[$1.hex].pack("c")} # これでURLデコードが一発
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4285 decode!(value)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4286 decode!(key)
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4287 value = Kconv::toeuc(value) # EUCに変換
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4288 printf "[%s] = %s\n", key, value if $DEBUG
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4289 argument[key] = value
e2b6a2e8b5c7 Enable inter-member mail
HIROSE Yuuji <yuuji@gentei.org>
parents: 84
diff changeset
4290 end
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4291 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4292 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4293 argument
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4294 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4295 def getcookie()
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4296 cookie = {}
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
4297 return cookie unless ENV['HTTP_COOKIE']
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
4298 #if /value=(.*)/ =~ ENV['HTTP_COOKIE']
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
4299 for cv in ENV['HTTP_COOKIE'].split(/[\; ]+/).grep(/(value|prefs)=(.*)/)
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4300 # value=$1.gsub!(/%(..)/){[$1.hex].pack("c")}
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
4301 next unless /\w+=(.*)/ =~ cv
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4302 value=decode!($1)
7
51440ee77ae4 RCS-revision 1.8
HIROSE Yuuji <yuuji@gentei.org>
parents: 6
diff changeset
4303 next unless value
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4304 for line in value.split("&")
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4305 if /(\w+)=(.*)/ =~ line
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4306 key, value = $1, $2
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4307 #value.gsub!(/%(..)/){[$1.hex].pack("c")} # これでURLデコードが一発
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4308 decode!(value)
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4309 value = Kconv::toeuc(value) # EUCに変換
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4310 printf "cookie[%s] = %s\n", key, value if $DEBUG
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4311 cookie[key] = value
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4312 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4313 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4314 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4315 cookie
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4316 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4317 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4318
17
904bbce89e71 RCS-revision 1.18
HIROSE Yuuji <yuuji@gentei.org>
parents: 16
diff changeset
4319 $KCODE='e' if RUBY_VERSION < "1.9"
0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4320 After5.new.doit
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4321
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4322 if __FILE__ == $0
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4323 end
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4324
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4325
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4326 # Local variables:
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4327 # buffer-file-coding-system: euc-jp
8f811f47ac60 RCS-revision 1.1
HIROSE Yuuji <yuuji@gentei.org>
parents:
diff changeset
4328 # End:

yatex.org