From fa1f4145c5eb6a2b02dc0d66432434db4cf11412 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Sun, 4 Aug 2002 01:29:39 +0000 Subject: [PATCH] Date and time functions are now more accurate. And events calendar allows for weeks starting with monday rather than sunday. --- docs/credits.txt | 5 ++- docs/upgrades/upgrade_4.4.1-4.5.0.sql | 17 +++++++++ lib/WebGUI/DateTime.pm | 50 ++++++++++----------------- lib/WebGUI/Wobject/EventsCalendar.pm | 6 ++-- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/docs/credits.txt b/docs/credits.txt index 11d7454bf..19234c131 100644 --- a/docs/credits.txt +++ b/docs/credits.txt @@ -29,7 +29,7 @@ Contributing Translators.............Andreas Ljunggren Perl.................................Larry Wall / O'Reilly -RSSLite..............................Jerrad Pierce +XML::RSSLite.........................Jerrad Pierce Scott Thomason IE Rich Edit.........................Brattli @@ -38,4 +38,7 @@ Data::Config.........................S HTML::TagFilter......................William Ross +HTML::CalendarMonthSimple............Gregor Mosheh + + diff --git a/docs/upgrades/upgrade_4.4.1-4.5.0.sql b/docs/upgrades/upgrade_4.4.1-4.5.0.sql index 56050d60f..c1d36eab0 100644 --- a/docs/upgrades/upgrade_4.4.1-4.5.0.sql +++ b/docs/upgrades/upgrade_4.4.1-4.5.0.sql @@ -1,5 +1,22 @@ insert into webguiVersion values ('4.5.0','upgrade',unix_timestamp()); insert into international values (72,'Poll',1,'Randomize answers?'); alter table Poll add column randomizeAnswers int not null default 0; +insert into userProfileField values ('firstDayOfWeek','WebGUI::International::get(699,"WebGUI");',1,0,'select','{0=>WebGUI::International::get(27,"WebGUI"),1=>WebGUI::International::get(28,"WebGUI")}','[0]',2,4,1); +update userProfileField set sequenceNumber=sequenceNumber+1 where profileCategoryId=4 and sequenceNumber>=2; +insert into international values (699,"WebGUI",1,"First Day Of Week"); +update international set message='Calendar Month' where internationalId=18 and namespace='EventsCalendar'; +insert into international values (74,'EventsCalendar',1,'Calendar Month (Small)'); +update EventsCalendar set calendarLayout='calendarMonth' where calendarLayout='calendar'; + + + + + + + + + + + diff --git a/lib/WebGUI/DateTime.pm b/lib/WebGUI/DateTime.pm index 7459acbca..a31ba10a6 100644 --- a/lib/WebGUI/DateTime.pm +++ b/lib/WebGUI/DateTime.pm @@ -13,12 +13,11 @@ package WebGUI::DateTime; use Date::Calc; use Exporter; use strict; -use Time::Local; use WebGUI::International; use WebGUI::Session; our @ISA = qw(Exporter); -our @EXPORT = qw(&addToTime &addToDate &epochToHuman &epochToSet &humanToEpoch &setToEpoch &monthStartEnd); +our @EXPORT = qw(&localtime &time &addToTime &addToDate &epochToHuman &epochToSet &humanToEpoch &setToEpoch &monthStartEnd); #------------------------------------------------------------------- sub _getMonth { @@ -74,25 +73,6 @@ sub addToTime { #------------------------------------------------------------------- sub epochToHuman { my ($offset, $temp, $hour12, $value, $output, @date, %weekday, %month); - - # 0 1 2 3 4 5 6 7 8 -# $sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = -# localtime(time); -# -# All list elements are numeric, and come straight -# out of the C `struct tm'. $sec, $min, and $hour -# are the seconds, minutes, and hours of the -# specified time. $mday is the day of the month, -# and $mon is the month itself, in the range `0..11' -# with 0 indicating January and 11 indicating -# December. $year is the number of years since -# 1900. That is, $year is `123' in year 2023. -# $wday is the day of the week, with 0 indicating -# Sunday and 3 indicating Wednesday. $yday is the -# day of the year, in the range `1..365' (or -# `1..366' in leap years.) $isdst is true if the -# specified time occurs during daylight savings -# time, false otherwise. $offset = $session{user}{timeOffset} || 0; $offset = $offset*3600; $temp = $_[0] || time(); @@ -171,17 +151,22 @@ sub humanToEpoch { my (@temp, $dateString, $timeString, $output, @date); ($dateString,$timeString) = split(/ /,$_[0]); @temp = split(/-/,$dateString); - $date[5] = $temp[0]-1900; - $date[4] = $temp[1]-1; - $date[3] = $temp[2]+0; + $date[0] = int($temp[0]); + $date[1] = int($temp[1]); + $date[2] = int($temp[2]); @temp = split(/:/,$timeString); - $date[2] = $temp[0]+0; - $date[1] = $temp[1]+0; - $date[0] = $temp[2]+0; - $output = timelocal(@date); + $date[3] = int($temp[0]); + $date[4] = int($temp[1]); + $date[5] = int($temp[2]); + $output = Date::Calc::Date_to_Time(@date); return $output; } +#------------------------------------------------------------------- +sub localtime { + return Date::Calc::Localtime($_[0]); +} + #------------------------------------------------------------------- sub monthStartEnd { my ($year,$month,$day, $hour,$min,$sec, $start, $end); @@ -199,7 +184,7 @@ sub setToEpoch { if (int($year) < 2038 && int($year) > 1900) { $year = int($year); } else { - $year = $date[5]+1900; + $year = $date[5]; } if (int($month) < 13 && int($month) > 0) { $month = int($month); @@ -211,9 +196,12 @@ sub setToEpoch { } else { $day = $date[3]; } - return humanToEpoch($year.'-'.$month.'-'.$day.' 00:00:00'); + return Date::Calc::Date_to_Time($year,$month,$day,0,0,0); } - +#------------------------------------------------------------------- +sub time { + return Date::Calc::Mktime(Date::Calc::Today_and_Now()); +} 1; diff --git a/lib/WebGUI/Wobject/EventsCalendar.pm b/lib/WebGUI/Wobject/EventsCalendar.pm index 8a49c1710..617fa1e04 100644 --- a/lib/WebGUI/Wobject/EventsCalendar.pm +++ b/lib/WebGUI/Wobject/EventsCalendar.pm @@ -40,6 +40,7 @@ sub _calendarLayout { $calendar->cellclass("tableData"); $calendar->todaycellclass("tableHeader"); $calendar->headerclass("tableHeader"); + $calendar->mondayisfirstday($session{user}{firstDayOfWeek}); ($start,$end) = monthStartEnd($_[1]); $sth = WebGUI::SQL->read("select * from EventsCalendar_event where wobjectId=".$_[0]->get("wobjectId")." order by startDate,endDate"); while (%event = $sth->hash) { @@ -174,7 +175,8 @@ sub www_edit { $output .= '

'.WebGUI::International::get(12,$namespace).'

'; $f = WebGUI::HTMLForm->new; %hash = (list => WebGUI::International::get(17,$namespace), - calendar => WebGUI::International::get(18,$namespace)); + calendarMonth => WebGUI::International::get(18,$namespace), + calendarMonthSmall => WebGUI::International::get(74,$namespace); $f->select("calendarLayout",\%hash,WebGUI::International::get(16,$namespace),[$_[0]->get("calendarLayout")]); $f->integer("paginateAfter",WebGUI::International::get(19,$namespace),$paginateAfter); $f->yesNo("proceed",WebGUI::International::get(21,$namespace),$proceed); @@ -321,7 +323,7 @@ sub www_view { $minDate = time(); $maxDate = time()+86400; } - if ($_[0]->get("calendarLayout") eq "calendar") { + if ($_[0]->get("calendarLayout") eq "calendarMonth") { $nextDate = $minDate; while ($nextDate <= $maxDate) { $row[$i] = _calendarLayout($_[0],$nextDate);