Passed
Push — master ( 599964...a3ab0c )
by Robin
16:02 queued 14s
created
lib/private/DateTimeFormatter.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
 	 * @return string Formatted date and time string
238 238
 	 */
239 239
 	public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
240
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
240
+		return $this->format($timestamp, 'datetime', $formatDate.'|'.$formatTime, $timeZone, $l);
241 241
 	}
242 242
 
243 243
 	/**
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
 			$formatDate .= '^';
257 257
 		}
258 258
 
259
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
259
+		return $this->format($timestamp, 'datetime', $formatDate.'|'.$formatTime, $timeZone, $l);
260 260
 	}
261 261
 
262 262
 	/**
Please login to merge, or discard this patch.
Indentation   +268 added lines, -268 removed lines patch added patch discarded remove patch
@@ -26,294 +26,294 @@
 block discarded – undo
26 26
 namespace OC;
27 27
 
28 28
 class DateTimeFormatter implements \OCP\IDateTimeFormatter {
29
-	/** @var \DateTimeZone */
30
-	protected $defaultTimeZone;
29
+    /** @var \DateTimeZone */
30
+    protected $defaultTimeZone;
31 31
 
32
-	/** @var \OCP\IL10N */
33
-	protected $defaultL10N;
32
+    /** @var \OCP\IL10N */
33
+    protected $defaultL10N;
34 34
 
35
-	/**
36
-	 * Constructor
37
-	 *
38
-	 * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
39
-	 * @param \OCP\IL10N $defaultL10N Set the language for the format
40
-	 */
41
-	public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
42
-		$this->defaultTimeZone = $defaultTimeZone;
43
-		$this->defaultL10N = $defaultL10N;
44
-	}
35
+    /**
36
+     * Constructor
37
+     *
38
+     * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
39
+     * @param \OCP\IL10N $defaultL10N Set the language for the format
40
+     */
41
+    public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
42
+        $this->defaultTimeZone = $defaultTimeZone;
43
+        $this->defaultL10N = $defaultL10N;
44
+    }
45 45
 
46
-	/**
47
-	 * Get TimeZone to use
48
-	 *
49
-	 * @param \DateTimeZone $timeZone	The timezone to use
50
-	 * @return \DateTimeZone		The timezone to use, falling back to the current user's timezone
51
-	 */
52
-	protected function getTimeZone($timeZone = null) {
53
-		if ($timeZone === null) {
54
-			$timeZone = $this->defaultTimeZone;
55
-		}
46
+    /**
47
+     * Get TimeZone to use
48
+     *
49
+     * @param \DateTimeZone $timeZone	The timezone to use
50
+     * @return \DateTimeZone		The timezone to use, falling back to the current user's timezone
51
+     */
52
+    protected function getTimeZone($timeZone = null) {
53
+        if ($timeZone === null) {
54
+            $timeZone = $this->defaultTimeZone;
55
+        }
56 56
 
57
-		return $timeZone;
58
-	}
57
+        return $timeZone;
58
+    }
59 59
 
60
-	/**
61
-	 * Get \OCP\IL10N to use
62
-	 *
63
-	 * @param \OCP\IL10N $l	The locale to use
64
-	 * @return \OCP\IL10N		The locale to use, falling back to the current user's locale
65
-	 */
66
-	protected function getLocale($l = null) {
67
-		if ($l === null) {
68
-			$l = $this->defaultL10N;
69
-		}
60
+    /**
61
+     * Get \OCP\IL10N to use
62
+     *
63
+     * @param \OCP\IL10N $l	The locale to use
64
+     * @return \OCP\IL10N		The locale to use, falling back to the current user's locale
65
+     */
66
+    protected function getLocale($l = null) {
67
+        if ($l === null) {
68
+            $l = $this->defaultL10N;
69
+        }
70 70
 
71
-		return $l;
72
-	}
71
+        return $l;
72
+    }
73 73
 
74
-	/**
75
-	 * Generates a DateTime object with the given timestamp and TimeZone
76
-	 *
77
-	 * @param mixed $timestamp
78
-	 * @param \DateTimeZone $timeZone	The timezone to use
79
-	 * @return \DateTime
80
-	 */
81
-	protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
82
-		if ($timestamp === null) {
83
-			return new \DateTime('now', $timeZone);
84
-		} elseif (!$timestamp instanceof \DateTime) {
85
-			$dateTime = new \DateTime('now', $timeZone);
86
-			$dateTime->setTimestamp($timestamp);
87
-			return $dateTime;
88
-		}
89
-		if ($timeZone) {
90
-			$timestamp->setTimezone($timeZone);
91
-		}
92
-		return $timestamp;
93
-	}
74
+    /**
75
+     * Generates a DateTime object with the given timestamp and TimeZone
76
+     *
77
+     * @param mixed $timestamp
78
+     * @param \DateTimeZone $timeZone	The timezone to use
79
+     * @return \DateTime
80
+     */
81
+    protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
82
+        if ($timestamp === null) {
83
+            return new \DateTime('now', $timeZone);
84
+        } elseif (!$timestamp instanceof \DateTime) {
85
+            $dateTime = new \DateTime('now', $timeZone);
86
+            $dateTime->setTimestamp($timestamp);
87
+            return $dateTime;
88
+        }
89
+        if ($timeZone) {
90
+            $timestamp->setTimezone($timeZone);
91
+        }
92
+        return $timestamp;
93
+    }
94 94
 
95
-	/**
96
-	 * Formats the date of the given timestamp
97
-	 *
98
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
99
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
100
-	 * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
101
-	 * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
102
-	 * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
103
-	 * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
104
-	 * 				The exact format is dependent on the language
105
-	 * @param \DateTimeZone	$timeZone	The timezone to use
106
-	 * @param \OCP\IL10N	$l			The locale to use
107
-	 * @return string Formatted date string
108
-	 */
109
-	public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
110
-		return $this->format($timestamp, 'date', $format, $timeZone, $l);
111
-	}
95
+    /**
96
+     * Formats the date of the given timestamp
97
+     *
98
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
99
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
100
+     * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
101
+     * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
102
+     * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
103
+     * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
104
+     * 				The exact format is dependent on the language
105
+     * @param \DateTimeZone	$timeZone	The timezone to use
106
+     * @param \OCP\IL10N	$l			The locale to use
107
+     * @return string Formatted date string
108
+     */
109
+    public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
110
+        return $this->format($timestamp, 'date', $format, $timeZone, $l);
111
+    }
112 112
 
113
-	/**
114
-	 * Formats the date of the given timestamp
115
-	 *
116
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
117
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
118
-	 * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
119
-	 * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
120
-	 * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
121
-	 * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
122
-	 * 				The exact format is dependent on the language
123
-	 * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
124
-	 * @param \DateTimeZone	$timeZone	The timezone to use
125
-	 * @param \OCP\IL10N	$l			The locale to use
126
-	 * @return string Formatted relative date string
127
-	 */
128
-	public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
129
-		if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
130
-			$format .= '^';
131
-		}
113
+    /**
114
+     * Formats the date of the given timestamp
115
+     *
116
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
117
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
118
+     * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
119
+     * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
120
+     * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
121
+     * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
122
+     * 				The exact format is dependent on the language
123
+     * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
124
+     * @param \DateTimeZone	$timeZone	The timezone to use
125
+     * @param \OCP\IL10N	$l			The locale to use
126
+     * @return string Formatted relative date string
127
+     */
128
+    public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
129
+        if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
130
+            $format .= '^';
131
+        }
132 132
 
133
-		return $this->format($timestamp, 'date', $format, $timeZone, $l);
134
-	}
133
+        return $this->format($timestamp, 'date', $format, $timeZone, $l);
134
+    }
135 135
 
136
-	/**
137
-	 * Gives the relative date of the timestamp
138
-	 * Only works for past dates
139
-	 *
140
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
141
-	 * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
142
-	 * @return string	Dates returned are:
143
-	 * 				<  1 month	=> Today, Yesterday, n days ago
144
-	 * 				< 13 month	=> last month, n months ago
145
-	 * 				>= 13 month	=> last year, n years ago
146
-	 * @param \OCP\IL10N	$l			The locale to use
147
-	 * @return string Formatted date span
148
-	 */
149
-	public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
150
-		$l = $this->getLocale($l);
151
-		$timestamp = $this->getDateTime($timestamp);
152
-		$timestamp->setTime(0, 0, 0);
136
+    /**
137
+     * Gives the relative date of the timestamp
138
+     * Only works for past dates
139
+     *
140
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
141
+     * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
142
+     * @return string	Dates returned are:
143
+     * 				<  1 month	=> Today, Yesterday, n days ago
144
+     * 				< 13 month	=> last month, n months ago
145
+     * 				>= 13 month	=> last year, n years ago
146
+     * @param \OCP\IL10N	$l			The locale to use
147
+     * @return string Formatted date span
148
+     */
149
+    public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
150
+        $l = $this->getLocale($l);
151
+        $timestamp = $this->getDateTime($timestamp);
152
+        $timestamp->setTime(0, 0, 0);
153 153
 
