Issues (4868)

setup/schematoy.php (4 issues)

1
<?php
2
  /**************************************************************************\
3
  * EGroupware - Setup - Developer tools                                     *
4
  * http://www.egroupware.org                                                *
5
  * --------------------------------------------                             *
6
  *  This program is free software; you can redistribute it and/or modify it *
7
  *  under the terms of the GNU General Public License as published by the   *
8
  *  Free Software Foundation; either version 2 of the License, or (at your  *
9
  *  option) any later version.                                              *
10
  \**************************************************************************/
11
12
  /* $Id$ */
13
14
	$GLOBALS['DEBUG'] = True;
15
16
	$GLOBALS['egw_info'] = array(
17
		'flags' => array(
18
			'noheader' => True,
19
			'nonavbar' => True,
20
			'currentapp' => 'home',
21
			'noapi' => True
22
	));
23
	include('./inc/functions.inc.php');
24
25
	// Check header and authentication
26
	if(!$GLOBALS['egw_setup']->auth('Config'))
27
	{
28
		Header('Location: index.php');
29
		exit;
30
	}
31
	// Does not return unless user is authorized
32
33
	$tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup');
34
	$GLOBALS['setup_tpl'] = CreateObject('phpgwapi.Template',$tpl_root);
0 ignored issues
show
Deprecated Code introduced by
The function CreateObject() has been deprecated: use autoloadable class-names and new ( Ignorable by Annotation )

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

34
	$GLOBALS['setup_tpl'] = /** @scrutinizer ignore-deprecated */ CreateObject('phpgwapi.Template',$tpl_root);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
35
	$GLOBALS['setup_tpl']->set_file(array(
36
		'T_head' => 'head.tpl',
37
		'T_footer' => 'footer.tpl',
38
		'T_alert_msg' => 'msg_alert_msg.tpl',
39
		'T_login_main' => 'login_main.tpl',
40
		'T_login_stage_header' => 'login_stage_header.tpl',
41
		'T_setup_main' => 'schema.tpl'
42
	));
43
44
	$GLOBALS['setup_tpl']->set_block('T_login_stage_header','B_multi_domain','V_multi_domain');
45
	$GLOBALS['setup_tpl']->set_block('T_login_stage_header','B_single_domain','V_single_domain');
46
	$GLOBALS['setup_tpl']->set_block('T_setup_main','header','header');
47
	$GLOBALS['setup_tpl']->set_block('T_setup_main','app_header','app_header');
48
	$GLOBALS['setup_tpl']->set_block('T_setup_main','apps','apps');
49
	$GLOBALS['setup_tpl']->set_block('T_setup_main','detail','detail');
50
	$GLOBALS['setup_tpl']->set_block('T_setup_main','table','table');
51
	$GLOBALS['setup_tpl']->set_block('T_setup_main','hook','hook');
52
	$GLOBALS['setup_tpl']->set_block('T_setup_main','dep','dep');
53
	$GLOBALS['setup_tpl']->set_block('T_setup_main','app_footer','app_footer');
54
	$GLOBALS['setup_tpl']->set_block('T_setup_main','submit','submit');
55
	$GLOBALS['setup_tpl']->set_block('T_setup_main','footer','footer');
56
57
	$bgcolor = array('DDDDDD','EEEEEE');
58
59
	function parsedep($depends,$main=True)
60
	{
61
		$depstring = '(';
62
		foreach($depends as $a => $b)
63
		{
64
			foreach($b as $c => $d)
65
			{
66
				if(is_array($d))
67
				{
68
					$depstring .= $c . ': ' .implode(',',$d) . '; ';
69
					$depver[] = $d;
70
				}
71
				else
72
				{
73
					$depstring .= $c . ': ' . $d . '; ';
74
					$depapp[] = $d;
75
				}
76
			}
77
		}
78
		$depstring .= ')';
79
		if($main)
80
		{
81
			return $depstring;
82
		}
83
		else
84
		{
85
			return array($depapp,$depver);
86
		}
87
	}
88
89
	$GLOBALS['egw_setup']->loaddb();
90
	$GLOBALS['egw_info']['setup']['stage']['db'] = $GLOBALS['egw_setup']->detection->check_db();
91
92
	$GLOBALS['setup_info'] = $GLOBALS['egw_setup']->detection->get_versions();
93
	//var_dump($GLOBALS['setup_info']);exit;
94
	$GLOBALS['setup_info'] = $GLOBALS['egw_setup']->detection->get_db_versions($GLOBALS['setup_info']);
95
	//var_dump($GLOBALS['setup_info']);exit;
