]> source.dussan.org Git - nextcloud-server.git/commitdiff
Merge branch 'master' of git://anongit.kde.org/owncloud into autoload
authorJakob Sack <kde@jakobsack.de>
Fri, 29 Jul 2011 18:42:24 +0000 (20:42 +0200)
committerJakob Sack <kde@jakobsack.de>
Fri, 29 Jul 2011 18:42:24 +0000 (20:42 +0200)
Conflicts:
lib/base.php
lib/filestorage.php

1  2 
apps/user_openid/phpmyid.php
lib/base.php
lib/filestorage.php
lib/filestorage/local.php
lib/util.php

Simple merge
diff --cc lib/base.php
index 0c0921ca8b141fa0c1560d3acff6836036bf16bd,4636dd703ed5a9eaabe607ac3d5f16e2cc9812fe..4e1b9bd006440579511a4385e66c7030b40d18af
@@@ -110,6 -116,314 +110,3 @@@ OC_UTIL::addStyle( "styles" )
  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,90,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;
 -      }
 -}
--?>
index ada85f1a50de468d03eceaf6bb98d97261003340,601cf6f37fe833526d5c9416f56f9613d978df46..ba1a4b295aa3cb5fd548dfb2be3e24ac5cdc53ab
@@@ -58,5 -58,363 +58,3 @@@ class OC_FILESTORAGE
        public function search($query){}
        public function getLocalFile($path){}// get a path to a local version of the file, whether the original file is local or remote
  }
 -
 -
 -OC_FILESYSTEM::registerStorageType('local','OC_FILESTORAGE_LOCAL',array('datadir'=>'string'));
 -/**
 - * for local filestore, we only have to map the paths
 - */
 -class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{
 -      private $datadir;
 -      private static $mimetypes=null;
 -      public function __construct($arguments){
 -              $this->datadir=$arguments['datadir'];
 -              if(substr($this->datadir,-1)!=='/'){
 -                      $this->datadir.='/';
 -              }
 -      }
 -      public function mkdir($path){
 -              if($return=mkdir($this->datadir.$path)){
 -                      $this->clearFolderSizeCache($path);
 -              }
 -              return $return;
 -      }
 -      public function rmdir($path){
 -              if($return=rmdir($this->datadir.$path)){
 -                      $this->clearFolderSizeCache($path);
 -              }
 -              return $return;
 -      }
 -      public function opendir($path){
 -              return opendir($this->datadir.$path);
 -      }
 -      public function is_dir($path){
 -              return (is_dir($this->datadir.$path) or substr($path,-1)=='/');
 -      }
 -      public function is_file($path){
 -              return is_file($this->datadir.$path);
 -      }
 -      public function stat($path){
 -              return stat($this->datadir.$path);
 -      }
 -      public function filetype($path){
 -              $filetype=filetype($this->datadir.$path);
 -              if($filetype=='link'){
 -                      $filetype=filetype(readlink($this->datadir.$path));
 -              }
 -              return $filetype;
 -      }
 -      public function filesize($path){
 -              if($this->is_dir($path)){
 -                      return $this->getFolderSize($path);
 -              }else{
 -                      return filesize($this->datadir.$path);
 -              }
 -      }
 -      public function is_readable($path){
 -              return is_readable($this->datadir.$path);
 -      }
 -      public function is_writeable($path){
 -              return is_writeable($this->datadir.$path);
 -      }
 -      public function file_exists($path){
 -              return file_exists($this->datadir.$path);
 -      }
 -      public function readfile($path){
 -              return readfile($this->datadir.$path);
 -      }
 -      public function filectime($path){
 -              return filectime($this->datadir.$path);
 -      }
 -      public function filemtime($path){
 -              return filemtime($this->datadir.$path);
 -      }
 -      public function fileatime($path){
 -              return fileatime($this->datadir.$path);
 -      }
 -      public function file_get_contents($path){
 -              return file_get_contents($this->datadir.$path);
 -      }
 -      public function file_put_contents($path,$data){
 -              if($return=file_put_contents($this->datadir.$path,$data)){
 -                      $this->clearFolderSizeCache($path);
 -              }
 -      }
 -      public function unlink($path){
 -              if($return=unlink($this->datadir.$path)){
 -                      $this->clearFolderSizeCache($path);
 -              }
 -              return $return;
 -      }
 -      public function rename($path1,$path2){
 -              if($return=rename($this->datadir.$path1,$this->datadir.$path2)){
 -                      $this->clearFolderSizeCache($path1);
 -                      $this->clearFolderSizeCache($path2);
 -              }
 -              return $return;
 -      }
 -      public function copy($path1,$path2){
 -              if($this->is_dir($path2)){
 -                      if(!$this->file_exists($path2)){
 -                              $this->mkdir($path2);
 -                      }
 -                      $source=substr($path1,strrpos($path1,'/')+1);
 -                      $path2.=$source;
 -              }
 -              if($return=copy($this->datadir.$path1,$this->datadir.$path2)){
 -                      $this->clearFolderSizeCache($path2);
 -              }
 -              return $return;
 -      }
 -      public function fopen($path,$mode){
 -              if($return=fopen($this->datadir.$path,$mode)){
 -                      switch($mode){
 -                              case 'r':
 -                                      break;
 -                              case 'r+':
 -                              case 'w+':
 -                              case 'x+':
 -                              case 'a+':
 -                                      $this->clearFolderSizeCache($path);
 -                                      break;
 -                              case 'w':
 -                              case 'x':
 -                              case 'a':
 -                                      $this->clearFolderSizeCache($path);
 -                                      break;
 -                      }
 -              }
 -              return $return;
 -      }
 -
 -      public function getMimeType($fspath){
 -              if($this->is_readable($fspath)){
 -                      if (@is_dir($this->datadir.$fspath)) {
 -                              // directories are easy
 -                              return "httpd/unix-directory";
 -                      }elseif (function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){
 -                              $mimeType =strtolower(finfo_file($finfo,$this->datadir.$fspath));
 -                              $mimeType=substr($mimeType,0,strpos($mimeType,';'));
 -                              finfo_close($finfo);
 -                              return $mimeType;
 -                      } else if (function_exists("mime_content_type")) {
 -                              // use mime magic extension if available
 -                              $mime_type = mime_content_type($this->datadir.$fspath);
 -                      } else if (OC_HELPER::canExecute("file")) {
 -                              // it looks like we have a 'file' command,
 -                              // lets see it it does have mime support
 -                              $fp = popen("file -i -b '{$this->datadir}$fspath' 2>/dev/null", "r");
 -                              $reply = fgets($fp);
 -                              pclose($fp);
 -
 -                              //trim the character set from the end of the response
 -                              $mime_type=substr($reply,0,strrpos($reply,' '));
 -                      }
 -                      if (empty($mime_type)) {
 -                              // Fallback solution: (try to guess the type by the file extension
 -                              if(!self::$mimetypes){
 -                                      self::$mimetypes=include('mimetypes.list.php');
 -                              }
 -                              $extention=strtolower(strrchr(basename($fspath), "."));
 -                              $extention=substr($extention,1);//remove leading .
 -                              $mime_type=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream';
 -                      }
 -                      return $mime_type;
 -              }
 -      }
 -
 -      public function toTmpFile($path){
 -              $tmpFolder=sys_get_temp_dir();
 -              $filename=tempnam($tmpFolder,'OC_TEMP_FILE_'.substr($path,strrpos($path,'.')));
 -              $fileStats = stat($this->datadir.$path);
 -              if(copy($this->datadir.$path,$filename)){
 -                      touch($filename, $fileStats['mtime'], $fileStats['atime']);
 -                      return $filename;
 -              }else{
 -                      return false;
 -              }
 -      }
 -
 -      public function fromTmpFile($tmpFile,$path){
 -              $fileStats = stat($tmpFile);
 -              if(rename($tmpFile,$this->datadir.$path)){
 -                      touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']);
 -                      $this->clearFolderSizeCache($path);
 -                      return true;
 -              }else{
 -                      return false;
 -              }
 -      }
 -      
 -      public function fromUploadedFile($tmpFile,$path){
 -              $fileStats = stat($tmpFile);
 -              if(move_uploaded_file($tmpFile,$this->datadir.$path)){
 -                      touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']);
 -                      $this->clearFolderSizeCache($path);
 -                      return true;
 -              }else{
 -                      return false;
 -              }
 -      }
 -
 -      public function delTree($dir) {
 -              $dirRelative=$dir;
 -              $dir=$this->datadir.$dir;
 -              if (!file_exists($dir)) return true;
 -              if (!is_dir($dir) || is_link($dir)) return unlink($dir);
 -              foreach (scandir($dir) as $item) {
 -                      if ($item == '.' || $item == '..') continue;
 -                      if(is_file($dir.'/'.$item)){
 -                              if(unlink($dir.'/'.$item)){
 -                                      $this->clearFolderSizeCache($dir);
 -                              }
 -                      }elseif(is_dir($dir.'/'.$item)){
 -                              if (!$this->delTree($dirRelative. "/" . $item)){
 -                                      return false;
 -                              };
 -                      }
 -              }
 -              if($return=rmdir($dir)){
 -                      $this->clearFolderSizeCache($dir);
 -              }
 -              return $return;
 -      }
 -
 -      public function find($path){
 -              $return=System::find($this->datadir.$path);
 -              foreach($return as &$file){
 -                      $file=str_replace($file,$this->datadir,'');
 -              }
 -              return $return;
 -      }
 -
 -      public function getTree($dir) {
 -              if(substr($dir,-1,1)=='/'){
 -                      $dir=substr($dir,0,-1);
 -              }
 -              $tree=array();
 -              $tree[]=$dir;
 -              $dirRelative=$dir;
 -              $dir=$this->datadir.$dir;
 -              if (!file_exists($dir)) return true;
 -              foreach (scandir($dir) as $item) {
 -                      if ($item == '.' || $item == '..') continue;
 -                      if(is_file($dir.'/'.$item)){
 -                              $tree[]=$dirRelative.'/'.$item;
 -                      }elseif(is_dir($dir.'/'.$item)){
 -                              if ($subTree=$this->getTree($dirRelative. "/" . $item)){
 -                                      $tree=array_merge($tree,$subTree);
 -                              }
 -                      }
 -              }
 -              return $tree;
 -      }
 -
 -      public function hash($type,$path,$raw){
 -              return hash_file($type,$this->datadir.$path,$raw);
 -      }
 -      
 -      public function free_space($path){
 -              return disk_free_space($this->datadir.$path);
 -      }
 -      
 -      public function search($query){
 -              return $this->searchInDir($query);
 -      }
 -      public function getLocalFile($path){
 -                      return $this->datadir.$path;
 -      }
 -      
 -      private function searchInDir($query,$dir=''){
 -              $files=array();
 -              foreach (scandir($this->datadir.$dir) as $item) {
 -                      if ($item == '.' || $item == '..') continue;
 -                      if(strstr(strtolower($item),strtolower($query))!==false){
 -                              $files[]=$dir.'/'.$item;
 -                      }
 -                      if(is_dir($this->datadir.$dir.'/'.$item)){
 -                              $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item));
 -                      }
 -              }
 -              return $files;
 -      }
 -      
 -      /**
 -       * @brief get the size of folder and it's content
 -       * @param string $path file path
 -       * @return int size of folder and it's content
 -       */
 -      public function getFolderSize($path){
 -              $path=str_replace('//','/',$path);
 -              if($this->is_dir($path) and substr($path,-1)!='/'){
 -                      $path.='/';
 -              }
 -              $query=OC_DB::prepare("SELECT size FROM *PREFIX*foldersize WHERE path=?");
 -              $size=$query->execute(array($path))->fetchAll();
 -              if(count($size)>0){// we already the size, just return it
 -                      return $size[0]['size'];
 -              }else{//the size of the folder isn't know, calulate it
 -                      return $this->calculateFolderSize($path);
 -              }
 -      }
 -
 -      /**
 -       * @brief calulate the size of folder and it's content and cache it
 -       * @param string $path file path
 -       * @return int size of folder and it's content
 -       */
 -      public function calculateFolderSize($path){
 -              if($this->is_file($path)){
 -                      $path=dirname($path);
 -              }
 -              $path=str_replace('//','/',$path);
 -              if($this->is_dir($path) and substr($path,-1)!='/'){
 -                      $path.='/';
 -              }
 -              $size=0;
 -              if ($dh = $this->opendir($path)) {
 -                      while (($filename = readdir($dh)) !== false) {
 -                              if($filename!='.' and $filename!='..'){
 -                                      $subFile=$path.'/'.$filename;
 -                                      if($this->is_file($subFile)){
 -                                              $size+=$this->filesize($subFile);
 -                                      }else{
 -                                              $size+=$this->getFolderSize($subFile);
 -                                      }
 -                              }
 -                      }
 -                      if($size>0){
 -                              $query=OC_DB::prepare("INSERT INTO *PREFIX*foldersize VALUES(?,?)");
 -                              $result=$query->execute(array($path,$size));
 -                      }
 -              }
 -              return $size;
 -      }
