Browse Source
Merge pull request #17689 from owncloud/repair-ocs-ids
Merge pull request #17689 from owncloud/repair-ocs-ids
Add repair step for outdated OCS IDsremotes/origin/db-empty-migrate
4 changed files with 198 additions and 2 deletions
-
6lib/private/app.php
-
6lib/private/repair.php
-
108lib/repair/updateoutdatedocsids.php
-
80tests/lib/repair/updateoutdatedocsids.php
@ -0,0 +1,108 @@ |
|||
<?php |
|||
/** |
|||
* @author Lukas Reschke <l8kas@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* 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, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Repair; |
|||
|
|||
use OC\Hooks\BasicEmitter; |
|||
use OC\RepairStep; |
|||
use OCP\IConfig; |
|||
|
|||
/** |
|||
* Class UpdateOutdatedOcsIds is used to update invalid outdated OCS IDs, this is |
|||
* for example the case when an application has had another OCS ID in the past such |
|||
* as for contacts and calendar when apps.owncloud.com migrated to a unified identifier |
|||
* for multiple versions. |
|||
* |
|||
* @package OC\Repair |
|||
*/ |
|||
class UpdateOutdatedOcsIds extends BasicEmitter implements RepairStep { |
|||
/** @var IConfig */ |
|||
private $config; |
|||
|
|||
/** |
|||
* @param IConfig $config |
|||
*/ |
|||
public function __construct(IConfig $config) { |
|||
$this->config = $config; |
|||
} |
|||
|
|||
/** |
|||
* {@inheritdoc} |
|||
*/ |
|||
public function getName() { |
|||
return 'Repair outdated OCS IDs'; |
|||
} |
|||
|
|||
/** |
|||
* @param string $appName |
|||
* @param string $oldId |
|||
* @param string $newId |
|||
* @return bool True if updated, false otherwise |
|||
*/ |
|||
public function fixOcsId($appName, $oldId, $newId) { |
|||
$existingId = $this->config->getAppValue($appName, 'ocsid'); |
|||
|
|||
if($existingId === $oldId) { |
|||
$this->config->setAppValue($appName, 'ocsid', $newId); |
|||
return true; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* {@inheritdoc} |
|||
*/ |
|||
public function run() { |
|||
$appsToUpdate = [ |
|||
'contacts' => [ |
|||
'old' => '166044', |
|||
'new' => '168708', |
|||
], |
|||
'calendar' => [ |
|||
'old' => '166043', |
|||
'new' => '168707', |
|||
], |
|||
'bookmarks' => [ |
|||
'old' => '166042', |
|||
'new' => '168710', |
|||
], |
|||
'search_lucene' => [ |
|||
'old' => '166057', |
|||
'new' => '168709', |
|||
], |
|||
'documents' => [ |
|||
'old' => '166045', |
|||
'new' => '168711', |
|||
] |
|||
]; |
|||
|
|||
foreach($appsToUpdate as $appName => $ids) { |
|||
if ($this->fixOcsId($appName, $ids['old'], $ids['new'])) { |
|||
$this->emit( |
|||
'\OC\Repair', |
|||
'info', |
|||
[sprintf('Fixed invalid %s OCS id', $appName)] |
|||
); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,80 @@ |
|||
<?php |
|||
/** |
|||
* @author Lukas Reschke <l8kas@owncloud.com> |
|||
* |
|||
* @copyright Copyright (c) 2015, ownCloud, Inc. |
|||
* @license AGPL-3.0 |
|||
* |
|||
* This code is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License, version 3, |
|||
* as published by the Free Software Foundation. |
|||
* |
|||
* 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, version 3, |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|||
* |
|||
*/ |
|||
|
|||
namespace Test\Repair; |
|||
|
|||
use OCP\IConfig; |
|||
use Test\TestCase; |
|||
|
|||
/** |
|||
* Class UpdateOutdatedOcsIds |
|||
* |
|||
* @package Test\Repair |
|||
*/ |
|||
class UpdateOutdatedOcsIds extends TestCase { |
|||
/** @var IConfig */ |
|||
private $config; |
|||
/** @var \OC\Repair\UpdateOutdatedOcsIds */ |
|||
private $updateOutdatedOcsIds; |
|||
|
|||
public function setUp() { |
|||
parent::setUp(); |
|||
$this->config = $this->getMockBuilder('\\OCP\\IConfig')->getMock(); |
|||
$this->updateOutdatedOcsIds = new \OC\Repair\UpdateOutdatedOcsIds($this->config); |
|||
} |
|||
|
|||
public function testGetName() { |
|||
$this->assertSame('Repair outdated OCS IDs', $this->updateOutdatedOcsIds->getName()); |
|||
} |
|||
|
|||
public function testFixOcsIdNoOcsId() { |
|||
$this->config |
|||
->expects($this->once()) |
|||
->method('getAppValue') |
|||
->with('MyNotInstalledApp', 'ocsid') |
|||
->will($this->returnValue('')); |
|||
$this->assertFalse($this->updateOutdatedOcsIds->fixOcsId('MyNotInstalledApp', '1337', '0815')); |
|||
} |
|||
|
|||
public function testFixOcsIdUpdateOcsId() { |
|||
$this->config |
|||
->expects($this->at(0)) |
|||
->method('getAppValue') |
|||
->with('MyInstalledApp', 'ocsid') |
|||
->will($this->returnValue('1337')); |
|||
$this->config |
|||
->expects($this->at(1)) |
|||
->method('setAppValue') |
|||
->with('MyInstalledApp', 'ocsid', '0815'); |
|||
|
|||
$this->assertTrue($this->updateOutdatedOcsIds->fixOcsId('MyInstalledApp', '1337', '0815')); |
|||
} |
|||
|
|||
public function testFixOcsIdAlreadyFixed() { |
|||
$this->config |
|||
->expects($this->once()) |
|||
->method('getAppValue') |
|||
->with('MyAlreadyFixedAppId', 'ocsid') |
|||
->will($this->returnValue('0815')); |
|||
|
|||
$this->assertFalse($this->updateOutdatedOcsIds->fixOcsId('MyAlreadyFixedAppId', '1337', '0815')); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue