From 51e44c9f4ca395fb94e159c22c37bf129a767daa Mon Sep 17 00:00:00 2001 From: Rotem Liss Date: Wed, 23 Aug 2006 16:45:49 +0000 Subject: [PATCH] (bug 366) Time-Variables like CURRENTTIME and CURRENTDAY should use time zones Actually, creating new magic words, replacing CURRENT with LOCAL in their names, which use the local time zone, per discussion: http://mail.wikimedia.org/pipermail/mediawiki-l/2006-August/014542.html . The behavior of the current magic words is not changed. --- includes/MagicWord.php | 13 +++++++++++ includes/Parser.php | 47 ++++++++++++++++++++++++++++++++++++++++ languages/MessagesEn.php | 23 +++++++++++++++----- languages/MessagesHe.php | 23 +++++++++++++++----- 4 files changed, 96 insertions(+), 10 deletions(-) diff --git a/includes/MagicWord.php b/includes/MagicWord.php index e616639cf3..4df1c6fc76 100644 --- a/includes/MagicWord.php +++ b/includes/MagicWord.php @@ -43,6 +43,16 @@ class MagicWord { 'currentyear', 'currenttime', 'currenthour', + 'localmonth', + 'localmonthname', + 'localmonthnamegen', + 'localmonthabbrev', + 'localday', + 'localday2', + 'localdayname', + 'localyear', + 'localtime', + 'localhour', 'numberofarticles', 'numberoffiles', 'sitename', @@ -57,6 +67,8 @@ class MagicWord { 'namespacee', 'currentweek', 'currentdow', + 'localweek', + 'localdow', 'revisionid', 'subpagename', 'subpagenamee', @@ -78,6 +90,7 @@ class MagicWord { 'basepagenamee', 'urlencode', 'currenttimestamp', + 'localtimestamp', 'directionmark', 'language', 'contentlanguage', diff --git a/includes/Parser.php b/includes/Parser.php index 3307191874..2123630731 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -2336,6 +2336,25 @@ class Parser $ts = time(); wfRunHooks( 'ParserGetVariableValueTs', array( &$this, &$ts ) ); + # Use the time zone + global $wgLocaltimezone; + if ( isset( $wgLocaltimezone ) ) { + $oldtz = getenv( 'TZ' ); + putenv( 'TZ='.$wgLocaltimezone ); + } + $localTimestamp = date( 'YmdHis', $ts ); + $localMonth = date( 'm', $ts ); + $localMonthName = date( 'n', $ts ); + $localDay = date( 'j', $ts ); + $localDay2 = date( 'd', $ts ); + $localDayOfWeek = date( 'w', $ts ); + $localWeek = date( 'W', $ts ); + $localYear = date( 'Y', $ts ); + $localHour = date( 'H', $ts ); + if ( isset( $wgLocaltimezone ) ) { + putenv( 'TZ='.$oldtz ); + } + switch ( $index ) { case 'currentmonth': return $varCache[$index] = $wgContLang->formatNum( date( 'm', $ts ) ); @@ -2349,6 +2368,18 @@ class Parser return $varCache[$index] = $wgContLang->formatNum( date( 'j', $ts ) ); case 'currentday2': return $varCache[$index] = $wgContLang->formatNum( date( 'd', $ts ) ); + case 'localmonth': + return $varCache[$index] = $wgContLang->formatNum( $localMonth ); + case 'localmonthname': + return $varCache[$index] = $wgContLang->getMonthName( $localMonthName ); + case 'localmonthnamegen': + return $varCache[$index] = $wgContLang->getMonthNameGen( $localMonthName ); + case 'localmonthabbrev': + return $varCache[$index] = $wgContLang->getMonthAbbreviation( $localMonthName ); + case 'localday': + return $varCache[$index] = $wgContLang->formatNum( $localDay ); + case 'localday2': + return $varCache[$index] = $wgContLang->formatNum( $localDay2 ); case 'pagename': return $this->mTitle->getText(); case 'pagenamee': @@ -2413,6 +2444,20 @@ class Parser return $varCache[$index] = $wgContLang->formatNum( (int)date( 'W', $ts ) ); case 'currentdow': return $varCache[$index] = $wgContLang->formatNum( date( 'w', $ts ) ); + case 'localdayname': + return $varCache[$index] = $wgContLang->getWeekdayName( $localDayOfWeek + 1 ); + case 'localyear': + return $varCache[$index] = $wgContLang->formatNum( $localYear, true ); + case 'localtime': + return $varCache[$index] = $wgContLang->time( $localTimestamp, false, false ); + case 'localhour': + return $varCache[$index] = $wgContLang->formatNum( $localHour, true ); + case 'localweek': + // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to + // int to remove the padding + return $varCache[$index] = $wgContLang->formatNum( (int)$localWeek ); + case 'localdow': + return $varCache[$index] = $wgContLang->formatNum( $localDayOfWeek ); case 'numberofarticles': return $varCache[$index] = $wgContLang->formatNum( wfNumberOfArticles() ); case 'numberoffiles': @@ -2425,6 +2470,8 @@ class Parser return $varCache[$index] = $wgContLang->formatNum( wfNumberOfAdmins() ); case 'currenttimestamp': return $varCache[$index] = wfTimestampNow(); + case 'localtimestamp': + return $varCache[$index] = $localTimestamp; case 'currentversion': global $wgVersion; return $wgVersion; diff --git a/languages/MessagesEn.php b/languages/MessagesEn.php index ce7049492b..03caa2f4ff 100644 --- a/languages/MessagesEn.php +++ b/languages/MessagesEn.php @@ -209,6 +209,16 @@ $magicWords = array( 'currentyear' => array( 1, 'CURRENTYEAR' ), 'currenttime' => array( 1, 'CURRENTTIME' ), 'currenthour' => array( 1, 'CURRENTHOUR' ), + 'localmonth' => array( 1, 'LOCALMONTH' ), + 'localmonthname' => array( 1, 'LOCALMONTHNAME' ), + 'localmonthnamegen' => array( 1, 'LOCALMONTHNAMEGEN' ), + 'localmonthabbrev' => array( 1, 'LOCALMONTHABBREV' ), + 'localday' => array( 1, 'LOCALDAY' ), + 'localday2' => array( 1, 'LOCALDAY2' ), + 'localdayname' => array( 1, 'LOCALDAYNAME' ), + 'localyear' => array( 1, 'LOCALYEAR' ), + 'localtime' => array( 1, 'LOCALTIME' ), + 'localhour' => array( 1, 'LOCALHOUR' ), 'numberofpages' => array( 1, 'NUMBEROFPAGES' ), 'numberofarticles' => array( 1, 'NUMBEROFARTICLES' ), 'numberoffiles' => array( 1, 'NUMBEROFFILES' ), @@ -256,6 +266,8 @@ $magicWords = array( 'nocontentconvert' => array( 0, '__NOCONTENTCONVERT__', '__NOCC__'), 'currentweek' => array( 1, 'CURRENTWEEK' ), 'currentdow' => array( 1, 'CURRENTDOW' ), + 'localweek' => array( 1, 'LOCALWEEK' ), + 'localdow' => array( 1, 'LOCALDOW' ), 'revisionid' => array( 1, 'REVISIONID' ), 'plural' => array( 0, 'PLURAL:' ), 'fullurl' => array( 0, 'FULLURL:' ), @@ -271,14 +283,15 @@ $magicWords = array( 'currentversion' => array( 1, 'CURRENTVERSION' ), 'urlencode' => array( 0, 'URLENCODE:' ), 'currenttimestamp' => array( 1, 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( 1, 'LOCALTIMESTAMP' ), 'directionmark' => array( 1, 'DIRECTIONMARK', 'DIRMARK' ), - 'language' => array( 0, '#LANGUAGE:' ), + 'language' => array( 0, '#LANGUAGE:' ), 'contentlanguage' => array( 1, 'CONTENTLANGUAGE', 'CONTENTLANG' ), 'pagesinnamespace' => array( 1, 'PAGESINNAMESPACE:', 'PAGESINNS:' ), - 'numberofadmins' => array( 1, 'NUMBEROFADMINS' ), - 'formatnum' => array( 0, 'FORMATNUM' ), - 'padleft' => array( 0, 'PADLEFT' ), - 'padright' => array( 0, 'PADRIGHT' ), + 'numberofadmins' => array( 1, 'NUMBEROFADMINS' ), + 'formatnum' => array( 0, 'FORMATNUM' ), + 'padleft' => array( 0, 'PADLEFT' ), + 'padright' => array( 0, 'PADRIGHT' ), ); diff --git a/languages/MessagesHe.php b/languages/MessagesHe.php index 2fb7d00621..53f1861e9c 100644 --- a/languages/MessagesHe.php +++ b/languages/MessagesHe.php @@ -76,6 +76,16 @@ $magicWords = array( 'currentyear' => array( 1, 'שנה נוכחית', 'CURRENTYEAR' ), 'currenttime' => array( 1, 'שעה נוכחית', 'CURRENTTIME' ), 'currenthour' => array( 1, 'שעות נוכחיות', 'CURRENTHOUR' ), + 'localmonth' => array( 1, 'חודש מקומי', 'LOCALMONTH' ), + 'localmonthname' => array( 1, 'שם חודש מקומי', 'LOCALMONTHNAME' ), + 'localmonthnamegen' => array( 1, 'שם חודש מקומי קניין', 'LOCALMONTHNAMEGEN' ), + 'localmonthabbrev' => array( 1, 'קיצור חודש מקומי', 'LOCALMONTHABBREV' ), + 'localday' => array( 1, 'יום מקומי', 'LOCALDAY' ), + 'localday2' => array( 1, 'יום מקומי 2', 'LOCALDAY2' ), + 'localdayname' => array( 1, 'שם יום מקומי', 'LOCALDAYNAME' ), + 'localyear' => array( 1, 'שנה מקומית', 'LOCALYEAR' ), + 'localtime' => array( 1, 'שעה מקומית', 'LOCALTIME' ), + 'localhour' => array( 1, 'שעות מקומיות', 'LOCALHOUR' ), 'numberofpages' => array( 1, 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ), 'numberofarticles' => array( 1, 'מספר ערכים', 'NUMBEROFARTICLES' ), 'numberoffiles' => array( 1, 'מספר קבצים', 'NUMBEROFFILES' ), @@ -123,6 +133,8 @@ $magicWords = array( 'nocontentconvert' => array( 0, '__ללא_המרת_תוכן__', '__NOCONTENTCONVERT__', '__NOCC__'), 'currentweek' => array( 1, 'שבוע נוכחי', 'CURRENTWEEK' ), 'currentdow' => array( 1, 'מספר יום נוכחי', 'CURRENTDOW' ), + 'localweek' => array( 1, 'שבוע מקומי', 'LOCALWEEK' ), + 'localdow' => array( 1, 'מספר יום מקומי', 'LOCALDOW' ), 'revisionid' => array( 1, 'מזהה גרסה', 'REVISIONID' ), 'plural' => array( 0, 'רבים:', 'PLURAL:' ), 'fullurl' => array( 0, 'כתובת מלאה:', 'FULLURL:' ), @@ -138,14 +150,15 @@ $magicWords = array( 'currentversion' => array( 1, 'גרסה נוכחית', 'CURRENTVERSION' ), 'urlencode' => array( 0, 'נתיב מקודד:', 'URLENCODE:' ), 'currenttimestamp' => array( 1, 'זמן נוכחי', 'CURRENTTIMESTAMP' ), + 'localtimestamp' => array( 1, 'זמן מקומי', 'LOCALTIMESTAMP' ), 'directionmark' => array( 1, 'סימן כיווניות', 'DIRECTIONMARK', 'DIRMARK' ), - 'language' => array( 0, '#שפה:', '#LANGUAGE:' ), + 'language' => array( 0, '#שפה:', '#LANGUAGE:' ), 'contentlanguage' => array( 1, 'שפת תוכן', 'CONTENTLANGUAGE', 'CONTENTLANG' ), 'pagesinnamespace' => array( 1, 'דפים במרחב השם:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ), - 'numberofadmins' => array( 1, 'מספר מפעילים', 'NUMBEROFADMINS' ), - 'formatnum' => array( 0, 'עיצוב מספר', 'FORMATNUM' ), - 'padleft' => array( 0, 'ריפוד משמאל', 'PADLEFT' ), - 'padright' => array( 0, 'ריפוד מימין', 'PADRIGHT' ), + 'numberofadmins' => array( 1, 'מספר מפעילים', 'NUMBEROFADMINS' ), + 'formatnum' => array( 0, 'עיצוב מספר', 'FORMATNUM' ), + 'padleft' => array( 0, 'ריפוד משמאל', 'PADLEFT' ), + 'padright' => array( 0, 'ריפוד מימין', 'PADRIGHT' ), ); $namespaceNames = array( -- 2.20.1