Fix user-contact rows not being updated in Contact\User::updateByContactUpdate

- Add new update function to regenerate potentially outdated user-contact rows
This commit is contained in:
Hypolite Petovan 2021-11-10 07:30:02 -05:00
parent fd0d17df31
commit f7714c09e6
2 changed files with 22 additions and 12 deletions

View file

@ -95,16 +95,17 @@ class User
$update_fields = self::preparedFields($fields);
if (!empty($update_fields)) {
$contacts = DBA::select('contact', ['uri-id', 'uid'], $condition);
while ($row = DBA::fetch($contacts)) {
if (empty($row['uri-id']) || empty($contact['uid'])) {
while ($contact = DBA::fetch($contacts)) {
if (empty($contact['uri-id']) || empty($contact['uid'])) {
continue;
}
$ret = DBA::update('user-contact', $update_fields, ['uri-id' => $row['uri-id'], 'uid' => $row['uid']]);
Logger::info('Updated user contact', ['uid' => $row['uid'], 'uri-id' => $row['uri-id'], 'ret' => $ret]);
$ret = DBA::update('user-contact', $update_fields, ['uri-id' => $contact['uri-id'], 'uid' => $contact['uid']]);
Logger::info('Updated user contact', ['uid' => $contact['uid'], 'uri-id' => $contact['uri-id'], 'ret' => $ret]);
}
DBA::close($contacts);
}
DBA::commit();
}

View file

@ -1000,14 +1000,6 @@ function update_1434()
return Update::SUCCESS;
}
function update_1435()
{
$contacts = DBA::select('contact', [], ["`uid` != ?", 0]);
while ($contact = DBA::fetch($contacts)) {
Contact\User::insertForContactArray($contact);
}
}
function update_1438()
{
DBA::update('photo', ['photo-type' => Photo::USER_AVATAR], ['profile' => true]);
@ -1061,3 +1053,20 @@ function update_1442()
return Update::SUCCESS;
}
/**
* A bug in Contact\User::updateByContactUpdate prevented any update to the user-contact table since the rows have been
* created in version 1435. This version fixes this bug but the user-contact rows are outdated, we need to regenerate
* them.
*/
function update_1444()
{
DBA::e('TRUNCATE TABLE `user-contact`');
$contacts = DBA::select('contact', [], ["`uid` != ?", 0]);
while ($contact = DBA::fetch($contacts)) {
Contact\User::insertForContactArray($contact);
}
return Update::SUCCESS;
}