Index: trunk/extensions/ContributionReporting/ContributionReporting.php |
— | — | @@ -168,31 +168,31 @@ |
169 | 169 | |
170 | 170 | # Output |
171 | 171 | $output = $row['ttl'] ? $row['ttl'] : '0'; |
172 | | - |
| 172 | + |
173 | 173 | $output += $fudgeFactor; |
174 | | - |
| 174 | + |
175 | 175 | return $output; |
176 | 176 | } |
177 | 177 | |
178 | 178 | function efContributionReportingTotal_Render() { |
179 | 179 | $args = func_get_args(); |
180 | 180 | array_shift( $args ); |
181 | | - |
| 181 | + |
182 | 182 | $fudgeFactor = false; |
183 | 183 | $start = false; |
184 | | - |
| 184 | + |
185 | 185 | foreach( $args as $arg ) { |
186 | 186 | if ( strpos($arg,'=') === false ) |
187 | 187 | continue; |
188 | | - |
| 188 | + |
189 | 189 | list($key,$value) = explode( '=', trim($arg), 2 ); |
190 | | - |
| 190 | + |
191 | 191 | if ($key == 'fudgefactor') { |
192 | 192 | $fudgeFactor = $value; |
193 | 193 | } elseif ($key == 'start') { |
194 | 194 | $start = $value; |
195 | 195 | } |
196 | 196 | } |
197 | | - |
| 197 | + |
198 | 198 | return efContributionReportingTotal( $start, $fudgeFactor ); |
199 | 199 | } |
Index: trunk/extensions/ContributionReporting/ContributionTrackingStatistics_body.php |
— | — | @@ -37,18 +37,18 @@ |
38 | 38 | ); |
39 | 39 | |
40 | 40 | $htmlOut .= Xml::tags( 'tr', null, |
41 | | - Xml::element( 'td', array( 'align' => 'left' ), |
| 41 | + Xml::element( 'td', array( 'align' => 'left' ), |
42 | 42 | wfMsg( 'contribstats-imperfect-data' ) ) . |
43 | | - Xml::element( 'td', array( 'align' => 'right' ), |
| 43 | + Xml::element( 'td', array( 'align' => 'right' ), |
44 | 44 | wfTimestamp( TS_DB ) . ' (UTC)') |
45 | 45 | ); |
46 | 46 | $htmlOut .= Xml::tags( 'tr', null, |
47 | | - Xml::element( 'td', array( 'align' => 'left' ), |
48 | | - wfMsg( 'contribstats-fraud-note' ) . " " . |
| 47 | + Xml::element( 'td', array( 'align' => 'left' ), |
| 48 | + wfMsg( 'contribstats-fraud-note' ) . " " . |
49 | 49 | wfMsg( 'contribstats-unaudited' ) ) |
50 | 50 | ); |
51 | 51 | $htmlOut .= Xml::tags( 'tr', null, |
52 | | - Xml::element( 'td', array( 'align' => 'left' ), |
| 52 | + Xml::element( 'td', array( 'align' => 'left' ), |
53 | 53 | 'PP = ' . wfMsg( 'contribstats-paypal-donations' ) . ', ' . |
54 | 54 | 'CC = ' . wfMsg( 'contribstats-credit-card' ) ) |
55 | 55 | ); |
— | — | @@ -74,11 +74,11 @@ |
75 | 75 | public function showTotalsForRange( $range, $format ) { |
76 | 76 | list( $start, $end ) = $range; |
77 | 77 | $current = $end; |
78 | | - |
| 78 | + |
79 | 79 | switch( $format ) { |
80 | 80 | case 1: |
81 | 81 | while( $current > $start ) { |
82 | | - $this->showDayTotals( $current ); |
| 82 | + $this->showDayTotals( $current ); |
83 | 83 | $current = $current - 24 * 60 * 60; |
84 | 84 | } |
85 | 85 | break; |
— | — | @@ -91,7 +91,7 @@ |
92 | 92 | $this->showCombinedTotals( $totals, $range ); |
93 | 93 | break; |
94 | 94 | |
95 | | - } |
| 95 | + } |
96 | 96 | } |
97 | 97 | |
98 | 98 | // Display tracking information for one day |
— | — | @@ -187,7 +187,7 @@ |
188 | 188 | public function showCombinedTotals( $totals, $range ) { |
189 | 189 | global $wgOut; |
190 | 190 | |
191 | | - $msg = date( 'o-m-d', wfTimestamp( TS_UNIX, $range[0] ) ) . ' - ' . |
| 191 | + $msg = date( 'o-m-d', wfTimestamp( TS_UNIX, $range[0] ) ) . ' - ' . |
192 | 192 | date( 'o-m-d', wfTimestamp( TS_UNIX, $range[1] ) ) ; |
193 | 193 | $htmlOut = Xml::element( 'h3', null, $msg ); |
194 | 194 | |
— | — | @@ -224,7 +224,7 @@ |
225 | 225 | |
226 | 226 | $res = $dbr->select( |
227 | 227 | array( 'contribution_tracking', |
228 | | - 'civicrm.public_reporting', |
| 228 | + 'civicrm.public_reporting', |
229 | 229 | ), |
230 | 230 | array( |
231 | 231 | 'utm_source', |
— | — | @@ -242,7 +242,7 @@ |
243 | 243 | array( 'civicrm.public_reporting' => |
244 | 244 | array( |
245 | 245 | 'LEFT JOIN', |
246 | | - 'contribution_tracking.contribution_id = civicrm.public_reporting.contribution_id', |
| 246 | + 'contribution_tracking.contribution_id = civicrm.public_reporting.contribution_id', |
247 | 247 | ) |
248 | 248 | ) |
249 | 249 | |
Index: trunk/extensions/ContributionReporting/FundraiserStatistics_body.php |
— | — | @@ -13,10 +13,10 @@ |
14 | 14 | public function __construct() { |
15 | 15 | parent::__construct( 'FundraiserStatistics' ); |
16 | 16 | } |
17 | | - |
| 17 | + |
18 | 18 | public function execute( $sub ) { |
19 | 19 | global $wgRequest, $wgOut, $wgUser, $wgLang, $wgScriptPath, $egFundraiserStatisticsFundraisers; |
20 | | - |
| 20 | + |
21 | 21 | $showYear = array(); |
22 | 22 | foreach ( $egFundraiserStatisticsFundraisers as $fundraiser ) { |
23 | 23 | if ( $wgRequest->wasPosted() ) { |
— | — | @@ -25,11 +25,11 @@ |
26 | 26 | $showYear[$fundraiser['id']] = true; |
27 | 27 | } |
28 | 28 | } |
29 | | - |
| 29 | + |
30 | 30 | $this->timezone = $wgRequest->getText( 'timezone', '+0:00' ); |
31 | | - |
| 31 | + |
32 | 32 | /* Configuration (this isn't totally static data, some of it gets built on the fly) */ |
33 | | - |
| 33 | + |
34 | 34 | $charts = array( |
35 | 35 | 'totals' => array( |
36 | 36 | 'data' => array(), |
— | — | @@ -72,9 +72,9 @@ |
73 | 73 | 'max' => 1, |
74 | 74 | ), |
75 | 75 | ); |
76 | | - |
| 76 | + |
77 | 77 | /* Setup */ |
78 | | - |
| 78 | + |
79 | 79 | $this->setHeaders(); |
80 | 80 | $wgOut->addScriptFile( $wgScriptPath . '/extensions/ContributionReporting/FundraiserStatistics.js' ); |
81 | 81 | $wgOut->addLink( |
— | — | @@ -84,9 +84,9 @@ |
85 | 85 | 'href' => $wgScriptPath . '/extensions/ContributionReporting/FundraiserStatistics.css', |
86 | 86 | ) |
87 | 87 | ); |
88 | | - |
| 88 | + |
89 | 89 | /* Display */ |
90 | | - |
| 90 | + |
91 | 91 | // Chart maximums |
92 | 92 | foreach ( $egFundraiserStatisticsFundraisers as $fundraiser ) { |
93 | 93 | foreach ( $charts as $name => $chart ) { |
— | — | @@ -97,7 +97,7 @@ |
98 | 98 | } |
99 | 99 | } |
100 | 100 | // Scale factors |
101 | | - foreach ( $charts as $name => $chart ) { |
| 101 | + foreach ( $charts as $name => $chart ) { |
102 | 102 | $charts[$name]['factor'] = 300 / $chart['max']; |
103 | 103 | } |
104 | 104 | // HTML-time! |
— | — | @@ -112,7 +112,7 @@ |
113 | 113 | if ( !isset( $charts[$name]['data'][$column] ) ) { |
114 | 114 | $charts[$name]['data'][$column] = ''; |
115 | 115 | } |
116 | | - |
| 116 | + |
117 | 117 | // Add spacer between days |
118 | 118 | if ( $fundraiserIndex == 0 ) { |
119 | 119 | $attributes = array( |
— | — | @@ -123,7 +123,7 @@ |
124 | 124 | 'td', array( 'valign' => 'bottom' ), Xml::element( 'div', $attributes, '', false ) |
125 | 125 | ); |
126 | 126 | } |
127 | | - |
| 127 | + |
128 | 128 | $height = $chart['factor'] * $day[$chart['index']]; |
129 | 129 | $style = "height:{$height}px;"; |
130 | 130 | if ( $showYear[$fundraiser['id']] !== true ) { |
— | — | @@ -189,13 +189,13 @@ |
190 | 190 | } |
191 | 191 | } |
192 | 192 | } |
193 | | - |
| 193 | + |
194 | 194 | $wgOut->addHTML( Xml::openElement( 'div', array( 'id' => 'configtoggle' ) ) ); |
195 | 195 | $wgOut->addHTML( '<a id="customize-chart">'.wfMsg( 'fundraiserstats-customize' ).'</a>' ); |
196 | 196 | $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
197 | | - |
| 197 | + |
198 | 198 | $wgOut->addHTML( Xml::openElement( 'form', array( 'method' => 'post', 'id' => 'configform' ) ) ); |
199 | | - |
| 199 | + |
200 | 200 | $years = wfMsg( 'fundraiserstats-show-years' ).'<br/>'; |
201 | 201 | foreach ( $egFundraiserStatisticsFundraisers as $fundraiser ) { |
202 | 202 | $years .= Xml::check( 'toogle'.$fundraiser['id'], $showYear[$fundraiser['id']], array( 'id' => 'bar-'.$fundraiser['id'], 'class' => 'yeartoggle' ) ); |
— | — | @@ -207,9 +207,9 @@ |
208 | 208 | $wgOut->addHTML( wfMsg( 'fundraiserstats-time-zone' ).'<br/>' ); |
209 | 209 | $wgOut->addHTML( ' '.Xml::listDropDown( 'timezone', $this->dropDownList( range ( -12, 14, 1 ) ), '', $this->timezone, '', 1 ).' '.wfMsg( 'fundraiserstats-utc' ) ); |
210 | 210 | $wgOut->addHTML( Xml::closeElement( 'div' ) ); |
211 | | - |
| 211 | + |
212 | 212 | $wgOut->addHTML( Xml::closeElement( 'form' ) ); |
213 | | - |
| 213 | + |
214 | 214 | // Instructions |
215 | 215 | $wgOut->addWikiMsg( 'fundraiserstats-instructions' ); |
216 | 216 | |
— | — | @@ -237,7 +237,7 @@ |
238 | 238 | array( |
239 | 239 | 'id' => "fundraiserstats-chart-{$name}", |
240 | 240 | 'class' => 'fundraiserstats-chart', |
241 | | - 'style' => 'display:' . ( $first ? 'block' : 'none' ) |
| 241 | + 'style' => 'display:' . ( $first ? 'block' : 'none' ) |
242 | 242 | ), |
243 | 243 | Xml::tags( |
244 | 244 | 'table', |
— | — | @@ -261,12 +261,12 @@ |
262 | 262 | ) |
263 | 263 | ); |
264 | 264 | } |
265 | | - |
| 265 | + |
266 | 266 | /* Private Functions */ |
267 | | - |
| 267 | + |
268 | 268 | private function query( $type, $start, $end ) { |
269 | 269 | global $wgMemc, $egFundraiserStatisticsMinimum, $egFundraiserStatisticsMaximum, $egFundraiserStatisticsCacheTimeout; |
270 | | - |
| 270 | + |
271 | 271 | $key = wfMemcKey( 'fundraiserstatistics', $type, $start, $end ); |
272 | 272 | $cache = $wgMemc->get( $key ); |
273 | 273 | if ( $cache != false && $cache != -1 ) { |
— | — | @@ -362,7 +362,7 @@ |
363 | 363 | } |
364 | 364 | return null; |
365 | 365 | } |
366 | | - |
| 366 | + |
367 | 367 | private function dropDownList ( $values ) { |
368 | 368 | $dropDown = ''; |
369 | 369 | foreach ( $values as $value ) { |
Index: trunk/extensions/ContributionReporting/ContributionHistory_body.php |
— | — | @@ -10,27 +10,27 @@ |
11 | 11 | # Emergecny short cut until post donation comments are enabled |
12 | 12 | $wgOut->redirect( SpecialPage::getTitleFor( 'FundraiserStatistics' )->getFullURL() ); |
13 | 13 | return; |
14 | | - |
15 | 14 | |
| 15 | + |
16 | 16 | if ( !preg_match( '/^[a-z-]+$/', $language ) ) { |
17 | 17 | $language = 'en'; |
18 | 18 | } |
19 | 19 | $this->lang = Language::factory( $language ); |
20 | | - |
| 20 | + |
21 | 21 | // Get request data |
22 | 22 | $offset = $wgRequest->getIntOrNull( 'offset' ); |
23 | 23 | $show = 100; |
24 | | - |
| 24 | + |
25 | 25 | $this->setHeaders(); |
26 | | - |
| 26 | + |
27 | 27 | $db = efContributionReportingConnection(); |
28 | | - |
| 28 | + |
29 | 29 | $output = '<style type="text/css">'; |
30 | 30 | $output .= 'td.left {padding-right: 10px;}'; |
31 | 31 | $output .= 'td.right {padding-left: 10px; text-align: right;}'; |
32 | 32 | $output .= 'td.alt {background-color: #DDDDDD;}'; |
33 | 33 | $output .= '</style>'; |
34 | | - |
| 34 | + |
35 | 35 | // Paging controls |
36 | 36 | $newer = $db->selectField( 'public_reporting', 'received', |
37 | 37 | array_merge( |
— | — | @@ -41,7 +41,7 @@ |
42 | 42 | array( |
43 | 43 | 'ORDER BY' => 'received ASC', |
44 | 44 | 'LIMIT' => 1, |
45 | | - 'OFFSET' => $show |
| 45 | + 'OFFSET' => $show |
46 | 46 | ) |
47 | 47 | ); |
48 | 48 | $older = $db->selectField( 'public_reporting', 'received', |
— | — | @@ -56,9 +56,9 @@ |
57 | 57 | 'OFFSET' => $show |
58 | 58 | ) |
59 | 59 | ); |
60 | | - |
| 60 | + |
61 | 61 | $title = $this->getTitle( $language == 'en' ? null : $language ); |
62 | | - |
| 62 | + |
63 | 63 | $pagingLinks = array(); |
64 | 64 | if( $offset !== null ) { |
65 | 65 | $pagingLinks[] = Xml::element( 'a', |
— | — | @@ -79,14 +79,14 @@ |
80 | 80 | $wgLang->pipeList( $pagingLinks ) . |
81 | 81 | Xml::closeElement( 'div' ); |
82 | 82 | $output .= $pagingDiv; |
83 | | - |
| 83 | + |
84 | 84 | $output .= '<table style="width: 100%">'; |
85 | 85 | $output .= '<tr>'; |
86 | 86 | $output .= '<th width="60%">' . $this->msg( 'contrib-hist-name' ) . '</th>'; |
87 | 87 | $output .= '<th width="25%">' . $this->msg( 'contrib-hist-date' ) . '</th>'; |
88 | 88 | $output .= '<th width="15%" align="right">' . $this->msg( 'contrib-hist-amount' ) . '</th>'; |
89 | 89 | $output .= '</tr>'; |
90 | | - |
| 90 | + |
91 | 91 | if ( $offset == null ) { |
92 | 92 | $offset = $db->selectField( 'public_reporting', 'received', |
93 | 93 | array( 'received > ' . strtotime( 'July 1st 2008' ) ), |
— | — | @@ -97,9 +97,9 @@ |
98 | 98 | ) |
99 | 99 | ); |
100 | 100 | } |
101 | | - |
| 101 | + |
102 | 102 | $url = SpecialPage::getTitleFor( 'ContributionHistory' )->getFullURL(); |
103 | | - |
| 103 | + |
104 | 104 | $res = $db->select( 'public_reporting', '*', |
105 | 105 | array_merge( |
106 | 106 | array( 'received > ' . strtotime( 'July 1st 2008' ) ), |
— | — | @@ -126,7 +126,7 @@ |
127 | 127 | if ( $alt ) { |
128 | 128 | $class = ' alt'; |
129 | 129 | } |
130 | | - |
| 130 | + |
131 | 131 | $output .= "<tr>"; |
132 | 132 | $output .= "<td class=\"left $class\"><a name=\"{$contributionId}\"></a><a href=\"{$url}?offset={$offset}#{$contributionId}\">{$name}</a></td>"; |
133 | 133 | $output .= "<td class=\"left $class\" style=\"width: 100px;\">$date</td>"; |
— | — | @@ -135,9 +135,9 @@ |
136 | 136 | |
137 | 137 | $alt = !$alt; |
138 | 138 | } |
139 | | - |
| 139 | + |
140 | 140 | $output .= '</table>'; |
141 | | - |
| 141 | + |
142 | 142 | $output .= $pagingDiv; |
143 | 143 | |
144 | 144 | header( 'Cache-Control: max-age=300,s-maxage=300' ); |
— | — | @@ -146,25 +146,25 @@ |
147 | 147 | $wgOut->addWikiText( '<strong>{{2008/Contribution history introduction/' . $language . '}}</strong>' ); |
148 | 148 | $wgOut->addHTML( $output ); |
149 | 149 | } |
150 | | - |
| 150 | + |
151 | 151 | function msg( $key ) { |
152 | 152 | return wfMsgExt( $key, array( 'escape', 'language' => $this->lang ) ); |
153 | 153 | } |
154 | | - |
| 154 | + |
155 | 155 | function formatName( $row ) { |
156 | 156 | $name = htmlspecialchars( $row['name'] ); |
157 | 157 | if( !$name ) { |
158 | 158 | $name = $this->msg( 'contrib-hist-anonymous' ); |
159 | 159 | } |
160 | 160 | $name = '<strong>' . $name . '</strong>'; |
161 | | - |
| 161 | + |
162 | 162 | if( $row['note'] && !$this->isTiny( $row ) ) { |
163 | 163 | $name .= '<br />' . htmlspecialchars( $row['note'] ); |
164 | 164 | } |
165 | 165 | |
166 | 166 | return $name; |
167 | 167 | } |
168 | | - |
| 168 | + |
169 | 169 | function isTiny( $row ) { |
170 | 170 | $mins = array( |
171 | 171 | 'USD' => 1, |
— | — | @@ -200,7 +200,7 @@ |
201 | 201 | return false; |
202 | 202 | } |
203 | 203 | } |
204 | | - |
| 204 | + |
205 | 205 | function formatDate( $row ) { |
206 | 206 | $ts = wfTimestamp( TS_MW, $row['received'] ); |
207 | 207 | return $this->lang->timeanddate( $ts ); |
— | — | @@ -208,7 +208,7 @@ |
209 | 209 | |
210 | 210 | function formatAmount( $row ) { |
211 | 211 | $converted = $row['converted_amount']; |
212 | | - |
| 212 | + |
213 | 213 | if ( $row['original_currency'] ) { |
214 | 214 | $currency = $row['original_currency']; |
215 | 215 | $amount = $row['original_amount']; |
Index: trunk/extensions/ContributionReporting/FundraiserStatistics.js |
— | — | @@ -1,7 +1,7 @@ |
2 | 2 | /* JavaScript */ |
3 | 3 | |
4 | 4 | $j( document ).ready( function() { |
5 | | - |
| 5 | + |
6 | 6 | var currentViewID = 'fundraiserstats-view-box-0'; |
7 | 7 | function replaceView( newLayerID ) { |
8 | 8 | var currentLayer = document.getElementById( currentViewID ); |
— | — | @@ -10,7 +10,7 @@ |
11 | 11 | newLayer.style.display = 'block'; |
12 | 12 | currentViewID = newLayerID; |
13 | 13 | } |
14 | | - |
| 14 | + |
15 | 15 | var currentChartID = 'fundraiserstats-chart-totals'; |
16 | 16 | function replaceChart( newLayerID ) { |
17 | 17 | var currentLayer = document.getElementById( currentChartID ); |
— | — | @@ -47,5 +47,5 @@ |
48 | 48 | $j( '#timezone' ).change( function() { |
49 | 49 | $j('#configform').submit(); |
50 | 50 | } ); |
51 | | - |
| 51 | + |
52 | 52 | } ); |
Index: trunk/extensions/ContributionReporting/ContributionReporting.i18n.php |
— | — | @@ -16,16 +16,16 @@ |
17 | 17 | 'contributionreporting-desc' => 'Live reporting on the Wikimedia fundraiser', |
18 | 18 | 'contributiontotal' => 'Contribution total', |
19 | 19 | 'contributionhistory' => 'Contribution history', |
20 | | - |
| 20 | + |
21 | 21 | 'contrib-hist-header' => 'Donor comments from around the world', |
22 | | - |
| 22 | + |
23 | 23 | 'contrib-hist-name' => 'Name', |
24 | 24 | 'contrib-hist-date' => 'Time and date', |
25 | 25 | 'contrib-hist-amount' => 'Amount', |
26 | | - |
| 26 | + |
27 | 27 | 'contrib-hist-next' => 'Earlier donations', |
28 | 28 | 'contrib-hist-previous' => 'Newer donations', |
29 | | - |
| 29 | + |
30 | 30 | 'contrib-hist-anonymous' => 'Anonymous', |
31 | 31 | |
32 | 32 | // ContributionStatistics |
— | — | @@ -118,21 +118,21 @@ |
119 | 119 | 'contrib-hist-name' => '{{Identical|Name}}', |
120 | 120 | 'contrib-hist-date' => '{{Identical|Date}}', |
121 | 121 | 'contrib-hist-amount' => '{{Identical|Amount}}', |
122 | | - 'contributionstatistics' => 'Title on the contribution report for <nowiki>[[Special:ContributionStatistics]]</nowiki>. |
| 122 | + 'contributionstatistics' => 'Title on the contribution report for <nowiki>[[Special:ContributionStatistics]]</nowiki>. |
123 | 123 | You may see an example in context at http://wikimediafoundation.org/wiki/Special:ContributionStatistics', |
124 | 124 | 'contribstats-desc' => '{{desc}}', |
125 | 125 | 'contribstats-currency-range-totals' => '* $1 is a start date |
126 | 126 | * $2 is an end date', |
127 | | - 'contribstats-contribution-breakdown' => 'Title on the contribution report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
| 127 | + 'contribstats-contribution-breakdown' => 'Title on the contribution report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
128 | 128 | You may see an example in context at http://wikimediafoundation.org/wiki/Special:ContributionStatistics', |
129 | | - 'contribstats-day' => '"Day" on the contribution report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
| 129 | + 'contribstats-day' => '"Day" on the contribution report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
130 | 130 | You may see an example in context at http://wikimediafoundation.org/wiki/Special:ContributionStatistics |
131 | 131 | {{Identical|Day}}', |
132 | | - 'contribstats-month' => '"Month" on the contribution report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
| 132 | + 'contribstats-month' => '"Month" on the contribution report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
133 | 133 | You may see an example in context at http://wikimediafoundation.org/wiki/Special:ContributionStatistics |
134 | 134 | {{Identical|Month}}', |
135 | 135 | 'contribstats-currency' => '{{Identical|Currency}}', |
136 | | - 'contribstats-contributions' => 'The number of contributions (donations) on a report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
| 136 | + 'contribstats-contributions' => 'The number of contributions (donations) on a report for <nowiki>[[</nowiki>Special:ContributionStatistics<nowiki>]]</nowiki>. |
137 | 137 | You may see an example in context at http://wikimediafoundation.org/wiki/Special:ContributionStatistics', |
138 | 138 | 'contribstats-day-totals' => 'The day for which the contribution statistics are being displayed.', |
139 | 139 | 'contribstats-conversion' => 'Click conversion rate, see [[:wikipedia:Conversion rate|Wikipedia article]].', |