96
	$GLOBALS['setup_info'] = $GLOBALS['egw_setup']->detection->compare_versions($GLOBALS['setup_info']);
97
	//var_dump($GLOBALS['setup_info']);exit;
98
	$GLOBALS['setup_info'] = $GLOBALS['egw_setup']->detection->check_depends($GLOBALS['setup_info']);
99
	//var_dump($GLOBALS['setup_info']);exit;
100
	@ksort($GLOBALS['setup_info']);
101
102
	if($_POST['cancel'])
103
	{
104
		Header('Location: index.php');
105
		exit;
106
	}
107
108
	$GLOBALS['egw_setup']->html->show_header(lang("Developers' Table Schema Toy"),False,'config',$GLOBALS['egw_setup']->ConfigDomain);
109
110
	if($_POST['submit'])
111
	{
112
		$GLOBALS['setup_tpl']->set_var('description',lang('App process') . ':');
113
		$GLOBALS['setup_tpl']->pparse('out','header');
114
115
		$appname = $_POST['appname'];
116
		$install = $_POST['install'];
117
		$version = $_POST['version'];
118
119
		foreach($install as $appname => $key)
120
		{
121
			$terror = array();
122
			$terror[$appname]['name'] = $appname;
123
			$terror[$appname]['version'] = $version[$appname];
124
			$terror[$appname]['status'] = 'U';
125
126
			$appdir  = EGW_SERVER_ROOT . '/' . $appname . '/setup/';
127
128
			// Drop newest tables
129
			$terror[$appname]['tables'] = $GLOBALS['setup_info'][$appname]['tables'];
130
			$GLOBALS['egw_setup']->process->droptables($terror,$GLOBALS['DEBUG']);
131
			$terror[$appname]['tables'] = array();
132
133
			// Reset tables field to baseline table names
134
			if(file_exists($appdir.'tables_baseline.inc.php'))
135
			{
136
				include($appdir.'tables_baseline.inc.php');
137
				foreach($phpgw_baseline as $table => $null)
138
				{
139
					$terror[$appname]['tables'][] = $table;
140
					echo '<br />Adding app table: ' . $table;
141
				}
142
			}
143
144
			if($version[$appname])
145
			{
146
				echo '<br />Processing ' . $terror[$appname]['name'] . ' to ' . $version[$appname];
147
148
				$terror = $GLOBALS['egw_setup']->process->droptables($terror,$GLOBALS['DEBUG']);
149
				$GLOBALS['egw_setup']->deregister_app($terror[$appname]['name']);
150
151
				$terror = $GLOBALS['egw_setup']->process->baseline($terror,$GLOBALS['DEBUG']);
152
				$terror = $GLOBALS['egw_setup']->process->test_data($terror,$GLOBALS['DEBUG']);
153
154
				$terror = $GLOBALS['egw_setup']->process->upgrade($terror,$GLOBALS['DEBUG']);
155
				$terror[$appname]['version'] = $version[$appname];
156
			}
157
			else
158
			{
159
				echo '<br />Baseline-only completed for ' . $terror[$appname]['name'];
160
			}
161
			echo '<br />' . $GLOBALS['setup_info'][$appname]['title'] . ' '
162
				. lang('tables installed, unless there are errors printed above') . '.';
163
164
			$GLOBALS['setup_info'][$appname]['version'] = $terror[$appname]['version'];
165
			$GLOBALS['egw_setup']->register_app($appname);
166
			echo '<br />' . $terror[$appname]['title'] . ' ' . lang('registered') . '.';
167
		}
168
169
		echo '<br /><a href="schematoy.php">' . lang('Go back') . '</a>';
170
		$GLOBALS['setup_tpl']->pparse('out','footer');
171
		exit;
172
	}
173
	$detail = $_REQUEST['detail'];
174
	if($detail)
