Merge branch 'refactoring' of git://anongit.kde.org/owncloud into refactoring

This commit is contained in:
Jakob Sack 2011-04-16 10:26:40 +02:00
commit e8f6848095
53 changed files with 495 additions and 543 deletions

View File

@ -18,7 +18,7 @@
//
// $Id: Getopt.php,v 1.21.4.7 2003/12/05 21:57:01 andrei Exp $
oc_require_once( 'PEAR.php');
require_once( 'PEAR.php');
/**
* Command-line options parsing class.

View File

@ -33,9 +33,9 @@
+----------------------------------------------------------------------+
*/
oc_require_once("HTTP/WebDAV/Tools/_parse_propfind.php");
oc_require_once("HTTP/WebDAV/Tools/_parse_proppatch.php");
oc_require_once("HTTP/WebDAV/Tools/_parse_lockinfo.php");
require_once("HTTP/WebDAV/Tools/_parse_propfind.php");
require_once("HTTP/WebDAV/Tools/_parse_proppatch.php");
require_once("HTTP/WebDAV/Tools/_parse_lockinfo.php");
/**

View File

@ -52,7 +52,7 @@
* @author Lukas Smith <smith@pooteeweet.org>
*/
oc_require_once('PEAR.php');
require_once('PEAR.php');
// {{{ Error constants
@ -330,9 +330,9 @@ class MDB2
if (!MDB2::classExists($class_name)) {
$file_name = str_replace('_', DIRECTORY_SEPARATOR, $class_name).'.php';
if ($debug) {
$include = oc_include_once($file_name);
$include = include_once($file_name);
} else {
$include = oc_include_once($file_name);
$include = include_once($file_name);
}
if (!$include) {
if (!MDB2::fileExists($file_name)) {

View File

@ -44,7 +44,7 @@
//
// $Id: Common.php,v 1.139 2008/12/04 11:50:42 afz Exp $
oc_require_once('MDB2/LOB.php');
require_once('MDB2/LOB.php');
/**
* @package MDB2

View File

@ -46,7 +46,7 @@
// $Id: mysql.php,v 1.65 2008/02/22 19:23:49 quipo Exp $
//
oc_require_once('MDB2/Driver/Datatype/Common.php');
require_once('MDB2/Driver/Datatype/Common.php');
/**
* MDB2 MySQL driver

View File

@ -44,7 +44,7 @@
//
// $Id: pgsql.php,v 1.93 2008/08/28 20:32:57 afz Exp $
oc_require_once('MDB2/Driver/Datatype/Common.php');
require_once('MDB2/Driver/Datatype/Common.php');
/**
* MDB2 PostGreSQL driver

View File

@ -46,7 +46,7 @@
// $Id: sqlite.php,v 1.67 2008/02/22 19:58:06 quipo Exp $
//
oc_require_once('MDB2/Driver/Datatype/Common.php');
require_once('MDB2/Driver/Datatype/Common.php');
/**
* MDB2 SQLite driver

View File

@ -45,7 +45,7 @@
// $Id: mysql.php,v 1.12 2008/02/17 18:54:08 quipo Exp $
//
oc_require_once('MDB2/Driver/Function/Common.php');
require_once('MDB2/Driver/Function/Common.php');
/**
* MDB2 MySQL driver for the function modules

View File

@ -44,7 +44,7 @@
//
// $Id: pgsql.php,v 1.11 2008/11/09 19:46:50 quipo Exp $
oc_require_once('MDB2/Driver/Function/Common.php');
require_once('MDB2/Driver/Function/Common.php');
/**
* MDB2 MySQL driver for the function modules

View File

@ -45,7 +45,7 @@
// $Id: sqlite.php,v 1.10 2008/02/17 18:54:08 quipo Exp $
//
oc_require_once('MDB2/Driver/Function/Common.php');
require_once('MDB2/Driver/Function/Common.php');
/**
* MDB2 SQLite driver for the function modules

View File

@ -45,7 +45,7 @@
// $Id: mysql.php,v 1.113 2008/11/23 20:30:29 quipo Exp $
//
oc_require_once('MDB2/Driver/Manager/Common.php');
require_once('MDB2/Driver/Manager/Common.php');
/**
* MDB2 MySQL driver for the management modules

View File

@ -44,7 +44,7 @@
//
// $Id: pgsql.php,v 1.87 2008/11/29 14:09:59 afz Exp $
oc_require_once('MDB2/Driver/Manager/Common.php');
require_once('MDB2/Driver/Manager/Common.php');
/**
* MDB2 MySQL driver for the management modules

View File

@ -46,7 +46,7 @@
// $Id: sqlite.php,v 1.76 2008/05/31 11:48:48 quipo Exp $
//
oc_require_once('MDB2/Driver/Manager/Common.php');
require_once('MDB2/Driver/Manager/Common.php');
/**
* MDB2 SQLite driver for the management modules

View File

@ -45,7 +45,7 @@
// $Id: mysql.php,v 1.80 2008/03/26 21:15:37 quipo Exp $
//
oc_require_once('MDB2/Driver/Reverse/Common.php');
require_once('MDB2/Driver/Reverse/Common.php');
/**
* MDB2 MySQL driver for the schema reverse engineering module

View File

@ -45,7 +45,7 @@
//
// $Id: pgsql.php,v 1.75 2008/08/22 16:36:20 quipo Exp $
oc_require_once('MDB2/Driver/Reverse/Common.php');
require_once('MDB2/Driver/Reverse/Common.php');
/**
* MDB2 PostGreSQL driver for the schema reverse engineering module

View File

@ -46,7 +46,7 @@
// $Id: sqlite.php,v 1.80 2008/05/03 10:30:14 quipo Exp $
//
oc_require_once('MDB2/Driver/Reverse/Common.php');
require_once('MDB2/Driver/Reverse/Common.php');
/**
* MDB2 SQlite driver for the schema reverse engineering module

View File

@ -50,7 +50,7 @@
* @author Lukas Smith <smith@pooteeweet.org>
*/
oc_require_once('MDB2.php');
require_once('MDB2.php');
/**
* MDB2_LOB: user land stream wrapper implementation for LOB support

View File

@ -54,8 +54,8 @@
*/
oc_require_once('XML/Parser.php');
oc_require_once('MDB2/Schema/Validate.php');
require_once('XML/Parser.php');
require_once('MDB2/Schema/Validate.php');
/**
* Parses an XML schema file

View File

@ -19,8 +19,8 @@
// $Id: System.php,v 1.36 2004/06/15 16:33:46 pajoye Exp $
//
oc_require_once( 'PEAR.php');
oc_require_once( 'Console/Getopt.php');
require_once( 'PEAR.php');
require_once( 'Console/Getopt.php');
$GLOBALS['_System_temp_files'] = array();

View File

@ -36,7 +36,7 @@
/**
* uses PEAR's error handling
*/
oc_require_once('PEAR.php');
require_once('PEAR.php');
/**
* resource could not be created

View File

@ -22,7 +22,7 @@
*/
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
if( !OC_USER::isLoggedIn() || !OC_GROUP::inGroup( $_SESSION['user_id'], 'admin' )){
header( "Location: ".OC_HELPER::linkTo( "index.php" ));
exit();

View File

@ -22,7 +22,7 @@
*/
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
if( !OC_USER::isLoggedIn() || !OC_GROUP::inGroup( $_SESSION['user_id'], 'admin' )){
header( "Location: ".OC_HELPER::linkTo( "index.php" ));
exit();

View File

@ -22,7 +22,7 @@
*/
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
if( !OC_USER::isLoggedIn() || !OC_GROUP::inGroup( $_SESSION['user_id'], 'admin' )){
header( "Location: ".OC_HELPER::linkTo( "index.php" ));
exit();

View File

@ -22,7 +22,7 @@
*/
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
if( !OC_USER::isLoggedIn() || !OC_GROUP::inGroup( $_SESSION['user_id'], 'admin' )){
header( "Location: ".OC_HELPER::linkTo( "index.php" ));
exit();

View File

@ -32,7 +32,7 @@ require_once('../lib/base.php');
OC_UTIL::setupFS();
// We load OC_TEMPLATE, too. This one is not loaded by base
oc_require( 'template.php' );
require( 'template.php' );
// The user should have admin rights. This is an admin page!
if( !OC_USER::isLoggedIn() || !OC_USER::ingroup( $_SESSION['username'], 'admin' )){

View File

@ -24,7 +24,7 @@
// Init owncloud
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
// Check if we are a user
if( !OC_USER::isLoggedIn()){

View File

@ -24,7 +24,7 @@
// Init owncloud
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
// Check if we are a user
if( !OC_USER::isLoggedIn() || !OC_GROUP::inGroup( $_SESSION['user_id'], 'admin' )){

View File

@ -23,7 +23,7 @@
// Init owncloud
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
// Check if we are a user
if( !OC_USER::isLoggedIn()){

View File

@ -24,7 +24,7 @@
// Init owncloud
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
// Check if we are a user
if( !OC_USER::isLoggedIn()){

View File

@ -24,7 +24,7 @@
// Init owncloud
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
// Check if we are a user
if( !OC_USER::isLoggedIn()){

View File

@ -23,7 +23,7 @@
require_once('../lib/base.php');
oc_require_once('HTTP/WebDAV/Server/Filesystem.php');
require_once('HTTP/WebDAV/Server/Filesystem.php');
ini_set('default_charset', 'UTF-8');

View File

@ -22,8 +22,8 @@
*/
require_once( 'lib/base.php' );
oc_require_once( 'appconfig.php' );
oc_require_once( 'template.php' );
require_once( 'appconfig.php' );
require_once( 'template.php' );
if( OC_USER::isLoggedIn()){
if( $_GET["logout"] ){
OC_USER::logout();

View File

@ -37,7 +37,7 @@
*
*/
oc_require_once( 'Group/backend.php' );
require_once( 'Group/backend.php' );
/**
* Class for group management in a SQL Database (e.g. MySQL, SQLite)
@ -75,7 +75,12 @@ class OC_GROUP_DATABASE extends OC_GROUP_BACKEND {
public static function inGroup( $username, $groupName ){
$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?" );
$result = $query->execute( array( $groupName, $username ));
if( PEAR::isError($result)) {
$entry = 'DB Error: "'.$result->getMessage().'"<br />';
$entry .= 'Offending command was: '.$result->getDebugInfo().'<br />';
error_log( $entry );
die( $entry );
}
return $result->numRows() > 0 ? true : false;
}

View File

@ -34,8 +34,8 @@
--- modified for ownCloud ---
*/
require_once("lib/base.php");
oc_require_once("HTTP/WebDAV/Server.php");
oc_require_once("System.php");
require_once("HTTP/WebDAV/Server.php");
require_once("System.php");
/**
* Filesystem access using WebDAV

View File

@ -33,7 +33,7 @@
*
*/
oc_require_once('User/backend.php');
require_once('User/backend.php');
/**
* Class for user management in a SQL Database (e.g. MySQL, SQLite)

View File

@ -54,7 +54,7 @@ class OC_APP{
// Our very own core apps are hardcoded
foreach( array( "admin", "files", "log", "settings" ) as $app ){
oc_require( "$app/appinfo/app.php" );
require( "$app/appinfo/app.php" );
}
// The rest comes here
@ -62,7 +62,7 @@ class OC_APP{
while( false !== ( $filename = readdir( $dir ))){
if( substr( $filename, 0, 1 ) != '.' ){
if( file_exists( "$SERVERROOT/apps/$filename/appinfo/app.php" )){
oc_require( "apps/$filename/appinfo/app.php" );
require( "apps/$filename/appinfo/app.php" );
}
}
}

View File

@ -45,7 +45,7 @@ if($WEBROOT!='' and $WEBROOT[0]!=='/'){
}
// set the right include path
// set_include_path(get_include_path().PATH_SEPARATOR.$SERVERROOT.PATH_SEPARATOR.$SERVERROOT.'/inc'.PATH_SEPARATOR.$SERVERROOT.'/config');
set_include_path($SERVERROOT.'/lib'.PATH_SEPARATOR.$SERVERROOT.'/config'.PATH_SEPARATOR.$SERVERROOT.'/3dparty'.PATH_SEPARATOR.get_include_path().PATH_SEPARATOR.$SERVERROOT);
// define runtime variables - unless this already has been done
if( !isset( $RUNTIME_NOSETUPFS )){
@ -66,7 +66,6 @@ $CONFIG_FILESYSTEM=array();
// include the generated configfile
@include_once($SERVERROOT.'/config/config.php');
$CONFIG_DATADIRECTORY_ROOT=$CONFIG_DATADIRECTORY;// store this in a seperate variable so we can change the data directory to jail users.
// redirect to https site if configured
if(isset($CONFIG_HTTPFORCESSL) and $CONFIG_HTTPFORCESSL){
@ -78,20 +77,21 @@ if(isset($CONFIG_HTTPFORCESSL) and $CONFIG_HTTPFORCESSL){
}
// load core libs
oc_require_once('helper.php');
oc_require_once('app.php');
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('group.php');
oc_require_once('ocs.php');
oc_require_once('connect.php');
oc_require_once('remotestorage.php');
oc_require_once('plugin.php');
require_once('helper.php');
require_once('database.php');
require_once('app.php');
require_once('files.php');
require_once('filesystem.php');
require_once('filestorage.php');
require_once('fileobserver.php');
require_once('log.php');
require_once('config.php');
require_once('user.php');
require_once('group.php');
require_once('ocs.php');
require_once('connect.php');
require_once('remotestorage.php');
require_once('plugin.php');
OC_PLUGIN::loadPlugins( "" );
@ -113,13 +113,11 @@ 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" );
// Load Apps
OC_APP::loadApps();
// check if the server is correctly configured for ownCloud
OC_UTIL::checkserver();
/**
* Class for utility functions
*
@ -258,7 +256,7 @@ class OC_UTIL {
}
$prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
if(substr($prems,-1)!='0'){
chmodr($CONFIG_DATADIRECTORY_ROOT,0770);
OC_HELPER::chmodr($CONFIG_DATADIRECTORY_ROOT,0770);
clearstatcache();
$prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
if(substr($prems,2,1)!='0'){
@ -268,7 +266,7 @@ class OC_UTIL {
if($CONFIG_ENABLEBACKUP){
$prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3);
if(substr($prems,-1)!='0'){
chmodr($CONFIG_BACKUPDIRECTORY,0770);
OC_HELPER::chmodr($CONFIG_BACKUPDIRECTORY,0770);
clearstatcache();
$prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3);
if(substr($prems,2,1)!='0'){
@ -351,436 +349,4 @@ class OC_HOOK{
return true;
}
}
/**
* This class manages the access to the database. It basically is a wrapper for
* MDB2 with some adaptions.
*/
class OC_DB {
static private $DBConnection=false;
static private $schema=false;
static private $affected=0;
static private $result=false;
/**
* @brief connects to the database
* @returns true if connection can be established or nothing (die())
*
* Connects to the database as specified in config.php
*/
static public function connect(){
// The global data we need
global $CONFIG_DBNAME;
global $CONFIG_DBHOST;
global $CONFIG_DBUSER;
global $CONFIG_DBPASSWORD;
global $CONFIG_DBTYPE;
global $DOCUMENTROOT;
global $SERVERROOT;
// do nothing if the connection already has been established
if(!self::$DBConnection){
// Require MDB2.php (TODO: why here not in head of file?)
@oc_require_once('MDB2.php');
// Prepare options array
$options = array(
'portability' => MDB2_PORTABILITY_ALL,
'log_line_break' => '<br>',
'idxname_format' => '%s',
'debug' => true,
'quote_identifier' => true );
// Add the dsn according to the database type
if( $CONFIG_DBTYPE == 'sqlite' ){
// sqlite
$dsn = array(
'phptype' => 'sqlite',
'database' => "$SERVERROOT/$CONFIG_DBNAME",
'mode' => '0644' );
}
elseif( $CONFIG_DBTYPE == 'mysql' ){
// MySQL
$dsn = array(
'phptype' => 'mysql',
'username' => $CONFIG_DBUSER,
'password' => $CONFIG_DBPASSWORD,
'hostspec' => $CONFIG_DBHOST,
'database' => $CONFIG_DBNAME );
}
elseif( $CONFIG_DBTYPE == 'pgsql' ){
// PostgreSQL
$dsn = array(
'phptype' => 'pgsql',
'username' => $CONFIG_DBUSER,
'password' => $CONFIG_DBPASSWORD,
'hostspec' => $CONFIG_DBHOST,
'database' => $CONFIG_DBNAME );
}
// Try to establish connection
self::$DBConnection = MDB2::factory( $dsn, $options );
// Die if we could not connect
if( PEAR::isError( self::$DBConnection )){
echo( '<b>can not connect to database, using '.$CONFIG_DBTYPE.'. ('.self::$DBConnection->getUserInfo().')</center>');
$error = self::$DBConnection->getMessage();
error_log( $error);
error_log( self::$DBConnection->getUserInfo());
die( $error );
}
// We always, really always want associative arrays
self::$DBConnection->setFetchMode(MDB2_FETCHMODE_ASSOC);
}
// we are done. great!
return true;
}
/**
* @brief SQL query
* @param $query Query string
* @returns result as MDB2_Result
*
* SQL query via MDB2 query()
*/
static public function query( $query ){
// Optimize the query
$query = self::processQuery( $query );
self::connect();
//fix differences between sql versions
// return the result
$result = self::$DBConnection->exec( $query );
// Die if we have an error (error means: bad query, not 0 results!)
if( PEAR::isError($result)) {
$entry = 'DB Error: "'.$result->getMessage().'"<br />';
$entry .= 'Offending command was: '.$cmd.'<br />';
error_log( $entry );
die( $entry );
}
return $result;
}
/**
* @brief Prepare a SQL query
* @param $query Query string
* @returns prepared SQL query
*
* SQL query via MDB2 prepare(), needs to be execute()'d!
*/
static public function prepare( $query ){
// Optimize the query
$query = self::processQuery( $query );
self::connect();
// return the result
$result = self::$DBConnection->prepare( $query );
// Die if we have an error (error means: bad query, not 0 results!)
if( PEAR::isError($result)) {
$entry = 'DB Error: "'.$result->getMessage().'"<br />';
$entry .= 'Offending command was: '.$cmd.'<br />';
error_log( $entry );
die( $entry );
}
return $result;
}
/**
* @brief gets last value of autoincrement
* @returns id
*
* MDB2 lastInsertID()
*
* Call this method right after the insert command or other functions may
* cause trouble!
*/
public static function insertid(){
self::connect();
return self::$DBConnection->lastInsertID();
}
/**
* @brief Disconnect
* @returns true/false
*
* This is good bye, good bye, yeah!
*/
public static function disconnect(){
// Cut connection if required
if(self::$DBConnection){
self::$DBConnection->disconnect();
self::$DBConnection=false;
}
return true;
}
/**
* @brief Escapes bad characters
* @param $string string with dangerous characters
* @returns escaped string
*
* MDB2 escape()
*/
public static function escape( $string ){
self::connect();
return self::$DBConnection->escape( $string );
}
/**
* @brief saves database scheme to xml file
* @param $file name of file
* @returns true/false
*
* TODO: write more documentation
*/
public static function getDbStructure( $file ){
self::connectScheme();
// write the scheme
$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 );
return true;
}
/**
* @brief Creates tables from XML file
* @param $file file to read structure from
* @returns true/false
*
* TODO: write more documentation
*/
public static function createDbFromStructure( $file ){
global $CONFIG_DBNAME;
global $CONFIG_DBTABLEPREFIX;
self::connectScheme();
// read file
$content = file_get_contents( $file );
// Make changes and save them to a temporary 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 );
// Try to create tables
$definition = @self::$schema->parseDatabaseDefinitionFile( $file2 );
// Delete our temporary file
unlink( $file2 );
// Die in case something went wrong
if( $definition instanceof MDB2_Schema_Error ){
die( $definition->getMessage().': '.$definition->getUserInfo());
}
$ret=@self::$schema->createDatabase( $definition );
// Die in case something went wrong
if( $ret instanceof MDB2_Error ){
die ($ret->getMessage() . ': ' . $ret->getUserInfo());
}
return true;
}
/**
* @brief connects to a MDB2 database scheme
* @returns true/false
*
* Connects to a MDB2 database scheme
*/
private static function connectScheme(){
// We need a database connection
self::connect();
// Connect if this did not happen before
if(!self::$schema){
@oc_require_once('MDB2/Schema.php');
self::$schema=&MDB2_Schema::factory(self::$DBConnection);
}
return true;
}
/**
* @brief does minor chages to query
* @param $query Query string
* @returns corrected query string
*
* This function replaces *PREFIX* with the value of $CONFIG_DBTABLEPREFIX
* and replaces the ` woth ' or " according to the database driver.
*/
private static function processQuery( $query ){
// We need Database type and table prefix
global $CONFIG_DBTYPE;
global $CONFIG_DBTABLEPREFIX;
// differences in escaping of table names (` for mysql)
// Problem: what if there is a ` in the value we want to insert?
if( $CONFIG_DBTYPE == 'sqlite' ){
$query = str_replace( '`', '\'', $query );
}
elseif( $CONFIG_DBTYPE == 'pgsql' ){
$query = str_replace( '`', '"', $query );
}
// replace table names
$query = str_replace( '*PREFIX*', $CONFIG_DBTABLEPREFIX, $query );
return $query;
}
}
//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)){
return require($file);
}
elseif(is_file($SERVERROOT.'/'.$file)){
return require($SERVERROOT.'/'.$file);
}
elseif(is_file($SERVERROOT.'/lib/'.$file)){
return require($SERVERROOT.'/lib/'.$file);
}
elseif(is_file($SERVERROOT.'/3dparty/'.$file)){
return require($SERVERROOT.'/3dparty/'.$file);
}
}
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)){
return require_once($file);
}
elseif(is_file($SERVERROOT.'/'.$file)){
return require_once($SERVERROOT.'/'.$file);
}
elseif(is_file($SERVERROOT.'/lib/'.$file)){
return require_once($SERVERROOT.'/lib/'.$file);
}
elseif(is_file($SERVERROOT.'/3dparty/'.$file)){
return require_once($SERVERROOT.'/3dparty/'.$file);
}
}
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)){
return include($file);
}
elseif(is_file($SERVERROOT.'/'.$file)){
return include($SERVERROOT.'/'.$file);
}
elseif(is_file($SERVERROOT.'/lib/'.$file)){
return include($SERVERROOT.'/lib/'.$file);
}
elseif(is_file($SERVERROOT.'/3dparty/'.$file)){
return include($SERVERROOT.'/3dparty/'.$file);
}
}
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;
if(is_file($file)){
return include_once($file);
}
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);
}
}
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;
}
?>

316
lib/database.php Normal file
View File

@ -0,0 +1,316 @@
<?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 Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* This class manages the access to the database. It basically is a wrapper for
* MDB2 with some adaptions.
*/
class OC_DB {
static private $DBConnection=false;
static private $schema=false;
static private $affected=0;
static private $result=false;
/**
* @brief connects to the database
* @returns true if connection can be established or nothing (die())
*
* Connects to the database as specified in config.php
*/
static public function connect(){
// The global data we need
global $CONFIG_DBNAME;
global $CONFIG_DBHOST;
global $CONFIG_DBUSER;
global $CONFIG_DBPASSWORD;
global $CONFIG_DBTYPE;
global $DOCUMENTROOT;
global $SERVERROOT;
// do nothing if the connection already has been established
if(!self::$DBConnection){
// Require MDB2.php (not required in the head of the file so we only load it when needed)
require_once('MDB2.php');
// Prepare options array
$options = array(
'portability' => MDB2_PORTABILITY_ALL,
'log_line_break' => '<br>',
'idxname_format' => '%s',
'debug' => true,
'quote_identifier' => true );
// Add the dsn according to the database type
if( $CONFIG_DBTYPE == 'sqlite' ){
// sqlite
$dsn = array(
'phptype' => 'sqlite',
'database' => "$SERVERROOT/$CONFIG_DBNAME",
'mode' => '0644' );
}
elseif( $CONFIG_DBTYPE == 'mysql' ){
// MySQL
$dsn = array(
'phptype' => 'mysql',
'username' => $CONFIG_DBUSER,
'password' => $CONFIG_DBPASSWORD,
'hostspec' => $CONFIG_DBHOST,
'database' => $CONFIG_DBNAME );
}
elseif( $CONFIG_DBTYPE == 'pgsql' ){
// PostgreSQL
$dsn = array(
'phptype' => 'pgsql',
'username' => $CONFIG_DBUSER,
'password' => $CONFIG_DBPASSWORD,
'hostspec' => $CONFIG_DBHOST,
'database' => $CONFIG_DBNAME );
}
// Try to establish connection
self::$DBConnection = MDB2::factory( $dsn, $options );
// Die if we could not connect
if( PEAR::isError( self::$DBConnection )){
echo( '<b>can not connect to database, using '.$CONFIG_DBTYPE.'. ('.self::$DBConnection->getUserInfo().')</center>');
$error = self::$DBConnection->getMessage();
error_log( $error);
error_log( self::$DBConnection->getUserInfo());
die( $error );
}
// We always, really always want associative arrays
self::$DBConnection->setFetchMode(MDB2_FETCHMODE_ASSOC);
}
// we are done. great!
return true;
}
/**
* @brief SQL query
* @param $query Query string
* @returns result as MDB2_Result
*
* SQL query via MDB2 query()
*/
static public function query( $query ){
// Optimize the query
$query = self::processQuery( $query );
self::connect();
//fix differences between sql versions
// return the result
$result = self::$DBConnection->exec( $query );
// Die if we have an error (error means: bad query, not 0 results!)
if( PEAR::isError($result)) {
$entry = 'DB Error: "'.$result->getMessage().'"<br />';
$entry .= 'Offending command was: '.$cmd.'<br />';
error_log( $entry );
die( $entry );
}
return $result;
}
/**
* @brief Prepare a SQL query
* @param $query Query string
* @returns prepared SQL query
*
* SQL query via MDB2 prepare(), needs to be execute()'d!
*/
static public function prepare( $query ){
// Optimize the query
$query = self::processQuery( $query );
self::connect();
// return the result
$result = self::$DBConnection->prepare( $query );
// Die if we have an error (error means: bad query, not 0 results!)
if( PEAR::isError($result)) {
$entry = 'DB Error: "'.$result->getMessage().'"<br />';
$entry .= 'Offending command was: '.$cmd.'<br />';
error_log( $entry );
die( $entry );
}
return $result;
}
/**
* @brief gets last value of autoincrement
* @returns id
*
* MDB2 lastInsertID()
*
* Call this method right after the insert command or other functions may
* cause trouble!
*/
public static function insertid(){
self::connect();
return self::$DBConnection->lastInsertID();
}
/**
* @brief Disconnect
* @returns true/false
*
* This is good bye, good bye, yeah!
*/
public static function disconnect(){
// Cut connection if required
if(self::$DBConnection){
self::$DBConnection->disconnect();
self::$DBConnection=false;
}
return true;
}
/**
* @brief Escapes bad characters
* @param $string string with dangerous characters
* @returns escaped string
*
* MDB2 escape()
*/
public static function escape( $string ){
self::connect();
return self::$DBConnection->escape( $string );
}
/**
* @brief saves database scheme to xml file
* @param $file name of file
* @returns true/false
*
* TODO: write more documentation
*/
public static function getDbStructure( $file ){
self::connectScheme();
// write the scheme
$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 );
return true;
}
/**
* @brief Creates tables from XML file
* @param $file file to read structure from
* @returns true/false
*
* TODO: write more documentation
*/
public static function createDbFromStructure( $file ){
global $CONFIG_DBNAME;
global $CONFIG_DBTABLEPREFIX;
self::connectScheme();
// read file
$content = file_get_contents( $file );
// Make changes and save them to a temporary 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 );
// Try to create tables
$definition = @self::$schema->parseDatabaseDefinitionFile( $file2 );
// Delete our temporary file
unlink( $file2 );
// Die in case something went wrong
if( $definition instanceof MDB2_Schema_Error ){
die( $definition->getMessage().': '.$definition->getUserInfo());
}
$ret=@self::$schema->createDatabase( $definition );
// Die in case something went wrong
if( $ret instanceof MDB2_Error ){
die ($ret->getMessage() . ': ' . $ret->getUserInfo());
}
return true;
}
/**
* @brief connects to a MDB2 database scheme
* @returns true/false
*
* Connects to a MDB2 database scheme
*/
private static function connectScheme(){
// We need a database connection
self::connect();
// Connect if this did not happen before
if(!self::$schema){
require_once('MDB2/Schema.php');
self::$schema=&MDB2_Schema::factory(self::$DBConnection);
}
return true;
}
/**
* @brief does minor chages to query
* @param $query Query string
* @returns corrected query string
*
* This function replaces *PREFIX* with the value of $CONFIG_DBTABLEPREFIX
* and replaces the ` woth ' or " according to the database driver.
*/
private static function processQuery( $query ){
// We need Database type and table prefix
global $CONFIG_DBTYPE;
global $CONFIG_DBTABLEPREFIX;
// differences in escaping of table names (` for mysql)
// Problem: what if there is a ` in the value we want to insert?
if( $CONFIG_DBTYPE == 'sqlite' ){
$query = str_replace( '`', '\'', $query );
}
elseif( $CONFIG_DBTYPE == 'pgsql' ){
$query = str_replace( '`', '"', $query );
}
// replace table names
$query = str_replace( '*PREFIX*', $CONFIG_DBTABLEPREFIX, $query );
return $query;
}
}
?>

View File

@ -21,7 +21,7 @@
*
*/
oc_require_once("log.php");
require_once("log.php");
/**

View File

@ -68,7 +68,7 @@ class OC_GROUP {
case 'database':
case 'mysql':
case 'sqlite':
oc_require_once('Group/database.php');
require_once('Group/database.php');
self::$_backend = new OC_GROUP_DATABASE();
break;
default:

View File

@ -113,6 +113,35 @@ class OC_HELPER {
$bytes = round( $bytes / 1024, 1 );
return "$bytes GB";
}
/**
* @brief Recusive editing of file permissions
* @param $path path to file or folder
* @param $filemode unix style file permissions as integer
*
* Makes 2048 to 2 kB.
*/
function chmodr($path, $filemode) {
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;
}
}
?>

