From 24e4c3e38a70aee1b35f7d389e43bc7d7fc96764 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Wed, 9 Mar 2011 16:53:30 +0000 Subject: [PATCH] Task #10885: work on week view. only if the week starts on monday or sunday --- htdocs/comm/action/index.php | 73 +++++++++++++++++-- htdocs/lib/date.lib.php | 132 +++++++++++++++++++++-------------- 2 files changed, 150 insertions(+), 55 deletions(-) diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 2754c44b465..e8112e0c8d3 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -146,7 +146,27 @@ if (empty($action) || $action=='show_month') } if ($action=='show_week') { - + $prev = dol_get_first_day_week($day, $month, $year); + $prev_year = $prev['prev_year']; + $prev_month = $prev['prev_month']; + $prev_day = $prev['prev_day']; + $first_day = $prev['first_day']; + + $week = $prev['week']; + + $day =(int)$day; + $next = dol_get_next_week($day, $week, $month, $year); + $next_year = $next['year']; + $next_month = $next['month']; + $next_day = $next['day']; + + // Define firstdaytoshow and lastdaytoshow + $firstdaytoshow=dol_mktime(0,0,0,$prev_month,$first_day,$prev_year); + $lastdaytoshow=dol_mktime(0,0,0,$next_month,$next_day,$next_year); + + $max_day_in_month = date("t",dol_mktime(0,0,0,$month,1,$year)); + + $tmpday = $first_day; } if ($action=='show_day') { @@ -195,10 +215,10 @@ if (empty($action) || $action=='show_month') } if ($action=='show_week') { - $nav ="".img_previous($langs->trans("Previous"))."\n"; + $nav ="".img_previous($langs->trans("Previous"))."\n"; $nav.=" ".dol_print_date(dol_mktime(0,0,0,$month,1,$year),"%Y").", ".$langs->trans("Week")." ".$week; $nav.=" \n"; - $nav.="".img_next($langs->trans("Next"))."\n"; + $nav.="".img_next($langs->trans("Next"))."\n"; } if ($action=='show_day') { @@ -522,7 +542,52 @@ if (empty($action) || $action == 'show_month') // View by month } elseif ($action == 'show_week') // View by week { - print $langs->trans("FeatureNotYetAvailable"); //Work in progress... + //print $langs->trans("FeatureNotYetAvailable"); //Work in progress... + + echo ''; + echo ' '; + $i=0; + while ($i < 7) + { + echo ' \n"; + $i++; + } + echo " \n"; + + // In loops, tmpday contains day nb in current month (can be zero or negative for days of previous month) + //var_dump($eventarray); + //print $tmpday; + + echo " \n"; + + for($iter_day = 0; $iter_day < 7; $iter_day++) + { + if(($tmpday <= $max_day_in_month)) + { + // Show days of the current week + $curtime = dol_mktime (0, 0, 0, $month, $tmpday, $year); + + if($curtime == $now) + $style='cal_today'; + else + $style='cal_current_month'; + + echo ' \n"; + } + else + { + $style='cal_current_month'; + echo ' \n"; + } + $tmpday++; + } + echo " \n"; + + echo "
'.$langs->trans("Day".(($i+(isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:1)) % 7))."
'; + show_day_events($db, $tmpday, $month, $year, $month, $style, $eventarray, 0, $maxlength, $param, 1, 300); + echo " '; + show_day_events($db, $tmpday - $max_day_in_month, $next_month, $next_year, $month, $style, $eventarray, 0, $maxlength, $param, 1, 300); + echo "
\n"; } else // View by day { diff --git a/htdocs/lib/date.lib.php b/htdocs/lib/date.lib.php index 9aa122b8607..c65291c0840 100644 --- a/htdocs/lib/date.lib.php +++ b/htdocs/lib/date.lib.php @@ -204,22 +204,14 @@ function dol_get_next_month($month, $year) * @param year Year * @return array Previous year,month,week */ -function dol_get_prev_week($week, $year) +function dol_get_prev_week($day, $week, $month, $year) { - if ($week == 1) - { - $prev_week = 52; - $prev_month = 12; - $prev_year = $year - 1; - } - else - { - $prev_week = $week-1; - $str_tmp = str_pad($prev_week, 2, 0, STR_PAD_LEFT); - $prev_month = date('n', strtotime($year.'-W'.$str_tmp)); - $prev_year = $year; - } - return array('year' => $prev_year, 'month'=>$prev_month, 'week' => $prev_week); + $tmparray = dol_get_first_day_week($day, $month, $year); + + $time=dol_mktime(12,0,0,$month,$tmparray['first_day'],$year,1,0); + $time-=24*60*60*7; + $tmparray=dol_getdate($time,true); + return array('year' => $tmparray['year'], 'month' => $tmparray['mon'], 'day' => $tmparray['mday']); } /** Return next week @@ -227,22 +219,16 @@ function dol_get_prev_week($week, $year) * @param year Year * @return array Next year,month,week */ -function dol_get_next_week($week, $year) +function dol_get_next_week($day,$week, $month, $year) { - if ($week == 52) - { - $next_week = 1; - $next_month = 1; - $next_year = $year + 1; - } - else - { - $next_week = $week + 1; - $str_tmp = str_pad($next_week, 2, 0, STR_PAD_LEFT); - $next_month = date('n', strtotime($year.'-W'.$str_tmp)); - $next_year = $year; - } - return array('year' => $next_year, 'month'=>$next_month, 'week' => $next_week); + $tmparray = dol_get_first_day_week($day, $month, $year); + + $time=dol_mktime(12,0,0,$month,$tmparray['first_day'],$year,1,0); + $time+=24*60*60*7; + $tmparray=dol_getdate($time,true); + + return array('year' => $tmparray['year'], 'month' => $tmparray['mon'], 'day' => $tmparray['mday']); + } /** Return GMT time for first day of a month or year @@ -284,71 +270,115 @@ function dol_get_last_day($year,$month=12,$gm=false) return $datelim; } -/** Return first day of week for a week +/** Return first day of week for a date * @param day Day * @param month Month + * @param year Year * @param gm False = Return date to compare with server TZ, True to compare with GM date. - * @return Timestamp Date for first day of week + * @return array year,month, week,first_day,prev_year,prev_month,prev_day */ -function dol_get_first_day_of_week($day,$month,$year,$gm=false) +function dol_get_first_day_week($day,$month,$year,$gm=false) { + global $conf; + $date=dol_mktime(0,0,0,$month,$day,$year,$gm); + // TODO: Modify->the week can begins with any day! + if (isset($conf->global->MAIN_START_WEEK)) { if ($conf->global->MAIN_START_WEEK==1) { - $getdate = getdate($date); + $tmparray = dol_getdate($date,true); // How many days ahead monday are we? - switch ( $getdate['wday'] ) + switch ( $tmparray['wday'] ) { case 0: // we are on sunday $days = 6; break; default: // any other day - $days = $getdate['wday']-1; + $days = $tmparray['wday']-1; break; } $seconds = $days*24*60*60; - $monday = date($getdate[0])-$seconds; - - return $monday; - + $tmpday = date($tmparray[0])-$seconds; + } else { - $getdate = getdate($date); + $tmparray = dol_getdate($date,true); // substact as many days as days ahead sunday we are - $seconds = $getdate['wday']*24*60*60; - $sunday = date($getdate[0])-$seconds; - - return $sunday; + $seconds = $tmparray['wday']*24*60*60; + $tmpday = date($tmparray[0])-$seconds; } } else { - $getdate = getdate($date); + $tmpday = dol_getdate($date,true); // How many days ahead monday are we? - switch ( $getdate['wday'] ) + switch ( $tmparray['wday'] ) { case 0: // we are on sunday $days = 6; break; default: // any other day - $days = $getdate['wday']-1; + $days = $tmparray['wday']-1; break; } $seconds = $days*24*60*60; - $monday = date($getdate[0])-$seconds; - - return $monday; + $tmpday = date($tmparray[0])-$seconds; } + + $tmpday = date("d",$tmpday); + + if ($tmpday>$day) + { + $prev_month = $month-1; + $prev_year = $year; + + if ($prev_month==0) + { + $prev_month = 12; + $prev_year = $year-1; + } + } + else + { + $prev_month = $month; + $prev_year = $year; + } + + $tmpday = $tmpday; + $prev_month = $prev_month; + $prev_year = $prev_year; + + $tmptime=dol_mktime(12,0,0,$month,$tmpday,$year,1,0); + $tmptime-=24*60*60*7; + $tmparray=dol_getdate($tmptime,true); + + $prev_day = $tmparray['mday']; + + if ($prev_day>$tmpday) + { + $prev_month = $month-1; + $prev_year = $year; + + if ($prev_month==0) + { + $prev_month = 12; + $prev_year = $year-1; + } + } + + $week = date("W",dol_mktime(0,0,0,$month,$tmpday,$year,$gm)); + + return array('year' => $year, 'month' => $month, 'week' => $week, 'first_day' => $tmpday, 'prev_year' => $prev_year, 'prev_month' => $prev_month, 'prev_day' => $prev_day); } /**