--
 -      /**
 -       * @brief clear the folder size cache of folders containing a file
 -       * @param string $path
 -       */
 -      public function clearFolderSizeCache($path){
 -              if($this->is_file($path)){
 -                      $path=dirname($path);
 -              }
 -              $path=str_replace('//','/',$path);
 -              if($this->is_dir($path) and substr($path,-1)!='/'){
 -                      $path.='/';
 -              }
 -              $query=OC_DB::prepare("DELETE FROM *PREFIX*foldersize WHERE path = ?");
 -              $result=$query->execute(array($path));
 -              if($path!='/' and $path!=''){
 -                      $parts=explode('/',$path);
 -                      //pop empty part
 -                      $part=array_pop($parts);
 -                      if(empty($part)){
 -                              array_pop($parts);
 -                      }
 -                      $parent=implode('/',$parts);
 -                      $this->clearFolderSizeCache($parent);
 -              }
 -      }
 -}
--?>
index 81a00dd8f4d2a0ced9b4e64228874fd224a9b05a,0000000000000000000000000000000000000000..fd3f043de3b8e18d9cf580c9a238fef8b12bb80b
mode 100644,000000..100644
--- /dev/null
@@@ -1,414 -1,0 +1,357 @@@
-                       } else if (self::canExecute("file")) {
 +<?php
 +/**
 + * for local filestore, we only have to map the paths
 + */
 +class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{
 +      private $datadir;
 +      private static $mimetypes=null;
 +      public function __construct($arguments){
 +              $this->datadir=$arguments['datadir'];
 +              if(substr($this->datadir,-1)!=='/'){
 +                      $this->datadir.='/';
 +              }
 +      }
 +      public function mkdir($path){
 +              if($return=mkdir($this->datadir.$path)){
 +                      $this->clearFolderSizeCache($path);
 +              }
 +              return $return;
 +      }
 +      public function rmdir($path){
 +              if($return=rmdir($this->datadir.$path)){
 +                      $this->clearFolderSizeCache($path);
 +              }
 +              return $return;
 +      }
 +      public function opendir($path){
 +              return opendir($this->datadir.$path);
 +      }
 +      public function is_dir($path){
 +              return (is_dir($this->datadir.$path) or substr($path,-1)=='/');
 +      }
 +      public function is_file($path){
 +              return is_file($this->datadir.$path);
 +      }
 +      public function stat($path){
 +              return stat($this->datadir.$path);
 +      }
 +      public function filetype($path){
 +              $filetype=filetype($this->datadir.$path);
 +              if($filetype=='link'){
 +                      $filetype=filetype(readlink($this->datadir.$path));
 +              }
 +              return $filetype;
 +      }
 +      public function filesize($path){
 +              if($this->is_dir($path)){
 +                      return $this->getFolderSize($path);
 +              }else{
 +                      return filesize($this->datadir.$path);
 +              }
 +      }
 +      public function is_readable($path){
 +              return is_readable($this->datadir.$path);
 +      }
 +      public function is_writeable($path){
 +              return is_writeable($this->datadir.$path);
 +      }
 +      public function file_exists($path){
 +              return file_exists($this->datadir.$path);
 +      }
 +      public function readfile($path){
 +              return readfile($this->datadir.$path);
 +      }
 +      public function filectime($path){
 +              return filectime($this->datadir.$path);
 +      }
 +      public function filemtime($path){
 +              return filemtime($this->datadir.$path);
 +      }
 +      public function fileatime($path){
 +              return fileatime($this->datadir.$path);
 +      }
 +      public function file_get_contents($path){
 +              return file_get_contents($this->datadir.$path);
 +      }
 +      public function file_put_contents($path,$data){
 +              if($return=file_put_contents($this->datadir.$path,$data)){
 +                      $this->clearFolderSizeCache($path);
 +              }
 +      }
 +      public function unlink($path){
 +              if($return=unlink($this->datadir.$path)){
 +                      $this->clearFolderSizeCache($path);
 +              }
 +              return $return;
 +      }
 +      public function rename($path1,$path2){
 +              if($return=rename($this->datadir.$path1,$this->datadir.$path2)){
 +                      $this->clearFolderSizeCache($path1);
 +                      $this->clearFolderSizeCache($path2);
 +              }
 +              return $return;
 +      }
 +      public function copy($path1,$path2){
 +              if($this->is_dir($path2)){
 +                      if(!$this->file_exists($path2)){
 +                              $this->mkdir($path2);
 +                      }
 +                      $source=substr($path1,strrpos($path1,'/')+1);
 +                      $path2.=$source;
 +              }
 +              if($return=copy($this->datadir.$path1,$this->datadir.$path2)){
 +                      $this->clearFolderSizeCache($path2);
 +              }
 +              return $return;
 +      }
 +      public function fopen($path,$mode){
 +              if($return=fopen($this->datadir.$path,$mode)){
 +                      switch($mode){
 +                              case 'r':
 +                                      break;
 +                              case 'r+':
 +                              case 'w+':
 +                              case 'x+':
 +                              case 'a+':
 +                                      $this->clearFolderSizeCache($path);
 +                                      break;
 +                              case 'w':
 +                              case 'x':
 +                              case 'a':
 +                                      $this->clearFolderSizeCache($path);
 +                                      break;
 +                      }
 +              }
 +              return $return;
 +      }
 +
 +      public function getMimeType($fspath){
 +              if($this->is_readable($fspath)){
 +                      if (@is_dir($this->datadir.$fspath)) {
 +                              // directories are easy
 +                              return "httpd/unix-directory";
 +                      }elseif (function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){
 +                              $mimeType =strtolower(finfo_file($finfo,$this->datadir.$fspath));
 +                              $mimeType=substr($mimeType,0,strpos($mimeType,';'));
 +                              finfo_close($finfo);
 +                              return $mimeType;
 +                      } else if (function_exists("mime_content_type")) {
 +                              // use mime magic extension if available
 +                              $mime_type = mime_content_type($this->datadir.$fspath);
-       /**
-       * detect if a given program is found in the search PATH
-       *
-       * helper function used by _mimetype() to detect if the
-       * external 'file' utility is available
-       *
-       * @param  string  program name
-       * @param  string  optional search path, defaults to $PATH
-       * @return bool    true if executable program found in path
-       */
-       private function canExecute($name, $path = false)
-       {
-               // path defaults to PATH from environment if not set
-               if ($path === false) {
-                       $path = getenv("PATH");
-               }
-               // check method depends on operating system
-               if (!strncmp(PHP_OS, "WIN", 3)) {
-                       // on Windows an appropriate COM or EXE file needs to exist
-                       $exts = array(".exe", ".com");
-                       $check_fn = "file_exists";
-               } else {
-                       // anywhere else we look for an executable file of that name
-                       $exts = array("");
-                       $check_fn = "is_executable";
-               }
-         // Default check will be done with $path directories :
-         $dirs = explode(PATH_SEPARATOR, $path);
-               // WARNING : We have to check if open_basedir is enabled :
-               $obd = ini_get('open_basedir');
-               if($obd != "none")
-             $obd_values = explode(PATH_SEPARATOR, $obd);
-               if(count($obd_values) > 0)
-               {
-             // open_basedir is in effect !
-             // We need to check if the program is in one of these dirs :
-             $dirs = $obd_values;
-         }
-         foreach($dirs as $dir)
-         {
-             foreach($exts as $ext)
-             {
-                 if($check_fn("$dir/$name".$ext))
-                     return true;
-             }
-         }
-               return false;
-       }
++                      } else if (OC_HELPER::canExecute("file")) {
 +                              // it looks like we have a 'file' command,
 +                              // lets see it it does have mime support
 +                              $fp = popen("file -i -b '{$this->datadir}$fspath' 2>/dev/null", "r");
 +                              $reply = fgets($fp);
 +                              pclose($fp);
 +
 +                              //trim the character set from the end of the response
 +                              $mime_type=substr($reply,0,strrpos($reply,' '));
 +                      }
 +                      if (empty($mime_type)) {
 +                              // Fallback solution: (try to guess the type by the file extension
 +                              if(!self::$mimetypes){
 +                                      self::$mimetypes=include('mimetypes.list.php');
 +                              }
 +                              $extention=strtolower(strrchr(basename($fspath), "."));
 +                              $extention=substr($extention,1);//remove leading .
 +                              $mime_type=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream';
 +                      }
 +                      return $mime_type;
 +              }
 +      }
 +
-  
 +      public function toTmpFile($path){
 +              $tmpFolder=sys_get_temp_dir();
 +              $filename=tempnam($tmpFolder,'OC_TEMP_FILE_'.substr($path,strrpos($path,'.')));
 +              $fileStats = stat($this->datadir.$path);
 +              if(copy($this->datadir.$path,$filename)){
 +                      touch($filename, $fileStats['mtime'], $fileStats['atime']);
 +                      return $filename;
 +              }else{
 +                      return false;
 +              }
 +      }
 +
 +      public function fromTmpFile($tmpFile,$path){
 +              $fileStats = stat($tmpFile);
 +              if(rename($tmpFile,$this->datadir.$path)){
 +                      touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']);
 +                      $this->clearFolderSizeCache($path);
 +                      return true;
 +              }else{
 +                      return false;
 +              }
 +      }
 +
 +      public function fromUploadedFile($tmpFile,$path){
 +              $fileStats = stat($tmpFile);
 +              if(move_uploaded_file($tmpFile,$this->datadir.$path)){
 +                      touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']);
 +                      $this->clearFolderSizeCache($path);
 +                      return true;
 +              }else{
 +                      return false;
 +              }
 +      }
 +
 +      public function delTree($dir) {
 +              $dirRelative=$dir;
 +              $dir=$this->datadir.$dir;
 +              if (!file_exists($dir)) return true;
 +              if (!is_dir($dir) || is_link($dir)) return unlink($dir);
 +              foreach (scandir($dir) as $item) {
 +                      if ($item == '.' || $item == '..') continue;
 +                      if(is_file($dir.'/'.$item)){
 +                              if(unlink($dir.'/'.$item)){
 +                                      $this->clearFolderSizeCache($dir);
 +                              }
 +                      }elseif(is_dir($dir.'/'.$item)){
 +                              if (!$this->delTree($dirRelative. "/" . $item)){
 +                                      return false;
 +                              };
 +                      }
 +              }
 +              if($return=rmdir($dir)){
 +                      $this->clearFolderSizeCache($dir);
 +              }
 +              return $return;
 +      }
 +
 +      public function find($path){
 +              $return=System::find($this->datadir.$path);
 +              foreach($return as &$file){
 +                      $file=str_replace($file,$this->datadir,'');
 +              }
 +              return $return;
 +      }
 +
 +      public function getTree($dir) {
 +              if(substr($dir,-1,1)=='/'){
 +                      $dir=substr($dir,0,-1);
 +              }
 +              $tree=array();
 +              $tree[]=$dir;
 +              $dirRelative=$dir;
 +              $dir=$this->datadir.$dir;
 +              if (!file_exists($dir)) return true;
 +              foreach (scandir($dir) as $item) {
 +                      if ($item == '.' || $item == '..') continue;
 +                      if(is_file($dir.'/'.$item)){
 +                              $tree[]=$dirRelative.'/'.$item;
 +                      }elseif(is_dir($dir.'/'.$item)){
 +                              if ($subTree=$this->getTree($dirRelative. "/" . $item)){
 +                                      $tree=array_merge($tree,$subTree);
 +                              }
 +                      }
 +              }
 +              return $tree;
 +      }
 +
 +      public function hash($type,$path,$raw){
 +              return hash_file($type,$this->datadir.$path,$raw);
 +      }
 +
 +      public function free_space($path){
 +              return disk_free_space($this->datadir.$path);
 +      }
 +
 +      public function search($query){
 +              return $this->searchInDir($query);
 +      }
 +      public function getLocalFile($path){
 +                      return $this->datadir.$path;
 +      }
 +
 +      private function searchInDir($query,$dir=''){
 +              $files=array();
 +              foreach (scandir($this->datadir.$dir) as $item) {
 +                      if ($item == '.' || $item == '..') continue;
 +                      if(strstr(strtolower($item),strtolower($query))!==false){
 +                              $files[]=$dir.'/'.$item;
 +                      }
 +                      if(is_dir($this->datadir.$dir.'/'.$item)){
 +                              $files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item));
 +                      }
 +              }
 +              return $files;
 +      }
 +
 +      /**
 +       * @brief get the size of folder and it's content
 +       * @param string $path file path
 +       * @return int size of folder and it's content
 +       */
 +      public function getFolderSize($path){
 +              $path=str_replace('//','/',$path);
 +              if($this->is_dir($path) and substr($path,-1)!='/'){
 +                      $path.='/';
 +              }
 +              $query=OC_DB::prepare("SELECT size FROM *PREFIX*foldersize WHERE path=?");
 +              $size=$query->execute(array($path))->fetchAll();
 +              if(count($size)>0){// we already the size, just return it
 +                      return $size[0]['size'];
 +              }else{//the size of the folder isn't know, calulate it
 +                      return $this->calculateFolderSize($path);
 +              }
 +      }
 +
 +      /**
 +       * @brief calulate the size of folder and it's content and cache it
 +       * @param string $path file path
 +       * @return int size of folder and it's content
 +       */
 +      public function calculateFolderSize($path){
 +              if($this->is_file($path)){
 +                      $path=dirname($path);
 +              }
 +              $path=str_replace('//','/',$path);
 +              if($this->is_dir($path) and substr($path,-1)!='/'){
 +                      $path.='/';
 +              }
 +              $size=0;
 +              if ($dh = $this->opendir($path)) {
 +                      while (($filename = readdir($dh)) !== false) {
 +                              if($filename!='.' and $filename!='..'){
 +                                      $subFile=$path.'/'.$filename;
 +                                      if($this->is_file($subFile)){
 +                                              $size+=$this->filesize($subFile);
 +                                      }else{
 +                                              $size+=$this->getFolderSize($subFile);
 +                                      }
 +                              }
 +                      }
 +                      if($size>0){
 +                              $query=OC_DB::prepare("INSERT INTO *PREFIX*foldersize VALUES(?,?)");
 +                              $result=$query->execute(array($path,$size));
 +                      }
 +              }
 +              return $size;
 +      }
 +
 +      /**
 +       * @brief clear the folder size cache of folders containing a file
 +       * @param string $path
 +       */
 +      public function clearFolderSizeCache($path){
 +              if($this->is_file($path)){
 +                      $path=dirname($path);
 +              }
 +              $path=str_replace('//','/',$path);
 +              if($this->is_dir($path) and substr($path,-1)!='/'){
 +                      $path.='/';
 +              }
 +              $query=OC_DB::prepare("DELETE FROM *PREFIX*foldersize WHERE path = ?");
 +              $result=$query->execute(array($path));
 +              if($path!='/' and $path!=''){
 +                      $parts=explode('/',$path);
 +                      //pop empty part
 +                      $part=array_pop($parts);
 +                      if(empty($part)){
 +                              array_pop($parts);
 +                      }
 +                      $parent=implode('/',$parts);
 +                      $this->clearFolderSizeCache($parent);
 +              }
 +      }
 +}
diff --cc lib/util.php
index 8beb4a884bcd43d1693da1d6c537249d55e3f531,0000000000000000000000000000000000000000..2a50114b05337ecfdc44c36f4fd98ac408a19a01
mode 100644,000000..100644
--- /dev/null
@@@ -1,245 -1,0 +1,244 @@@
-               return array(1,60,0);
 +<?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,90,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;
 +      }
 +}