install/includes/stages/database_postgresql.php
changeset 1227 bdac73ed481e
parent 1081 745200a9cc2a
equal deleted inserted replaced
1226:de56132c008d 1227:bdac73ed481e
    12  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
    12  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
    13  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
    13  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
    14  */
    14  */
    15 
    15 
    16 if ( !defined('IN_ENANO_INSTALL') )
    16 if ( !defined('IN_ENANO_INSTALL') )
    17   die();
    17 	die();
    18 
    18 
    19 if ( isset($_POST['_cont']) )
    19 if ( isset($_POST['_cont']) )
    20 {
    20 {
    21   $allow_go = true;
    21 	$allow_go = true;
    22   // Do we have everything? If so, continue with installation.
    22 	// Do we have everything? If so, continue with installation.
    23   foreach ( array('db_host', 'db_name', 'db_user', 'db_pass', 'db_port') as $field )
    23 	foreach ( array('db_host', 'db_name', 'db_user', 'db_pass', 'db_port') as $field )
    24   {
    24 	{
    25     if ( empty($_POST[$field]) )
    25 		if ( empty($_POST[$field]) )
    26     {
    26 		{
    27       $allow_go = false;
    27 			$allow_go = false;
    28     }
    28 		}
    29   }
    29 	}
    30   if ( $allow_go )
    30 	if ( $allow_go )
    31   {
    31 	{
    32     require( ENANO_ROOT . '/install/includes/stages/database_post.php' );
    32 		require( ENANO_ROOT . '/install/includes/stages/database_post.php' );
    33     return true;
    33 		return true;
    34   }
    34 	}
    35 }
    35 }
    36 
    36 
    37 if ( isset($_POST['ajax_test']) )
    37 if ( isset($_POST['ajax_test']) )
    38 {
    38 {
    39   // Test the database connection
    39 	// Test the database connection
    40   $return = array(
    40 	$return = array(
    41       'can_install' => false,
    41 			'can_install' => false,
    42       'host_good' => true,
    42 			'host_good' => true,
    43       'creating_user' => false,
    43 			'creating_user' => false,
    44       'db_exist' => false,
    44 			'db_exist' => false,
    45       'creating_db' => false,
    45 			'creating_db' => false,
    46       'creating_db_grant' => false,
    46 			'creating_db_grant' => false,
    47       'root_fail' => false,
    47 			'root_fail' => false,
    48       'version' => array(
    48 			'version' => array(
    49         'version' => 'unknown',
    49 				'version' => 'unknown',
    50         'good' => 'indeterminate'
    50 				'good' => 'indeterminate'
    51       ),
    51 			),
    52       'last_error' => ''
    52 			'last_error' => ''
    53     );
    53 		);
    54   
    54 	
    55   if ( !isset($_POST['info']) )
    55 	if ( !isset($_POST['info']) )
    56     die();
    56 		die();
    57   
    57 	
    58   $info = $_POST['info'];
    58 	$info = $_POST['info'];
    59   
    59 	
    60   // From here on out will be JSON responses
    60 	// From here on out will be JSON responses
    61   header('Content-type: application/json');
    61 	header('Content-type: application/json');
    62   
    62 	
    63   try
    63 	try
    64   {
    64 	{
    65     $info = @enano_json_decode($info);
    65 		$info = @enano_json_decode($info);
    66   }
    66 	}
    67   catch ( Zend_Json_Exception $e )
    67 	catch ( Zend_Json_Exception $e )
    68   {
    68 	{
    69     die(enano_json_encode(array(
    69 		die(enano_json_encode(array(
    70         'mode' => 'error',
    70 				'mode' => 'error',
    71         'error' => 'Exception in JSON decoder'
    71 				'error' => 'Exception in JSON decoder'
    72       )));
    72 			)));
    73   }
    73 	}
    74   
    74 	
    75   if ( !is_int($info['db_port']) )
    75 	if ( !is_int($info['db_port']) )
    76   {
    76 	{
    77     $return['host_good'] = false;
    77 		$return['host_good'] = false;
    78     echo enano_json_encode($return);
    78 		echo enano_json_encode($return);
    79     exit;
    79 		exit;
    80   }
    80 	}
    81   
    81 	
    82   $port = $info['db_port'] ? $info['db_port'] : 5432;
    82 	$port = $info['db_port'] ? $info['db_port'] : 5432;
    83   
    83 	
    84   // Try to connect as the normal user
    84 	// Try to connect as the normal user
    85   // generate connection string
    85 	// generate connection string
    86   $conn_string = "dbname = '" . addslashes($info['db_name']) . "' port = '$port' host = '" . addslashes($info['db_host']) . "' " . 
    86 	$conn_string = "dbname = '" . addslashes($info['db_name']) . "' port = '$port' host = '" . addslashes($info['db_host']) . "' " . 
    87                  "user= '" . addslashes($info['db_user']) . "' password = '" . addslashes($info['db_pass']) . "'";
    87  								"user= '" . addslashes($info['db_user']) . "' password = '" . addslashes($info['db_pass']) . "'";
    88   $test = @pg_connect($conn_string);
    88 	$test = @pg_connect($conn_string);
    89   if ( !$test )
    89 	if ( !$test )
    90   {
    90 	{
    91     // Connection as normal user failed. PgSQL doesn't give us an error string so
    91 		// Connection as normal user failed. PgSQL doesn't give us an error string so
    92     // just try to connect as root. If even that fails, exit with an error
    92 		// just try to connect as root. If even that fails, exit with an error
    93     $return['creating_user'] = true;
    93 		$return['creating_user'] = true;
    94     if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
    94 		if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
    95     {
    95 		{
    96       $conn_string_root = "dbname = '" . addslashes($info['db_name']) . "' port = '$port' host = '" . addslashes($info['db_host']) . "' " . 
    96 			$conn_string_root = "dbname = '" . addslashes($info['db_name']) . "' port = '$port' host = '" . addslashes($info['db_host']) . "' " . 
    97                           "user= '" . addslashes($info['db_root_user']) . "' password = '" . addslashes($info['db_root_pass']) . "'";
    97 													"user= '" . addslashes($info['db_root_user']) . "' password = '" . addslashes($info['db_root_pass']) . "'";
    98       // Attempt connection as root
    98 			// Attempt connection as root
    99       $test_root = @pg_connect($conn_string_root);
    99 			$test_root = @pg_connect($conn_string_root);
   100       if ( !$test_root )
   100 			if ( !$test_root )
   101       {
   101 			{
   102         $return['root_fail'] = true;
   102 				$return['root_fail'] = true;
   103       }
   103 			}
   104       else
   104 			else
   105       {
   105 			{
   106         $return['can_install'] = true;
   106 				$return['can_install'] = true;
   107       }
   107 			}
   108     }
   108 		}
   109   }
   109 	}
   110   else
   110 	else
   111   {
   111 	{
   112     $return['can_install'] = true;
   112 		$return['can_install'] = true;
   113   }
   113 	}
   114   
   114 	
   115   $did_version_check = false;
   115 	$did_version_check = false;
   116   
   116 	
   117   if ( isset($test) && @is_resource($test) )
   117 	if ( isset($test) && @is_resource($test) )
   118   {
   118 	{
   119     $server_info = @pg_version($test);
   119 		$server_info = @pg_version($test);
   120     if ( isset($server_info['server']) )
   120 		if ( isset($server_info['server']) )
   121     {
   121 		{
   122       $did_version_check = true;
   122 			$did_version_check = true;
   123       $return['version'] = array(
   123 			$return['version'] = array(
   124           'version' => $server_info['server'],
   124 					'version' => $server_info['server'],
   125           'good' => ( version_compare($server_info['server'], '8.2.5', '>=') )
   125 					'good' => ( version_compare($server_info['server'], '8.2.5', '>=') )
   126         );
   126 				);
   127     }
   127 		}
   128     @pg_close($test);
   128 		@pg_close($test);
   129   }
   129 	}
   130   
   130 	
   131   if ( isset($test_root) && @is_resource($test_root) )
   131 	if ( isset($test_root) && @is_resource($test_root) )
   132   {
   132 	{
   133     $server_info = @pg_version($test_root);
   133 		$server_info = @pg_version($test_root);
   134     if ( isset($server_info['server']) )
   134 		if ( isset($server_info['server']) )
   135     {
   135 		{
   136       $did_version_check = true;
   136 			$did_version_check = true;
   137       $return['version'] = array(
   137 			$return['version'] = array(
   138           'version' => $server_info['server'],
   138 					'version' => $server_info['server'],
   139           'good' => ( version_compare($server_info['server'], '8.2.5', '>=') )
   139 					'good' => ( version_compare($server_info['server'], '8.2.5', '>=') )
   140         );
   140 				);
   141     }
   141 		}
   142     @pg_close($test_root);
   142 		@pg_close($test_root);
   143   }
   143 	}
   144   
   144 	
   145   if ( !$did_version_check )
   145 	if ( !$did_version_check )
   146   {
   146 	{
   147     $return['version'] = array(
   147 		$return['version'] = array(
   148         'version' => 'indeterminate',
   148 				'version' => 'indeterminate',
   149         'good' => false
   149 				'good' => false
   150       );
   150 			);
   151   }
   151 	}
   152   else
   152 	else
   153   {
   153 	{
   154     if ( !$return['version']['good'] )
   154 		if ( !$return['version']['good'] )
   155     {
   155 		{
   156       $return['can_install'] = false;
   156 			$return['can_install'] = false;
   157     }
   157 		}
   158   }
   158 	}
   159   
   159 	
   160   echo enano_json_encode($return);
   160 	echo enano_json_encode($return);
   161   
   161 	
   162   exit();
   162 	exit();
   163 }
   163 }
   164 
   164 
   165 $ui->add_header('<script type="text/javascript" src="includes/js/formutils.js"></script>');
   165 $ui->add_header('<script type="text/javascript" src="includes/js/formutils.js"></script>');
   166 $ui->show_header();
   166 $ui->show_header();
   167 
   167 
   168 ?>
   168 ?>
   169 
   169 
   170 <script type="text/javascript">
   170 <script type="text/javascript">
   171 
   171 
   172   var img_bad = '../images/checkbad.png';
   172 	var img_bad = '../images/checkbad.png';
   173   var img_good = '../images/check.png';
   173 	var img_good = '../images/check.png';
   174   var img_neu = '../images/checkunk.png';
   174 	var img_neu = '../images/checkunk.png';
   175   
   175 	
   176   var tested = false;
   176 	var tested = false;
   177 
   177 
   178   function verify(field)
   178 	function verify(field)
   179   {
   179 	{
   180     if ( tested && !field )
   180 		if ( tested && !field )
   181       return true;
   181 			return true;
   182     tested = false;
   182 		tested = false;
   183     if ( document.getElementById('verify_error').className != '' )
   183 		if ( document.getElementById('verify_error').className != '' )
   184     {
   184 		{
   185       document.getElementById('verify_error').className = '';
   185 			document.getElementById('verify_error').className = '';
   186       document.getElementById('verify_error').innerHTML = '';
   186 			document.getElementById('verify_error').innerHTML = '';
   187     }
   187 		}
   188     var frm = document.forms.database_info;
   188 		var frm = document.forms.database_info;
   189     // List of fields
   189 		// List of fields
   190     var fields = {
   190 		var fields = {
   191       db_host: frm.db_host,
   191 			db_host: frm.db_host,
   192       db_port: frm.db_port,
   192 			db_port: frm.db_port,
   193       db_name: frm.db_name,
   193 			db_name: frm.db_name,
   194       db_user: frm.db_user,
   194 			db_user: frm.db_user,
   195       db_pass: frm.db_pass,
   195 			db_pass: frm.db_pass,
   196       table_prefix: frm.table_prefix,
   196 			table_prefix: frm.table_prefix,
   197       db_root_user: frm.db_root_user,
   197 			db_root_user: frm.db_root_user,
   198       db_root_pass: frm.db_root_pass
   198 			db_root_pass: frm.db_root_pass
   199     };
   199 		};
   200     var passed = true;
   200 		var passed = true;
   201     // Main validation
   201 		// Main validation
   202     if ( field == fields.db_host || !field )
   202 		if ( field == fields.db_host || !field )
   203     {
   203 		{
   204       var matches = fields.db_host.value.match(/^([a-z0-9_-]+)((\.([a-z0-9_-]+))*)?$/);
   204 			var matches = fields.db_host.value.match(/^([a-z0-9_-]+)((\.([a-z0-9_-]+))*)?$/);
   205       document.getElementById('s_db_host').src = ( matches ) ? img_neu : img_bad;
   205 			document.getElementById('s_db_host').src = ( matches ) ? img_neu : img_bad;
   206       if ( !matches )
   206 			if ( !matches )
   207         passed = false;
   207 				passed = false;
   208     }
   208 		}
   209     if ( field == fields.db_port || !field )
   209 		if ( field == fields.db_port || !field )
   210     {
   210 		{
   211       var matches = fields.db_port.value.match(/^[0-9]+$/);
   211 			var matches = fields.db_port.value.match(/^[0-9]+$/);
   212       document.getElementById('s_db_port').src = ( matches ) ? img_neu : img_bad;
   212 			document.getElementById('s_db_port').src = ( matches ) ? img_neu : img_bad;
   213       if ( !matches )
   213 			if ( !matches )
   214         passed = false;
   214 				passed = false;
   215     }
   215 		}
   216     if ( field == fields.db_name || !field )
   216 		if ( field == fields.db_name || !field )
   217     {
   217 		{
   218       var matches = fields.db_name.value.match(/^[A-z0-9_-]+$/);
   218 			var matches = fields.db_name.value.match(/^[A-z0-9_-]+$/);
   219       document.getElementById('s_db_name').src = ( matches ) ? img_neu : img_bad;
   219 			document.getElementById('s_db_name').src = ( matches ) ? img_neu : img_bad;
   220       if ( !matches )
   220 			if ( !matches )
   221         passed = false;
   221 				passed = false;
   222     }
   222 		}
   223     if ( field == fields.db_user || field == fields.db_pass || !field )
   223 		if ( field == fields.db_user || field == fields.db_pass || !field )
   224     {
   224 		{
   225       var matches = fields.db_user.value.match(/^[A-z0-9_-]+$/);
   225 			var matches = fields.db_user.value.match(/^[A-z0-9_-]+$/);
   226       document.getElementById('s_db_auth').src = ( matches ) ? img_neu : img_bad;
   226 			document.getElementById('s_db_auth').src = ( matches ) ? img_neu : img_bad;
   227       if ( !matches )
   227 			if ( !matches )
   228         passed = false;
   228 				passed = false;
   229     }
   229 		}
   230     if ( field == fields.table_prefix || !field )
   230 		if ( field == fields.table_prefix || !field )
   231     {
   231 		{
   232       var matches = fields.table_prefix.value.match(/^[a-z0-9_]*$/);
   232 			var matches = fields.table_prefix.value.match(/^[a-z0-9_]*$/);
   233       document.getElementById('s_table_prefix').src = ( matches ) ? img_good : img_bad;
   233 			document.getElementById('s_table_prefix').src = ( matches ) ? img_good : img_bad;
   234       if ( !matches )
   234 			if ( !matches )
   235         passed = false;
   235 				passed = false;
   236     }
   236 		}
   237     if ( field == fields.db_root_user || field == fields.db_root_pass || !field )
   237 		if ( field == fields.db_root_user || field == fields.db_root_pass || !field )
   238     {
   238 		{
   239       var matches = ( ( fields.db_root_user.value.match(/^[A-z0-9_-]+$/) && fields.db_root_pass.value.match(/^.+$/) ) || fields.db_root_user.value == '' );
   239 			var matches = ( ( fields.db_root_user.value.match(/^[A-z0-9_-]+$/) && fields.db_root_pass.value.match(/^.+$/) ) || fields.db_root_user.value == '' );
   240       document.getElementById('s_db_root').src = ( matches ) ? img_neu : img_bad;
   240 			document.getElementById('s_db_root').src = ( matches ) ? img_neu : img_bad;
   241       if ( !matches )
   241 			if ( !matches )
   242         passed = false;
   242 				passed = false;
   243     }
   243 		}
   244     return passed;
   244 		return passed;
   245   }
   245 	}
   246   
   246 	
   247   function ajaxTestConnection()
   247 	function ajaxTestConnection()
   248   {
   248 	{
   249     if ( !verify() )
   249 		if ( !verify() )
   250     {
   250 		{
   251       document.body.scrollTop = 0;
   251 			document.body.scrollTop = 0;
   252       $('enano-body').effect('shake', {}, 750);
   252 			$('enano-body').effect('shake', {}, 750);
   253       document.getElementById('verify_error').className = 'error-box-mini';
   253 			document.getElementById('verify_error').className = 'error-box-mini';
   254       document.getElementById('verify_error').innerHTML = $lang.get('meta_msg_err_verification');
   254 			document.getElementById('verify_error').innerHTML = $lang.get('meta_msg_err_verification');
   255       return false;
   255 			return false;
   256     }
   256 		}
   257     install_set_ajax_loading();
   257 		install_set_ajax_loading();
   258     
   258 		
   259     var frm = document.forms.database_info;
   259 		var frm = document.forms.database_info;
   260     var connection_info = 'info=' + ajaxEscape(toJSONString({
   260 		var connection_info = 'info=' + ajaxEscape(toJSONString({
   261         db_host: frm.db_host.value,
   261 				db_host: frm.db_host.value,
   262         db_port: parseInt(frm.db_port.value),
   262 				db_port: parseInt(frm.db_port.value),
   263         db_name: frm.db_name.value,
   263 				db_name: frm.db_name.value,
   264         db_user: frm.db_user.value,
   264 				db_user: frm.db_user.value,
   265         db_pass: frm.db_pass.value,
   265 				db_pass: frm.db_pass.value,
   266         db_root_user: frm.db_root_user.value,
   266 				db_root_user: frm.db_root_user.value,
   267         db_root_pass: frm.db_root_pass.value
   267 				db_root_pass: frm.db_root_pass.value
   268       }));
   268 			}));
   269     
   269 		
   270     ajaxPost(scriptPath + '/install/install.php?stage=database', connection_info + '&driver=postgresql&ajax_test=on&language=' + enano_lang_code[ENANO_LANG_ID], function(ajax)
   270 		ajaxPost(scriptPath + '/install/install.php?stage=database', connection_info + '&driver=postgresql&ajax_test=on&language=' + enano_lang_code[ENANO_LANG_ID], function(ajax)
   271       {
   271 			{
   272         if ( ajax.readyState == 4 && ajax.status == 200 )
   272 				if ( ajax.readyState == 4 && ajax.status == 200 )
   273         {
   273 				{
   274           setTimeout('install_unset_ajax_loading();', 750);
   274 					setTimeout('install_unset_ajax_loading();', 750);
   275           // Process response
   275 					// Process response
   276           var response = String(ajax.responseText + '');
   276 					var response = String(ajax.responseText + '');
   277           if ( response.substr(0, 1) != '{' )
   277 					if ( response.substr(0, 1) != '{' )
   278           {
   278 					{
   279             alert('Received an invalid JSON response from the server.');
   279 						alert('Received an invalid JSON response from the server.');
   280             return false;
   280 						return false;
   281           }
   281 					}
   282           response = parseJSON(response);
   282 					response = parseJSON(response);
   283           document.getElementById('e_db_host').innerHTML = '';
   283 					document.getElementById('e_db_host').innerHTML = '';
   284           document.getElementById('e_db_name').innerHTML = '';
   284 					document.getElementById('e_db_name').innerHTML = '';
   285           document.getElementById('e_db_auth').innerHTML = '';
   285 					document.getElementById('e_db_auth').innerHTML = '';
   286           document.getElementById('e_db_root').innerHTML = '';
   286 					document.getElementById('e_db_root').innerHTML = '';
   287           if ( response.can_install )
   287 					if ( response.can_install )
   288           {
   288 					{
   289             tested = true;
   289 						tested = true;
   290             var statuses = ['s_db_host', 's_db_name', 's_db_auth', 's_table_prefix', 's_db_root', 's_pgsql_version'];
   290 						var statuses = ['s_db_host', 's_db_name', 's_db_auth', 's_table_prefix', 's_db_root', 's_pgsql_version'];
   291             for ( var i in statuses )
   291 						for ( var i in statuses )
   292             {
   292 						{
   293               var img = document.getElementById(statuses[i]);
   293 							var img = document.getElementById(statuses[i]);
   294               if ( img )
   294 							if ( img )
   295                 img.src = img_good;
   295 								img.src = img_good;
   296             }
   296 						}
   297             document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_info_version_good');
   297 						document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_info_version_good');
   298             document.getElementById('verify_error').className = 'info-box-mini';
   298 						document.getElementById('verify_error').className = 'info-box-mini';
   299             document.getElementById('verify_error').innerHTML = $lang.get('dbpgsql_msg_test_success');
   299 						document.getElementById('verify_error').innerHTML = $lang.get('dbpgsql_msg_test_success');
   300             if ( response.creating_db )
   300 						if ( response.creating_db )
   301             {
   301 						{
   302               document.getElementById('e_db_name').innerHTML = $lang.get('dbpgsql_msg_warn_creating_db');
   302 							document.getElementById('e_db_name').innerHTML = $lang.get('dbpgsql_msg_warn_creating_db');
   303             }
   303 						}
   304             if ( response.creating_user )
   304 						if ( response.creating_user )
   305             {
   305 						{
   306               document.getElementById('e_db_auth').innerHTML = $lang.get('dbpgsql_msg_warn_creating_user');
   306 							document.getElementById('e_db_auth').innerHTML = $lang.get('dbpgsql_msg_warn_creating_user');
   307             }
   307 						}
   308           }
   308 					}
   309           else
   309 					else
   310           {
   310 					{
   311             // Oh dear, oh dear, oh dear, oh dear, oh dear...
   311 						// Oh dear, oh dear, oh dear, oh dear, oh dear...
   312             if ( response.creating_db )
   312 						if ( response.creating_db )
   313             {
   313 						{
   314               document.getElementById('e_db_name').innerHTML = $lang.get('dbpgsql_msg_err_dbexist', { pg_error: response.last_error });
   314 							document.getElementById('e_db_name').innerHTML = $lang.get('dbpgsql_msg_err_dbexist', { pg_error: response.last_error });
   315               document.getElementById('s_db_name').src = img_bad;
   315 							document.getElementById('s_db_name').src = img_bad;
   316             }
   316 						}
   317             if ( response.creating_user )
   317 						if ( response.creating_user )
   318             {
   318 						{
   319               document.getElementById('e_db_auth').innerHTML = $lang.get('dbpgsql_msg_err_auth', { pg_error: response.last_error });
   319 							document.getElementById('e_db_auth').innerHTML = $lang.get('dbpgsql_msg_err_auth', { pg_error: response.last_error });
   320               document.getElementById('s_db_auth').src = img_bad;
   320 							document.getElementById('s_db_auth').src = img_bad;
   321             }
   321 						}
   322             if ( !response.host_good )
   322 						if ( !response.host_good )
   323             {
   323 						{
   324               document.getElementById('e_db_host').innerHTML = $lang.get('dbpgsql_msg_err_connect', { db_host: frm.db_host.value, pg_error: response.last_error });
   324 							document.getElementById('e_db_host').innerHTML = $lang.get('dbpgsql_msg_err_connect', { db_host: frm.db_host.value, pg_error: response.last_error });
   325               document.getElementById('s_db_host').src = img_bad;
   325 							document.getElementById('s_db_host').src = img_bad;
   326             }
   326 						}
   327             if ( !response.version.good )
   327 						if ( !response.version.good )
   328             {
   328 						{
   329               if ( response.version.version == 'indeterminate' )
   329 							if ( response.version.version == 'indeterminate' )
   330                 document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_warn_pg_version');
   330 								document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_warn_pg_version');
   331               else
   331 							else
   332                 document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_err_version', { pg_version: response.version.version });
   332 								document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_err_version', { pg_version: response.version.version });
   333               document.getElementById('s_pgsql_version').src = img_bad;
   333 							document.getElementById('s_pgsql_version').src = img_bad;
   334             }
   334 						}
   335           }
   335 					}
   336         }
   336 				}
   337       });
   337 			});
   338   }
   338 	}
   339 
   339 
   340 </script>
   340 </script>
   341 
   341 
   342 <form action="install.php?stage=database" method="post" name="database_info">
   342 <form action="install.php?stage=database" method="post" name="database_info">
   343 <input type="hidden" name="language" value="<?php echo $lang_id; ?>" />
   343 <input type="hidden" name="language" value="<?php echo $lang_id; ?>" />
   344 <input type="hidden" name="driver" value="postgresql" />
   344 <input type="hidden" name="driver" value="postgresql" />
   345 
   345 
   346 <table border="0" cellspacing="0" cellpadding="10" width="100%">
   346 <table border="0" cellspacing="0" cellpadding="10" width="100%">
   347   <tr>
   347 	<tr>
   348     <td colspan="3" style="text-align: center">
   348 		<td colspan="3" style="text-align: center">
   349       <h3><?php echo $lang->get('dbpgsql_table_title'); ?></h3>
   349 			<h3><?php echo $lang->get('dbpgsql_table_title'); ?></h3>
   350     </td>
   350 		</td>
   351   </tr>
   351 	</tr>
   352   <tr>
   352 	<tr>
   353     <td>
   353 		<td>
   354       <b><?php echo $lang->get('dbpgsql_field_hostname_title'); ?></b>
   354 			<b><?php echo $lang->get('dbpgsql_field_hostname_title'); ?></b>
   355       <br /><?php echo $lang->get('dbpgsql_field_hostname_body'); ?>
   355 			<br /><?php echo $lang->get('dbpgsql_field_hostname_body'); ?>
   356       <br /><span style="color: #993300" id="e_db_host"></span>
   356 			<br /><span style="color: #993300" id="e_db_host"></span>
   357     </td>
   357 		</td>
   358     <td>
   358 		<td>
   359       <input onkeyup="verify(this);" tabindex="1" name="db_host" size="30" type="text" />
   359 			<input onkeyup="verify(this);" tabindex="1" name="db_host" size="30" type="text" />
   360     </td>
   360 		</td>
   361     <td>
   361 		<td>
   362       <img id="s_db_host" alt="Good/bad icon" src="../images/checkbad.png" />
   362 			<img id="s_db_host" alt="Good/bad icon" src="../images/checkbad.png" />
   363     </td>
   363 		</td>
   364   </tr>
   364 	</tr>
   365   <tr>
   365 	<tr>
   366     <td>
   366 		<td>
   367       <b><?php echo $lang->get('dbpgsql_field_port_title'); ?></b>
   367 			<b><?php echo $lang->get('dbpgsql_field_port_title'); ?></b>
   368       <br /><?php echo $lang->get('dbpgsql_field_port_body'); ?>
   368 			<br /><?php echo $lang->get('dbpgsql_field_port_body'); ?>
   369       <br /><span style="color: #993300" id="e_db_port"></span>
   369 			<br /><span style="color: #993300" id="e_db_port"></span>
   370     </td>
   370 		</td>
   371     <td>
   371 		<td>
   372       <input onkeyup="verify(this);" tabindex="2" name="db_port" size="5" type="text" value="5432" />
   372 			<input onkeyup="verify(this);" tabindex="2" name="db_port" size="5" type="text" value="5432" />
   373     </td>
   373 		</td>
   374     <td>
   374 		<td>
   375       <img id="s_db_port" alt="Good/bad icon" src="../images/checkbad.png" />
   375 			<img id="s_db_port" alt="Good/bad icon" src="../images/checkbad.png" />
   376     </td>
   376 		</td>
   377   </tr>
   377 	</tr>
   378   <tr>
   378 	<tr>
   379     <td>
   379 		<td>
   380       <b><?php echo $lang->get('dbpgsql_field_dbname_title'); ?></b><br />
   380 			<b><?php echo $lang->get('dbpgsql_field_dbname_title'); ?></b><br />
   381       <?php echo $lang->get('dbpgsql_field_dbname_body'); ?><br />
   381 			<?php echo $lang->get('dbpgsql_field_dbname_body'); ?><br />
   382       <span style="color: #993300" id="e_db_name"></span>
   382 			<span style="color: #993300" id="e_db_name"></span>
   383     </td>
   383 		</td>
   384     <td>
   384 		<td>
   385       <input onkeyup="verify(this);" tabindex="2" name="db_name" size="30" type="text" />
   385 			<input onkeyup="verify(this);" tabindex="2" name="db_name" size="30" type="text" />
   386     </td>
   386 		</td>
   387     <td>
   387 		<td>
   388       <img id="s_db_name" alt="Good/bad icon" src="../images/checkbad.png" />
   388 			<img id="s_db_name" alt="Good/bad icon" src="../images/checkbad.png" />
   389     </td>
   389 		</td>
   390   </tr>
   390 	</tr>
   391   <tr>
   391 	<tr>
   392     <td>
   392 		<td>
   393       <b><?php echo $lang->get('dbpgsql_field_dbauth_title'); ?></b><br />
   393 			<b><?php echo $lang->get('dbpgsql_field_dbauth_title'); ?></b><br />
   394       <?php echo $lang->get('dbpgsql_field_dbauth_body'); ?><br />
   394 			<?php echo $lang->get('dbpgsql_field_dbauth_body'); ?><br />
   395       <span style="color: #993300" id="e_db_auth"></span>
   395 			<span style="color: #993300" id="e_db_auth"></span>
   396     </td>
   396 		</td>
   397     <td>
   397 		<td>
   398       <input onkeyup="verify(this);" tabindex="3" name="db_user" size="30" type="text" /><br />
   398 			<input onkeyup="verify(this);" tabindex="3" name="db_user" size="30" type="text" /><br />
   399       <br />
   399 			<br />
   400       <input name="db_pass" size="30" tabindex="4" type="password" />
   400 			<input name="db_pass" size="30" tabindex="4" type="password" />
   401     </td>
   401 		</td>
   402     <td>
   402 		<td>
   403       <img id="s_db_auth" alt="Good/bad icon" src="../images/checkbad.png" />
   403 			<img id="s_db_auth" alt="Good/bad icon" src="../images/checkbad.png" />
   404     </td>
   404 		</td>
   405   </tr>
   405 	</tr>
   406   <tr>
   406 	<tr>
   407     <td colspan="3" style="text-align: center">
   407 		<td colspan="3" style="text-align: center">
   408       <h3><?php echo $lang->get('database_heading_optionalinfo'); ?></h3>
   408 			<h3><?php echo $lang->get('database_heading_optionalinfo'); ?></h3>
   409     </td>
   409 		</td>
   410   </tr>
   410 	</tr>
   411   <tr>
   411 	<tr>
   412     <td>
   412 		<td>
   413       <b><?php echo $lang->get('dbpgsql_field_tableprefix_title'); ?></b><br />
   413 			<b><?php echo $lang->get('dbpgsql_field_tableprefix_title'); ?></b><br />
   414       <?php echo $lang->get('dbpgsql_field_tableprefix_body'); ?>
   414 			<?php echo $lang->get('dbpgsql_field_tableprefix_body'); ?>
   415     </td>
   415 		</td>
   416     <td>
   416 		<td>
   417       <input onkeyup="verify(this);" tabindex="5" name="table_prefix" size="30" type="text" />
   417 			<input onkeyup="verify(this);" tabindex="5" name="table_prefix" size="30" type="text" />
   418     </td>
   418 		</td>
   419     <td>
   419 		<td>
   420       <img id="s_table_prefix" alt="Good/bad icon" src="../images/check.png" />
   420 			<img id="s_table_prefix" alt="Good/bad icon" src="../images/check.png" />
   421     </td>
   421 		</td>
   422   </tr>
   422 	</tr>
   423   <tr>
   423 	<tr>
   424     <td>
   424 		<td>
   425       <b><?php echo $lang->get('dbpgsql_field_rootauth_title'); ?></b><br />
   425 			<b><?php echo $lang->get('dbpgsql_field_rootauth_title'); ?></b><br />
   426       <?php echo $lang->get('dbpgsql_field_rootauth_body'); ?><br />
   426 			<?php echo $lang->get('dbpgsql_field_rootauth_body'); ?><br />
   427       <span style="color: #993300" id="e_db_root"></span>
   427 			<span style="color: #993300" id="e_db_root"></span>
   428     </td>
   428 		</td>
   429     <td>
   429 		<td>
   430       <input onkeyup="verify(this);" tabindex="6" name="db_root_user" size="30" type="text" /><br />
   430 			<input onkeyup="verify(this);" tabindex="6" name="db_root_user" size="30" type="text" /><br />
   431       <br />
   431 			<br />
   432       <input onkeyup="verify(this);" tabindex="7" name="db_root_pass" size="30" type="password" />
   432 			<input onkeyup="verify(this);" tabindex="7" name="db_root_pass" size="30" type="password" />
   433     </td>
   433 		</td>
   434     <td>
   434 		<td>
   435       <img id="s_db_root" alt="Good/bad icon" src="../images/check.png" />
   435 			<img id="s_db_root" alt="Good/bad icon" src="../images/check.png" />
   436     </td>
   436 		</td>
   437   </tr>
   437 	</tr>
   438   <tr>
   438 	<tr>
   439     <td>
   439 		<td>
   440       <b><?php echo $lang->get('dbpgsql_field_pgsqlversion_title'); ?></b>
   440 			<b><?php echo $lang->get('dbpgsql_field_pgsqlversion_title'); ?></b>
   441     </td>
   441 		</td>
   442     <td id="e_pgsql_version">
   442 		<td id="e_pgsql_version">
   443       <?php echo $lang->get('dbpgsql_field_pgsqlversion_blurb_willbechecked'); ?>
   443 			<?php echo $lang->get('dbpgsql_field_pgsqlversion_blurb_willbechecked'); ?>
   444     </td>
   444 		</td>
   445     <td>
   445 		<td>
   446       <img id="s_pgsql_version" alt="Good/bad icon" src="../images/checkunk.png" />
   446 			<img id="s_pgsql_version" alt="Good/bad icon" src="../images/checkunk.png" />
   447     </td>
   447 		</td>
   448   </tr>
   448 	</tr>
   449   <tr>
   449 	<tr>
   450     <td>
   450 		<td>
   451       <b><?php echo $lang->get('dbpgsql_field_droptables_title'); ?></b><br />
   451 			<b><?php echo $lang->get('dbpgsql_field_droptables_title'); ?></b><br />
   452       <?php echo $lang->get('dbpgsql_field_droptables_body'); ?>
   452 			<?php echo $lang->get('dbpgsql_field_droptables_body'); ?>
   453     </td>
   453 		</td>
   454     <td colspan="2">
   454 		<td colspan="2">
   455       <input type="checkbox" tabindex="8" name="drop_tables" id="dtcheck" />  <label for="dtcheck"><?php echo $lang->get('dbpgsql_field_droptables_lbl'); ?></label>
   455 			<input type="checkbox" tabindex="8" name="drop_tables" id="dtcheck" />  <label for="dtcheck"><?php echo $lang->get('dbpgsql_field_droptables_lbl'); ?></label>
   456     </td>
   456 		</td>
   457   </tr>
   457 	</tr>
   458   <tr>
   458 	<tr>
   459     <td colspan="3" style="text-align: center">
   459 		<td colspan="3" style="text-align: center">
   460       <input type="button" value="<?php echo $lang->get('dbpgsql_btn_testconnection'); ?>" onclick="ajaxTestConnection();" />
   460 			<input type="button" value="<?php echo $lang->get('dbpgsql_btn_testconnection'); ?>" onclick="ajaxTestConnection();" />
   461       <div id="verify_error"></div>
   461 			<div id="verify_error"></div>
   462     </td>
   462 		</td>
   463   </tr>
   463 	</tr>
   464 
   464 
   465 </table>
   465 </table>
   466 
   466 
   467 <table border="0">
   467 <table border="0">
   468   <tr>
   468 	<tr>
   469     <td>
   469 		<td>
   470       <input type="submit" tabindex="9" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
   470 			<input type="submit" tabindex="9" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
   471     </td>
   471 		</td>
   472     <td>
   472 		<td>
   473       <p>
   473 			<p>
   474         <span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
   474 				<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
   475         &bull; <?php echo $lang->get('database_objective_test'); ?><br />
   475 				&bull; <?php echo $lang->get('database_objective_test'); ?><br />
   476         &bull; <?php echo $lang->get('database_objective_uncrypt'); ?>
   476 				&bull; <?php echo $lang->get('database_objective_uncrypt'); ?>
   477       </p>
   477 			</p>
   478     </td>
   478 		</td>
   479   </tr>
   479 	</tr>
   480 </table>
   480 </table>
   481 
   481 
   482 </form>
   482 </form>
   483 
   483 
   484 <script type="text/javascript">
   484 <script type="text/javascript">
   485   verify();
   485 	verify();
   486 </script>
   486 </script>
   487 
   487