Revision: 51753
Author:   catrope
Date:     2009-06-11 19:38:39 +0000 (Thu, 11 Jun 2009)

Log Message:
-----------
UsabilityInitiative: Committing work on PrefStats extension to track skin and 
toolbar usage. Code is WIP and should not be used

Added Paths:
-----------
    trunk/extensions/UsabilityInitiative/PrefStats/
    trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.hooks.php
    trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.i18n.php
    trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.php
    trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.sql
    trunk/extensions/UsabilityInitiative/PrefStats/getstats.sql

Added: trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.hooks.php          
                (rev 0)
+++ trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.hooks.php  
2009-06-11 19:38:39 UTC (rev 51753)
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Hooks for Usability Initiative PrefStats extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class PrefStatsHooks {
+       
+       /* Static Functions */
+       public static function schema() {
+               global $wgExtNewTables;
+               $wgExtNewTables[] = array( 'prefstats',
+                       dirname( __FILE__ ) . '/PrefStats.sql' );
+       }
+       
+       public static function save($user, &$options) {
+               global $wgPrefStatsEnable, $wgPrefStatsTrackPrefs;
+               if( !$wgPrefStatsEnable )
+                       return;
+               
+               $dbw = wfGetDb( DB_MASTER );
+               foreach( $wgPrefStatsTrackPrefs as $pref => $value ) {
+                       if( isset( $options[$pref] ) && $options[$pref] == 
$value )
+                               // FIXME: if the user disables and re-enables,
+                               // we're not tracking that
+                               $dbw->insert( 'prefstats', array(
+                                               'ps_user' => $user->getId(),
+                                               'ps_pref' => $pref,
+                                               'ps_value' => $value,
+                                               'ps_start' => $dbw->timestamp( 
wfTimestamp() ),
+                                               'ps_end' => null,
+                                               'ps_duration' => -1 //hack
+                                       ), __METHOD__, array( 'IGNORE' ) );
+                       else {
+                               $start = $dbw->selectField( 'prefstats',
+                                       'ps_start', array( 
+                                               'ps_user' => $user->getId(),
+                                               'ps_pref' => $pref
+                                       ), __METHOD__ );
+                               if( $start ) {
+                                       $duration = wfTimestamp( TS_UNIX ) -
+                                               wfTimestamp( TS_UNIX, $start );
+                                       $dbw->update( 'prefstats', array(
+                                               'ps_end' => $dbw->timestamp( 
wfTimestamp() ),
+                                               'ps_duration' => 
$dbw->timestamp( $duration )
+                                               ), __METHOD__ );
+                               }
+                       }
+               }
+       }
+       
+}


Property changes on: 
trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.hooks.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.i18n.php
===================================================================
--- trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.i18n.php           
                (rev 0)
+++ trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.i18n.php   
2009-06-11 19:38:39 UTC (rev 51753)
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Internationalisation for Usability Initiative EditWarning extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+/** English
+ * @author Roan Kattouw
+ */
+$messages['en'] = array(
+       'prefstats' => 'Preference statistics',
+       'prefstats-desc' => 'Track statistics about how many users have certain 
preferences enabled',
+);


Property changes on: 
trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.i18n.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.php
===================================================================
--- trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.php                
                (rev 0)