View File

@ -74,7 +74,7 @@ class OC_USER {
case 'database':
case 'mysql':
case 'sqlite':
oc_require_once('User/database.php');
require_once('User/database.php');
self::$_backend = new OC_USER_DATABASE();
break;
default:

View File

@ -24,7 +24,7 @@
//require_once('../../config/config.php');
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
if( !OC_USER::isLoggedIn()){
header( "Location: ".OC_HELPER::linkTo( "index.php" ));
exit();

View File

@ -21,7 +21,7 @@
*
*/
oc_require_once('inc/User/backend.php');
require_once('inc/User/backend.php');

View File

@ -3,5 +3,7 @@
@import "_theme_template.scss";
.syntaxhighlighter {
.keyword { font-weight: bold !important; }
.keyword { font-weight:
bold !important;
}
}

View File

@ -3,7 +3,8 @@
$background: #0a2b1d !default;
$line_highlighted_background: #233729 !default;
$line_highlighted_number: white !default;
$line_highlighted_number:
white !default;
$gutter_text: #497958 !default;
$gutter_border_color: #41a83e !default;
@ -31,6 +32,10 @@ $code_color3: #edef7d !default;
@import "_theme_template.scss";
.syntaxhighlighter {
.comments { font-style: italic !important; }
.keyword { font-weight: bold !important; }
.comments { font-style:
italic !important;
}
.keyword { font-weight:
bold !important;
}
}

View File

@ -15,9 +15,11 @@ $toolbar_collapsed_a_hover: #aa7700 !default;
$toolbar_collapsed_background: #fff !default;
$toolbar_a: #a0a0a0 !default;
$toolbar_a_hover: red !default;
$toolbar_a_hover:
red !default;
$code_plain: black !default;
$code_plain:
black !default;
$code_comments: #3f5fbf !default;
$code_string: #2a00ff !default;
$code_keyword: #7f0055 !default;
@ -26,23 +28,30 @@ $code_variable: #aa7700 !default;
$code_value: #009900 !default;
$code_functions: #ff1493 !default;
$code_constants: #0066cc !default;
$code_color1: gray !default;
$code_color1:
gray !default;
$code_color2: #ff1493 !default;
$code_color3: red !default;
$code_color3:
red !default;
@import "_theme_template.scss";
.syntaxhighlighter {
.keyword { font-weight: bold !important; }
.xml {
.keyword {
color: #3f7f7f !important;
font-weight: normal !important; }
.color1, .color1 a { color: #7f007f !important; }
.string {
font-style: italic !important;
color: #2a00ff !important;
}
}
.keyword { font-weight:
bold !important;
}
.xml {
.keyword {
color: #3f7f7f !important;
font-weight:
normal !important;
}
.color1, .color1 a { color: #7f007f !important; }
.string {
font-style:
italic !important;
color: #2a00ff !important;
}
}
}

View File

@ -1,17 +1,20 @@
// Emacs SyntaxHighlighter theme based on theme by Joshua Emmons
// http://www.skia.net/
$background: black !default;
$background:
black !default;
$line_highlighted_background: #2A3133 !default;
$line_highlighted_number: white !default;
$line_highlighted_number:
white !default;
$gutter_text: #d3d3d3 !default;
$gutter_border_color: #990000 !default;
$toolbar_collapsed_a: #ebdb8d !default;
$toolbar_collapsed_a_hover: #ff7d27 !default;
$toolbar_collapsed_background: black !default;
$toolbar_collapsed_background:
black !default;
$toolbar_a: #fff !default;
$toolbar_a_hover: #9ccff4 !default;
@ -19,7 +22,8 @@ $toolbar_a_hover: #9ccff4 !default;
$code_plain: #d3d3d3 !default;
$code_comments: #ff7d27 !default;
$code_string: #ff9e7b !default;
$code_keyword: aqua !default;
$code_keyword:
aqua !default;
$code_preprocessor: #aec4de !default;
$code_variable: #ffaa3e !default;
$code_value: #009900 !default;

View File

@ -4,19 +4,22 @@
$background: #121212 !default;
$line_highlighted_background: #2C2C29 !default;
$line_highlighted_number: white !default;
$line_highlighted_number:
white !default;
$gutter_text: #afafaf !default;
$gutter_border_color: #3185b9 !default;
$toolbar_collapsed_a: #3185b9 !default;
$toolbar_collapsed_a_hover: #d01d33 !default;
$toolbar_collapsed_background: black !default;
$toolbar_collapsed_background:
black !default;
$toolbar_a: #fff !default;
$toolbar_a_hover: #96daff !default;
$code_plain: white !default;
$code_plain:
white !default;
$code_comments: #696854 !default;
$code_string: #e3e658 !default;
$code_keyword: #d01d33 !default;
@ -32,5 +35,7 @@ $code_color3: #96daff !default;
@import "_theme_template.scss";
.syntaxhighlighter {
.functions { font-weight: bold !important; }
.functions { font-weight:
bold !important;
}
}

View File

@ -4,29 +4,38 @@
$background: #222222 !default;
$line_highlighted_background: #253e5a !default;
$line_highlighted_number: white !default;
$line_highlighted_number:
white !default;
$gutter_text: #38566f !default;
$gutter_border_color: #435a5f !default;
$toolbar_collapsed_a: #428bdd !default;
$toolbar_collapsed_a_hover: lime !default;
$toolbar_collapsed_background: black !default;
$toolbar_collapsed_a_hover:
lime !default;
$toolbar_collapsed_background:
black !default;
$toolbar_a: #aaaaff !default;
$toolbar_a_hover: #9ccff4 !default;
$code_plain: lime !default;
$code_plain:
lime !default;
$code_comments: #428bdd !default;
$code_string: lime !default;
$code_string:
lime !default;
$code_keyword: #aaaaff !default;
$code_preprocessor: #8aa6c1 !default;
$code_variable: aqua !default;
$code_variable:
aqua !default;
$code_value: #f7e741 !default;
$code_functions: #ff8000 !default;
$code_constants: yellow !default;
$code_color1: red !default;
$code_color2: yellow !default;
$code_constants:
yellow !default;
$code_color1:
red !default;
$code_color2:
yellow !default;
$code_color3: #ffaa3e !default;
@import "_theme_template.scss";

View File

@ -26,7 +26,8 @@ $code_value: #f7e741 !default;
$code_functions: #ffaa3e !default;
$code_constants: #e0e8ff !default;
$code_color1: #f8bb00 !default;
$code_color2: white !default;
$code_color2:
white !default;
$code_color3: #ffaa3e !default;
@import "_theme_template.scss";

View File

@ -26,7 +26,8 @@ $code_value: #009900 !default;
$code_functions: #ffaa3e !default;
$code_constants: #e0e8ff !default;
$code_color1: #e0e8ff !default;
$code_color2: white !default;
$code_color2:
white !default;
$code_color3: #ffaa3e !default;
@import "_theme_template.scss";

View File

@ -1,7 +1,7 @@
<?php
require_once('../lib/base.php');
oc_require( 'template.php' );
require( 'template.php' );
if( !OC_USER::isLoggedIn()){
header( "Location: ".OC_HELPER::linkTo( "index.php" ));
exit();