2010-03-10 15:03:40 +03:00
< ? php
/**
* ownCloud
*
2011-03-02 01:20:16 +03:00
* @ author Frank Karlitschek
* @ copyright 2010 Frank Karlitschek karlitschek @ kde . org
*
2010-03-10 15:03:40 +03: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-02 01:20:16 +03:00
* License as published by the Free Software Foundation ; either
2010-03-10 15:03:40 +03:00
* version 3 of the License , or any later version .
2011-03-02 01:20:16 +03:00
*
2010-03-10 15:03:40 +03: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-02 01:20:16 +03:00
*
* You should have received a copy of the GNU Affero General Public
2010-03-10 15:03:40 +03:00
* License along with this library . If not , see < http :// www . gnu . org / licenses />.
2011-03-02 01:20:16 +03:00
*
2010-03-10 15:03:40 +03:00
*/
// 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);
2011-03-02 01:20:16 +03:00
error_reporting ( E_ERROR | E_PARSE | E_WARNING ); // 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
2011-03-02 01:20:16 +03:00
$SERVERROOT = substr ( __FILE__ , 0 , - 13 );
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-07-29 00:45:24 +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
2011-03-03 00:18:22 +03:00
// define runtime variables - unless this already has been done
if ( ! isset ( $RUNTIME_NOSETUPFS )){
$RUNTIME_NOSETUPFS = false ;
}
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-09-06 22:07:27 +04:00
$CONFIG_FILESYSTEM = array ();
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 ){
2011-03-02 01:20:16 +03:00
if ( ! isset ( $_SERVER [ 'HTTPS' ]) or $_SERVER [ 'HTTPS' ] != 'on' ) {
$url = " https:// " . $_SERVER [ 'SERVER_NAME' ] . $_SERVER [ 'REQUEST_URI' ];
header ( " Location: $url " );
exit ;
}
2010-03-10 15:03:40 +03:00
}
// load core libs
2011-03-02 01:20:16 +03: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 21:03:54 +04:00
2010-07-28 20:12:00 +04:00
OC_PLUGIN :: loadPlugins ();
2010-04-28 14:15:52 +04:00
2010-08-05 04:44:54 +04:00
if ( ! isset ( $CONFIG_BACKEND )){
$CONFIG_BACKEND = 'database' ;
}
2010-08-03 19:43:54 +04:00
OC_USER :: setBackend ( $CONFIG_BACKEND );
2011-03-03 00:18:22 +03:00
// Set up file system unless forbidden
if ( ! $RUNTIME_NOSETUPFS ){
OC_UTIL :: setupFS ();
}
2010-03-10 15:03:40 +03:00
2011-03-03 00:18:22 +03:00
// 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 );
2011-03-02 01:20:16 +03:00
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 ();
2010-03-10 15:03:40 +03:00
/**
* Class for utility functions
*
*/
class OC_UTIL {
2010-09-02 22:47:15 +04:00
public static $scripts = array ();
2010-09-08 03:43:40 +04:00
public static $styles = array ();
2011-03-02 01:20:16 +03:00
public static $adminpages = array ();
public static $applications = array ();
public static $navigation = array ();
public static $personalmenu = array ();
2010-09-06 22:02:17 +04:00
private static $fsSetup = false ;
2011-03-02 01:20:16 +03:00
2011-03-03 00:18:22 +03:00
// Can be set up
public static function setupFS ( $user = " " ){ // configure the initial filesystem based on the configuration
2010-09-06 22:02:17 +04:00
if ( self :: $fsSetup ){ //setting up the filesystem twice can only lead to trouble
return false ;
}
2011-03-03 00:18:22 +03:00
// Global Variables
2010-10-21 21:38:01 +04:00
global $SERVERROOT ;
2010-09-02 22:47:15 +04:00
global $CONFIG_DATADIRECTORY_ROOT ;
global $CONFIG_DATADIRECTORY ;
global $CONFIG_BACKUPDIRECTORY ;
global $CONFIG_ENABLEBACKUP ;
2010-09-06 22:02:17 +04:00
global $CONFIG_FILESYSTEM ;
2011-03-03 00:18:22 +03:00
// Create root dir
2010-09-02 22:47:15 +04: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) " );
}
2011-03-03 00:18:22 +03:00
// If we are not forced to load a specific user we load the one that is logged in
if ( $user == " " && OC_USER :: isLoggedIn ()){
$user = $_SESSION [ 'username_clean' ];
}
if ( $user != " " ){ //if we aren't logged in, there is no use to set up the filesystem
2010-09-06 22:02:17 +04:00
//first set up the local "root" storage and the backupstorage if needed
$rootStorage = OC_FILESYSTEM :: createStorage ( 'local' , array ( 'datadir' => $CONFIG_DATADIRECTORY ));
2010-09-02 22:47:15 +04:00
if ( $CONFIG_ENABLEBACKUP ){
if ( ! is_dir ( $CONFIG_BACKUPDIRECTORY )){
mkdir ( $CONFIG_BACKUPDIRECTORY );
}
2011-03-03 00:18:22 +03:00
if ( ! is_dir ( $CONFIG_BACKUPDIRECTORY . '/' . $user )){
mkdir ( $CONFIG_BACKUPDIRECTORY . '/' . $user );
2010-09-02 22:47:15 +04:00
}
2010-09-06 22:02:17 +04:00
$backupStorage = OC_FILESYSTEM :: createStorage ( 'local' , array ( 'datadir' => $CONFIG_BACKUPDIRECTORY ));
2010-09-02 22:47:15 +04:00
$backup = new OC_FILEOBSERVER_BACKUP ( array ( 'storage' => $backupStorage ));
$rootStorage -> addObserver ( $backup );
}
OC_FILESYSTEM :: mount ( $rootStorage , '/' );
2011-03-02 01:20:16 +03:00
2011-03-03 00:18:22 +03:00
$CONFIG_DATADIRECTORY = $CONFIG_DATADIRECTORY_ROOT . '/' . $user ;
2010-09-02 22:47:15 +04:00
if ( ! is_dir ( $CONFIG_DATADIRECTORY )){
mkdir ( $CONFIG_DATADIRECTORY );
}
2011-03-02 01:20:16 +03:00
2010-09-06 22:02:17 +04: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-02 01:20:16 +03:00
2010-09-06 22:02:17 +04:00
//jail the user into his "home" directory
2011-03-03 00:18:22 +03:00
OC_FILESYSTEM :: chroot ( '/' . $user );
2010-09-06 22:02:17 +04:00
self :: $fsSetup = true ;
2010-09-02 22:47:15 +04:00
}
}
2011-03-02 01:20:16 +03:00
2010-09-02 22:47:15 +04:00
/**
2011-03-02 01:20:16 +03:00
* get the current installed version of ownCloud
* @ return array
*/
2010-07-29 00:45:24 +04:00
public static function getVersion (){
2011-03-02 01:20:16 +03:00
return array ( 1 , 2 , 0 );
2010-07-29 00:45:24 +04:00
}
2010-03-10 15:03:40 +03:00
2011-03-02 01:20:16 +03: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 20:10:37 +03:00
}
2011-03-02 01:20:16 +03: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 20:10:37 +03:00
$prems = substr ( decoct ( fileperms ( $file )), - 3 );
if ( substr ( $prems , 2 , 1 ) != '0' ){
2011-03-02 01:20:16 +03: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 20:10:37 +03:00
}
2010-06-01 15:59:04 +04:00
}
2010-05-09 18:33:16 +04:00
}
2011-01-18 20:10:37 +03:00
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
if ( substr ( $prems , - 1 ) != '0' ){
2011-03-02 01:20:16 +03:00
chmodr ( $CONFIG_DATADIRECTORY_ROOT , 0770 );
2011-01-18 20:10:37 +03:00
clearstatcache ();
2011-03-02 01:20:16 +03:00
$prems = substr ( decoct ( fileperms ( $CONFIG_DATADIRECTORY_ROOT )), - 3 );
2011-01-18 20:10:37 +03:00
if ( substr ( $prems , 2 , 1 ) != '0' ){
2011-03-02 01:20:16 +03:00
$error .= 'Data directory (' . $CONFIG_DATADIRECTORY_ROOT . ') is readable from the web<br/>' ;
2011-01-18 20:10:37 +03:00
}
}
2011-03-02 01:20:16 +03: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 20:10:37 +03:00
}
2010-05-09 18:33:16 +04:00
}
2010-03-16 10:48:36 +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
}
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 ;
2011-02-06 03:18:45 +03:00
@ oc_require_once ( 'MDB2.php' );
2010-05-04 05:21:57 +04:00
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 ,
2011-03-02 01:20:16 +03:00
'mode' => '0644' ,
2010-05-04 05:21:57 +04:00
);
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
}
2011-02-06 03:18:45 +03:00
self :: $DBConnection = MDB2 :: factory ( $dsn , $options );
2011-03-02 01:20:16 +03:00
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>' );
2011-02-06 03:18:45 +03:00
$error = self :: $DBConnection -> getMessage ();
error_log ( " $error " );
error_log ( self :: $DBConnection -> getUserInfo ());
die ( $error );
2010-05-04 05:21:57 +04:00
}
self :: $DBConnection -> setFetchMode ( MDB2_FETCHMODE_ASSOC );
2010-09-11 23:09:53 +04:00
}
}
2011-03-02 01:20:16 +03:00
2010-09-11 23:09:53 +04:00
public static function connectScheme (){
self :: connect ();
2011-02-06 03:18:45 +03:00
@ oc_require_once ( 'MDB2/Schema.php' );
2010-09-11 23:09:53 +04:00
if ( ! self :: $schema ){
2010-07-05 13:37:50 +04:00
self :: $schema =& MDB2_Schema :: factory ( self :: $DBConnection );
2010-05-04 05:21:57 +04:00
}
}
2011-03-02 01:20:16 +03:00
2010-05-04 05:21:57 +04:00
/**
2011-03-02 01:20:16 +03:00
* executes a query on the database
*
* @ param string $cmd
* @ return result - set
*/
2010-05-04 05:21:57 +04:00
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 ();
2011-01-23 05:23:03 +03: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 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 />' ;
2011-03-02 01:20:16 +03:00
error_log ( $entry );
2010-05-04 05:21:57 +04:00
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 ;
2011-03-02 01:20:16 +03: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 ;
2011-01-23 05:23:03 +03: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 19:58:39 +04:00
} elseif ( $CONFIG_DBTYPE == 'pgsql' ){
$cmd = str_replace ( '`' , '"' , $cmd );
}
$result = self :: $DBConnection -> queryAll ( $cmd );
2011-02-06 03:18:45 +03:00
if ( PEAR :: isError ( $result )){
2010-06-20 19:58:39 +04:00
$entry = 'DB Error: "' . $result -> getMessage () . '"<br />' ;
$entry .= 'Offending command was: ' . $cmd . '<br />' ;
die ( $entry );
}
return $result ;
2011-03-02 01:20:16 +03:00
}
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
}
2011-03-02 01:20:16 +03: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 );
}
2011-03-02 01:20:16 +03:00
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
}
2011-03-02 01:20:16 +03:00
2010-05-04 05:21:57 +04:00
static public function disconnect (){
if ( self :: $DBConnection ){
self :: $DBConnection -> disconnect ();
self :: $DBConnection = false ;
}
}
2011-03-02 01:20:16 +03:00
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
}
2011-03-02 01:20:16 +03:00
2010-07-10 21:56:47 +04:00
static function getDbStructure ( $file ){
2010-09-11 23:09:53 +04:00
OC_DB :: connectScheme ();
2010-06-18 22:08:24 +04: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-02 01:20:16 +03:00
2010-07-10 21:56:47 +04:00
static function createDbFromStructure ( $file ){
2010-09-11 23:09:53 +04:00
OC_DB :: connectScheme ();
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_' );
$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 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 ;
2011-03-02 01:20:16 +03:00
2010-04-24 14:40:20 +04:00
if ( is_file ( $file )){
2010-05-04 05:21:57 +04:00
return require ( $file );
2011-03-02 01:20:16 +03:00
}
elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return require ( $SERVERROOT . '/' . $file );
2011-03-02 01:20:16 +03: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 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 ;
2011-03-02 01:20:16 +03:00
2010-04-24 14:40:20 +04:00
if ( is_file ( $file )){
2010-05-04 05:21:57 +04:00
return require_once ( $file );
2011-03-02 01:20:16 +03:00
}
elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return require_once ( $SERVERROOT . '/' . $file );
2011-03-02 01:20:16 +03: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 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 ;
2011-03-02 01:20:16 +03:00
2010-04-24 14:40:20 +04:00
if ( is_file ( $file )){
2010-05-04 05:21:57 +04:00
return include ( $file );
2011-03-02 01:20:16 +03:00
}
elseif ( is_file ( $SERVERROOT . '/' . $file )){
2010-05-04 05:21:57 +04:00
return include ( $SERVERROOT . '/' . $file );
2011-03-02 01:20:16 +03: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 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 ;
2011-03-02 01:20:16 +03:00
if ( is_file ( $file )){
2010-07-05 13:37:50 +04:00
return include_once ( $file );
2010-04-24 14:40:20 +04:00
}
2011-03-02 01:20:16 +03: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 14:40:20 +04:00
}
2011-03-02 01:20:16 +03: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
?>