Passed
Pull Request — master (#1284)
by René
06:34 queued 02:54
created

Version0107Date20201210204702::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 2
c 1
b 1
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 2
1
<?php
2
/**
3
 * @copyright Copyright (c) 2017 René Gieling <[email protected]>
4
 *
5
 * @author René Gieling <[email protected]>
6
 *
7
 * @license GNU AGPL version 3 or any later version
8
 *
9
 *  This program is free software: you can redistribute it and/or modify
10
 *  it under the terms of the GNU Affero General Public License as
11
 *  published by the Free Software Foundation, either version 3 of the
12
 *  License, or (at your option) any later version.
13
 *
14
 *  This program is distributed in the hope that it will be useful,
15
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 *  GNU Affero General Public License for more details.
18
 *
19
 *  You should have received a copy of the GNU Affero General Public License
20
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
 *
22
 */
23
24
namespace OCA\Polls\Migration;
25
26
use OCP\DB\ISchemaWrapper;
27
use OCP\IConfig;
28
use OCP\IDBConnection;
29
use OCP\Migration\SimpleMigrationStep;
30
use OCP\Migration\IOutput;
31
32
class Version0107Date20201210204702 extends SimpleMigrationStep {
33
34
	/** @var IDBConnection */
35
	protected $connection;
36
37
	/** @var IConfig */
38
	protected $config;
39
40
	public function __construct(IDBConnection $connection, IConfig $config) {
41
		$this->connection = $connection;
42
		$this->config = $config;
43
	}
44
45
	/**
46
	 * @return void
47
	 */
48
	public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
49
		$schema = $schemaClosure();
50
51
		if ($schema->hasTable('polls_options')) {
52
53
			// remove duplicates from oc_polls_options
54
			// preserve the first entry
55
			$query = $this->connection->getQueryBuilder();
56
			$query->select('id', 'poll_id', 'poll_option_text', 'timestamp')
57
				->from('polls_options');
58
			$foundEntries = $query->execute();
59
60
			$delete = $this->connection->getQueryBuilder();
61
			$delete->delete('polls_options')
62
				->where('id = :id');
63
64
			$entries2Keep = [];
0 ignored issues
show
Unused Code introduced by
The assignment to $entries2Keep is dead and can be removed.
Loading history...
65
66
			while ($row = $foundEntries->fetch()) {
67
				$currentRecord = [
68
					$row['poll_id'],
69
					$row['poll_option_text'],
70
					$row['timestamp']
71
				];
72
				if (in_array($currentRecord, $foundEntries2Keep)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $foundEntries2Keep does not seem to be defined for all execution paths leading up to this point.
Loading history...
73
					$delete->setParameter('id', $row['id']);
74
					$delete->execute();
75
				} else {
76
					$foundEntries2Keep[] = $currentRecord;
77
				}
78
			}
79
		}
80
	}
81
82
	public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
83
		/** @var ISchemaWrapper $schema */
84
		$schema = $schemaClosure();
85
86
		if ($schema->hasTable('polls_options')) {
87
			$table = $schema->getTable('polls_options');
88
			$table->changeColumn('poll_option_text', [
89
				'notnull' => true,
90
				'default' => ''
91
			]);
92
			$table->changeColumn('timestamp', [
93
				'notnull' => true,
94
				'default' => 0
95
			]);
96
97
			try {
98
				$table->addUniqueIndex(['poll_id', 'poll_option_text', 'timestamp'], 'UNIQ_options');
99
			} catch (\Exception $e) {
100
				//catch silently, index is already present
101
			}
102
		}
103
		return $schema;
104
	}
105
}
106