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')); ?>
+ + + +
+