forked from extern/egroupware
move @/enviroment support from class-variables to local ones, to re-evaluate them on each request, class vars are stored in session
This commit is contained in:
parent
78440b91ce
commit
0bbced7df2
@ -347,11 +347,6 @@ class egw_db
|
|||||||
{
|
{
|
||||||
$this->Type = $GLOBALS['egw_info']['server']['db_type'];
|
$this->Type = $GLOBALS['egw_info']['server']['db_type'];
|
||||||
}
|
}
|
||||||
foreach(array('Database', 'Host', 'Port', 'User', 'Type') as $var)
|
|
||||||
{
|
|
||||||
$val = (string)$this->$var;
|
|
||||||
if ($val[0] === '@') $this->$var = getenv(substr($val, 1));
|
|
||||||
}
|
|
||||||
// on connection failure re-try with an other host
|
// on connection failure re-try with an other host
|
||||||
// remembering in session which host we used last time
|
// remembering in session which host we used last time
|
||||||
$use_host_from_session = true;
|
$use_host_from_session = true;
|
||||||
@ -420,7 +415,7 @@ class egw_db
|
|||||||
*/
|
*/
|
||||||
public function get_host($next = false)
|
public function get_host($next = false)
|
||||||
{
|
{
|
||||||
$hosts = explode(';', $this->Host);
|
$hosts = explode(';', $this->Host[0] == '@' ? getenv(substr($this->Host, 1)) : $this->Host);
|
||||||
$num_hosts = count($hosts);
|
$num_hosts = count($hosts);
|
||||||
$n =& egw_cache::getSession(__CLASS__, $this->Host);
|
$n =& egw_cache::getSession(__CLASS__, $this->Host);
|
||||||
if (!isset($n)) $n = 0;
|
if (!isset($n)) $n = 0;
|
||||||
@ -449,43 +444,45 @@ class egw_db
|
|||||||
{
|
{
|
||||||
if (!$this->Link_ID)
|
if (!$this->Link_ID)
|
||||||
{
|
{
|
||||||
foreach(array('Database','User','Password') as $name)
|
$Database = $User = $Password = $Port = $Type = '';
|
||||||
|
foreach(array('Database','User','Password','Port','Type') as $name)
|
||||||
{
|
{
|
||||||
$$name = $this->$name;
|
$$name = $this->$name;
|
||||||
|
if (${$name}[0] == '@' && $name != 'Password') $$name = getenv(substr($$name, 1));
|
||||||
}
|
}
|
||||||
$this->setupType = $php_extension = $type = $this->Type;
|
$this->setupType = $php_extension = $Type;
|
||||||
|
|
||||||
switch($this->Type) // convert to ADO db-type-names
|
switch($Type) // convert to ADO db-type-names
|
||||||
{
|
{
|
||||||
case 'pgsql':
|
case 'pgsql':
|
||||||
$type = 'postgres'; // name in ADOdb
|
$type = 'postgres'; // name in ADOdb
|
||||||
// create our own pgsql connection-string, to allow unix domain soccets if !$Host
|
// create our own pgsql connection-string, to allow unix domain soccets if !$Host
|
||||||
$Host = "dbname=$this->Database".($Host ? " host=$Host".($this->Port ? " port=$this->Port" : '') : '').
|
$Host = "dbname=$Database".($Host ? " host=$Host".($Port ? " port=$Port" : '') : '').
|
||||||
" user=$this->User".($this->Password ? " password='".addslashes($this->Password)."'" : '');
|
" user=$User".($Password ? " password='".addslashes($Password)."'" : '');
|
||||||
$User = $Password = $Database = ''; // to indicate $Host is a connection-string
|
$User = $Password = $Database = ''; // to indicate $Host is a connection-string
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'odbc_mssql':
|
case 'odbc_mssql':
|
||||||
$php_extension = 'odbc';
|
$php_extension = 'odbc';
|
||||||
$this->Type = 'mssql';
|
$Type = 'mssql';
|
||||||
// fall through
|
// fall through
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
if ($this->Port) $Host .= ','.$this->Port;
|
if ($Port) $Host .= ','.$Port;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'odbc_oracle':
|
case 'odbc_oracle':
|
||||||
$php_extension = 'odbc';
|
$php_extension = 'odbc';
|
||||||
$this->Type = 'oracle';
|
$Type = 'oracle';
|
||||||
break;
|
break;
|
||||||
case 'oracle':
|
case 'oracle':
|
||||||
$php_extension = $type = 'oci8';
|
$php_extension = $Type = 'oci8';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'sapdb':
|
case 'sapdb':
|
||||||
$this->Type = 'maxdb';
|
$Type = 'maxdb';
|
||||||
// fall through
|
// fall through
|
||||||
case 'maxdb':
|
case 'maxdb':
|
||||||
$type ='sapdb'; // name in ADOdb
|
$Type ='sapdb'; // name in ADOdb
|
||||||
$php_extension = 'odbc';
|
$php_extension = 'odbc';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -493,10 +490,10 @@ class egw_db
|
|||||||
$php_extension = 'mysql'; // you can use $this->setupType to determine if it's mysqlt or mysql
|
$php_extension = 'mysql'; // you can use $this->setupType to determine if it's mysqlt or mysql
|
||||||
// fall through
|
// fall through
|
||||||
case 'mysqli':
|
case 'mysqli':
|
||||||
$this->Type = 'mysql';
|
$this->Type = 'mysql'; // need to be "mysql", so apps can check just for "mysql"!
|
||||||
// fall through
|
// fall through
|
||||||
default:
|
default:
|
||||||
if ($this->Port) $Host .= ':'.$this->Port;
|
if ($Port) $Host .= ':'.$Port;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!isset($GLOBALS['egw']->ADOdb) || // we have no connection so far
|
if (!isset($GLOBALS['egw']->ADOdb) || // we have no connection so far
|
||||||
@ -519,10 +516,10 @@ class egw_db
|
|||||||
{
|
{
|
||||||
$this->privat_Link_ID = True; // remember that we use a privat Link_ID for disconnect
|
$this->privat_Link_ID = True; // remember that we use a privat Link_ID for disconnect
|
||||||
}
|
}
|
||||||
$this->Link_ID = ADONewConnection($type);
|
$this->Link_ID = ADONewConnection($Type);
|
||||||
if (!$this->Link_ID)
|
if (!$this->Link_ID)
|
||||||
{
|
{
|
||||||
throw new egw_exception_db_connection("No ADOdb support for '$type' ($this->Type) !!!");
|
throw new egw_exception_db_connection("No ADOdb support for '$Type' ($this->Type) !!!");
|
||||||
}
|
}
|
||||||
$connect = $GLOBALS['egw_info']['server']['db_persistent'] ? 'PConnect' : 'Connect';
|
$connect = $GLOBALS['egw_info']['server']['db_persistent'] ? 'PConnect' : 'Connect';
|
||||||
if (($Ok = $this->Link_ID->$connect($Host, $User, $Password, $Database)))
|
if (($Ok = $this->Link_ID->$connect($Host, $User, $Password, $Database)))
|
||||||
@ -538,12 +535,12 @@ class egw_db
|
|||||||
if ($this->Debug)
|
if ($this->Debug)
|
||||||
{
|
{
|
||||||
echo function_backtrace();
|
echo function_backtrace();
|
||||||
echo "<p>new ADOdb connection to $this->Type://$this->Host/$this->Database: Link_ID".($this->Link_ID === $GLOBALS['egw']->ADOdb ? '===' : '!==')."\$GLOBALS[egw]->ADOdb</p>";
|
echo "<p>new ADOdb connection to $Type://$Host/$Database: Link_ID".($this->Link_ID === $GLOBALS['egw']->ADOdb ? '===' : '!==')."\$GLOBALS[egw]->ADOdb</p>";
|
||||||
//echo "<p>".print_r($this->Link_ID->ServerInfo(),true)."</p>\n";
|
//echo "<p>".print_r($this->Link_ID->ServerInfo(),true)."</p>\n";
|
||||||
_debug_array($this);
|
_debug_array($this);
|
||||||
echo "\$GLOBALS[egw]->db="; _debug_array($GLOBALS[egw]->db);
|
echo "\$GLOBALS[egw]->db="; _debug_array($GLOBALS[egw]->db);
|
||||||
}
|
}
|
||||||
if ($this->Type == 'mssql')
|
if ($Type == 'mssql')
|
||||||
{
|
{
|
||||||
// this is the format ADOdb expects
|
// this is the format ADOdb expects
|
||||||
$this->Link_ID->Execute('SET DATEFORMAT ymd');
|
$this->Link_ID->Execute('SET DATEFORMAT ymd');
|
||||||
@ -560,8 +557,8 @@ class egw_db
|
|||||||
}
|
}
|
||||||
if (!$this->Link_ID->isConnected() && !$this->Link_ID->Connect())
|
if (!$this->Link_ID->isConnected() && !$this->Link_ID->Connect())
|
||||||
{
|
{
|
||||||
$Host = preg_replace('/password=[^ ]+/','password=$Password',$this->Host); // eg. postgres dsn contains password
|
$Host = preg_replace('/password=[^ ]+/','password=$Password',$Host); // eg. postgres dsn contains password
|
||||||
throw new egw_exception_db_connection("ADOdb::$connect($Host, $this->User, \$Password, $this->Database) reconnect failed.");
|
throw new egw_exception_db_connection("ADOdb::$connect($Host, $User, \$Password, $Database) reconnect failed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($new_connection)
|
if ($new_connection)
|
||||||
|
Loading…
Reference in New Issue
Block a user