diff options
-rw-r--r-- | lib/base.php | 338 | ||||
-rw-r--r-- | lib/connector/sabre/auth.php (renamed from lib/Connector/Sabre/auth.php) | 1 | ||||
-rw-r--r-- | lib/connector/sabre/directory.php (renamed from lib/Connector/Sabre/directory.php) | 3 | ||||
-rw-r--r-- | lib/connector/sabre/file.php (renamed from lib/Connector/Sabre/file.php) | 2 | ||||
-rw-r--r-- | lib/connector/sabre/locks.php (renamed from lib/Connector/Sabre/locks.php) | 2 | ||||
-rw-r--r-- | lib/connector/sabre/node.php (renamed from lib/Connector/Sabre/node.php) | 3 | ||||
-rw-r--r-- | lib/db.php (renamed from lib/database.php) | 0 | ||||
-rw-r--r-- | lib/files.php | 3 | ||||
-rw-r--r-- | lib/group.php | 1 | ||||
-rw-r--r-- | lib/group/backend.php (renamed from lib/Group/backend.php) | 0 | ||||
-rw-r--r-- | lib/group/database.php (renamed from lib/Group/database.php) | 2 | ||||
-rw-r--r-- | lib/hook.php | 69 | ||||
-rw-r--r-- | lib/user.php | 1 | ||||
-rw-r--r-- | lib/user/backend.php (renamed from lib/User/backend.php) | 0 | ||||
-rw-r--r-- | lib/user/database.php (renamed from lib/User/database.php) | 2 | ||||
-rw-r--r-- | lib/user/example.php (renamed from lib/User/example.php) | 2 | ||||
-rw-r--r-- | lib/util.php | 245 |
17 files changed, 322 insertions, 352 deletions
diff --git a/lib/base.php b/lib/base.php index 743ed587922..7c2e7cf88c1 100644 --- a/lib/base.php +++ b/lib/base.php @@ -20,6 +20,14 @@ * */ +// Get rid of this stupid require_once OC_... +function OC_autoload($className) { + if(strpos($className,'OC_')===0) { + require_once strtolower(str_replace('_','/',substr($className,3)) . '.php'); + } +} + +spl_autoload_register('OC_autoload'); // set some stuff //ob_start(); @@ -58,9 +66,6 @@ if( !isset( $RUNTIME_NOAPPS )){ $RUNTIME_NOAPPS = false; } -// Doing the config stuff first -require_once('config.php'); - // TODO: we should get rid of this one, too // WARNING: to make everything even more confusing, DATADIRECTORY is a var that // changes and DATATIRECTORY_ROOT stays the same, but is set by @@ -76,25 +81,6 @@ if( OC_CONFIG::getValue( "forcessl", false )){ } } -// load core libs -require_once('helper.php'); -require_once('database.php'); -require_once('app.php'); -require_once('appconfig.php'); -require_once('files.php'); -require_once('filesystem.php'); -require_once('filestorage.php'); -require_once('l10n.php'); -require_once('preferences.php'); -require_once('log.php'); -require_once('user.php'); -require_once('group.php'); -require_once('ocs.php'); -require_once('ocsclient.php'); -require_once('connect.php'); -require_once('remotestorage.php'); -require_once('search.php'); - $error=(count(OC_UTIL::checkServer())>0); OC_USER::useBackend( OC_CONFIG::getValue( "userbackend", "database" )); @@ -117,313 +103,5 @@ if(!$error and !$RUNTIME_NOAPPS ){ OC_APP::loadApps(); } -/** - * Class for utility functions - * - */ -class OC_UTIL { - public static $scripts=array(); - public static $styles=array(); - public static $headers=array(); - private static $fsSetup=false; - - // Can be set up - public static function setupFS( $user = "", $root = "files" ){// configure the initial filesystem based on the configuration - if(self::$fsSetup){//setting up the filesystem twice can only lead to trouble - return false; - } - - // Global Variables - global $SERVERROOT; - global $CONFIG_DATADIRECTORY; - - $CONFIG_DATADIRECTORY_ROOT = OC_CONFIG::getValue( "datadirectory", "$SERVERROOT/data" ); - $CONFIG_BACKUPDIRECTORY = OC_CONFIG::getValue( "backupdirectory", "$SERVERROOT/backup" ); - - // Create root dir - 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)"); - } - - // If we are not forced to load a specific user we load the one that is logged in - if( $user == "" && OC_USER::isLoggedIn()){ - $user = OC_USER::getUser(); - } - - if( $user != "" ){ //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_ROOT)); -// if( OC_CONFIG::getValue( "enablebackup", false )){ -// // This creates the Directorys recursively -// if(!is_dir( "$CONFIG_BACKUPDIRECTORY/$user/$root" )){ -// mkdir( "$CONFIG_BACKUPDIRECTORY/$user/$root", 0755, true ); -// } -// $backupStorage=OC_FILESYSTEM::createStorage('local',array('datadir'=>$CONFIG_BACKUPDIRECTORY)); -// $backup=new OC_FILEOBSERVER_BACKUP(array('storage'=>$backupStorage)); -// $rootStorage->addObserver($backup); -// } - OC_FILESYSTEM::mount($rootStorage,'/'); - - $CONFIG_DATADIRECTORY = "$CONFIG_DATADIRECTORY_ROOT/$user/$root"; - if( !is_dir( $CONFIG_DATADIRECTORY )){ - mkdir( $CONFIG_DATADIRECTORY, 0755, true ); - } - -// TODO: find a cool way for doing this -// //set up the other storages according to the system settings -// foreach($CONFIG_FILESYSTEM as $storageConfig){ -// if(OC_FILESYSTEM::hasStorageType($storageConfig['type'])){ -// $arguments=$storageConfig; -// unset($arguments['type']); -// unset($arguments['mountpoint']); -// $storage=OC_FILESYSTEM::createStorage($storageConfig['type'],$arguments); -// if($storage){ -// OC_FILESYSTEM::mount($storage,$storageConfig['mountpoint']); -// } -// } -// } - - //jail the user into his "home" directory - OC_FILESYSTEM::chroot("/$user/$root"); - self::$fsSetup=true; - } - } - - public static function tearDownFS(){ - OC_FILESYSTEM::tearDown(); - self::$fsSetup=false; - } - - /** - * get the current installed version of ownCloud - * @return array - */ - public static function getVersion(){ - return array(1,60,0); - } - - /** - * add a javascript file - * - * @param url $url - */ - public static function addScript( $application, $file = null ){ - if( is_null( $file )){ - $file = $application; - $application = ""; - } - if( !empty( $application )){ - self::$scripts[] = "$application/js/$file"; - }else{ - self::$scripts[] = "js/$file"; - } - } - - /** - * add a css file - * - * @param url $url - */ - public static function addStyle( $application, $file = null ){ - if( is_null( $file )){ - $file = $application; - $application = ""; - } - if( !empty( $application )){ - self::$styles[] = "$application/css/$file"; - }else{ - self::$styles[] = "css/$file"; - } - } - - /** - * @brief Add a custom element to the header - * @param string tag tag name of the element - * @param array $attributes array of attrobutes for the element - * @param string $text the text content for the element - */ - public static function addHeader( $tag, $attributes, $text=''){ - self::$headers[]=array('tag'=>$tag,'attributes'=>$attributes,'text'=>$text); - } - - /** - * formats a timestamp in the "right" way - * - * @param int timestamp $timestamp - * @param bool dateOnly option to ommit time from the result - */ - public static function formatDate( $timestamp,$dateOnly=false){ - if(isset($_SESSION['timezone'])){//adjust to clients timezone if we know it - $systemTimeZone = intval(exec('date +%z')); - $systemTimeZone=(round($systemTimeZone/100,0)*60)+($systemTimeZone%100); - $clientTimeZone=$_SESSION['timezone']*60; - $offset=$clientTimeZone-$systemTimeZone; - $timestamp=$timestamp+$offset*60; - } - $timeformat=$dateOnly?'F j, Y':'F j, Y, H:i'; - return date($timeformat,$timestamp); - } - - /** - * Shows a pagenavi widget where you can jump to different pages. - * - * @param int $pagecount - * @param int $page - * @param string $url - * @return OC_TEMPLATE - */ - public static function getPageNavi($pagecount,$page,$url) { - - $pagelinkcount=8; - if ($pagecount>1) { - $pagestart=$page-$pagelinkcount; - if($pagestart<0) $pagestart=0; - $pagestop=$page+$pagelinkcount; - if($pagestop>$pagecount) $pagestop=$pagecount; - - $tmpl = new OC_TEMPLATE( '', 'part.pagenavi', '' ); - $tmpl->assign('page',$page); - $tmpl->assign('pagecount',$pagecount); - $tmpl->assign('pagestart',$pagestart); - $tmpl->assign('pagestop',$pagestop); - $tmpl->assign('url',$url); - return $tmpl; - } - } - - - - /** - * check if the current server configuration is suitable for ownCloud - * @return array arrays with error messages and hints - */ - public static function checkServer(){ - global $SERVERROOT; - global $CONFIG_DATADIRECTORY; - - $CONFIG_DATADIRECTORY_ROOT = OC_CONFIG::getValue( "datadirectory", "$SERVERROOT/data" );; - $CONFIG_BACKUPDIRECTORY = OC_CONFIG::getValue( "backupdirectory", "$SERVERROOT/backup" ); - $CONFIG_INSTALLED = OC_CONFIG::getValue( "installed", false ); - $errors=array(); - - //check for database drivers - if(!is_callable('sqlite_open') and !is_callable('mysql_connect')){ - $errors[]=array('error'=>'No database drivers (sqlite or mysql) installed.<br/>','hint'=>'');//TODO: sane hint - } - $CONFIG_DBTYPE = OC_CONFIG::getValue( "dbtype", "sqlite" ); - $CONFIG_DBNAME = OC_CONFIG::getValue( "dbname", "owncloud" ); - - //try to get the username the httpd server runs on, used in hints - $stat=stat($_SERVER['DOCUMENT_ROOT']); - if(is_callable('posix_getpwuid')){ - $serverUser=posix_getpwuid($stat['uid']); - $serverUser='\''.$serverUser['name'].'\''; - }else{ - $serverUser='\'www-data\' for ubuntu/debian';//TODO: try to detect the distro and give a guess based on that - } - - //common hint for all file permissons error messages - $permissionsHint="Permissions can usually be fixed by setting the owner of the file or directory to the user the web server runs as ($serverUser)"; - - //check for correct file permissions - if(!stristr(PHP_OS, 'WIN')){ - $prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3); - if(substr($prems,-1)!='0'){ - OC_HELPER::chmodr($CONFIG_DATADIRECTORY_ROOT,0770); - clearstatcache(); - $prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3); - if(substr($prems,2,1)!='0'){ - $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable from the web<br/>','hint'=>$permissionsHint); - } - } - if( OC_CONFIG::getValue( "enablebackup", false )){ - $prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3); - if(substr($prems,-1)!='0'){ - OC_HELPER::chmodr($CONFIG_BACKUPDIRECTORY,0770); - clearstatcache(); - $prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3); - if(substr($prems,2,1)!='0'){ - $errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable from the web<br/>','hint'=>$permissionsHint); - } - } - } - }else{ - //TODO: premisions checks for windows hosts - } - if(is_dir($CONFIG_DATADIRECTORY_ROOT) and !is_writable($CONFIG_DATADIRECTORY_ROOT)){ - $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') not writable by ownCloud<br/>','hint'=>$permissionsHint); - } - - //TODO: check for php modules - - return $errors; - } -} - -/** - * This class manages the hooks. It basically provides two functions: adding - * slots and emitting signals. - */ -class OC_HOOK{ - static private $registered = array(); - - /** - * @brief connects a function to a hook - * @param $signalclass class name of emitter - * @param $signalname name of signal - * @param $slotclass class name of slot - * @param $slotname name of slot - * @returns true/false - * - * This function makes it very easy to connect to use hooks. - * - * TODO: write example - */ - static public function connect( $signalclass, $signalname, $slotclass, $slotname ){ - // Cerate the data structure - if( !array_key_exists( $signalclass, self::$registered )){ - self::$registered[$signalclass] = array(); - } - if( !array_key_exists( $signalname, self::$registered[$signalclass] )){ - self::$registered[$signalclass][$signalname] = array(); - } - - // register hook - self::$registered[$signalclass][$signalname][] = array( - "class" => $slotclass, - "name" => $slotname ); - // No chance for failure ;-) - return true; - } - - /** - * @brief emitts a signal - * @param $signalclass class name of emitter - * @param $signalname name of signal - * @param $params defautl: array() array with additional data - * @returns true if slots exists or false if not - * - * Emits a signal. To get data from the slot use references! - * - * TODO: write example - */ - static public function emit( $signalclass, $signalname, $params = array()){ - // Return false if there are no slots - if( !array_key_exists( $signalclass, self::$registered )){ - return false; - } - if( !array_key_exists( $signalname, self::$registered[$signalclass] )){ - return false; - } - - // Call all slots - foreach( self::$registered[$signalclass][$signalname] as $i ){ - call_user_func( array( $i["class"], $i["name"] ), $params ); - } - - // return true - return true; - } -} ?> diff --git a/lib/Connector/Sabre/auth.php b/lib/connector/sabre/auth.php index cfe7723e761..4e974ad821d 100644 --- a/lib/Connector/Sabre/auth.php +++ b/lib/connector/sabre/auth.php @@ -1,5 +1,4 @@ <?php -require_once("lib/base.php"); /** * HTTP Basic authentication backend class * diff --git a/lib/Connector/Sabre/directory.php b/lib/connector/sabre/directory.php index d0ff87f9b1a..a73888ca732 100644 --- a/lib/Connector/Sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -1,7 +1,4 @@ <?php - -require_once("lib/base.php"); - /** * Directory class * diff --git a/lib/Connector/Sabre/file.php b/lib/connector/sabre/file.php index bb5ab738430..fb4e559aa50 100644 --- a/lib/Connector/Sabre/file.php +++ b/lib/connector/sabre/file.php @@ -1,6 +1,4 @@ <?php - -require_once("lib/base.php"); /** * File class * diff --git a/lib/Connector/Sabre/locks.php b/lib/connector/sabre/locks.php index 4f3eb7bbf52..88bab509898 100644 --- a/lib/Connector/Sabre/locks.php +++ b/lib/connector/sabre/locks.php @@ -1,6 +1,4 @@ <?php -require_once("lib/base.php"); - /** * The Lock manager allows you to handle all file-locks centrally. * diff --git a/lib/Connector/Sabre/node.php b/lib/connector/sabre/node.php index dc1013dc524..03d5e90012e 100644 --- a/lib/Connector/Sabre/node.php +++ b/lib/connector/sabre/node.php @@ -1,7 +1,4 @@ <?php - -require_once("lib/base.php"); - /** * Base node-class * diff --git a/lib/database.php b/lib/db.php index 8d7c76756c1..8d7c76756c1 100644 --- a/lib/database.php +++ b/lib/db.php diff --git a/lib/files.php b/lib/files.php index d8133667954..d24eb282c45 100644 --- a/lib/files.php +++ b/lib/files.php @@ -21,9 +21,6 @@ * */ -require_once("log.php"); - - /** * Class for fileserver access * diff --git a/lib/group.php b/lib/group.php index 6510838ccfc..71caaee6132 100644 --- a/lib/group.php +++ b/lib/group.php @@ -78,7 +78,6 @@ class OC_GROUP { case 'database': case 'mysql': case 'sqlite': - require_once('Group/database.php'); self::$_backend = new OC_GROUP_DATABASE(); break; default: diff --git a/lib/Group/backend.php b/lib/group/backend.php index 298cced7ff5..298cced7ff5 100644 --- a/lib/Group/backend.php +++ b/lib/group/backend.php diff --git a/lib/Group/database.php b/lib/group/database.php index 6e508a4d47c..8c04ca5d36b 100644 --- a/lib/Group/database.php +++ b/lib/group/database.php @@ -37,8 +37,6 @@ * */ -require_once( 'Group/backend.php' ); - /** * Class for group management in a SQL Database (e.g. MySQL, SQLite) */ diff --git a/lib/hook.php b/lib/hook.php new file mode 100644 index 00000000000..08b6d5e8b6b --- /dev/null +++ b/lib/hook.php @@ -0,0 +1,69 @@ +<?php + +/** + * This class manages the hooks. It basically provides two functions: adding + * slots and emitting signals. + */ +class OC_HOOK{ + static private $registered = array(); + + /** + * @brief connects a function to a hook + * @param $signalclass class name of emitter + * @param $signalname name of signal + * @param $slotclass class name of slot + * @param $slotname name of slot + * @returns true/false + * + * This function makes it very easy to connect to use hooks. + * + * TODO: write example + */ + static public function connect( $signalclass, $signalname, $slotclass, $slotname ){ + // Cerate the data structure + if( !array_key_exists( $signalclass, self::$registered )){ + self::$registered[$signalclass] = array(); + } + if( !array_key_exists( $signalname, self::$registered[$signalclass] )){ + self::$registered[$signalclass][$signalname] = array(); + } + + // register hook + self::$registered[$signalclass][$signalname][] = array( + "class" => $slotclass, + "name" => $slotname ); + + // No chance for failure ;-) + return true; + } + + /** + * @brief emitts a signal + * @param $signalclass class name of emitter + * @param $signalname name of signal + * @param $params defautl: array() array with additional data + * @returns true if slots exists or false if not + * + * Emits a signal. To get data from the slot use references! + * + * TODO: write example + */ + static public function emit( $signalclass, $signalname, $params = array()){ + // Return false if there are no slots + if( !array_key_exists( $signalclass, self::$registered )){ + return false; + } + if( !array_key_exists( $signalname, self::$registered[$signalclass] )){ + return false; + } + + // Call all slots + foreach( self::$registered[$signalclass][$signalname] as $i ){ + call_user_func( array( $i["class"], $i["name"] ), $params ); + } + + // return true + return true; + } +} + diff --git a/lib/user.php b/lib/user.php index a64ce05f2c9..b93e2133352 100644 --- a/lib/user.php +++ b/lib/user.php @@ -95,7 +95,6 @@ class OC_USER { case 'database': case 'mysql': case 'sqlite': - require_once('User/database.php'); self::$_usedBackends[$backend] = new OC_USER_DATABASE(); break; default: diff --git a/lib/User/backend.php b/lib/user/backend.php index 1797d0c475a..1797d0c475a 100644 --- a/lib/User/backend.php +++ b/lib/user/backend.php diff --git a/lib/User/database.php b/lib/user/database.php index 0396ac30958..ace3c897703 100644 --- a/lib/User/database.php +++ b/lib/user/database.php @@ -33,8 +33,6 @@ * */ -require_once('User/backend.php'); - /** * Class for user management in a SQL Database (e.g. MySQL, SQLite) */ diff --git a/lib/User/example.php b/lib/user/example.php index 4abc1b3d49c..069f14492a4 100644 --- a/lib/User/example.php +++ b/lib/user/example.php @@ -21,8 +21,6 @@ * */ -require_once('User/backend.php'); - /** * abstract reference class for user management * this class should only be used as a reference for method signatures and their descriptions diff --git a/lib/util.php b/lib/util.php new file mode 100644 index 00000000000..8beb4a884bc --- /dev/null +++ b/lib/util.php @@ -0,0 +1,245 @@ +<?php + +/** + * Class for utility functions + * + */ +class OC_UTIL { + public static $scripts=array(); + public static $styles=array(); + public static $headers=array(); + private static $fsSetup=false; + + // Can be set up + public static function setupFS( $user = "", $root = "files" ){// configure the initial filesystem based on the configuration + if(self::$fsSetup){//setting up the filesystem twice can only lead to trouble + return false; + } + + // Global Variables + global $SERVERROOT; + global $CONFIG_DATADIRECTORY; + + $CONFIG_DATADIRECTORY_ROOT = OC_CONFIG::getValue( "datadirectory", "$SERVERROOT/data" ); + $CONFIG_BACKUPDIRECTORY = OC_CONFIG::getValue( "backupdirectory", "$SERVERROOT/backup" ); + + // Create root dir + 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)"); + } + + // If we are not forced to load a specific user we load the one that is logged in + if( $user == "" && OC_USER::isLoggedIn()){ + $user = OC_USER::getUser(); + } + + if( $user != "" ){ //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_ROOT)); +// if( OC_CONFIG::getValue( "enablebackup", false )){ +// // This creates the Directorys recursively +// if(!is_dir( "$CONFIG_BACKUPDIRECTORY/$user/$root" )){ +// mkdir( "$CONFIG_BACKUPDIRECTORY/$user/$root", 0755, true ); +// } +// $backupStorage=OC_FILESYSTEM::createStorage('local',array('datadir'=>$CONFIG_BACKUPDIRECTORY)); +// $backup=new OC_FILEOBSERVER_BACKUP(array('storage'=>$backupStorage)); +// $rootStorage->addObserver($backup); +// } + OC_FILESYSTEM::mount($rootStorage,'/'); + + $CONFIG_DATADIRECTORY = "$CONFIG_DATADIRECTORY_ROOT/$user/$root"; + if( !is_dir( $CONFIG_DATADIRECTORY )){ + mkdir( $CONFIG_DATADIRECTORY, 0755, true ); + } + +// TODO: find a cool way for doing this +// //set up the other storages according to the system settings +// foreach($CONFIG_FILESYSTEM as $storageConfig){ +// if(OC_FILESYSTEM::hasStorageType($storageConfig['type'])){ +// $arguments=$storageConfig; +// unset($arguments['type']); +// unset($arguments['mountpoint']); +// $storage=OC_FILESYSTEM::createStorage($storageConfig['type'],$arguments); +// if($storage){ +// OC_FILESYSTEM::mount($storage,$storageConfig['mountpoint']); +// } +// } +// } + + //jail the user into his "home" directory + OC_FILESYSTEM::chroot("/$user/$root"); + self::$fsSetup=true; + } + } + + public static function tearDownFS(){ + OC_FILESYSTEM::tearDown(); + self::$fsSetup=false; + } + + /** + * get the current installed version of ownCloud + * @return array + */ + public static function getVersion(){ + return array(1,60,0); + } + + /** + * add a javascript file + * + * @param url $url + */ + public static function addScript( $application, $file = null ){ + if( is_null( $file )){ + $file = $application; + $application = ""; + } + if( !empty( $application )){ + self::$scripts[] = "$application/js/$file"; + }else{ + self::$scripts[] = "js/$file"; + } + } + + /** + * add a css file + * + * @param url $url + */ + public static function addStyle( $application, $file = null ){ + if( is_null( $file )){ + $file = $application; + $application = ""; + } + if( !empty( $application )){ + self::$styles[] = "$application/css/$file"; + }else{ + self::$styles[] = "css/$file"; + } + } + + /** + * @brief Add a custom element to the header + * @param string tag tag name of the element + * @param array $attributes array of attrobutes for the element + * @param string $text the text content for the element + */ + public static function addHeader( $tag, $attributes, $text=''){ + self::$headers[]=array('tag'=>$tag,'attributes'=>$attributes,'text'=>$text); + } + + /** + * formats a timestamp in the "right" way + * + * @param int timestamp $timestamp + * @param bool dateOnly option to ommit time from the result + */ + public static function formatDate( $timestamp,$dateOnly=false){ + if(isset($_SESSION['timezone'])){//adjust to clients timezone if we know it + $systemTimeZone = intval(exec('date +%z')); + $systemTimeZone=(round($systemTimeZone/100,0)*60)+($systemTimeZone%100); + $clientTimeZone=$_SESSION['timezone']*60; + $offset=$clientTimeZone-$systemTimeZone; + $timestamp=$timestamp+$offset*60; + } + $timeformat=$dateOnly?'F j, Y':'F j, Y, H:i'; + return date($timeformat,$timestamp); + } + + /** + * Shows a pagenavi widget where you can jump to different pages. + * + * @param int $pagecount + * @param int $page + * @param string $url + * @return OC_TEMPLATE + */ + public static function getPageNavi($pagecount,$page,$url) { + + $pagelinkcount=8; + if ($pagecount>1) { + $pagestart=$page-$pagelinkcount; + if($pagestart<0) $pagestart=0; + $pagestop=$page+$pagelinkcount; + if($pagestop>$pagecount) $pagestop=$pagecount; + + $tmpl = new OC_TEMPLATE( '', 'part.pagenavi', '' ); + $tmpl->assign('page',$page); + $tmpl->assign('pagecount',$pagecount); + $tmpl->assign('pagestart',$pagestart); + $tmpl->assign('pagestop',$pagestop); + $tmpl->assign('url',$url); + return $tmpl; + } + } + + + + /** + * check if the current server configuration is suitable for ownCloud + * @return array arrays with error messages and hints + */ + public static function checkServer(){ + global $SERVERROOT; + global $CONFIG_DATADIRECTORY; + + $CONFIG_DATADIRECTORY_ROOT = OC_CONFIG::getValue( "datadirectory", "$SERVERROOT/data" );; + $CONFIG_BACKUPDIRECTORY = OC_CONFIG::getValue( "backupdirectory", "$SERVERROOT/backup" ); + $CONFIG_INSTALLED = OC_CONFIG::getValue( "installed", false ); + $errors=array(); + + //check for database drivers + if(!is_callable('sqlite_open') and !is_callable('mysql_connect')){ + $errors[]=array('error'=>'No database drivers (sqlite or mysql) installed.<br/>','hint'=>'');//TODO: sane hint + } + $CONFIG_DBTYPE = OC_CONFIG::getValue( "dbtype", "sqlite" ); + $CONFIG_DBNAME = OC_CONFIG::getValue( "dbname", "owncloud" ); + + //try to get the username the httpd server runs on, used in hints + $stat=stat($_SERVER['DOCUMENT_ROOT']); + if(is_callable('posix_getpwuid')){ + $serverUser=posix_getpwuid($stat['uid']); + $serverUser='\''.$serverUser['name'].'\''; + }else{ + $serverUser='\'www-data\' for ubuntu/debian';//TODO: try to detect the distro and give a guess based on that + } + + //common hint for all file permissons error messages + $permissionsHint="Permissions can usually be fixed by setting the owner of the file or directory to the user the web server runs as ($serverUser)"; + + //check for correct file permissions + if(!stristr(PHP_OS, 'WIN')){ + $prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3); + if(substr($prems,-1)!='0'){ + OC_HELPER::chmodr($CONFIG_DATADIRECTORY_ROOT,0770); + clearstatcache(); + $prems=substr(decoct(fileperms($CONFIG_DATADIRECTORY_ROOT)),-3); + if(substr($prems,2,1)!='0'){ + $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable from the web<br/>','hint'=>$permissionsHint); + } + } + if( OC_CONFIG::getValue( "enablebackup", false )){ + $prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3); + if(substr($prems,-1)!='0'){ + OC_HELPER::chmodr($CONFIG_BACKUPDIRECTORY,0770); + clearstatcache(); + $prems=substr(decoct(fileperms($CONFIG_BACKUPDIRECTORY)),-3); + if(substr($prems,2,1)!='0'){ + $errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable from the web<br/>','hint'=>$permissionsHint); + } + } + } + }else{ + //TODO: premisions checks for windows hosts + } + if(is_dir($CONFIG_DATADIRECTORY_ROOT) and !is_writable($CONFIG_DATADIRECTORY_ROOT)){ + $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') not writable by ownCloud<br/>','hint'=>$permissionsHint); + } + + //TODO: check for php modules + + return $errors; + } +} + |