From d485a70e7df602e85506ad94103df00f8bb3f765 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Fri, 6 Jan 2012 19:08:35 +0100 Subject: [PATCH] finish the application store feature so that users can download and install ownCloud apps from our website. there is still a small problem with write permissions. will look into this later --- lib/app.php | 11 ++++++++++- lib/ocsclient.php | 27 +++++++++++++++++++++++++++ settings/apps.php | 32 ++++++++++++++++---------------- 3 files changed, 53 insertions(+), 17 deletions(-) diff --git a/lib/app.php b/lib/app.php index b1aa8ba354..1873e1136c 100644 --- a/lib/app.php +++ b/lib/app.php @@ -94,7 +94,15 @@ class OC_App{ */ public static function enable( $app ){ if(!OC_Installer::isInstalled($app)){ - OC_Installer::installShippedApp($app); + // check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string + if(!is_numeric($app)){ + OC_Installer::installShippedApp($app); + }else{ + $download=OC_OCSClient::getApplicationDownload($app,1); + if(isset($download['downloadlink']) and $download['downloadlink']<>'') { + OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink'])); + } + } } OC_Appconfig::setValue( $app, 'enabled', 'yes' ); } @@ -107,6 +115,7 @@ class OC_App{ * This function set an app as disabled in appconfig. */ public static function disable( $app ){ + // check if app is a shiped app or not. if not delete OC_Appconfig::setValue( $app, 'enabled', 'no' ); } diff --git a/lib/ocsclient.php b/lib/ocsclient.php index 072fd236fe..9d5932fb72 100644 --- a/lib/ocsclient.php +++ b/lib/ocsclient.php @@ -130,6 +130,33 @@ class OC_OCSClient{ return $app; } + /** + * @brief Get the download url for an application from the OCS server + * @returns array with application data + * + * This function returns an download url for an applications from the OCS server + */ + public static function getApplicationDownload($id,$item){ + $url='http://api.apps.owncloud.com/v1/content/download/'.urlencode($id).'/'.urlencode($item); + + $xml=@file_get_contents($url); + if($xml==FALSE){ + OC_Log::write('core','Unable to parse OCS content',OC_Log::FATAL); + return NULL; + } + $data=simplexml_load_string($xml); + + $tmp=$data->data->content; + $app=array(); + if(isset($tmp->downloadlink)) { + $app['downloadlink']=$tmp->downloadlink; + }else{ + $app['downloadlink']=''; + } + return $app; + } + + /** * @brief Get all the knowledgebase entries from the OCS server * @returns array with q and a data diff --git a/settings/apps.php b/settings/apps.php index 12a7bf7720..40b72639cd 100644 --- a/settings/apps.php +++ b/settings/apps.php @@ -51,22 +51,22 @@ function app_sort($a, $b){ } usort($apps, 'app_sort'); -// dissabled for now -// $catagoryNames=OC_OCSClient::getCategories(); -// if(is_array($catagoryNames)){ -// $categories=array_keys($catagoryNames); -// $externalApps=OC_OCSClient::getApplications($categories); -// foreach($externalApps as $app){ -// $apps[]=array( -// 'name'=>$app['name'], -// 'id'=>$app['id'], -// 'active'=>false, -// 'description'=>$app['description'], -// 'author'=>$app['personid'], -// 'license'=>$app['license'], -// ); -// } -// } +// apps from external repo via OCS + $catagoryNames=OC_OCSClient::getCategories(); + if(is_array($catagoryNames)){ + $categories=array_keys($catagoryNames); + $externalApps=OC_OCSClient::getApplications($categories); + foreach($externalApps as $app){ + $apps[]=array( + 'name'=>$app['name'], + 'id'=>$app['id'], + 'active'=>false, + 'description'=>$app['description'], + 'author'=>$app['personid'], + 'license'=>$app['license'], + ); + } + }