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

Reply via email to