26 if ( !$user->getId() ) {
30 $dbr = DBAccessObjectUtils::getDBFromRecency( $this->dbProvider, $recency );
31 $res = $dbr->newSelectQueryBuilder()
32 ->select( [
'up_property',
'up_value' ] )
33 ->from(
'user_properties' )
34 ->where( [
'up_user' => $user->getId() ] )
36 ->caller( __METHOD__ )->fetchResultSet();
39 foreach ( $res as $row ) {
40 $options[$row->up_property] = (string)$row->up_value;
43 $this->optionsFromDb[$user->getId()] = $options;
49 if ( !$keys || !$userNames ) {
54 $res = $this->dbProvider->getReplicaDatabase()
55 ->newSelectQueryBuilder()
56 ->select( [
'user_name',
'up_property',
'up_value' ] )
57 ->from(
'user_properties' )
58 ->join(
'user',
null,
'user_id=up_user' )
60 'up_property' => $keys,
61 'user_name' => $userNames
63 ->caller( __METHOD__ )
65 foreach ( $res as $row ) {
66 $options[$row->up_property][$row->user_name] = (string)$row->up_value;
74 if ( !$user->
getId() ) {
78 $oldOptions = $this->optionsFromDb[ $user->
getId() ]
79 ?? $this->fetch( $user, IDBAccessObject::READ_LATEST );
80 $newOptions = $oldOptions;
83 foreach ( $updates as $key => $value ) {
85 $value, $oldOptions[$key] ??
null )
88 if ( array_key_exists( $key, $oldOptions ) ) {
89 $keysToDelete[] = $key;
90 unset( $newOptions[$key] );
92 if ( $value !==
null ) {
93 $truncValue = mb_strcut( $value, 0,
96 'up_user' => $user->
getId(),
97 'up_property' => $key,
98 'up_value' => $truncValue,
100 $newOptions[$key] = $truncValue;
104 if ( !count( $keysToDelete ) && !count( $rowsToInsert ) ) {
110 $dbw = $this->dbProvider->getPrimaryDatabase();
111 if ( $keysToDelete ) {
112 $dbw->newDeleteQueryBuilder()
113 ->deleteFrom(
'user_properties' )
114 ->where( [
'up_user' => $user->
getId() ] )
115 ->andWhere( [
'up_property' => $keysToDelete ] )
116 ->caller( __METHOD__ )->execute();
118 if ( $rowsToInsert ) {
120 $dbw->newInsertQueryBuilder()
121 ->insertInto(
'user_properties' )
123 ->rows( $rowsToInsert )
124 ->caller( __METHOD__ )->execute();
128 $this->optionsFromDb[$user->
getId()] = $newOptions;
130 $this->hookRunner->onLocalUserOptionsStoreSave( $user, $oldOptions, $newOptions );