+++ trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.php        
2009-06-11 19:38:39 UTC (rev 51753)
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Usability Initiative PrefStats extension
+ *
+ * @file
+ * @ingroup Extensions
+ *
+ * This file contains the include file for the EditWarning portion of the
+ * UsabilityInitiative extension of MediaWiki.
+ *
+ * Usage: This file is included automatically by ../UsabilityInitiative.php
+ *
+ * @author Roan Kattouw <roan.katt...@gmail.com>
+ * @license GPL v2 or later
+ * @version 0.1.1
+ */
+
+/* Configuration */
+
+//.Set to false to disable tracking
+$wgPrefStatsEnable = true;
+
+// array('prefname' => 'value')
+// value can't be the default value
+// Tracking multiple values of the same preference is not possible
+$wgPrefStatsTrackPrefs = array();
+
+/* Setup */
+
+// Credits
+$wgExtensionCredits['other'][] = array(
+       'path' => __FILE__,
+       'name' => 'PrefStats',
+       'author' => 'Roan Kattouw',
+       'version' => '0.1.1',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:UsabilityInitiative',
+       'descriptionmsg' => 'prefstats-desc',
+);
+
+// Adds Autoload Classes
+$wgAutoloadClasses['PrefStatsHooks'] =
+       dirname( __FILE__ ) . '/PrefStats.hooks.php';
+
+// Adds Internationalized Messages
+$wgExtensionMessagesFiles['PrefStats'] =
+       dirname( __FILE__ ) . '/PrefStats.i18n.php';
+
+// Registers Hooks
+$wgHooks['LoadExtensionSchemaUpdates'][] = 'PrefStatsHooks::schema';
+$wgHooks['UserSaveOptions'][] = 'PrefStatsHooks::save';


Property changes on: 
trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.sql
===================================================================
--- trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.sql                
                (rev 0)
+++ trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.sql        
2009-06-11 19:38:39 UTC (rev 51753)
@@ -0,0 +1,15 @@
+--
+-- Schema for PrefStats
+--
+
+CREATE TABLE IF NOT EXISTS prefstats (
+       ps_user int NOT NULL,
+       ps_pref varbinary(32) NOT NULL,
+       ps_value blob NOT NULL,
+       ps_start binary(14) NOT NULL,
+       ps_end binary(14) NULL,
+       ps_duration unsigned int NOT NULL,
+);
+
+CREATE UNIQUE INDEX ps_user_pref ON prefstats (ps_user, ps_pref);
+CREATE INDEX ps_duration_start ON prefstats (ps_duration, ps_start);


Property changes on: 
trunk/extensions/UsabilityInitiative/PrefStats/PrefStats.sql
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/PrefStats/getstats.sql
===================================================================
--- trunk/extensions/UsabilityInitiative/PrefStats/getstats.sql                 
        (rev 0)
+++ trunk/extensions/UsabilityInitiative/PrefStats/getstats.sql 2009-06-11 
19:38:39 UTC (rev 51753)
@@ -0,0 +1,42 @@
+--
+-- Grabs current data from the user_properties table
+-- and processes it into the prefstats table
+--
+-- Meant to be run by a cron job on the toolserver,
+-- for if tracking changes directly isn't gonna fly
+
+-- VECTOR
+
+-- Update existing users
+UPDATE prefstats
+SET ps_end = IF(ISNULL(
+       (SELECT up_user
+       FROM enwiki_p.user_properties
+       WHERE up_user=ps_user AND up_property='skin' AND up_value='vector'
+       )), NOW(), NULL),
+ps_duration = TIMESTAMPDIFF(DAY, NOW(), ps_start)
+WHERE ps_pref='vector' AND ps_end IS NULL;
+
+-- Insert new users
+INSERT IGNORE INTO prefstats (ps_user, ps_pref, ps_start, ps_end, ps_duration)
+SELECT up_user, up_value, NOW(), NULL, 0
+FROM enwiki_p.user_properties
+WHERE up_property='skin' AND up_value='vector';
+
+-- TOOLBAR
+
+-- Update existing users
+UPDATE prefstats
+SET ps_end = IF(ISNULL(
+       (SELECT up_user
+       FROM enwiki_p.user_properties
+       WHERE up_user=ps_user AND up_property='usebetatoolbar' AND up_value='1'
+       )), NOW(), NULL),
+ps_duration = TIMESTAMPDIFF(DAY, NOW(), ps_start)
+WHERE ps_pref='vector' AND ps_end IS NULL;
+
+-- Insert new users
+INSERT IGNORE INTO prefstats (ps_user, ps_pref, ps_start, ps_end, ps_duration)
+SELECT up_user, up_value, NOW(), NULL, 0
+FROM enwiki_p.user_properties
+WHERE up_property='usebetatoolbar' AND up_value='1';


Property changes on: trunk/extensions/UsabilityInitiative/PrefStats/getstats.sql
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:eol-style
   + native



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to