154
-		if ($baseTimestamp === null) {
155
-			$baseTimestamp = time();
156
-		}
157
-		$baseTimestamp = $this->getDateTime($baseTimestamp);
158
-		$baseTimestamp->setTime(0, 0, 0);
159
-		$dateInterval = $timestamp->diff($baseTimestamp);
154
+        if ($baseTimestamp === null) {
155
+            $baseTimestamp = time();
156
+        }
157
+        $baseTimestamp = $this->getDateTime($baseTimestamp);
158
+        $baseTimestamp->setTime(0, 0, 0);
159
+        $dateInterval = $timestamp->diff($baseTimestamp);
160 160
 
161
-		if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
162
-			return $l->t('today');
163
-		} elseif ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
164
-			if ($timestamp > $baseTimestamp) {
165
-				return $l->t('tomorrow');
166
-			} else {
167
-				return $l->t('yesterday');
168
-			}
169
-		} elseif ($dateInterval->y == 0 && $dateInterval->m == 0) {
170
-			if ($timestamp > $baseTimestamp) {
171
-				return $l->n('in %n day', 'in %n days', $dateInterval->d);
172
-			} else {
173
-				return $l->n('%n day ago', '%n days ago', $dateInterval->d);
174
-			}
175
-		} elseif ($dateInterval->y == 0 && $dateInterval->m == 1) {
176
-			if ($timestamp > $baseTimestamp) {
177
-				return $l->t('next month');
178
-			} else {
179
-				return $l->t('last month');
180
-			}
181
-		} elseif ($dateInterval->y == 0) {
182
-			if ($timestamp > $baseTimestamp) {
183
-				return $l->n('in %n month', 'in %n months', $dateInterval->m);
184
-			} else {
185
-				return $l->n('%n month ago', '%n months ago', $dateInterval->m);
186
-			}
187
-		} elseif ($dateInterval->y == 1) {
188
-			if ($timestamp > $baseTimestamp) {
189
-				return $l->t('next year');
190
-			} else {
191
-				return $l->t('last year');
192
-			}
193
-		}
194
-		if ($timestamp > $baseTimestamp) {
195
-			return $l->n('in %n year', 'in %n years', $dateInterval->y);
196
-		} else {
197
-			return $l->n('%n year ago', '%n years ago', $dateInterval->y);
198
-		}
199
-	}
161
+        if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
162
+            return $l->t('today');
163
+        } elseif ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
164
+            if ($timestamp > $baseTimestamp) {
165
+                return $l->t('tomorrow');
166
+            } else {
167
+                return $l->t('yesterday');
168
+            }
169
+        } elseif ($dateInterval->y == 0 && $dateInterval->m == 0) {
170
+            if ($timestamp > $baseTimestamp) {
171
+                return $l->n('in %n day', 'in %n days', $dateInterval->d);
172
+            } else {
173
+                return $l->n('%n day ago', '%n days ago', $dateInterval->d);
174
+            }
175
+        } elseif ($dateInterval->y == 0 && $dateInterval->m == 1) {
176
+            if ($timestamp > $baseTimestamp) {
177
+                return $l->t('next month');
178
+            } else {
179
+                return $l->t('last month');
180
+            }
181
+        } elseif ($dateInterval->y == 0) {
182
+            if ($timestamp > $baseTimestamp) {
183
+                return $l->n('in %n month', 'in %n months', $dateInterval->m);
184
+            } else {
185
+                return $l->n('%n month ago', '%n months ago', $dateInterval->m);
186
+            }
187
+        } elseif ($dateInterval->y == 1) {
188
+            if ($timestamp > $baseTimestamp) {
189
+                return $l->t('next year');
190
+            } else {
191
+                return $l->t('last year');
192
+            }
193
+        }
194
+        if ($timestamp > $baseTimestamp) {
195
+            return $l->n('in %n year', 'in %n years', $dateInterval->y);
196
+        } else {
197
+            return $l->n('%n year ago', '%n years ago', $dateInterval->y);
198
+        }
199
+    }
200 200
 
201
-	/**
202
-	 * Formats the time of the given timestamp
203
-	 *
204
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
205
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
206
-	 * 				full:	e.g. 'h:mm:ss a zzzz'	=> '11:42:13 AM GMT+0:00'
207
-	 * 				long:	e.g. 'h:mm:ss a z'		=> '11:42:13 AM GMT'
208
-	 * 				medium:	e.g. 'h:mm:ss a'		=> '11:42:13 AM'
209
-	 * 				short:	e.g. 'h:mm a'			=> '11:42 AM'
210
-	 * 				The exact format is dependent on the language
211
-	 * @param \DateTimeZone	$timeZone	The timezone to use
212
-	 * @param \OCP\IL10N	$l			The locale to use
213
-	 * @return string Formatted time string
214
-	 */
215
-	public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
216
-		return $this->format($timestamp, 'time', $format, $timeZone, $l);
217
-	}
201
+    /**
202
+     * Formats the time of the given timestamp
203
+     *
204
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
205
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
206
+     * 				full:	e.g. 'h:mm:ss a zzzz'	=> '11:42:13 AM GMT+0:00'
207
+     * 				long:	e.g. 'h:mm:ss a z'		=> '11:42:13 AM GMT'
208
+     * 				medium:	e.g. 'h:mm:ss a'		=> '11:42:13 AM'
209
+     * 				short:	e.g. 'h:mm a'			=> '11:42 AM'
210
+     * 				The exact format is dependent on the language
211
+     * @param \DateTimeZone	$timeZone	The timezone to use
212
+     * @param \OCP\IL10N	$l			The locale to use
213
+     * @return string Formatted time string
214
+     */
215
+    public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
216
+        return $this->format($timestamp, 'time', $format, $timeZone, $l);
217
+    }
218 218
 
219
-	/**
220
-	 * Gives the relative past time of the timestamp
221
-	 *
222
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
223
-	 * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
224
-	 * @return string	Dates returned are:
225
-	 * 				< 60 sec	=> seconds ago
226
-	 * 				<  1 hour	=> n minutes ago
227
-	 * 				<  1 day	=> n hours ago
228
-	 * 				<  1 month	=> Yesterday, n days ago
229
-	 * 				< 13 month	=> last month, n months ago
230
-	 * 				>= 13 month	=> last year, n years ago
231
-	 * @param \OCP\IL10N	$l			The locale to use
232
-	 * @return string Formatted time span
233
-	 */
234
-	public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
235
-		$l = $this->getLocale($l);
236
-		$timestamp = $this->getDateTime($timestamp);
237
-		if ($baseTimestamp === null) {
238
-			$baseTimestamp = time();
239
-		}
240
-		$baseTimestamp = $this->getDateTime($baseTimestamp);
219
+    /**
220
+     * Gives the relative past time of the timestamp
221
+     *
222
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
223
+     * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
224
+     * @return string	Dates returned are:
225
+     * 				< 60 sec	=> seconds ago
226
+     * 				<  1 hour	=> n minutes ago
227
+     * 				<  1 day	=> n hours ago
228
+     * 				<  1 month	=> Yesterday, n days ago
229
+     * 				< 13 month	=> last month, n months ago
230
+     * 				>= 13 month	=> last year, n years ago
231
+     * @param \OCP\IL10N	$l			The locale to use
232
+     * @return string Formatted time span
233
+     */
234
+    public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
235
+        $l = $this->getLocale($l);
236
+        $timestamp = $this->getDateTime($timestamp);
237
+        if ($baseTimestamp === null) {
238
+            $baseTimestamp = time();
239
+        }
240
+        $baseTimestamp = $this->getDateTime($baseTimestamp);
241 241
 
242
-		$diff = $timestamp->diff($baseTimestamp);
243
-		if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
244
-			return $this->formatDateSpan($timestamp, $baseTimestamp, $l);
245
-		}
242
+        $diff = $timestamp->diff($baseTimestamp);
243
+        if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
244
+            return $this->formatDateSpan($timestamp, $baseTimestamp, $l);
245
+        }
246 246
 
247
-		if ($diff->h > 0) {
248
-			if ($timestamp > $baseTimestamp) {
249
-				return $l->n('in %n hour', 'in %n hours', $diff->h);
250
-			} else {
251
-				return $l->n('%n hour ago', '%n hours ago', $diff->h);
252
-			}
253
-		} elseif ($diff->i > 0) {
254
-			if ($timestamp > $baseTimestamp) {
255
-				return $l->n('in %n minute', 'in %n minutes', $diff->i);
256
-			} else {
257
-				return $l->n('%n minute ago', '%n minutes ago', $diff->i);
258
-			}
259
-		}
260
-		if ($timestamp > $baseTimestamp) {
261
-			return $l->t('in a few seconds');
262
-		} else {
263
-			return $l->t('seconds ago');
264
-		}
265
-	}
247
+        if ($diff->h > 0) {
248
+            if ($timestamp > $baseTimestamp) {
249
+                return $l->n('in %n hour', 'in %n hours', $diff->h);
250
+            } else {
251
+                return $l->n('%n hour ago', '%n hours ago', $diff->h);
252
+            }
253
+        } elseif ($diff->i > 0) {
254
+            if ($timestamp > $baseTimestamp) {
255
+                return $l->n('in %n minute', 'in %n minutes', $diff->i);
256
+            } else {
257
+                return $l->n('%n minute ago', '%n minutes ago', $diff->i);
258
+            }
259
+        }
260
+        if ($timestamp > $baseTimestamp) {
261
+            return $l->t('in a few seconds');
262
+        } else {
263
+            return $l->t('seconds ago');
264
+        }
265
+    }
266 266
 
267
-	/**
268
-	 * Formats the date and time of the given timestamp
269
-	 *
270
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
271
-	 * @param string		$formatDate		See formatDate() for description
272
-	 * @param string		$formatTime		See formatTime() for description
273
-	 * @param \DateTimeZone	$timeZone	The timezone to use
274
-	 * @param \OCP\IL10N	$l			The locale to use
275
-	 * @return string Formatted date and time string
276
-	 */
277
-	public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
278
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
279
-	}
267
+    /**
268
+     * Formats the date and time of the given timestamp
269
+     *
270
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
271
+     * @param string		$formatDate		See formatDate() for description
272
+     * @param string		$formatTime		See formatTime() for description
273
+     * @param \DateTimeZone	$timeZone	The timezone to use
274
+     * @param \OCP\IL10N	$l			The locale to use
275
+     * @return string Formatted date and time string
276
+     */
277
+    public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
278
+        return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
279
+    }
280 280
 
281
-	/**
282
-	 * Formats the date and time of the given timestamp
283
-	 *
284
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
285
-	 * @param string	$formatDate		See formatDate() for description
286
-	 * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
287
-	 * @param string	$formatTime		See formatTime() for description
288
-	 * @param \DateTimeZone	$timeZone	The timezone to use
289
-	 * @param \OCP\IL10N	$l			The locale to use
290
-	 * @return string Formatted relative date and time string
291
-	 */
292
-	public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
293
-		if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
294
-			$formatDate .= '^';
295
-		}
281
+    /**
282
+     * Formats the date and time of the given timestamp
283
+     *
284
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
285
+     * @param string	$formatDate		See formatDate() for description
286
+     * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
287
+     * @param string	$formatTime		See formatTime() for description
288
+     * @param \DateTimeZone	$timeZone	The timezone to use
289
+     * @param \OCP\IL10N	$l			The locale to use
290
+     * @return string Formatted relative date and time string
291
+     */
292
+    public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
293
+        if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
294
+            $formatDate .= '^';
295
+        }
296 296
 
297
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
298
-	}
297
+        return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
298
+    }
299 299
 
300
-	/**
301
-	 * Formats the date and time of the given timestamp
302
-	 *
303
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
304
-	 * @param string		$type		One of 'date', 'datetime' or 'time'
305
-	 * @param string		$format		Format string
306
-	 * @param \DateTimeZone	$timeZone	The timezone to use
307
-	 * @param \OCP\IL10N	$l			The locale to use
308
-	 * @return string Formatted date and time string
309
-	 */
310
-	protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
311
-		$l = $this->getLocale($l);
312
-		$timeZone = $this->getTimeZone($timeZone);
313
-		$timestamp = $this->getDateTime($timestamp, $timeZone);
300
+    /**
301
+     * Formats the date and time of the given timestamp
302
+     *
303
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
304
+     * @param string		$type		One of 'date', 'datetime' or 'time'
305
+     * @param string		$format		Format string
306
+     * @param \DateTimeZone	$timeZone	The timezone to use
307
+     * @param \OCP\IL10N	$l			The locale to use
308
+     * @return string Formatted date and time string
309
+     */
310
+    protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
311
+        $l = $this->getLocale($l);
312
+        $timeZone = $this->getTimeZone($timeZone);
313
+        $timestamp = $this->getDateTime($timestamp, $timeZone);
314 314
 
315
-		return $l->l($type, $timestamp, [
316
-			'width' => $format,
317
-		]);
318
-	}
315
+        return $l->l($type, $timestamp, [
316
+            'width' => $format,
317
+        ]);
318
+    }
319 319
 }
Please login to merge, or discard this patch.
lib/private/Preview/Provider.php 1 patch
Indentation   +33 added lines, -33 removed lines patch added patch discarded remove patch
@@ -28,41 +28,41 @@
 block discarded – undo
28 28
 use OCP\Preview\IProvider;
29 29
 
30 30
 abstract class Provider implements IProvider {
31
-	private $options;
31
+    private $options;
32 32
 
33
-	/**
34
-	 * Constructor
35
-	 *
36
-	 * @param array $options
37
-	 */
38
-	public function __construct(array $options = []) {
39
-		$this->options = $options;
40
-	}
33
+    /**
34
+     * Constructor
35
+     *
36
+     * @param array $options
37
+     */
38
+    public function __construct(array $options = []) {
39
+        $this->options = $options;
40
+    }
41 41
 
42
-	/**
43
-	 * @return string Regex with the mimetypes that are supported by this provider
44
-	 */
45
-	abstract public function getMimeType();
42
+    /**
43
+     * @return string Regex with the mimetypes that are supported by this provider
44
+     */
45
+    abstract public function getMimeType();
46 46
 
47
-	/**
48
-	 * Check if a preview can be generated for $path
49
-	 *
50
-	 * @param \OCP\Files\FileInfo $file
51
-	 * @return bool
52
-	 */
53
-	public function isAvailable(\OCP\Files\FileInfo $file) {
54
-		return true;
55
-	}
47
+    /**
48
+     * Check if a preview can be generated for $path
49
+     *
50
+     * @param \OCP\Files\FileInfo $file
51
+     * @return bool
52
+     */
53
+    public function isAvailable(\OCP\Files\FileInfo $file) {
54
+        return true;
55
+    }
56 56
 
57
-	/**
58
-	 * Generates thumbnail which fits in $maxX and $maxY and keeps the aspect ratio, for file at path $path
59
-	 *
60
-	 * @param string $path Path of file
61
-	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
62
-	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
63
-	 * @param bool $scalingup Disable/Enable upscaling of previews
64
-	 * @param \OC\Files\View $fileview fileview object of user folder
65
-	 * @return bool|\OCP\IImage false if no preview was generated
66
-	 */
67
-	abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
57
+    /**
58
+     * Generates thumbnail which fits in $maxX and $maxY and keeps the aspect ratio, for file at path $path
59
+     *
60
+     * @param string $path Path of file
61
+     * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
62
+     * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
63
+     * @param bool $scalingup Disable/Enable upscaling of previews
64
+     * @param \OC\Files\View $fileview fileview object of user folder
65
+     * @return bool|\OCP\IImage false if no preview was generated
66
+     */
67
+    abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
68 68
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/ModuleAlreadyExistsException.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@
 block discarded – undo
32 32
 	 * @param string $name
33 33
 	 */
34 34
 	public function __construct($id, $name) {
35
-		parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
35
+		parent::__construct('Id "'.$id.'" already used by encryption module "'.$name.'"');
36 36
 	}
37 37
 
38 38
 }
Please login to merge, or discard this patch.
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -25,11 +25,11 @@
 block discarded – undo
25 25
 use OCP\Encryption\Exceptions\GenericEncryptionException;
26 26
 
27 27
 class ModuleAlreadyExistsException extends GenericEncryptionException {
28
-	/**
29
-	 * @param string $id
30
-	 * @param string $name
31
-	 */
32
-	public function __construct($id, $name) {
33
-		parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
34
-	}
28
+    /**
29
+     * @param string $id
30
+     * @param string $name
31
+     */
32
+    public function __construct($id, $name) {
33
+        parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
34
+    }
35 35
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/EncryptionHeaderKeyExistsException.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -31,6 +31,6 @@
 block discarded – undo
31 31
 	 * @param string $key
32 32
 	 */
33 33
 	public function __construct($key) {
34
-		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
34
+		parent::__construct('header key "'.$key.'" already reserved by ownCloud');
35 35
 	}
36 36
 }
Please login to merge, or discard this patch.
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -25,10 +25,10 @@
 block discarded – undo
25 25
 use OCP\Encryption\Exceptions\GenericEncryptionException;
26 26
 
27 27
 class EncryptionHeaderKeyExistsException extends GenericEncryptionException {
28
-	/**
29
-	 * @param string $key
30
-	 */
31
-	public function __construct($key) {
32
-		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
33
-	}
28
+    /**
29
+     * @param string $key
30
+     */
31
+    public function __construct($key) {
32
+        parent::__construct('header key "'. $key . '" already reserved by ownCloud');
33
+    }
34 34
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Manager.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -274,7 +274,7 @@
 block discarded – undo
274 274
 		}
275 275
 
276 276
 		// check if key storage is mounted correctly
277
-		if ($this->rootView->file_exists($rootDir . '/' . Storage::KEY_STORAGE_MARKER)) {
277
+		if ($this->rootView->file_exists($rootDir.'/'.Storage::KEY_STORAGE_MARKER)) {
278 278
 			return true;
279 279
 		}
280 280
 
Please login to merge, or discard this patch.
Indentation   +218 added lines, -218 removed lines patch added patch discarded remove patch
@@ -37,222 +37,222 @@
 block discarded – undo
37 37
 use Psr\Log\LoggerInterface;
38 38
 
39 39
 class Manager implements IManager {
40
-	/** @var array */
41
-	protected $encryptionModules;
42
-
43
-	/** @var IConfig */
44
-	protected $config;
45
-
46
-	protected LoggerInterface $logger;
47
-
48
-	/** @var Il10n */
49
-	protected $l;
50
-
51
-	/** @var View  */
52
-	protected $rootView;
53
-
54
-	/** @var Util  */
55
-	protected $util;
56
-
57
-	/** @var ArrayCache  */
58
-	protected $arrayCache;
59
-
60
-	public function __construct(IConfig $config, LoggerInterface $logger, IL10N $l10n, View $rootView, Util $util, ArrayCache $arrayCache) {
61
-		$this->encryptionModules = [];
62
-		$this->config = $config;
63
-		$this->logger = $logger;
64
-		$this->l = $l10n;
65
-		$this->rootView = $rootView;
66
-		$this->util = $util;
67
-		$this->arrayCache = $arrayCache;
68
-	}
69
-
70
-	/**
71
-	 * Check if encryption is enabled
72
-	 *
73
-	 * @return bool true if enabled, false if not
74
-	 */
75
-	public function isEnabled() {
76
-		$installed = $this->config->getSystemValue('installed', false);
77
-		if (!$installed) {
78
-			return false;
79
-		}
80
-
81
-		$enabled = $this->config->getAppValue('core', 'encryption_enabled', 'no');
82
-		return $enabled === 'yes';
83
-	}
84
-
85
-	/**
86
-	 * check if new encryption is ready
87
-	 *
88
-	 * @return bool
89
-	 * @throws ServiceUnavailableException
90
-	 */
91
-	public function isReady() {
92
-		if ($this->isKeyStorageReady() === false) {
93
-			throw new ServiceUnavailableException('Key Storage is not ready');
94
-		}
95
-
96
-		return true;
97
-	}
98
-
99
-	/**
100
-	 * @param string $user
101
-	 */
102
-	public function isReadyForUser($user) {
103
-		if (!$this->isReady()) {
104
-			return false;
105
-		}
106
-
107
-		foreach ($this->getEncryptionModules() as $module) {
108
-			/** @var IEncryptionModule $m */
109
-			$m = call_user_func($module['callback']);
110
-			if (!$m->isReadyForUser($user)) {
111
-				return false;
112
-			}
113
-		}
114
-
115
-		return true;
116
-	}
117
-
118
-	/**
119
-	 * Registers an callback function which must return an encryption module instance
120
-	 *
121
-	 * @param string $id
122
-	 * @param string $displayName
123
-	 * @param callable $callback
124
-	 * @throws Exceptions\ModuleAlreadyExistsException
125
-	 */
126
-	public function registerEncryptionModule($id, $displayName, callable $callback) {
127
-		if (isset($this->encryptionModules[$id])) {
128
-			throw new Exceptions\ModuleAlreadyExistsException($id, $displayName);
129
-		}
130
-
131
-		$this->encryptionModules[$id] = [
132
-			'id' => $id,
133
-			'displayName' => $displayName,
134
-			'callback' => $callback,
135
-		];
136
-
137
-		$defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId();
138
-
139
-		if (empty($defaultEncryptionModuleId)) {
140
-			$this->setDefaultEncryptionModule($id);
141
-		}
142
-	}
143
-
144
-	/**
145
-	 * Unregisters an encryption module
146
-	 *
147
-	 * @param string $moduleId
148
-	 */
149
-	public function unregisterEncryptionModule($moduleId) {
150
-		unset($this->encryptionModules[$moduleId]);
151
-	}
152
-
153
-	/**
154
-	 * get a list of all encryption modules
155
-	 *
156
-	 * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]]
157
-	 */
158
-	public function getEncryptionModules() {
159
-		return $this->encryptionModules;
160
-	}
161
-
162
-	/**
163
-	 * get a specific encryption module
164
-	 *
165
-	 * @param string $moduleId
166
-	 * @return IEncryptionModule
167
-	 * @throws Exceptions\ModuleDoesNotExistsException
168
-	 */
169
-	public function getEncryptionModule($moduleId = '') {
170
-		if (empty($moduleId)) {
171
-			return $this->getDefaultEncryptionModule();
172
-		}
173
-		if (isset($this->encryptionModules[$moduleId])) {
174
-			return call_user_func($this->encryptionModules[$moduleId]['callback']);
175
-		}
176
-		$message = "Module with ID: $moduleId does not exist.";
177
-		$hint = $this->l->t('Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.', [$moduleId]);
178
-		throw new Exceptions\ModuleDoesNotExistsException($message, $hint);
179
-	}
180
-
181
-	/**
182
-	 * get default encryption module
183
-	 *
184
-	 * @return \OCP\Encryption\IEncryptionModule
185
-	 * @throws Exceptions\ModuleDoesNotExistsException
186
-	 */
187
-	protected function getDefaultEncryptionModule() {
188
-		$defaultModuleId = $this->getDefaultEncryptionModuleId();
189
-		if (empty($defaultModuleId)) {
190
-			$message = 'No default encryption module defined';
191
-			throw new Exceptions\ModuleDoesNotExistsException($message);
192
-		}
193
-		if (isset($this->encryptionModules[$defaultModuleId])) {
194
-			return call_user_func($this->encryptionModules[$defaultModuleId]['callback']);
195
-		}
196
-		$message = 'Default encryption module not loaded';
197
-		throw new Exceptions\ModuleDoesNotExistsException($message);
198
-	}
199
-
200
-	/**
201
-	 * set default encryption module Id
202
-	 *
203
-	 * @param string $moduleId
204
-	 * @return bool
205
-	 */
206
-	public function setDefaultEncryptionModule($moduleId) {
207
-		try {
208
-			$this->getEncryptionModule($moduleId);
209
-		} catch (\Exception $e) {
210
-			return false;
211
-		}
212
-
213
-		$this->config->setAppValue('core', 'default_encryption_module', $moduleId);
214
-		return true;
215
-	}
216
-
217
-	/**
218
-	 * get default encryption module Id
219
-	 *
220
-	 * @return string
221
-	 */
222
-	public function getDefaultEncryptionModuleId() {
223
-		return $this->config->getAppValue('core', 'default_encryption_module');
224
-	}
225
-
226
-	/**
227
-	 * Add storage wrapper
228
-	 */
229
-	public function setupStorage() {
230
-		// If encryption is disabled and there are no loaded modules it makes no sense to load the wrapper
231
-		if (!empty($this->encryptionModules) || $this->isEnabled()) {
232
-			$encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
233
-			Filesystem::addStorageWrapper('oc_encryption', [$encryptionWrapper, 'wrapStorage'], 2);
234
-		}
235
-	}
236
-
237
-
238
-	/**
239
-	 * check if key storage is ready
240
-	 *
241
-	 * @return bool
242
-	 */
243
-	protected function isKeyStorageReady() {
244
-		$rootDir = $this->util->getKeyStorageRoot();
245
-
246
-		// the default root is always valid
247
-		if ($rootDir === '') {
248
-			return true;
249
-		}
250
-
251
-		// check if key storage is mounted correctly
252
-		if ($this->rootView->file_exists($rootDir . '/' . Storage::KEY_STORAGE_MARKER)) {
253
-			return true;
254
-		}
255
-
256
-		return false;
257
-	}
40
+    /** @var array */
41
+    protected $encryptionModules;
42
+
43
+    /** @var IConfig */
44
+    protected $config;
45
+
46
+    protected LoggerInterface $logger;
47
+
48
+    /** @var Il10n */
49
+    protected $l;
50
+
51
+    /** @var View  */
52
+    protected $rootView;
53
+
54
+    /** @var Util  */
55
+    protected $util;
56
+
57
+    /** @var ArrayCache  */
58
+    protected $arrayCache;
59
+
60
+    public function __construct(IConfig $config, LoggerInterface $logger, IL10N $l10n, View $rootView, Util $util, ArrayCache $arrayCache) {
61
+        $this->encryptionModules = [];
62
+        $this->config = $config;
63
+        $this->logger = $logger;
64
+        $this->l = $l10n;
65
+        $this->rootView = $rootView;
66
+        $this->util = $util;
67
+        $this->arrayCache = $arrayCache;
68
+    }
69
+
70
+    /**
71
+     * Check if encryption is enabled
72
+     *
73
+     * @return bool true if enabled, false if not
74
+     */
75
+    public function isEnabled() {
76
+        $installed = $this->config->getSystemValue('installed', false);
77
+        if (!$installed) {
78
+            return false;
79
+        }
80
+
81
+        $enabled = $this->config->getAppValue('core', 'encryption_enabled', 'no');
82
+        return $enabled === 'yes';
83
+    }
84
+
85
+    /**
86
+     * check if new encryption is ready
87
+     *
88
+     * @return bool
89
+     * @throws ServiceUnavailableException
90
+     */
91
+    public function isReady() {
92
+        if ($this->isKeyStorageReady() === false) {
93
+            throw new ServiceUnavailableException('Key Storage is not ready');
94
+        }
95
+
96
+        return true;
97
+    }
98
+
99
+    /**
100
+     * @param string $user
101
+     */
102
+    public function isReadyForUser($user) {
103
+        if (!$this->isReady()) {
104
+            return false;
105
+        }
106
+
107
+        foreach ($this->getEncryptionModules() as $module) {
108
+            /** @var IEncryptionModule $m */
109
+            $m = call_user_func($module['callback']);
110
+            if (!$m->isReadyForUser($user)) {
111
+                return false;
112
+            }
113
+        }
114
+
115
+        return true;
116
+    }
117
+
118
+    /**
119
+     * Registers an callback function which must return an encryption module instance
120
+     *
121
+     * @param string $id
122
+     * @param string $displayName
123
+     * @param callable $callback
124
+     * @throws Exceptions\ModuleAlreadyExistsException
125
+     */
126
+    public function registerEncryptionModule($id, $displayName, callable $callback) {
127
+        if (isset($this->encryptionModules[$id])) {
128
+            throw new Exceptions\ModuleAlreadyExistsException($id, $displayName);
129
+        }
130
+
131
+        $this->encryptionModules[$id] = [
132
+            'id' => $id,
133
+            'displayName' => $displayName,
134
+            'callback' => $callback,
135
+        ];
136
+
137
+        $defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId();
138
+
139
+        if (empty($defaultEncryptionModuleId)) {
140
+            $this->setDefaultEncryptionModule($id);
141
+        }
142
+    }
143
+
144
+    /**
145
+     * Unregisters an encryption module
146
+     *
147
+     * @param string $moduleId
148
+     */
149
+    public function unregisterEncryptionModule($moduleId) {
150
+        unset($this->encryptionModules[$moduleId]);
151
+    }
152
+
153
+    /**
154
+     * get a list of all encryption modules
155
+     *
156
+     * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]]
157
+     */
158
+    public function getEncryptionModules() {
159
+        return $this->encryptionModules;
160
+    }
161
+
162
+    /**
163
+     * get a specific encryption module
164
+     *
165
+     * @param string $moduleId
166
+     * @return IEncryptionModule
167
+     * @throws Exceptions\ModuleDoesNotExistsException
168
+     */
169
+    public function getEncryptionModule($moduleId = '') {
170
+        if (empty($moduleId)) {
171
+            return $this->getDefaultEncryptionModule();
172
+        }
173
+        if (isset($this->encryptionModules[$moduleId])) {
174
+            return call_user_func($this->encryptionModules[$moduleId]['callback']);
175
+        }
176
+        $message = "Module with ID: $moduleId does not exist.";
177
+        $hint = $this->l->t('Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.', [$moduleId]);
178
+        throw new Exceptions\ModuleDoesNotExistsException($message, $hint);
179
+    }
180
+
181
+    /**
182
+     * get default encryption module
183
+     *
184
+     * @return \OCP\Encryption\IEncryptionModule
185
+     * @throws Exceptions\ModuleDoesNotExistsException
186
+     */
187
+    protected function getDefaultEncryptionModule() {
188
+        $defaultModuleId = $this->getDefaultEncryptionModuleId();
189
+        if (empty($defaultModuleId)) {
190
+            $message = 'No default encryption module defined';
191
+            throw new Exceptions\ModuleDoesNotExistsException($message);
192
+        }
193
+        if (isset($this->encryptionModules[$defaultModuleId])) {
194
+            return call_user_func($this->encryptionModules[$defaultModuleId]['callback']);
195
+        }
196
+        $message = 'Default encryption module not loaded';
197
+        throw new Exceptions\ModuleDoesNotExistsException($message);
198
+    }
199
+
200
+    /**
201
+     * set default encryption module Id
202
+     *
203
+     * @param string $moduleId
204
+     * @return bool
205
+     */
206
+    public function setDefaultEncryptionModule($moduleId) {
207
+        try {
208
+            $this->getEncryptionModule($moduleId);
209
+        } catch (\Exception $e) {
210
+            return false;
211
+        }
212
+
213
+        $this->config->setAppValue('core', 'default_encryption_module', $moduleId);
214
+        return true;
215
+    }
216
+
217
+    /**
218
+     * get default encryption module Id
219
+     *
220
+     * @return string
221
+     */
222
+    public function getDefaultEncryptionModuleId() {
223
+        return $this->config->getAppValue('core', 'default_encryption_module');
224
+    }
225
+
226
+    /**
227
+     * Add storage wrapper
228
+     */
229
+    public function setupStorage() {
230
+        // If encryption is disabled and there are no loaded modules it makes no sense to load the wrapper
231
+        if (!empty($this->encryptionModules) || $this->isEnabled()) {
232
+            $encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
233
+            Filesystem::addStorageWrapper('oc_encryption', [$encryptionWrapper, 'wrapStorage'], 2);
234
+        }
235
+    }
236
+
237
+
238
+    /**
239
+     * check if key storage is ready
240
+     *
241
+     * @return bool
242
+     */
243
+    protected function isKeyStorageReady() {
244
+        $rootDir = $this->util->getKeyStorageRoot();
245
+
246
+        // the default root is always valid
247
+        if ($rootDir === '') {
248
+            return true;
249
+        }
250
+
251
+        // check if key storage is mounted correctly
252
+        if ($this->rootView->file_exists($rootDir . '/' . Storage::KEY_STORAGE_MARKER)) {
253
+            return true;
254
+        }
255
+
256
+        return false;
257
+    }
258 258
 }
Please login to merge, or discard this patch.
lib/private/NaturalSort.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -117,8 +117,8 @@
 block discarded – undo
117 117
 			if ($aChunk !== $bChunk) {
118 118
 				// test first character (character comparison, not number comparison)
119 119
 				if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') {
120
-					$aNum = (int)$aChunk;
121
-					$bNum = (int)$bChunk;
120
+					$aNum = (int) $aChunk;
121
+					$bNum = (int) $bChunk;
122 122
 					return $aNum - $bNum;
123 123
 				}
124 124
 				return self::getCollator()->compare($aChunk, $bChunk);
Please login to merge, or discard this patch.
Indentation   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -29,112 +29,112 @@
 block discarded – undo
29 29
 use Psr\Log\LoggerInterface;
30 30
 
31 31
 class NaturalSort {
32
-	private static $instance;
33
-	private $collator;
34
-	private $cache = [];
32
+    private static $instance;
33
+    private $collator;
34
+    private $cache = [];
35 35
 
36
-	/**
37
-	 * Instantiate a new \OC\NaturalSort instance.
38
-	 * @param object $injectedCollator
39
-	 */
40
-	public function __construct($injectedCollator = null) {
41
-		// inject an instance of \Collator('en_US') to force using the php5-intl Collator
42
-		// or inject an instance of \OC\NaturalSort_DefaultCollator to force using Owncloud's default collator
43
-		if (isset($injectedCollator)) {
44
-			$this->collator = $injectedCollator;
45
-			\OC::$server->get(LoggerInterface::class)->debug('forced use of '.get_class($injectedCollator));
46
-		}
47
-	}
36
+    /**
37
+     * Instantiate a new \OC\NaturalSort instance.
38
+     * @param object $injectedCollator
39
+     */
40
+    public function __construct($injectedCollator = null) {
41
+        // inject an instance of \Collator('en_US') to force using the php5-intl Collator
42
+        // or inject an instance of \OC\NaturalSort_DefaultCollator to force using Owncloud's default collator
43
+        if (isset($injectedCollator)) {
44
+            $this->collator = $injectedCollator;
45
+            \OC::$server->get(LoggerInterface::class)->debug('forced use of '.get_class($injectedCollator));
46
+        }
47
+    }
48 48
 
49
-	/**
50
-	 * Split the given string in chunks of numbers and strings
51
-	 * @param string $t string
52
-	 * @return array of strings and number chunks
53
-	 */
54
-	private function naturalSortChunkify($t) {
55
-		// Adapted and ported to PHP from
56
-		// http://my.opera.com/GreyWyvern/blog/show.dml/1671288
57
-		if (isset($this->cache[$t])) {
58
-			return $this->cache[$t];
59
-		}
60
-		$tz = [];
61
-		$x = 0;
62
-		$y = -1;
63
-		$n = null;
49
+    /**
50
+     * Split the given string in chunks of numbers and strings
51
+     * @param string $t string
52
+     * @return array of strings and number chunks
53
+     */
54
+    private function naturalSortChunkify($t) {
55
+        // Adapted and ported to PHP from
56
+        // http://my.opera.com/GreyWyvern/blog/show.dml/1671288
57
+        if (isset($this->cache[$t])) {
58
+            return $this->cache[$t];
59
+        }
60
+        $tz = [];
61
+        $x = 0;
62
+        $y = -1;
63
+        $n = null;
64 64
 
65
-		while (isset($t[$x])) {
66
-			$c = $t[$x];
67
-			// only include the dot in strings
68
-			$m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9'));
69
-			if ($m !== $n) {
70
-				// next chunk
71
-				$y++;
72
-				$tz[$y] = '';
73
-				$n = $m;
74
-			}
75
-			$tz[$y] .= $c;
76
-			$x++;
77
-		}
78
-		$this->cache[$t] = $tz;
79
-		return $tz;
80
-	}
65
+        while (isset($t[$x])) {
66
+            $c = $t[$x];
67
+            // only include the dot in strings
68
+            $m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9'));
69
+            if ($m !== $n) {
70
+                // next chunk
71
+                $y++;
72
+                $tz[$y] = '';
73
+                $n = $m;
74
+            }
75
+            $tz[$y] .= $c;
76
+            $x++;
77
+        }
78
+        $this->cache[$t] = $tz;
79
+        return $tz;
80
+    }
81 81
 
82
-	/**
83
-	 * Returns the string collator
84
-	 * @return \Collator string collator
85
-	 */
86
-	private function getCollator() {
87
-		if (!isset($this->collator)) {
88
-			// looks like the default is en_US_POSIX which yields wrong sorting with
89
-			// German umlauts, so using en_US instead
90
-			if (class_exists('Collator')) {
91
-				$this->collator = new \Collator('en_US');
92
-			} else {
93
-				$this->collator = new \OC\NaturalSort_DefaultCollator();
94
-			}
95
-		}
96
-		return $this->collator;
97
-	}
82
+    /**
83
+     * Returns the string collator
84
+     * @return \Collator string collator
85
+     */
86
+    private function getCollator() {
87
+        if (!isset($this->collator)) {
88
+            // looks like the default is en_US_POSIX which yields wrong sorting with
89
+            // German umlauts, so using en_US instead
90
+            if (class_exists('Collator')) {
91
+                $this->collator = new \Collator('en_US');
92
+            } else {
93
+                $this->collator = new \OC\NaturalSort_DefaultCollator();
94
+            }
95
+        }
96
+        return $this->collator;
97
+    }
98 98
 
99
-	/**
100
-	 * Compare two strings to provide a natural sort
101
-	 * @param string $a first string to compare
102
-	 * @param string $b second string to compare
103
-	 * @return int -1 if $b comes before $a, 1 if $a comes before $b
104
-	 * or 0 if the strings are identical
105
-	 */
106
-	public function compare($a, $b) {
107
-		// Needed because PHP doesn't sort correctly when numbers are enclosed in
108
-		// parenthesis, even with NUMERIC_COLLATION enabled.
109
-		// For example it gave ["test (2).txt", "test.txt"]
110
-		// instead of ["test.txt", "test (2).txt"]
111
-		$aa = self::naturalSortChunkify($a);
112
-		$bb = self::naturalSortChunkify($b);
99
+    /**
100
+     * Compare two strings to provide a natural sort
101
+     * @param string $a first string to compare
102
+     * @param string $b second string to compare
103
+     * @return int -1 if $b comes before $a, 1 if $a comes before $b
104
+     * or 0 if the strings are identical
105
+     */
106
+    public function compare($a, $b) {
107
+        // Needed because PHP doesn't sort correctly when numbers are enclosed in
108
+        // parenthesis, even with NUMERIC_COLLATION enabled.
109
+        // For example it gave ["test (2).txt", "test.txt"]
110
+        // instead of ["test.txt", "test (2).txt"]
111
+        $aa = self::naturalSortChunkify($a);
112
+        $bb = self::naturalSortChunkify($b);
113 113
 
114
-		for ($x = 0; isset($aa[$x]) && isset($bb[$x]); $x++) {
115
-			$aChunk = $aa[$x];
116
-			$bChunk = $bb[$x];
117
-			if ($aChunk !== $bChunk) {
118
-				// test first character (character comparison, not number comparison)
119
-				if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') {
120
-					$aNum = (int)$aChunk;
121
-					$bNum = (int)$bChunk;
122
-					return $aNum - $bNum;
123
-				}
124
-				return self::getCollator()->compare($aChunk, $bChunk);
125
-			}
126
-		}
127
-		return count($aa) - count($bb);
128
-	}
114
+        for ($x = 0; isset($aa[$x]) && isset($bb[$x]); $x++) {
115
+            $aChunk = $aa[$x];
116
+            $bChunk = $bb[$x];
117
+            if ($aChunk !== $bChunk) {
118
+                // test first character (character comparison, not number comparison)
119
+                if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') {
120
+                    $aNum = (int)$aChunk;
121
+                    $bNum = (int)$bChunk;
122
+                    return $aNum - $bNum;
123
+                }
124
+                return self::getCollator()->compare($aChunk, $bChunk);
125
+            }
126
+        }
127
+        return count($aa) - count($bb);
128
+    }
129 129
 
130
-	/**
131
-	 * Returns a singleton
132
-	 * @return \OC\NaturalSort instance
133
-	 */
134
-	public static function getInstance() {
135
-		if (!isset(self::$instance)) {
136
-			self::$instance = new \OC\NaturalSort();
137
-		}
138
-		return self::$instance;
139
-	}
130
+    /**
131
+     * Returns a singleton
132
+     * @return \OC\NaturalSort instance
133
+     */
134
+    public static function getInstance() {
135
+        if (!isset(self::$instance)) {
136
+            self::$instance = new \OC\NaturalSort();
137
+        }
138
+        return self::$instance;
139
+    }
140 140
 }
Please login to merge, or discard this patch.
ocs-provider/index.php 2 patches
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -26,8 +26,8 @@
 block discarded – undo
26 26
 $server = \OC::$server;
27 27
 
28 28
 $controller = new \OC\OCS\Provider(
29
-	'ocs_provider',
30
-	$server->getRequest(),
31
-	$server->getAppManager()
29
+    'ocs_provider',
30
+    $server->getRequest(),
31
+    $server->getAppManager()
32 32
 );
33 33
 echo $controller->buildProviderList()->render();
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@
 block discarded – undo
19 19
  *
20 20
  */
21 21
 
22
-require_once __DIR__ . '/../lib/base.php';
22
+require_once __DIR__.'/../lib/base.php';
23 23
 
