http://www.mediawiki.org/wiki/Special:Code/MediaWiki/61970
Revision: 61970 Author: dale Date: 2010-02-04 08:31:54 +0000 (Thu, 04 Feb 2010) Log Message: ----------- * finished basic play tracking support * updated play tracking schema * updated javascript to support "rate" based play tracking Modified Paths: -------------- trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.php trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.sql trunk/extensions/OggHandler/OggHandler.php trunk/extensions/OggHandler/OggPlayer.js Modified: trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.php =================================================================== --- trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.php 2010-02-04 03:22:36 UTC (rev 61969) +++ trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.php 2010-02-04 08:31:54 UTC (rev 61970) @@ -15,14 +15,28 @@ * @see includes/api/ApiBase#execute() */ public function execute() { - global $wgEnablePlayTracking; + global $wgEnablePlayTracking, $wgSecretKey, $wgUser, $wgPlayTrackingRate; if( ! $wgEnablePlayTracking ){ $this->dieUsageMsg( array( 'unknownerror', 'Play tracking is not enabled' ) ); } $params = $this->extractRequestParams(); $this->validateParams( $params ); - // insert into the play_tracking table + // Salt the user id with $wgSecretKey to get a unique key per user + $clientId = md5( $wgUser->getName() . $wgSecretKey ); + + // Insert into the play_tracking table + $dbw = & wfGetDB( DB_WRITE ); + $dbw->insert( + 'play_tracking', + array( + 'track_filename' => $params[ 'filename' ], + 'track_client_id' => $clientId, + 'track_clientplayer' => $params[ 'client' ], + 'track_rate' => $wgPlayTrackingRate + ), + __METHOD__ + ); } /** Modified: trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.sql =================================================================== --- trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.sql 2010-02-04 03:22:36 UTC (rev 61969) +++ trunk/extensions/OggHandler/ApiPlayTracking/ApiPlayTracking.sql 2010-02-04 08:31:54 UTC (rev 61970) @@ -5,18 +5,18 @@ CREATE TABLE IF NOT EXISTS /*_*/play_tracking ( -- Unique id of play tracking event - track_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT + track_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, -- Filename of resource played track_filename varchar(255) binary NOT NULL, -- Anonymous hash of client - track_client_hash varbinary(16) NOT NULL, + track_client_id varbinary(32) NOT NULL, -- Browser and playback system dump. track_clientplayer tinyblob NOT NULL, - -- Rate we are tracking ( ie 10 means 1 in 10 tracked ) + -- Rate we are tracking ( a value of 10 means 1 in 10 tracked ) track_rate integer ) /*$wgDBTableOptions*/; Modified: trunk/extensions/OggHandler/OggHandler.php =================================================================== --- trunk/extensions/OggHandler/OggHandler.php 2010-02-04 03:22:36 UTC (rev 61969) +++ trunk/extensions/OggHandler/OggHandler.php 2010-02-04 08:31:54 UTC (rev 61970) @@ -24,7 +24,7 @@ ini_get( 'include_path' ) ); // Bump this when updating OggPlayer.js to help update caches -$wgOggScriptVersion = '10'; +$wgOggScriptVersion = '11'; $wgExtensionMessagesFiles['OggHandler'] = "$oggDir/OggHandler.i18n.php"; $wgExtensionMessagesFiles['OggHandlerMagic'] = "$oggDir/OggHandler.i18n.magic.php"; @@ -105,7 +105,7 @@ ); // If play requests should be tracked. -$wgEnablePlayTracking = false; +$wgEnablePlayTracking = true; // One out of how many requests should be tracked: $wgPlayTrackingRate = 10; @@ -132,7 +132,7 @@ // initial config time // Alternatively we could have top level php files that include the -// following pieces of code, but that would distribute configuration +// following pieces of code. // Enable play tracking if( $wgEnablePlayTracking ){ @@ -141,7 +141,7 @@ $wgHooks['LoadExtensionSchemaUpdates'][] = 'ApiPlayTracking::schema'; //Add the api entry point: - $wgAPIModules['playtracking'] = 'ApiPlayTracking'; + $wgAPIModules[ 'playtracking' ] = 'ApiPlayTracking'; } // Enable timed text Modified: trunk/extensions/OggHandler/OggPlayer.js =================================================================== --- trunk/extensions/OggHandler/OggPlayer.js 2010-02-04 03:22:36 UTC (rev 61969) +++ trunk/extensions/OggHandler/OggPlayer.js 2010-02-04 08:31:54 UTC (rev 61970) @@ -84,6 +84,32 @@ } } + // Do player tracking if enabled + if( this.playTracking ){ + + if( Math.floor( Math.random()* wgOggPlayer.playTrackingRate ) == 0 ){ + + var url = wgScript.replace( 'index.php', 'api.php'); + var filename = params.linkUrl.replace(/.*File\:/, ''); + var playerList = ''; + var coma = ''; + for(var i = 0 ; i < this.clientSupports.length ; i ++ ){ + playerList+= i; + coma = ','; + } + url+= '?action=playtracking&filename=' + escape( filename ); + url+= '&client=' + escape( player + '|' + playerList + '|' + navigator.userAgent ); + url+= '&format=json&callback=wgOggPlayer.playTrackingDone'; + + // Issue the request by including the script ( far fewer lines than robust ajax call ) + // (jQuery included by default would let us do clean jQuery.get calls ) + var s = document.createElement('script'); + s.setAttribute('src',url); + s.setAttribute('type','text/javascript'); + document.getElementsByTagName('head')[0].appendChild(s); + } + } + elt.innerHTML = ''; switch ( player ) { case 'videoElement': @@ -134,7 +160,9 @@ elt.appendChild( div ); } }, - + 'playTrackingDone' : function( data ){ + // play tracking done + }, 'debug': function( s ) { //alert(s); }, _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs