return;
}
- $defaultOptions = self::getDefaultOptions();
-
$userId = $this->getId();
$insert_rows = array();
- $changedOptions = array_diff_assoc( $saveOptions, $defaultOptions );
- foreach ( $changedOptions as $key => $value ) {
- if ( $value === false || is_null( $value ) ) {
- continue;
+ foreach ( $saveOptions as $key => $value ) {
+ // Don't bother storing default values
+ $defaultOption = self::getDefaultOption( $key );
+ if ( ( is_null( $defaultOption ) &&
+ !( $value === false || is_null( $value ) ) ) ||
+ $value != $defaultOption ) {
+ $insert_rows[] = array(
+ 'up_user' => $userId,
+ 'up_property' => $key,
+ 'up_value' => $value,
+ );
}
- $insert_rows[] = array(
- 'up_user' => $userId,
- 'up_property' => $key,
- 'up_value' => $value,
- );
}
$dbw = wfGetDB( DB_MASTER );
$this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
$this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
}
-
- /**
- * Helper, fetch user properties from the database.
- * @param int $userId
- */
- function dbUserProperties( $userId ) {
- $res = wfGetDB( DB_SLAVE )->select(
- 'user_properties',
- array( 'up_property', 'up_value' ),
- array( 'up_user' => $userId ),
- __METHOD__
- );
- $ret = array();
- foreach( $res as $row ) {
- $ret[$row->up_property] = $row->up_value;
- }
- return $ret;
- }
-
- public function testOnlySaveChangedOptions() {
- $user = User::newFromName( 'UnitTestUser2' );
- $user->addToDatabase();
-
- // Fresh user only has default, so nothing should be in the DB
- $dbProps = $this->dbUserProperties( $user->getId() );
- $this->assertEmpty( $dbProps,
- "A new user should not have any user property saved in the DB" );
-
- // Make sure we only save the altered option
- $user->setOption( 'changed_opt', 'alix_20281' );
- $user->setOption( 'switch', 1 );
- $user->setOption( 'anotherswitch', 1 );
- $user->saveSettings();
-
- $expected = array (
- 'changed_opt' => 'alix_20281',
- 'switch' => '1',
- 'anotherswitch' => '1',
- );
- $dbProps = $this->dbUserProperties( $user->getId() );
-
- $this->assertEquals( $expected, $dbProps,
- "non default options should be saved, and default ones should not" );
-
- }
}