24 24
 header('Content-Type: application/json');
25 25
 
Please login to merge, or discard this patch.
core/Command/User/ResetPassword.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -117,12 +117,12 @@
 block discarded – undo
117 117
 		try {
118 118
 			$success = $user->setPassword($password);
119 119
 		} catch (\Exception $e) {
120
-			$output->writeln('<error>' . $e->getMessage() . '</error>');
120
+			$output->writeln('<error>'.$e->getMessage().'</error>');
121 121
 			return 1;
122 122
 		}
123 123
 
124 124
 		if ($success) {
125
-			$output->writeln("<info>Successfully reset password for " . $username . "</info>");
125
+			$output->writeln("<info>Successfully reset password for ".$username."</info>");
126 126
 		} else {
127 127
 			$output->writeln("<error>Error while resetting password!</error>");
128 128
 			return 1;
Please login to merge, or discard this patch.
Indentation   +107 added lines, -107 removed lines patch added patch discarded remove patch
@@ -41,111 +41,111 @@
 block discarded – undo
41 41
 use Symfony\Component\Console\Question\Question;
42 42
 
43 43
 class ResetPassword extends Base {
44
-	protected IUserManager $userManager;
45
-	private IAppManager $appManager;
46
-
47
-	public function __construct(IUserManager $userManager, IAppManager $appManager) {
48
-		parent::__construct();
49
-		$this->userManager = $userManager;
50
-		$this->appManager = $appManager;
51
-	}
52
-
53
-	protected function configure() {
54
-		$this
55
-			->setName('user:resetpassword')
56
-			->setDescription('Resets the password of the named user')
57
-			->addArgument(
58
-				'user',
59
-				InputArgument::REQUIRED,
60
-				'Username to reset password'
61
-			)
62
-			->addOption(
63
-				'password-from-env',
64
-				null,
65
-				InputOption::VALUE_NONE,
66
-				'read password from environment variable OC_PASS'
67
-			)
68
-		;
69
-	}
70
-
71
-	protected function execute(InputInterface $input, OutputInterface $output): int {
72
-		$username = $input->getArgument('user');
73
-
74
-		$user = $this->userManager->get($username);
75
-		if (is_null($user)) {
76
-			$output->writeln('<error>User does not exist</error>');
77
-			return 1;
78
-		}
79
-
80
-		if ($input->getOption('password-from-env')) {
81
-			$password = getenv('OC_PASS');
82
-			if (!$password) {
83
-				$output->writeln('<error>--password-from-env given, but OC_PASS is empty!</error>');
84
-				return 1;
85
-			}
86
-		} elseif ($input->isInteractive()) {
87
-			/** @var QuestionHelper $helper */
88
-			$helper = $this->getHelper('question');
89
-
90
-			if ($this->appManager->isEnabledForUser('encryption', $user)) {
91
-				$output->writeln(
92
-					'<error>Warning: Resetting the password when using encryption will result in data loss!</error>'
93
-				);
94
-
95
-				$question = new ConfirmationQuestion('Do you want to continue?');
96
-				if (!$helper->ask($input, $output, $question)) {
97
-					return 1;
98
-				}
99
-			}
100
-
101
-			$question = new Question('Enter a new password: ');
102
-			$question->setHidden(true);
103
-			$password = $helper->ask($input, $output, $question);
104
-
105
-			if ($password === null) {
106
-				$output->writeln("<error>Password cannot be empty!</error>");
107
-				return 1;
108
-			}
109
-
110
-			$question = new Question('Confirm the new password: ');
111
-			$question->setHidden(true);
112
-			$confirm = $helper->ask($input, $output, $question);
113
-
114
-			if ($password !== $confirm) {
115
-				$output->writeln("<error>Passwords did not match!</error>");
116
-				return 1;
117
-			}
118
-		} else {
119
-			$output->writeln("<error>Interactive input or --password-from-env is needed for entering a new password!</error>");
120
-			return 1;
121
-		}
122
-
123
-
124
-		try {
125
-			$success = $user->setPassword($password);
126
-		} catch (\Exception $e) {
127
-			$output->writeln('<error>' . $e->getMessage() . '</error>');
128
-			return 1;
129
-		}
130
-
131
-		if ($success) {
132
-			$output->writeln("<info>Successfully reset password for " . $username . "</info>");
133
-		} else {
134
-			$output->writeln("<error>Error while resetting password!</error>");
135
-			return 1;
136
-		}
137
-		return 0;
138
-	}
139
-
140
-	/**
141
-	 * @param string $argumentName
142
-	 * @param CompletionContext $context
143
-	 * @return string[]
144
-	 */
145
-	public function completeArgumentValues($argumentName, CompletionContext $context) {
146
-		if ($argumentName === 'user') {
147
-			return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
148
-		}
149
-		return [];
150
-	}
44
+    protected IUserManager $userManager;
45
+    private IAppManager $appManager;
46
+
47
+    public function __construct(IUserManager $userManager, IAppManager $appManager) {
48
+        parent::__construct();
49
+        $this->userManager = $userManager;
50
+        $this->appManager = $appManager;
51
+    }
52
+
53
+    protected function configure() {
54
+        $this
55
+            ->setName('user:resetpassword')
56
+            ->setDescription('Resets the password of the named user')
57
+            ->addArgument(
58
+                'user',
59
+                InputArgument::REQUIRED,
60
+                'Username to reset password'
61
+            )
62
+            ->addOption(
63
+                'password-from-env',
64
+                null,
65
+                InputOption::VALUE_NONE,
66
+                'read password from environment variable OC_PASS'
67
+            )
68
+        ;
69
+    }
70
+
71
+    protected function execute(InputInterface $input, OutputInterface $output): int {
72
+        $username = $input->getArgument('user');
73
+
74
+        $user = $this->userManager->get($username);
75
+        if (is_null($user)) {
76
+            $output->writeln('<error>User does not exist</error>');
77
+            return 1;
78
+        }
79
+
80
+        if ($input->getOption('password-from-env')) {
81
+            $password = getenv('OC_PASS');
82
+            if (!$password) {
83
+                $output->writeln('<error>--password-from-env given, but OC_PASS is empty!</error>');
84
+                return 1;
85
+            }
86
+        } elseif ($input->isInteractive()) {
87
+            /** @var QuestionHelper $helper */
88
+            $helper = $this->getHelper('question');
89
+
90
+            if ($this->appManager->isEnabledForUser('encryption', $user)) {
91
+                $output->writeln(
92
+                    '<error>Warning: Resetting the password when using encryption will result in data loss!</error>'
93
+                );
94
+
95
+                $question = new ConfirmationQuestion('Do you want to continue?');
96
+                if (!$helper->ask($input, $output, $question)) {
97
+                    return 1;
98
+                }
99
+            }
100
+
101
+            $question = new Question('Enter a new password: ');
102
+            $question->setHidden(true);
103
+            $password = $helper->ask($input, $output, $question);
104
+
105
+            if ($password === null) {
106
+                $output->writeln("<error>Password cannot be empty!</error>");
107
+                return 1;
108
+            }
109
+
110
+            $question = new Question('Confirm the new password: ');
111
+            $question->setHidden(true);
112
+            $confirm = $helper->ask($input, $output, $question);
113
+
114
+            if ($password !== $confirm) {
115
+                $output->writeln("<error>Passwords did not match!</error>");
116
+                return 1;
117
+            }
118
+        } else {
119
+            $output->writeln("<error>Interactive input or --password-from-env is needed for entering a new password!</error>");
120
+            return 1;
121
+        }
122
+
123
+
124
+        try {
125
+            $success = $user->setPassword($password);
126
+        } catch (\Exception $e) {
127
+            $output->writeln('<error>' . $e->getMessage() . '</error>');
128
+            return 1;
129
+        }
130
+
131
+        if ($success) {
132
+            $output->writeln("<info>Successfully reset password for " . $username . "</info>");
133
+        } else {
134
+            $output->writeln("<error>Error while resetting password!</error>");
135
+            return 1;
136
+        }
137
+        return 0;
138
+    }
139
+
140
+    /**
141
+     * @param string $argumentName
142
+     * @param CompletionContext $context
143
+     * @return string[]
144
+     */
145
+    public function completeArgumentValues($argumentName, CompletionContext $context) {
146
+        if ($argumentName === 'user') {
147
+            return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
148
+        }
149
+        return [];
150
+    }
151 151
 }
Please login to merge, or discard this patch.
core/Command/Config/System/SetConfig.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -97,7 +97,7 @@  discard block
 block discarded – undo
97 97
 			$this->systemConfig->setValue($configName, $configValue['value']);
98 98
 		}
