From 0f89ddc88198e1f3fe3175a8bab5e9463d202e58 Mon Sep 17 00:00:00 2001 From: Benjamin Kellermann Date: Thu, 19 Nov 2009 07:38:01 +0100 Subject: starting implementing hour input --- timepollhead.rb | 174 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 146 insertions(+), 28 deletions(-) (limited to 'timepollhead.rb') diff --git a/timepollhead.rb b/timepollhead.rb index 305d3d5..a738282 100644 --- a/timepollhead.rb +++ b/timepollhead.rb @@ -5,40 +5,81 @@ ################################ class TimePollHead + class TimeString + attr_reader :date, :time + def initialize(date,time) + @date = date.class == Date ? date : Date.parse(date) + if time =~ /^\d[\d]?:\d[\d]?$/ + @time = Time.parse("#{@date} #{time}") + else + @time = time + end + end + def TimeString.now + TimeString.new(Date.today,Time.now) + end + include Comparable + def <=>(other) + if self.date == other.date + if self.time.class == String && other.time.class == String || self.time.class == Time && other.time.class == Time + self.time <=> other.time + else + self.time.class == String ? -1 : 1 + end + else + self.date <=> other.date + end + end + def to_s + "#{@date} #{time_to_s}" + end + def time_to_s + if @time.class == Time + return time.strftime("%H:%M") + else + return @time + end + end + end def initialize - @data = {} + @data = [] end def col_size @data.size end def get_id(columntitle) - return columntitle.to_s if @data.include?(columntitle) - raise("no such column found: #{columntitle}") + return columntitle end def get_title(columnid) - return columnid if @data.include?(Date.parse(columnid)) - raise("no such id found: #{columnid}") + return columnid end def each_columntitle - @data.sort.each{|k,v| - yield(k) + @data.sort.each{|day,time| + yield("#{day} #{time}") } end def each_columnid - @data.sort.each{|k,v| - yield(get_id(k)) + @data.sort.each{|day,time| + yield("#{day} #{time}") } end def each_column - @data.sort.each{|k,v| - yield(get_id(k),k) + @data.sort.each{|day,time| + yield("#{day} #{time}","#{day} #{time}") } end + def each_time + h = {} + @data.each{|ds| h[ds.time_to_s] = true } + h.keys.compact.sort{|a,b| + TimeString.new(Date.today,a) <=> TimeString.new(Date.today,b) + }.each{|k| yield(k)} + end # returns internal representation of cgi-string def cgi_to_id(field) - Date.parse(field) + TimeString.new(field,nil) end # returns true if deletion sucessfull @@ -46,40 +87,49 @@ class TimePollHead @data.delete(cgi_to_id(columnid)) != nil end + def parsecolumntitle(title) + if $cgi.include?("add_remove_column_day") + parsed_date = YAML::load(Time.parse("#{$cgi["add_remove_column_month"]}-#{$cgi["add_remove_column_day"]} #{title}").to_yaml) + else + earlytime = @head.keys.collect{|t|t.strftime("%H:%M")}.sort[0] + parsed_date = YAML::load(Time.parse("#{$cgi["add_remove_column_month"]}-#{title} #{earlytime}").to_yaml) + end + parsed_date + end + # columnid should be never used as changing title is not usefull here # returns parsed title def edit_column(columnid, newtitle, cgi) - parsed_date = Date.parse(newtitle) - if @data.include?(parsed_date) - @data.delete(parsed_date) - else - @data[parsed_date] = "" - end + parsed_date = TimeString.new(newtitle, cgi.include?("columntime") ? cgi["columntime"] : nil) + @data << parsed_date + @data.uniq! parsed_date.to_s end def to_html(config = false,activecolumn = nil) # 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) + # ex: head_count("%Y-%m") returns an array like [["2009-03",2],["2009-04",3]] + def head_count(elem) ret = Hash.new(0) - @data.keys.collect{|curdate| - Time.parse(curdate.strftime(big + small)) - }.uniq.each{|day| - ret[day.strftime(big)] += 1 + @data.each{|day| + ret[day.date.strftime(elem)] += 1 } ret.sort end ret = "" - head_count("%Y-%m","-%d %H:%M%Z").each{|title,count| + head_count("%Y-%m").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").each{|title,count| + ret += "#{Date.parse(title).strftime("%a, %d")}\n" + } ret += "Name" - @data.keys.sort.each{|curdate| - ret += "#{curdate.strftime("%a, %d")}\n" + @data.sort.each{|date| + ret += "#{date.time_to_s}\n" } ret += "Last Edit\n\n" ret @@ -142,7 +192,7 @@ END klasse = "notchoosen" varname = "new_columnname" klasse = "disabled" if d < Date.today - if @data.include?(d) + if @data.include?(TimeString.new(d,nil)) klasse = "choosen" varname = "deletecolumn" end @@ -152,6 +202,7 @@ END
+
@@ -162,6 +213,73 @@ TD ret += < +END + + + ########################### + # starting hour input + ########################### + ret += "
" + + head_count("%Y-%m").each{|title,count| + year,month = title.split("-").collect{|e| e.to_i} + ret += "\n" + } + + ret += "" + + head_count("%Y-%m-%d").each{|title,count| + ret += "\n" + } + + ret += "" + + + days = @data.sort.collect{|date| date.date }.uniq + + each_time{|time| + ret +="\n" + days.each{|day| + timestamp = TimeString.new(day,time) + klasse = "notchoosen" + klasse = "disabled" if timestamp < TimeString.now + klasse = "choosen" if @data.include?(timestamp) + ret += < +
+
+ + + + +
+ + +END + } + ret += "
\n" + } + + ret += "" + days.each{|d| + ret += < +
+
+ + +
+ +
+ + +END + } + + ret += < +
#{Date::ABBR_MONTHNAMES[month]} #{year}
#{Date.parse(title).strftime("%a, %d")}
+
END ret -- cgit v1.2.3