Passed
Push — master ( c0a3a7...3b84a4 )
by Jeroen
58:51
created

PostInstall::copyFromElggToRoot()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
cc 3
eloc 5
nc 2
nop 3
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
ccs 0
cts 7
cp 0
crap 12
1
<?php
2
namespace Elgg\Composer;
3
4
use Composer\Script\Event;
5
use Elgg;
6
use Elgg\Filesystem\Directory;
7
8
/**
9
 * A composer command handler to run after composer install
10
 */
11
class PostInstall {
12
	/**
13
	 * Copies files that Elgg expects to be in the root directory.
14
	 *
15
	 * @param Event $event The Composer event (install/upgrade)
1 ignored issue
show
Bug introduced by Evan Winslow
The type Composer\Script\Event was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
16
	 *
17
	 * @return void
18
	 */
19
	public static function execute(Event $event) {
1 ignored issue
show
Unused Code introduced by Evan Winslow
The parameter $event is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

19
	public static function execute(/** @scrutinizer ignore-unused */ Event $event) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
20
		self::copyFromElggToRoot("install/config/htaccess.dist", ".htaccess");
21
		self::copyFromElggToRoot("index.php", "index.php");
22
		self::copyFromElggToRoot("install.php", "install.php");
23
		self::copyFromElggToRoot("upgrade.php", "upgrade.php");
24
25
		$managed_plugins = [
26
			'activity',
27
			'blog',
28
			'bookmarks',
29
			'ckeditor',
30
			'custom_index',
31
			'dashboard',
32
			'developers',
33
			'diagnostics',
34
			'discussions',
35
			'embed',
36
			'externalpages',
37
			'file',
38
			'friends',
39
			'friends_collections',
40
			'garbagecollector',
41
			'groups',
42
			'invitefriends',
43
			'legacy_urls',
44
			'likes',
45
			'members',
46
			'messageboard',
47
			'messages',
48
			'notifications',
49
			'pages',
50
			'profile',
51
			'reportedcontent',
52
			'search',
53
			'site_notifications',
54
			'system_log',
55
			'tagcloud',
56
			'thewire',
57
			'uservalidationbyemail',
58
			'web_services',
59
		];
60
61
		foreach ($managed_plugins as $plugin) {
62
			self::symlinkPluginFromRootToElgg($plugin);
63
		}
64
	}
65
66
	/**
67
	 * Copies a file from the given location in Elgg to the given location in root.
68
	 *
69
	 * @param string $elggPath  Path relative to elgg dir.
70
	 * @param string $rootPath  Path relative to app root dir.
71
	 * @param bool   $overwrite Overwrite file if it exists in root path, defaults to false.
72
	 *
73
	 * @return boolean Whether the copy succeeded.
74
	 */
75
	private static function copyFromElggToRoot($elggPath, $rootPath, $overwrite = false) {
76
		$from = Elgg\Application::elggDir()->getPath($elggPath);
77
		$to = Directory\Local::projectRoot()->getPath($rootPath);
78
79
		if (!$overwrite && file_exists($to)) {
80
			return false;
81
		}
82
83
		return copy($from, $to);
84
	}
85
86
	/**
87
	 * Make it possible for composer-managed Elgg site to recognize plugins
88
	 * version-controlled in Elgg core.
89
	 *
90
	 * @param string $plugin The name of the plugin to symlink
91
	 *
92
	 * @return bool Whether the symlink succeeded.
93
	 */
94
	private static function symlinkPluginFromRootToElgg($plugin) {
95
		$from = Directory\Local::projectRoot()->getPath("mod/$plugin");
96
		$to = Elgg\Application::elggDir()->getPath("mod/$plugin");
97
98
		return !file_exists($from) && symlink($to, $from);
99
	}
100
}
101