Initial PostgreSQL support

remotes/origin/stable
Robin Appelman 14 years ago
parent 7503ad139b
commit a9fd0c67b4

@ -304,18 +304,18 @@
<field>
<name>user_id</name>
<type>text</type>
<type>integer</type>
<default></default>
<notnull>true</notnull>
<length>64</length>
<length>4</length>
</field>
<field>
<name>group_id</name>
<type>text</type>
<type>integer</type>
<default></default>
<notnull>true</notnull>
<length>64</length>
<length>4</length>
</field>
</declaration>

@ -353,6 +353,14 @@ class OC_DB {
'hostspec' => $CONFIG_DBHOST,
'database' => $CONFIG_DBNAME,
);
}elseif($CONFIG_DBTYPE=='pgsql'){
$dsn = array(
'phptype' => 'pgsql',
'username' => $CONFIG_DBUSER,
'password' => $CONFIG_DBPASSWORD,
'hostspec' => $CONFIG_DBHOST,
'database' => $CONFIG_DBNAME,
);
}
self::$DBConnection=&MDB2::factory($dsn,$options);
if (@PEAR::isError(self::$DBConnection)) {
@ -378,6 +386,8 @@ class OC_DB {
OC_DB::connect();
if($CONFIG_DBTYPE=='sqlite'){//fix differences between sql versions
$cmd=str_replace('`','',$cmd);
}elseif($CONFIG_DBTYPE=='pgsql'){
$cmd=str_replace('`','"',$cmd);
}
$result=self::$DBConnection->query($cmd);
if (PEAR::isError($result)) {
@ -396,7 +406,19 @@ class OC_DB {
*/
static function select($cmd){
OC_DB::connect();
return self::$DBConnection->queryAll($cmd);
global $CONFIG_DBTYPE;
if($CONFIG_DBTYPE=='sqlite'){//fix differences between sql versions
$cmd=str_replace('`','',$cmd);
}elseif($CONFIG_DBTYPE=='pgsql'){
$cmd=str_replace('`','"',$cmd);
}
$result=self::$DBConnection->queryAll($cmd);
if (PEAR::isError($result)) {
$entry='DB Error: "'.$result->getMessage().'"<br />';
$entry.='Offending command was: '.$cmd.'<br />';
die($entry);
}
return $result;
}
/**

@ -184,13 +184,13 @@ class OC_CONFIG{
//create/fill database
$CONFIG_DBTYPE=$dbtype;
$CONFIG_DBNAME=$_POST['dbname'];
if($dbtype=='mysql'){
if($dbtype!='sqlite'){
$CONFIG_DBHOST=$_POST['dbhost'];
$CONFIG_DBUSER=$_POST['dbuser'];
$CONFIG_DBPASSWORD=$_POST['dbpassword'];
}
try{
if(isset($_POST['createdatabase']) and $CONFIG_DBTYPE=='mysql'){
if(isset($_POST['createdatabase']) and $CONFIG_DBTYPE!='sqlite'){
self::createdatabase($_POST['dbadminuser'],$_POST['dbadminpwd']);
}
}catch(Exception $e){
@ -241,7 +241,7 @@ class OC_CONFIG{
$config.='$CONFIG_DATEFORMAT=\''.$_POST['dateformat']."';\n";
$config.='$CONFIG_DBTYPE=\''.$dbtype."';\n";
$config.='$CONFIG_DBNAME=\''.$_POST['dbname']."';\n";
if($dbtype=='mysql'){
if($dbtype!='sqlite'){
$config.='$CONFIG_DBHOST=\''.$_POST['dbhost']."';\n";
$config.='$CONFIG_DBUSER=\''.$_POST['dbuser']."';\n";
$config.='$CONFIG_DBPASSWORD=\''.$_POST['dbpassword']."';\n";
@ -290,34 +290,49 @@ class OC_CONFIG{
global $CONFIG_DBNAME;
global $CONFIG_DBUSER;
global $CONFIG_DBPWD;
global $CONFIG_DBTYPE;
//we cant user OC_BD functions here because we need to connect as the administrative user.
$connection = @new mysqli($CONFIG_DBHOST, $adminUser, $adminPwd);
if (mysqli_connect_errno()) {
@ob_end_clean();
echo('<html><head></head><body bgcolor="#F0F0F0"><br /><br /><center><b>can not connect to database as administrative user.</center></body></html>');
exit();
}
$query="SELECT user FROM mysql.user WHERE user='{$_POST['dbuser']}';";
$result = @$connection->query($query);
if (!$result) {
$entry='DB Error: "'.$connection->error.'"<br />';
$entry.='Offending command was: '.$query.'<br />';
echo($entry);
}
if($result->num_rows==0){
$query="CREATE USER '{$_POST['dbuser']}' IDENTIFIED BY '{$_POST['dbpassword']}';";
}else{
$query='';
}
$query.="CREATE DATABASE IF NOT EXISTS `{$_POST['dbname']}`;
GRANT ALL PRIVILEGES ON `{$_POST['dbname']}` . * TO '{$_POST['dbuser']}';";
$result = @$connection->multi_query($query);
if (!$result) {
$entry='DB Error: "'.$connection->error.'"<br />';
$entry.='Offending command was: '.$query.'<br />';
echo($entry);
if($CONFIG_DBTYPE=='mysql'){
$connection = @new mysqli($CONFIG_DBHOST, $adminUser, $adminPwd);
if (mysqli_connect_errno()) {
@ob_end_clean();
echo('<html><head></head><body bgcolor="#F0F0F0"><br /><br /><center><b>can not connect to database as administrative user.</center></body></html>');
exit();
}
$query="SELECT user FROM mysql.user WHERE user='{$_POST['dbuser']}';";
$result = @$connection->query($query);
if (!$result) {
$entry='DB Error: "'.$connection->error.'"<br />';
$entry.='Offending command was: '.$query.'<br />';
echo($entry);
}
if($result->num_rows==0){
$query="CREATE USER '{$_POST['dbuser']}' IDENTIFIED BY '{$_POST['dbpassword']}';";
}else{
$query='';
}
$query.="CREATE DATABASE IF NOT EXISTS `{$_POST['dbname']}`;";
$query.="GRANT ALL PRIVILEGES ON `{$_POST['dbname']}` . * TO '{$_POST['dbuser']}';";
$result = @$connection->multi_query($query);
if (!$result) {
$entry='DB Error: "'.$connection->error.'"<br />';
$entry.='Offending command was: '.$query.'<br />';
echo($entry);
}
$connection->close();
}elseif($CONFIG_DBTYPE=='pgsql'){
$connection = pg_connect("user='$adminUser' host='$CONFIG_DBHOST' password='$adminPwd'");
$query="CREATE USER {$_POST['dbuser']} WITH PASSWORD '{$_POST['dbpassword']}' CREATEDB;";
$result = pg_exec($connection, $query);
$query="select count(*) from pg_catalog.pg_database where datname = '{$_POST['dbname']}';";
$result = pg_exec($connection, $query);
if(pg_result($result,0,0)==0){
$query="CREATE DATABASE {$_POST['dbname']};";
$result = pg_exec($connection, $query);
$query="ALTER DATABASE {$_POST['dbname']} OWNER TO {$_POST['dbuser']};";
$result = pg_exec($connection, $query);
}
}
$connection->close();
}
}
?>

@ -48,7 +48,7 @@ class OC_LOG {
* @param message $message
*/
public static function event($user,$type,$message){
$result = OC_DB::query('insert into log (timestamp,user,type,message) values ("'.time().'","'.addslashes($user).'","'.addslashes($type).'","'.addslashes($message).'")');
$result = OC_DB::query('INSERT INTO `log` (`timestamp`,`user`,`type`,`message`) VALUES ('.time().',\''.addslashes($user).'\','.addslashes($type).',\''.addslashes($message).'\');');
OC_DB::free_result($result);
}
@ -62,10 +62,10 @@ class OC_LOG {
echo('<div class="center"><table cellpadding="6" cellspacing="0" border="0" class="log">');
if(OC_USER::ingroup($_SESSION['username_clean'],'admin')){
$result = OC_DB::select('select timestamp,user,type,message from log order by timestamp desc limit 20');
$result = OC_DB::select('select `timestamp`,`user`,`type`,`message` from log order by timestamp desc limit 20');
}else{
$user=$_SESSION['username_clean'];
$result = OC_DB::select('select timestamp,user,type,message from log where user=\''.$user.'\' order by timestamp desc limit 20');
$result = OC_DB::select('select `timestamp`,`user`,`type`,`message` from log where user=\''.$user.'\' order by timestamp desc limit 20');
}
foreach($result as $entry){
echo('<tr class="browserline">');

@ -58,11 +58,11 @@ class OC_USER {
if(OC_USER::getuserid($username)!=0){
return false;
}else{
$password=sha1($password);
$usernameclean=strtolower($username);
$password=sha1($password);
$username=OC_DB::escape($username);
$usernameclean=OC_DB::escape($usernameclean);
$query="INSERT INTO `users` (`user_id` ,`user_name` ,`user_name_clean` ,`user_password`) VALUES (NULL , '$username', '$usernameclean', '$password')";
$query="INSERT INTO `users` (`user_name` ,`user_name_clean` ,`user_password`) VALUES ('$username', '$usernameclean', '$password')";
$result=OC_DB::query($query);
return ($result)?true:false;
}
@ -118,7 +118,7 @@ class OC_USER {
public static function creategroup($groupname){
if(OC_USER::getgroupid($groupname)==0){
$groupname=OC_DB::escape($groupname);
$query="INSERT INTO `groups` (`group_id` ,`group_name`) VALUES (NULL , '$groupname')";
$query="INSERT INTO `groups` (`group_name`) VALUES ('$groupname')";
$result=OC_DB::query($query);
return ($result)?true:false;
}else{
@ -132,7 +132,6 @@ class OC_USER {
*/
public static function getuserid($username){
$usernameclean=strtolower($username);
$username=OC_DB::escape($username);
$usernameclean=OC_DB::escape($usernameclean);
$query="SELECT user_id FROM users WHERE user_name_clean = '$usernameclean'";
$result=OC_DB::select($query);
@ -187,7 +186,7 @@ class OC_USER {
$userid=OC_USER::getuserid($username);
$groupid=OC_USER::getgroupid($groupname);
if($groupid>0 and $userid>0){
$query="SELECT user_group_id FROM user_group WHERE group_id = $groupid AND user_id = $userid LIMIT 1";
$query="SELECT * FROM user_group WHERE group_id = '$groupid' AND user_id = '$userid';";
$result=OC_DB::select($query);
if(isset($result[0]) && isset($result[0]['user_group_id'])){
return true;
@ -208,7 +207,7 @@ class OC_USER {
$userid=OC_USER::getuserid($username);
$groupid=OC_USER::getgroupid($groupname);
if($groupid!=0 and $userid!=0){
$query="INSERT INTO `user_group` (`user_group_id` ,`user_id` ,`group_id`) VALUES (NULL , '$userid', '$groupid');";
$query="INSERT INTO `user_group` (`user_id` ,`group_id`) VALUES ('$userid', '$groupid');";
$result=OC_DB::query($query);
if($result){
return true;

@ -37,7 +37,7 @@ function dbtypechange(){
element.style.display='none';
}
}
}else if(type=='mysql'){
}else if(type=='mysql' || type=='pgsql'){
for(i in inputs){
id=inputs[i];
element=document.getElementById(id);
@ -80,24 +80,36 @@ if($FIRSTRUN){?>
<select id='dbtype' name="dbtype" onchange='dbtypechange()'>
<?php
global $CONFIG_DBTYPE;
$dbtypes=array();
if($CONFIG_DBTYPE=='sqlite'){
if(is_callable('sqlite_open')){
$dbtypes[]='SQLite';
echo "<option value='sqlite'>SQLite</option>";
}
if(is_callable('mysql_connect')){
$dbtypes[]='MySQL';
echo "<option value='mysql'>MySQL</option>";
}
}else{
if(is_callable('pg_connect')){
echo "<option value='pgsql'>PostgreSQL</option>";
}
}elseif($CONFIG_DBTYPE=='mysql'){
if(is_callable('mysql_connect')){
$dbtypes[]='MySQL';
echo "<option value='mysql'>MySQL</option>";
}
if(is_callable('sqlite_open')){
$dbtypes[]='SQLite';
echo "<option value='sqlite'>SQLite</option>";
}
if(is_callable('pg_connect')){
echo "<option value='pgsql'>PostgreSQL</option>";
}
}elseif($CONFIG_DBTYPE=='pgsql'){
if(is_callable('pg_connect')){
echo "<option value='pgsql'>PostgreSQL</option>";
}
if(is_callable('mysql_connect')){
echo "<option value='mysql'>MySQL</option>";
}
if(is_callable('sqlite_open')){
echo "<option value='sqlite'>SQLite</option>";
}
}
foreach($dbtypes as $dbtype){
echo "<option value='".strtolower($dbtype)."'>$dbtype</option>";
}
?>
</select>

Loading…
Cancel
Save