From ee247a21a49c801a4bf96b42a2d6ea28c9446ee6 Mon Sep 17 00:00:00 2001
From: Kamil Domanski <kdomanski@kdemail.net>
Date: Sun, 19 Jun 2011 22:42:33 +0200
Subject: [PATCH] shipped apps are no longer hardcoded

---
 lib/installer.php | 18 +++++++++---------
 lib/setup.php     | 46 ++++++++++++++++++++++++++++++----------------
 2 files changed, 39 insertions(+), 25 deletions(-)

diff --git a/lib/installer.php b/lib/installer.php
index 02b71027cd..91b7ea7da6 100644
--- a/lib/installer.php
+++ b/lib/installer.php
@@ -108,7 +108,7 @@ class OC_INSTALLER{
 		$basedir=$SERVERROOT.'/apps/'.$info['id'];
 		
 		//check if an app with the same id is already installed
-		if(self::isInstalled( $info['id'] ))){
+		if(self::isInstalled( $info['id'] )){
 			error_log("App already installed");
 			OC_HELPER::rmdirr($extractDir);
 			if($data['source']=='http'){
@@ -118,14 +118,14 @@ class OC_INSTALLER{
 		}
 
 		//check if the destination directory already exists
-+		if(is_dir($basedir)){
-+			error_log("App's directory already exists");
-+			OC_HELPER::rmdirr($extractDir);
-+			if($data['source']=='http'){
-+				unlink($path);
-+			}
-+			return false;
-+		}
+		if(is_dir($basedir)){
+			error_log("App's directory already exists");
+			OC_HELPER::rmdirr($extractDir);
+			if($data['source']=='http'){
+				unlink($path);
+			}
+			return false;
+		}
 		
 		if(isset($data['pretent']) and $data['pretent']==true){
 			return false;
diff --git a/lib/setup.php b/lib/setup.php
index 43ead7b96a..0e324b741a 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -1,5 +1,7 @@
 <?php
 
+include_once( 'installer.php' );
+
 $hasSQLite = (is_callable('sqlite_open') or class_exists('SQLite3'));
 $hasMySQL = is_callable('mysql_connect');
 $datadir = OC_CONFIG::getValue('datadir', $SERVERROOT.'/data');
@@ -31,7 +33,6 @@ else {
 
 class OC_SETUP {
 	public static function install($options) {
-		global $SERVERROOT;
 		$error = array();
 		$dbtype = $options['dbtype'];
 		
@@ -134,21 +135,8 @@ class OC_SETUP {
 				OC_GROUP::createGroup('admin');
 				OC_GROUP::addToGroup($username, 'admin');
 
-				foreach( array( "files_imageviewer", "files_publiclink" ) as $app ){
-
-					if(is_file("$SERVERROOT/apps/$app/appinfo/database.xml")){
-						OC_DB::createDbFromStructure("$SERVERROOT/apps/$app/appinfo/database.xml");
-					}
-
-					//run appinfo/install.php
-					if(is_file("$SERVERROOT/apps/$app/appinfo/install.php")){
-						include("$SERVERROOT/apps/$app/appinfo/install.php");
-					}
-
-					$info=OC_APP::getAppInfo("$SERVERROOT/apps/$app/appinfo/info.xml");
-					OC_APPCONFIG::setValue($app,'installed_version',$info['version']);
-					OC_APPCONFIG::setValue($app,'enabled','yes');
-				}
+				//guess what this does
+				self::installShippedApps();
 
 				//create htaccess files for apache hosts
 				self::createHtaccess(); //TODO detect if apache is used
@@ -198,6 +186,32 @@ class OC_SETUP {
 		$content = "deny from all";
 		file_put_contents(OC_CONFIG::getValue('datadirectory', $SERVERROOT.'/data').'/.htaccess', $content);
 	}
+
+	private static function installShippedApps(){
+		global $SERVERROOT;
+		$dir = opendir( "$SERVERROOT/apps" );
+		while( false !== ( $filename = readdir( $dir ))){
+			if( substr( $filename, 0, 1 ) != '.' and is_dir("$SERVERROOT/apps/$filename") ){
+				if( file_exists( "$SERVERROOT/apps/$filename/appinfo/app.php" )){
+					if(!OC_INSTALLER::isInstalled($filename)){
+						//install the database
+						if(is_file("$SERVERROOT/apps/$filename/appinfo/database.xml")){
+							OC_DB::createDbFromStructure("$SERVERROOT/apps/$filename/appinfo/database.xml");
+						}
+
+						//run appinfo/install.php
+						if(is_file("$SERVERROOT/apps/$filename/appinfo/install.php")){
+							include("$SERVERROOT/apps/$filename/appinfo/install.php");
+						}
+						$info=OC_APP::getAppInfo("$SERVERROOT/apps/$filename/appinfo/info.xml");
+						OC_APPCONFIG::setValue($filename,'installed_version',$info['version']);
+						OC_APPCONFIG::setValue($filename,'enabled','yes');
+					}
+				}
+			}
+		}
+		closedir( $dir );
+	}
 }
 
 ?>
-- 
GitLab