2010-03-10 12:03:40 +00:00
< ? php
/**
* ownCloud
*
2011-03-01 22:20:16 +00:00
* @ author Frank Karlitschek
* @ copyright 2010 Frank Karlitschek karlitschek @ kde . org
*
2010-03-10 12:03:40 +00:00
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
2011-03-01 22:20:16 +00:00
* License as published by the Free Software Foundation ; either
2010-03-10 12:03:40 +00:00
* version 3 of the License , or any later version .
2011-03-01 22:20:16 +00:00
*
2010-03-10 12:03:40 +00:00
* 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 .
2011-03-01 22:20:16 +00:00
*
* You should have received a copy of the GNU Affero General Public
2010-03-10 12:03:40 +00:00
* License along with this library . If not , see < http :// www . gnu . org / licenses />.
2011-03-01 22:20:16 +00:00
*
2010-03-10 12:03:40 +00:00
*/
// 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);
2011-03-01 22:20:16 +00:00
error_reporting ( E_ERROR | E_PARSE | E_WARNING ); // 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
2011-03-01 22:20:16 +00:00
$SERVERROOT = substr ( __FILE__ , 0 , - 13 );
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 ){
2011-03-01 22:20:16 +00:00
if ( ! isset ( $_SERVER [ 'HTTPS' ]) or $_SERVER [ 'HTTPS' ] != 'on' ) {
$url = " https:// " . $_SERVER [ 'SERVER_NAME' ] . $_SERVER [ 'REQUEST_URI' ];
header ( " Location: $url " );
exit ;
}
2010-03-10 12:03:40 +00:00
}
// load core libs
2011-03-01 22:20:16 +00:00
oc_require_once ( 'files.php' );
oc_require_once ( 'filesystem.php' );
oc_require_once ( 'filestorage.php' );
oc_require_once ( 'fileobserver.php' );
oc_require_once ( 'log.php' );
oc_require_once ( 'config.php' );
oc_require_once ( 'user.php' );
oc_require_once ( 'ocs.php' );
oc_require_once ( 'connect.php' );
oc_require_once ( 'remotestorage.php' );
oc_require_once ( '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
2011-03-01 22:20:16 +00:00
oc_startup ();
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
2011-01-01 00:01:57 +00:00
OC_USER :: logoutlistener ();
$loginresult = OC_USER :: loginlistener ();
2010-03-16 07:48:36 +00:00
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 ();
2011-03-01 22:20:16 +00:00
public static $adminpages = array ();
public static $applications = array ();
public static $navigation = array ();
public static $personalmenu = array ();
2010-09-06 18:02:17 +00:00
private static $fsSetup = false ;
2011-03-01 22:20:16 +00:00
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-10-21 17:38:01 +00:00
global $SERVERROOT ;
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 , '/' );
2011-03-01 22:20:16 +00:00
2010-09-02 18:47:15 +00:00
$CONFIG_DATADIRECTORY = $CONFIG_DATADIRECTORY_ROOT . '/' . $_SESSION [ 'username_clean' ];
if ( ! is_dir ( $CONFIG_DATADIRECTORY )){
mkdir ( $CONFIG_DATADIRECTORY );
}
2011-03-01 22:20:16 +00:00
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' ]);
}
}
}
2011-03-01 22:20:16 +00:00
2010-09-06 18:02:17 +00:00
//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
}
}
2011-03-01 22:20:16 +00:00
2010-09-02 18:47:15 +00:00
/**
2011-03-01 22:20:16 +00:00
* get the current installed version of ownCloud
* @ return array
*/
2010-07-28 20:45:24 +00:00
public static function getVersion (){
2011-03-01 22:20:16 +00:00
return array ( 1 , 2 , 0 );
2010-07-28 20:45:24 +00:00
}
2010-03-10 12:03:40 +00:00
2011-03-01 22:20:16 +00:00
/**
* Create an url
*
* @ param string $application
* @ param string $file
*/
public static function linkTo ( $application , $file = null ){
global $WEBROOT ;
if ( is_null ( $file )){
$file = $application ;
$application = " " ;
}
return " $WEBROOT / $application / $file " ;
}
2010-03-10 12:03:40 +00:00
2011-03-01 22:20:16 +00:00
/**
* Create an image link
*
* @ param string $application
* @ param string $file
*/
public static function imagePath ( $application , $file = null ){
global $WEBROOT ;
if ( is_null ( $file )){
$file = $application ;
$application = " " ;
}
return " $WEBROOT / $application /img/ $file " ;
}
2010-03-16 07:48:36 +00:00
2011-03-01 22:20:16 +00:00
/**
* add a javascript file
*
* @ param url $url
*/
public static function addScript ( $application , $file = null ){
if ( is_null ( $file )){
$file = $application ;
$application = " " ;
}
self :: $scripts [] = " $application /js/ $file " ;
2011-01-18 17:10:37 +00:00
}
2011-03-01 22:20:16 +00:00
/**
* add a css file
*
* @ param url $url
*/
public static function addStyle ( $application , $file = null ){
if ( is_null ( $file )){
$file = $application ;
$application = " " ;
}
self :: $styles [] = " $application /css/ $file " ;
}
/**
* add an entry to the main navigation
*
* @ param array $entry
*/
public static function addNavigationEntry ( $entry ){
OC_UTIL :: $navigation [] = $entry ;
}
/**
* add administration pages
*
* @ param array $entry
*/
public static function addAdminPage ( $entry ){
OC_UTIL :: $adminpages [] = $entry ;
}
/**
* add application
*
* @ param array $entry
*/
public static function addApplication ( $entry ){
OC_UTIL :: $applications [] = $entry ;
}
/**
* add an entry to the personal menu
*
* @ param array $entry
*/
public static function addPersonalMenuEntry ( $entry ){
OC_UTIL :: $personalmenu [] = $entry ;
}
/**
* check if the current server configuration is suitable for ownCloud
*
*/
public static function checkServer (){
global $SERVERROOT ;
global $CONFIG_DATADIRECTORY_ROOT ;
global $CONFIG_BACKUPDIRECTORY ;
global $CONFIG_ENABLEBACKUP ;
global $CONFIG_INSTALLED ;
$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 ( ! stristr ( PHP_OS , 'WIN' )){
if ( $CONFIG_DBTYPE == 'sqlite' ){
$file = $SERVERROOT . '/' . $CONFIG_DBNAME ;
if ( file_exists ( $file )){
2011-01-18 17:10:37 +00:00
$prems = substr ( decoct ( fileperms ( $file )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
2011-03-01 22:20:16 +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/>' ;
}
2011-01-18 17:10:37 +00:00
}
2010-06-01 11:59:04 +00:00
}
2010-05-09 14:33:16 +00:00
}
2011-01-18 17:10:37 +00:00
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
if ( substr ( $prems , - 1 ) != '0' ){
2011-03-01 22:20:16 +00:00
chmodr ( $CONFIG_DATADIRECTORY_ROOT , 0770 );
2011-01-18 17:10:37 +00:00
clearstatcache ();
2011-03-01 22:20:16 +00:00
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
2011-01-18 17:10:37 +00:00
if ( substr ( $prems , 2 , 1 ) != '0' ){
2011-03-01 22:20:16 +00:00
$error .= 'Data directory (' . $CONFIG_DATADIRECTORY_ROOT . ') is readable from the web<br/>' ;
2011-01-18 17:10:37 +00:00
}
}
2011-03-01 22:20:16 +00:00
if ( $CONFIG_ENABLEBACKUP ){
$prems = substr ( decoct ( fileperms ( $CONFIG_BACKUPDIRECTORY )), - 3 );
if ( substr ( $prems , - 1 ) != '0' ){
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/>' ;
}
}
}
} else {
//TODO: premisions checks for windows hosts
}
if ( $error ){
die ( $error );
2011-01-18 17:10:37 +00:00
}
2010-05-09 14:33:16 +00:00
}
2010-03-16 07:48:36 +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 an icon for a filetype
*
*/
2010-07-10 17:56:47 +00:00
public static function showIcon ( $filetype ){
2011-03-01 22:20:16 +00:00
global $WEBROOT ;
if ( $filetype == 'dir' ){ echo ( '<td><img src="' . $WEBROOT . '/img/icons/folder.png" width="16" height="16"></td>' );
} elseif ( $filetype == 'foo' ){ echo ( '<td>foo</td>' );
} 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 ;
2011-02-06 00:18:45 +00:00
@ oc_require_once ( 'MDB2.php' );
2010-05-04 01:21:57 +00:00
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 ,
2011-03-01 22:20:16 +00:00
'mode' => '0644' ,
2010-05-04 01:21:57 +00:00
);
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
}
2011-02-06 00:18:45 +00:00
self :: $DBConnection = MDB2 :: factory ( $dsn , $options );
2011-03-01 22:20:16 +00:00
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>' );
2011-02-06 00:18:45 +00:00
$error = self :: $DBConnection -> getMessage ();
error_log ( " $error " );
error_log ( self :: $DBConnection -> getUserInfo ());
die ( $error );
2010-05-04 01:21:57 +00:00
}
self :: $DBConnection -> setFetchMode ( MDB2_FETCHMODE_ASSOC );
2010-09-11 19:09:53 +00:00
}
}
2011-03-01 22:20:16 +00:00
2010-09-11 19:09:53 +00:00
public static function connectScheme (){
self :: connect ();
2011-02-06 00:18:45 +00:00
@ oc_require_once ( 'MDB2/Schema.php' );
2010-09-11 19:09:53 +00:00
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
}
}
2011-03-01 22:20:16 +00:00
2010-05-04 01:21:57 +00:00
/**
2011-03-01 22:20:16 +00:00
* executes a query on the database
*
* @ param string $cmd
* @ return result - set
*/
2010-05-04 01:21:57 +00:00
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 ();
2011-01-23 02:23:03 +00:00
//fix differences between sql versions
//differences in escaping of table names (` for mysql)
if ( $CONFIG_DBTYPE == 'sqlite' ){
$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 />' ;
2011-03-01 22:20:16 +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 ;
2011-03-01 22:20:16 +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 ;
2011-01-23 02:23:03 +00:00
//fix differences between sql versions
//differences in escaping of table names (` for mysql)
if ( $CONFIG_DBTYPE == 'sqlite' ){
$cmd = str_replace ( '`' , '\'' , $cmd );
2010-06-20 15:58:39 +00:00
} elseif ( $CONFIG_DBTYPE == 'pgsql' ){
$cmd = str_replace ( '`' , '"' , $cmd );
}
$result = self :: $DBConnection -> queryAll ( $cmd );
2011-02-06 00:18:45 +00:00
if ( PEAR :: isError ( $result )){
2010-06-20 15:58:39 +00:00
$entry = 'DB Error: "' . $result -> getMessage () . '"<br />' ;
$entry .= 'Offending command was: ' . $cmd . '<br />' ;
die ( $entry );
}
return $result ;
2011-03-01 22:20:16 +00:00
}
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
}
2011-03-01 22:20:16 +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 );
}
2011-03-01 22:20:16 +00:00
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
}
2011-03-01 22:20:16 +00:00
2010-05-04 01:21:57 +00:00
static public function disconnect (){
if ( self :: $DBConnection ){
self :: $DBConnection -> disconnect ();
self :: $DBConnection = false ;
}
}
2011-03-01 22:20:16 +00:00
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
}
2011-03-01 22:20:16 +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 );
}
2011-03-01 22:20:16 +00:00
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 ;
2011-03-01 22:20:16 +00:00
2010-04-24 10:40:20 +00:00
if ( is_file ( $file )){
2010-05-04 01:21:57 +00:00
return require ( $file );
2011-03-01 22:20:16 +00:00
}
elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return require ( $SERVERROOT . '/' . $file );
2011-03-01 22:20:16 +00:00
}
elseif ( is_file ( $SERVERROOT . '/lib/' . $file )){
return require ( $SERVERROOT . '/lib/' . $file );
}
elseif ( is_file ( $SERVERROOT . '/3dparty/' . $file )){
return require ( $SERVERROOT . '/3dparty/' . $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 ;
2011-03-01 22:20:16 +00:00
2010-04-24 10:40:20 +00:00
if ( is_file ( $file )){
2010-05-04 01:21:57 +00:00
return require_once ( $file );
2011-03-01 22:20:16 +00:00
}
elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return require_once ( $SERVERROOT . '/' . $file );
2011-03-01 22:20:16 +00:00
}
elseif ( is_file ( $SERVERROOT . '/lib/' . $file )){
return require_once ( $SERVERROOT . '/lib/' . $file );
}
elseif ( is_file ( $SERVERROOT . '/3dparty/' . $file )){
return require_once ( $SERVERROOT . '/3dparty/' . $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 ;
2011-03-01 22:20:16 +00:00
2010-04-24 10:40:20 +00:00
if ( is_file ( $file )){
2010-05-04 01:21:57 +00:00
return include ( $file );
2011-03-01 22:20:16 +00:00
}
elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 01:21:57 +00:00
return include ( $SERVERROOT . '/' . $file );
2011-03-01 22:20:16 +00:00
}
elseif ( is_file ( $SERVERROOT . '/lib/' . $file )){
return include ( $SERVERROOT . '/lib/' . $file );
}
elseif ( is_file ( $SERVERROOT . '/3dparty/' . $file )){
return include ( $SERVERROOT . '/3dparty/' . $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 ;
2011-03-01 22:20:16 +00:00
if ( is_file ( $file )){
2010-07-05 09:37:50 +00:00
return include_once ( $file );
2010-04-24 10:40:20 +00:00
}
2011-03-01 22:20:16 +00:00
elseif ( is_file ( $SERVERROOT . '/' . $file )){
return include_once ( $SERVERROOT . '/' . $file );
}
elseif ( is_file ( $SERVERROOT . '/lib/' . $file )){
return include_once ( $SERVERROOT . '/lib/' . $file );
}
elseif ( is_file ( $SERVERROOT . '/3dparty/' . $file )){
return include_once ( $SERVERROOT . '/3dparty/' . $file );
}
2010-04-24 10:40:20 +00:00
}
2011-03-01 22:20: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 ;
}
function oc_startup (){
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 ;
// Add the stuff we need always
OC_UTIL :: addPersonalMenuEntry ( array ( " file " => " index.php?logout=1 " , " name " => " Logout " ));
OC_UTIL :: addScript ( " jquery-1.5.min " );
OC_UTIL :: addScript ( " jquery-ui-1.8.10.custom.min " );
OC_UTIL :: addScript ( " js " );
OC_UTIL :: addStyle ( " jquery-ui-1.8.10.custom " );
OC_UTIL :: addStyle ( " styles " );
// Require all appinfo.php
$dir = opendir ( $SERVERROOT );
while ( false !== ( $filename = readdir ( $dir ))){
if ( substr ( $filename , 0 , 1 ) != '.' ){
if ( file_exists ( " $SERVERROOT / $filename /appinfo.php " )){
oc_require ( " $filename /appinfo.php " );
}
}
}
closedir ( $dir );
// Everything done
return true ;
2010-05-09 14:33:16 +00:00
}
2010-06-26 22:16:09 +00:00
?>