Signed-off-by: Joas Schilling <coding@schilljs.com>tags/v21.0.0beta1
@@ -1267,6 +1267,7 @@ return array( | |||
'OC\\Repair\\NC20\\EncryptionMigration' => $baseDir . '/lib/private/Repair/NC20/EncryptionMigration.php', | |||
'OC\\Repair\\NC20\\ShippedDashboardEnable' => $baseDir . '/lib/private/Repair/NC20/ShippedDashboardEnable.php', | |||
'OC\\Repair\\NC21\\AddCheckForUserCertificatesJob' => $baseDir . '/lib/private/Repair/NC21/AddCheckForUserCertificatesJob.php', | |||
'OC\\Repair\\NC21\\ValidatePhoneNumber' => $baseDir . '/lib/private/Repair/NC21/ValidatePhoneNumber.php', | |||
'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php', | |||
'OC\\Repair\\Owncloud\\DropAccountTermsTable' => $baseDir . '/lib/private/Repair/Owncloud/DropAccountTermsTable.php', | |||
'OC\\Repair\\Owncloud\\SaveAccountsTableData' => $baseDir . '/lib/private/Repair/Owncloud/SaveAccountsTableData.php', |
@@ -1296,6 +1296,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c | |||
'OC\\Repair\\NC20\\EncryptionMigration' => __DIR__ . '/../../..' . '/lib/private/Repair/NC20/EncryptionMigration.php', | |||
'OC\\Repair\\NC20\\ShippedDashboardEnable' => __DIR__ . '/../../..' . '/lib/private/Repair/NC20/ShippedDashboardEnable.php', | |||
'OC\\Repair\\NC21\\AddCheckForUserCertificatesJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC21/AddCheckForUserCertificatesJob.php', | |||
'OC\\Repair\\NC21\\ValidatePhoneNumber' => __DIR__ . '/../../..' . '/lib/private/Repair/NC21/ValidatePhoneNumber.php', | |||
'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php', | |||
'OC\\Repair\\Owncloud\\DropAccountTermsTable' => __DIR__ . '/../../..' . '/lib/private/Repair/Owncloud/DropAccountTermsTable.php', | |||
'OC\\Repair\\Owncloud\\SaveAccountsTableData' => __DIR__ . '/../../..' . '/lib/private/Repair/Owncloud/SaveAccountsTableData.php', |
@@ -53,6 +53,7 @@ use OC\Repair\NC20\EncryptionLegacyCipher; | |||
use OC\Repair\NC20\EncryptionMigration; | |||
use OC\Repair\NC20\ShippedDashboardEnable; | |||
use OC\Repair\NC21\AddCheckForUserCertificatesJob; | |||
use OC\Repair\NC21\ValidatePhoneNumber; | |||
use OC\Repair\OldGroupMembershipShares; | |||
use OC\Repair\Owncloud\DropAccountTermsTable; | |||
use OC\Repair\Owncloud\SaveAccountsTableData; | |||
@@ -177,7 +178,8 @@ class Repair implements IOutput { | |||
*/ | |||
public static function getExpensiveRepairSteps() { | |||
return [ | |||
new OldGroupMembershipShares(\OC::$server->getDatabaseConnection(), \OC::$server->getGroupManager()) | |||
new OldGroupMembershipShares(\OC::$server->getDatabaseConnection(), \OC::$server->getGroupManager()), | |||
\OC::$server->get(ValidatePhoneNumber::class), | |||
]; | |||
} | |||
@@ -0,0 +1,89 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com> | |||
* | |||
* @author Joas Schilling <coding@schilljs.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace OC\Repair\NC21; | |||
use OC\Accounts\AccountManager; | |||
use OCP\Accounts\IAccountManager; | |||
use OCP\IConfig; | |||
use OCP\IUser; | |||
use OCP\IUserManager; | |||
use OCP\Migration\IOutput; | |||
use OCP\Migration\IRepairStep; | |||
class ValidatePhoneNumber implements IRepairStep { | |||
/** @var IConfig */ | |||
protected $config; | |||
/** @var IUserManager */ | |||
protected $userManager; | |||
/** @var AccountManager */ | |||
private $accountManager; | |||
public function __construct(IUserManager $userManager, | |||
AccountManager $accountManager, | |||
IConfig $config) { | |||
$this->config = $config; | |||
$this->userManager = $userManager; | |||
$this->accountManager = $accountManager; | |||
} | |||
public function getName(): string { | |||
return 'Validate the phone number and store it in a known format for search'; | |||
} | |||
private function shouldRun(): bool { | |||
return true; | |||
} | |||
public function run(IOutput $output): void { | |||
if ($this->config->getSystemValueString('default_phone_region', '') === '') { | |||
throw new \Exception('Can not validate phone numbers without `default_phone_region` being set in the config file'); | |||
} | |||
$numUpdated = 0; | |||
$numRemoved = 0; | |||
$this->userManager->callForSeenUsers(function(IUser $user) use(&$numUpdated, &$numRemoved) { | |||
$account = $this->accountManager->getUser($user); | |||
if ($account[IAccountManager::PROPERTY_PHONE]['value'] !== '') { | |||
$updated = $this->accountManager->updateUser($user, $account); | |||
if ($account[IAccountManager::PROPERTY_PHONE]['value'] !== $updated[IAccountManager::PROPERTY_PHONE]['value']) { | |||
if ($updated[IAccountManager::PROPERTY_PHONE]['value'] === '') { | |||
$numRemoved++; | |||
} else { | |||
$numUpdated++; | |||
} | |||
} | |||
} | |||
}); | |||
if ($numRemoved > 0 || $numUpdated > 0) { | |||
$output->info('Updated ' . $numUpdated . ' entries and cleaned ' . $numRemoved . ' invalid phone numbers'); | |||
} | |||
} | |||
} |