Index: trunk/extensions/ArticleFeedbackv5/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.js |
— | — | @@ -1128,7 +1128,7 @@ |
1129 | 1129 | .attr( 'href', mw.config.get( 'wgArticleFeedbackv5LearnToEdit' ) ); |
1130 | 1130 | |
1131 | 1131 | // Fill in the edit link |
1132 | | - var edit_track_id = $.articleFeedbackv5.buttonName() + '-button-click-' + |
| 1132 | + var edit_track_id = $.articleFeedbackv5.bucketName() + '-button_click-' + |
1133 | 1133 | ( $.articleFeedbackv5.inDialog ? 'overlay' : 'bottom' ); |
1134 | 1134 | $block.find( '.articleFeedbackv5-cta-button' ) |
1135 | 1135 | .attr( 'href', $.articleFeedbackv5.editUrl( edit_track_id ) ); |
— | — | @@ -1903,7 +1903,7 @@ |
1904 | 1904 | |
1905 | 1905 | // Fill in the link |
1906 | 1906 | var edit_track_id = $.articleFeedbackv5.bucketName() + '-' + |
1907 | | - $.articleFeedbackv5.ctaName() + '-button-click-' + |
| 1907 | + $.articleFeedbackv5.ctaName() + '-button_click-' + |
1908 | 1908 | ( $.articleFeedbackv5.inDialog ? 'overlay': 'bottom' ); |
1909 | 1909 | $block.find( '.articleFeedbackv5-cta-button' ) |
1910 | 1910 | .attr( 'href', $.articleFeedbackv5.editUrl( edit_track_id ) ); |
— | — | @@ -2251,13 +2251,13 @@ |
2252 | 2252 | */ |
2253 | 2253 | $.articleFeedbackv5.ctaName = function () { |
2254 | 2254 | if ( '0' == $.articleFeedbackv5.ctaId ) { |
2255 | | - return 'cta-none'; |
| 2255 | + return 'cta_none'; |
2256 | 2256 | } else if ( '1' == $.articleFeedbackv5.ctaId ) { |
2257 | | - return 'cta-edit'; |
| 2257 | + return 'cta_edit'; |
2258 | 2258 | } else if ( '2' == $.articleFeedbackv5.ctaId ) { |
2259 | | - return 'cta-learnmore'; |
| 2259 | + return 'cta_learn_more'; |
2260 | 2260 | } else { |
2261 | | - return 'cta-unknown'; |
| 2261 | + return 'cta_unknown'; |
2262 | 2262 | } |
2263 | 2263 | }; |
2264 | 2264 | |
— | — | @@ -2290,16 +2290,15 @@ |
2291 | 2291 | var params = { |
2292 | 2292 | 'title': mw.config.get( 'wgPageName' ), |
2293 | 2293 | 'action': 'edit', |
| 2294 | + 'articleFeedbackv5_click_tracking': $.articleFeedbackv5.clickTracking ? '1' : '0', |
2294 | 2295 | }; |
2295 | | - if ( $.articleFeedbackv5.bucketId ) { |
| 2296 | + if ( $.articleFeedbackv5.clickTracking ) { |
| 2297 | + params.articleFeedbackv5_ct_token = $.cookie( 'clicktracking-session' ); |
2296 | 2298 | params.articleFeedbackv5_bucket_id = $.articleFeedbackv5.bucketId; |
| 2299 | + params.articleFeedbackv5_cta_id = $.articleFeedbackv5.ctaId; |
| 2300 | + params.articleFeedbackv5_link_id = $.articleFeedbackv5.linkId; |
| 2301 | + params.articleFeedbackv5_location = $.articleFeedbackv5.inDialog ? 'overlay' : 'bottom'; |
2297 | 2302 | } |
2298 | | - if ( $.articleFeedbackv5.ctaId ) { |
2299 | | - params.articleFeedbackv5_cta_id = $.articleFeedbackv5.ctaId; |
2300 | | - } |
2301 | | - if ( $.articleFeedbackv5.feedbackId ) { |
2302 | | - params.articleFeedbackv5_feedback_id = $.articleFeedbackv5.feedbackId; |
2303 | | - } |
2304 | 2303 | var url = mw.config.get( 'wgScript' ) + '?' + $.param( params ); |
2305 | 2304 | if ( trackingId ) { |
2306 | 2305 | return $.articleFeedbackv5.trackingUrl( url, trackingId ); |
— | — | @@ -2463,10 +2462,10 @@ |
2464 | 2463 | |
2465 | 2464 | // Track the event |
2466 | 2465 | if ( $.articleFeedbackv5.inDialog ) { |
2467 | | - $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-overlay-impression' ); |
| 2466 | + $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-impression-overlay' ); |
2468 | 2467 | } else { |
2469 | 2468 | // Don't track bottom-of-the-page loads, at least for now |
2470 | | - // $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-bottom-impression' ); |
| 2469 | + // $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-impression-bottom' ); |
2471 | 2470 | } |
2472 | 2471 | |
2473 | 2472 | $.articleFeedbackv5.nowShowing = 'form'; |
— | — | @@ -2912,10 +2911,10 @@ |
2913 | 2912 | $.articleFeedbackv5.closeAsModal = function () { |
2914 | 2913 | if ( $.articleFeedbackv5.inDialog ) { |
2915 | 2914 | if ( 'form' == $.articleFeedbackv5.nowShowing ) { |
2916 | | - $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-overlay-close' ); |
| 2915 | + $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-close-overlay' ); |
2917 | 2916 | } else if ('cta' == $.articleFeedbackv5.nowShowing ) { |
2918 | 2917 | $.articleFeedbackv5.trackClick( $.articleFeedbackv5.bucketName() + '-' + |
2919 | | - $.articleFeedbackv5.ctaName() + '-overlay-close' ); |
| 2918 | + $.articleFeedbackv5.ctaName() + '-close-overlay' ); |
2920 | 2919 | } |
2921 | 2920 | $.articleFeedbackv5.setLinkId( '0' ); |
2922 | 2921 | $.articleFeedbackv5.$dialog.find( '.articleFeedbackv5-tooltip' ).hide(); |
Index: trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php |
— | — | @@ -239,7 +239,8 @@ |
240 | 240 | $wgHooks['ResourceLoaderGetConfigVars'][] = 'ArticleFeedbackv5Hooks::resourceLoaderGetConfigVars'; |
241 | 241 | $wgHooks['GetPreferences'][] = 'ArticleFeedbackv5Hooks::getPreferences'; |
242 | 242 | $wgHooks['EditPage::showEditForm:fields'][] = 'ArticleFeedbackv5Hooks::pushTrackingFieldsToEdit'; |
243 | | -$wgHooks['ArticleSaveComplete'][] = 'ArticleFeedbackv5Hooks::trackEdit'; |
| 243 | +$wgHooks['EditPage::attemptSave'][] = 'ArticleFeedbackv5Hooks::trackEditAttempt'; |
| 244 | +$wgHooks['ArticleSaveComplete'][] = 'ArticleFeedbackv5Hooks::trackEditSuccess'; |
244 | 245 | |
245 | 246 | // API Registration |
246 | 247 | //$wgAPIListModules['articlefeedbackv5-view-ratings'] = 'ApiViewRatingsArticleFeedbackv5'; |
Index: trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.hooks.php |
— | — | @@ -286,33 +286,81 @@ |
287 | 287 | public static function pushTrackingFieldsToEdit( $editPage, $output ) { |
288 | 288 | global $wgRequest; |
289 | 289 | |
290 | | - $feedbackId = $wgRequest->getVal( 'articleFeedbackv5_feedback_id' ); |
291 | | - $ctaId = $wgRequest->getVal( 'articleFeedbackv5_cta_id' ); |
| 290 | + $tracking = $wgRequest->getVal( 'articleFeedbackv5_click_tracking' ); |
292 | 291 | $bucketId = $wgRequest->getVal( 'articleFeedbackv5_bucket_id' ); |
| 292 | + $ctaId = $wgRequest->getVal( 'articleFeedbackv5_cta_id' ); |
| 293 | + $location = $wgRequest->getVal( 'articleFeedbackv5_location' ); |
| 294 | + $token = $wgRequest->getVal( 'articleFeedbackv5_ct_token' ); |
293 | 295 | |
294 | | - $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_feedback_id', $feedbackId ); |
| 296 | + $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_click_tracking', $tracking ); |
| 297 | + $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_bucket_id', $bucketId ); |
295 | 298 | $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_cta_id', $ctaId ); |
296 | | - $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_bucket_id', $bucketId ); |
| 299 | + $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_location', $location ); |
| 300 | + $editPage->editFormTextAfterContent .= Html::hidden( 'articleFeedbackv5_ct_token', $token ); |
297 | 301 | |
298 | 302 | return true; |
299 | 303 | } |
300 | 304 | |
301 | 305 | /** |
302 | | - * Tracks edits |
| 306 | + * Tracks edit attempts |
303 | 307 | * |
| 308 | + * @see http://www.mediawiki.org/wiki/Manual:Hooks/EditPage::attemptSave |
| 309 | + */ |
| 310 | + public static function trackEditAttempt( $editpage ) { |
| 311 | + self::trackEvent( 'edit_attempt' ); |
| 312 | + return true; |
| 313 | + } |
| 314 | + |
| 315 | + /** |
| 316 | + * Tracks successful edits |
| 317 | + * |
304 | 318 | * @see http://www.mediawiki.org/wiki/Manual:Hooks/ArticleSaveComplete |
305 | 319 | */ |
306 | | - public static function trackEdit( $article, $user, $text, $summary, $minoredit, |
307 | | - $watchthis, $sectionanchor, $flags, $revision, $baseRevId ) { |
308 | | - global $wgRequest; |
| 320 | + public static function trackEditSuccess( &$article, &$user, $text, |
| 321 | + $summary, $minoredit, $watchthis, $sectionanchor, &$flags, |
| 322 | + $revision, &$status, $baseRevId, &$redirect) { |
| 323 | + self::trackEvent( 'edit_success' ); |
| 324 | + return true; |
| 325 | + } |
309 | 326 | |
310 | | - $feedbackId = $wgRequest->getVal( 'articleFeedbackv5_feedback_id' ); |
311 | | - $ctaId = $wgRequest->getVal( 'articleFeedbackv5_cta_id' ); |
| 327 | + /** |
| 328 | + * Internal use: Tracks an event |
| 329 | + * |
| 330 | + * @param $event string the event name |
| 331 | + */ |
| 332 | + private static function trackEvent( $event ) { |
| 333 | + global $wgRequest, |
| 334 | + $wgArticleFeedbackv5Tracking, |
| 335 | + $wgTitle; |
| 336 | + $ctas = array( 'none', 'edit', 'learn_more' ); |
| 337 | + |
| 338 | + $tracking = $wgRequest->getVal( 'articleFeedbackv5_click_tracking' ); |
| 339 | + if ( !$tracking ) { |
| 340 | + return; |
| 341 | + } |
| 342 | + |
| 343 | + $version = $wgArticleFeedbackv5Tracking['version']; |
312 | 344 | $bucketId = $wgRequest->getVal( 'articleFeedbackv5_bucket_id' ); |
| 345 | + $ctaId = $wgRequest->getVal( 'articleFeedbackv5_cta_id' ); |
| 346 | + $location = $wgRequest->getVal( 'articleFeedbackv5_location' ); |
| 347 | + $token = $wgRequest->getVal( 'articleFeedbackv5_ct_token' ); |
313 | 348 | |
314 | | - return true; |
| 349 | + $trackingId = 'ext.articleFeedbackv5@' . $version |
| 350 | + . '-option' . $bucketId |
| 351 | + . '-cta_' . ( isset( $ctas[$ctaId] ) ? $ctas[$ctaId] : 'unknown' ) |
| 352 | + . '-' . $event |
| 353 | + . '-' . $location; |
| 354 | + |
| 355 | + $params = new FauxRequest( array( |
| 356 | + 'action' => 'clicktracking', |
| 357 | + 'eventid' => $trackingId, |
| 358 | + 'token' => $token, |
| 359 | + 'info' => $wgTitle->getText(), |
| 360 | + 'namespacenumber' => $wgTitle->getNamespace() |
| 361 | + ) ); |
| 362 | + $api = new ApiMain( $params, true ); |
| 363 | + $api->execute(); |
315 | 364 | } |
316 | 365 | |
317 | | - |
318 | 366 | } |
319 | 367 | |