175
	{
176
		@ksort($GLOBALS['setup_info'][$detail]);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition for ksort(). This can introduce security issues, and is generally not recommended. ( Ignorable by Annotation )

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

176
		/** @scrutinizer ignore-unhandled */ @ksort($GLOBALS['setup_info'][$detail]);

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
177
		@reset($GLOBALS['setup_info'][$detail]);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition for reset(). This can introduce security issues, and is generally not recommended. ( Ignorable by Annotation )

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

177
		/** @scrutinizer ignore-unhandled */ @reset($GLOBALS['setup_info'][$detail]);

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
178
		$GLOBALS['setup_tpl']->set_var('description',lang('App details') . ':');
179
		$GLOBALS['setup_tpl']->pparse('out','header');
180
181
		foreach($GLOBALS['setup_info'][$detail] as $key => $val)
182
		{
183
			$i = $i ? 0 : 1;
184
185
			//if(!$val) { $val = 'none'; }
186
187
			if($key == 'tables')
188
			{
189
				if(is_array($val))
190
				{
191
					$key = '<a href="sqltoarray.php?appname=' . $detail . '&submit=True">' . $key . '</a>' . "\n";
192
					$val = implode(',',$val);
193
				}
194
			}
195
			if($key == 'hooks')
196
			{
197
				$val = implode(',',$val);
198
			}
199
			if($key == 'depends')
200
			{
201
				$val = parsedep($val);
202
			}
203
			if(is_array($val))
204
			{
205
				$val = implode(',',$val);
206
			}
207
208
			$GLOBALS['setup_tpl']->set_var('bg_color',$bgcolor[$i]);
209
			$GLOBALS['setup_tpl']->set_var('name',$key);
210
			$GLOBALS['setup_tpl']->set_var('details',$val);
211
			$GLOBALS['setup_tpl']->pparse('out','detail');
212
		}
213
214
		echo '<br /><a href="schematoy.php">' . lang('Go back') . '</a>';
215
		$GLOBALS['setup_tpl']->pparse('out','footer');
216
		exit;
217
	}
218
	else
219
	{
220
		$GLOBALS['setup_tpl']->set_var('description',lang("Select an app, enter a target version, then submit to process to that version.<br />If you do not enter a version, only the baseline tables will be installed for the app.<br /><blink>THIS WILL DROP ALL OF THE APPS' TABLES FIRST!</blink>"));
221
		$GLOBALS['setup_tpl']->pparse('out','header');
222
223
		$GLOBALS['setup_tpl']->set_var('appdata',lang('Application Data'));
224
		$GLOBALS['setup_tpl']->set_var('actions',lang('Actions'));
225
		$GLOBALS['setup_tpl']->set_var('action_url','schematoy.php');
226
		$GLOBALS['setup_tpl']->set_var('app_info',lang('Application Name and Status'));
227
		$GLOBALS['setup_tpl']->set_var('app_title',lang('Application Title'));
228
		$GLOBALS['setup_tpl']->set_var('app_version',lang('Target Version'));
229
		$GLOBALS['setup_tpl']->set_var('app_install',lang('Process'));
230
		$GLOBALS['setup_tpl']->pparse('out','app_header');
231
232
		foreach($GLOBALS['setup_info'] as $key => $value)
233
		{
234
			unset($test);
235
			if(file_exists(EGW_SERVER_ROOT . '/' . $value['name'] . '/setup/tables_update.inc.php'))
236
			{
237
				include(EGW_SERVER_ROOT . '/' . $value['name'] . '/setup/tables_update.inc.php');
238
239
				if(is_array($test))
240
				{
241
					reset($test);
242
				}
243
244
				$s = '<option value="">&nbsp;</option>';
245
				if(is_array($test))
246
				{
247
					foreach($test as $versionnumber)
248
					{
249
						$s .= '<option value="' . $versionnumber . '">' . $versionnumber . '</option>';
250
					}
251
				}
252
				$GLOBALS['setup_tpl']->set_var('select_version',$s);
253
254
				if($value['name'])
255
				{
256
					$i = $i ? 0 : 1;
257
					$GLOBALS['setup_tpl']->set_var('apptitle',$value['title']);
258
					$GLOBALS['setup_tpl']->set_var('currentver',$value['currentver']);
259
					$GLOBALS['setup_tpl']->set_var('bg_color',$bgcolor[$i]);
260
261
					$GLOBALS['setup_tpl']->set_var('instimg','completed.png');
262
					$GLOBALS['setup_tpl']->set_var('instalt',lang('Completed'));
263
					$GLOBALS['setup_tpl']->set_var('install','<input type="checkbox" name="install[' . $value['name'] . ']" />');
264
					$status = lang('OK') . ' - ' . $value['status'];
265
266
					$GLOBALS['setup_tpl']->set_var('appinfo',$value['name'] . '-' . $status);
267
					$GLOBALS['setup_tpl']->set_var('appname',$value['name']);
268
269
					$GLOBALS['setup_tpl']->pparse('out','apps',True);
270
				}
271
			}
272
		}
273
	}
274
	$GLOBALS['setup_tpl']->set_var('submit',lang('Save'));
275
	$GLOBALS['setup_tpl']->set_var('cancel',lang('Cancel'));
276
	$GLOBALS['setup_tpl']->pparse('out','app_footer');
277
	$GLOBALS['setup_tpl']->pparse('out','footer');
278
	$GLOBALS['egw_setup']->html->show_footer();
279
?>
0 ignored issues
show
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...
280