summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/repair.php2
-rw-r--r--lib/private/repair/sharepropagation.php52
-rw-r--r--tests/lib/repair/repairsharepropagation.php51
3 files changed, 105 insertions, 0 deletions
diff --git a/lib/private/repair.php b/lib/private/repair.php
index d40c6464e14..779f09d42ec 100644
--- a/lib/private/repair.php
+++ b/lib/private/repair.php
@@ -36,6 +36,7 @@ use OC\Repair\Collation;
use OC\Repair\DropOldJobs;
use OC\Repair\OldGroupMembershipShares;
use OC\Repair\RemoveGetETagEntries;
+use OC\Repair\SharePropagation;
use OC\Repair\SqliteAutoincrement;
use OC\Repair\DropOldTables;
use OC\Repair\FillETags;
@@ -114,6 +115,7 @@ class Repair extends BasicEmitter {
new RemoveGetETagEntries(\OC::$server->getDatabaseConnection()),
new UpdateOutdatedOcsIds(\OC::$server->getConfig()),
new RepairInvalidShares(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()),
+ new SharePropagation(\OC::$server->getConfig()),
];
}
diff --git a/lib/private/repair/sharepropagation.php b/lib/private/repair/sharepropagation.php
new file mode 100644
index 00000000000..26d7a9e128c
--- /dev/null
+++ b/lib/private/repair/sharepropagation.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * @author Georg Ehrke <georg@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, 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 OCP\IConfig;
+
+class SharePropagation extends BasicEmitter implements \OC\RepairStep {
+ /** @var IConfig */
+ private $config;
+
+ /**
+ * SharePropagation constructor.
+ *
+ * @param IConfig $config
+ */
+ public function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
+ public function getName() {
+ return 'Remove old share propagation app entries';
+ }
+
+ public function run() {
+ $keys = $this->config->getAppKeys('files_sharing');
+
+ foreach ($keys as $key) {
+ if (is_numeric($key)) {
+ $this->config->deleteAppValue('files_sharing', $key);
+ }
+ }
+ }
+}
diff --git a/tests/lib/repair/repairsharepropagation.php b/tests/lib/repair/repairsharepropagation.php
new file mode 100644
index 00000000000..6ec8b98ec56
--- /dev/null
+++ b/tests/lib/repair/repairsharepropagation.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) 2016 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Repair;
+
+use OC\Repair\SharePropagation;
+
+class RepairSharePropagation extends \Test\TestCase {
+ public function keyProvider() {
+ return [
+ [['1', '2'], ['1', '2']],
+ [['1', '2', 'foo'], ['1', '2']],
+ [['foo'], []],
+ ];
+ }
+
+ /**
+ * @dataProvider keyProvider
+ * @param array $startKeys
+ * @param array $expectedRemovedKeys
+ */
+ public function testRemovePropagationEntries(array $startKeys, array $expectedRemovedKeys) {
+ /** @var \PHPUnit_Framework_MockObject_MockObject|\OCP\IConfig $config */
+ $config = $this->getMock('\OCP\IConfig');
+ $config->expects($this->once())
+ ->method('getAppKeys')
+ ->with('files_sharing')
+ ->will($this->returnValue($startKeys));
+
+ $removedKeys = [];
+
+ $config->expects($this->any())
+ ->method('deleteAppValue')
+ ->will($this->returnCallback(function ($app, $key) use (&$removedKeys) {
+ $removedKeys[] = $key;
+ }));
+
+ $step = new SharePropagation($config);
+ $step->run();
+
+ sort($expectedRemovedKeys);
+ sort($removedKeys);
+
+ $this->assertEquals($expectedRemovedKeys, $removedKeys);
+ }
+}