diff --git a/after5.rb b/after5.rb index c7a7e64..df9a189 100755 --- a/after5.rb +++ b/after5.rb @@ -4,7 +4,7 @@ # Associative Scheduling Table - after5 # (C)2003, 2004, 2006, 2008, 2012, 2013 by HIROSE Yuuji [yuujigentei.org] # $Id: after5.rb,v 1.20 2012/12/03 15:54:20 yuuji Exp $ -# Last modified Thu Dec 19 12:09:19 2013 on firestorm +# Last modified Sat Dec 21 16:24:53 2013 on firestorm # See http://www.gentei.org/~yuuji/software/after5/ # ���Υ�����ץȤ�EUC����¸���Ƥ��������� $hgid = <<_HGID_.split[1..-2].join(" ") @@ -108,7 +108,7 @@ name, value, text end def submit_reset(name) - submit(name, "GO")+reset(name, "Reset") + submit(name, "OK")+reset(name, "Reset") end def select(name, range, selected=nil) @@ -634,11 +634,14 @@ def name2group(name) @groupmap.find{|g, v| v.is_a?(Hash) && v['name']==name} end - def day_all(d, user=nil, personalonly = nil) + def day_all(d, user=nil, personalonly = nil, filter) y, m, d = d.scan(%r,(\d\d\d\d+)/(\d+)/(\d+),)[0] #daydir = File.join(@dir, "%04d"%y.to_i, "%02d"%m.to_i, "%02d"%d.to_i) daydir = File.join("s", "%04d"%y.to_i, "%02d"%m.to_i, "%02d"%d.to_i) sched = {} + grep = if filter && filter > '' + Regexp.new(filter.split(/\s+/).join("|")) + end return sched unless test(?d, daydir) Dir.foreach(daydir) {|time| next if /^\./ =~ time @@ -653,19 +656,19 @@ visible = false #next unless /@/ =~ who # user must be as user@do.ma.in next unless account_exists(who) - ## next if personalonly && who != user #2004/1/16 + ## next if private && who != user #2004/1/16 who.untaint dir = File.join(t, who) next unless test(?d, dir) && test(?x, dir) pub = File.join(dir, 'pub') if test(?f, pub) && test(?r, pub) && test(?s, pub) && - !personalonly # unneccessary if personal mode + !personalonly # unneccessary if personalonly mode if IO.readlines(pub)[0].to_i > 0 visible = true end end + next if grep && (grep !~ who && grep !~ nickname(who)) # 2013/12/19 - if ismember(user, who) || visible sched[time][who] = {} file = File.join(dir, @schedulefile) @@ -1117,7 +1120,7 @@ @mailmode = nil @mailadmdelimiter = "/" @mailadmsuffix = @mailadmdelimiter + "adm" - @saveprefsregexp = /^(display(mode|days)$|nt|headline)/ + @saveprefsregexp = /^(display(mode|days|filter)$|nt|headline)/ @opt = { 'conf' => @mybase+".cf", 'css' => @mybase+".css", @@ -1182,7 +1185,7 @@ p @params if $DEBUG ### @params['displaymode'] = @params['displaymode'] || @cookie['displaymode'] - personal = /personal/i =~ @params['displaymode'] + personal = /^personal/i =~ @params['displaymode'] bodyclass = if personal then {'class'=>'personal'} end ## x = {"align"=>'center'} @@ -1380,6 +1383,11 @@ 'head5char' => ['��Ƭ5ʸ��', 'Head 5 chars'], 'headline' => ['��Ƭ1��', 'Headline only'], 'whole' => ['Ĺ���Ƥ�����', 'Whole text'], + 'filter' => ['��Ͽ�Թʹ�', 'Selection by Registerer'], + 'filterhelp' => ['ɽ������ͽ�����Ͽ�ԥ��������̾(�ΰ���)�ǹʤ���ߤǤ��롣 +2�İʾ��̾���ǹʤꤿ���Ȥ��ϥ��ڡ����Ƕ��ڤ��OK��', 'Can filter by (a part of)account name. +Multiple patterns delimited by spaces are acceptable.'], + 'filterreset' => ['�ʹ����', 'Reset Selection'], 'hldays' => ['�ǿ�X��ʬ��Ĵ', 'Hilight Recent X-days'], 'addedtogroup' => ['�򥰥롼�פ��ɲ� ��', 'added to the group:'], 'removedfromgp' => ['�򥰥롼�פ�����:', 'removed from the group:'], @@ -1402,7 +1410,7 @@ '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.'], 'address2send' => ['��ʬ�����ä��Ƥ��륰�롼�פΥ��С��ꥹ�Ȥ���Ƭ����ʬ������ľ��ˤ���������ˤϡ�����ML����å�������ɤΰ�����������뤫��������롣������ML���Ȥ˼�ʬ�ؤ���������Ѥ�����衣', '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.'], - '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."], + '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."], 'wholemembers' => ['���롼���⥰�롼�פ��θ������ǡ����ߥ��롼�� %s �ؤ����Τϰʲ��Υ��С��������롣', "Consiering the groups registered in another group, notification to the group `%s' is send to members as follows."], 'noadmingroup' => ['�����Ǥ��륰�롼�פϤʤ��ä�', @@ -1822,7 +1830,7 @@ me = @myname+"?-"; delim = " / " @H.a(me+'userman', msg('user', 'management')) + delim + \ @H.a(me+'groupman', msg('group', 'management')) + delim + \ - if /personal/i =~ @params['displaymode'] + if /^personal/i =~ @params['displaymode'] @H.a(me+'today_n', msg('normalmode')) else @H.a(me+'today_p', msg('personalmode')) @@ -1845,6 +1853,23 @@ def footer() footer1+footer2 end + def header_filter() + filter = @params['displayfilter'] + if filter && filter > "" + myarg = (ENV['REQUEST_URI']||"-today").sub(/.*\?/, "") + @H.elementln("form", {'action'=>@myname+"?"+myarg, "method"=>"POST"}) { + @H.elementln("p", {"class"=>"filter"}) { + @H.element("span") { + msg('filter')+"="+filter + } + \ + @H.hidden("displayfilter", "") + \ + @H.submit("GO", msg('filterreset')) + } + } + else + "" + end + end def nickname(userORgroup) if grepgroup(userORgroup) @sc.groupname(userORgroup) @@ -1874,16 +1899,19 @@ personal = /personal/ =~ @params['displaymode'] headline = @params['headline'] headlinehl = @params['headlinehl'] + filter = @params['displayfilter'] hldays = headlinehl.to_i * 3600*24 recent = {'class'=>'recent'} monthstr = sprintf "%d/%d", day.year, day.month + holiday = Holiday.new # create dayofweek header @O.print @H.elementln("h1", nil){monthstr} # which mode? @O.print @H.p(msg(personal ? 'personalmode' : 'normalmode')) - # + # @O.print @H.p(sprintf("filter=%s", filter)) + @O.print header_filter() # display table @O.print @H.startelement("table", {'border'=>"1", 'class'=>'main'}) @@ -1918,7 +1946,7 @@ @H.element("small"){hd.join("
")} end.to_s + \ @H.element("p", {'class'=>'topic'}){ - s = @sc.day_all(date, @params['user'], personal) + s = @sc.day_all(date, @params['user'], personal, filter) if !s.empty? s.keys.sort.collect{|time| s[time].keys.sort.collect{|who| @@ -1990,6 +2018,8 @@ @H.select('headline', choice, headline) + "/" + \ msg('hldays') + \ @H.select('headlinehl', 0..30, headlinehl) + \ + @H.element("abbr", {"title"=>msg('filterhelp')}) {msg('filter')} + \ + @H.text('displayfilter', @params['displayfilter'], 10, 80) +\ @H.submit("GO", "GO") } @O.print footer @@ -2015,7 +2045,7 @@ end # # Return the string of table - def dayTableString(user, datestr, range, personal = nil) + def dayTableString(user, datestr, range, personal = nil, filter = nil) #s = @sc.day_all(date, user, personal) #return '' if s.empty? r = '' @@ -2029,7 +2059,7 @@ datewn = @H.element("span", {'class'=>@wnames[d.wday]}){ sprintf("%s(%s)", date, @msg['wnames'][@lang][d.wday]) } - s = @sc.day_all(date, user, personal) + s = @sc.day_all(date, user, personal, filter) next if s.empty? r << @H.element("tr", nil){ @@ -2105,7 +2135,7 @@ '' end end - def dayTextString(user, datestr, range, personal = nil) + def dayTextString(user, datestr, range, personal = nil, filter = nil) r = '' cols = 20 header = "-" * cols + "\n" @@ -2116,7 +2146,7 @@ d = Time.at(day+i*3600*24) date = sprintf("%04d/%02d/%02d", d.year, d.month, d.day) datewn = sprintf("%s(%s)", date, @msg['wnames'][@lang][d.wday]) - s = @sc.day_all(date, user, personal) + s = @sc.day_all(date, user, personal, filter) next if s.empty? r << sprintf("TIME Who %s - What\n", datewn) @@ -2279,19 +2309,20 @@ return nil end user = safecopy(@params['user']) - personal = (/personal/i =~ @params['displaymode']) + personal = (/^personal/i =~ @params['displaymode']) @params['displaydays'] = @params['displaydays'] || @cookie['displaydays'] + filter = @params['displayfilter'] days = @params['displaydays'].to_i days = (days > 0 ? days : 3) - # str = @sc.day_all(date, user, personal) - outstr = dayTableString(user, date, days, personal) + outstr = dayTableString(user, date, days, personal, filter) @O.print @H.element("h1", nil){ sprintf msg('fmtdaysschedule'), date } @O.print @H.element("h2"){msg('schedtable')} ## @O.print @H.p() + @O.print header_filter() @O.print @H.elementln("form", {'action'=>@myname+"?-show+#{date}", 'method'=>'POST'}){ @H.elementln("p"){ msg(personal ? 'personalmode' : 'normalmode') + "
" + \ @@ -3091,7 +3122,7 @@ @H.elementln("tr"){ @H.element("td"){"Attachment"} + \ @H.element("td"){ - @H.element("input", "name"=>"attachment", "type"=>"file", 'multiple'=>true){} + "" } } + \ @H.elementln("tr"){ @@ -3192,10 +3223,10 @@ } } } + \ - "
\n" + @H.submit_reset("GO") + "
\n" + @H.element("span", "class"=>"danger"){@H.submit_reset("OK")} } - + @O.print footer() end def usermod() if !checkauth @@ -3644,7 +3675,7 @@ } } } + \ - "
\n" + @H.submit_reset("GO") + "
\n" + @H.element("span", "class"=>"danger"){@H.submit_reset("OK")} } @O.print footer()