diff options
-rwxr-xr-x | inc/lib_base.php | 97 | ||||
-rwxr-xr-x | inc/lib_config.php | 22 | ||||
-rwxr-xr-x | inc/templates/configform.php | 57 | ||||
-rwxr-xr-x | webdav/owncloud.php | 2 |
4 files changed, 157 insertions, 21 deletions
diff --git a/inc/lib_base.php b/inc/lib_base.php index d7189d9c5b4..5d02cfeaa97 100755 --- a/inc/lib_base.php +++ b/inc/lib_base.php @@ -46,6 +46,7 @@ $CONFIG_DATADIRECTORY=$SERVERROOT.$WEBROOT.'/data'; $CONFIG_HTTPFORCESSL=false; $CONFIG_DATEFORMAT='j M Y G:i'; $CONFIG_DBNAME='owncloud'; +$CONFIG_DBTYPE='sqlite'; // include the generated configfile @include_once('config.php'); @@ -245,20 +246,34 @@ class OC_DB { * @return result-set */ static function query($cmd) { - global $DOCUMENTROOT; + global $DOCUMENTROOT; global $DBConnection; global $CONFIG_DBNAME; + global $CONFIG_DBHOST; + global $CONFIG_DBUSER; + global $CONFIG_DBPASSWORD; + global $CONFIG_DBTYPE; if(!isset($DBConnection)) { - $DBConnection = @new SQLiteDatabase($DOCUMENTROOT.'/'.$CONFIG_DBNAME); + if($CONFIG_DBTYPE=='sqlite'){ + $DBConnection = @new SQLiteDatabase($DOCUMENTROOT.'/'.$CONFIG_DBNAME); + }elseif($CONFIG_DBTYPE=='mysql'){ + $DBConnection = @new mysqli($CONFIG_DBHOST, $CONFIG_DBUSER, $CONFIG_DBPASSWORD,$CONFIG_DBNAME); + } if (!$DBConnection) { @ob_end_clean(); - echo('<b>can not connect to database.</center>'); + echo('<b>can not connect to database, using '.$CONFIG_DBTYPE.'.</center>'); exit(); } } $result = @$DBConnection->query($cmd); if (!$result) { - $entry='DB Error: "'.sqlite_error_string($DBConnection->lastError()).'"<br />'; + if($CONFIG_DBTYPE=='sqlite'){ + $error=sqlite_error_string($DBConnection->lastError()); + }elseif($CONFIG_DBTYPE=='mysql'){ + print_r($DBConnection); + $error=$DBConnection->error; + } + $entry='DB Error: "'.$error.'"<br />'; $entry.='Offending command was: '.$cmd.'<br />'; echo($entry); } @@ -275,17 +290,31 @@ class OC_DB { global $DOCUMENTROOT; global $DBConnection; global $CONFIG_DBNAME; + global $CONFIG_DBTYPE; if(!isset($DBConnection)) { - $DBConnection = @new SQLiteDatabase($DOCUMENTROOT.'/'.$CONFIG_DBNAME); + if($CONFIG_DBTYPE=='sqlite'){ + $DBConnection = @new SQLiteDatabase($DOCUMENTROOT.'/'.$CONFIG_DBNAME); + }elseif($CONFIG_DBTYPE=='mysql'){ + $DBConnection = @new mysqli($CONFIG_DBHOST, $CONFIG_DBUSER, $CONFIG_DBPASSWORD,$CONFIG_DBNAME); + } if (!$DBConnection) { @ob_end_clean(); - echo('<b>can not connect to database.</center>'); + echo('<b>can not connect to database, using '.$CONFIG_DBTYPE.'.</center>'); exit(); } } - $result = @$DBConnection->queryExec($cmd); + if($CONFIG_DBTYPE=='sqlite'){ + $result = @$DBConnection->queryExec($cmd); + }elseif($CONFIG_DBTYPE=='mysql'){ + $result = @$DBConnection->multi_query($cmd); + } if (!$result) { - $entry='DB Error: "'.sqlite_error_string($DBConnection->lastError()).'"<br />'; + if($CONFIG_DBTYPE=='sqlite'){ + $error=sqlite_error_string($DBConnection->lastError()); + }elseif($CONFIG_DBTYPE=='mysql'){ + $error=$DBConnection->error; + } + $entry='DB Error: "'.$error.'"<br />'; $entry.='Offending command was: '.$cmd.'<br />'; echo($entry); } @@ -299,6 +328,7 @@ class OC_DB { * @return bool */ static function close() { + global $CONFIG_DBTYPE; global $DBConnection; if(isset($DBConnection)) { return $DBConnection->close(); @@ -315,7 +345,12 @@ class OC_DB { */ static function insertid() { global $DBConnection; - return $DBConnectio->lastInsertRowid(); + global $CONFIG_DBTYPE; + if($CONFIG_DBTYPE=='sqlite'){ + return $DBConnection->lastInsertRowid(); + }elseif($CONFIG_DBTYPE=='mysql'){ + return(mysqli_insert_id($DBConnection)); + } } /** @@ -326,7 +361,12 @@ class OC_DB { */ static function numrows($result) { if(!isset($result) or ($result == false)) return 0; - $num= $result->numRows(); + global $CONFIG_DBTYPE; + if($CONFIG_DBTYPE=='sqlite'){ + $num= $result->numRows(); + }elseif($CONFIG_DBTYPE=='mysql'){ + $num= mysqli_num_rows($result); + } return($num); } @@ -337,8 +377,13 @@ class OC_DB { */ static function affected_rows() { global $DBConnection; + global $CONFIG_DBTYPE; if(!isset($DBConnection) or ($DBConnection==false)) return 0; - $num= $DBConnection->changes(); + if($CONFIG_DBTYPE=='sqlite'){ + $num= $DBConnection->changes(); + }elseif($CONFIG_DBTYPE=='mysql'){ + $num= mysqli_affected_rows($DBConnection); + } return($num); } @@ -351,10 +396,20 @@ class OC_DB { * @return unknown */ static function result($result, $i, $field) { - $result->seek($ii); - $tmp=$result->fetch(); + global $CONFIG_DBTYPE; + if($CONFIG_DBTYPE=='sqlite'){ + $result->seek($i); + $tmp=$result->fetch(); + }elseif($CONFIG_DBTYPE=='mysql'){ + mysqli_data_seek($result,$i); + if (is_string($field)) + $tmp=mysqli_fetch_array($result,MYSQLI_BOTH); + else + $tmp=mysqli_fetch_array($result,MYSQLI_NUM); + } $tmp=$tmp[$field]; return($tmp); + return($tmp); } /** @@ -364,7 +419,12 @@ class OC_DB { * @return data */ static function fetch_assoc($result) { - return $result->fetch(SQLITE_ASSOC); + global $CONFIG_DBTYPE; + if($CONFIG_DBTYPE=='sqlite'){ + return $result->fetch(SQLITE_ASSOC); + }elseif($CONFIG_DBTYPE=='mysql'){ + return mysqli_fetch_assoc($result); + } } @@ -375,8 +435,13 @@ class OC_DB { * @return bool */ static function free_result($result) { - $result = null; //No native way to do this - return true; + global $CONFIG_DBTYPE; + if($CONFIG_DBTYPE=='sqlite'){ + $result = null; //No native way to do this + return true; + }elseif($CONFIG_DBTYPE=='mysql'){ + return @mysqli_free_result($result); + } } } diff --git a/inc/lib_config.php b/inc/lib_config.php index 8718a603d61..b54a4f4f168 100755 --- a/inc/lib_config.php +++ b/inc/lib_config.php @@ -20,6 +20,7 @@ class OC_CONFIG{ */ public static function writeconfiglisener(){ global $DOCUMENTROOT; + global $SERVERROOT; global $WEBROOT; global $CONFIG_DBNAME; if(isset($_POST['set_config'])){ @@ -37,18 +38,25 @@ class OC_CONFIG{ if(!isset($_POST['adminpassword']) or empty($_POST['adminpassword']) and $FIRSTRUN) $error.='admin password not set<br />'; if(!isset($_POST['adminpassword2']) or empty($_POST['adminpassword2']) and $FIRSTRUN) $error.='retype admin password not set<br />'; if(!isset($_POST['datadirectory']) or empty($_POST['datadirectory'])) $error.='data directory not set<br />'; - if(!isset($_POST['dateformat']) or empty($_POST['dateformat'])) $error.='dteformat not set<br />'; + if(!isset($_POST['dateformat']) or empty($_POST['dateformat'])) $error.='dateformat not set<br />'; if(!isset($_POST['dbname']) or empty($_POST['dbname'])) $error.='databasename not set<br />'; if($_POST['adminpassword']<>$_POST['adminpassword2'] ) $error.='admin passwords are not the same<br />'; if(!isset($_POST['adminpassword']) or empty($_POST['adminpassword']) and !$FIRSTRUN){ $_POST['adminpassword']=$CONFIG_ADMINPASSWORD; } + $dbtype=$_POST['dbtype']; + if($dbtype=='mysql'){ + if(!isset($_POST['dbhost']) or empty($_POST['dbhost'])) $error.='database host not set<br />'; + if(!isset($_POST['dbuser']) or empty($_POST['dbuser'])) $error.='database user not set<br />'; + if($_POST['dbpassword']<>$_POST['dbpassword2'] ) $error.='database passwords are not the same<br />'; + + } if(empty($error)) { //create/fill database $CONFIG_DBNAME=$_POST['dbname']; if(isset($_POST['filldb'])){ - self::filldatabase(); +// self::filldatabase(); } //storedata @@ -58,13 +66,19 @@ class OC_CONFIG{ $config.='$CONFIG_DATADIRECTORY=\''.$_POST['datadirectory']."';\n"; if(isset($_POST['forcessl'])) $config.='$CONFIG_HTTPFORCESSL=true'.";\n"; else $config.='$CONFIG_HTTPFORCESSL=false'.";\n"; $config.='$CONFIG_DATEFORMAT=\''.$_POST['dateformat']."';\n"; + $config.='$CONFIG_DBTYPE=\''.$dbtype."';\n"; $config.='$CONFIG_DBNAME=\''.$_POST['dbname']."';\n"; + if($dbtype=='mysql'){ + $config.='$CONFIG_DBHOST=\''.$_POST['dbhost']."';\n"; + $config.='$CONFIG_DBUSER=\''.$_POST['dbuser']."';\n"; + $config.='$CONFIG_DBPASSWORD=\''.$_POST['dbpassword']."';\n"; + } $config.='?> '; - $filename=$DOCUMENTROOT.'/config/config.php'; + $filename=$SERVERROOT.'/config/config.php'; file_put_contents($filename,$config); - header("Location: ".$WEBROOT."/"); + header("Location: ".$WEBROOT."/"); } return($error); diff --git a/inc/templates/configform.php b/inc/templates/configform.php index 9b3cee53f1f..82a1efeee19 100755 --- a/inc/templates/configform.php +++ b/inc/templates/configform.php @@ -1,8 +1,49 @@ <?php global $FIRSTRUN; if(!isset($fillDB)) $fillDB=true; +if(!isset($CONFIG_DBHOST)) $CONFIG_DBHOST='localhost'; +if(!isset($CONFIG_DBUSER)) $CONFIG_DBUSER='owncloud'; ?> +<script type="text/javascript"> +function showDBAdmin(){ + var show=document.getElementById('dbcreate').checked; + document.getElementById('dbAdminUser').style.display=(show)?'table-row':'none'; + document.getElementById('dbAdminPwd').style.display=(show)?'table-row':'none'; +} + +function dbtypechange(){ + var dropdown=action=document.getElementById('dbtype'); + var type=dropdown.options[dropdown.selectedIndex].value; + var inputs=Array('dbhost','dbuser','dbpass','dbpass_retype','dbcreaterow','dbAdminPwd','dbAdminUser'); + var id,element; + if(type=='sqlite'){ + for(i in inputs){ + id=inputs[i]; + element=document.getElementById(id); + if(element){ + element.style.display='none'; + } + } + }else if(type=='mysql'){ + for(i in inputs){ + id=inputs[i]; + element=document.getElementById(id); + if(element){ + element.style.display='table-row'; + } + } + showDBAdmin() + } +} </script> +<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI']; ?>"> +<table cellpadding="5" cellspacing="5" border="0" class="loginform"> +<?php + if(!$FIRSTRUN){?> + <tr><td>current password</td><td><input type="password" name="currentpassword" size="30" class="formstyle"></input></td></tr> + <?php + } +?> <form method="post" enctype="multipart/form-data"> <table cellpadding="5" cellspacing="5" border="0" class="loginform"> <?php @@ -17,7 +58,23 @@ if(!isset($fillDB)) $fillDB=true; <tr><td>data directory:</td><td><input type="text" name="datadirectory" size="30" class="formstyle" value="<?php echo($CONFIG_DATADIRECTORY);?>"></input></td></tr> <tr><td>force ssl:</td><td><input type="checkbox" name="forcessl" size="30" class="formstyle" value='<?php echo($CONFIG_HTTPFORCESSL);?>'></input></td></tr> <tr><td>date format:</td><td><input type="text" name="dateformat" size="30" class="formstyle" value='<?php echo($CONFIG_DATEFORMAT);?>'></input></td></tr> +<tr><td>database type:</td><td> +<select id='dbtype' name="dbtype" onchange='dbtypechange()'> +<option value="sqlite">SQLite</option> +<option value="mysql">MySQL</option> +</select> +</td></tr> +<tr id='dbhost'><td>database host:</td><td><input type="text" name="dbhost" size="30" class="formstyle" value='<?php echo($CONFIG_DBHOST);?>'></input></td></tr> <tr><td>database name:</td><td><input type="text" name="dbname" size="30" class="formstyle" value='<?php echo($CONFIG_DBNAME);?>'></input></td></tr> +<tr id='dbuser'><td>database user:</td><td><input type="text" name="dbuser" size="30" class="formstyle" value='<?php echo($CONFIG_DBUSER);?>'></input></td></tr> +<tr id='dbpass'><td>database password:</td><td><input type="password" name="dbpassword" size="30" class="formstyle" value=''></input></td></tr> +<tr id='dbpass_retype'><td>retype database password:</td><td><input type="password" name="dbpassword2" size="30" class="formstyle" value=''></input></td></tr> +<tr id='dbcreaterow'><td>create database and user:</td><td><input id='dbcreate' type="checkbox" name="createdatabase" size="30" class="formstyle" value='1' <?php if($FIRSTRUN) echo 'checked'; ?> onchange='showDBAdmin()'></input></td></tr> +<tr id='dbAdminUser'><td>database administrative user:</td><td><input type="text" name="dbadminuser" size="30" class="formstyle" value='root'></input></td></tr> +<tr id='dbAdminPwd'><td>database administrative password:</td><td><input type="password" name="dbadminpwd" size="30" class="formstyle" value=''></input></td></tr> <tr><td>automaticly fill initial database:</td><td><input type="checkbox" name="filldb" size="30" class="formstyle" value='1' <?php if($FIRSTRUN) echo 'checked'; ?>></input></td></tr> <tr><td></td><td><input type="submit" name="set_config" alt="save" value="save" class="formstyle" /></td></tr> </table></form> +<script type="text/javascript"> + dbtypechange() +</script>
\ No newline at end of file diff --git a/webdav/owncloud.php b/webdav/owncloud.php index 6151e6e13f7..6699526be28 100755 --- a/webdav/owncloud.php +++ b/webdav/owncloud.php @@ -28,7 +28,7 @@ require_once('HTTP/WebDAV/Server/Filesystem.php'); ini_set('default_charset', 'UTF-8'); #ini_set('error_reporting', ''); - +ob_clean(); if(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['REDIRECT_REMOTE_USER'])) { header('WWW-Authenticate: Basic realm="ownCloud"'); |