99 99
 
100
-		$output->writeln('<info>System config value ' . implode(' => ', $configNames) . ' set to ' . $configValue['readable-value'] . '</info>');
100
+		$output->writeln('<info>System config value '.implode(' => ', $configNames).' set to '.$configValue['readable-value'].'</info>');
101 101
 		return 0;
102 102
 	}
103 103
 
@@ -116,7 +116,7 @@  discard block
 block discarded – undo
116 116
 				}
117 117
 				return [
118 118
 					'value' => (int) $value,
119
-					'readable-value' => 'integer ' . (int) $value,
119
+					'readable-value' => 'integer '.(int) $value,
120 120
 				];
121 121
 
122 122
 			case 'double':
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 				}
127 127
 				return [
128 128
 					'value' => (double) $value,
129
-					'readable-value' => 'double ' . (double) $value,
129
+					'readable-value' => 'double '.(double) $value,
130 130
 				];
131 131
 
132 132
 			case 'boolean':
@@ -136,13 +136,13 @@  discard block
 block discarded – undo
136 136
 					case 'true':
137 137
 						return [
138 138
 							'value' => true,
139
-							'readable-value' => 'boolean ' . $value,
139
+							'readable-value' => 'boolean '.$value,
140 140
 						];
141 141
 
142 142
 					case 'false':
143 143
 						return [
144 144
 							'value' => false,
145
-							'readable-value' => 'boolean ' . $value,
145
+							'readable-value' => 'boolean '.$value,
146 146
 						];
147 147
 
148 148
 					default:
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 				$value = (string) $value;
160 160
 				return [
161 161
 					'value' => $value,
162
-					'readable-value' => ($value === '') ? 'empty string' : 'string ' . $value,
162
+					'readable-value' => ($value === '') ? 'empty string' : 'string '.$value,
163 163
 				];
164 164
 
165 165
 			default:
Please login to merge, or discard this patch.
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -32,174 +32,174 @@
 block discarded – undo
32 32
 use Symfony\Component\Console\Output\OutputInterface;
33 33
 
