Passed
Pull Request — master (#1284)
by René
03:31
created

Version0107Date20201210160301::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
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 Version0107Date20201210160301 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_log')) {
52
53
			// remove duplicates from oc_polls_log
54
			// preserve the first entry
55
			$query = $this->connection->getQueryBuilder();
56
			$query->select('id', 'processed', 'poll_id', 'user_id', 'message_id', 'message')
57
				->from('polls_log');
58
			$foundEntries = $query->execute();
59
60
			$delete = $this->connection->getQueryBuilder();
61
			$delete->delete('polls_log')
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['processed'],
69
					$row['poll_id'],
70
					$row['user_id'],
71
					$row['message_id'],
72
					$row['message']
73
				];
74
				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...
75
					$delete->setParameter('id', $row['id']);
76
					$delete->execute();
77
				} else {
78
					$foundEntries2Keep[] = $currentRecord;
79
				}
80
			}
81
		}
82
	}
83
84
	public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
85
		/** @var ISchemaWrapper $schema */
86
		$schema = $schemaClosure();
87
88
		if ($schema->hasTable('polls_log')) {
89
			$table = $schema->getTable('polls_log');
90
			$table->changeColumn('poll_id', [
91
				'default' => 0
92
			]);
93
			$table->changeColumn('user_id', [
94
				'length' => 64,
95
				'notnull' => true,
96
				'default' => ''
97
			]);
98
			$table->changeColumn('message', [
99
				'length' => 128,
100
				'notnull' => true,
101
				'default' => ''
102
			]);
103
			$table->changeColumn('message_id', [
104
				'notnull' => true,
105
				'default' => ''
106
			]);
107
108
			try {
109
				$table->addUniqueIndex(['processed', 'poll_id', 'user_id', 'message_id', 'message'], 'UNIQ_unprocessed');
110
			} catch (\Exception $e) {
111
				//catch silently, index is already present
112
			}
113
		}
114
		return $schema;
115
	}
116
}
117