* Class for handling updates to the site_stats table
*/
class SiteStatsUpdate implements DeferrableUpdate {
+ protected $views = 0;
+ protected $edits = 0;
+ protected $pages = 0;
+ protected $goodPages = 0;
+ protected $users = 0;
+ protected $images = 0;
+
+ // @TODO: deprecate this
+ function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
+ $this->views = $views;
+ $this->edits = $edits;
+ $this->goodPages = $good;
+ $this->pages = $pages;
+ $this->users = $users;
+ }
+
+ /**
+ * @param $deltas Array
+ * @return SiteStatsUpdate
+ */
+ public static function factory( array $deltas ) {
+ $update = new self( 0, 0, 0 );
- var $mViews, $mEdits, $mGood, $mPages, $mUsers;
+ $fields = array( 'views', 'edits', 'pages', 'goodPages', 'users', 'images' );
+ foreach ( $fields as $field ) {
+ if ( isset( $deltas[$field] ) && $deltas[$field] ) {
+ $update->$field = $deltas[$field];
+ }
+ }
- function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
- $this->mViews = $views;
- $this->mEdits = $edits;
- $this->mGood = $good;
- $this->mPages = $pages;
- $this->mUsers = $users;
+ return $update;
}
/**
}
}
- function doUpdate() {
+ public function doUpdate() {
$dbw = wfGetDB( DB_MASTER );
$updates = '';
- $this->appendUpdate( $updates, 'ss_total_views', $this->mViews );
- $this->appendUpdate( $updates, 'ss_total_edits', $this->mEdits );
- $this->appendUpdate( $updates, 'ss_good_articles', $this->mGood );
- $this->appendUpdate( $updates, 'ss_total_pages', $this->mPages );
- $this->appendUpdate( $updates, 'ss_users', $this->mUsers );
+ $this->appendUpdate( $updates, 'ss_total_views', $this->views );
+ $this->appendUpdate( $updates, 'ss_total_edits', $this->edits );
+ $this->appendUpdate( $updates, 'ss_good_articles', $this->goodPages );
+ $this->appendUpdate( $updates, 'ss_total_pages', $this->pages );
+ $this->appendUpdate( $updates, 'ss_users', $this->users );
+ $this->appendUpdate( $updates, 'ss_images', $this->images );
if ( $updates ) {
$site_stats = $dbw->tableName( 'site_stats' );
__METHOD__
);
} else {
- # This is a new file
- # Update the image count
- $dbw->begin( __METHOD__ );
- $dbw->update(
- 'site_stats',
- array( 'ss_images = ss_images+1' ),
- '*',
- __METHOD__
- );
- $dbw->commit( __METHOD__ );
+ # This is a new file, so update the image count
+ DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
}
$descTitle = $this->getTitle();
# Get old version relative paths
$archiveNames = $batch->addOlds();
$status = $batch->execute();
+ $this->unlock(); // done
+
if ( $status->isOK() ) {
- // Update site_stats
- $dbw = $this->repo->getMasterDB();
- $site_stats = $dbw->tableName( 'site_stats' );
- $dbw->query( "UPDATE $site_stats SET ss_images=ss_images-1", __METHOD__ );
+ DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => -1 ) ) );
}
- $this->unlock(); // done
$this->purgeEverything();
foreach ( $archiveNames as $archiveName ) {
if ( !$exists ) {
wfDebug( __METHOD__ . " restored {$status->successCount} items, creating a new current\n" );
- // Update site_stats
- $site_stats = $dbw->tableName( 'site_stats' );
- $dbw->query( "UPDATE $site_stats SET ss_images=ss_images+1", __METHOD__ );
+ DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
$this->file->purgeEverything();
} else {