1<?php
2/* $Id: step_2.inc.php,v 1.19 2006/04/27 11:42:55 k-fish Exp $ */
3if(!defined("SETUP_RUNNING")) die('Use index.php for running setup!');
4
5/***************************************************************************
6* what to check
7***************************************************************************/
8
9// just the minimum version needed
10$neededPHPVersion = '4.2.0'; // jpgraph says it needs at least 4.3.1, but...
11
12$neededMemory = 16; //memory in Mb
13
14// list all required extensions with their PHP name
15// 0-must, 1-optional
16$neededExtensions = array('xml' => 0,
17'gd' => 0,
18'pcre' => 0,
19'session' => 0,
20//'curl' => 1 //was needed only for check rooturl at install : now not needed
21);
22
23$dbDrivers = array(	'mysql' => array('mysql', 'MySQL'),
24		       		'pgsql' => array('postgres7', 'PostgreSQL')
25		       	);
26    // at least for these we need the name of the PHP extensions
27    //'' => array('', 'IBM DB2'), // loge, go for it!
28    //'' => array('', 'Generic ODBC'),
29    //'' => array('mssql', 'MS-SQL'),
30    //'' => array('oci8', 'Oracle 8'),
31    //'' => array('msql', 'mSQL'),
32    //'' => array('ibase', 'interbase'),
33    //'' => array('sybase', 'Sybase'),
34    //'' => array('fbsql', 'Frontbase')
35
36
37// the first number in the array is the value we expect,
38// the second is the type of check 0-must, 1-should, 2-info
39$neededSettings = array('session.auto_start' => array(0,0),
40'safe_mode' => array(0,1),
41'magic_quotes_runtime' => array(0,0),
42'file_uploads' => array(1,1),
43'display_errors' => array(0,1),
44'allow_call_time_pass_reference' => array(1,1),
45'register_globals' => array(0,2),
46'magic_quotes_gpc' => array(0,2)
47);
48
49/***************************************************************************
50***************************************************************************/
51
52/* save posted data */
53if (isset($_POST["lang_charset"])) {
54  $lc = explode(";", $_POST["lang_charset"]);
55  $_SESSION["SETUP"]["lang"] = $lc[0];
56  $_SESSION["SETUP"]["charset"] = $lc[1];
57}
58
59$_SESSION["SETUP"]["system"] = true;
60
61// uninstall?
62if($_SESSION["SETUP"]['uninstall'] === true){
63  $smarty->assign('uninstall', true);
64} // end uninstall
65else{
66  $smarty->assign('uninstall', false);
67  $report = array();
68
69  // check PHP version
70  if (PHP_VERSION < $neededPHPVersion){
71    $_SESSION["SETUP"]["system"] = false;
72    $report[] = array('status' => 'error',
73    'title' => Lang::getParmLang(Lang::getLanguageString('phpreq'), array($neededPHPVersion)),
74    'desc' => Lang::getParmLang(Lang::getLanguageString('phpreqdesc'), array($neededPHPVersion)));
75  }
76  else{
77    $report[] = array('status' => 'ok',
78    'title' => Lang::getParmLang(Lang::getLanguageString('phpreq'), array($neededPHPVersion)),
79    'desc' => '');
80  }
81
82  /* we must be able to write the configfile */
83  clearstatcache();
84  if(!is_writeable(ROOTPATH)){
85    $_SESSION["SETUP"]["system"] = false;
86    $report[] = array('status' => 'error',
87    'title' => Lang::getParmLang(Lang::getLanguageString('writereq'), array(ROOTPATH)),
88    'desc' => Lang::getParmLang(Lang::getLanguageString('writereqdesc'), array(ROOTPATH)));
89  }
90  else{
91    $report[] = array('status' => 'ok',
92    'title' => Lang::getParmLang(Lang::getLanguageString('writereq'), array(ROOTPATH)),
93    'desc' => '');
94  }
95
96  // check needed PHP extensions
97  $extensions = get_loaded_extensions();
98
99//databases drivers
100  $str_db_needed="";
101  $icpt = 0;
102  $dbs = array();
103  foreach($dbDrivers as $dbext => $dbd){
104  	if ($icpt>0) {
105  		$str_db_needed.=", ";
106  	}
107  	$icpt++;
108  	$str_db_needed .=$dbd[1];
109	if(in_array($dbext, $extensions)){
110	    $dbs[$dbd[0]] = $dbd[1];
111	}
112  }//foreach
113  if (count($dbs)==0) {
114
115	$_SESSION["SETUP"]["system"] = false;
116    $report[] = array(	'status' => 'error',
117				    	'title' => Lang::getLanguageString('dbneeded'),
118				    	'desc' => Lang::getLanguageString('dbneeded_msg')." : ".$str_db_needed
119					);
120  }
121  else{
122  	$report[] = array('status' => 'ok',
123				      'title' => Lang::getLanguageString('dbneeded'),
124				      'desc' => ''
125					  );
126  }
127//-----------
128
129  foreach($neededExtensions as $ext => $v){
130    if(!in_array($ext, $extensions)){
131      if($v == 0){
132        $_SESSION["SETUP"]["system"] = false;
133        $report[] = array('status' => 'error',
134        'title' => Lang::getParmLang(Lang::getLanguageString('extreq0'), array($ext)),
135        'desc' => Lang::getParmLang(Lang::getLanguageString('extreqdesc0'), array($ext)));
136      }
137      else{
138        $report[] = array('status' => 'note',
139        'title' => Lang::getParmLang(Lang::getLanguageString('extreq1'), array($ext)),
140        'desc' => Lang::getParmLang(Lang::getLanguageString('extreqdesc1'), array($ext)));
141      }
142    }
143    else{
144      $report[] = array('status' => 'ok',
145      'title' => Lang::getParmLang(Lang::getLanguageString('extreq'), array($ext)),
146      'desc' => '');
147    }
148  }
149
150  // check include_path
151  $incPaths = explode((PHP_OS == 'WIN32' || PHP_OS == 'WINNT') ? ";" : ":", ini_get("include_path"));
152  if (! (in_array(".",$incPaths) || in_array("./",$incPaths) || in_array(".\\",$incPaths))){
153    $_SESSION["SETUP"]["system"] = false;
154    $report[] = array('status' => 'error',
155    'title' => Lang::getLanguageString('incpathreq'),
156    'desc' => Lang::getLanguageString('incpathreqdesc'));
157  }
158  else{
159    $report[] = array('status' => 'ok',
160    'title' => Lang::getLanguageString('incpathreq'),
161    'desc' => '');
162  }
163
164  // check memory_limit
165  $mlimit = ini_get('memory_limit');
166  if (stristr($mlimit,"m"))        {
167    $mlimit=doubleval($mlimit)*1024*1024;
168  } elseif (stristr($mlimit,"k"))  {
169    $mlimit=doubleval($mlimit)*1024;
170  }
171  if ($mlimit&&$mlimit<$neededMemory*1024*1024) {
172    $_SESSION["SETUP"]["system"] = false;
173    $report[] = array('status' => 'error',
174    'title' => Lang::getParmLang(Lang::getLanguageString('memoryreq'), array($neededMemory)),
175    'desc' => Lang::getParmLang(Lang::getLanguageString('memoryreqdesc'), array($neededMemory))
176	);
177  }
178  else{
179    $report[] = array('status' => 'ok',
180    'title' => Lang::getParmLang(Lang::getLanguageString('memoryreq'), array($neededMemory)),
181    'desc' => '');
182  }
183
184  // check PHP settings requirements
185  foreach($neededSettings as $set => $v){
186    if(!ini_get($set) == $v[0]){
187      if($v[1] == 0){
188        $_SESSION["SETUP"]["system"] = false;
189        $report[] = array('status' => 'error',
190        'title' => Lang::getParmLang(Lang::getLanguageString('setreq0'), array($set, $v[0])),
191        'desc' => Lang::getParmLang(Lang::getLanguageString('setreqdesc0'), array($set, $v[0])));
192      }
193      elseif($v[1] == 1){
194        $report[] = array('status' => 'warning',
195        'title' => Lang::getParmLang(Lang::getLanguageString('setreq1'), array($set, $v[0])),
196        'desc' => Lang::getParmLang(Lang::getLanguageString('setreqdesc1'), array($set, $v[0])));
197      }
198      elseif($v[1] == 2){
199        $report[] = array('status' => 'note',
200        'title' => Lang::getParmLang(Lang::getLanguageString('setreq2'), array($set, (int)ini_get($set))),
201        'desc' => Lang::getParmLang(Lang::getLanguageString('setreqdesc2'), array($set, $v[0])));
202      }
203    }
204    else{
205      $report[] = array('status' => 'ok',
206      'title' => Lang::getParmLang(Lang::getLanguageString('setreq2'), array($set, $v[0])),
207      'desc' => '');
208    }
209  }
210
211  // assign results to Smarty
212  $smarty->assign('report', $report);
213  $smarty->assign('status', $_SESSION["SETUP"]['system']);
214} // end install
215
216/* append navigation */
217$nav = true;
218$smarty->append("nav", array(0=>"prev",1=>Lang::getLanguageString("prev"),2=>1));
219if($_SESSION["SETUP"]['uninstall'] !== true)
220$smarty->append("subnav", array(0=>"refresh",1=>Lang::getLanguageString("refresh"),2=>1));
221if ($_SESSION["SETUP"]["system"] === false)
222$smarty->append("nav", array(0=>"next",1=>Lang::getLanguageString("next"),2=>0));
223else
224$smarty->append("nav", array(0=>"next",1=>Lang::getLanguageString("next"),2=>1));
225
226?>