2010-03-10 12:03:40 +00: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 07:48:36 +00:00
ob_start ();
2010-05-04 01:21:57 +00:00
// error_reporting(E_ALL | E_STRICT);
error_reporting ( E_ALL ); // MDB2 gives loads of strict error, disabling for now
2010-06-29 12:53:54 +00:00
2010-03-10 12:03:40 +00:00
date_default_timezone_set ( 'Europe/Berlin' );
ini_set ( 'arg_separator.output' , '&' );
ini_set ( 'session.cookie_httponly' , '1;' );
session_start ();
2010-03-16 07:48:36 +00:00
// calculate the documentroot
2010-03-24 09:27:07 +00:00
$SERVERROOT = substr ( __FILE__ , 0 , - 17 );
2010-06-27 16:09:59 +00:00
$DOCUMENTROOT = realpath ( $_SERVER [ 'DOCUMENT_ROOT' ]);
2010-04-30 13:32:22 +00:00
$SERVERROOT = str_replace ( " \\ " , '/' , $SERVERROOT );
2010-06-27 16:09:59 +00:00
$SUBURI = substr ( realpath ( $_SERVER [ " SCRIPT_FILENAME " ]), strlen ( $SERVERROOT ));
2010-06-26 22:16:09 +00:00
$WEBROOT = substr ( $_SERVER [ " SCRIPT_NAME " ], 0 , strlen ( $_SERVER [ " SCRIPT_NAME " ]) - strlen ( $SUBURI ));
2010-06-27 16:09:59 +00:00
2010-07-28 20:45:24 +00:00
2010-06-26 22:16:09 +00:00
if ( $WEBROOT != '' and $WEBROOT [ 0 ] !== '/' ){
2010-04-19 17:46:42 +00:00
$WEBROOT = '/' . $WEBROOT ;
}
2010-03-16 07:48:36 +00:00
// set the right include path
2010-04-24 10:40:20 +00:00
// set_include_path(get_include_path().PATH_SEPARATOR.$SERVERROOT.PATH_SEPARATOR.$SERVERROOT.'/inc'.PATH_SEPARATOR.$SERVERROOT.'/config');
2010-03-16 07:48:36 +00:00
// define default config values
2010-04-22 17:03:54 +00:00
$CONFIG_INSTALLED = false ;
2010-04-19 17:46:42 +00:00
$CONFIG_DATADIRECTORY = $SERVERROOT . '/data' ;
2010-05-08 19:32:20 +00:00
$CONFIG_BACKUPDIRECTORY = $SERVERROOT . '/backup' ;
2010-03-16 07:48:36 +00:00
$CONFIG_HTTPFORCESSL = false ;
2010-05-08 19:32:20 +00:00
$CONFIG_ENABLEBACKUP = false ;
2010-03-16 07:48:36 +00:00
$CONFIG_DATEFORMAT = 'j M Y G:i' ;
$CONFIG_DBNAME = 'owncloud' ;
2010-03-30 20:15:45 +00:00
$CONFIG_DBTYPE = 'sqlite' ;
2010-09-06 18:07:27 +00:00
$CONFIG_FILESYSTEM = array ();
2010-04-19 17:46:42 +00:00
2010-03-16 07:48:36 +00:00
// include the generated configfile
2010-05-02 09:24:46 +00:00
@ include_once ( $SERVERROOT . '/config/config.php' );
2010-03-16 07:48:36 +00:00
2010-05-04 01:21:57 +00: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 12:03:40 +00:00
// redirect to https site if configured
2010-03-16 07:48:36 +00:00
if ( isset ( $CONFIG_HTTPFORCESSL ) and $CONFIG_HTTPFORCESSL ){
2010-03-10 12:03:40 +00: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 10:40:20 +00:00
oc_require_once ( 'lib_files.php' );
2010-05-07 20:50:59 +00:00
oc_require_once ( 'lib_filesystem.php' );
2010-05-08 19:32:20 +00:00
oc_require_once ( 'lib_filestorage.php' );
oc_require_once ( 'lib_fileobserver.php' );
2010-04-24 10:40:20 +00:00
oc_require_once ( 'lib_log.php' );
oc_require_once ( 'lib_config.php' );
oc_require_once ( 'lib_user.php' );
2010-04-25 16:18:04 +00:00
oc_require_once ( 'lib_ocs.php' );
2010-05-04 01:21:57 +00:00
@ oc_require_once ( 'MDB2.php' );
2010-06-18 18:08:24 +00:00
@ oc_require_once ( 'MDB2/Schema.php' );
2010-05-02 16:07:36 +00:00
oc_require_once ( 'lib_connect.php' );
2010-07-07 10:30:30 +00:00
oc_require_once ( 'lib_remotestorage.php' );
2010-07-28 16:12:00 +00:00
oc_require_once ( 'lib_plugin.php' );
2010-04-22 17:03:54 +00:00
2010-07-28 16:12:00 +00:00
OC_PLUGIN :: loadPlugins ();
2010-04-28 10:15:52 +00:00
2010-08-05 00:44:54 +00:00
if ( ! isset ( $CONFIG_BACKEND )){
$CONFIG_BACKEND = 'database' ;
}
2010-08-03 15:43:54 +00:00
OC_USER :: setBackend ( $CONFIG_BACKEND );
2010-09-02 18:47:15 +00:00
OC_UTIL :: setupFS ();
2010-03-10 12:03:40 +00:00
2010-03-16 07:48:36 +00: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 12:03:40 +00:00
/**
* Class for utility functions
*
*/
class OC_UTIL {
2010-09-02 18:47:15 +00:00
public static $scripts = array ();
2010-09-07 23:43:40 +00:00
public static $styles = array ();
2010-09-06 18:02:17 +00:00
private static $fsSetup = false ;
2010-09-02 18:47:15 +00:00
public static function setupFS (){ // configure the initial filesystem based on the configuration
2010-09-06 18:02:17 +00:00
if ( self :: $fsSetup ){ //setting up the filesystem twice can only lead to trouble
return false ;
}
2010-09-02 18:47:15 +00:00
global $CONFIG_DATADIRECTORY_ROOT ;
global $CONFIG_DATADIRECTORY ;
global $CONFIG_BACKUPDIRECTORY ;
global $CONFIG_ENABLEBACKUP ;
2010-09-06 18:02:17 +00:00
global $CONFIG_FILESYSTEM ;
2010-09-02 18:47:15 +00:00
if ( ! is_dir ( $CONFIG_DATADIRECTORY_ROOT )){
@ 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-09-06 18:02:17 +00:00
if ( OC_USER :: isLoggedIn ()){ //if we aren't logged in, there is no use to set up the filesystem
//first set up the local "root" storage and the backupstorage if needed
$rootStorage = OC_FILESYSTEM :: createStorage ( 'local' , array ( 'datadir' => $CONFIG_DATADIRECTORY ));
2010-09-02 18:47:15 +00: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' ]);
}
2010-09-06 18:02:17 +00:00
$backupStorage = OC_FILESYSTEM :: createStorage ( 'local' , array ( 'datadir' => $CONFIG_BACKUPDIRECTORY ));
2010-09-02 18:47:15 +00:00
$backup = new OC_FILEOBSERVER_BACKUP ( array ( 'storage' => $backupStorage ));
$rootStorage -> addObserver ( $backup );
}
OC_FILESYSTEM :: mount ( $rootStorage , '/' );
$CONFIG_DATADIRECTORY = $CONFIG_DATADIRECTORY_ROOT . '/' . $_SESSION [ 'username_clean' ];
if ( ! is_dir ( $CONFIG_DATADIRECTORY )){
mkdir ( $CONFIG_DATADIRECTORY );
}
2010-09-06 18:02:17 +00:00
//set up the other storages according to the system settings
foreach ( $CONFIG_FILESYSTEM as $storageConfig ){
if ( OC_FILESYSTEM :: hasStorageType ( $storageConfig [ 'type' ])){
$arguments = $storageConfig ;
unset ( $arguments [ 'type' ]);
unset ( $arguments [ 'mountpoint' ]);
$storage = OC_FILESYSTEM :: createStorage ( $storageConfig [ 'type' ], $arguments );
if ( $storage ){
OC_FILESYSTEM :: mount ( $storage , $storageConfig [ 'mountpoint' ]);
}
}
}
//jail the user into his "home" directory
2010-09-02 18:47:15 +00:00
OC_FILESYSTEM :: chroot ( '/' . $_SESSION [ 'username_clean' ]);
2010-09-06 18:02:17 +00:00
self :: $fsSetup = true ;
2010-09-02 18:47:15 +00:00
}
}
/**
* get the current installed version of ownCloud
* @ return array
*/
2010-07-28 20:45:24 +00:00
public static function getVersion (){
return array ( 1 , 0 , 60 );
}
2010-03-28 11:07:13 +00:00
/**
* add a javascript file
*
* @ param url $url
*/
2010-07-10 17:56:47 +00:00
public static function addScript ( $url ){
2010-03-28 11:07:13 +00:00
self :: $scripts [] = $url ;
}
2010-09-07 23:43:40 +00:00
/**
* add a css file
*
* @ param url $url
*/
public static function addStyle ( $url ){
self :: $styles [] = $url ;
}
2010-03-10 12:03:40 +00:00
/**
* array to store all the optional navigation buttons of the plugins
*
*/
static private $NAVIGATION = array ();
2010-03-16 07:48:36 +00:00
/**
* check if the current server configuration is suitable for ownCloud
*
*/
2010-07-10 17:56:47 +00:00
public static function checkServer (){
2010-03-24 09:27:07 +00:00
global $SERVERROOT ;
2010-05-09 14:33:16 +00:00
global $CONFIG_DATADIRECTORY_ROOT ;
global $CONFIG_BACKUPDIRECTORY ;
global $CONFIG_ENABLEBACKUP ;
2010-05-22 22:18:37 +00:00
global $CONFIG_INSTALLED ;
2010-05-09 14:33:16 +00: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 11:59:04 +00:00
if ( file_exists ( $file )){
2010-05-09 14:33:16 +00:00
$prems = substr ( decoct ( fileperms ( $file )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
2010-06-01 11:59:04 +00: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 14:33:16 +00:00
}
}
}
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
2010-05-15 18:23:43 +00:00
if ( substr ( $prems , - 1 ) != '0' ){
2010-05-09 14:33:16 +00: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 18:23:43 +00:00
if ( substr ( $prems , - 1 ) != '0' ){
2010-05-09 14:33:16 +00: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 07:48:36 +00:00
}
2010-03-10 12:03:40 +00:00
/**
* show the header of the web GUI
*
*/
2010-07-10 17:56:47 +00:00
public static function showHeader (){
2010-03-16 07:48:36 +00:00
global $CONFIG_ADMINLOGIN ;
global $WEBROOT ;
2010-04-24 10:40:20 +00:00
oc_require ( 'templates/header.php' );;
2010-03-10 12:03:40 +00:00
}
2010-05-14 21:32:35 +00: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 12:03:40 +00:00
/**
* show the footer of the web GUI
*
*/
2010-07-10 17:56:47 +00:00
public static function showFooter (){
2010-03-10 12:03:40 +00:00
global $CONFIG_FOOTEROWNERNAME ;
global $CONFIG_FOOTEROWNEREMAIL ;
2010-04-24 10:40:20 +00:00
oc_require ( 'templates/footer.php' );;
2010-03-10 12:03:40 +00:00
}
/**
* add an navigationentry to the main navigation
*
* @ param name $name
* @ param url $url
*/
2010-07-10 17:56:47 +00:00
public static function addNavigationEntry ( $name , $url ) {
2010-03-10 12:03:40 +00:00
$entry = array ();
$entry [ 'name' ] = $name ;
$entry [ 'url' ] = $url ;
OC_UTIL :: $NAVIGATION [] = $entry ;
}
/**
* show the main navigation
*
*/
2010-07-10 17:56:47 +00:00
public static function showNavigation (){
2010-03-16 07:48:36 +00:00
global $WEBROOT ;
2010-03-17 21:21:01 +00:00
global $SERVERROOT ;
2010-03-29 19:49:11 +00:00
echo ( '<table class="center" cellpadding="5" cellspacing="0" border="0"><tr>' );
2010-03-16 07:48:36 +00:00
echo ( '<td class="navigationitem1"><a href="' . $WEBROOT . '/">' . $_SESSION [ 'username' ] . '</a></td>' );
2010-03-24 07:51:59 +00: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 12:03:40 +00:00
foreach ( OC_UTIL :: $NAVIGATION as $NAVI ) {
2010-03-17 21:21:01 +00: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 12:03:40 +00:00
}
2010-04-22 17:03:54 +00: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-22 22:05:04 +00: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-03-19 16:38:19 +00:00
echo ( '<td class="navigationitem"><a href="?logoutbutton=1">Logout</a></td>' );
2010-03-10 12:03:40 +00:00
echo ( '</tr></table>' );
}
/**
* show the loginform
*
*/
2010-07-10 17:56:47 +00:00
public static function showLoginForm (){
2010-03-16 07:48:36 +00:00
global $loginresult ;
2010-04-24 10:40:20 +00:00
oc_require ( 'templates/loginform.php' );
2010-03-10 12:03:40 +00:00
}
2010-03-16 07:48:36 +00:00
2010-03-10 12:03:40 +00:00
/**
* show an icon for a filetype
*
*/
2010-07-10 17:56:47 +00:00
public static function showIcon ( $filetype ){
2010-03-16 07:48:36 +00:00
global $WEBROOT ;
if ( $filetype == 'dir' ){ echo ( '<td><img src="' . $WEBROOT . '/img/icons/folder.png" width="16" height="16"></td>' );
2010-03-10 12:03:40 +00:00
} elseif ( $filetype == 'foo' ){ echo ( '<td>foo</td>' );
2010-03-16 07:48:36 +00:00
} else { echo ( '<td><img src="' . $WEBROOT . '/img/icons/other.png" width="16" height="16"></td>' );
2010-03-10 12:03:40 +00:00
}
}
}
2010-03-16 07:48:36 +00:00
2010-03-10 12:03:40 +00:00
/**
* Class for database access
*
*/
class OC_DB {
2010-05-04 01:21:57 +00:00
static private $DBConnection = false ;
2010-06-18 18:08:24 +00:00
static private $schema = false ;
2010-07-05 11:31:32 +00:00
static private $affected = 0 ;
static private $result = false ;
2010-05-04 01:21:57 +00: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 17:03:54 +00:00
global $CONFIG_DBTYPE ;
2010-05-04 01:21:57 +00:00
global $DOCUMENTROOT ;
global $SERVERROOT ;
if ( ! self :: $DBConnection ){
$options = array (
'portability' => MDB2_PORTABILITY_ALL ,
2010-06-18 18:08:24 +00:00
'log_line_break' => '<br>' ,
'idxname_format' => '%s' ,
2010-07-05 09:37:50 +00:00
'debug' => true ,
2010-06-18 18:08:24 +00:00
'quote_identifier' => true ,
2010-05-04 01:21:57 +00:00
);
2010-04-22 17:03:54 +00:00
if ( $CONFIG_DBTYPE == 'sqlite' ){
2010-05-04 01:21:57 +00:00
$dsn = array (
'phptype' => 'sqlite' ,
'database' => $SERVERROOT . '/' . $CONFIG_DBNAME ,
'mode' => '0644' ,
);
2010-04-22 17:03:54 +00:00
} elseif ( $CONFIG_DBTYPE == 'mysql' ){
2010-05-04 01:21:57 +00:00
$dsn = array (
'phptype' => 'mysql' ,
'username' => $CONFIG_DBUSER ,
'password' => $CONFIG_DBPASSWORD ,
'hostspec' => $CONFIG_DBHOST ,
'database' => $CONFIG_DBNAME ,
);
2010-06-20 15:58:39 +00:00
} elseif ( $CONFIG_DBTYPE == 'pgsql' ){
$dsn = array (
'phptype' => 'pgsql' ,
'username' => $CONFIG_DBUSER ,
'password' => $CONFIG_DBPASSWORD ,
'hostspec' => $CONFIG_DBHOST ,
'database' => $CONFIG_DBNAME ,
);
2010-04-22 17:03:54 +00:00
}
2010-06-18 18:08:24 +00:00
self :: $DBConnection =& MDB2 :: factory ( $dsn , $options );
2010-07-05 09:37:50 +00:00
if ( PEAR :: isError ( self :: $DBConnection )) {
2010-05-04 01:21:57 +00: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-09-11 19:09:53 +00:00
}
}
public static function connectScheme (){
self :: connect ();
if ( ! self :: $schema ){
2010-07-05 09:37:50 +00:00
self :: $schema =& MDB2_Schema :: factory ( self :: $DBConnection );
2010-05-04 01:21:57 +00: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 17:03:54 +00:00
return false ;
}
2010-05-04 01:21:57 +00:00
OC_DB :: connect ();
if ( $CONFIG_DBTYPE == 'sqlite' ){ //fix differences between sql versions
$cmd = str_replace ( '`' , '' , $cmd );
2010-06-20 15:58:39 +00:00
} elseif ( $CONFIG_DBTYPE == 'pgsql' ){
$cmd = str_replace ( '`' , '"' , $cmd );
2010-05-04 01:21:57 +00:00
}
2010-07-05 11:31:32 +00:00
$result = self :: $DBConnection -> exec ( $cmd );
2010-05-04 01:21:57 +00:00
if ( PEAR :: isError ( $result )) {
$entry = 'DB Error: "' . $result -> getMessage () . '"<br />' ;
$entry .= 'Offending command was: ' . $cmd . '<br />' ;
2010-07-25 00:38:35 +00:00
error_log ( $entry );
2010-05-04 01:21:57 +00:00
die ( $entry );
2010-07-05 11:31:32 +00:00
} else {
self :: $affected = $result ;
2010-05-04 01:21:57 +00:00
}
2010-07-05 11:31:32 +00:00
self :: $result = $result ;
2010-05-04 01:21:57 +00:00
return $result ;
2010-04-22 17:03:54 +00:00
}
2010-03-16 19:25:05 +00:00
/**
2010-05-04 01:21:57 +00:00
* executes a query on the database and returns the result in an array
2010-03-16 19:25:05 +00:00
*
* @ param string $cmd
* @ return result - set
*/
2010-05-04 01:21:57 +00:00
static function select ( $cmd ){
OC_DB :: connect ();
2010-06-20 15:58:39 +00: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 01:21:57 +00: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 12:03:40 +00:00
2010-05-04 01:21:57 +00:00
/**
* closing a db connection
*
* @ return bool
*/
static function close () {
self :: $DBConnection -> disconnect ();
self :: $DBConnection = false ;
}
2010-03-10 12:03:40 +00:00
2010-05-04 01:21:57 +00:00
/**
* Returning primarykey if last statement was an insert .
*
* @ return primarykey
*/
static function insertid () {
2010-06-18 18:08:24 +00:00
$id = self :: $DBConnection -> lastInsertID ();
return $id ;
2010-05-04 01:21:57 +00:00
}
2010-03-10 12:03:40 +00:00
2010-05-04 01:21:57 +00: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 11:31:32 +00:00
return self :: $affected ;
2010-05-04 01:21:57 +00:00
}
2010-05-15 20:29:14 +00: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 01:21:57 +00:00
/**
* Freeing resultset ( performance )
*
* @ param unknown_type $result
* @ return bool
*/
2010-07-05 11:31:32 +00:00
static function free_result () {
if ( self :: $result ){
self :: $result -> free ();
self :: $result = false ;
}
2010-05-04 01:21:57 +00:00
}
static public function disconnect (){
if ( self :: $DBConnection ){
self :: $DBConnection -> disconnect ();
self :: $DBConnection = false ;
}
}
2010-05-22 21:05:49 +00: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 01:21:57 +00:00
}
2010-06-18 18:08:24 +00:00
2010-07-10 17:56:47 +00:00
static function getDbStructure ( $file ){
2010-09-11 19:09:53 +00:00
OC_DB :: connectScheme ();
2010-06-18 18:08:24 +00:00
$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 );
}
2010-07-10 17:56:47 +00:00
static function createDbFromStructure ( $file ){
2010-09-11 19:09:53 +00:00
OC_DB :: connectScheme ();
2010-07-06 17:57:08 +00:00
global $CONFIG_DBNAME ;
global $CONFIG_DBTABLEPREFIX ;
$content = file_get_contents ( $file );
$file2 = tempnam ( sys_get_temp_dir (), 'oc_db_scheme_' );
$content = str_replace ( '*dbname*' , $CONFIG_DBNAME , $content );
$content = str_replace ( '*dbprefix*' , $CONFIG_DBTABLEPREFIX , $content );
file_put_contents ( $file2 , $content );
$definition =@ self :: $schema -> parseDatabaseDefinitionFile ( $file2 );
unlink ( $file2 );
2010-06-18 18:08:24 +00: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 12:03:40 +00:00
}
2010-04-24 10:40:20 +00: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 01:21:57 +00:00
return require ( $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return require ( $SERVERROOT . '/' . $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 01:21:57 +00:00
return require ( $SERVERROOT . '/inc/' . $file );
2010-04-24 10:40:20 +00: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 01:21:57 +00:00
return require_once ( $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return require_once ( $SERVERROOT . '/' . $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 01:21:57 +00:00
return require_once ( $SERVERROOT . '/inc/' . $file );
2010-04-24 10:40:20 +00: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 01:21:57 +00:00
return include ( $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return include ( $SERVERROOT . '/' . $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 01:21:57 +00:00
return include ( $SERVERROOT . '/inc/' . $file );
2010-04-24 10:40:20 +00: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 09:37:50 +00:00
if ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return include_once ( $SERVERROOT . '/' . $file );
2010-04-24 10:40:20 +00:00
} elseif ( is_file ( $SERVERROOT . '/inc/' . $file )){
2010-05-04 01:21:57 +00:00
return include_once ( $SERVERROOT . '/inc/' . $file );
2010-07-05 09:37:50 +00:00
} elseif ( is_file ( $file )){
return include_once ( $file );
2010-04-24 10:40:20 +00:00
}
}
2010-05-09 14:33:16 +00: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-26 22:16:09 +00:00
?>