|
1
|
|
|
<?php |
|
2
|
|
View Code Duplication |
if (file_exists(dirname(__FILE__)."/../assets/cache/siteManager.php")) { |
|
3
|
|
|
include_once(dirname(__FILE__)."/../assets/cache/siteManager.php"); |
|
4
|
|
|
}else{ |
|
5
|
|
|
define('MGR_DIR', 'manager'); |
|
6
|
|
|
} |
|
7
|
|
|
|
|
8
|
|
|
global $moduleName; |
|
9
|
|
|
global $moduleVersion; |
|
10
|
|
|
global $moduleSQLBaseFile; |
|
11
|
|
|
global $moduleSQLDataFile; |
|
12
|
|
|
global $moduleSQLResetFile; |
|
13
|
|
|
|
|
14
|
|
|
global $moduleChunks; |
|
15
|
|
|
global $moduleTemplates; |
|
16
|
|
|
global $moduleSnippets; |
|
17
|
|
|
global $modulePlugins; |
|
18
|
|
|
global $moduleModules; |
|
19
|
|
|
global $moduleTVs; |
|
20
|
|
|
global $moduleDependencies; |
|
21
|
|
|
|
|
22
|
|
|
global $errors; |
|
23
|
|
|
|
|
24
|
|
|
$create = false; |
|
25
|
|
|
|
|
26
|
|
|
// set timout limit |
|
27
|
|
|
@ set_time_limit(120); // used @ to prevent warning when using safe mode? |
|
28
|
|
|
|
|
29
|
|
|
echo "<p>{$_lang['setup_database']}</p>\n"; |
|
30
|
|
|
|
|
31
|
|
|
$installMode= (int)$_POST['installmode']; |
|
32
|
|
|
$installData = $_POST['installdata'] == "1" ? 1 : 0; |
|
33
|
|
|
|
|
34
|
|
|
//if ($installMode == 1) { |
|
35
|
|
|
// include "../".MGR_DIR."/includes/config.inc.php"; |
|
36
|
|
|
//} else { |
|
37
|
|
|
// get db info from post |
|
38
|
|
|
$database_server = $_POST['databasehost']; |
|
39
|
|
|
$database_user = $_SESSION['databaseloginname']; |
|
40
|
|
|
$database_password = $_SESSION['databaseloginpassword']; |
|
41
|
|
|
$database_collation = $_POST['database_collation']; |
|
42
|
|
|
$database_charset = substr($database_collation, 0, strpos($database_collation, '_')); |
|
43
|
|
|
$database_connection_charset = $_POST['database_connection_charset']; |
|
44
|
|
|
$database_connection_method = $_POST['database_connection_method']; |
|
45
|
|
|
$dbase = "`" . $_POST['database_name'] . "`"; |
|
46
|
|
|
$table_prefix = $_POST['tableprefix']; |
|
47
|
|
|
$adminname = $_POST['cmsadmin']; |
|
48
|
|
|
$adminemail = $_POST['cmsadminemail']; |
|
49
|
|
|
$adminpass = $_POST['cmspassword']; |
|
50
|
|
|
$managerlanguage = $_POST['managerlanguage']; |
|
51
|
|
|
$custom_placeholders = array(); |
|
52
|
|
|
//} |
|
53
|
|
|
|
|
54
|
|
|
// set session name variable |
|
55
|
|
|
if (!isset ($site_sessionname)) { |
|
56
|
|
|
$site_sessionname = 'SN' . uniqid(''); |
|
57
|
|
|
} |
|
58
|
|
|
|
|
59
|
|
|
// get base path and url |
|
60
|
|
|
$a = explode("install", str_replace("\\", "/", dirname($_SERVER["PHP_SELF"]))); |
|
61
|
|
|
if (count($a) > 1) |
|
62
|
|
|
array_pop($a); |
|
63
|
|
|
$url = implode("install", $a); |
|
64
|
|
|
reset($a); |
|
65
|
|
|
$a = explode("install", str_replace("\\", "/", realpath(dirname(__FILE__)))); |
|
66
|
|
|
if (count($a) > 1) |
|
67
|
|
|
array_pop($a); |
|
68
|
|
|
$pth = implode("install", $a); |
|
69
|
|
|
unset ($a); |
|
70
|
|
|
$base_url = $url . (substr($url, -1) != "/" ? "/" : ""); |
|
71
|
|
|
$base_path = $pth . (substr($pth, -1) != "/" ? "/" : ""); |
|
72
|
|
|
|
|
73
|
|
|
// connect to the database |
|
74
|
|
|
echo "<p>". $_lang['setup_database_create_connection']; |
|
75
|
|
|
if (!$conn = mysqli_connect($database_server, $database_user, $database_password)) { |
|
76
|
|
|
echo '<span class="notok">'.$_lang["setup_database_create_connection_failed"]."</span></p><p>".$_lang['setup_database_create_connection_failed_note']."</p>"; |
|
77
|
|
|
return; |
|
78
|
|
|
} else { |
|
79
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
80
|
|
|
} |
|
81
|
|
|
|
|
82
|
|
|
// select database |
|
83
|
|
|
echo "<p>".$_lang['setup_database_selection']. str_replace("`", "", $dbase) . "`: "; |
|
84
|
|
|
if (!mysqli_select_db($conn, str_replace("`", "", $dbase))) { |
|
85
|
|
|
echo "<span class=\"notok\" style='color:#707070'>".$_lang['setup_database_selection_failed']."</span>".$_lang['setup_database_selection_failed_note']."</p>"; |
|
86
|
|
|
$create = true; |
|
87
|
|
View Code Duplication |
} else { |
|
88
|
|
|
if (function_exists('mysqli_set_charset')) mysqli_set_charset($conn, $database_charset); |
|
89
|
|
|
mysqli_query($conn, "{$database_connection_method} {$database_connection_charset}"); |
|
90
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
91
|
|
|
} |
|
92
|
|
|
|
|
93
|
|
|
// try to create the database |
|
94
|
|
|
if ($create) { |
|
95
|
|
|
echo "<p>".$_lang['setup_database_creation']. str_replace("`", "", $dbase) . "`: "; |
|
96
|
|
|
// if(!@mysqli_create_db(str_replace("`","",$dbase), $conn)) { |
|
97
|
|
|
if (! mysqli_query($conn, "CREATE DATABASE $dbase DEFAULT CHARACTER SET $database_charset COLLATE $database_collation")) { |
|
98
|
|
|
echo '<span class="notok">'.$_lang['setup_database_creation_failed']."</span>".$_lang['setup_database_creation_failed_note']."</p>"; |
|
99
|
|
|
$errors += 1; |
|
100
|
|
|
?> |
|
101
|
|
|
<pre> |
|
102
|
|
|
database charset = <?php echo $database_charset ?> |
|
103
|
|
|
database collation = <?php echo $database_collation ?> |
|
104
|
|
|
</pre> |
|
105
|
|
|
<p><?php echo $_lang['setup_database_creation_failed_note2']?></p> |
|
106
|
|
|
<?php |
|
107
|
|
|
|
|
108
|
|
|
return; |
|
109
|
|
|
} else { |
|
110
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
111
|
|
|
} |
|
112
|
|
|
} |
|
113
|
|
|
|
|
114
|
|
|
// check table prefix |
|
115
|
|
|
if ($installMode == 0) { |
|
116
|
|
|
echo "<p>" . $_lang['checking_table_prefix'] . $table_prefix . "`: "; |
|
117
|
|
View Code Duplication |
if (@ $rs = mysqli_query($conn, "SELECT COUNT(*) FROM $dbase.`" . $table_prefix . "site_content`")) { |
|
118
|
|
|
echo '<span class="notok">' . $_lang['failed'] . "</span>" . $_lang['table_prefix_already_inuse'] . "</p>"; |
|
119
|
|
|
$errors += 1; |
|
120
|
|
|
echo "<p>" . $_lang['table_prefix_already_inuse_note'] . "</p>"; |
|
121
|
|
|
return; |
|
122
|
|
|
} else { |
|
123
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
124
|
|
|
} |
|
125
|
|
|
} |
|
126
|
|
|
|
|
127
|
|
View Code Duplication |
if(!function_exists('parseProperties')) { |
|
128
|
|
|
/** |
|
129
|
|
|
* parses a resource property string and returns the result as an array |
|
130
|
|
|
* duplicate of method in documentParser class |
|
131
|
|
|
* |
|
132
|
|
|
* @param string $propertyString |
|
133
|
|
|
* @return array |
|
|
|
|
|
|
134
|
|
|
*/ |
|
135
|
|
|
function parseProperties($propertyString) { |
|
|
|
|
|
|
136
|
|
|
$parameter= array (); |
|
137
|
|
|
if (!empty ($propertyString)) { |
|
138
|
|
|
$tmpParams= explode("&", $propertyString); |
|
139
|
|
|
$countParams = count($tmpParams); |
|
140
|
|
|
for ($x= 0; $x < $countParams; $x++) { |
|
141
|
|
|
if (strpos($tmpParams[$x], '=', 0)) { |
|
142
|
|
|
$pTmp= explode("=", $tmpParams[$x]); |
|
143
|
|
|
$pvTmp= explode(";", trim($pTmp[1])); |
|
144
|
|
|
if ($pvTmp[1] == 'list' && $pvTmp[3] != "") |
|
145
|
|
|
$parameter[trim($pTmp[0])]= $pvTmp[3]; //list default |
|
146
|
|
|
else |
|
147
|
|
|
if ($pvTmp[1] != 'list' && $pvTmp[2] != "") |
|
148
|
|
|
$parameter[trim($pTmp[0])]= $pvTmp[2]; |
|
149
|
|
|
} |
|
150
|
|
|
} |
|
151
|
|
|
} |
|
152
|
|
|
return $parameter; |
|
153
|
|
|
} |
|
154
|
|
|
} |
|
155
|
|
|
|
|
156
|
|
|
// check status of Inherit Parent Template plugin |
|
157
|
|
|
$auto_template_logic = 'parent'; |
|
158
|
|
View Code Duplication |
if ($installMode != 0) { |
|
159
|
|
|
$rs = mysqli_query($conn, "SELECT properties, disabled FROM $dbase.`" . $table_prefix . "site_plugins` WHERE name='Inherit Parent Template'"); |
|
160
|
|
|
$row = mysqli_fetch_row($rs); |
|
161
|
|
|
if(!$row) { |
|
162
|
|
|
// not installed |
|
163
|
|
|
$auto_template_logic = 'system'; |
|
164
|
|
|
} else { |
|
165
|
|
|
if($row[1] == 1) { |
|
166
|
|
|
// installed but disabled |
|
167
|
|
|
$auto_template_logic = 'system'; |
|
168
|
|
|
} else { |
|
169
|
|
|
// installed, enabled .. see how it's configured |
|
170
|
|
|
$properties = parseProperties($row[0]); |
|
171
|
|
|
if(isset($properties['inheritTemplate'])) { |
|
172
|
|
|
if($properties['inheritTemplate'] == 'From First Sibling') { |
|
173
|
|
|
$auto_template_logic = 'sibling'; |
|
174
|
|
|
} |
|
175
|
|
|
} |
|
176
|
|
|
} |
|
177
|
|
|
} |
|
178
|
|
|
} |
|
179
|
|
|
|
|
180
|
|
|
// open db connection |
|
181
|
|
|
$setupPath = realpath(dirname(__FILE__)); |
|
182
|
|
|
include "{$setupPath}/setup.info.php"; |
|
183
|
|
|
include "{$setupPath}/sqlParser.class.php"; |
|
184
|
|
|
$sqlParser = new SqlParser($database_server, $database_user, $database_password, str_replace("`", "", $dbase), $table_prefix, $adminname, $adminemail, $adminpass, $database_connection_charset, $managerlanguage, $database_connection_method, $auto_template_logic); |
|
185
|
|
|
$sqlParser->mode = ($installMode < 1) ? "new" : "upd"; |
|
186
|
|
|
/* image and file manager paths now handled via settings screen in Manager |
|
187
|
|
|
$sqlParser->imageUrl = 'http://' . $_SERVER['SERVER_NAME'] . $base_url . "assets/"; |
|
188
|
|
|
$sqlParser->imageUrl = "assets/"; |
|
189
|
|
|
$sqlParser->imagePath = $base_path . "assets/"; |
|
190
|
|
|
$sqlParser->fileManagerPath = $base_path; |
|
191
|
|
|
*/ |
|
192
|
|
|
$sqlParser->ignoreDuplicateErrors = true; |
|
193
|
|
|
$sqlParser->connect(); |
|
194
|
|
|
|
|
195
|
|
|
// install/update database |
|
196
|
|
|
echo "<p>" . $_lang['setup_database_creating_tables']; |
|
197
|
|
|
if ($moduleSQLBaseFile) { |
|
198
|
|
|
$sqlParser->process($moduleSQLBaseFile); |
|
199
|
|
|
// display database results |
|
200
|
|
View Code Duplication |
if ($sqlParser->installFailed == true) { |
|
201
|
|
|
$errors += 1; |
|
202
|
|
|
echo "<span class=\"notok\"><b>" . $_lang['database_alerts'] . "</span></p>"; |
|
203
|
|
|
echo "<p>" . $_lang['setup_couldnt_install'] . "</p>"; |
|
204
|
|
|
echo "<p>" . $_lang['installation_error_occured'] . "<br /><br />"; |
|
205
|
|
|
for ($i = 0; $i < count($sqlParser->mysqlErrors); $i++) { |
|
206
|
|
|
echo "<em>" . $sqlParser->mysqlErrors[$i]["error"] . "</em>" . $_lang['during_execution_of_sql'] . "<span class='mono'>" . strip_tags($sqlParser->mysqlErrors[$i]["sql"]) . "</span>.<hr />"; |
|
207
|
|
|
} |
|
208
|
|
|
echo "</p>"; |
|
209
|
|
|
echo "<p>" . $_lang['some_tables_not_updated'] . "</p>"; |
|
210
|
|
|
return; |
|
211
|
|
|
} else { |
|
212
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
213
|
|
|
} |
|
214
|
|
|
} |
|
215
|
|
|
|
|
216
|
|
|
// custom or not |
|
217
|
|
|
if (file_exists(dirname(__FILE__)."/../../assets/cache/siteManager.php")) { |
|
218
|
|
|
$mgrdir = 'include_once(dirname(__FILE__)."/../../assets/cache/siteManager.php");'; |
|
219
|
|
|
}else{ |
|
220
|
|
|
$mgrdir = 'define(\'MGR_DIR\', \'manager\');'; |
|
221
|
|
|
} |
|
222
|
|
|
|
|
223
|
|
|
// write the config.inc.php file if new installation |
|
224
|
|
|
echo "<p>" . $_lang['writing_config_file']; |
|
225
|
|
|
|
|
226
|
|
|
$confph = array(); |
|
227
|
|
|
$confph['database_server'] = $database_server; |
|
228
|
|
|
$confph['user_name'] = mysqli_real_escape_string($conn, $database_user); |
|
229
|
|
|
$confph['password'] = mysqli_real_escape_string($conn, $database_password); |
|
230
|
|
|
$confph['connection_charset'] = $database_connection_charset; |
|
231
|
|
|
$confph['connection_method'] = $database_connection_method; |
|
232
|
|
|
$confph['dbase'] = str_replace('`', '', $dbase); |
|
233
|
|
|
$confph['table_prefix'] = $table_prefix; |
|
234
|
|
|
$confph['lastInstallTime'] = time(); |
|
235
|
|
|
$confph['site_sessionname'] = $site_sessionname; |
|
236
|
|
|
|
|
237
|
|
|
$configString = file_get_contents('config.inc.tpl'); |
|
238
|
|
|
$configString = parse($configString, $confph); |
|
239
|
|
|
|
|
240
|
|
|
$filename = '../'.MGR_DIR.'/includes/config.inc.php'; |
|
241
|
|
|
$configFileFailed = false; |
|
242
|
|
|
if (@ !$handle = fopen($filename, 'w')) { |
|
243
|
|
|
$configFileFailed = true; |
|
244
|
|
|
} |
|
245
|
|
|
|
|
246
|
|
|
// write $somecontent to our opened file. |
|
247
|
|
|
if (@ fwrite($handle, $configString) === FALSE) { |
|
248
|
|
|
$configFileFailed = true; |
|
249
|
|
|
} |
|
250
|
|
|
@ fclose($handle); |
|
251
|
|
|
|
|
252
|
|
|
// try to chmod the config file go-rwx (for suexeced php) |
|
253
|
|
|
$chmodSuccess = @chmod($filename, 0404); |
|
254
|
|
|
|
|
255
|
|
|
if ($configFileFailed == true) { |
|
|
|
|
|
|
256
|
|
|
echo '<span class="notok">' . $_lang['failed'] . "</span></p>"; |
|
257
|
|
|
$errors += 1; |
|
258
|
|
|
?> |
|
259
|
|
|
<p><?php echo $_lang['cant_write_config_file']?><span class="mono"><?php echo MGR_DIR; ?>/includes/config.inc.php</span></p> |
|
260
|
|
|
<textarea style="width:400px; height:160px;"> |
|
261
|
|
|
<?php echo $configString; ?> |
|
262
|
|
|
</textarea> |
|
263
|
|
|
<p><?php echo $_lang['cant_write_config_file_note']?></p> |
|
264
|
|
|
<?php |
|
265
|
|
|
return; |
|
266
|
|
|
} else { |
|
267
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
268
|
|
|
} |
|
269
|
|
|
|
|
270
|
|
|
// generate new site_id and set manager theme to default |
|
271
|
|
View Code Duplication |
if ($installMode == 0) { |
|
272
|
|
|
$siteid = uniqid(''); |
|
273
|
|
|
mysqli_query($sqlParser->conn, "REPLACE INTO $dbase.`" . $table_prefix . "system_settings` (setting_name,setting_value) VALUES('site_id','$siteid'),('manager_theme','default')"); |
|
274
|
|
|
} else { |
|
275
|
|
|
// update site_id if missing |
|
276
|
|
|
$ds = mysqli_query($sqlParser->conn, "SELECT setting_name,setting_value FROM $dbase.`" . $table_prefix . "system_settings` WHERE setting_name='site_id'"); |
|
277
|
|
|
if ($ds) { |
|
278
|
|
|
$r = mysqli_fetch_assoc($ds); |
|
279
|
|
|
$siteid = $r['setting_value']; |
|
280
|
|
|
if ($siteid == '' || $siteid = 'MzGeQ2faT4Dw06+U49x3') { |
|
281
|
|
|
$siteid = uniqid(''); |
|
282
|
|
|
mysqli_query($sqlParser->conn, "REPLACE INTO $dbase.`" . $table_prefix . "system_settings` (setting_name,setting_value) VALUES('site_id','$siteid')"); |
|
283
|
|
|
} |
|
284
|
|
|
} |
|
285
|
|
|
} |
|
286
|
|
|
|
|
287
|
|
|
// Reset database for installation of demo-site |
|
288
|
|
|
if ($installData && $moduleSQLDataFile && $moduleSQLResetFile) { |
|
289
|
|
|
echo "<p>" . $_lang['resetting_database']; |
|
290
|
|
|
$sqlParser->process($moduleSQLResetFile); |
|
291
|
|
|
// display database results |
|
292
|
|
View Code Duplication |
if ($sqlParser->installFailed == true) { |
|
293
|
|
|
$errors += 1; |
|
294
|
|
|
echo "<span class=\"notok\"><b>" . $_lang['database_alerts'] . "</span></p>"; |
|
295
|
|
|
echo "<p>" . $_lang['setup_couldnt_install'] . "</p>"; |
|
296
|
|
|
echo "<p>" . $_lang['installation_error_occured'] . "<br /><br />"; |
|
297
|
|
|
for ($i = 0; $i < count($sqlParser->mysqlErrors); $i++) { |
|
298
|
|
|
echo "<em>" . $sqlParser->mysqlErrors[$i]["error"] . "</em>" . $_lang['during_execution_of_sql'] . "<span class='mono'>" . strip_tags($sqlParser->mysqlErrors[$i]["sql"]) . "</span>.<hr />"; |
|
299
|
|
|
} |
|
300
|
|
|
echo "</p>"; |
|
301
|
|
|
echo "<p>" . $_lang['some_tables_not_updated'] . "</p>"; |
|
302
|
|
|
return; |
|
303
|
|
|
} else { |
|
304
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
305
|
|
|
} |
|
306
|
|
|
} |
|
307
|
|
|
|
|
308
|
|
|
// Install Templates |
|
309
|
|
|
if (isset ($_POST['template']) || $installData) { |
|
310
|
|
|
echo "<h3>" . $_lang['templates'] . ":</h3> "; |
|
311
|
|
|
$selTemplates = $_POST['template']; |
|
312
|
|
|
foreach ($moduleTemplates as $k=>$moduleTemplate) { |
|
313
|
|
|
$installSample = in_array('sample', $moduleTemplate[6]) && $installData == 1; |
|
314
|
|
|
if($installSample || in_array($k, $selTemplates)) { |
|
315
|
|
|
$name = mysqli_real_escape_string($conn, $moduleTemplate[0]); |
|
316
|
|
|
$desc = mysqli_real_escape_string($conn, $moduleTemplate[1]); |
|
317
|
|
|
$category = mysqli_real_escape_string($conn, $moduleTemplate[4]); |
|
318
|
|
|
$locked = mysqli_real_escape_string($conn, $moduleTemplate[5]); |
|
319
|
|
|
$filecontent = $moduleTemplate[3]; |
|
320
|
|
|
$save_sql_id_as = $moduleTemplate[7]; // Nessecary for demo-site |
|
321
|
|
|
if (!file_exists($filecontent)) { |
|
322
|
|
|
echo "<p> $name: <span class=\"notok\">" . $_lang['unable_install_template'] . " '$filecontent' " . $_lang['not_found'] . ".</span></p>"; |
|
323
|
|
|
} else { |
|
324
|
|
|
// Create the category if it does not already exist |
|
325
|
|
|
$category_id = getCreateDbCategory($category, $sqlParser); |
|
326
|
|
|
|
|
327
|
|
|
// Strip the first comment up top |
|
328
|
|
|
$template = preg_replace("/^.*?\/\*\*.*?\*\/\s+/s", '', file_get_contents($filecontent), 1); |
|
329
|
|
|
$template = mysqli_real_escape_string($conn, $template); |
|
330
|
|
|
|
|
331
|
|
|
// See if the template already exists |
|
332
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_templates` WHERE templatename='$name'"); |
|
333
|
|
|
|
|
334
|
|
|
if (mysqli_num_rows($rs)) { |
|
335
|
|
|
if (!mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_templates` SET content='$template', description='$desc', category=$category_id, locked='$locked' WHERE templatename='$name' LIMIT 1;")) { |
|
336
|
|
|
$errors += 1; |
|
337
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
338
|
|
|
return; |
|
339
|
|
|
} |
|
340
|
|
View Code Duplication |
if(!is_null($save_sql_id_as)) { |
|
341
|
|
|
$sql_id = @mysqli_insert_id($sqlParser->conn); |
|
342
|
|
|
if(!$sql_id) { |
|
343
|
|
|
$idQuery = mysqli_fetch_assoc(mysqli_query($sqlParser->conn, "SELECT id FROM $dbase.`" . $table_prefix . "site_templates` WHERE templatename='$name' LIMIT 1;")); |
|
344
|
|
|
$sql_id = $idQuery['id']; |
|
345
|
|
|
} |
|
346
|
|
|
$custom_placeholders[$save_sql_id_as] = $sql_id; |
|
347
|
|
|
} |
|
348
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['upgraded'] . "</span></p>"; |
|
349
|
|
|
} else { |
|
350
|
|
|
if (!@ mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_templates` (templatename,description,content,category,locked) VALUES('$name','$desc','$template',$category_id,'$locked');")) { |
|
351
|
|
|
$errors += 1; |
|
352
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
353
|
|
|
return; |
|
354
|
|
|
} |
|
355
|
|
|
if(!is_null($save_sql_id_as)) $custom_placeholders[$save_sql_id_as] = @mysqli_insert_id($sqlParser->conn); |
|
356
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['installed'] . "</span></p>"; |
|
357
|
|
|
} |
|
358
|
|
|
} |
|
359
|
|
|
} |
|
360
|
|
|
} |
|
361
|
|
|
} |
|
362
|
|
|
|
|
363
|
|
|
// Install Template Variables |
|
364
|
|
|
if (isset ($_POST['tv']) || $installData) { |
|
365
|
|
|
echo "<h3>" . $_lang['tvs'] . ":</h3> "; |
|
366
|
|
|
$selTVs = $_POST['tv']; |
|
367
|
|
|
foreach ($moduleTVs as $k=>$moduleTV) { |
|
368
|
|
|
$installSample = in_array('sample', $moduleTV[12]) && $installData == 1; |
|
369
|
|
|
if($installSample || in_array($k, $selTVs)) { |
|
370
|
|
|
$name = mysqli_real_escape_string($conn, $moduleTV[0]); |
|
371
|
|
|
$caption = mysqli_real_escape_string($conn, $moduleTV[1]); |
|
372
|
|
|
$desc = mysqli_real_escape_string($conn, $moduleTV[2]); |
|
373
|
|
|
$input_type = mysqli_real_escape_string($conn, $moduleTV[3]); |
|
374
|
|
|
$input_options = mysqli_real_escape_string($conn, $moduleTV[4]); |
|
375
|
|
|
$input_default = mysqli_real_escape_string($conn, $moduleTV[5]); |
|
376
|
|
|
$output_widget = mysqli_real_escape_string($conn, $moduleTV[6]); |
|
377
|
|
|
$output_widget_params = mysqli_real_escape_string($conn, $moduleTV[7]); |
|
378
|
|
|
$filecontent = $moduleTV[8]; |
|
379
|
|
|
$assignments = $moduleTV[9]; |
|
380
|
|
|
$category = mysqli_real_escape_string($conn, $moduleTV[10]); |
|
381
|
|
|
$locked = mysqli_real_escape_string($conn, $moduleTV[11]); |
|
382
|
|
|
|
|
383
|
|
|
|
|
384
|
|
|
// Create the category if it does not already exist |
|
385
|
|
|
$category = getCreateDbCategory($category, $sqlParser); |
|
386
|
|
|
|
|
387
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_tmplvars` WHERE name='$name'"); |
|
388
|
|
|
if (mysqli_num_rows($rs)) { |
|
389
|
|
|
$insert = true; |
|
390
|
|
View Code Duplication |
while($row = mysqli_fetch_assoc($rs)) { |
|
391
|
|
|
if (!mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_tmplvars` SET type='$input_type', caption='$caption', description='$desc', category=$category, locked=$locked, elements='$input_options', display='$output_widget', display_params='$output_widget_params', default_text='$input_default' WHERE id={$row['id']};")) { |
|
392
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
393
|
|
|
return; |
|
394
|
|
|
} |
|
395
|
|
|
$insert = false; |
|
396
|
|
|
} |
|
397
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['upgraded'] . "</span></p>"; |
|
398
|
|
|
} else { |
|
399
|
|
|
//$q = "INSERT INTO $dbase.`" . $table_prefix . "site_tmplvars` (type,name,caption,description,category,locked,elements,display,display_params,default_text) VALUES('$input_type','$name','$caption','$desc',(SELECT (CASE COUNT(*) WHEN 0 THEN 0 ELSE `id` END) `id` FROM $dbase.`" . $table_prefix . "categories` WHERE `category` = '$category'),$locked,'$input_options','$output_widget','$output_widget_params','$input_default');"; |
|
400
|
|
|
$q = "INSERT INTO $dbase.`" . $table_prefix . "site_tmplvars` (type,name,caption,description,category,locked,elements,display,display_params,default_text) VALUES('$input_type','$name','$caption','$desc',$category,$locked,'$input_options','$output_widget','$output_widget_params','$input_default');"; |
|
401
|
|
View Code Duplication |
if (!mysqli_query($sqlParser->conn, $q)) { |
|
402
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
403
|
|
|
return; |
|
404
|
|
|
} |
|
405
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['installed'] . "</span></p>"; |
|
406
|
|
|
} |
|
407
|
|
|
|
|
408
|
|
|
// add template assignments |
|
409
|
|
|
$assignments = explode(',', $assignments); |
|
410
|
|
|
|
|
411
|
|
View Code Duplication |
if (count($assignments) > 0) { |
|
412
|
|
|
|
|
413
|
|
|
// remove existing tv -> template assignments |
|
414
|
|
|
$ds=mysqli_query($sqlParser->conn, "SELECT id FROM $dbase.`".$table_prefix."site_tmplvars` WHERE name='$name' AND description='$desc';"); |
|
415
|
|
|
$row = mysqli_fetch_assoc($ds); |
|
416
|
|
|
$id = $row["id"]; |
|
417
|
|
|
mysqli_query($sqlParser->conn, 'DELETE FROM ' . $dbase . '.`' . $table_prefix . 'site_tmplvar_templates` WHERE tmplvarid = \'' . $id . '\''); |
|
418
|
|
|
|
|
419
|
|
|
// add tv -> template assignments |
|
420
|
|
|
foreach ($assignments as $assignment) { |
|
421
|
|
|
$template = mysqli_real_escape_string($conn, $assignment); |
|
422
|
|
|
$ts = mysqli_query($sqlParser->conn, "SELECT id FROM $dbase.`".$table_prefix."site_templates` WHERE templatename='$template';"); |
|
423
|
|
|
if ($ds && $ts) { |
|
424
|
|
|
$tRow = mysqli_fetch_assoc($ts); |
|
425
|
|
|
$templateId = $tRow['id']; |
|
426
|
|
|
mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_tmplvar_templates` (tmplvarid, templateid) VALUES($id, $templateId)"); |
|
427
|
|
|
} |
|
428
|
|
|
} |
|
429
|
|
|
} |
|
430
|
|
|
} |
|
431
|
|
|
} |
|
432
|
|
|
} |
|
433
|
|
|
|
|
434
|
|
|
// Install Chunks |
|
435
|
|
|
if (isset ($_POST['chunk']) || $installData) { |
|
436
|
|
|
echo "<h3>" . $_lang['chunks'] . ":</h3> "; |
|
437
|
|
|
$selChunks = $_POST['chunk']; |
|
438
|
|
|
foreach ($moduleChunks as $k=>$moduleChunk) { |
|
439
|
|
|
$installSample = in_array('sample', $moduleChunk[5]) && $installData == 1; |
|
440
|
|
|
$count_new_name = 0; |
|
441
|
|
|
if($installSample || in_array($k, $selChunks)) { |
|
442
|
|
|
|
|
443
|
|
|
$name = mysqli_real_escape_string($conn, $moduleChunk[0]); |
|
444
|
|
|
$desc = mysqli_real_escape_string($conn, $moduleChunk[1]); |
|
445
|
|
|
$category = mysqli_real_escape_string($conn, $moduleChunk[3]); |
|
446
|
|
|
$overwrite = mysqli_real_escape_string($conn, $moduleChunk[4]); |
|
447
|
|
|
$filecontent = $moduleChunk[2]; |
|
448
|
|
|
|
|
449
|
|
|
if (!file_exists($filecontent)) |
|
450
|
|
|
echo "<p> $name: <span class=\"notok\">" . $_lang['unable_install_chunk'] . " '$filecontent' " . $_lang['not_found'] . ".</span></p>"; |
|
451
|
|
|
else { |
|
452
|
|
|
|
|
453
|
|
|
// Create the category if it does not already exist |
|
454
|
|
|
$category_id = getCreateDbCategory($category, $sqlParser); |
|
455
|
|
|
|
|
456
|
|
|
$chunk = preg_replace("/^.*?\/\*\*.*?\*\/\s+/s", '', file_get_contents($filecontent), 1); |
|
457
|
|
|
$chunk = mysqli_real_escape_string($conn, $chunk); |
|
458
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_htmlsnippets` WHERE name='$name'"); |
|
459
|
|
|
$count_original_name = mysqli_num_rows($rs); |
|
460
|
|
View Code Duplication |
if($overwrite == 'false') { |
|
461
|
|
|
$newname = $name . '-' . str_replace('.', '_', $modx_version); |
|
462
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_htmlsnippets` WHERE name='$newname'"); |
|
463
|
|
|
$count_new_name = mysqli_num_rows($rs); |
|
464
|
|
|
} |
|
465
|
|
|
$update = $count_original_name > 0 && $overwrite == 'true'; |
|
466
|
|
|
if ($update) { |
|
467
|
|
|
if (!mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_htmlsnippets` SET snippet='$chunk', description='$desc', category=$category_id WHERE name='$name';")) { |
|
468
|
|
|
$errors += 1; |
|
469
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
470
|
|
|
return; |
|
471
|
|
|
} |
|
472
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['upgraded'] . "</span></p>"; |
|
473
|
|
|
} elseif($count_new_name == 0) { |
|
474
|
|
|
if($count_original_name > 0 && $overwrite == 'false') { |
|
475
|
|
|
$name = $newname; |
|
476
|
|
|
} |
|
477
|
|
|
if (!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_htmlsnippets` (name,description,snippet,category) VALUES('$name','$desc','$chunk',$category_id);")) { |
|
478
|
|
|
$errors += 1; |
|
479
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
480
|
|
|
return; |
|
481
|
|
|
} |
|
482
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['installed'] . "</span></p>"; |
|
483
|
|
|
} |
|
484
|
|
|
} |
|
485
|
|
|
} |
|
486
|
|
|
} |
|
487
|
|
|
} |
|
488
|
|
|
|
|
489
|
|
|
// Install Modules |
|
490
|
|
|
if (isset ($_POST['module']) || $installData) { |
|
491
|
|
|
echo "<h3>" . $_lang['modules'] . ":</h3> "; |
|
492
|
|
|
$selModules = $_POST['module']; |
|
493
|
|
|
foreach ($moduleModules as $k=>$moduleModule) { |
|
494
|
|
|
$installSample = in_array('sample', $moduleModule[7]) && $installData == 1; |
|
495
|
|
|
if($installSample || in_array($k, $selModules)) { |
|
496
|
|
|
$name = mysqli_real_escape_string($conn, $moduleModule[0]); |
|
497
|
|
|
$desc = mysqli_real_escape_string($conn, $moduleModule[1]); |
|
498
|
|
|
$filecontent = $moduleModule[2]; |
|
499
|
|
|
$properties = $moduleModule[3]; |
|
500
|
|
|
$guid = mysqli_real_escape_string($conn, $moduleModule[4]); |
|
501
|
|
|
$shared = mysqli_real_escape_string($conn, $moduleModule[5]); |
|
502
|
|
|
$category = mysqli_real_escape_string($conn, $moduleModule[6]); |
|
503
|
|
View Code Duplication |
if (!file_exists($filecontent)) |
|
504
|
|
|
echo "<p> $name: <span class=\"notok\">" . $_lang['unable_install_module'] . " '$filecontent' " . $_lang['not_found'] . ".</span></p>"; |
|
505
|
|
|
else { |
|
506
|
|
|
|
|
507
|
|
|
// Create the category if it does not already exist |
|
508
|
|
|
$category = getCreateDbCategory($category, $sqlParser); |
|
509
|
|
|
|
|
510
|
|
|
$module = end(preg_split("/(\/\/)?\s*\<\?php/", file_get_contents($filecontent), 2)); |
|
|
|
|
|
|
511
|
|
|
// $module = removeDocblock($module, 'module'); // Modules have no fileBinding, keep docblock for info-tab |
|
512
|
|
|
$module = mysqli_real_escape_string($conn, $module); |
|
513
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_modules` WHERE name='$name'"); |
|
514
|
|
|
if (mysqli_num_rows($rs)) { |
|
515
|
|
|
$row = mysqli_fetch_assoc($rs); |
|
516
|
|
|
$props = mysqli_real_escape_string($conn, propUpdate($properties,$row['properties'])); |
|
517
|
|
|
if (!mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_modules` SET modulecode='$module', description='$desc', properties='$props', enable_sharedparams='$shared' WHERE name='$name';")) { |
|
518
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
519
|
|
|
return; |
|
520
|
|
|
} |
|
521
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['upgraded'] . "</span></p>"; |
|
522
|
|
|
} else { |
|
523
|
|
|
$properties = mysqli_real_escape_string($conn, parseProperties($properties, true)); |
|
|
|
|
|
|
524
|
|
|
if (!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_modules` (name,description,modulecode,properties,guid,enable_sharedparams,category) VALUES('$name','$desc','$module','$properties','$guid','$shared', $category);")) { |
|
525
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
526
|
|
|
return; |
|
527
|
|
|
} |
|
528
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['installed'] . "</span></p>"; |
|
529
|
|
|
} |
|
530
|
|
|
} |
|
531
|
|
|
} |
|
532
|
|
|
} |
|
533
|
|
|
} |
|
534
|
|
|
|
|
535
|
|
|
// Install Plugins |
|
536
|
|
|
if (isset ($_POST['plugin']) || $installData) { |
|
537
|
|
|
echo "<h3>" . $_lang['plugins'] . ":</h3> "; |
|
538
|
|
|
$selPlugs = $_POST['plugin']; |
|
539
|
|
|
foreach ($modulePlugins as $k=>$modulePlugin) { |
|
540
|
|
|
$installSample = in_array('sample', $modulePlugin[8]) && $installData == 1; |
|
541
|
|
|
if($installSample || in_array($k, $selPlugs)) { |
|
542
|
|
|
$name = mysqli_real_escape_string($conn, $modulePlugin[0]); |
|
543
|
|
|
$desc = mysqli_real_escape_string($conn, $modulePlugin[1]); |
|
544
|
|
|
$filecontent = $modulePlugin[2]; |
|
545
|
|
|
$properties = $modulePlugin[3]; |
|
546
|
|
|
$events = explode(",", $modulePlugin[4]); |
|
547
|
|
|
$guid = mysqli_real_escape_string($conn, $modulePlugin[5]); |
|
548
|
|
|
$category = mysqli_real_escape_string($conn, $modulePlugin[6]); |
|
549
|
|
|
$leg_names = ''; |
|
550
|
|
|
$disabled = $modulePlugin[9]; |
|
551
|
|
View Code Duplication |
if(array_key_exists(7, $modulePlugin)) { |
|
552
|
|
|
// parse comma-separated legacy names and prepare them for sql IN clause |
|
553
|
|
|
$leg_names = "'" . implode("','", preg_split('/\s*,\s*/', mysqli_real_escape_string($conn, $modulePlugin[7]))) . "'"; |
|
554
|
|
|
} |
|
555
|
|
|
if (!file_exists($filecontent)) |
|
556
|
|
|
echo "<p> $name: <span class=\"notok\">" . $_lang['unable_install_plugin'] . " '$filecontent' " . $_lang['not_found'] . ".</span></p>"; |
|
557
|
|
|
else { |
|
558
|
|
|
|
|
559
|
|
|
// disable legacy versions based on legacy_names provided |
|
560
|
|
View Code Duplication |
if(!empty($leg_names)) { |
|
561
|
|
|
$update_query = "UPDATE $dbase.`" . $table_prefix . "site_plugins` SET disabled='1' WHERE name IN ($leg_names);"; |
|
562
|
|
|
$rs = mysqli_query($sqlParser->conn, $update_query); |
|
563
|
|
|
} |
|
564
|
|
|
|
|
565
|
|
|
// Create the category if it does not already exist |
|
566
|
|
|
$category = getCreateDbCategory($category, $sqlParser); |
|
567
|
|
|
|
|
568
|
|
|
$plugin = end(preg_split("/(\/\/)?\s*\<\?php/", file_get_contents($filecontent), 2)); |
|
|
|
|
|
|
569
|
|
|
$plugin = removeDocblock($plugin, 'plugin'); |
|
570
|
|
|
$plugin = mysqli_real_escape_string($conn, $plugin); |
|
571
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_plugins` WHERE name='$name'"); |
|
572
|
|
|
if (mysqli_num_rows($rs)) { |
|
573
|
|
|
$insert = true; |
|
574
|
|
|
while($row = mysqli_fetch_assoc($rs)) { |
|
575
|
|
|
$props = mysqli_real_escape_string($conn, propUpdate($properties,$row['properties'])); |
|
576
|
|
|
if($row['description'] == $desc){ |
|
577
|
|
View Code Duplication |
if (! mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_plugins` SET plugincode='$plugin', description='$desc', properties='$props' WHERE id={$row['id']};")) { |
|
578
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
579
|
|
|
return; |
|
580
|
|
|
} |
|
581
|
|
|
$insert = false; |
|
582
|
|
View Code Duplication |
} else { |
|
583
|
|
|
if (!mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_plugins` SET disabled='1' WHERE id={$row['id']};")) { |
|
584
|
|
|
echo "<p>".mysqli_error($sqlParser->conn)."</p>"; |
|
585
|
|
|
return; |
|
586
|
|
|
} |
|
587
|
|
|
} |
|
588
|
|
|
} |
|
589
|
|
View Code Duplication |
if($insert === true) { |
|
590
|
|
|
$properties = mysqli_real_escape_string($conn, propUpdate($properties,$row['properties'])); |
|
591
|
|
|
if(!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`".$table_prefix."site_plugins` (name,description,plugincode,properties,moduleguid,disabled,category) VALUES('$name','$desc','$plugin','$properties','$guid','0',$category);")) { |
|
592
|
|
|
echo "<p>".mysqli_error($sqlParser->conn)."</p>"; |
|
593
|
|
|
return; |
|
594
|
|
|
} |
|
595
|
|
|
} |
|
596
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['upgraded'] . "</span></p>"; |
|
597
|
|
|
} else { |
|
598
|
|
|
$properties = mysqli_real_escape_string($conn, parseProperties($properties, true)); |
|
|
|
|
|
|
599
|
|
|
if (!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_plugins` (name,description,plugincode,properties,moduleguid,category,disabled) VALUES('$name','$desc','$plugin','$properties','$guid',$category,$disabled);")) { |
|
600
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
601
|
|
|
return; |
|
602
|
|
|
} |
|
603
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['installed'] . "</span></p>"; |
|
604
|
|
|
} |
|
605
|
|
|
// add system events |
|
606
|
|
View Code Duplication |
if (count($events) > 0) { |
|
607
|
|
|
$ds=mysqli_query($sqlParser->conn, "SELECT id FROM $dbase.`".$table_prefix."site_plugins` WHERE name='$name' AND description='$desc';"); |
|
608
|
|
|
if ($ds) { |
|
609
|
|
|
$row = mysqli_fetch_assoc($ds); |
|
610
|
|
|
$id = $row["id"]; |
|
611
|
|
|
// remove existing events |
|
612
|
|
|
mysqli_query($sqlParser->conn, 'DELETE FROM ' . $dbase . '.`' . $table_prefix . 'site_plugin_events` WHERE pluginid = \'' . $id . '\''); |
|
613
|
|
|
// add new events |
|
614
|
|
|
mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_plugin_events` (pluginid, evtid) SELECT '$id' as 'pluginid',se.id as 'evtid' FROM $dbase.`" . $table_prefix . "system_eventnames` se WHERE name IN ('" . implode("','", $events) . "')"); |
|
615
|
|
|
} |
|
616
|
|
|
} |
|
617
|
|
|
} |
|
618
|
|
|
} |
|
619
|
|
|
} |
|
620
|
|
|
} |
|
621
|
|
|
|
|
622
|
|
|
// Install Snippets |
|
623
|
|
|
if (isset ($_POST['snippet']) || $installData) { |
|
624
|
|
|
echo "<h3>" . $_lang['snippets'] . ":</h3> "; |
|
625
|
|
|
$selSnips = $_POST['snippet']; |
|
626
|
|
|
foreach ($moduleSnippets as $k=>$moduleSnippet) { |
|
627
|
|
|
$installSample = in_array('sample', $moduleSnippet[5]) && $installData == 1; |
|
628
|
|
|
if($installSample || in_array($k, $selSnips)) { |
|
629
|
|
|
$name = mysqli_real_escape_string($conn, $moduleSnippet[0]); |
|
630
|
|
|
$desc = mysqli_real_escape_string($conn, $moduleSnippet[1]); |
|
631
|
|
|
$filecontent = $moduleSnippet[2]; |
|
632
|
|
|
$properties = $moduleSnippet[3]; |
|
633
|
|
|
$category = mysqli_real_escape_string($conn, $moduleSnippet[4]); |
|
634
|
|
View Code Duplication |
if (!file_exists($filecontent)) |
|
635
|
|
|
echo "<p> $name: <span class=\"notok\">" . $_lang['unable_install_snippet'] . " '$filecontent' " . $_lang['not_found'] . ".</span></p>"; |
|
636
|
|
|
else { |
|
637
|
|
|
|
|
638
|
|
|
// Create the category if it does not already exist |
|
639
|
|
|
$category = getCreateDbCategory($category, $sqlParser); |
|
640
|
|
|
|
|
641
|
|
|
$snippet = end(preg_split("/(\/\/)?\s*\<\?php/", file_get_contents($filecontent))); |
|
|
|
|
|
|
642
|
|
|
$snippet = removeDocblock($snippet, 'snippet'); |
|
643
|
|
|
$snippet = mysqli_real_escape_string($conn, $snippet); |
|
644
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT * FROM $dbase.`" . $table_prefix . "site_snippets` WHERE name='$name'"); |
|
645
|
|
|
if (mysqli_num_rows($rs)) { |
|
646
|
|
|
$row = mysqli_fetch_assoc($rs); |
|
647
|
|
|
$props = mysqli_real_escape_string($conn, propUpdate($properties,$row['properties'])); |
|
648
|
|
|
if (!mysqli_query($sqlParser->conn, "UPDATE $dbase.`" . $table_prefix . "site_snippets` SET snippet='$snippet', description='$desc', properties='$props' WHERE name='$name';")) { |
|
649
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
650
|
|
|
return; |
|
651
|
|
|
} |
|
652
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['upgraded'] . "</span></p>"; |
|
653
|
|
|
} else { |
|
654
|
|
|
$properties = mysqli_real_escape_string($conn, parseProperties($properties, true)); |
|
|
|
|
|
|
655
|
|
|
if (!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_snippets` (name,description,snippet,properties,category) VALUES('$name','$desc','$snippet','$properties',$category);")) { |
|
656
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
657
|
|
|
return; |
|
658
|
|
|
} |
|
659
|
|
|
echo "<p> $name: <span class=\"ok\">" . $_lang['installed'] . "</span></p>"; |
|
660
|
|
|
} |
|
661
|
|
|
} |
|
662
|
|
|
} |
|
663
|
|
|
} |
|
664
|
|
|
} |
|
665
|
|
|
|
|
666
|
|
|
// Install demo-site |
|
667
|
|
|
if ($installData && $moduleSQLDataFile) { |
|
668
|
|
|
echo "<p>" . $_lang['installing_demo_site']; |
|
669
|
|
|
$sqlParser->process($moduleSQLDataFile); |
|
670
|
|
|
// display database results |
|
671
|
|
|
if ($sqlParser->installFailed == true) { |
|
672
|
|
|
$errors += 1; |
|
673
|
|
|
echo "<span class=\"notok\"><b>" . $_lang['database_alerts'] . "</span></p>"; |
|
674
|
|
|
echo "<p>" . $_lang['setup_couldnt_install'] . "</p>"; |
|
675
|
|
|
echo "<p>" . $_lang['installation_error_occured'] . "<br /><br />"; |
|
676
|
|
|
for ($i = 0; $i < count($sqlParser->mysqlErrors); $i++) { |
|
677
|
|
|
echo "<em>" . $sqlParser->mysqlErrors[$i]["error"] . "</em>" . $_lang['during_execution_of_sql'] . "<span class='mono'>" . strip_tags($sqlParser->mysqlErrors[$i]["sql"]) . "</span>.<hr />"; |
|
678
|
|
|
} |
|
679
|
|
|
echo "</p>"; |
|
680
|
|
|
echo "<p>" . $_lang['some_tables_not_updated'] . "</p>"; |
|
681
|
|
|
return; |
|
682
|
|
View Code Duplication |
} else { |
|
683
|
|
|
$sql = sprintf("SELECT id FROM `%ssite_templates` WHERE templatename='EVO startup - Bootstrap'", $sqlParser->prefix); |
|
684
|
|
|
$rs = mysqli_query($sqlParser->conn, $sql); |
|
685
|
|
|
if(mysqli_num_rows($rs)) { |
|
686
|
|
|
$row = mysqli_fetch_assoc($rs); |
|
687
|
|
|
$sql = sprintf('UPDATE `%ssite_content` SET template=%s WHERE template=4', $sqlParser->prefix, $row['id']); |
|
688
|
|
|
mysqli_query($sqlParser->conn, $sql); |
|
689
|
|
|
} |
|
690
|
|
|
echo '<span class="ok">'.$_lang['ok']."</span></p>"; |
|
691
|
|
|
} |
|
692
|
|
|
} |
|
693
|
|
|
|
|
694
|
|
|
// Install Dependencies |
|
695
|
|
|
foreach ($moduleDependencies as $dependency) { |
|
696
|
|
|
$ds = mysqli_query($sqlParser->conn, 'SELECT id, guid FROM ' . $dbase . '`' . $sqlParser->prefix . 'site_modules` WHERE name="' . $dependency['module'] . '"'); |
|
697
|
|
View Code Duplication |
if (!$ds) { |
|
698
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
699
|
|
|
return; |
|
700
|
|
|
} else { |
|
701
|
|
|
$row = mysqli_fetch_assoc($ds); |
|
702
|
|
|
$moduleId = $row["id"]; |
|
703
|
|
|
$moduleGuid = $row["guid"]; |
|
704
|
|
|
} |
|
705
|
|
|
// get extra id |
|
706
|
|
|
$ds = mysqli_query($sqlParser->conn, 'SELECT id FROM ' . $dbase . '`' . $sqlParser->prefix . 'site_' . $dependency['table'] . '` WHERE ' . $dependency['column'] . '="' . $dependency['name'] . '"'); |
|
707
|
|
View Code Duplication |
if (!$ds) { |
|
708
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
709
|
|
|
return; |
|
710
|
|
|
} else { |
|
711
|
|
|
$row = mysqli_fetch_assoc($ds); |
|
712
|
|
|
$extraId = $row["id"]; |
|
713
|
|
|
} |
|
714
|
|
|
// setup extra as module dependency |
|
715
|
|
|
$ds = mysqli_query($sqlParser->conn, 'SELECT module FROM ' . $dbase . '`' . $sqlParser->prefix . 'site_module_depobj` WHERE module=' . $moduleId . ' AND resource=' . $extraId . ' AND type=' . $dependency['type'] . ' LIMIT 1'); |
|
716
|
|
|
if (!$ds) { |
|
717
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
718
|
|
|
return; |
|
719
|
|
|
} else { |
|
720
|
|
|
if (mysqli_num_rows($ds) === 0) { |
|
721
|
|
|
mysqli_query($sqlParser->conn, 'INSERT INTO ' . $dbase . '`' . $sqlParser->prefix . 'site_module_depobj` (module, resource, type) VALUES(' . $moduleId . ',' . $extraId . ',' . $dependency['type'] . ')'); |
|
722
|
|
|
echo '<p> ' . $dependency['module'] . ' Module: <span class="ok">' . $_lang['depedency_create'] . '</span></p>'; |
|
723
|
|
View Code Duplication |
} else { |
|
724
|
|
|
mysqli_query($sqlParser->conn, 'UPDATE ' . $dbase . '`' . $sqlParser->prefix . 'site_module_depobj` SET module = ' . $moduleId . ', resource = ' . $extraId . ', type = ' . $dependency['type'] . ' WHERE module=' . $moduleId . ' AND resource=' . $extraId . ' AND type=' . $dependency['type']); |
|
725
|
|
|
echo '<p> ' . $dependency['module'] . ' Module: <span class="ok">' . $_lang['depedency_update'] . '</span></p>'; |
|
726
|
|
|
} |
|
727
|
|
|
if ($dependency['type'] == 30 || $dependency['type'] == 40) { |
|
728
|
|
|
// set extra guid for plugins and snippets |
|
729
|
|
|
$ds = mysqli_query($sqlParser->conn, 'SELECT id FROM ' . $dbase . '`' . $sqlParser->prefix . 'site_' . $dependency['table'] . '` WHERE id=' . $extraId . ' LIMIT 1'); |
|
730
|
|
|
if (!$ds) { |
|
731
|
|
|
echo "<p>" . mysqli_error($sqlParser->conn) . "</p>"; |
|
732
|
|
|
return; |
|
733
|
|
View Code Duplication |
} else { |
|
734
|
|
|
if (mysqli_num_rows($ds) != 0) { |
|
735
|
|
|
mysqli_query($sqlParser->conn, 'UPDATE ' . $dbase . '`' . $sqlParser->prefix . 'site_' . $dependency['table'] . '` SET moduleguid = ' . $moduleGuid . ' WHERE id=' . $extraId); |
|
736
|
|
|
echo '<p> ' . $dependency['name'] . ': <span class="ok">' . $_lang['guid_set'] . '</span></p>'; |
|
737
|
|
|
} |
|
738
|
|
|
} |
|
739
|
|
|
} |
|
740
|
|
|
} |
|
741
|
|
|
} |
|
742
|
|
|
|
|
743
|
|
|
// call back function |
|
744
|
|
|
if ($callBackFnc != "") |
|
745
|
|
|
$callBackFnc ($sqlParser); |
|
746
|
|
|
|
|
747
|
|
|
// Setup the MODX API -- needed for the cache processor |
|
748
|
|
|
define('MODX_API_MODE', true); |
|
749
|
|
|
define('MODX_BASE_PATH', $base_path); |
|
750
|
|
|
if (!defined('MODX_MANAGER_PATH')) define('MODX_MANAGER_PATH', $base_path.MGR_DIR.'/'); |
|
751
|
|
|
$database_type = 'mysqli'; |
|
752
|
|
|
// initiate a new document parser |
|
753
|
|
|
include_once('../'.MGR_DIR.'/includes/document.parser.class.inc.php'); |
|
754
|
|
|
$modx = new DocumentParser; |
|
755
|
|
|
$modx->db->connect(); |
|
756
|
|
|
// always empty cache after install |
|
757
|
|
|
include_once "../".MGR_DIR."/processors/cache_sync.class.processor.php"; |
|
758
|
|
|
$sync = new synccache(); |
|
759
|
|
|
$sync->setCachepath("../assets/cache/"); |
|
760
|
|
|
$sync->setReport(false); |
|
761
|
|
|
$sync->emptyCache(); // first empty the cache |
|
762
|
|
|
|
|
763
|
|
|
// try to chmod the cache go-rwx (for suexeced php) |
|
764
|
|
|
$chmodSuccess = @chmod('../assets/cache/siteCache.idx.php', 0600); |
|
765
|
|
|
$chmodSuccess = @chmod('../assets/cache/sitePublishing.idx.php', 0600); |
|
766
|
|
|
|
|
767
|
|
|
// remove any locks on the manager functions so initial manager login is not blocked |
|
768
|
|
|
mysqli_query($conn, "TRUNCATE TABLE `".$table_prefix."active_users`"); |
|
769
|
|
|
|
|
770
|
|
|
// close db connection |
|
771
|
|
|
$sqlParser->close(); |
|
772
|
|
|
|
|
773
|
|
|
// andrazk 20070416 - release manager access |
|
774
|
|
|
if (file_exists('../assets/cache/installProc.inc.php')) { |
|
775
|
|
|
@chmod('../assets/cache/installProc.inc.php', 0755); |
|
776
|
|
|
unlink('../assets/cache/installProc.inc.php'); |
|
777
|
|
|
} |
|
778
|
|
|
|
|
779
|
|
|
// setup completed! |
|
780
|
|
|
echo "<p><b>" . $_lang['installation_successful'] . "</b></p>"; |
|
781
|
|
|
echo "<p>" . $_lang['to_log_into_content_manager'] . "</p>"; |
|
782
|
|
|
if ($installMode == 0) { |
|
783
|
|
|
echo "<p><img src=\"img/ico_info.png\" width=\"40\" height=\"42\" align=\"left\" style=\"margin-right:10px;\" />" . $_lang['installation_note'] . "</p>"; |
|
784
|
|
|
} else { |
|
785
|
|
|
echo "<p><img src=\"img/ico_info.png\" width=\"40\" height=\"42\" align=\"left\" style=\"margin-right:10px;\" />" . $_lang['upgrade_note'] . "</p>"; |
|
786
|
|
|
} |
|
787
|
|
|
|
|
788
|
|
|
/** |
|
789
|
|
|
* Property Update function |
|
790
|
|
|
* |
|
791
|
|
|
* @param string $new |
|
792
|
|
|
* @param string $old |
|
793
|
|
|
* @return string |
|
|
|
|
|
|
794
|
|
|
*/ |
|
795
|
|
View Code Duplication |
function propUpdate($new,$old){ |
|
|
|
|
|
|
796
|
|
|
$newArr = parseProperties($new); |
|
797
|
|
|
$oldArr = parseProperties($old); |
|
798
|
|
|
foreach ($oldArr as $k => $v){ |
|
799
|
|
|
if (isset($v['0']['options'])){ |
|
800
|
|
|
$oldArr[$k]['0']['options'] = $newArr[$k]['0']['options']; |
|
801
|
|
|
} |
|
802
|
|
|
} |
|
803
|
|
|
$return = $oldArr + $newArr; |
|
804
|
|
|
$return = json_encode($return, JSON_UNESCAPED_UNICODE); |
|
|
|
|
|
|
805
|
|
|
$return = ($return !== '[]') ? $return : ''; |
|
806
|
|
|
return $return; |
|
807
|
|
|
} |
|
808
|
|
|
|
|
809
|
|
|
/** |
|
810
|
|
|
* @param string $propertyString |
|
811
|
|
|
* @param bool|mixed $json |
|
812
|
|
|
* @return string |
|
813
|
|
|
*/ |
|
814
|
|
View Code Duplication |
function parseProperties($propertyString, $json=false) { |
|
|
|
|
|
|
815
|
|
|
$propertyString = str_replace('{}', '', $propertyString ); |
|
816
|
|
|
$propertyString = str_replace('} {', ',', $propertyString ); |
|
817
|
|
|
|
|
818
|
|
|
if(empty($propertyString)) return array(); |
|
819
|
|
|
if($propertyString=='{}' || $propertyString=='[]') return array(); |
|
820
|
|
|
|
|
821
|
|
|
$jsonFormat = isJson($propertyString, true); |
|
822
|
|
|
$property = array(); |
|
823
|
|
|
// old format |
|
824
|
|
|
if ( $jsonFormat === false) { |
|
825
|
|
|
$props= explode('&', $propertyString); |
|
826
|
|
|
foreach ($props as $prop) { |
|
827
|
|
|
$prop = trim($prop); |
|
828
|
|
|
if($prop === '') { |
|
829
|
|
|
continue; |
|
830
|
|
|
} |
|
831
|
|
|
|
|
832
|
|
|
$arr = explode(';', $prop); |
|
833
|
|
|
if( ! is_array($arr)) { |
|
834
|
|
|
$arr = array(); |
|
835
|
|
|
} |
|
836
|
|
|
$key = explode('=', isset($arr[0]) ? $arr[0] : ''); |
|
837
|
|
|
if( ! is_array($key) || empty($key[0])) { |
|
838
|
|
|
continue; |
|
839
|
|
|
} |
|
840
|
|
|
|
|
841
|
|
|
$property[$key[0]]['0']['label'] = isset($key[1]) ? trim($key[1]) : ''; |
|
842
|
|
|
$property[$key[0]]['0']['type'] = isset($arr[1]) ? trim($arr[1]) : ''; |
|
843
|
|
|
switch ($property[$key[0]]['0']['type']) { |
|
844
|
|
|
case 'list': |
|
845
|
|
|
case 'list-multi': |
|
846
|
|
|
case 'checkbox': |
|
847
|
|
|
case 'radio': |
|
848
|
|
|
case 'menu': |
|
849
|
|
|
$property[$key[0]]['0']['value'] = isset($arr[3]) ? trim($arr[3]) : ''; |
|
850
|
|
|
$property[$key[0]]['0']['options'] = isset($arr[2]) ? trim($arr[2]) : ''; |
|
851
|
|
|
$property[$key[0]]['0']['default'] = isset($arr[3]) ? trim($arr[3]) : ''; |
|
852
|
|
|
break; |
|
853
|
|
|
default: |
|
854
|
|
|
$property[$key[0]]['0']['value'] = isset($arr[2]) ? trim($arr[2]) : ''; |
|
855
|
|
|
$property[$key[0]]['0']['default'] = isset($arr[2]) ? trim($arr[2]) : ''; |
|
856
|
|
|
} |
|
857
|
|
|
$property[$key[0]]['0']['desc'] = ''; |
|
858
|
|
|
|
|
859
|
|
|
} |
|
860
|
|
|
// new json-format |
|
861
|
|
|
} else if(!empty($jsonFormat)){ |
|
862
|
|
|
$property = $jsonFormat; |
|
863
|
|
|
} |
|
864
|
|
|
if ($json) { |
|
865
|
|
|
$property = json_encode($property, JSON_UNESCAPED_UNICODE); |
|
|
|
|
|
|
866
|
|
|
} |
|
867
|
|
|
$property = ($property !== '[]') ? $property : ''; |
|
868
|
|
|
return $property; |
|
869
|
|
|
} |
|
870
|
|
|
|
|
871
|
|
|
/** |
|
872
|
|
|
* @param string $string |
|
873
|
|
|
* @param bool $returnData |
|
874
|
|
|
* @return bool|mixed |
|
875
|
|
|
*/ |
|
876
|
|
|
function isJson($string, $returnData=false) { |
|
|
|
|
|
|
877
|
|
|
$data = json_decode($string, true); |
|
878
|
|
|
return (json_last_error() == JSON_ERROR_NONE) ? ($returnData ? $data : true) : false; |
|
879
|
|
|
} |
|
880
|
|
|
|
|
881
|
|
|
/** |
|
882
|
|
|
* @param string|int $category |
|
883
|
|
|
* @param SqlParser $sqlParser |
|
884
|
|
|
* @return int |
|
885
|
|
|
*/ |
|
886
|
|
View Code Duplication |
function getCreateDbCategory($category, $sqlParser) { |
|
|
|
|
|
|
887
|
|
|
$dbase = $sqlParser->dbname; |
|
888
|
|
|
$dbase = '`' . trim($dbase,'`') . '`'; |
|
889
|
|
|
$table_prefix = $sqlParser->prefix; |
|
890
|
|
|
$category_id = 0; |
|
891
|
|
|
if(!empty($category)) { |
|
892
|
|
|
$category = mysqli_real_escape_string($sqlParser->conn, $category); |
|
893
|
|
|
$rs = mysqli_query($sqlParser->conn, "SELECT id FROM $dbase.`".$table_prefix."categories` WHERE category = '".$category."'"); |
|
894
|
|
|
if(mysqli_num_rows($rs) && ($row = mysqli_fetch_assoc($rs))) { |
|
895
|
|
|
$category_id = $row['id']; |
|
896
|
|
|
} else { |
|
897
|
|
|
$q = "INSERT INTO $dbase.`".$table_prefix."categories` (`category`) VALUES ('{$category}');"; |
|
898
|
|
|
$rs = mysqli_query($sqlParser->conn, $q); |
|
899
|
|
|
if($rs) { |
|
900
|
|
|
$category_id = mysqli_insert_id($sqlParser->conn); |
|
901
|
|
|
} |
|
902
|
|
|
} |
|
903
|
|
|
} |
|
904
|
|
|
return $category_id; |
|
905
|
|
|
} |
|
906
|
|
|
|
|
907
|
|
|
/** |
|
908
|
|
|
* Remove installer Docblock only from components using plugin FileSource / fileBinding |
|
909
|
|
|
* |
|
910
|
|
|
* @param string $code |
|
911
|
|
|
* @param string $type |
|
912
|
|
|
* @return string |
|
913
|
|
|
*/ |
|
914
|
|
View Code Duplication |
function removeDocblock($code, $type) { |
|
|
|
|
|
|
915
|
|
|
|
|
916
|
|
|
$cleaned = preg_replace("/^.*?\/\*\*.*?\*\/\s+/s", '', $code, 1); |
|
917
|
|
|
|
|
918
|
|
|
// Procedure taken from plugin.filesource.php |
|
919
|
|
|
switch($type) { |
|
920
|
|
|
case 'snippet': |
|
921
|
|
|
$elm_name = 'snippets'; |
|
922
|
|
|
$include = 'return require'; |
|
923
|
|
|
$count = 47; |
|
924
|
|
|
break; |
|
925
|
|
|
|
|
926
|
|
|
case 'plugin': |
|
927
|
|
|
$elm_name = 'plugins'; |
|
928
|
|
|
$include = 'require'; |
|
929
|
|
|
$count = 39; |
|
930
|
|
|
break; |
|
931
|
|
|
|
|
932
|
|
|
default: |
|
933
|
|
|
return $cleaned; |
|
934
|
|
|
}; |
|
935
|
|
|
if(substr(trim($cleaned),0,$count) == $include.' MODX_BASE_PATH.\'assets/'.$elm_name.'/') |
|
936
|
|
|
return $cleaned; |
|
937
|
|
|
|
|
938
|
|
|
// fileBinding not found - return code incl docblock |
|
939
|
|
|
return $code; |
|
940
|
|
|
} |
|
941
|
|
|
|
This check compares the return type specified in the
@returnannotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.