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

engine/classes/Elgg/Composer/PostInstall.php (1 issue)

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
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) {
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