34 34
 class SetConfig extends Base {
35
-	public function __construct(SystemConfig $systemConfig) {
36
-		parent::__construct($systemConfig);
37
-	}
38
-
39
-	protected function configure() {
40
-		parent::configure();
41
-
42
-		$this
43
-			->setName('config:system:set')
44
-			->setDescription('Set a system config value')
45
-			->addArgument(
46
-				'name',
47
-				InputArgument::REQUIRED | InputArgument::IS_ARRAY,
48
-				'Name of the config parameter, specify multiple for array parameter'
49
-			)
50
-			->addOption(
51
-				'type',
52
-				null,
53
-				InputOption::VALUE_REQUIRED,
54
-				'Value type [string, integer, double, boolean]',
55
-				'string'
56
-			)
57
-			->addOption(
58
-				'value',
59
-				null,
60
-				InputOption::VALUE_REQUIRED,
61
-				'The new value of the config'
62
-			)
63
-			->addOption(
64
-				'update-only',
65
-				null,
66
-				InputOption::VALUE_NONE,
67
-				'Only updates the value, if it is not set before, it is not being added'
68
-			)
69
-		;
70
-	}
71
-
72
-	protected function execute(InputInterface $input, OutputInterface $output): int {
73
-		$configNames = $input->getArgument('name');
74
-		$configName = $configNames[0];
75
-		$configValue = $this->castValue($input->getOption('value'), $input->getOption('type'));
76
-		$updateOnly = $input->getOption('update-only');
77
-
78
-		if (count($configNames) > 1) {
79
-			$existingValue = $this->systemConfig->getValue($configName);
80
-
81
-			$newValue = $this->mergeArrayValue(
82
-				array_slice($configNames, 1), $existingValue, $configValue['value'], $updateOnly
83
-			);
84
-
85
-			$this->systemConfig->setValue($configName, $newValue);
86
-		} else {
87
-			if ($updateOnly && !in_array($configName, $this->systemConfig->getKeys(), true)) {
88
-				throw new \UnexpectedValueException('Config parameter does not exist');
89
-			}
90
-
91
-			$this->systemConfig->setValue($configName, $configValue['value']);
92
-		}
93
-
94
-		$output->writeln('<info>System config value ' . implode(' => ', $configNames) . ' set to ' . $configValue['readable-value'] . '</info>');
95
-		return 0;
96
-	}
97
-
98
-	/**
99
-	 * @param string $value
100
-	 * @param string $type
101
-	 * @return mixed
102
-	 * @throws \InvalidArgumentException
103
-	 */
104
-	protected function castValue($value, $type) {
105
-		switch ($type) {
106
-			case 'integer':
107
-			case 'int':
108
-				if (!is_numeric($value)) {
109
-					throw new \InvalidArgumentException('Non-numeric value specified');
110
-				}
111
-				return [
112
-					'value' => (int) $value,
113
-					'readable-value' => 'integer ' . (int) $value,
114
-				];
115
-
116
-			case 'double':
117
-			case 'float':
118
-				if (!is_numeric($value)) {
119
-					throw new \InvalidArgumentException('Non-numeric value specified');
120
-				}
121
-				return [
122
-					'value' => (double) $value,
123
-					'readable-value' => 'double ' . (double) $value,
124
-				];
125
-
126
-			case 'boolean':
127
-			case 'bool':
128
-				$value = strtolower($value);
129
-				switch ($value) {
130
-					case 'true':
131
-						return [
132
-							'value' => true,
133
-							'readable-value' => 'boolean ' . $value,
134
-						];
135
-
136
-					case 'false':
137
-						return [
138
-							'value' => false,
139
-							'readable-value' => 'boolean ' . $value,
140
-						];
141
-
142
-					default:
143
-						throw new \InvalidArgumentException('Unable to parse value as boolean');
144
-				}
145
-
146
-				// no break
147
-			case 'null':
148
-				return [
149
-					'value' => null,
150
-					'readable-value' => 'null',
151
-				];
152
-
153
-			case 'string':
154
-				$value = (string) $value;
155
-				return [
156
-					'value' => $value,
157
-					'readable-value' => ($value === '') ? 'empty string' : 'string ' . $value,
158
-				];
159
-
160
-			default:
161
-				throw new \InvalidArgumentException('Invalid type');
162
-		}
163
-	}
164
-
165
-	/**
166
-	 * @param array $configNames
167
-	 * @param mixed $existingValues
168
-	 * @param mixed $value
169
-	 * @param bool $updateOnly
170
-	 * @return array merged value
171
-	 * @throws \UnexpectedValueException
172
-	 */
173
-	protected function mergeArrayValue(array $configNames, $existingValues, $value, $updateOnly) {
174
-		$configName = array_shift($configNames);
175
-		if (!is_array($existingValues)) {
176
-			$existingValues = [];
177
-		}
178
-		if (!empty($configNames)) {
179
-			if (isset($existingValues[$configName])) {
180
-				$existingValue = $existingValues[$configName];
181
-			} else {
182
-				$existingValue = [];
183
-			}
184
-			$existingValues[$configName] = $this->mergeArrayValue($configNames, $existingValue, $value, $updateOnly);
185
-		} else {
186
-			if (!isset($existingValues[$configName]) && $updateOnly) {
187
-				throw new \UnexpectedValueException('Config parameter does not exist');
188
-			}
189
-			$existingValues[$configName] = $value;
190
-		}
191
-		return $existingValues;
192
-	}
193
-
194
-	/**
195
-	 * @param string $optionName
196
-	 * @param CompletionContext $context
197
-	 * @return string[]
198
-	 */
199
-	public function completeOptionValues($optionName, CompletionContext $context) {
200
-		if ($optionName === 'type') {
201
-			return ['string', 'integer', 'double', 'boolean'];
202
-		}
203
-		return parent::completeOptionValues($optionName, $context);
204
-	}
35
+    public function __construct(SystemConfig $systemConfig) {
36
+        parent::__construct($systemConfig);
37
+    }
38
+
39
+    protected function configure() {
40
+        parent::configure();
41
+
42
+        $this
43
+            ->setName('config:system:set')
44
+            ->setDescription('Set a system config value')
45
+            ->addArgument(
46
+                'name',
47
+                InputArgument::REQUIRED | InputArgument::IS_ARRAY,
48
+                'Name of the config parameter, specify multiple for array parameter'
49
+            )
50
+            ->addOption(
51
+                'type',
52
+                null,
53
+                InputOption::VALUE_REQUIRED,
54
+                'Value type [string, integer, double, boolean]',
55
+                'string'
56
+            )
57
+            ->addOption(
58
+                'value',
59
+                null,
60
+                InputOption::VALUE_REQUIRED,
61
+                'The new value of the config'
62
+            )
63
+            ->addOption(
64
+                'update-only',
65
+                null,
66
+                InputOption::VALUE_NONE,
67
+                'Only updates the value, if it is not set before, it is not being added'
68
+            )
69
+        ;
70
+    }
71
+
72
+    protected function execute(InputInterface $input, OutputInterface $output): int {
73
+        $configNames = $input->getArgument('name');
74
+        $configName = $configNames[0];
75
+        $configValue = $this->castValue($input->getOption('value'), $input->getOption('type'));
76
+        $updateOnly = $input->getOption('update-only');
77
+
78
+        if (count($configNames) > 1) {
79
+            $existingValue = $this->systemConfig->getValue($configName);
80
+
81
+            $newValue = $this->mergeArrayValue(
82
+                array_slice($configNames, 1), $existingValue, $configValue['value'], $updateOnly
83
+            );
84
+
85
+            $this->systemConfig->setValue($configName, $newValue);
86
+        } else {
87
+            if ($updateOnly && !in_array($configName, $this->systemConfig->getKeys(), true)) {
88
+                throw new \UnexpectedValueException('Config parameter does not exist');
89
+            }
90
+
91
+            $this->systemConfig->setValue($configName, $configValue['value']);
92
+        }
93
+
94
+        $output->writeln('<info>System config value ' . implode(' => ', $configNames) . ' set to ' . $configValue['readable-value'] . '</info>');
95
+        return 0;
96
+    }
97
+
98
+    /**
99
+     * @param string $value
100
+     * @param string $type
101
+     * @return mixed
102
+     * @throws \InvalidArgumentException
103
+     */
104
+    protected function castValue($value, $type) {
105
+        switch ($type) {
106
+            case 'integer':
107
+            case 'int':
108
+                if (!is_numeric($value)) {
109
+                    throw new \InvalidArgumentException('Non-numeric value specified');
110
+                }
111
+                return [
112
+                    'value' => (int) $value,
113
+                    'readable-value' => 'integer ' . (int) $value,
114
+                ];
115
+
116
+            case 'double':
117
+            case 'float':
118
+                if (!is_numeric($value)) {
119
+                    throw new \InvalidArgumentException('Non-numeric value specified');
120
+                }
121
+                return [
122
+                    'value' => (double) $value,
123
+                    'readable-value' => 'double ' . (double) $value,
124
+                ];
125
+
126
+            case 'boolean':
127
+            case 'bool':
128
+                $value = strtolower($value);
129
+                switch ($value) {
130
+                    case 'true':
131
+                        return [
132
+                            'value' => true,
133
+                            'readable-value' => 'boolean ' . $value,
134
+                        ];
135
+
136
+                    case 'false':
137
+                        return [
138
+                            'value' => false,
139
+                            'readable-value' => 'boolean ' . $value,
140
+                        ];
141
+
142
+                    default:
143
+                        throw new \InvalidArgumentException('Unable to parse value as boolean');
144
+                }
145
+
146
+                // no break
147
+            case 'null':
148
+                return [
149
+                    'value' => null,
150
+                    'readable-value' => 'null',
151
+                ];
152
+
153
+            case 'string':
154
+                $value = (string) $value;
155
+                return [
156
+                    'value' => $value,
157
+                    'readable-value' => ($value === '') ? 'empty string' : 'string ' . $value,
158
+                ];
159
+
160
+            default:
161
+                throw new \InvalidArgumentException('Invalid type');
162
+        }
163
+    }
164
+
165
+    /**
166
+     * @param array $configNames
167
+     * @param mixed $existingValues
168
+     * @param mixed $value
169
+     * @param bool $updateOnly
170
+     * @return array merged value
171
+     * @throws \UnexpectedValueException
172
+     */
173
+    protected function mergeArrayValue(array $configNames, $existingValues, $value, $updateOnly) {
174
+        $configName = array_shift($configNames);
175
+        if (!is_array($existingValues)) {
176
+            $existingValues = [];
177
+        }
178
+        if (!empty($configNames)) {
179
+            if (isset($existingValues[$configName])) {
180
+                $existingValue = $existingValues[$configName];
181
+            } else {
182
+                $existingValue = [];
183
+            }
184
+            $existingValues[$configName] = $this->mergeArrayValue($configNames, $existingValue, $value, $updateOnly);
185
+        } else {
186
+            if (!isset($existingValues[$configName]) && $updateOnly) {
187
+                throw new \UnexpectedValueException('Config parameter does not exist');
188
+            }
189
+            $existingValues[$configName] = $value;
190
+        }
191
+        return $existingValues;
192
+    }
193
+
194
+    /**
195
+     * @param string $optionName
196
+     * @param CompletionContext $context
197
+     * @return string[]
198
+     */
199
+    public function completeOptionValues($optionName, CompletionContext $context) {
200
+        if ($optionName === 'type') {
201
+            return ['string', 'integer', 'double', 'boolean'];
202
+        }
203
+        return parent::completeOptionValues($optionName, $context);
204
+    }
205 205
 }
Please login to merge, or discard this patch.