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