From a62e109e8cafe710f7bf47c86815e34106852285 Mon Sep 17 00:00:00 2001
From: Frank Karlitschek <karlitschek@kde.org>
Date: Thu, 23 Feb 2012 15:37:38 +0100
Subject: [PATCH] =?UTF-8?q?make=20the=20location=20of=20the=203rdparty=20f?=
 =?UTF-8?q?older=20flexible.=20It=C2=B4s=20automatically=20search=20in=20t?=
 =?UTF-8?q?he=20owncloud=20folder=20and=20in=20the=20parent=20folder.=20ov?=
 =?UTF-8?q?erride=20with=20an=20option=20in=20config.php=20is=20also=20pos?=
 =?UTF-8?q?sible?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 apps/calendar/ajax/events.php |  2 +-
 config/config.sample.php      |  2 ++
 lib/base.php                  | 33 ++++++++++++++++++++++++++++++++-
 lib/template.php              | 22 +++++++++++++++++++---
 4 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php
index 7734129bd9..1436f63431 100755
--- a/apps/calendar/ajax/events.php
+++ b/apps/calendar/ajax/events.php
@@ -7,7 +7,7 @@
  */
 
 require_once ('../../../lib/base.php');
-require_once('../../../3rdparty/when/When.php');
+require_once('when/When.php');
 
 function create_return_event($event, $vevent){
 	$return_event = array();
diff --git a/config/config.sample.php b/config/config.sample.php
index cd52535871..5206737455 100755
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -13,6 +13,8 @@ $CONFIG = array(
 "forcessl" => false,
 "enablebackup" => false,
 "theme" => "",
+"3rdpartyroot" => "",
+"3rdpartyurl" => "",
 // "datadirectory" => ""
 );
 ?>
diff --git a/lib/base.php b/lib/base.php
index 880645ff79..a95c9d2b21 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -54,6 +54,14 @@ class OC{
 	 * the folder that stores the data for the root filesystem (e.g. /srv/http/owncloud/data)
 	 */
 	public static $CONFIG_DATADIRECTORY_ROOT = '';
+	/**
+	 * The installation path of the 3rdparty folder on the server (e.g. /srv/http/owncloud/3rdparty)
+	 */
+	public static $THIRDPARTYROOT = '';
+	/**
+	 * the root path of the 3rdparty folder for http requests (e.g. owncloud/3rdparty)
+	 */
+	public static $THIRDPARTYWEBROOT = '';
 
 	/**
 	 * SPL autoload
@@ -138,12 +146,35 @@ class OC{
 		}
 		OC::$WEBROOT=substr($scriptName,0,strlen($scriptName)-strlen(OC::$SUBURI));
 
+
 		if(OC::$WEBROOT!='' and OC::$WEBROOT[0]!=='/'){
 			OC::$WEBROOT='/'.OC::$WEBROOT;
 		}
 
+		// search the 3rdparty folder
+		if(OC_Config::getValue('3rdpartyroot', '')<>'' and OC_Config::getValue('3rdpartyurl', '')<>''){
+			OC::$THIRDPARTYROOT=OC_Config::getValue('3rdpartyroot', '');
+			OC::$THIRDPARTYWEBROOT=OC_Config::getValue('3rdpartyurl', '');
+		}elseif(file_exists(OC::$SERVERROOT.'/3rdparty')){
+			OC::$THIRDPARTYROOT=OC::$SERVERROOT;
+			OC::$THIRDPARTYWEBROOT=OC::$WEBROOT;
+		}elseif(file_exists(OC::$SERVERROOT.'/../3rdparty')){
+			$url_tmp=explode('/',OC::$WEBROOT);	
+			$length=count($url_tmp);
+			unset($url_tmp[$length-1]); 
+			OC::$THIRDPARTYWEBROOT=implode('/',$url_tmp);
+			$root_tmp=explode('/',OC::$SERVERROOT);	
+			$length=count($root_tmp);
+			unset($root_tmp[$length-1]); 
+			OC::$THIRDPARTYROOT=implode('/',$root_tmp);
+		}else{
+			echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
+			exit;
+		}
+
+
 		// set the right include path
-		set_include_path(OC::$SERVERROOT.'/lib'.PATH_SEPARATOR.OC::$SERVERROOT.'/config'.PATH_SEPARATOR.OC::$SERVERROOT.'/3rdparty'.PATH_SEPARATOR.get_include_path().PATH_SEPARATOR.OC::$SERVERROOT);
+		set_include_path(OC::$SERVERROOT.'/lib'.PATH_SEPARATOR.OC::$SERVERROOT.'/config'.PATH_SEPARATOR.OC::$THIRDPARTYROOT.'/3rdparty'.PATH_SEPARATOR.get_include_path().PATH_SEPARATOR.OC::$SERVERROOT);
 
 		// Redirect to installer if not installed
 		if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
diff --git a/lib/template.php b/lib/template.php
index d991759fbc..5fe2eb7d6c 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -346,31 +346,41 @@ class OC_Template{
 
 			// Add the core js files or the js files provided by the selected theme
 			foreach(OC_Util::$scripts as $script){
-				if(is_file(OC::$SERVERROOT."/themes/$theme/apps/$script$fext.js" )){
+				// Is it in 3rd party?
+				if(is_file(OC::$THIRDPARTYROOT."/$script.js" )){
+					$page->append( "jsfiles", OC::$THIRDPARTYWEBROOT."/$script.js" );
+
+				// Is it in apps and overwritten by the theme?
+				}elseif(is_file(OC::$SERVERROOT."/themes/$theme/apps/$script$fext.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/themes/$theme/apps/$script$fext.js" );
 				}elseif(is_file(OC::$SERVERROOT."/themes/$theme/apps/$script.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/themes/$theme/apps/$script.js" );
 
+				// Is it part of an app?
 				}elseif(is_file(OC::$SERVERROOT."/apps/$script$fext.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/apps/$script$fext.js" );
 				}elseif(is_file(OC::$SERVERROOT."/apps/$script.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/apps/$script.js" );
 
+				// Is it in the owncloud root but overwritten by the theme?
 				}elseif(is_file(OC::$SERVERROOT."/themes/$theme/$script$fext.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/themes/$theme/$script$fext.js" );
 				}elseif(is_file(OC::$SERVERROOT."/themes/$theme/$script.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/themes/$theme/$script.js" );
-
+	
+				// Is it in the owncloud root ?
 				}elseif(is_file(OC::$SERVERROOT."/$script$fext.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/$script$fext.js" );
 				}elseif(is_file(OC::$SERVERROOT."/$script.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/$script.js" );
 
+				// Is in core but overwritten by a theme?
 				}elseif(is_file(OC::$SERVERROOT."/themes/$theme/core/$script$fext.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/themes/$theme/core/$script$fext.js" );
 				}elseif(is_file(OC::$SERVERROOT."/themes/$theme/core/$script.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/themes/$theme/core/$script.js" );
 
+				// Is it in core?
 				}elseif(is_file(OC::$SERVERROOT."/core/$script$fext.js" )){
 					$page->append( "jsfiles", OC::$WEBROOT."/core/$script$fext.js" );
 				}else{
@@ -380,14 +390,20 @@ class OC_Template{
 			}
 			// Add the css files
 			foreach(OC_Util::$styles as $style){
-				if(is_file(OC::$SERVERROOT."/apps/$style$fext.css" )){
+				// is it in 3rdparty?
+				if(is_file(OC::$THIRDPARTYROOT."/$style.css" )){
+					$page->append( "cssfiles", OC::$THIRDPARTYWEBROOT."/$style.css" );
+				// or in apps?
+				}elseif(is_file(OC::$SERVERROOT."/apps/$style$fext.css" )){
 					$page->append( "cssfiles", OC::$WEBROOT."/apps/$style$fext.css" );
 				}elseif(is_file(OC::$SERVERROOT."/apps/$style.css" )){
 					$page->append( "cssfiles", OC::$WEBROOT."/apps/$style.css" );
+				// or in the owncloud root?
 				}elseif(is_file(OC::$SERVERROOT."/$style$fext.css" )){
 					$page->append( "cssfiles", OC::$WEBROOT."/$style$fext.css" );
 				}elseif(is_file(OC::$SERVERROOT."/$style.css" )){
 					$page->append( "cssfiles", OC::$WEBROOT."/$style.css" );
+				// or in core ?	
 				}elseif(is_file(OC::$SERVERROOT."/core/$style$fext.css" )){
 					$page->append( "cssfiles", OC::$WEBROOT."/core/$style$fext.css" );
 				}else{
-- 
GitLab