From d7c0014766bdb845b260aac58b4c91ae5ef4647a Mon Sep 17 00:00:00 2001 From: Benjamin Kellermann Date: Wed, 1 Jul 2009 23:08:31 +0200 Subject: DateTimePoll -> TimePoll --- atom.cgi | 3 +- config.cgi | 1 - datetimepoll.rb | 226 -------------------------------------------------------- overview.rb | 8 +- participate.rb | 4 +- poll.rb | 3 +- timepoll.rb | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 235 insertions(+), 236 deletions(-) delete mode 100644 datetimepoll.rb create mode 100644 timepoll.rb diff --git a/atom.cgi b/atom.cgi index 612d64c..7e7f6f3 100755 --- a/atom.cgi +++ b/atom.cgi @@ -10,6 +10,7 @@ require "rubygems" require "atom" require "yaml" require "cgi" +require "time" $cgi = CGI.new @@ -17,7 +18,7 @@ def readhistory dir log = `export LC_ALL=de_DE.UTF-8; bzr log -r -10.. "#{dir}"`.split("-"*60) log.collect!{|s| s.scan(/\nrevno: (.*)\ncommitter.*\n.*\ntimestamp: (.*)\nmessage:\n (.*)/).flatten} log.shift - log.collect!{|r,t,c| [r.to_i,DateTime.parse(t),c]} + log.collect!{|r,t,c| [r.to_i,Time.parse(t),c]} end feed = Atom::Feed.new diff --git a/config.cgi b/config.cgi index aff410b..dee4bf2 100755 --- a/config.cgi +++ b/config.cgi @@ -42,7 +42,6 @@ else table.add_remove_column($cgi["add_remove_column"],$cgi["columndescription"]) if $cgi.include?("add_remove_column") table.toggle_hidden if $cgi.include?("toggle_hidden") end -table.init $htmlout += < diff --git a/datetimepoll.rb b/datetimepoll.rb deleted file mode 100644 index dd4b62e..0000000 --- a/datetimepoll.rb +++ /dev/null @@ -1,226 +0,0 @@ -################################ -# Author: Benjamin Kellermann # -# Licence: CC-by-sa 3.0 # -# see Licence # -################################ - -require "date" -require "poll" -load "time.rb" - -class DateTimePoll < Poll - def init - #FIXME: quick 'n' dirty hack, because Time <=> Date is not possible and yaml loads Time instead of DateTime! - #better solution would be to overwrite <=> - @head.each{|k,v| - if k.class == Time - @head.delete(k) - @head[DateTime.parse(k.to_s)]=v - end - } - end - def sort_data fields - datefields = fields.collect{|field| - field == "timestamp" || field == "name" ? field : DateTime.parse(field) - } - super datefields - end - # returns a sorted array, containing the big units and how often each small is in the big one - # small and big must be formated for strftime - # ex: head_count("%Y-%m", "-%d") returns an array like [["2009-03",2],["2009-04",3]] - def head_count(big,small) - ret = Hash.new(0) - @head.keys.collect{|curdate| - DateTime.parse(curdate.strftime(big + small)) - }.uniq.each{|day| - ret[day.strftime(big)] += 1 - } - ret.sort - end - - def head_to_html(config = false) - ret = "" - head_count("%Y-%m","-%d %H:%M%Z").each{|title,count| - year, month = title.split("-").collect{|e| e.to_i} - ret += "#{Date::ABBR_MONTHNAMES[month]} #{year}\n" - } - ret += "" - head_count("%Y-%m-%d", " %H:%M%Z").each{|title,count| - curdate = Date.parse(title) - ret += "#{curdate.strftime("%a, %d")}\n" - } - ret += "Name" - @head.keys.sort.each{|curdate| - if curdate.class == Date - ret += "---\n" - else - ret += "#{curdate.strftime("%H:%M")}\n" - end - } - ret += "Last Edit" - ret - end - def add_remove_column_htmlform - if $cgi.include?("add_remove_column_month") - begin - startdate = DateTime.parse("#{$cgi["add_remove_column_month"]}-1") - rescue ArgumentError - olddate = $cgi.params["add_remove_column_month"][1] - case $cgi["add_remove_column_month"] - when CGI.unescapeHTML(YEARBACK) - startdate = DateTime.parse("#{olddate}-1")-365 - when CGI.unescapeHTML(MONTHBACK) - startdate = DateTime.parse("#{olddate}-1")-1 - when CGI.unescapeHTML(MONTHFORWARD) - startdate = DateTime.parse("#{olddate}-1")+31 - when CGI.unescapeHTML(YEARFORWARD) - startdate = DateTime.parse("#{olddate}-1")+366 - else - exit - end - startdate = DateTime.parse(startdate.strftime("%Y-%m-1")) - end - else - startdate = DateTime.parse(Date.today.strftime("%Y-%m-1")) - end - ret = < -
- -END - def navi val - "" - end - [YEARBACK,MONTHBACK].each{|val| ret += navi(val)} - ret += "" - [MONTHFORWARD, YEARFORWARD].each{|val| ret += navi(val)} - - ret += "\n" - - 7.times{|i| ret += "" } - ret += "\n" - - ((startdate.wday+7-1)%7).times{ - ret += "" - } - d = startdate - while (d.month == startdate.month) do - klasse = "notchoosen" - klasse = "disabled" if d < Date.today - klasse = "choosen" if @head.include?(d) - ret += "\n" - ret += "\n" if d.wday == 0 - d = d.next - end - ret += <
" + - "" + - "#{Date::ABBR_MONTHNAMES[startdate.month]} #{startdate.year}
#{Date::ABBR_DAYNAMES[(i+1)%7]}
- -
- -END - - ret += "
" - - head_count("%Y-%m", "-%d").each{|title,count| - year,month = title.split("-").collect{|e| e.to_i} - ret += "\n" - } - - ret += "" - - head_count("%Y-%m-%d","").each{|title,count| - curdate = Date.parse(title) - ret += "\n" - } - - ret += "" - - ["00:00", "10:00","13:00","14:00","20:00"].each{|time| - ret +="\n" - @head.sort.collect{|day,descr| - Date.parse(day.strftime("%Y-%m-%d")) - }.uniq.each{|date| - timestamp = DateTime.parse("#{date} #{time} #{Time.now.zone}") - klasse = "notchoosen" - klasse = "disabled" if timestamp < DateTime.now - klasse = "choosen" if @head.include?(timestamp) - ret += < -
-
- - - - -
- - -END - } - ret += "
\n" - } - ret += < -
-
- - -
- - -END - ret - end - def add_remove_column col,description - if $cgi.include?("add_remove_column_day") - begin - parsed_date = YAML::load(DateTime.parse("#{$cgi["add_remove_column_month"]}-#{$cgi["add_remove_column_day"]} #{col} #{Time.now.zone}").to_yaml) - day = Date.parse(parsed_date.to_s) - @head.delete(day) if @head.include?(day) - rescue ArgumentError - return false - end - else - begin - parsed_date = YAML::load(Date.parse("#{$cgi["add_remove_column_month"]}-#{col}").to_yaml) - rescue ArgumentError - return false - end - end - add_remove_parsed_column(parsed_date,CGI.escapeHTML(description)) - end -end - -if __FILE__ == $0 -require 'test/unit' -require 'pp' -class DatePoll - def store comment - end -end - -SITE="gbfuaibe" - -require "cgi" -CGI_PARAMS={"add_remove_column_month" => ["2008-02"]} -CGI_COOKIES={} -$cgi = CGI.new - -class DatePollTest < Test::Unit::TestCase - def setup - @poll = DatePoll.new(SITE) - end - #TODO - def test_add_remove_column - assert(!@poll.add_remove_column("foo", "bar")) - assert(!@poll.add_remove_column("31", "31.02.2008 ;--)")) - assert(@poll.add_remove_column("20", "correct date")) - assert_equal("correct date",@poll.head[Date.parse("2008-02-20")]) - assert(@poll.add_remove_column("20", "foobar")) - assert(@poll.head.empty?) - end - -end -end diff --git a/overview.rb b/overview.rb index 2c1903a..622ad57 100644 --- a/overview.rb +++ b/overview.rb @@ -6,7 +6,7 @@ require "poll" require "datepoll" -require "datetimepoll" +require "timepoll" $htmlout += < @@ -32,8 +32,8 @@ if $cgi.include?("create_poll") case $cgi["poll_type"] when "Poll" Poll.new SITE - when "DatePoll" - DatePoll.new SITE + when "TimePoll" + TimePoll.new SITE end Dir.chdir("..") else @@ -77,7 +77,7 @@ $htmlout += < diff --git a/participate.rb b/participate.rb index 1f36630..a203e11 100644 --- a/participate.rb +++ b/participate.rb @@ -8,7 +8,7 @@ olddir = File.expand_path(".") Dir.chdir("..") require "poll" require "datepoll" -require "datetimepoll" +require "timepoll" Dir.chdir(olddir) if $cgi.include?("revision") @@ -32,8 +32,6 @@ else table.delete_comment($cgi["delete_comment"].to_i) if $cgi.include?("delete_comment") end -table.init - $htmlout += < diff --git a/poll.rb b/poll.rb index 00c2fe5..9e5e75b 100644 --- a/poll.rb +++ b/poll.rb @@ -6,6 +6,7 @@ require "hash" require "yaml" +require "time" class Poll attr_reader :head, :name, :hidden @@ -210,7 +211,7 @@ ADDCOMMENT log = VCS.history log.shift log.collect!{|s| s.scan(/\nrevno:.*\ncommitter.*\n.*\ntimestamp: (.*)\nmessage:\n (.*)/).flatten} - log.collect!{|t,c| [DateTime.parse(t),c]} + log.collect!{|t,c| [Time.parse(t),c]} ((revision-2)..(revision+2)).each do |i| if i >0 && i<=maxrev diff --git a/timepoll.rb b/timepoll.rb new file mode 100644 index 0000000..a4de3d4 --- /dev/null +++ b/timepoll.rb @@ -0,0 +1,226 @@ +################################ +# Author: Benjamin Kellermann # +# Licence: CC-by-sa 3.0 # +# see Licence # +################################ + +require "date" +require "poll" +require "time" + +class TimePoll < Poll + def init + #FIXME: quick 'n' dirty hack, because Time <=> Date is not possible and yaml loads Time instead of DateTime! + #better solution would be to overwrite <=> + @head.each{|k,v| + if k.class == Time + @head.delete(k) + @head[DateTime.parse(k.to_s)]=v + end + } + end + def sort_data fields + datefields = fields.collect{|field| + field == "timestamp" || field == "name" ? field : Time.parse(field) + } + super datefields + end + # returns a sorted array, containing the big units and how often each small is in the big one + # small and big must be formated for strftime + # ex: head_count("%Y-%m", "-%d") returns an array like [["2009-03",2],["2009-04",3]] + def head_count(big,small) + ret = Hash.new(0) + @head.keys.collect{|curdate| + Time.parse(curdate.strftime(big + small)) + }.uniq.each{|day| + ret[day.strftime(big)] += 1 + } + ret.sort + end + + def head_to_html(config = false) + ret = "
" + head_count("%Y-%m","-%d %H:%M%Z").each{|title,count| + year, month = title.split("-").collect{|e| e.to_i} + ret += "\n" + } + ret += "" + head_count("%Y-%m-%d", " %H:%M%Z").each{|title,count| + curdate = Date.parse(title) + ret += "\n" + } + ret += "" + @head.keys.sort.each{|curdate| + if curdate.class == Date + ret += "\n" + else + ret += "\n" + end + } + ret += "" + ret + end + def add_remove_column_htmlform + if $cgi.include?("add_remove_column_month") + begin + startdate = Time.parse("#{$cgi["add_remove_column_month"]}-1") + rescue ArgumentError + olddate = $cgi.params["add_remove_column_month"][1] + case $cgi["add_remove_column_month"] + when CGI.unescapeHTML(YEARBACK) + startdate = Time.parse("#{olddate}-1")-365 + when CGI.unescapeHTML(MONTHBACK) + startdate = Time.parse("#{olddate}-1")-1 + when CGI.unescapeHTML(MONTHFORWARD) + startdate = Time.parse("#{olddate}-1")+31 + when CGI.unescapeHTML(YEARFORWARD) + startdate = Time.parse("#{olddate}-1")+366 + else + exit + end + startdate = Time.parse(startdate.strftime("%Y-%m-1")) + end + else + startdate = Time.parse(Date.today.strftime("%Y-%m-1")) + end + ret = < +
+
#{Date::ABBR_MONTHNAMES[month]} #{year}
#{curdate.strftime("%a, %d")}
#{Date::ABBR_MONTHNAMES[month]} #{year}
#{curdate.strftime("%a, %d")}
Name---#{curdate.strftime("%H:%M")}Last Edit
+END + def navi val + "" + end + [YEARBACK,MONTHBACK].each{|val| ret += navi(val)} + ret += "" + [MONTHFORWARD, YEARFORWARD].each{|val| ret += navi(val)} + + ret += "\n" + + 7.times{|i| ret += "" } + ret += "\n" + + ((startdate.wday+7-1)%7).times{ + ret += "" + } + d = startdate + while (d.month == startdate.month) do + klasse = "notchoosen" + klasse = "disabled" if d < Date.today + klasse = "choosen" if @head.include?(d) + ret += "\n" + ret += "\n" if d.wday == 0 + d = d.next + end + ret += <
" + + "" + + "#{Date::ABBR_MONTHNAMES[startdate.month]} #{startdate.year}
#{Date::ABBR_DAYNAMES[(i+1)%7]}
+ +
+ +END + + ret += "
" + + head_count("%Y-%m", "-%d").each{|title,count| + year,month = title.split("-").collect{|e| e.to_i} + ret += "\n" + } + + ret += "" + + head_count("%Y-%m-%d","").each{|title,count| + curdate = Date.parse(title) + ret += "\n" + } + + ret += "" + + ["00:00", "10:00","13:00","14:00","20:00"].each{|time| + ret +="\n" + @head.sort.collect{|day,descr| + Date.parse(day.strftime("%Y-%m-%d")) + }.uniq.each{|date| + timestamp = Time.parse("#{date} #{time} #{Time.now.zone}") + klasse = "notchoosen" + klasse = "disabled" if timestamp < Time.now + klasse = "choosen" if @head.include?(timestamp) + ret += < +
+
+ + + + +
+ + +END + } + ret += "
\n" + } + ret += < +
+
+ + +
+ + +END + ret + end + def add_remove_column col,description + if $cgi.include?("add_remove_column_day") + begin + parsed_date = YAML::load(Time.parse("#{$cgi["add_remove_column_month"]}-#{$cgi["add_remove_column_day"]} #{col} #{Time.now.zone}").to_yaml) + day = Date.parse(parsed_date.to_s) + @head.delete(day) if @head.include?(day) + rescue ArgumentError + return false + end + else + begin + parsed_date = YAML::load(Date.parse("#{$cgi["add_remove_column_month"]}-#{col}").to_yaml) + rescue ArgumentError + return false + end + end + add_remove_parsed_column(parsed_date,CGI.escapeHTML(description)) + end +end + +if __FILE__ == $0 +require 'test/unit' +require 'pp' +class TimePoll + def store comment + end +end + +SITE="gbfuaibe" + +require "cgi" +CGI_PARAMS={"add_remove_column_month" => ["2008-02"]} +CGI_COOKIES={} +$cgi = CGI.new + +class TimePollTest < Test::Unit::TestCase + def setup + @poll = TimePoll.new(SITE) + end + #TODO + def test_add_remove_column + assert(!@poll.add_remove_column("foo", "bar")) + assert(!@poll.add_remove_column("31", "31.02.2008 ;--)")) + assert(@poll.add_remove_column("20", "correct date")) + assert_equal("correct date",@poll.head[Date.parse("2008-02-20")]) + assert(@poll.add_remove_column("20", "foobar")) + assert(@poll.head.empty?) + end + +end +end -- cgit v1.2.3
#{Date::ABBR_MONTHNAMES[month]} #{year}
#{curdate.strftime("%a, %d")}