aboutsummaryrefslogtreecommitdiff
path: root/actions/systemsettings/install.php
blob: 98d958a6712eb1da63886412264c4010d7bd7d09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
 * Elgg install site action
 *
 * Creates a nwe site and sets it as the default
 *
 * @package Elgg
 * @subpackage Core
 * @author Curverider Ltd
 * @link http://elgg.org/
 */

define('INSTALLING', TRUE);
elgg_set_viewtype('failsafe'); // Set failsafe again incase we get an exception thrown

if (is_installed()) {
	forward();
}

if (get_input('settings') == 'go') {
	if (!datalist_get('default_site')) {
		// Sanitise
		$path = sanitise_filepath(get_input('path'));
		$dataroot = sanitise_filepath(get_input('dataroot'));
		$url = sanitise_filepath(get_input('wwwroot'));

		// Blank?
		if ($dataroot == "/") {
			throw new InstallationException(elgg_echo('InstallationException:DatarootBlank'));
		}

		// That it's valid
		if (stripos($dataroot, $path)!==false) {
			throw new InstallationException(sprintf(elgg_echo('InstallationException:DatarootUnderPath'), $dataroot));
		}

		// Check data root is writable
		if (!is_writable($dataroot)) {
			throw new InstallationException(sprintf(elgg_echo('InstallationException:DatarootNotWritable'), $dataroot));
		}

		$site = new ElggSite();
		$site->name = get_input('sitename');
		$site->url = $url;
		$site->description = get_input('sitedescription');
		$site->email = get_input('siteemail');
		$site->access_id = ACCESS_PUBLIC;
		$guid = $site->save();

		if (!$guid) {
			throw new InstallationException(sprintf(elgg_echo('InstallationException:CantCreateSite'), get_input('sitename'), get_input('wwwroot')));
		}

		datalist_set('installed',time());
		datalist_set('path', $path);
		datalist_set('dataroot', $dataroot);
		datalist_set('default_site', $site->getGUID());
		datalist_set('version', get_version());

		set_config('view', get_input('view'), $site->getGUID());
		set_config('language', get_input('language'), $site->getGUID());
		set_config('default_access', get_input('default_access'), $site->getGUID());

		$debug = get_input('debug');
		if ($debug) {
			set_config('debug', $debug, $site->getGUID());
		} else {
			unset_config('debug', $site->getGUID());
		}

		$usage = get_input('usage');
		if (is_array($usage)) {
			$usage = $usage[0];
		}

		if ($usage) {
			unset_config('ping_home', $site->getGUID());
		} else {
			set_config('ping_home', 'disabled', $site->getGUID());
		}

		$api = get_input('api');
		if ($api) {
			unset_config('disable_api', $site->getGUID());
		} else {
			set_config('disable_api', 'disabled', $site->getGUID());
		}

		$https_login = get_input('https_login');
		if ($https_login) {
			set_config('https_login', 1, $site->getGUID());
		} else {
			unset_config('https_login', $site->getGUID());
		}

		// activate some plugins by default
		if (isset($CONFIG->default_plugins)) {
			if (!is_array($CONFIG->default_plugins)) {
				$plugins = explode(',', $CONFIG->default_plugins);
			} else {
				$CONFIG->default_plugins = $CONFIG->default_plugins;
			}

			foreach ($plugins as $plugin){
				enable_plugin(trim($plugin), $site->getGUID());
			}
		} else {
			enable_plugin('profile', $site->getGUID());
			enable_plugin('river', $site->getGUID());
			enable_plugin('logbrowser', $site->getGUID());
			enable_plugin('diagnostics', $site->getGUID());
			enable_plugin('uservalidationbyemail', $site->getGUID());
			enable_plugin('htmlawed', $site->getGUID());
			enable_plugin('search', $site->getGUID());
		}

		// reset the views path in case of installing over an old data dir.
		// @todo should this warn / error first?
		$dataroot = datalist_get('dataroot');
		$cache = new ElggFileCache($dataroot);
		$cache->delete('view_paths');

		// Now ping home
		if ($usage) {
			ping_home($site);
		}

		system_message(elgg_echo("installation:configuration:success"));

		header("Location: ../../account/register.php");
		exit;
	}
}