2010-03-10 15:03:40 +03:00
< ? php
/**
* ownCloud
*
* @ author Frank Karlitschek
* @ copyright 2010 Frank Karlitschek karlitschek @ kde . org
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation ; either
* version 3 of the License , or any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library . If not , see < http :// www . gnu . org / licenses />.
*
*/
// set some stuff
2010-03-16 10:48:36 +03:00
ob_start ();
2010-05-04 05:21:57 +04:00
// error_reporting(E_ALL | E_STRICT);
error_reporting ( E_ALL ); // MDB2 gives loads of strict error, disabling for now
2010-06-29 16:53:54 +04:00
2010-03-10 15:03:40 +03:00
date_default_timezone_set ( 'Europe/Berlin' );
ini_set ( 'arg_separator.output' , '&' );
ini_set ( 'session.cookie_httponly' , '1;' );
session_start ();
2010-03-16 10:48:36 +03:00
// calculate the documentroot
2010-03-24 12:27:07 +03:00
$SERVERROOT = substr ( __FILE__ , 0 , - 17 );
2010-06-27 20:09:59 +04:00
$DOCUMENTROOT = realpath ( $_SERVER [ 'DOCUMENT_ROOT' ]);
2010-04-30 17:32:22 +04:00
$SERVERROOT = str_replace ( " \\ " , '/' , $SERVERROOT );
2010-06-27 20:09:59 +04:00
$SUBURI = substr ( realpath ( $_SERVER [ " SCRIPT_FILENAME " ]), strlen ( $SERVERROOT ));
2010-06-27 02:16:09 +04:00
$WEBROOT = substr ( $_SERVER [ " SCRIPT_NAME " ], 0 , strlen ( $_SERVER [ " SCRIPT_NAME " ]) - strlen ( $SUBURI ));
2010-06-27 20:09:59 +04:00
2010-06-27 02:16:09 +04:00
if ( $WEBROOT != '' and $WEBROOT [ 0 ] !== '/' ){
2010-04-19 21:46:42 +04:00
$WEBROOT = '/' . $WEBROOT ;
}
2010-03-16 10:48:36 +03:00
// set the right include path
2010-04-24 14:40:20 +04:00
// set_include_path(get_include_path().PATH_SEPARATOR.$SERVERROOT.PATH_SEPARATOR.$SERVERROOT.'/inc'.PATH_SEPARATOR.$SERVERROOT.'/config');
2010-03-16 10:48:36 +03:00
// define default config values
2010-04-22 21:03:54 +04:00
$CONFIG_INSTALLED = false ;
2010-04-19 21:46:42 +04:00
$CONFIG_DATADIRECTORY = $SERVERROOT . '/data' ;
2010-05-08 23:32:20 +04:00
$CONFIG_BACKUPDIRECTORY = $SERVERROOT . '/backup' ;
2010-03-16 10:48:36 +03:00
$CONFIG_HTTPFORCESSL = false ;
2010-05-08 23:32:20 +04:00
$CONFIG_ENABLEBACKUP = false ;
2010-03-16 10:48:36 +03:00
$CONFIG_DATEFORMAT = 'j M Y G:i' ;
$CONFIG_DBNAME = 'owncloud' ;
2010-03-31 00:15:45 +04:00
$CONFIG_DBTYPE = 'sqlite' ;
2010-04-19 21:46:42 +04:00
2010-03-16 10:48:36 +03:00
// include the generated configfile
2010-05-02 13:24:46 +04:00
@ include_once ( $SERVERROOT . '/config/config.php' );
2010-03-16 10:48:36 +03:00
2010-05-04 05:21:57 +04:00
$CONFIG_DATADIRECTORY_ROOT = $CONFIG_DATADIRECTORY ; // store this in a seperate variable so we can change the data directory to jail users.
2010-03-10 15:03:40 +03:00
// redirect to https site if configured
2010-03-16 10:48:36 +03:00
if ( isset ( $CONFIG_HTTPFORCESSL ) and $CONFIG_HTTPFORCESSL ){
2010-03-10 15:03:40 +03:00
if ( ! isset ( $_SERVER [ 'HTTPS' ]) or $_SERVER [ 'HTTPS' ] != 'on' ) {
$url = " https:// " . $_SERVER [ 'SERVER_NAME' ] . $_SERVER [ 'REQUEST_URI' ];
header ( " Location: $url " );
exit ;
}
}
// load core libs
2010-04-24 14:40:20 +04:00
oc_require_once ( 'lib_files.php' );
2010-05-08 00:50:59 +04:00
oc_require_once ( 'lib_filesystem.php' );
2010-05-08 23:32:20 +04:00
oc_require_once ( 'lib_filestorage.php' );
oc_require_once ( 'lib_fileobserver.php' );
2010-04-24 14:40:20 +04:00
oc_require_once ( 'lib_log.php' );
oc_require_once ( 'lib_config.php' );
oc_require_once ( 'lib_user.php' );
2010-04-25 20:18:04 +04:00
oc_require_once ( 'lib_ocs.php' );
2010-05-04 05:21:57 +04:00
@ oc_require_once ( 'MDB2.php' );
2010-06-18 22:08:24 +04:00
@ oc_require_once ( 'MDB2/Schema.php' );
2010-05-02 20:07:36 +04:00
oc_require_once ( 'lib_connect.php' );
2010-07-07 14:30:30 +04:00
oc_require_once ( 'lib_remotestorage.php' );
2010-04-22 21:03:54 +04:00
2010-04-28 14:15:52 +04:00
2010-05-02 16:04:08 +04:00
if ( ! is_dir ( $CONFIG_DATADIRECTORY_ROOT )){
2010-06-01 15:59:04 +04:00
@ mkdir ( $CONFIG_DATADIRECTORY_ROOT ) or die ( " Can't create data directory ( $CONFIG_DATADIRECTORY_ROOT ), you can usually fix this by setting the owner of ' $SERVERROOT ' to the user that the web server uses (www-data for debian/ubuntu) " );
2010-04-28 14:15:52 +04:00
}
2010-04-22 21:03:54 +04:00
if ( OC_USER :: isLoggedIn ()){
//jail the user in a seperate data folder
2010-05-02 16:04:08 +04:00
$CONFIG_DATADIRECTORY = $CONFIG_DATADIRECTORY_ROOT . '/' . $_SESSION [ 'username_clean' ];
2010-04-22 21:03:54 +04:00
if ( ! is_dir ( $CONFIG_DATADIRECTORY )){
mkdir ( $CONFIG_DATADIRECTORY );
}
2010-05-08 00:50:59 +04:00
$rootStorage = new OC_FILESTORAGE_LOCAL ( array ( 'datadir' => $CONFIG_DATADIRECTORY ));
2010-05-08 23:32:20 +04:00
if ( $CONFIG_ENABLEBACKUP ){
if ( ! is_dir ( $CONFIG_BACKUPDIRECTORY )){
mkdir ( $CONFIG_BACKUPDIRECTORY );
}
if ( ! is_dir ( $CONFIG_BACKUPDIRECTORY . '/' . $_SESSION [ 'username_clean' ])){
mkdir ( $CONFIG_BACKUPDIRECTORY . '/' . $_SESSION [ 'username_clean' ]);
}
$backupStorage = new OC_FILESTORAGE_LOCAL ( array ( 'datadir' => $CONFIG_BACKUPDIRECTORY . '/' . $_SESSION [ 'username_clean' ]));
$backup = new OC_FILEOBSERVER_BACKUP ( array ( 'storage' => $backupStorage ));
$rootStorage -> addObserver ( $backup );
}
2010-05-08 00:50:59 +04:00
OC_FILESYSTEM :: mount ( $rootStorage , '/' );
2010-04-22 21:03:54 +04:00
}
2010-03-10 15:03:40 +03:00
// load plugins
2010-06-29 16:53:54 +04:00
$CONFIG_LOADPLUGINS = 'all' ;
if ( $CONFIG_LOADPLUGINS != 'all' )
$plugins = explode ( ' ' , $CONFIG_LOADPLUGINS );
else {
$plugins = array ();
$fd = opendir ( $SERVERROOT . '/plugins' );
while (( $filename = readdir ( $fd )) !== false ) {
if ( $filename <> '.' and $filename <> '..' and substr ( $filename , 0 , 1 ) != '.' ){
$plugins [] = $filename ;
}
}
closedir ( $fd );
}
if ( isset ( $plugins [ 0 ])) foreach ( $plugins as $plugin ) require_once ( $SERVERROOT . '/plugins/' . $plugin . '/lib_' . $plugin . '.php' );
2010-03-10 15:03:40 +03:00
2010-03-16 10:48:36 +03:00
// check if the server is correctly configured for ownCloud
OC_UTIL :: checkserver ();
// listen for login or logout actions
OC_USER :: logoutlisener ();
$loginresult = OC_USER :: loginlisener ();
2010-03-10 15:03:40 +03:00
/**
* Class for utility functions
*
*/
class OC_UTIL {
2010-03-28 15:07:13 +04:00
public static $scripts = array ();
/**
* add a javascript file
*
* @ param url $url
*/
public static function addscript ( $url ){
self :: $scripts [] = $url ;
}
2010-03-10 15:03:40 +03:00
/**
* array to store all the optional navigation buttons of the plugins
*
*/
static private $NAVIGATION = array ();
2010-03-16 10:48:36 +03:00
/**
* check if the current server configuration is suitable for ownCloud
*
*/
public static function checkserver (){
2010-03-24 12:27:07 +03:00
global $SERVERROOT ;
2010-05-09 18:33:16 +04:00
global $CONFIG_DATADIRECTORY_ROOT ;
global $CONFIG_BACKUPDIRECTORY ;
global $CONFIG_ENABLEBACKUP ;
2010-05-23 02:18:37 +04:00
global $CONFIG_INSTALLED ;
2010-05-09 18:33:16 +04:00
$error = '' ;
if ( ! is_callable ( 'sqlite_open' ) and ! is_callable ( 'mysql_connect' )){
$error .= 'No database drivers (sqlite or mysql) installed.<br/>' ;
}
global $CONFIG_DBTYPE ;
global $CONFIG_DBNAME ;
if ( $CONFIG_DBTYPE == 'sqlite' ){
$file = $SERVERROOT . '/' . $CONFIG_DBNAME ;
2010-06-01 15:59:04 +04:00
if ( file_exists ( $file )){
2010-05-09 18:33:16 +04:00
$prems = substr ( decoct ( fileperms ( $file )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
2010-06-01 15:59:04 +04:00
@ chmod ( $file , 0660 );
clearstatcache ();
$prems = substr ( decoct ( fileperms ( $file )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
$error .= 'SQLite database file (' . $file . ') is readable from the web<br/>' ;
}
2010-05-09 18:33:16 +04:00
}
}
}
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
2010-05-15 22:23:43 +04:00
if ( substr ( $prems , - 1 ) != '0' ){
2010-05-09 18:33:16 +04:00
chmodr ( $CONFIG_DATADIRECTORY_ROOT , 0770 );
clearstatcache ();
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
$error .= 'Data directory (' . $CONFIG_DATADIRECTORY_ROOT . ') is readable from the web<br/>' ;
}
}
if ( $CONFIG_ENABLEBACKUP ){
$prems = substr ( decoct ( fileperms ( $CONFIG_BACKUPDIRECTORY )), - 3 );
2010-05-15 22:23:43 +04:00
if ( substr ( $prems , - 1 ) != '0' ){
2010-05-09 18:33:16 +04:00
chmodr ( $CONFIG_BACKUPDIRECTORY , 0770 );
clearstatcache ();
$prems = substr ( decoct ( fileperms ( $CONFIG_BACKUPDIRECTORY )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
$error .= 'Data directory (' . $CONFIG_BACKUPDIRECTORY . ') is readable from the web<br/>' ;
}
}
}
if ( $error ){
die ( $error );
}
2010-03-16 10:48:36 +03:00
}
2010-03-10 15:03:40 +03:00
/**
* show the header of the web GUI
*
*/
public static function showheader (){
2010-03-16 10:48:36 +03:00
global $CONFIG_ADMINLOGIN ;
global $WEBROOT ;
2010-04-24 14:40:20 +04:00
oc_require ( 'templates/header.php' );;
2010-03-10 15:03:40 +03:00
}
2010-05-15 01:32:35 +04:00
/**
* check if we need to use the layout optimized for smaller screen , currently only checks for iPhone / Android
* @ return bool
*/
public static function hasSmallScreen (){
$userAgent = strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]);
if ( strpos ( $userAgent , 'android' ) or strpos ( $userAgent , 'iphone' ) or strpos ( $userAgent , 'ipod' )){ //todo, add support for more devices
return true ;
}
return false ;
}
2010-03-10 15:03:40 +03:00
/**
* show the footer of the web GUI
*
*/
public static function showfooter (){
global $CONFIG_FOOTEROWNERNAME ;
global $CONFIG_FOOTEROWNEREMAIL ;
2010-04-24 14:40:20 +04:00
oc_require ( 'templates/footer.php' );;
2010-03-10 15:03:40 +03:00
}
/**
* add an navigationentry to the main navigation
*
* @ param name $name
* @ param url $url
*/
public static function addnavigationentry ( $name , $url ) {
$entry = array ();
$entry [ 'name' ] = $name ;
$entry [ 'url' ] = $url ;
OC_UTIL :: $NAVIGATION [] = $entry ;
}
/**
* show the main navigation
*
*/
public static function shownavigation (){
2010-03-16 10:48:36 +03:00
global $WEBROOT ;
2010-03-18 00:21:01 +03:00
global $SERVERROOT ;
2010-03-29 23:49:11 +04:00
echo ( '<table class="center" cellpadding="5" cellspacing="0" border="0"><tr>' );
2010-03-16 10:48:36 +03:00
echo ( '<td class="navigationitem1"><a href="' . $WEBROOT . '/">' . $_SESSION [ 'username' ] . '</a></td>' );
2010-03-24 10:51:59 +03:00
if ( $_SERVER [ 'SCRIPT_NAME' ] == $WEBROOT . '/index.php' ) echo ( '<td class="navigationitemselected"><a href="' . $WEBROOT . '/">Files</a></td>' ); else echo ( '<td class="navigationitem"><a href="' . $WEBROOT . '/">Files</a></td>' );
2010-03-10 15:03:40 +03:00
foreach ( OC_UTIL :: $NAVIGATION as $NAVI ) {
2010-03-18 00:21:01 +03:00
if ( dirname ( $_SERVER [ 'SCRIPT_NAME' ]) == $WEBROOT . $NAVI [ 'url' ]) echo ( '<td class="navigationitemselected"><a href="' . $WEBROOT . $NAVI [ 'url' ] . '">' . $NAVI [ 'name' ] . '</a></td>' ); else echo ( '<td class="navigationitem"><a href="' . $WEBROOT . $NAVI [ 'url' ] . '">' . $NAVI [ 'name' ] . '</a></td>' );
2010-03-10 15:03:40 +03:00
}
2010-04-22 21:03:54 +04:00
if ( $_SERVER [ 'SCRIPT_NAME' ] == $WEBROOT . '/log/index.php' ) echo ( '<td class="navigationitemselected"><a href="' . $WEBROOT . '/log">Log</a></td>' ); else echo ( '<td class="navigationitem"><a href="' . $WEBROOT . '/log">Log</a></td>' );
2010-04-23 02:05:04 +04:00
if ( $_SERVER [ 'SCRIPT_NAME' ] == $WEBROOT . '/settings/index.php' ) echo ( '<td class="navigationitemselected"><a href="' . $WEBROOT . '/settings">Settings</a></td>' ); else echo ( '<td class="navigationitem"><a href="' . $WEBROOT . '/settings">Settings</a></td>' );
2010-04-22 21:03:54 +04:00
if ( OC_USER :: ingroup ( $_SESSION [ 'username' ], 'admin' )){
2010-04-23 02:05:04 +04:00
if ( $_SERVER [ 'SCRIPT_NAME' ] == $WEBROOT . '/admin/index.php' ) echo ( '<td class="navigationitemselected"><a href="' . $WEBROOT . '/admin">Admin Panel</a></td>' ); else echo ( '<td class="navigationitem"><a href="' . $WEBROOT . '/admin">Admin Panel</a></td>' );
2010-04-22 21:03:54 +04:00
}
2010-03-19 19:38:19 +03:00
echo ( '<td class="navigationitem"><a href="?logoutbutton=1">Logout</a></td>' );
2010-03-10 15:03:40 +03:00
echo ( '</tr></table>' );
}
/**
* show the loginform
*
*/
public static function showloginform (){
2010-03-16 10:48:36 +03:00
global $loginresult ;
2010-04-24 14:40:20 +04:00
oc_require ( 'templates/loginform.php' );
2010-03-10 15:03:40 +03:00
}
2010-03-16 10:48:36 +03:00
2010-03-10 15:03:40 +03:00
/**
* show an icon for a filetype
*
*/
public static function showicon ( $filetype ){
2010-03-16 10:48:36 +03:00
global $WEBROOT ;
if ( $filetype == 'dir' ){ echo ( '<td><img src="' . $WEBROOT . '/img/icons/folder.png" width="16" height="16"></td>' );
2010-03-10 15:03:40 +03:00
} elseif ( $filetype == 'foo' ){ echo ( '<td>foo</td>' );
2010-03-16 10:48:36 +03:00
} else { echo ( '<td><img src="' . $WEBROOT . '/img/icons/other.png" width="16" height="16"></td>' );
2010-03-10 15:03:40 +03:00
}
}
}
2010-03-16 10:48:36 +03:00
2010-03-10 15:03:40 +03:00
/**
* Class for database access
*
*/
class OC_DB {
2010-05-04 05:21:57 +04:00
static private $DBConnection = false ;
2010-06-18 22:08:24 +04:00
static private $schema = false ;
2010-07-05 15:31:32 +04:00
static private $affected = 0 ;
static private $result = false ;
2010-05-04 05:21:57 +04:00
/**
* connect to the datbase if not already connected
*/
public static function connect (){
global $CONFIG_DBNAME ;
global $CONFIG_DBHOST ;
global $CONFIG_DBUSER ;
global $CONFIG_DBPASSWORD ;
2010-04-22 21:03:54 +04:00
global $CONFIG_DBTYPE ;
2010-05-04 05:21:57 +04:00
global $DOCUMENTROOT ;
global $SERVERROOT ;
if ( ! self :: $DBConnection ){
$options = array (
'portability' => MDB2_PORTABILITY_ALL ,
2010-06-18 22:08:24 +04:00
'log_line_break' => '<br>' ,
'idxname_format' => '%s' ,
2010-07-05 13:37:50 +04:00
'debug' => true ,
2010-06-18 22:08:24 +04:00
'quote_identifier' => true ,
2010-05-04 05:21:57 +04:00
);
2010-04-22 21:03:54 +04:00
if ( $CONFIG_DBTYPE == 'sqlite' ){
2010-05-04 05:21:57 +04:00
$dsn = array (
'phptype' => 'sqlite' ,
'database' => $SERVERROOT . '/' . $CONFIG_DBNAME ,
'mode' => '0644' ,
);
2010-04-22 21:03:54 +04:00
} elseif ( $CONFIG_DBTYPE == 'mysql' ){
2010-05-04 05:21:57 +04:00
$dsn = array (
'phptype' => 'mysql' ,
'username' => $CONFIG_DBUSER ,
'password' => $CONFIG_DBPASSWORD ,
'hostspec' => $CONFIG_DBHOST ,
'database' => $CONFIG_DBNAME ,
);
2010-06-20 19:58:39 +04:00
} elseif ( $CONFIG_DBTYPE == 'pgsql' ){
$dsn = array (
'phptype' => 'pgsql' ,
'username' => $CONFIG_DBUSER ,
'password' => $CONFIG_DBPASSWORD ,
'hostspec' => $CONFIG_DBHOST ,
'database' => $CONFIG_DBNAME ,
);
2010-04-22 21:03:54 +04:00
}
2010-06-18 22:08:24 +04:00
self :: $DBConnection =& MDB2 :: factory ( $dsn , $options );
2010-07-05 13:37:50 +04:00
if ( PEAR :: isError ( self :: $DBConnection )) {
2010-05-04 05:21:57 +04:00
echo ( '<b>can not connect to database, using ' . $CONFIG_DBTYPE . '. (' . self :: $DBConnection -> getUserInfo () . ')</center>' );
die ( self :: $DBConnection -> getMessage ());
}
self :: $DBConnection -> setFetchMode ( MDB2_FETCHMODE_ASSOC );
2010-07-05 13:37:50 +04:00
self :: $schema =& MDB2_Schema :: factory ( self :: $DBConnection );
2010-05-04 05:21:57 +04:00
}
}
/**
* executes a query on the database
*
* @ param string $cmd
* @ return result - set
*/
static function query ( $cmd ){
global $CONFIG_DBTYPE ;
if ( ! trim ( $cmd )){
2010-04-22 21:03:54 +04:00
return false ;
}
2010-05-04 05:21:57 +04:00
OC_DB :: connect ();
if ( $CONFIG_DBTYPE == 'sqlite' ){ //fix differences between sql versions
$cmd = str_replace ( '`' , '' , $cmd );
2010-06-20 19:58:39 +04:00
} elseif ( $CONFIG_DBTYPE == 'pgsql' ){
$cmd = str_replace ( '`' , '"' , $cmd );
2010-05-04 05:21:57 +04:00
}
2010-07-05 15:31:32 +04:00
$result = self :: $DBConnection -> exec ( $cmd );
2010-05-04 05:21:57 +04:00
if ( PEAR :: isError ( $result )) {
$entry = 'DB Error: "' . $result -> getMessage () . '"<br />' ;
$entry .= 'Offending command was: ' . $cmd . '<br />' ;
die ( $entry );
2010-07-05 15:31:32 +04:00
} else {
self :: $affected = $result ;
2010-05-04 05:21:57 +04:00
}
2010-07-05 15:31:32 +04:00
self :: $result = $result ;
2010-05-04 05:21:57 +04:00
return $result ;
2010-04-22 21:03:54 +04:00
}
2010-03-16 22:25:05 +03:00
/**
2010-05-04 05:21:57 +04:00
* executes a query on the database and returns the result in an array
2010-03-16 22:25:05 +03:00
*
* @ param string $cmd
* @ return result - set
*/
2010-05-04 05:21:57 +04:00
static function select ( $cmd ){
OC_DB :: connect ();
2010-06-20 19:58:39 +04:00
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 ;
2010-05-04 05:21:57 +04:00
}
/**
* executes multiply queries on the database
*
* @ param string $cmd
* @ return result - set
*/
static function multiquery ( $cmd ) {
$queries = explode ( ';' , $cmd );
foreach ( $queries as $query ){
OC_DB :: query ( $query );
}
return true ;
}
2010-03-10 15:03:40 +03:00
2010-05-04 05:21:57 +04:00
/**
* closing a db connection
*
* @ return bool
*/
static function close () {
self :: $DBConnection -> disconnect ();
self :: $DBConnection = false ;
}
2010-03-10 15:03:40 +03:00
2010-05-04 05:21:57 +04:00
/**
* Returning primarykey if last statement was an insert .
*
* @ return primarykey
*/
static function insertid () {
2010-06-18 22:08:24 +04:00
$id = self :: $DBConnection -> lastInsertID ();
return $id ;
2010-05-04 05:21:57 +04:00
}
2010-03-10 15:03:40 +03:00
2010-05-04 05:21:57 +04:00
/**
* Returning number of rows in a result
*
* @ param resultset $result
* @ return int
*/
static function numrows ( $result ) {
$result -> numRows ();
}
/**
* Returning number of affected rows
*
* @ return int
*/
static function affected_rows () {
2010-07-05 15:31:32 +04:00
return self :: $affected ;
2010-05-04 05:21:57 +04:00
}
2010-05-16 00:29:14 +04:00
/**
* get a field from the resultset
*
* @ param resultset $result
* @ param int $i
* @ param int $field
* @ return unknown
*/
static function result ( $result , $i , $field ) {
$tmp = $result -> fetchRow ( MDB2_FETCHMODE_ASSOC , $i );
$tmp = $tmp [ $field ];
return ( $tmp );
}
/**
* get data - array from resultset
*
* @ param resultset $result
* @ return data
*/
static function fetch_assoc ( $result ){
return $result -> fetchRow ( MDB2_FETCHMODE_ASSOC );
}
2010-05-04 05:21:57 +04:00
/**
* Freeing resultset ( performance )
*
* @ param unknown_type $result
* @ return bool
*/
2010-07-05 15:31:32 +04:00
static function free_result () {
if ( self :: $result ){
self :: $result -> free ();
self :: $result = false ;
}
2010-05-04 05:21:57 +04:00
}
static public function disconnect (){
if ( self :: $DBConnection ){
self :: $DBConnection -> disconnect ();
self :: $DBConnection = false ;
}
}
2010-05-23 01:05:49 +04:00
/**
* escape strings so they can be used in queries
*
* @ param string string
* @ return string
*/
static function escape ( $string ){
OC_DB :: connect ();
return self :: $DBConnection -> escape ( $string );
2010-05-04 05:21:57 +04:00
}
2010-06-18 22:08:24 +04:00
static function getDBStructure ( $file ){
OC_DB :: connect ();
$definition = self :: $schema -> getDefinitionFromDatabase ();
$dump_options = array (
'output_mode' => 'file' ,
'output' => $file ,
'end_of_line' => " \n "
);
self :: $schema -> dumpDatabase ( $definition , $dump_options , MDB2_SCHEMA_DUMP_STRUCTURE );
}
static function createDBFromStructure ( $file ){
OC_DB :: connect ();
2010-07-06 21:57:08 +04:00
global $CONFIG_DBNAME ;
global $CONFIG_DBTABLEPREFIX ;
$content = file_get_contents ( $file );
$file2 = tempnam ( sys_get_temp_dir (), 'oc_db_scheme_' );
echo $content ;
$content = str_replace ( '*dbname*' , $CONFIG_DBNAME , $content );
$content = str_replace ( '*dbprefix*' , $CONFIG_DBTABLEPREFIX , $content );
echo $content ;
file_put_contents ( $file2 , $content );
$definition =@ self :: $schema -> parseDatabaseDefinitionFile ( $file2 );
unlink ( $file2 );
2010-06-18 22:08:24 +04:00
if ( $definition instanceof MDB2_Schema_Error ){
die ( $definition -> getMessage () . ': ' . $definition -> getUserInfo ());
}
$ret =@ self :: $schema -> createDatabase ( $definition );
if ( $ret instanceof MDB2_Error ) {
die ( $ret -> getMessage () . ': ' . $ret -> getUserInfo ());
} else {
return true ;
}
}
2010-03-10 15:03:40 +03:00
}
2010-04-24 14:40:20 +04:00
//custom require/include functions because not all hosts allow us to set the include path
function oc_require ( $file ){
global $SERVERROOT ;
global $DOCUMENTROOT ;
global $WEBROOT ;
global $CONFIG_DBNAME ;
global $CONFIG_DBHOST ;
global $CONFIG_DBUSER ;
global $CONFIG_DBPASSWORD ;
global $CONFIG_DBTYPE ;
global $CONFIG_DATADIRECTORY ;
global $CONFIG_HTTPFORCESSL ;
global $CONFIG_DATEFORMAT ;
global $CONFIG_INSTALLED ;
if ( is_file ( $file )){
2010-05-04 05:21:57 +04:00
return require ( $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return require ( $SERVERROOT . '/' . $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 05:21:57 +04:00
return require ( $SERVERROOT . '/inc/' . $file );
2010-04-24 14:40:20 +04:00
}
}
function oc_require_once ( $file ){
global $SERVERROOT ;
global $DOCUMENTROOT ;
global $WEBROOT ;
global $CONFIG_DBNAME ;
global $CONFIG_DBHOST ;
global $CONFIG_DBUSER ;
global $CONFIG_DBPASSWORD ;
global $CONFIG_DBTYPE ;
global $CONFIG_DATADIRECTORY ;
global $CONFIG_HTTPFORCESSL ;
global $CONFIG_DATEFORMAT ;
global $CONFIG_INSTALLED ;
if ( is_file ( $file )){
2010-05-04 05:21:57 +04:00
return require_once ( $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return require_once ( $SERVERROOT . '/' . $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 05:21:57 +04:00
return require_once ( $SERVERROOT . '/inc/' . $file );
2010-04-24 14:40:20 +04:00
}
}
function oc_include ( $file ){
global $SERVERROOT ;
global $DOCUMENTROOT ;
global $WEBROOT ;
global $CONFIG_DBNAME ;
global $CONFIG_DBHOST ;
global $CONFIG_DBUSER ;
global $CONFIG_DBPASSWORD ;
global $CONFIG_DBTYPE ;
global $CONFIG_DATADIRECTORY ;
global $CONFIG_HTTPFORCESSL ;
global $CONFIG_DATEFORMAT ;
global $CONFIG_INSTALLED ;
if ( is_file ( $file )){
2010-05-04 05:21:57 +04:00
return include ( $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return include ( $SERVERROOT . '/' . $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 05:21:57 +04:00
return include ( $SERVERROOT . '/inc/' . $file );
2010-04-24 14:40:20 +04:00
}
}
function oc_include_once ( $file ){
global $SERVERROOT ;
global $DOCUMENTROOT ;
global $WEBROOT ;
global $CONFIG_DBNAME ;
global $CONFIG_DBHOST ;
global $CONFIG_DBUSER ;
global $CONFIG_DBPASSWORD ;
global $CONFIG_DBTYPE ;
global $CONFIG_DATADIRECTORY ;
global $CONFIG_HTTPFORCESSL ;
global $CONFIG_DATEFORMAT ;
global $CONFIG_INSTALLED ;
2010-07-05 13:37:50 +04:00
if ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return include_once ( $SERVERROOT . '/' . $file );
2010-04-24 14:40:20 +04:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 05:21:57 +04:00
return include_once ( $SERVERROOT . '/inc/' . $file );
2010-07-05 13:37:50 +04:00
} elseif ( is_file ( $file )){
return include_once ( $file );
2010-04-24 14:40:20 +04:00
}
}
2010-05-09 18:33:16 +04:00
function chmodr ( $path , $filemode ) {
// echo "$path<br/>";
if ( ! is_dir ( $path ))
return chmod ( $path , $filemode );
$dh = opendir ( $path );
while (( $file = readdir ( $dh )) !== false ) {
if ( $file != '.' && $file != '..' ) {
$fullpath = $path . '/' . $file ;
if ( is_link ( $fullpath ))
return FALSE ;
elseif ( ! is_dir ( $fullpath ) && ! chmod ( $fullpath , $filemode ))
return FALSE ;
elseif ( ! chmodr ( $fullpath , $filemode ))
return FALSE ;
}
}
closedir ( $dh );
if ( chmod ( $path , $filemode ))
return TRUE ;
else
return FALSE ;
}
2010-06-27 02:16:09 +04:00
?>