Re: [PATCH] Correct week number in UI and HTML output

Maurice van der Pot <griffon26-bCGDfOjggl9Wk0Htik3J/[email protected]>
Newsgroups gmane.comp.gnome.apps.planner.devel
Message-ID <[email protected]>
On Sat, Jul 28, 2007 at 01:52:36PM -0400, Kurt Maute wrote:
> I get a hunk failure on this patch.
> Could you correct and resend?

Here you go.

Maurice.

-- 
Maurice van der Pot

Gentoo Linux Developer   [email protected]     http://www.gentoo.org
Creator of BiteMe!       griffon26-bCGDfOjggl9Wk0Htik3J/[email protected]   http://www.kfk4ever.com

_______________________________________________
Planner-dev-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/planner-dev-list
planner-fix-week-number.patch (text/plain, 4.3 KB)
Index: libplanner/mrp-time.h
===================================================================
--- libplanner/mrp-time.h	(revision 849)
+++ libplanner/mrp-time.h	(working copy)
@@ -146,7 +146,8 @@
 const gchar *mrp_time2_get_day_name      (MrpTime     *t);
 const gchar *mrp_time2_get_month_name    (MrpTime     *t);
 const gchar *mrp_time2_get_month_initial (MrpTime     *t);
-gint         mrp_time2_get_week_number   (MrpTime     *t);
+gint         mrp_time2_get_week_number   (MrpTime     *t, 
+					  gint        *year);
 void         mrp_time2_align_prev        (MrpTime     *t,
 					  MrpTimeUnit  unit);
 void         mrp_time2_align_next        (MrpTime     *t,
Index: libplanner/mrp-time.c
===================================================================
--- libplanner/mrp-time.c	(revision 849)
+++ libplanner/mrp-time.c	(working copy)
@@ -415,7 +415,7 @@
 	
 	mrp_time2_set_epoch (&t2, t);
 	
-	return mrp_time2_get_week_number (&t2);
+	return mrp_time2_get_week_number (&t2, NULL);
 }
 
 /**
@@ -839,7 +839,7 @@
 			/* The week number, (1 - 53), starting with the first
 			 *  Monday as the first day of week 1.
 			 */
-			snprintf (str, sizeof (str), "%d", mrp_time2_get_week_number (t));
+			snprintf (str, sizeof (str), "%d", mrp_time2_get_week_number (t, NULL));
 			if (buffer) {
 				strcpy (buffer + len, str);
 			}
@@ -1348,11 +1348,39 @@
 }
 
 gint
-mrp_time2_get_week_number (MrpTime *t)
+mrp_time2_get_week_number (MrpTime *t, gint *y)
 {
+	gint week;
+	gint year;
+
 	g_return_val_if_fail (t != NULL, 0);
 
-	return stolen_g_date_get_iso8601_week_of_year (&t->date);
+	week = stolen_g_date_get_iso8601_week_of_year (&t->date);
+
+	/* Calculate the year this week belongs to as it can be different than 
+	 * the year of the date (e.g. December 31 2002 is in week 1 of 2003).
+	 */
+	if(y != NULL) {
+		year = g_date_get_year (&t->date);
+  
+		switch(g_date_get_month (&t->date)) {
+		case G_DATE_JANUARY:
+			if(week > 50) {
+				year--;
+			}
+			break;
+		case G_DATE_DECEMBER:
+			if(week == 1) {
+				year++;
+			}
+			break;
+		default:
+			break;
+		}
+
+		*y = year;
+	}
+	return week;
 }
 
 void
Index: src/planner-scale-utils.c
===================================================================
--- src/planner-scale-utils.c	(revision 849)
+++ src/planner-scale-utils.c	(working copy)
@@ -69,7 +69,7 @@
 	MrpTime *t2;
 	gchar   *str = NULL;
 	gint     num;
-	gint     year, month, day;
+	gint     year, month, week, day;
 	gint     hour, min, sec;
 
 	t2 = mrp_time2_new ();
@@ -127,16 +127,17 @@
 		case PLANNER_SCALE_FORMAT_SHORT:
 			/* i18n: Short "Week", preferably 2 letters. */
 			str = g_strdup_printf (_("Wk %d"),
-					       mrp_time2_get_week_number (t2));
+					       mrp_time2_get_week_number (t2, NULL));
 			break;
 		case PLANNER_SCALE_FORMAT_MEDIUM:
 			str = g_strdup_printf (_("Week %d"),
-					       mrp_time2_get_week_number (t2));
+					       mrp_time2_get_week_number (t2, NULL));
 			break; 
 		case PLANNER_SCALE_FORMAT_LONG:
 			/* i18n: Week, year. */
+			week = mrp_time2_get_week_number (t2, &year),
 			str = g_strdup_printf (_("Week %d, %d"),
-					       mrp_time2_get_week_number (t2),
+					       week,
 					       year);
 			break;
 		}
Index: data/stylesheets/html1_gantt.xsl
===================================================================
--- data/stylesheets/html1_gantt.xsl	(revision 849)
+++ data/stylesheets/html1_gantt.xsl	(working copy)
@@ -19,7 +19,10 @@
   <xsl:choose>
     <xsl:when test="date:day-in-week($date) = 2 and $days >= 7">
       <th class="gantt-week-header" align="center" colspan="7">
-        <xsl:value-of select="I18N:gettext('Week')"/>&nbsp;<xsl:value-of select="date:week-in-year($date) + 1"/>, <xsl:value-of select="date:year($date)"/>
+        <!-- A week that crosses a year boundary is associated with the year that its thursday is in.
+             This means that the year of any thursday date is always equal to the year of the week number.
+             Because the date at this point is always a monday, we can add 3 days to get to the year for this week. -->
+        <xsl:value-of select="I18N:gettext('Week')"/>&nbsp;<xsl:value-of select="date:week-in-year($date)"/>, <xsl:value-of select="date:year(date:add($date, date:duration(86400 * 3)))"/>
       </th>
       <xsl:if test="not($days = 7)">
         <xsl:call-template name="create-week-row">
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (GNU/Linux)

iD8DBQFGrOgcMGnpIbeahxwRAtSdAJoCtXtf9G/XiOBb452vW/S+ygXPKwCfXiB4
WAH3NRnYzo2Ss94gJ97IS0g=
=fW53
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.