CheckSystemCommand   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 9
lcom 0
cbo 5
dl 0
loc 81
ccs 0
cts 56
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A configure() 0 6 1
B execute() 0 47 6
A longArrayToString() 0 11 2
1
<?php
2
/**
3
 * @author Victor Dubiniuk <[email protected]>
4
 *
5
 * @copyright Copyright (c) 2015, ownCloud, Inc.
6
 * @license AGPL-3.0
7
 *
8
 * This code is free software: you can redistribute it and/or modify
9
 * it under the terms of the GNU Affero General Public License, version 3,
10
 * as published by the Free Software Foundation.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
 * GNU Affero General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Affero General Public License, version 3,
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
19
 *
20
 */
21
22
namespace Owncloud\Updater\Command;
23
24
use Symfony\Component\Console\Input\InputInterface;
25
use Symfony\Component\Console\Output\OutputInterface;
26
use Owncloud\Updater\Utils\Collection;
27
28
/**
29
 * Class CheckSystemCommand
30
 *
31
 * @package Owncloud\Updater\Command
32
 */
33
class CheckSystemCommand extends Command {
34
35
	protected $message = 'Checking system health.';
36
37
	protected function configure(){
38
		$this
39
				->setName('upgrade:checkSystem')
40
				->setDescription('System check. System health and if dependencies are OK (we also count the number of files and DB entries and give time estimations based on hardcoded estimation)')
41
		;
42
	}
43
44
	/**
45
	 * @param InputInterface $input
46
	 * @param OutputInterface $output
47
	 * @return int
48
	 */
49
	protected function execute(InputInterface $input, OutputInterface $output){
50
		$locator = $this->container['utils.locator'];
51
		$fsHelper = $this->container['utils.filesystemhelper'];
52
		/** @var \Owncloud\Updater\Utils\Registry $registry */
53
		$registry = $this->container['utils.registry'];
54
		/** @var  \Owncloud\Updater\Utils\AppManager  $appManager */
55
		$appManager = $this->container['utils.appmanager'];
56
		$registry->set(
57
			'notShippedApps',
58
			$appManager->getNotShippedApps()
59
		);
60
		$docLink = $this->container['utils.docLink'];
61
62
		$collection = new Collection();
63
64
		$rootDirItems= $locator->getRootDirItems();
65
		foreach ($rootDirItems as $item){
66
			$fsHelper->checkr($item, $collection);
67
		}
68
		$notReadableFiles = $collection->getNotReadable();
69
		$notWritableFiles = $collection->getNotWritable();
70
71
		if (count($notReadableFiles)){
72
			$output->writeln('<error>The following files and directories are not readable:</error>');
73
			$output->writeln($this->longArrayToString($notReadableFiles));
74
		}
75
76
		if (count($notWritableFiles)){
77
			$output->writeln('<error>The following files and directories are not writable:</error>');
78
			$output->writeln($this->longArrayToString($notWritableFiles));
79
		}
80
81
		if (count($notReadableFiles) || count($notWritableFiles)){
82
			$output->writeln('<info>Please check if owner and permissions for these files are correct.</info>');
83
			$output->writeln(
84
				sprintf(
85
					'<info>See %s for details.</info>',
86
					$docLink->getAdminManualUrl('installation/installation_wizard.html#strong-perms-label')
87
				)
88
			);
89
			return 2;
90
		} else {
91
			$output->writeln(' - file permissions are ok.');
92
		}
93
94
		return 0;
95
	}
96
97
	/**
98
	 * @param $array
99
	 * @return string
100
	 */
101
	protected function longArrayToString($array){
102
		if (count($array)>7){
103
			$shortArray = array_slice($array, 0, 7);
104
			$more = sprintf('... and %d more items', count($array) - count($shortArray));
105
			array_push($shortArray, $more);
106
		} else {
107
			$shortArray = $array;
108
		}
109
		$string = implode(PHP_EOL, $shortArray);
110
		return $string;
111
	}
112
113
}
114