From 730bca98b48384816792423e97c53de112ac8aeb Mon Sep 17 00:00:00 2001 From: Philipp Kapfer Date: Fri, 2 Aug 2013 15:44:56 +0200 Subject: [PATCH] Moved dependency checks to end of class files Dependency messages now appear below the configuration options instead of above Reworked dependency check method to support consolidated messages for multiple backends Conflicts: apps/files_external/lib/google.php apps/files_external/lib/swift.php apps/files_external/templates/settings.php --- apps/files_external/lib/amazons3.php | 12 + apps/files_external/lib/config.php | 89 +++++-- apps/files_external/lib/dropbox.php | 23 +- apps/files_external/lib/ftp.php | 24 +- apps/files_external/lib/google.php | 23 +- apps/files_external/lib/smb.php | 28 +- apps/files_external/lib/swift.php | 28 +- apps/files_external/lib/webdav.php | 23 +- apps/files_external/templates/settings.php | 294 ++++++++++----------- 9 files changed, 296 insertions(+), 248 deletions(-) diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index 969070360fe..352885121f9 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -560,4 +560,16 @@ class AmazonS3 extends \OC\Files\Storage\Common { return false; } } + + /** + * check if curl is installed + */ + public static function checkDependencies() { + if (function_exists('curl_init')) { + return true; + } else { + return array('curl'); + } + } + } diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 2112266efc4..242cdff911c 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -524,50 +524,85 @@ class OC_Mount_Config { * check dependencies */ public static function checkDependencies() { - $dependencyMessages = array(); + $dependencies = array(); foreach (OC_Mount_Config::$backends as $class => $backend) { if (isset($backend['has_dependencies']) and $backend['has_dependencies'] === true) { $result = $class::checkDependencies(); - if ($result !== true and OC_Mount_Config::findFirstSentence($dependencyMessages, $result) < 0) { - $dependencyMessages[] = $result; + if ($result !== true) { + foreach ($result as $key => $value) { + if (is_numeric($key)) { + OC_Mount_Config::addDependency($dependencies, $value, $backend['backend']); + } else { + OC_Mount_Config::addDependency($dependencies, $key, $backend['backend'], $value); + } + } } } } - if (count($dependencyMessages) > 0) { - return implode('
', $dependencyMessages); + if (count($dependencies) > 0) { + return OC_Mount_Config::generateDependencyMessage($dependencies); } return ''; } - /** - * Finds the first string in an array that has the same first sentence (or part thereof) - * as a given comparison string - * @param $arr array An array of strings - * @param $str string The string to find - * @return int The position of the first occurrence or -1 if not found - */ - private static function findFirstSentence($arr, $str) { - foreach ($arr as $i => $item) { - $itemPos = strpos($item, '.'); - $strPos = strpos($str, '.'); - - if ($itemPos < 0 && $strPos < 0) { - $itemPos = strpos($item, ','); - $strPos = strpos($str, ','); - - if ($itemPos < 0 && $strPos < 0) { - $itemPos = strlen($item); - $strPos = strlen($str); + private static function addDependency(&$dependencies, $module, $backend, $message=null) { + if (!isset($dependencies[$module])) { + $dependencies[$module] = array(); + } + + if ($message === null) { + $dependencies[$module][] = $backend; + } else { + $dependencies[$module][] = array('backend' => $backend, 'message' => $message); + } + } + + private static function generateDependencyMessage($dependencies) { + $l = new \OC_L10N('files_external'); + $dependencyMessage = ''; + foreach ($dependencies as $module => $backends) { + $dependencyGroup = array(); + foreach ($backends as $backend) { + if (is_array($backend)) { + $dependencyMessage .= '
' . $l->t('Note: ') . $backend['message']; + } else { + $dependencyGroup[] = $backend; } } - if ($itemPos === $strPos and strncasecmp($item, $str, $itemPos) === 0) { - return $i; + if (count($dependencyGroup) > 0) { + $backends = ''; + for ($i = 0; $i < count($dependencyGroup); $i++) { + if ($i > 0 && $i === count($dependencyGroup) - 1) { + $backends .= $l->t(' and '); + } elseif ($i > 0) { + $backends .= ', '; + } + $backends .= '' . $dependencyGroup[$i] . ''; + } + $dependencyMessage .= '
' . OC_Mount_Config::getSingleDependencyMessage($l, $module, $backends); } } + return $dependencyMessage; + } - return -1; + /** + * Returns a dependency missing message + * @param $l OC_L10N + * @param $module string + * @param $backend string + * @return string + */ + private static function getSingleDependencyMessage($l, $module, $backend) { + switch (strtolower($module)) { + case 'curl': + return $l->t('Note: The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend); + case 'ftp': + return $l->t('Note: The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend); + default: + return $l->t('Note: "%s" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.', array($module, $backend)); + } } /** diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index f6a54bc0ca8..38de3360f2b 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -33,18 +33,6 @@ class Dropbox extends \OC\Files\Storage\Common { private static $tempFiles = array(); - /** - * check if curl is installed - */ - public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - $l = new \OC_L10N('files_external'); - return $l->t('Note: The cURL support in PHP is not enabled or installed. Mounting of Dropbox is not possible. Please ask your system administrator to install it.'); - } - } - public function __construct($params) { if (isset($params['configured']) && $params['configured'] == 'true' && isset($params['app_key']) @@ -323,4 +311,15 @@ class Dropbox extends \OC\Files\Storage\Common { return true; } + /** + * check if curl is installed + */ + public static function checkDependencies() { + if (function_exists('curl_init')) { + return true; + } else { + return array('curl'); + } + } + } diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php index a6a775ff6d1..b3f8b1444ae 100644 --- a/apps/files_external/lib/ftp.php +++ b/apps/files_external/lib/ftp.php @@ -17,18 +17,6 @@ class FTP extends \OC\Files\Storage\StreamWrapper{ private static $tempFiles=array(); - /** - * check if php-ftp is installed - */ - public static function checkDependencies() { - if (function_exists('ftp_login')) { - return(true); - } else { - $l = new \OC_L10N('files_external'); - return $l->t('Note: The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it.'); - } - } - public function __construct($params) { if (isset($params['host']) && isset($params['user']) && isset($params['password'])) { $this->host=$params['host']; @@ -131,4 +119,16 @@ class FTP extends \OC\Files\Storage\StreamWrapper{ unlink($tmpFile); } } + + /** + * check if php-ftp is installed + */ + public static function checkDependencies() { + if (function_exists('ftp_login')) { + return(true); + } else { + return array('ftp'); + } + } + } diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index cfb7005c4c7..56c0d451651 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -41,18 +41,6 @@ class Google extends \OC\Files\Storage\Common { const DRAWING = 'application/vnd.google-apps.drawing'; const PRESENTATION = 'application/vnd.google-apps.presentation'; - /** - * check if curl is installed - */ - public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - $l = new \OC_L10N('files_external'); - return $l->t('Note: The cURL support in PHP is not enabled or installed. Mounting of Google Drive is not possible. Please ask your system administrator to install it.'); - } - } - public function __construct($params) { if (isset($params['configured']) && $params['configured'] === 'true' && isset($params['client_id']) && isset($params['client_secret']) @@ -598,4 +586,15 @@ class Google extends \OC\Files\Storage\Common { return false; } + /** + * check if curl is installed + */ + public static function checkDependencies() { + if (function_exists('curl_init')) { + return true; + } else { + return array('curl'); + } + } + } diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 6fb262323ff..3ef13b633a9 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -17,20 +17,6 @@ class SMB extends \OC\Files\Storage\StreamWrapper{ private $root; private $share; - /** - * check if smbclient is installed - */ - public static function checkDependencies() { - if (function_exists('shell_exec')) { - $output = shell_exec('which smbclient'); - if (!empty($output)) { - return true; - } - } - $l = new \OC_L10N('files_external'); - return $l->t('Note: "smbclient" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it.'); - } - public function __construct($params) { if (isset($params['host']) && isset($params['user']) && isset($params['password']) && isset($params['share'])) { $this->host=$params['host']; @@ -148,4 +134,18 @@ class SMB extends \OC\Files\Storage\StreamWrapper{ } return $lastCtime; } + + /** + * check if smbclient is installed + */ + public static function checkDependencies() { + if (function_exists('shell_exec')) { + $output = shell_exec('which smbclient'); + if (!empty($output)) { + return true; + } + } + return array('smbclient'); + } + } diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index a66d53fc1a8..a202d3843cb 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -65,16 +65,16 @@ class Swift extends \OC\Files\Storage\Common { return $path; } + const SUBCONTAINER_FILE='.subcontainers'; + /** - * check if curl is installed + * translate directory path to container name + * @param string $path + * @return string */ - public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - $l = new \OC_L10N('files_external'); - return $l->t('Note: The cURL support in PHP is not enabled or installed. Mounting of OpenStack Swift is not possible. Please ask your system administrator to install it.'); - } + private function getContainerName($path) { + $path=trim(trim($this->root, '/') . "/".$path, '/.'); + return str_replace('/', '\\', $path); } /** @@ -502,4 +502,16 @@ class Swift extends \OC\Files\Storage\Common { ), $tmpFile); unlink($tmpFile); } + + /** + * check if curl is installed + */ + public static function checkDependencies() { + if (function_exists('curl_init')) { + return true; + } else { + return array('curl'); + } + } + } diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 0ea7a085041..b43c65e8e6c 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -23,18 +23,6 @@ class DAV extends \OC\Files\Storage\Common { private static $tempFiles = array(); - /** - * check if curl is installed - */ - public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - $l = new \OC_L10N('files_external'); - return $l->t('Note: The cURL support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV is not possible. Please ask your system administrator to install it.'); - } - } - public function __construct($params) { if (isset($params['host']) && isset($params['user']) && isset($params['password'])) { $host = $params['host']; @@ -397,5 +385,16 @@ class DAV extends \OC\Files\Storage\Common { return false; } } + + /** + * check if curl is installed + */ + public static function checkDependencies() { + if (function_exists('curl_init')) { + return true; + } else { + return array('curl'); + } + } } diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index e8815acaf16..84d9d3408d1 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -1,170 +1,162 @@ -
-

t('External Storage')); ?>

- '')) print_unescaped(''.$_['dependencies'].''); ?> - '> - + +
+ t('External Storage')); ?> +
'> + - '.$l->t('Available for').''); ?> + '.$l->t('Applicable').''); ?> - - - array())); ?> - - > - - - - + array())); ?> + $mount): ?> + > + - - - - + + + + + + - - - - - - - -
t('Folder name')); ?> t('External storage')); ?> t('Configuration')); ?>  
- - - - - + +
+ + + - - $value): ?> - - - - class="optional" - data-parameter="" - value="" - placeholder="" /> - - - - - - class="optional" - data-parameter="" - value="" - placeholder="" /> + + + + + $value): ?> + + + + + + + + + + + + + + + + - - - - - ' - data-applicable-users=''> - class="remove" - style="visibility:hidden;" - ><?php p($l->t('Delete')); ?>
-
- - + + ' + data-applicable-users=''> + + + + class="remove" + style="visibility:hidden;" + ><?php p($l->t('Delete')); ?> + + + + + '')) print_unescaped(''.$_['dependencies'].''); ?>
- /> - -

class="hidden"> - t('Allow users to mount the following external storage')); ?>
- $backend): ?> - /> -
- - -

- + +
+ /> +
+ t('Allow users to mount their own external storage')); ?> + +
-
-

t('SSL root certificates'));?>

- '> - - - - - - - - -
class="remove" - style="visibility:hidden;" - ><?php p($l->t('Delete')); ?>
- - - -
+
+
+ t('SSL root certificates'));?> + '> + + + + + + + + +
class="remove" + style="visibility:hidden;" + ><?php p($l->t('Delete')); ?>
+ + + +
+
-- 2.39.5